修改问题

master
sunzehua 1 year ago
parent 0e0c517014
commit 6c2a8e3a4d

@ -999,7 +999,15 @@ export function SubmitRule0pinion (parameter) {
export function BookingCustomerOrderPage (parameter) {
return axios({
url: 'BookingCustomerOrder/PageData',
url: '/BookingCustomerOrder/PageData',
method: 'post',
data: parameter
})
}
export function BookingCustomerOrderSave (parameter) {
return axios({
url: '/BookingCustomerOrder/Save',
method: 'post',
data: parameter
})

@ -145,3 +145,18 @@ export function UploadTempFile (parameter) {
data: parameter
})
}
/**
* 客户订舱下载文件
*
* @author zuohuaijun
* @date 2021/4/23 00:20
*/
export function BookingCustomerOrderGetFile (parameter) {
return axios({
url: '/BookingCustomerOrder/GetFile',
method: 'get',
params: parameter,
responseType: 'blob'
})
}

@ -1,6 +0,0 @@
@import "~ant-design-vue/lib/style/index";
// The prefix to use on all css classes from ant-pro.
@ant-pro-prefix : ant-pro;
@ant-global-sider-zindex : 106;
@ant-global-header-zindex : 105;

@ -1,13 +1,13 @@
<template>
<div class="main">
<div class="btn-list">
<a-button type="primary">保存</a-button>
<a-button type="primary" @click="handleSave"></a-button>
<a-button type="primary">复制</a-button>
<a-button type="primary">存为模板</a-button>
<a-button type="danger">删除</a-button>
<a-button type="primary">发送订舱</a-button>
</div>
<div>
<div class="box">
<a-form-model size="small" ref="basicFrom" :selfUpdate="true" :model="details" :rules="rules">
<a-row>
<a-col :span="'4-8'">
@ -18,7 +18,7 @@
:wrapperCol="wrapperCol"
has-feedback
prop="destination">
<inputView type="destination" size="small" :parentVal="details.destination" @getInputChange="inputChange" />
<a-input v-model="details.bsstatus" disabled />
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
@ -37,19 +37,26 @@
:searchQuery="{ keyword: '', type: 'consignor' }"
:showLabel="['cnName', 'code']"
:openSearch="false"
@change="getSelectViewRes"
style="flex: 1; margin-top: -4px"></selectView>
@change="getSelectViewRes"></selectView>
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="装货港"
label="起运港"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="portload">
<inputView type="portload" size="small" :parentVal="details.portload" @getInputChange="inputChange" />
prop="portloadid">
<selectView
type="portloadid"
:defaultVal="details.portloadid"
searchApi="GetPortloadlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['ediCode', 'enName']"
:openSearch="true"
:isCopy="true"
@change="getSelectViewRes"></selectView>
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
@ -59,8 +66,15 @@
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="destination">
<inputView type="destination" size="small" :parentVal="details.destination" @getInputChange="inputChange" />
prop="destinationid">
<selectView
type="destinationid"
:defaultVal="details.destinationid"
searchApi="GetPortlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['ediCode', 'enName']"
:openSearch="true"
@change="getSelectViewRes"></selectView>
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
@ -77,9 +91,7 @@
:parentVal="details.etd"
type="etd"
format="YYYY-MM-DD"
@dateChange="dateChangeFun"
style="margin-top: -5px"></datePickerView>
<span class="week" v-if="etdWeek && etdWeek !== 'NaN'">W{{ etdWeek || '--' }}</span>
@dateChange="dateChangeFun"></datePickerView>
</div>
</a-form-model-item>
</a-col>
@ -176,19 +188,19 @@
<a-form-model-item
class="from-label"
label="选择所需服务项目"
prop="serviceItemList"
has-feedback
:labelCol="{
xs: { span: 24 },
sm: { span: 2 },
sm: { span: 4 },
md: { span: 2 }
}"
:wrapperCol="{
xs: { span: 24 },
sm: { span: 21 },
sm: { span: 17 },
md: { span: 21 }
}"
prop="destination">
<a-checkbox-group v-model="details.value" name="checkboxgroup" :options="options" />
}">
<a-checkbox-group v-model="details.serviceList" name="checkboxgroup" :options="options" />
</a-form-model-item>
</a-col>
</a-row>
@ -196,18 +208,6 @@
<a-col :span="8">
<a-form-model-item has-feedback prop="shipper" class="sender-label" style="overflow: hidden">
<div class="sender">
<a-tooltip v-if="details.carrierid === 'PIL'">
<template slot="title">
<p>PIL要求 EDI和ESI报文只允许所有报文中的每个record中的ascii代码必须小于0x7E大于等于0x20, 每个Record必须250字节,必填项为数值类型的不足位数用0补齐
</p>
<p>1发货人Rec16收货人Rec21通知人Rec26: 公司抬头两行地址三行每行35字节</p>
<p>2第1/2行是公司抬头栏字段23-92总共70字节不足70字节请留空占位</p>
<p>3第3/4/5行是地址栏字段93-197总共105字节超过105字节通过星号*链接去rec47品名栏显示</p>
<p>4极个别情况下公司抬头可能超过70字节超出部分放在第三行</p>
<p> 5无论什么情况报文里地址信息都不放在在第1/2两行即不占23-92字段</p>
</template>
<div class="move-btn"><a-icon type="info-circle" /></div>
</a-tooltip>
<div class="top" :class="{ required: rules['shipper'] && rules['shipper'][0].required }">
<div class="name"><span
@click="handleOpen(1)"
@ -226,12 +226,6 @@
<a-button class="save-btn" type="link" size="small" icon="save" @click="saveModel('shipper')">
保存
</a-button>
<div class="right">
<span class="btn-circle" @click="spliceMore('shipper')" :style="{ fontSize: '14px' }">*</span>
<span class="btn" @click="changeCode(35, 'shipper')">35</span>
<span class="btn" @click="changeCode(40, 'shipper')">40</span>
<span class="btn" @click="changeCode(50, 'shipper')">50</span>
</div>
</div>
<div class="bottom">
<textareaView
@ -274,12 +268,6 @@
size="small"
icon="save"
@click="saveModel('consignee')">保存</a-button>
<div class="right">
<span class="btn-circle" @click="spliceMore('consignee')" :style="{ fontSize: '14px' }">*</span>
<span class="btn" @click="changeCode(35, 'consignee')">35</span>
<span class="btn" @click="changeCode(40, 'consignee')">40</span>
<span class="btn" @click="changeCode(50, 'consignee')">50</span>
</div>
</div>
<div class="bottom">
<textareaView
@ -326,12 +314,6 @@
size="small"
icon="save"
@click="saveModel('notifyparty')">保存</a-button>
<div class="right">
<span class="btn-circle" @click="spliceMore('notifyparty')" :style="{ fontSize: '14px' }">*</span>
<span class="btn" @click="changeCode(35, 'notifyparty')">35</span>
<span class="btn" @click="changeCode(40, 'notifyparty')">40</span>
<span class="btn" @click="changeCode(50, 'notifyparty')">50</span>
</div>
</div>
<div class="bottom">
<textareaView
@ -455,56 +437,151 @@
</a-col>
</a-row>
<a-row>
<vxe-table
border
ref="xTable"
style="width: 50%;margin-top: 20px;"
:data="ctnList">
<vxe-column field="no" title="序号">
<template #default="{ row,rowIndex }">
{{ rowIndex+1 }}
</template>
</vxe-column>
<vxe-column field="ctnall" title="箱型">
<template #default="{ row }">
<a-select
size="small"
showSearch
allow-clear
v-model="row.ctnall"
:filter-option="filterOption1">
<a-select-option v-for="(item,index1) in ctnallList" :key="index1" :value="item.code">{{ item.name }}</a-select-option>
</a-select>
</template>
</vxe-column>
<vxe-column field="ctnnum" title="数量">
<template #default="{ row }">
<a-input-number v-model="row.ctnnum" :min="0" :step="1" />
</template>
</vxe-column>
<vxe-column field="oper" title="操作">
<template #default="{ row,rowIndex }">
<a-icon @click="handlePushCtn(row)" style="font-size: 30px;" type="plus-square" theme="filled" />
<a-icon @click="handleReduceCtn(rowIndex )" style="font-size: 30px;" type="minus-square" theme="filled" />
</template>
</vxe-column>
</vxe-table>
</a-row>
<a-row style="margin-top: 20px;">
<a-upload
:customRequest="customRequest"
:showUploadList="false"
:multiple="true"
name="file">
<a-button>
<a-icon type="upload" />上传文件
</a-button>
</a-upload>
<div v-for="(item,index) in fileList" class="fileList" :key="index">
<span>{{ item.name }}</span>
<a-icon @click="handleDetleFile(index)" type="delete" />
</div>
<a-col :span="8">
<vxe-table border ref="xTable" style="margin-top: 20px;" :data="details.ctnList">
<vxe-column width="60" field="no" title="序号">
<template #default="{ row, rowIndex }">
{{ rowIndex + 1 }}
</template>
</vxe-column>
<vxe-column field="ctnall" title="箱型">
<template #default="{ row }">
<a-select size="small" showSearch allow-clear v-model="row.ctnall" :filter-option="filterOption1">
<a-select-option v-for="(item, index1) in ctnallList" :key="index1" :value="item.code">{{ item.name
}}</a-select-option>
</a-select>
</template>
</vxe-column>
<vxe-column field="ctnnum" title="数量">
<template #default="{ row }">
<a-input-number v-model="row.ctnnum" :min="0" :step="1" />
</template>
</vxe-column>
<vxe-column width="100" field="oper" title="操作">
<template #default="{ row, rowIndex }">
<a-icon @click="handlePushCtn(row)" style="font-size: 30px;" type="plus-square" theme="filled" />
<a-icon
@click="handleReduceCtn(rowIndex)"
style="font-size: 30px;"
type="minus-square"
theme="filled" />
</template>
</vxe-column>
</vxe-table>
</a-col>
<a-col style="margin-top: 28px;" :span="16">
<a-row v-if="details.cargoid == 'R'">
<a-col :span="8">
<a-form-model-item
class="pre-from-label"
label="温度"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="tempset">
<div class="line-box">
<inputView
type="tempset"
:ishd="details.cargoid !== 'R'"
size="small"
:parentVal="details.tempset"
@getInputChange="inputChange" />
</div>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
class="from-label"
label="单位"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="tempid">
<a-select size="small" :default-value="details.tempid || 'C'" v-model="details.tempid">
<a-select-option value="C"> C摄氏 </a-select-option>
<a-select-option value="F"> F华氏 </a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
class="from-label"
label="通风"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="reeferf">
<inputView type="reeferf" size="small" :parentVal="details.reeferf" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
</a-row>
<a-row v-if="details.cargoid == 'D'">
<a-col :span="6">
<a-form-model-item
class="from-label"
label="危险品编号"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="dunno">
<inputView type="dunno" size="small" :parentVal="details.dunno" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="6">
<a-form-model-item
class="from-label"
label="危险品等级"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="dclass">
<inputView type="dclass" size="small" :parentVal="details.dclass" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="6">
<a-form-model-item
class="from-label"
label="危险品联系人"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="linkman">
<inputView type="linkman" size="small" :parentVal="details.linkman" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="6">
<a-form-model-item
class="from-label"
label="危险品联系电话"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="linkman">
<inputView type="linkman" size="small" :parentVal="details.linkman" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
</a-row>
<a-row style="display: flex;" v-if="details.cargoid == 'D'">
<a-upload
:customRequest="customRequest"
:showUploadList="false"
:multiple="true"
style="margin-left: 30px;margin-top: 10px;"
name="file">
<a-button>
<a-icon type="upload" />上传文件
</a-button>
</a-upload>
<div>
<div v-for="(item, index) in fileList" class="fileList" :key="index">
<span @click="handleDownFile(item)">{{ item.name }}</span>
<a-icon @click.stop="handleDetleFile(index)" type="delete" />
</div>
</div>
</a-row>
</a-col>
</a-row>
</a-form-model>
</div>
</div>
@ -516,30 +593,9 @@ import selectView from './components/selectView'
import datePickerView from './components/datePickerView'
import autoView from './components/autoView'
import textareaView from './components/textareaView'
import { UploadTempFile } from '@/api/modular/system/fileManage'
import { UploadTempFile, BookingCustomerOrderGetFile } from '@/api/modular/system/fileManage'
import { BookingCustomerOrderSave } from '@/api/modular/main/BookingLedger'
import { mapGetters } from 'vuex'
const columns = [
{
title: '序号',
key: 'no',
scopedSlots: { customRender: 'no' }
},
{
title: '箱型',
key: 'ctnall',
scopedSlots: { customRender: 'ctnall' }
},
{
title: '数量',
key: 'ctnnum',
scopedSlots: { customRender: 'ctnnum' }
},
{
title: '操作',
key: 'oper',
scopedSlots: { customRender: 'oper' }
}
];
export default {
components: {
XCard,
@ -552,20 +608,13 @@ export default {
computed: {
...mapGetters(['packageList', 'ctnallList'])
},
mounted() {
this.init()
},
data() {
return {
columns,
fileList: [],
ctnList: [{ oper: '' }],
options: [
{ label: '派车', value: 'Apple' },
{ label: '截单', value: 'Pear' },
{ label: 'VGM', value: '1' },
{ label: '预配舱单', value: '2' },
{ label: '国外舱单', value: '3' },
{ label: '保险', value: '4' },
{ label: '派车', value: '5' }
],
options: [],
labelCol: {
xs: { span: 24 },
sm: { span: 8 },
@ -581,11 +630,59 @@ export default {
notifypartyname: '',
foreignAgentname: '',
etdWeek: '',
details: {},
details: {
shipper: '',
notifyparty: '',
consignee: '',
ctnList: [{ oper: '' }]
},
rules: {}
}
},
methods: {
init() {
this.options = this.$options.filters['dictData']('booking_service_item')
this.options.forEach(item => {
item.label = item.name
item.value = item.id
})
const shipperScroll = document.getElementById('shipper-scroll')
if (shipperScroll) {
shipperScroll.addEventListener('scroll', () => {
document.getElementById('shipper-scroll-right').scrollTop = shipperScroll.scrollTop
})
}
const consigneeScroll = document.getElementById('consignee-scroll')
consigneeScroll.addEventListener('scroll', () => {
document.getElementById('consignee-scroll-right').scrollTop = consigneeScroll.scrollTop
})
const notifypartyScroll = document.getElementById('notifyparty-scroll')
notifypartyScroll.addEventListener('scroll', () => {
document.getElementById('notifyparty-scroll-right').scrollTop = notifypartyScroll.scrollTop
})
},
handleDownFile(row) {
const data = {
id: row.id
}
BookingCustomerOrderGetFile(data).then(res => {
var blob = new Blob([res.data], { type: 'application/octet-stream;charset=UTF-8' })
var contentDisposition = res.headers['content-disposition']
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
var result = patt.exec(contentDisposition)
var filename = result[1]
var downloadElement = document.createElement('a')
var href = window.URL.createObjectURL(blob) //
var reg = /^["](.*)["]$/g
downloadElement.style.display = 'none'
downloadElement.href = href
downloadElement.download = decodeURI(filename.replace(reg, '$1')) //
document.body.appendChild(downloadElement)
downloadElement.click() //
document.body.removeChild(downloadElement) //
window.URL.revokeObjectURL(href)
})
},
toNotifyparty() {
this.details.notifyparty = this.details.consignee
this.$forceUpdate()
@ -599,7 +696,7 @@ export default {
},
handlePushCtn() {
const data = { oper: '' }
this.ctnList.push(data)
this.details.ctnList.push(data)
},
filterOption1(input, option) {
return (
@ -612,15 +709,6 @@ export default {
getSelectViewRes({ type, res }) {
if (['issuetype', 'blfrt'].includes(type)) {
this.details[type] = res.enName || ''
if (type === 'blfrt') {
if (this.details.blfrt === 'FREIGHT COLLECT') {
this.details.payableat = this.details.payableat ? this.details.payableat : this.details.portdischarge || ''
this.details.payableatid = this.details.payableatid ? this.details.payableatid : this.details.portdischargeid || ''
} else {
this.details.prepardat = this.details.prepardat ? this.details.prepardat : this.details.portload || ''
this.details.prepardatid = this.details.prepardatid ? this.details.prepardatid : this.details.portloadid || ''
}
}
} else if (['issueplace', 'prepardat', 'payableat'].includes(type)) {
this.details[type] = res.enName || ''
this.details[`${type}id`] = res.ediCode || ''
@ -689,6 +777,13 @@ export default {
this.$emit('pkgsEnCapital', enCapitalRes)
} else if (['shippingMethod'].includes(type)) {
this.details.shippingMethod = res['name'] || ''
} else if (type === 'goodsname') {
this.details.goodscode = res.goodsCode || ''
this.details.goodsname = res.goodsNameEN || ''
} else if (type === 'cargoid') {
this.details.cargoid = res.code || ''
this.$forceUpdate()
console.log(this.details)
}
},
dateChangeFun({ type, value }) {
@ -700,6 +795,25 @@ export default {
}, 600)
}
},
getWeek(dateTime) {
// eslint-disable-next-line camelcase
const temp_ms = new Date(dateTime).getTime()
const temptTime = new Date(temp_ms)
const weekday = temptTime.getDay() & 7
temptTime.setDate(temptTime.getDate() - weekday + 1 + 5)
let firstDay = new Date(temptTime.getFullYear(), 0, 1)
const dayOfWeek = firstDay.getDay()
let spendDay = 1
if (dayOfWeek !== 0) {
spendDay = 7 - dayOfWeek + 1
}
const yearOfW = temptTime.getFullYear()
firstDay = new Date(yearOfW, 0, 1 + spendDay)
const d = Math.ceil((temptTime.valueOf() - firstDay.valueOf()) / 86400000)
const res = Math.ceil(d / 7) + 1
const weekOfNow = res.toString()
return weekOfNow
},
enmuType(val) {
switch (val) {
case 'shipper':
@ -717,6 +831,7 @@ export default {
}
},
getTextareaChange({ type, value }) {
console.log(type, value)
let val = ''
for (var i in value) {
let k = ''
@ -730,7 +845,7 @@ export default {
this.details[type] = val
this.$forceUpdate()
},
customRequest(data) {
customRequest(data) {
const formData = new FormData()
formData.append('file', data.file)
UploadTempFile(formData, (percent) => this.setUploadProcess(percent)).then((res) => {
@ -745,6 +860,34 @@ export default {
this.$message.error('上传失败:' + res.message)
}
})
},
handleSave() {
console.log(this.details)
const data = {
...this.details
}
if (this.details.serviceList.length > 0) {
const arr = []
this.options.forEach(item => {
this.details.serviceList.forEach(ite => {
if (item.id === ite) {
arr.push({
code: item.code,
value: item.name
})
}
})
})
data.serviceItemList = arr
}
if (data.cargoid === 'D') {
data.tempFileNames = this.fileList.map(item => {
return item.id
})
}
BookingCustomerOrderSave(data).then(res => {
console.log(res)
})
}
}
@ -754,11 +897,20 @@ export default {
@import url('./style/mailingInfo.less');
.main {
background: white;
padding: 0 10px;
padding-top: 15px;
padding-bottom: 60px;
.box {
background: white;
padding: 10px;
position: relative;
z-index: 99;
}
.btn-list {
background: white;
padding: 10px;
margin-bottom: 15px;
button {
margin: 0 7px;
}
@ -772,9 +924,12 @@ export default {
.ant-form-item {
margin-bottom: 0px;
}
.fileList{
.fileList {
margin-top: 10px;
span{
margin-left: 30px;
span {
margin-right: 50px;
color: cornflowerblue;
cursor: pointer;

@ -1,488 +0,0 @@
<template>
<a-collapse class="collapse-box bill-info-box" :bordered="false" v-model="showKey">
<a-collapse-panel key="1" :showArrow="false">
<template slot="header">
<div class="base-tit"><i class="iconfont icon-electronic-signature"></i>签单信息 <span class="click-btn" @click.stop="tabStopFun"></span></div>
</template>
<template slot="extra">
<div class="tab-change"><i class="iconfont icon-xia" :class="{'active': !showKey.includes('1')}"></i></div>
</template>
<div class="container bill-info">
<a-form-model ref="billFrom" :model="details" :rules="rules">
<a-row :gutter="10">
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="签单方式"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="issuetype"
>
<selectView
type="issuetype"
:defaultVal="details.issuetype"
searchApi="Codeissuetypelist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName', 'cnName']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="签单日期"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="issuedate"
>
<datePickerView
class="date-picker"
:parentVal="details.issuedate"
type="issuedate"
format="YYYY-MM-DD"
@dateChange="dateChangeFun"
></datePickerView>
<!-- <a-date-picker size="small" v-model="details.issuedate" format="YYYY-MM-DD" /> -->
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="签单地点"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="issueplace"
>
<selectView
type="issueplace"
:defaultVal="details.issueplace"
searchApi="GetPortloadlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName']"
:openSearch="true"
:isCopy="true"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="签单地代码"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="issueplaceid"
>
<inputView type="issueplaceid" size="small" :parentVal="details.issueplaceid" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="提单份数"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="nobill"
>
<selectView
type="nobill"
:defaultVal="details.nobill"
searchApi="nobillData"
:searchQuery="{ name: '' }"
:showLabel="['name']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="副本份数"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="copynobill"
>
<selectView
type="copynobill"
:defaultVal="details.copynobill"
searchApi="copynobilllData"
:searchQuery="{ name: '' }"
:showLabel="['name']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="预付地点"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="prepardat"
>
<selectView
type="prepardat"
:defaultVal="details.prepardat"
searchApi="GetPortloadlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName']"
:openSearch="true"
:isCopy="true"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="到付地点"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="payableat"
>
<selectView
type="payableat"
:defaultVal="details.payableat"
searchApi="GetPortlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName']"
:openSearch="true"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="付费方式"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="blfrt"
>
<selectView
type="blfrt"
:defaultVal="details.blfrt"
searchApi="GetFrt"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="第三付款地"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="thirdpayaddr"
>
<inputView type="thirdpayaddr" size="small" :parentVal="details.thirdpayaddr" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="运输条款"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="service"
>
<selectView
type="service"
:defaultVal="details.service"
searchApi="GetService"
:searchQuery="{ KeyWord: '' }"
:showLabel="['name']"
:openSearch="true"
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
<template v-if="details.cargoid == 'R'">
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="冷藏通风量"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="reeferf"
>
<inputView type="reeferf" size="small" :parentVal="details.reeferf" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="设置温度"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="tempset"
>
<inputView type="tempset" size="small" :parentVal="details.tempset" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="温度单位"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="tempid"
>
<a-select size="small" :default-value="details.tempid || 'C'" v-model="details.tempid">
<a-select-option value="C"> C摄氏 </a-select-option>
<a-select-option value="F"> F华氏 </a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="最低温度"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="tempmin"
>
<inputView type="tempmin" size="small" :parentVal="details.tempmin" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="最高温度"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="tempmax"
>
<inputView type="tempmax" size="small" :parentVal="details.tempmax" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item class="from-label" label="湿度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback prop="humidity">
<inputView type="humidity" size="small" :parentVal="details.humidity" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
</template>
<template v-if="details.cargoid == 'D'">
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="危险品等级"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="dclass"
>
<inputView type="dclass" size="small" :parentVal="details.dclass" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="危险品编号"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="dunno"
>
<inputView type="dunno" size="small" :parentVal="details.dunno" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="危险品页号"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="dpage"
>
<inputView type="dpage" size="small" :parentVal="details.dpage" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="危险品标签"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="dlabel"
>
<inputView type="dlabel" size="small" :parentVal="details.dlabel" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
<a-form-model-item
class="from-label"
label="危险品联系人"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="linkman"
>
<inputView type="linkman" size="small" :parentVal="details.linkman" @getInputChange="inputChange"/>
</a-form-model-item>
</a-col>
</template>
</a-row>
</a-form-model>
</div>
</a-collapse-panel>
</a-collapse>
</template>
<script>
import inputView from '../components/inputView'
import selectView from '../components/selectView'
import datePickerView from '../components/datePickerView'
export default {
name: '',
components: {
selectView,
inputView,
datePickerView
},
props: {
details: {
type: Object,
default: () => {
return {}
}
},
rules: {
type: Object,
default: () => {
return {}
}
},
inSave: {
type: Boolean,
default: false
},
isParent: {
type: String,
default: ''
}
},
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 8 },
md: { span: 10 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 15 },
md: { span: 13 }
},
showKey: ['1']
}
},
watch: {
details: {
handler(nval, oval) {
if (!this.inSave) {
this.$emit('changeDetail', {
detail: nval,
type: 'billInfo'
})
}
this.$forceUpdate()
},
deep: true
},
'$route.query': {
immediate: true,
handler(nD, oD) {
this.id = this.$route.query.id
}
}
},
created() { },
methods: {
checkbasic () {
this.$refs.billFrom.validate(valid => {
if (valid) {
return true;
} else {
return false;
}
});
},
handleCopyNoChange(value) {
this.details.copynobill = value
},
handleNoChange(value) {
this.details.nobill = value
},
getSelectViewRes({ type, res }) {
if (['issuetype', 'blfrt'].includes(type)) {
this.details[type] = res.enName || ''
if (type === 'blfrt') {
if (this.details.blfrt === 'FREIGHT COLLECT') {
this.details.payableat = this.details.payableat ? this.details.payableat : this.details.portdischarge || ''
this.details.payableatid = this.details.payableatid ? this.details.payableatid : this.details.portdischargeid || ''
} else {
this.details.prepardat = this.details.prepardat ? this.details.prepardat : this.details.portload || ''
this.details.prepardatid = this.details.prepardatid ? this.details.prepardatid : this.details.portloadid || ''
}
}
} else if (['issueplace', 'prepardat', 'payableat'].includes(type)) {
this.details[type] = res.enName || ''
this.details[`${type}id`] = res.ediCode || ''
} else if (['service'].includes(type)) {
this.details[type] = res.name || ''
} else if (['nobill', 'copynobill'].includes(type)) {
this.details[type] = res.code || ''
}
},
inputChange({ type, value }) {
this.details[type] = value
this.$forceUpdate()
},
dateChangeFun ({ type, value }) {
this.details[type] = value || ''
},
tabStopFun () {
return false
},
tabChangeFun () {
}
}
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-explain{
display: none !important;
}
/deep/ .ant-form-item-children-icon .anticon-check-circle{
display: none;
}
</style>
<style lang="less" scoped>
@import url('../style/billInfo.less');
</style>

@ -1,340 +0,0 @@
<template>
<a-collapse class="collapse-box" :bordered="false" v-model="showKey">
<a-collapse-panel key="1" :showArrow="false">
<template slot="header">
<div class="base-tit"><i class="iconfont icon-goods"></i>货物信息 <span
class="click-btn"
@click.stop="tabStopFun"></span></div>
</template>
<template slot="extra">
<div class="tab-change"><i class="iconfont icon-xia" :class="{ 'active': !showKey.includes('1') }"></i></div>
</template>
<div class="container cargo-info">
<a-form-model :selfUpdate="true" ref="cargoFrom" :model="details" :rules="rules">
<a-row :gutter="20">
<a-col :span="8">
<div class="cargo-info-tit" :class="{ 'required': rules['marks'] && rules['marks'][0].required }">
<div>Seal No.(封志号)<span
@click="handleOpen(1)"
style="cursor: pointer;"
class="copy-btn iconfont icon-bianji"></span></div>
<div>Marks & Nos.(标记与号码)</div>
</div>
<a-form-model-item has-feedback prop="marks" class="textarea-label" label="">
<div class="bottom">
<textareaView
class="input-box"
id="marks-scroll"
:parentVal="details.marks"
type="marks"
:height="100"
:openToCDB="true"
@getTextareaChange="getTextareaChange" />
<div
class="line-count"
id="marks-scroll-right"
v-if="Object.keys(details).length > 1 && details.marks.length > 1">
<div v-for="(num, index) in details.marks.split('\n')" :key="index">{{ num.length }}</div>
</div>
</div>
</a-form-model-item>
</a-col>
<a-col :span="16">
<div class="line">
<div
class="left"
:class="{ 'required': rules['description'] && rules['description'][0].required }"
v-if="details.carrierid !== 'PIL'">
<div>Description of Goods</div>
<div>(包装种类与货名)<span
@click="handleOpen(2)"
style="cursor: pointer;"
class="copy-btn iconfont icon-bianji"></span></div>
</div>
<div class="left" v-else>
<div class="title" :class="{ 'required': rules['description'] && rules['description'][0].required }">
Description of Goods (包装种类与货名)<span
@click="handleOpen(2)"
style="cursor: pointer;color: black;"
class="copy-btn iconfont icon-bianji"></span></div>
<a-form-model-item
has-feedback
prop="goodsname"
label=""
:class="{ 'goods-name-box': rules['goodsname'] && rules['goodsname'][0].required }">
<i
class="icon required goods-required"
v-if="rules['goodsname'] && rules['goodsname'][0].required"></i>
<!-- :showLabel="['goodsNameEN', 'goodsCode']" -->
<selectView
type="goodsname"
:defaultVal="details.goodsname"
searchApi="getGoodsname"
:searchQuery="{ queryItem: '', top: 50 }"
:showLabel="['goodsNameEN', 'goodsCode']"
:openSearch="true"
@change="getSelectViewRes"
style="width: 75%;max-width:210px;"></selectView>
</a-form-model-item>
</div>
<div class="cargo-mark">
<div :class="{ 'required': rules['cargoid'] && rules['cargoid'][0].required }" class="tit">货物标志</div>
<a-form-model-item class="cargoid" has-feedback prop="cargoid" label="" style="margin-top:-6px;">
<selectView
type="cargoid"
:defaultVal="details.cargoid"
searchApi="cargoData"
:searchQuery="{ name: '' }"
:showLabel="['name']"
:openSearch="false"
@change="getSelectViewRes"
style="width: 120px;margin-top:7px;"></selectView>
</a-form-model-item>
</div>
<div class="input">
<div :class="{ 'required': rules['hscode'] && rules['hscode'][0].required }" calss="tit">HS编码</div>
<a-form-model-item class="cargoid" has-feedback prop="hscode" label="" style="margin-top:-2px;">
<!-- <a-input size="small" :allowClear="true" v-model="details.hscode" /> -->
<inputView type="hscode" size="small" :parentVal="details.hscode" @getInputChange="inputChange" />
</a-form-model-item>
</div>
</div>
<a-form-model-item has-feedback prop="description" class="textarea-label" label="">
<div class="bottom">
<textareaView
id="description-scroll"
class="input-box"
:parentVal="details.description"
type="description"
:height="100"
:openToCDB="true"
@getTextareaChange="getTextareaChange" />
<div
class="line-count"
id="description-scroll-right"
v-if="Object.keys(details).length > 1 && details.description.length > 1">
<div v-for="(num, index) in details.description.split('\n')" :key="index">{{ num.length }}</div>
</div>
</div>
</a-form-model-item>
</a-col>
<a-col class="num-box" :span="24">
<span class="label">件数大写: </span>
<a-input
:allowClear="true"
class="input-val num-box-right"
v-model="details.totalno"
disabled
placeholder="自动生成" />
</a-col>
</a-row>
</a-form-model>
</div>
<a-modal :title="modelTitle" :width="900" :visible="visible" @ok="visible = false" @cancel="visible = false">
<div>
<div v-if="modelType === 1" style="display: flex;">
<textareaView
class="input-box"
id="marks-scroll"
:parentVal="details.marks"
type="marks"
:height="500"
style="font-size:20px;margin-right: 10px;"
:openToCDB="true"
@getTextareaChange="getTextareaChange" />
<div
class="line-count"
id="marks-scroll-right"
v-if="Object.keys(details).length > 1 && details.marks.length > 1">
<div v-for="(num, index) in details.marks.split('\n')" :key="index">{{ num.length }}</div>
</div>
</div>
<div v-if="modelType === 2" style="display: flex;">
<textareaView
id="description-scroll"
class="input-box"
:parentVal="details.description"
type="description"
:height="500"
style="font-size:20px;margin-right: 10px;"
:openToCDB="true"
@getTextareaChange="getTextareaChange" />
<div
class="line-count"
id="description-scroll-right"
v-if="Object.keys(details).length > 1 && details.description.length > 1">
<div v-for="(num, index) in details.description.split('\n')" :key="index">{{ num.length }}</div>
</div>
</div>
</div>
</a-modal>
</a-collapse-panel>
</a-collapse>
</template>
<script>
import textareaView from '../components/textareaView'
import selectView from '../components/selectView'
import inputView from '../components/inputView'
let timer;
export default {
name: '',
components: {
textareaView,
selectView,
inputView
},
props: {
details: {
type: Object,
default: () => {
return {}
}
},
moreStr: {
type: String,
default: ''
},
rules: {
type: Object,
default: () => {
return {}
}
},
inSave: {
type: Boolean,
default: false
},
isParent: {
type: String,
default: ''
}
},
data() {
return {
showKey: ['1'],
modelTitle: '',
modelType: 0,
visible: false
// goodsnameData: []
}
},
watch: {
details: {
handler(nval, oval) {
if (!this.inSave) {
this.$emit('changeDetail', {
detail: nval,
type: 'cargoInfo'
})
}
},
deep: true
},
moreStr(nval, oval) {
if (nval !== oval) {
let str = this.details.description
if (str.length > 0) {
str += '\n'
}
this.details.description = str + nval
}
},
'$route.query': {
immediate: true,
handler(nD, oD) {
this.id = this.$route.query.id
}
}
},
created() { },
mounted() {
const marksScroll = document.getElementById('marks-scroll')
if (marksScroll) {
marksScroll.addEventListener('scroll', () => {
document.getElementById('marks-scroll-right').scrollTop = marksScroll.scrollTop
})
}
const descriptionScroll = document.getElementById('description-scroll')
if (descriptionScroll) {
descriptionScroll.addEventListener('scroll', () => {
document.getElementById('description-scroll-right').scrollTop = descriptionScroll.scrollTop
})
}
},
methods: {
handleOpen(type) {
this.modelType = type
if (type === 1) {
this.modelTitle = '唛头'
} else {
this.modelTitle = '货物描述'
}
this.visible = true
},
debounce(func, wait, ...args) {
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, wait);
},
checkbasic() {
this.$refs.cargoFrom.validate(valid => {
if (valid) {
console.log('验证成功!');
return true;
} else {
console.log('验证失败!');
return false;
}
});
},
handleChange(value) {
this.details.cargoid = value
},
getTextareaChange({ type, value }) {
this.details[type] = value
this.$forceUpdate()
},
getSelectViewRes({ type, res }) {
if (type === 'goodsname') {
this.details.goodscode = res.goodsCode || ''
this.details.goodsname = res.goodsNameEN || ''
} else if (type === 'cargoid') {
this.details.cargoid = res.code || ''
}
},
inputChange({ type, value }) {
this.details[type] = value
this.$forceUpdate()
},
tabStopFun() {
return false
},
tabChangeFun() {
}
}
}
</script>
<style lang="less" scoped>
.copy-btn {
margin-left: 10px;
&:hover {
color: @primary-color !important;
}
}
/deep/ .ant-form-explain {
display: none !important;
}
/deep/ .ant-form-item-children-icon .anticon-check-circle {
display: none;
}
</style>
<style lang="less" scoped>
@import url('../style/cargoInfo.less');
</style>

@ -1,713 +0,0 @@
<template>
<div class="more-edi" :style="{ paddingTop: '20px', paddingBottom: '10px' }">
<a-form-model ref="ediFrom" :model="details" :rules="rules" v-if="details">
<div class="normal">
<a-row :gutter="16">
<a-col :span="8">
<a-form-model-item
label="发送方EDI代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.sendCode"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.sendCode" /> -->
<inputView type="sendCode" :parentVal="details.bookingEDIExt.sendCode" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="接收方EDI代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.receiveCode"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.receiveCode" /> -->
<inputView
type="receiveCode"
:parentVal="details.bookingEDIExt.receiveCode"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="EDI联系人名称"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.ediAttn"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.ediAttn" /> -->
<inputView type="ediAttn" :parentVal="details.bookingEDIExt.ediAttn" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="EDI联系人电话"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.ediAttnTel"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.ediAttnTel" /> -->
<inputView
type="ediAttnTel"
:parentVal="details.bookingEDIExt.ediAttnTel"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="EDI联系人邮箱"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.ediAttnMail"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.ediAttnMail" /> -->
<inputView
type="ediAttnMail"
:parentVal="details.bookingEDIExt.ediAttnMail"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="AMS收货人"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.amsConsignee"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.amsConsignee" /> -->
<inputView
type="amsConsignee"
:parentVal="details.bookingEDIExt.amsConsignee"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="AMS通知人"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.amsNotifyParty"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.amsNotifyParty" /> -->
<inputView
type="amsNotifyParty"
:parentVal="details.bookingEDIExt.amsNotifyParty"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="操作英文名称"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.opEName"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.opEName" /> -->
<inputView type="opEName" :parentVal="details.bookingEDIExt.opEName" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="操作电话"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.opTel"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.opTel" /> -->
<inputView type="opTel" :parentVal="details.bookingEDIExt.opTel" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="操作邮箱"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.opEmail"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.opEmail" /> -->
<inputView type="opEmail" :parentVal="details.bookingEDIExt.opEmail" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="商品名称"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.goodsName"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.goodsName" /> -->
<inputView type="goodsName" :parentVal="details.bookingEDIExt.goodsName" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="SOC箱"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="iscontainersoc"
>
<a-select size="small" :default-value="iscontainersoc" style="width: 120px" v-model="iscontainersoc">
<a-select-option value="1"> </a-select-option>
<a-select-option value="0"> </a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="SCAC代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="scaccode"
>
<!-- <a-input :allowClear="true" v-model="details.scaccode" /> -->
<inputView type="scaccode" :parentVal="details.scaccode" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="ITN编号"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="itncode"
>
<!-- <a-input :allowClear="true" v-model="details.itncode" /> -->
<inputView type="itncode" :parentVal="details.itncode" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="订舱人说明"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.orderRemark"
>
<!-- <a-input v-model="details.bookingEDIExt.orderRemark" /> -->
<inputView
type="orderRemark"
:placeholder="'订舱人说明或ESL BP CODE'"
:parentVal="details.bookingEDIExt.orderRemark"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="付款方"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="freightpayer"
>
<!-- <a-input :allowClear="true" v-model="details.freightpayer" /> -->
<inputView type="freightpayer" :parentVal="details.freightpayer" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="第一层包装皮重"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.kingTareweight"
>
<inputView
type="kingTareweight"
:parentVal="details.bookingEDIExt.kingTareweight"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item
label="指定业务员"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.xmcywy"
>
<inputView
type="xmcywy"
:parentVal="details.bookingEDIExt.xmcywy"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col v-if="details.carrierid == 'EMC'" :span="8">
<a-form-model-item
label="Name accout"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.emcNameAccount"
>
<inputView
type="emcNameAccount"
:parentVal="details.bookingEDIExt.emcNameAccount"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="23">
<a-form-model-item
label="委托方"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 21 } }"
has-feedback
prop="bookingEDIExt.weiTuoFang"
style="margin-top:4px;"
>
<a-textarea
size="small"
v-model="details.bookingEDIExt.weiTuoFang"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
</a-row>
</div>
<div class="ex-remark">
<div class="title">
<span class="line left"></span>
<span class="text">业务备注</span>
<span class="line right"></span>
</div>
<div class="ex-remark-content">
<a-row :gutter="16">
<a-col :span="12">
<a-form-model-item
label="辅助字段1"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 17 } }"
has-feedback
prop="bookingEDIExt.exRemark1"
>
<a-textarea
size="small"
:allowClear="true"
v-model="details.bookingEDIExt.exRemark1"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="辅助字段2"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 17 } }"
has-feedback
prop="bookingEDIExt.exRemark2"
>
<a-textarea
size="small"
:allowClear="true"
v-model="details.bookingEDIExt.exRemark2"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="辅助字段3"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 17 } }"
has-feedback
prop="bookingEDIExt.exRemark3"
>
<a-textarea
size="small"
:allowClear="true"
v-model="details.bookingEDIExt.exRemark3"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="辅助字段4"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 17 } }"
has-feedback
prop="bookingEDIExt.exRemark4"
>
<a-textarea
size="small"
:allowClear="true"
v-model="details.bookingEDIExt.exRemark4"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
</a-row>
</div>
</div>
<!-- === 太平添加 start === -->
<template v-if="details.carrierid == 'PIL'">
<div class="taiping">
<a-row :gutter="16">
<a-col :span="12">
<a-form-model-item
label="收货人EDI代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.consigneeEdiCode"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.consigneeEdiCode" /> -->
<inputView
type="consigneeEdiCode"
:parentVal="details.bookingEDIExt.consigneeEdiCode"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="发货人EDI代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.shipperEdiCode"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.shipperEdiCode" /> -->
<inputView
type="shipperEdiCode"
:parentVal="details.bookingEDIExt.shipperEdiCode"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="通知方EDI代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.notifyCdoe"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.notifyCdoe" /> -->
<inputView
type="notifyCdoe"
:parentVal="details.bookingEDIExt.notifyCdoe"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="太平销售EDI代码"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.salerCode"
>
<selectView
type="salerCode"
:defaultVal="details.bookingEDIExt.salerCode"
searchApi="salerCode"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
<!-- <a-select size="small" default-value="CN087 | GRACE SUN" v-model="details.bookingEDIExt.salerCode" @change="handleSaleChange">
<a-select-option v-for="(sales, sindex) in StoreSalesRepCode" :value="sales.NAME" :key="sindex">
{{ sales.NAME }}
</a-select-option>
</a-select> -->
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="EMANIFEST HBL"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.emanifestHbl"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.emanifestHbl" /> -->
<inputView
type="emanifestHbl"
:parentVal="details.bookingEDIExt.emanifestHbl"
@getInputChange="inputChange"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="Master Bol Indicator"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.masterBolIndicator"
>
<selectView
type="masterBolIndicator"
:defaultVal="details.bookingEDIExt.masterBolIndicatorName"
searchApi="StoreMasterBOLIndicator"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
<!-- <a-select size="small" v-model="details.bookingEDIExt.masterBolIndicator" @change="handleMasterBolChange" optionLabelProp="label">
<a-select-option v-for="(master, mindex) in StoreMasterBOLIndicator" :value="mindex" :key="mindex">
{{ master.NAME }}
</a-select-option>
</a-select> -->
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="S0C C0C:"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.s0CC0C"
style="margin-top:4px;"
>
<a-textarea
size="small"
:allowClear="true"
v-model="details.bookingEDIExt.s0CC0C"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="欧盟港口、伊朗港口、KHI"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.ckhi"
style="margin-top:4px;"
>
<a-textarea size="small" v-model="details.bookingEDIExt.ckhi" :auto-size="{ minRows: 2, maxRows: 5 }" />
</a-form-model-item>
</a-col>
</a-row>
</div>
<div class="taiping-2">
<a-row :gutter="16">
<a-col :span="12">
<a-form-model-item
label="南美东"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.cncm"
>
<a-textarea size="small" v-model="details.bookingEDIExt.cncm" :auto-size="{ minRows: 2, maxRows: 5 }" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="巴西线木质包装情况"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.wncm"
>
<a-textarea size="small" v-model="details.bookingEDIExt.wncm" :auto-size="{ minRows: 2, maxRows: 5 }" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="ACI HBL:"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.acihbl"
>
<!-- <a-input :allowClear="true" v-model="details.bookingEDIExt.acihbl" /> -->
<inputView type="acihbl" :parentVal="details.bookingEDIExt.acihbl" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item
label="CNPT No:"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
prop="bookingEDIExt.cnptNo"
>
<inputView type="CNPTNo" :parentVal="details.bookingEDIExt.cnptNo" @getInputChange="inputChange" />
</a-form-model-item>
</a-col>
</a-row>
</div>
</template>
<!-- === 太平添加 END === -->
</a-form-model>
</div>
</template>
<script>
import inputView from '../components/inputView'
import selectView from '../components/selectView'
let timer
export default {
components: {
inputView,
selectView
},
props: {
details: {
type: Object,
default: () => {
return {}
}
},
rules: {
type: Object,
default: () => {
return {}
}
},
inSave: {
type: Boolean,
default: false
},
isParent: {
type: String,
default: ''
}
},
data() {
return {
iscontainersoc: '',
StoreSalesRepCode: [
{ ID: 'CN087', NAME: 'CN087 | GRACE SUN' },
{ ID: 'CN096', NAME: 'CN096 | LEON LIANG' },
{ ID: 'CN097', NAME: 'CN097 | CHARLES GAO' },
{ ID: 'CN098', NAME: 'CN098 | TERESA LIU SHAN' },
{ ID: 'CN106', NAME: 'CN106 | HOKI YU' },
{ ID: 'CN107', NAME: 'CN107 | WILLIAM YANG JING YU' },
{ ID: 'CN099', NAME: 'CN099 | HELEN ZHANG' },
{ ID: 'CN100', NAME: 'CN100 | LEOREN' }
],
StoreMasterBOLIndicator: [
{ ID: '1', NAME: 'Carrier filing HBL | 船公司发HBL' },
{ ID: '2', NAME: 'Self filing HBL | 自己发' },
{ ID: '3', NAME: 'Not Applicable/Straight bl | 无HBL' }
]
}
},
watch: {
details: {
handler(nval, oval) {
if (!this.inSave) {
this.$emit('changeDetail', {
detail: nval,
type: 'ediMore'
})
}
},
deep: true
},
iscontainersoc(nval, oval) {
this.details.iscontainersoc = nval !== '0'
},
'$route.query': {
immediate: true,
handler(nD, oD) {
if (this.$route.name === 'BookingDetail') {
this.id = this.$route.query.id
}
}
}
},
created() {},
mounted() {
this.iscontainersoc = this.details.iscontainersoc ? '1' : '0'
},
methods: {
debounce(func, wait, ...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, wait)
},
checkbasic() {
this.$refs.ediFrom.validate(valid => {
if (valid) {
return true
} else {
return false
}
})
},
inputChange({ type, value }) {
const bookingEDIExtArr = [
'sendCode',
'receiveCode',
'ediAttn',
'ediAttnTel',
'ediAttnMail',
'amsConsignee',
'amsNotifyParty',
'opEName',
'opTel',
'opEmail',
'goodsName',
'orderRemark',
'consigneeEdiCode',
'shipperEdiCode',
'notifyCdoe',
'emanifestHbl',
'acihbl',
'CNPTNo',
'kingTareweight',
'xmcywy',
'emcNameAccount'
]
if (bookingEDIExtArr.includes(type)) {
this.details.bookingEDIExt[type] = value
} else {
this.details[type] = value
}
this.$forceUpdate()
},
getSelectViewRes({ type, res }) {
if (type === 'masterBolIndicator') {
this.details.bookingEDIExt.masterBolIndicator = res.ID || ''
this.details.bookingEDIExt.masterBolIndicatorName = res.NAME || ''
} else if (type === 'salerCode') {
this.details.bookingEDIExt.salerCode = res.ID
this.details.bookingEDIExt.salerCodeName = res.NAME
}
}
}
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-explain {
display: none !important;
}
/deep/ .ant-form-item-children-icon .anticon-check-circle {
display: none;
}
</style>
<style lang="less" scoped>
@import url('../style/ediMore.less');
</style>

@ -1,100 +0,0 @@
<template>
<a-card class="ramark-box" :bordered="false">
<!-- <a-button type="primary" @click="checkbasic"> </a-button> -->
<a-form-model ref="remarkFrom" :model="details" :rules="rules">
<a-row :gutter="24">
<a-col :span="12">
<a-form-model-item prop="soremark">
<div class="tit" :class="{'required':rules['soremark'] && rules['soremark'][0].required}"><span class="iconfont icon-bianji"></span>订舱备注</div>
<a-textarea :auto-size="{ minRows: 4, maxRows: 7 }" class="input-box" v-model="details.soremark" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item prop="siremark">
<div class="tit" :class="{'required':rules['siremark'] && rules['siremark'][0].required}"><span class="iconfont icon-bianji"></span>截单备注</div>
<a-textarea :auto-size="{ minRows: 4, maxRows: 7 }" class="input-box" v-model="details.siremark" data-next="box-ctnall"/>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</a-card>
</template>
<script>
export default {
name: '',
props: {
details: {
type: Object,
default: () => {
return {}
}
},
rules: {
type: Object,
default: () => {
return {}
}
},
inSave: {
type: Boolean,
default: false
},
isParent: {
type: String,
default: ''
}
},
data() {
return {
remarks: ''
}
},
watch: {
details: {
handler(nval, oval) {
if (!this.inSave) {
this.$emit('changeDetail', {
detail: nval,
type: 'remarksInfo'
})
}
},
deep: true
},
'$route.query': {
immediate: true,
handler(nD, oD) {
this.id = this.$route.query.id
}
}
},
created() {},
methods: {
checkbasic () {
this.$refs.remarkFrom.validate(valid => {
if (valid) {
console.log('验证成功!');
return true;
} else {
console.log('验证失败!');
return false;
}
});
},
}
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-explain{
display: none !important;
}
/deep/ .ant-form-item-children-icon .anticon-check-circle{
display: none;
}
</style>
<style lang="less" scoped>
@import url('../style/remarksInfo.less');
</style>

@ -1,180 +0,0 @@
<template>
<div class="operation-area">
<a-card :bordered="false" :bodyStyle="{ padding: '10px', 'margin-bottom': '10px' }">
<div class="btn-list more-view">
<div class="area-order-title" v-if="scrollTop > 100">
<i class="iconfont icon-dingdan"></i> 当前分单号 <span>{{ details.hblno }}</span>
</div>
<button @click="copyFun"><span class="iconfont icon-fuzhi1"></span>复制</button>
<button @click="saveFun"><span class="iconfont icon-icon_baocun"></span>保存</button>
<button @click="FSnhowPrintModal"><span class="iconfont icon-printing"></span>打印</button>
<a-popconfirm
title="确定删除分单?"
ok-text="是"
cancel-text="否"
@confirm="removeOrder"
@cancel="cancelRemove"
>
<button><span class="iconfont icon-shanchu1"></span>删除</button>
</a-popconfirm>
</div>
</a-card>
<!-- 打印弹窗 start -->
<a-modal width="50vw" :maskClosable="false" v-model="PrintModalVisible" title="打印">
<template slot="footer"> <span></span> </template>
<a-spin tip="数据加载中..." :spinning="spinning">
<div class="PrintMain">
<div class="PrintTitle">
<p>默认打印格式为<span>pdf</span>,如需其他格式请选择</p>
<p>
打印格式
<a-radio-group v-model="PrintType" name="radioGroup">
<a-radio value="1">pdf</a-radio>
<a-radio value="2">xlsx</a-radio>
<a-radio value="3">docx</a-radio>
<a-radio value="4">精确打印</a-radio>
</a-radio-group>
</p>
</div>
<a-row class="PrintMainBox">
<a-col
v-for="(item, index) in templateType"
:key="item.id"
@click="FnCilckTemplateType(item.id)"
class="items"
:span="11"
:offset="index % 2 == 0 ? 0 : 1"
>
<span>·</span>{{ item.displayName }}
</a-col>
</a-row>
</div>
</a-spin>
</a-modal>
<!-- 打印弹窗 end -->
</div>
</template>
<script>
import { BookingOrderPrintTemplateWithHistoryList, BookingOrderPrintOrder } from '@/api/modular/main/BookingLedger'
export default {
props: {
details: {
type: Object,
default: () => {
return {}
}
},
scrollTop: {
type: Number,
default: 0
}
},
data() {
return {
PrintModalVisible: false,
templateType: [],
PrintType: '1',
spinning: false
}
},
mounted() {},
watch: {
PrintType(newdata, oldData) {
let printType = newdata == 4 ? 20 : 10
let print = oldData == 4 ? 20 : 10
if (printType != print) {
this.GetPrintData(this.cateCode, printType)
}
}
},
methods: {
refreshPage() {
this.$emit('refresh')
},
cancelRefresh() {
return false
},
saveFun() {
this.$emit('save')
},
copyFun() {
this.$emit('copy')
},
GetPrintData(cateCode, printType) {
let Data = {
cateCode,
printType
}
this.spinning = true
BookingOrderPrintTemplateWithHistoryList(Data).then(res => {
this.templateType = res.data
this.spinning = false
this.PrintModalVisible = true
})
},
FSnhowPrintModal() {
if (this.details.id) {
this.cateCode = 'fendan_print'
let printType = ''
if (this.printType == 4) {
printType = 20
} else {
printType = 10
}
this.PrintType = '1'
this.GetPrintData(this.cateCode, printType)
// BookingOrderPrintTemplateWithHistoryList().then(res => {
// this.templateType = []
// res.data.forEach(item => {
// if (item.isSub) {
// this.templateType.push(item)
// }
// })
// })
this.PrintModalVisible = true
} else {
this.$message.warning('请先保存分单')
}
},
FnCilckTemplateType(templateId) {
this.$message.success(`搜索文件中...`)
let printType = this.PrintType == 4 ? 20 : 10
BookingOrderPrintOrder({
templateId,
bookingId: this.details.id,
cateCode: this.cateCode,
type: this.PrintType,
printType
})
.then(res => {
if (!res.success) {
this.$message.error(res.message)
} else {
if (this.PrintType == 1) {
window.open(` ${process.env.VUE_APP_API_BASE_URL}/BookingOrder/ViewPrintPdf/${res.data}`, '_blank')
} else {
window.open(
` ${process.env.VUE_APP_API_BASE_URL}/BookingOrder/downloadPrint?filename=${res.data}`,
'_blank'
)
}
}
})
.catch(err => {
console.log(err)
})
},
removeOrder() {
this.$emit('remove')
},
cancelRemove() {
console.log('= 取消删除 =')
}
}
}
</script>
<style lang="less" scoped>
@import url('../index.less');
@import url('../style/sedOperationArea.less');
</style>

@ -1,811 +0,0 @@
<template>
<div class="booking-detail" style="margin-top:0;">
<a-row :gutter="24" :class="showSecNav ? 'show-content' : 'hide-content'" style="margin-left:0;">
<div class="nav-min-icon" v-if="!showSecNav" @click="openNav"><i class="iconfont icon-liebiao"></i></div>
<a-col :span="showSecNav ? 5 : 0" v-if="showSecNav">
<div class="sed-order-list">
<div class="sed-order-title">
<i class="iconfont icon-liebiao"></i><span class="tit">分提单列表</span
><span class="right" @click="openNav"></span>
</div>
<div class="sec-order">
<div
class="sed-order-label"
v-for="(sedDetail, sindex) in sedOrderList"
:key="sindex"
:class="{ active: editIndex === sindex }"
>
<div class="left" @click.stop="changeOrder(sindex)">
<i class="iconfont icon-dingdan"></i>分单{{ sindex + 1 }}: {{ sedDetail.hblno || '请填写分单号' }}
</div>
<span class="no-save" v-if="sedDetail.isNoSave && editIndex !== sindex"> </span>
<a-popconfirm
title="确定删除分单?"
ok-text="是"
cancel-text="否"
@confirm.stop="removeSedOrderFun(sedDetail, sindex)"
@cancel="cancelRemove"
>
<span class="remove-btn iconfont icon-shanchu1"></span>
</a-popconfirm>
</div>
<div class="sed-order-btn" @click="addSedOrder"><i class="iconfont icon-jiahao2fill"></i>添加分单</div>
</div>
</div>
</a-col>
<a-col :span="showSecNav ? 19 : 24" style="padding-left:0;">
<template v-if="editDetails">
<div class="order-title">
<i class="iconfont icon-dingdan"></i> 当前分单号 <span>{{ editDetails.hblno }}</span>
</div>
<sedOperationArea
:details="editDetails"
:scrollTop="scrollTop"
:class="scrollTop < 100 ? 'normal-nav' : 'fixed-nav'"
@save="saveFun"
@copy="copyFun"
@remove="removeFun"
></sedOperationArea>
<ul class="sec-parent-tabs-box">
<div class="parents-tabs-top">
<li @click="changeParentTabs('1')" :class="{ active: mainOrderActiveKey === '1' }">
<input type="radio" name="tabs" id="stab1" checked />
<label class="tabs-label" for="tab1">基础信息</label>
</li>
<li @click="changeParentTabs('2')" :class="{ active: mainOrderActiveKey === '2' }">
<input type="radio" name="tabs" id="stab2" />
<label class="tabs-label" for="tab2">EDI补充信息</label>
</li>
</div>
<div class="parents-tabs-content">
<div id="tab-content1" class="tab-content" v-show="mainOrderActiveKey === '1'">
<div class="pane-box">
<!-- 基本信息 -->
<basicInfo
ref="basicInfo"
:type="type"
:details="editDetails"
:rules="basicRules"
:ishd="true"
:inSave="inSave"
isParent="child"
@changeDetail="changeDetailFun"
></basicInfo>
<!-- 收发通信息 -->
<mailingInfo
ref="mailingInfo"
:details="editDetails"
:rules="mailingRules"
:inSave="inSave"
:ishd="true"
isParent="child"
@changeDetail="changeDetailFun"
@pkgsEnCapital="pkgsEnCapitalFun"
></mailingInfo>
<!-- 货物信息 -->
<cargoInfo
ref="cargoInfo"
:details="editDetails"
:rules="cargoRules"
:inSave="inSave"
isParent="child"
@changeDetail="changeDetailFun"
></cargoInfo>
<!-- 签单信息 -->
<billInfo
ref="billInfo"
:details="editDetails"
:rules="billRules"
:inSave="inSave"
isParent="child"
@changeDetail="changeDetailFun"
></billInfo>
<!-- 备注信息 -->
<remarksInfo
ref="remarksInfo"
:details="editDetails"
:rules="remarksRules"
:inSave="inSave"
isParent="child"
@changeDetail="changeDetailFun"
></remarksInfo>
<!-- 箱型 -->
<goodsTable
ref="goodsTable"
:details="editDetails"
:rules="tableRules"
isParent="parent"
@changeDetail="changeDetailFun"
@changeTotal="changeTotalFun"
@changeCtnInfo="changeCtnInfoFun">
</goodsTable>
</div>
</div>
<div id="tab-content2" class="tab-content" v-show="mainOrderActiveKey === '2'">
<ediMore
class="pane-box"
ref="ediMore"
:rules="ediRules"
:details="editDetails"
:inSave="inSave"
isParent="child"
@changeDetail="changeDetailFun"
v-if="!inPageLoading"
></ediMore>
</div>
</div>
</ul>
</template>
<template v-else>
<div class="sed-no-data">
<i class="iconfont icon-meiyoudingdan"></i>
<div class="no-data-text">暂无数据 <span class="btn" @click="addSedOrder"></span></div>
</div>
</template>
</a-col>
</a-row>
</div>
</template>
<script>
import sedOperationArea from './sedOperationArea'
import basicInfo from './basicInfo'
import mailingInfo from './mailingInfo'
import cargoInfo from './cargoInfo'
import billInfo from './billInfo'
import remarksInfo from './remarksInfo'
import goodsTable from './goodsTable'
import ediMore from './ediMore'
import rules from '../rules'
import { BookingOrderSave, DeleteBookingOrder } from '@/api/modular/main/BookingLedger'
const sedDetail = {
id: 0,
parentId: 0,
customername: '',
customerid: '',
carrier: 'CMA',
carrierid: 'CMA',
forwarder: '',
forwarderid: '',
pono: '',
mblno: '',
hblno: '',
epCode: '',
custno: '',
contractno: '',
vessel: '',
voyno: '',
voynoinner: '',
lanecode: '',
etd: '',
atd: '',
lanename: '',
shipagency: '',
shipagencyid: '',
lineName: '',
sale: '',
saleid: '',
op: '',
opid: '',
doc: '',
docid: '',
custservice: '',
custserviceid: '',
route: '',
routeid: '',
dzRemark: '',
czRemark: '',
shipper: '',
feeself: false,
consignee: '',
notifyparty: '',
yard: '',
yardid: '',
customser: '',
customserid: '',
trucker: '',
truckerid: '',
agentname: '',
agentid: '',
warehouse: '',
warehouseID: '',
eta: '',
closingdate: '',
closedocdate: '',
closevgmdate: '',
portload: '',
portloadid: '',
transport: '',
transportid: '',
portdischarge: '',
portdischargeid: '',
destination: '',
destinationid: '',
placedelivery: '',
placedeliveryid: '',
placereceipt: '',
placereceiptid: '',
pkgs: 0,
kindpkgs: '',
kgs: 0,
cbm: 0,
yardremark: '',
yardcontract: '',
yardcontracttel: '',
yardcontractemail: '',
pkgstotal: '',
kgstotal: '',
cbmtotal: '',
marks: '',
goodsname: '',
goodscode: '',
cargoid: '',
hscode: '',
description: '',
totalno: '',
issuetype: '',
issuedate: '',
issueplace: '',
issueplaceid: '',
nobill: '',
copynobill: '',
prepardat: '',
prepardatid: '',
payableat: '',
payableatid: '',
blfrt: '',
thirdpayaddr: '',
service: '',
reeferf: '',
tempset: '',
tempid: '',
tempmin: '',
tempmax: '',
humidity: '',
dclass: '',
dunno: '',
dpage: '',
dlabel: '',
linkman: '',
soremark: '',
siremark: '',
ctnInputs: [],
weituo: '',
freightpayer: '',
scaccode: '',
itncode: '',
iscontainersoc: 0,
bookingEDIExt: {
weiTuoFang: '',
ediAttn: '',
ediAttnTel: '',
ediAttnMail: '',
sendCode: '',
receiveCode: '',
amsConsignee: '',
amsNotifyParty: '',
opEName: '',
opTel: '',
opEmail: '',
goodsName: '',
orderRemark: '',
kingTareweight: '',
exRemark1: '',
exRemark2: '',
exRemark3: '',
exRemark4: '',
consigneeEdiCode: '',
shipperEdiCode: '',
notifyCdoe: '',
salerCode: '',
salerCodeName: '',
emanifestHbl: '',
masterBolIndicator: '',
masterBolIndicatorName: '',
s0CC0C: '',
ckhi: '',
cncm: '',
wncm: '',
acihbl: ''
},
hbList: [],
remark: [],
file: [],
log: [],
item: [],
statuslog: []
}
const bookingEDIExt = {
weiTuoFang: '',
ediAttn: '',
ediAttnTel: '',
ediAttnMail: '',
sendCode: '',
receiveCode: '',
amsConsignee: '',
amsNotifyParty: '',
opEName: '',
opTel: '',
opEmail: '',
goodsName: '',
orderRemark: '',
kingTareweight: '',
exRemark1: '',
exRemark2: '',
exRemark3: '',
exRemark4: '',
consigneeEdiCode: '',
shipperEdiCode: '',
notifyCdoe: '',
salerCode: '',
salerCodeName: '',
emanifestHbl: '',
masterBolIndicator: '',
masterBolIndicatorName: '',
s0CC0C: '',
ckhi: '',
cncm: '',
wncm: '',
acihbl: ''
}
export default {
name: 'SedOrder',
props: {
parSedOrderList: {
type: Array,
default: () => {
return []
}
},
isAdd: {
type: Boolean,
default: false
},
details: {
type: Object,
default: () => {
return {}
}
},
checkFrom: {
type: Array,
default: () => {
return []
}
},
scrollTop: {
type: Number,
default: 0
}
},
components: {
sedOperationArea,
basicInfo,
mailingInfo,
cargoInfo,
billInfo,
remarksInfo,
goodsTable,
ediMore
},
data() {
return {
type: this.$route.query.type,
id: this.$route.query.id,
inPageLoading: false,
editDetails: null,
editIndex: 0,
showSecNav: true,
inSecLoad: false,
mainOrderActiveKey: '1',
basicRules: rules.basicRules,
mailingRules: rules.mailingRules,
cargoRules: rules.cargoRules,
billRules: rules.billRules,
remarksRules: rules.remarksRules,
ediRules: rules.ediRules,
hasEdiRules: false,
tableRules: rules.tableRules,
hasTableRules: false,
inSave: false,
sedOrderList: JSON.parse(JSON.stringify(this.parSedOrderList)) || []
}
},
watch: {
parSedOrderList: {
handler(nval, oval) {},
deep: true
},
editDetails: {
handler(nval, oval) {},
deep: true
},
'$route.query': {
immediate: true,
handler(nD, oD) {
this.id = this.$route.query.id
this.inSave = true
setTimeout(() => {
this.inSave = false
}, 1200)
if (this.$refs.basicInfo) {
this.$refs.basicInfo.$refs.basicFrom.clearValidate()
this.$refs.mailingInfo.$refs.mailingFrom.clearValidate()
this.$refs.cargoInfo.$refs.cargoFrom.clearValidate()
this.$refs.billInfo.$refs.billFrom.clearValidate()
this.$refs.remarksInfo.$refs.remarkFrom.clearValidate()
}
}
},
checkFrom(nval, oval) {
this.checkFromInit()
}
},
created() {},
mounted() {
this.checkFromInit()
},
methods: {
init(data = []) {
this.inSecLoad = true
if (Object.keys(data).length > 0) {
this.sedOrderList = JSON.parse(JSON.stringify(data))
} else {
this.sedOrderList = []
}
if (this.sedOrderList.length > 0) {
this.sedOrderList.map((item, index) => {
item.isNoSave = false
})
this.editIndex = 0
const $data = JSON.parse(JSON.stringify(this.sedOrderList[0]))
if (!$data.bookingEDIExt) {
$data.bookingEDIExt = bookingEDIExt
}
this.editDetails = $data
setTimeout(() => {
this.$refs.goodsTable.init()
}, 1000)
setTimeout(() => {
this.inSecLoad = false
}, 2000)
} else {
this.editDetails = JSON.parse(JSON.stringify(sedDetail))
setTimeout(() => {
this.inSecLoad = false
}, 2000)
}
},
changeTotalFun(data) {
const { type, val } = data
if (type === 'totalKgs') {
this.editDetails.kgs = val || this.editDetails.kgs
} else if (type === 'totalPkgs') {
this.editDetails.pkgs = val || this.editDetails.pkgs
} else if (type === 'totalCbm') {
this.editDetails.cbm = val || this.editDetails.cbm
}
},
changeCtnInfoFun({ type, val }) {
if (type === 'kindpkgs') {
this.editDetails.kindpkgs = val
}
},
checkFromInit() {
Object.keys(this.basicRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.basicRules[item][0].required = true
}
})
Object.keys(this.mailingRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.mailingRules[item][0].required = true
}
})
Object.keys(this.cargoRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.cargoRules[item][0].required = true
}
})
Object.keys(this.billRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.billRules[item][0].required = true
}
})
Object.keys(this.remarksRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.remarksRules[item][0].required = true
}
})
Object.keys(this.ediRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.ediRules[item][0].required = true
}
if (this.checkFrom.includes('bookingEDIExt.scaccode')) {
this.ediRules['scaccode'][0].required = true
}
if (this.checkFrom.includes('bookingEDIExt.itncode')) {
this.ediRules['itncode'][0].required = true
}
if (this.checkFrom.includes('bookingEDIExt.freightpayer')) {
this.ediRules['freightpayer'][0].required = true
}
})
Object.keys(this.tableRules).map((item, index) => {
if (this.checkFrom.includes(item)) {
this.tableRules[item].required = true
this.hasTableRules = true
}
})
this.$forceUpdate()
},
addSedOrder() {
if (this.isAdd) {
this.$message.error('请先保存主单')
return false
}
const data = JSON.parse(JSON.stringify(this.details))
data.isNoSave = true
data.hblno = ''
data.shipper = ''
data.consignee = ''
data.notifyparty = ''
data.pid = this.$route.query.id
data.id = 0
if (!data.bookingEDIExt) {
data.bookingEDIExt = bookingEDIExt
}
if (data.ctnInputs.length > 0) {
data.ctnInputs.map((item, index) => {
delete item.id
})
}
if (data.hbList.length > 0) {
delete data.hbList
}
this.editDetails = data
this.editIndex = this.sedOrderList.length
this.sedOrderList.push(data)
this.$emit('changeHB', this.sedOrderList)
},
changeDetailFun(data) {
if (this.inSave || this.inSecLoad || this.sedOrderList.length === 0) {
return false
}
const { detail, type } = data
if (!detail.bookingEDIExt) {
detail.bookingEDIExt = bookingEDIExt
}
if (this.ifCompare(this.sedOrderList[this.editIndex], detail) && !this.inSecLoad && type !== 'save') {
this.sedOrderList[this.editIndex].isNoSave = true
}
this.editDetails = detail
this.sedOrderList[this.editIndex] = detail
this.$emit('changeHB', this.sedOrderList)
this.$forceUpdate()
},
ifCompare(object1, object2) {
var o1keys = Object.keys(object1)
var o2keys = Object.keys(object2)
if (o2keys.length !== o1keys.length) return false
for (let i = 0; i <= o1keys.length - 1; i++) {
const key = o1keys[i]
if (!o2keys.includes(key)) return false
if (object2[key] !== object1[key]) return false
}
return true
},
saveFun() {
this.bookingOrderSave()
},
bookingOrderSave() {
if (!this.editDetails.hblno) {
this.$message.error('请输入分提单号')
return false
}
let basicFrom = true
this.$refs.basicInfo.$refs.basicFrom.validate((valid, err) => {
console.log(err)
basicFrom = valid
})
let mailingFrom = true
this.$refs.mailingInfo.$refs.mailingFrom.validate(valid => {
mailingFrom = valid
})
let cargoFrom = true
this.$refs.cargoInfo.$refs.cargoFrom.validate(valid => {
cargoFrom = valid
})
let billFrom = true
this.$refs.billInfo.$refs.billFrom.validate(valid => {
billFrom = valid
})
let remarksFrom = true
this.$refs.remarksInfo.$refs.remarkFrom.validate(valid => {
remarksFrom = valid
})
console.log(this.editDetails)
if (!basicFrom || !mailingFrom || !cargoFrom || !billFrom || !remarksFrom) {
this.$message.error('保存失败,请检查必填项')
return false
}
if (this.$refs.ediMore) {
let ediFrom = true
this.$refs.ediMore.$refs.ediFrom.validate(valid => {
ediFrom = valid
})
if (!ediFrom) {
this.mainOrderActiveKey = '2'
this.$message.error('保存失败请检查EDI必填项')
return false
}
} else {
Object.keys(this.ediRules).map((item, index) => {
if (this.checkFrom.includes(item) && !this.editDetails[item.split('.')[0]][item.split('.')[1]]) {
this.hasEdiRules = true
}
})
if (this.hasEdiRules) {
this.mainOrderActiveKey = '2'
this.$message.error('保存失败请检查EDI必填项')
return false
}
}
if (this.hasTableRules && this.editDetails.carrierid !== 'GGPX') {
if (this.editDetails.ctnInputs.length === 0) {
this.$message.error('保存失败,箱信息未填写')
return false
}
let tableErrTip = ''
this.editDetails.ctnInputs.map((item, index) => {
Object.keys(item).map((label, lindex) => {
if (this.tableRules[label] && this.tableRules[label].required && !item[label]) {
tableErrTip = `${tableErrTip} 序号${index + 1}${this.tableRules[label].title}未填写,`
}
})
})
if (tableErrTip !== '') {
this.$message.error(`保存失败, 箱信息错误: ${tableErrTip.substr(0, tableErrTip.length - 1)}`, 3)
return false
}
}
this.inSave = true
const data = JSON.parse(JSON.stringify(this.editDetails))
delete data.isNoSave
if (this.$route.query.isCopy) {
delete data.bookingno
data.ctnInputs.map((item, index) => {
delete item.id
})
}
data.parentId = this.$route.query.id
if (this.editDetails.id !== 0 && Number(this.editDetails.id) !== Number(this.$route.query.id)) {
// this.bookingOrderUpdate()
} else {
data.id = 0
data.ctnInputs.map((item, index) => {
item.id = 0
})
}
BookingOrderSave(data)
.then(res => {
if (res.success) {
this.$message.success('保存成功')
this.sedOrderList.splice(this.editIndex, 1, res.data)
this.editDetails = res.data
this.$set(this.sedOrderList[this.editIndex], 'isNoSave', false)
this.$set(this.editDetails, 'isNoSave', false)
setTimeout(() => {
this.inSave = false
this.changeDetailFun({ detail: this.editDetails, type: 'save' })
}, 1000)
this.$forceUpdate()
} else {
this.$message.error(res.message)
}
})
.catch(err => {
console.log(err)
})
},
changeOrder(index) {
this.editIndex = index
const data = this.sedOrderList[index]
if (!data.bookingEDIExt) {
data.bookingEDIExt = bookingEDIExt
}
this.editDetails = data
this.inSecLoad = true
setTimeout(() => {
this.inSecLoad = false
}, 200)
},
copyFun() {
const _data = JSON.parse(JSON.stringify(this.editDetails))
_data.isNoSave = true
_data.hblno = ''
_data.pid = this.$route.query.id
_data.id = 0
if (!_data.bookingEDIExt) {
_data.bookingEDIExt = bookingEDIExt
}
this.editDetails = _data
this.editIndex = this.sedOrderList.length
this.sedOrderList.push(_data)
},
openNav() {
this.showSecNav = !this.showSecNav
},
pkgsEnCapitalFun(data) {
this.editDetails.totalno = data
},
changeMainTab(e) {
this.mainOrderActiveKey = e
},
changeParentTabs(type) {
this.mainOrderActiveKey = type
},
removeSedOrderFun(data, index) {
this.deleteBookingOrder(data.id, index)
},
removeFun() {
this.deleteBookingOrder(this.editDetails.id, this.editIndex)
},
deleteBookingOrder(id, index) {
// eslint-disable-next-line eqeqeq
if (id == 0) {
this.removeSucc(id, index)
return false
}
this.inSecLoad = true
DeleteBookingOrder([id].toString())
.then(res => {
if (res.success) {
this.$message.success('删除成功')
this.removeSucc(id, index)
} else {
this.$message.error(res.message)
}
})
.catch(err => {
console.log(err)
})
},
removeSucc(id, index) {
const removeIndex = index
this.sedOrderList.splice(removeIndex, 1)
this.$emit('sedOrderRemove', this.sedOrderList)
if (this.sedOrderList.length === 0) {
this.editIndex = 0
this.editDetails = null
return false
}
if (this.editDetails.id === id) {
const num = this.editIndex === 0 ? 0 : this.editIndex - 1
this.editIndex = num > this.sedOrderList.length ? this.sedOrderList.length - 1 : num
this.editDetails = this.sedOrderList[this.editIndex]
} else {
this.editIndex = removeIndex < this.editIndex ? this.editIndex - 1 : this.editIndex
}
setTimeout(() => {
this.inSecLoad = false
}, 200)
this.$forceUpdate()
},
cancelRemove() {
console.log('== 取消删除 ==')
}
}
}
</script>
<style lang="less" scoped>
@import url('../index.less');
@import url('../style/sedOrder.less');
</style>

@ -28,129 +28,5 @@ export default {
lineManage: [{ required: false, message: '请选择航线管理', trigger: 'change' }],
dzRemark: [{ required: false, message: '请选择单证备注', trigger: 'change' }],
czRemark: [{ required: false, message: '请选择操作备注', trigger: 'change' }]
},
mailingRules: {
shipper: [{ required: false, message: '请输入发货人', trigger: 'submit' }],
consignee: [{ required: false, message: '请输入收货人', trigger: 'submit' }],
notifyparty: [{ required: false, message: '请输入通知人', trigger: 'submit' }],
yard: [{ required: false, message: '请输入场站', trigger: 'change' }],
feeself: [{ required: false, message: '请选择场站费自结', trigger: 'change' }],
customser: [{ required: false, message: '请输入报关行', trigger: 'change' }],
trucker: [{ required: false, message: '请输入车队', trigger: 'change' }],
agentname: [{ required: false, message: '请输入国外代理', trigger: 'change' }],
warehouse: [{ required: false, message: '请选择仓库', trigger: 'change' }],
shippingMethod: [{ required: false, message: '请选择装运方式', trigger: 'change' }],
// eta: [{ required: false, message: '请选择预抵日期', trigger: 'change' }],
closingdate: [{ required: false, message: '请选择截港时间', trigger: 'change' }],
closedocdate: [{ required: false, message: '请选择截单时间', trigger: 'change' }],
closevgmdate: [{ required: false, message: '请选择VGM时间', trigger: 'change' }],
placereceiptid: [{ required: false, message: '请选择收货地代码', trigger: 'change' }],
placereceipt: [{ required: false, message: '请选择收货地', trigger: 'change' }],
portloadid: [{ required: false, message: '请选择装货港代码', trigger: 'change' }],
portload: [{ required: false, message: '请选择装货港', trigger: 'change' }],
transportid: [{ required: false, message: '请选择中转港代码', trigger: 'change' }],
transport: [{ required: false, message: '请选择中转港', trigger: 'change' }],
portdischargeid: [{ required: false, message: '请选择卸货港代码', trigger: 'change' }],
portdischarge: [{ required: false, message: '请选择卸货港', trigger: 'change' }],
destinationid: [{ required: false, message: '请选择目的代码', trigger: 'change' }],
destination: [{ required: false, message: '请选择目的地', trigger: 'change' }],
placedeliveryid: [{ required: false, message: '请选择交货代码', trigger: 'change' }],
placedelivery: [{ required: false, message: '请选择交货地', trigger: 'change' }],
pkgs: [{ required: false, message: '请输入件数', trigger: 'change' }],
kindpkgs: [{ required: false, message: '请输入包装', trigger: 'change' }],
kgs: [{ required: false, message: '请输入毛重', trigger: 'change' }],
cbm: [{ required: false, message: '请输入尺寸', trigger: 'change' }]
},
cargoRules: {
marks: [{ required: false, message: '请输入Seal No. Marks & Nos', trigger: 'change' }],
cargoid: [{ required: false, message: '请选择货物标志', trigger: 'change' }],
hscode: [{ required: false, message: '请输入HS编码', trigger: 'change' }],
description: [{ required: false, message: '请输入包装种类与货名', trigger: 'change' }],
goodsname: [{ required: false, message: '请选择品名', trigger: 'change' }]
},
billRules: {
issuetype: [{ required: false, message: '请选择签单方式', trigger: 'change' }],
issuedate: [{ required: false, message: '请选择签单日期', trigger: 'change' }],
issueplace: [{ required: false, message: '请选择签单地点', trigger: 'change' }],
issueplaceid: [{ required: false, message: '请输入签单地代码', trigger: 'change' }],
nobill: [{ required: false, message: '请选择提单份数', trigger: 'change' }],
copynobill: [{ required: false, message: '请选择副本份数', trigger: 'change' }],
prepardat: [{ required: false, message: '请选择预付地点', trigger: 'change' }],
payableat: [{ required: false, message: '请选择到付地点', trigger: 'change' }],
blfrt: [{ required: false, message: '请选择付费方式', trigger: 'change' }],
thirdpayaddr: [{ required: false, message: '请输入第三付款地', trigger: 'change' }],
service: [{ required: false, message: '请选择运输条款', trigger: 'change' }],
reeferf: [{ required: false, message: '请输入冷藏通风量', trigger: 'change' }],
tempset: [{ required: false, message: '请输入温度', trigger: 'change' }],
tempid: [{ required: false, message: '请选择温度单位', trigger: 'change' }],
tempmin: [{ required: false, message: '请输入最低温度', trigger: 'change' }],
tempmax: [{ required: false, message: '请输入最高温度', trigger: 'change' }],
humidity: [{ required: false, message: '请输入湿度', trigger: 'change' }],
dclass: [{ required: false, message: '请输入危险品等级', trigger: 'change' }],
dunno: [{ required: false, message: '请输入危险品编号', trigger: 'change' }],
dpage: [{ required: false, message: '请输入危险品页号', trigger: 'change' }],
dlabel: [{ required: false, message: '请输入危险品标签', trigger: 'change' }],
linkman: [{ required: false, message: '请输入危险品联系人', trigger: 'change' }]
},
remarksRules: {
soremark: [{ required: false, message: '请输入订舱备注', trigger: 'change' }],
siremark: [{ required: false, message: '请输入截单备注', trigger: 'change' }]
},
ediRules: {
'bookingEDIExt.sendCode': [{ required: false, message: '请输入发送方EDI代码', trigger: 'change' }],
'bookingEDIExt.receiveCode': [{ required: false, message: '请输入接收方EDI代码', trigger: 'change' }],
'bookingEDIExt.ediAttn': [{ required: false, message: '请输入EDI联系人名称', trigger: 'change' }],
'bookingEDIExt.ediAttnTel': [{ required: false, message: '请输入EDI联系人电话', trigger: 'change' }],
'bookingEDIExt.ediAttnMail': [{ required: false, message: '请输入EDI联系人邮箱', trigger: 'change' }],
'bookingEDIExt.amsConsignee': [{ required: false, message: '请输入AMS收货人', trigger: 'change' }],
'bookingEDIExt.amsNotifyParty': [{ required: false, message: '请输入AMS通知人', trigger: 'change' }],
'bookingEDIExt.opEName': [{ required: false, message: '请输入操作英文名称', trigger: 'change' }],
'bookingEDIExt.opTel': [{ required: false, message: '请输入操作电话', trigger: 'change' }],
'bookingEDIExt.opEmail': [{ required: false, message: '请输入操作邮箱', trigger: 'change' }],
'bookingEDIExt.goodsName': [{ required: false, message: '请输入商品名称', trigger: 'change' }],
iscontainersoc: [{ required: false, message: '请输入SOC箱', trigger: 'change' }],
scaccode: [{ required: false, message: '请输入SCAC代码', trigger: 'change' }],
itncode: [{ required: false, message: '请输入ITN编号', trigger: 'change' }],
'bookingEDIExt.orderRemark': [{ required: false, message: '请输入订舱人说明', trigger: 'change' }],
freightpayer: [{ required: false, message: '请输入付款方', trigger: 'change' }],
'bookingEDIExt.kingTareweight': [{ required: false, message: '请输入第一层包装皮重', trigger: 'change' }],
'bookingEDIExt.weiTuoFang': [{ required: false, message: '请输入委托方', trigger: 'change' }],
'bookingEDIExt.exRemark1': [{ required: false, message: '请输入辅助字段1', trigger: 'change' }],
'bookingEDIExt.exRemark2': [{ required: false, message: '请输入辅助字段2', trigger: 'change' }],
'bookingEDIExt.exRemark3': [{ required: false, message: '请输入辅助字段3', trigger: 'change' }],
'bookingEDIExt.exRemark4': [{ required: false, message: '请输入辅助字段4', trigger: 'change' }],
'bookingEDIExt.consigneeEdiCode': [{ required: false, message: '请输入收货人EDI代码', trigger: 'change' }],
'bookingEDIExt.shipperEdiCode': [{ required: false, message: '请输入发货人EDI代码', trigger: 'change' }],
'bookingEDIExt.notifyCdoe': [{ required: false, message: '请输入通知方EDI代码', trigger: 'change' }],
'bookingEDIExt.salerCode': [{ required: false, message: '请输入太平销售EDI代码', trigger: 'change' }],
'bookingEDIExt.emanifestHbl': [{ required: false, message: '请输入EMANIFEST HBL', trigger: 'change' }],
'bookingEDIExt.masterBolIndicator': [{ required: false, message: '请输入Master Bol Indicator', trigger: 'change' }],
'bookingEDIExt.s0CC0C': [{ required: false, message: '请输入S0C C0C', trigger: 'change' }],
'bookingEDIExt.ckhi': [{ required: false, message: '请输入欧盟港口、伊朗港口、KHI', trigger: 'change' }],
'bookingEDIExt.cncm': [{ required: false, message: '请输入南美东', trigger: 'change' }],
'bookingEDIExt.wncm': [{ required: false, message: '请输入巴西线木质包装情况', trigger: 'change' }],
'bookingEDIExt.acihbl': [{ required: false, message: '请输入ACI HBL', trigger: 'change' }]
},
tableRules: {
ctnall: { required: false, title: '箱型', message: '请选择箱型', trigger: 'change' },
ctnnum: { required: false, title: '箱量', message: '请选择箱量', trigger: 'change' },
cntrno: { required: false, title: '箱号', message: '请选择箱号', trigger: 'change' },
sealno: { required: false, title: '封号', message: '请选择封号', trigger: 'change' },
pkgs: { required: false, title: '件数', message: '请选择件数', trigger: 'change' },
kindpkgs: { required: false, title: '包装', message: '请选择包装', trigger: 'change' },
kgs: { required: false, title: '重量', message: '请选择重量', trigger: 'change' },
cbm: { required: false, title: '尺码', message: '请选择尺码', trigger: 'change' },
tareweight: { required: false, title: '箱皮重', message: '请选择箱皮重', trigger: 'change' },
weightype: { required: false, title: '称重方式', message: '请选择称重方式', trigger: 'change' },
weighkgs: { required: false, title: '称重重量', message: '请选择称重重量', trigger: 'change' }
},
preRules: {
ctn: { required: false, title: '箱型', message: '请选择箱型', trigger: 'change' },
cntrno: { required: false, title: '箱号', message: '请选择箱号', trigger: 'change' },
sealno: { required: false, title: '封号', message: '请选择封号', trigger: 'change' },
pkgs: { required: false, title: '件数', message: '请选择件数', trigger: 'change' },
kindpkgs: { required: false, title: '包装', message: '请选择包装', trigger: 'change' },
kgs: { required: false, title: '重量', message: '请选择重量', trigger: 'change' },
cbm: { required: false, title: '尺码', message: '请选择尺码', trigger: 'change' }
}
}

@ -1,274 +0,0 @@
.from-label {
margin-bottom: 0;
overflow: hidden;
}
/deep/ .from-label label{
color: black;
}
.from-box {
border-bottom: 1px dashed #ccc;
margin-bottom: 2px;
padding-bottom: 6px;
}
.from-box2 {
padding-bottom: 6px;
overflow: hidden;
text-align: left;
}
.from-box3 {
border-top: 1px dashed #ccc;
/*margin-top: 20px;*/
padding-top: 0;
}
.from-box4 {
border-top: 1px dashed #ccc;
margin-top: 8px;
padding-top: 0;
}
.date-box {
display: flex;
padding-top:4px;
.date-picker {
flex: 1;
}
.week {
display: inline-block;
padding: 0 0px;
background: #f6c806;
color: #fff;
height: 24px;
line-height: 24px;
border: 4px;
font-size: 10px;
margin-left: 8px;
border-radius: 2px;
width: 32px;
text-align: center;
}
}
.customer-box{
display: flex;
margin-top: 2px;
.customer-input {
flex: 1;
}
.customer-btn {
display: inline-block;
padding: 0 4px;
color: @primary-color;
cursor: pointer;
margin-top: -4px;
}
}
.copy-box {
display: flex;
.copy-input{
width: 100%;
flex: 1;
}
.copy-btn{
width: 30px;
color: #999;
text-align: center;
cursor: pointer;
&:hover{
color: @primary-color;
}
}
}
.my-dropdown2 {
border-radius: 4px;
border: 1px solid #dcdfe6;
background-color: #fff;
}
.list-item2 {
padding: 3px 8px;
}
.list-item2:hover {
background-color: #f5f7fa;
}
.table-no-data {
text-align: center;
}
/deep/ .date-box {
// padding-top: 7px !important;
}
.ant-input[type="text"]{
height: 24px !important;
}
.vessel-label{
// border-bottom:1px solid #eee;
.title{
height: 28px;
line-height: 28px;
font-size: 14px;
font-weight:600;
color: #666;
border-bottom:1px dashed #ddd;
margin-bottom: 4px;
}
.voyno, .etd {
height: 22px;
line-height: 22px;
font-size: 12px;
color: #999;
}
}
.contractno-label{
.title{
height: 28px;
line-height: 28px;
font-size: 14px;
font-weight:600;
color: #666;
}
.note{
height: 22px;
line-height: 22px;
font-size: 12px;
color: #999;
}
}
/deep/ .ant-form-item-children-icon{
display: none !important;
}
/deep/ .ant-input-suffix{
right: 10px !important;
}
.has-error{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 8px !important;
}
}
.has-success{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 8px !important;
}
}
/deep/ .ant-card-body{
padding-top: 25px !important;
}
/deep/ .has-success .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-error .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-success .ant-select-arrow{
right: 8px !important;
}
/deep/ .has-error .ant-select-arrow{
right: 8px !important;
}
/deep/ .has-success .ant-input{
padding-right: 0 !important;
}
/deep/ .has-error .ant-input{
padding-right: 0 !important;
}
/deep/ form .has-success .ant-input{
padding-right: 0 !important;
}
/deep/ form .has-error .ant-input{
padding-right: 0 !important;
}
/deep/ form .has-success .ant-calendar-picker-input{
padding-right: 0 !important;
}
/deep/ form .has-feedback input{
padding-right: 10px !important;
}
/deep/ .ant-select-selection__clear{
right: 10px !important;
margin-top: -6px !important;
}
/deep/ form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear{
right: 10px !important;
margin-top: -6px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{
right: 0px !important;
padding-right: 10px;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-time-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear{
right: 10px !important;
}
/deep/ .ant-calendar-picker-clear{
color: rgba(0, 0, 0, 0.25) !important;
}
/deep/ .ant-card-body{
margin-bottom: 2px !important;
}
// /deep/ .ant-form-item-control{
// height:24px;
// }
/deep/ .from-label{
height: 35px !important;
.ant-form-item-control-wrapper{
top: 50%;
transform: translateY(-50%);
// background: #f00;
padding:8px 0 0 0;
}
}
/deep/ .ant-form-item-label {
height:36px !important;
line-height: 36px !important;
// border: 1px solid #f00;
}
/deep/ .ant-form-item-control{
height:36px !important;
line-height: 36px !important;
}
.from-box3 {
/deep/ .ant-form-item-label{
margin-top: 2px;
}
/deep/ .ant-col{
padding-left: 0 !important;
// padding-right: 0 !important;
}
}

@ -1,180 +0,0 @@
.collapse-box {
margin-bottom: 2px;
background: #fff;
}
.base-tit {
font-size: 14px;
font-weight: 600;
color: #333;
position: relative;
height: 34px;
line-height: 40px;
margin-top: -5px;
&::before {
content: '';
position: absolute;
width: 4px;
height: 20px;
background: @primary-color;
top: 9px;
left: -10px;
}
i {
margin-right: 7px;
font-weight: 500;
font-size: 18px;
color: @primary-color;
}
.click-btn{
position: absolute;
width: 100%;
height: 100%;
// background: #f99;
z-index: 9;
top: 0;left: 0;
}
}
.tab-change i{
transition: .5s all;
display: inline-block;
&.active{
transform: rotate(-90deg);
}
}
/deep/ .ant-collapse-header {
position: relative;
}
/deep/ .ant-collapse-header .ant-collapse-extra {
position: absolute !important;
top: 7px !important;
right: 11px !important;
z-index: 99;
}
/*多余线条去掉 */
.ant-collapse-item {
border-bottom: none;
}
.has-error{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 0 !important;
}
}
.has-success{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 0 !important;
}
}
.bill-info{
padding-bottom: 10px;
}
.bill-info /deep/ label{
color: black;
}
.bill-info-box{
/deep/ .ant-row{
margin-bottom: 0 !important;
}
}
/deep/ .ant-collapse-content-box{
padding: 0 !important;
}
/deep/ .ant-calendar-picker-clear{
color: rgba(0, 0, 0, 0.25) !important;
}
/deep/ .ant-collapse-header{
padding: 4px 10px !important;
}
/deep/ .collapse-box{
margin-bottom: 2px !important;
}
/deep/ .ant-form-item-label {
height:36px !important;
line-height: 36px !important;
// border: 1px solid #f00;
}
/deep/ .ant-form-item-control{
height:36px !important;
line-height: 36px !important;
}
/deep/ .ant-calendar-picker-input {
height: 24px !important;
// margin-top: 4px !important;
}
/deep/ .has-success .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-error .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-success .ant-select-arrow{
right: 8px !important;
}
/deep/ .has-error .ant-select-arrow{
right: 8px !important;
}
/deep/ .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{
right: 0px !important;
padding-right: 10px;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-time-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear{
right: 10px !important;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear, form .has-feedback .ant-time-picker-icon{
right: 10px !important;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-time-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear{
right: 10px !important;
}
/deep/ .ant-calendar-picker-input {
height: 24px !important;
// margin-top: 4px !important;
}
/deep/ .right-content[data-v-27167ea2] .ant-form-item-control, .right-content[data-v-27167ea2] .ant-form-item-label {
height: 36px!important;
line-height: 36px!important;
}

@ -1,287 +0,0 @@
.collapse-box {
margin-bottom: 2px;
background: #fff;
}
.base-tit {
font-size: 14px;
font-weight: 600;
color: #666;
position: relative;
height: 34px;
line-height: 40px;
margin-top: -5px;
&::before {
content: '';
position: absolute;
width: 4px;
height: 20px;
background: @primary-color;
top: 9px;
left: -10px;
}
i {
margin-right: 7px;
font-weight: 500;
color: @primary-color;
}
.click-btn{
position: absolute;
width: 100%;
height: 100%;
// background: #f99;
z-index: 9;
top: 0;left: 0;
}
}
.tab-change i{
transition: .5s all;
display: inline-block;
&.active{
transform: rotate(-90deg);
}
}
/deep/ .ant-collapse-header {
position: relative;
}
/deep/ .ant-collapse-header .ant-collapse-extra {
position: absolute !important;
top: 7px !important;
right: 11px !important;
z-index: 99;
}
.cargo-info {
box-shadow: none;
font-size: 14px;
color: #666;
.tit {
text-align: left;
width: 100%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
line-height: 18px;
}
.line {
text-align: left;
width: 100%;
display: flex;
// margin-bottom: 10px;
// height: 54px;
}
.left {
// text-align: left;
// display: inline-block;
// padding-top: 4px;
// flex: 1;
text-align: left;
display: inline-block;
/* padding-top: 4px; */
flex: 1;
line-height: 18px;
.title{
// padding-bottom:4px;
width: 90%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.goods-name-box{
position: relative;
padding-left: 15px;
i.icon{
position: absolute;
top: -10px;
left: -14px;
}
}
}
.input {
text-align: left;
display: inline-block;
// flex: 1;
width: 170px;
}
.cargo-mark {
// margin-left: 11%;
text-align: left;
display: inline-block;
width: 120px;
margin-right: 10px;
.ant-form-item{
margin-bottom: 0;
}
}
.cargo-info-tit{
font-size: 14px;
line-height: 18px;
height: 45px;
color: #000;
}
/deep/ .ant-form-item-label {
height:36px !important;
line-height: 36px !important;
}
/deep/ .ant-form-item-control{
height:36px !important;
line-height: 36px !important;
}
.line{
height: 45px;
color: #000;
}
.cargo-mark{
padding: 0;
height: 56px;
}
.input-box {
// height: 200px;
height: 100px;
font-size: 14px;
}
.num-box {
display: flex;
height: 30px;
margin-top: 15px;
}
.label {
width: 80px;
height: 30px;
line-height: 30px;
font-size: 14px;
}
.input-val {
flex: 1;
margin-top: 6px;
}
}
/*多余线条去掉 */
.ant-collapse-item {
border-bottom: none;
}
.bottom {
display: flex;
.input-box {
margin-top: 10px;
flex: 1;
font-size: 14px;
line-height: 22px;
}
.line-count {
width: 24px;
margin-top: 10px;
height: 100px;
overflow: auto;
padding-top: 7px;
&::-webkit-scrollbar {
display: none;
}
// max-height: 192px;
// overflow-y: auto;
div {
text-align: right;
height: 22px;
line-height: 22px;
font-size: 12px;
color: #999;
}
}
}
/deep/ .ant-form-explain{
margin-top: -6px;
}
.textarea-label{
margin-bottom: 0;
min-height: 104px;
}
.required{
padding-left: 10px;
position: relative;
&::before{
display: inline-block;
margin-right: 4px;
color: #f5222d;
font-size: 14px;
font-family: SimSun, sans-serif;
line-height: 1;
content: '*';
position: absolute;
top: 3px;
left: 0;
}
}
.goods-required{
&::before{
top: 20px;
}
}
.has-error{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 0 !important;
}
}
.has-success{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 0 !important;
}
}
/deep/ .has-success .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-error .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-success .ant-select-arrow{
right: 8px !important;
}
/deep/ .has-error .ant-select-arrow{
right: 8px !important;
}
/deep/ .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{
right: 0px !important;
padding-right: 10px;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-time-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear{
right: 10px !important;
}
/deep/ .ant-collapse-header{
padding: 4px 10px !important;
}

@ -1,92 +0,0 @@
.more-edi {
padding: 60px 20px;
background: #ffffff;
.ant-row{
margin-bottom: 0;
}
}
.bottom-btn {
text-align: right;
padding-right: 20px;
.btn {
margin-left: 20px;
}
}
.normal{
// margin-bottom: 10px;
overflow: hidden;
}
.taiping{
border-top: 1px dashed #ccc;
margin-top: 10px;
padding-top: 10px;
overflow: hidden;
}
.ex-remark{
overflow: hidden;
.title{
height: 40px;
display: flex;
width: 100%;
// margin-bottom:20px;
.text{
width: 87px;
height: 40px;
line-height: 40px;
font-size: 14px;
color: #666;
font-weight: 600;
text-align: center;
}
span{
display: block;
vertical-align: top;
}
.line{
border-bottom: 1px dashed #ccc;
height: 19px;
}
.left{
width:100px;
}
.right{
flex: 1;
}
}
.ex-remark-content{
overflow: hidden;
}
}
/deep/ .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{
right: 0px !important;
padding-right: 10px;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-time-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear{
right: 10px !important;
}
/deep/ .ant-input-affix-wrapper{
color: rgba(0, 0, 0, 0.25) !important;
}
// /deep/ .ant-form-item-label {
// height:36px !important;
// line-height: 36px !important;
// // border: 1px solid #f00;
// }
// /deep/ .ant-form-item-control{
// height:36px !important;
// line-height: 36px !important;
// }

@ -1,231 +0,0 @@
.base-tit {
font-size: 14px;
font-weight: 600;
color: #666;
position: relative;
&::before {
content: '';
position: absolute;
width: 3px;
height: 30px;
background: #ccc;
top: 0;
left: 0;
}
i {
margin-right: 10px;
margin-left: 10px;
}
}
.booking-detail {
padding-bottom: 60px;
}
.pane-box {
margin-top: -17px;
min-height: 200px;
// background: #ffffff;
}
.load-block {
border-radius: 4px;
background: #fcfcfc;
margin-bottom: 10px;
position: relative;
overflow: hidden;
&::after {
/* 内容区域空状态时追加骨架屏样式 */
content: '';
display: block;
width: 100%;
height: 300px;
transform: translateX(-100%) rotate(45deg);
background: linear-gradient(90deg, transparent, rgba(225, 225, 225, 0.1), transparent);
animation: loading 1.5s infinite;
}
@keyframes loading {
/* 骨架屏的动画 */
100% {
transform: translateX(100%) rotate(45deg);
}
}
}
// .ant-calendar-picker-input{
// padding: 0 4px;
// }
// .ant-calendar-range-picker-input{
// height: 24px;
// font-size: 12px;
// vertical-align: top;
// text-align: center;
// // background: #f99;
// }
// .ant-select-auto-complete.ant-select .ant-input{
// height: 28px !important;
// // padding-top: 4px !important;
// background: #f99 !important;
// }
.ant-input-affix-wrapper .ant-input:not(:last-child) {
height: 24px !important;
// margin-top: 4px !important;
// background: #9f9 !important;
}
.ant-select-selection {
height: 24px !important;
// margin-top: 4px !important;
// background: #f00 !important;
}
.ant-input:placeholder-shown {
height: 24px !important;
// margin-top: 4px !important;
// background: #99f !important;
}
.ant-calendar-picker-input.ant-input {
height: 24px !important;
// margin-top: 4px !important;
}
.ant-form-item-label {
// line-height: 30px !important;
// border: 1px solid #f00;
}
.ant-form-item-control-wrapper {
// border: 1px solid #f99;
// height: 30px;
// vertical-align: top;
// padding: 0;
}
.left-box {
// padding-top: 60px;
}
.normal-nav {
transition: 0.5s all;
}
.fixed-nav {
position: fixed;
top: 56px;
box-shadow: 0px 15px 10px -15px #ccc;
z-index: 999;
background: #fff;
transition: 0.5s all;
}
/deep/ form .has-success .ant-input {
padding-right: 0 !important;
}
/deep/ form .has-error .ant-input {
padding-right: 0 !important;
}
/deep/ form .has-success .ant-calendar-picker-input {
padding-right: 0 !important;
}
/deep/ form .has-feedback .ant-input {
padding-right: 10px !important;
}
/deep/ .ant-select-selection__clear {
// margin-top: -3px !important;
// right: 16px !important;
}
/deep/ form .has-feedback > .ant-select .ant-select-arrow,
form .has-feedback > .ant-select .ant-select-selection__clear,
form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-arrow,
form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear {
right: 9px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix {
right: 0px !important;
}
// /deep/ form .has-feedback .ant-calendar-picker-icon,
// form .has-feedback .ant-time-picker-icon,
// form .has-feedback .ant-calendar-picker-clear,
// form .has-feedback .ant-time-picker-clear {
// right: 0px !important;
// }
// === 0217更新样式 ===
.booking-detail {
margin-top: -16px;
margin-left: -16px;
margin-right: -16px;
/deep/ .ant-card-body {
margin-bottom: 2px !important;
}
/deep/ .ant-collapse-header {
padding: 4px 10px !important;
}
// /deep/ .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab{
// height: 30px !important;
// line-height: 30px !important;
// top: -3px !important;
// }
}
.parent-tabs-box {
width: 100%;
// float: none;
list-style: none;
position: relative;
text-align: left;
padding: 29px 0 0 0;
.parents-tabs-top {
position: absolute;
top: 0;
left: 0;
li {
float: left;
}
input[type='radio'] {
position: absolute;
top: -9999px;
left: -9999px;
}
.tabs-label {
display: block;
padding: 4px 10px;
border-radius: 2px 2px 0 0;
font-size: 12px;
font-weight: normal;
text-transform: uppercase;
background: #fafafa;
color: #999;
cursor: pointer;
position: relative;
top: 3px;
-webkit-transition: all 0.1s;
-moz-transition: all 0.1s;
-o-transition: all 0.1s;
transition: all 0.1s;
// transition: all 0.2s ease-in-out;
margin-right: 4px;
}
[id^='tab']:checked + label {
top: 0;
background: #fff;
color: @primary-color;
font-size: 14px;
}
}
.parents-tabs-content {
width: 100%;
overflow: hidden;
white-space: nowrap;
vertical-align: top;
.tab-content {
display: inline-block;
vertical-align: top;
transition: 0.5s all;
overflow: hidden;
width: 100%;
padding: 10px 0;
}
}
// [id^="tab"]:checked ~ [id^="tab-content"] {
// display: block;
// }
}

@ -1,412 +0,0 @@
.vgm-info {
padding-top: 0px;
.ant-form-item {
margin-bottom: 0px;
}
}
.OCRBox {
/deep/.ant-drawer-body {
position: relative;
padding: 0 !important;
}
}
.CvBox {
position: absolute;
width: 100px;
border: 1px solid #f0f0f0;
box-shadow: 0 1px 2px -2px #00000029, 0 3px 6px #0000001f, 0 5px 12px 4px #00000017;
padding: 0;
background: #ffffff;
li {
width: 100%;
text-align: center;
list-style-type: none;
padding: 3px 0;
&:hover {
background: #f0f0f0;
}
}
}
.CV {
// width: 100%;
// height: auto;
// background-repeat: no-repeat;
}
@import url('../index.less');
.operation-area {
width: 100%;
text-align: left;
.btn-list {
padding: 0 10px;
box-sizing: border-box;
display: inline-block;
vertical-align: top;
text-align: left;
height: 48px;
margin-bottom: 13px;
position: relative;
background: #fff;
&::before {
content: '';
position: absolute;
top: 10px;
right: 0;
width: 1px;
height: 35px;
background: #ccc;
}
&:nth-last-of-type(1) {
&::before {
display: none;
}
}
button {
border: none;
font-size: 14px;
color: #666;
cursor: pointer;
color: black;
background: #fff;
.iconfont {
font-size: 16px;
margin-right: 6px;
font-weight: 400;
}
}
}
.more-view {
width: 150px;
.iconfont {
color: #2095f2;
}
}
.more-view-1 {
width: 332px;
.iconfont {
color: #26b578;
}
}
.more-view-2 {
width: 205px;
.iconfont {
color: #ff9702;
}
}
.more-view-3 {
width: 160px;
.iconfont {
color: #f36f48;
}
}
.single-view {
width: 80px;
.iconfont {
color: #fcd017;
}
}
.single-view-1 {
width: 100px;
.iconfont {
color: #3455b6;
}
button:hover {
color: @primary-color;
}
&.inLoad {
opacity: .5;
}
}
.single-view-4 {
width: 85px;
// padding-top: 10px;
.iconfont {
color: #1e7ece;
}
}
}
.box-flex {
display: flex;
padding-top: 8px;
.box-input {
flex: 1;
text-align: left;
}
span {
display: inline-block;
width: 25px;
text-align: right;
height: 100%;
// height: 32px;
// line-height: 32px;
font-size: 13px;
cursor: pointer;
> textarea {
background: #f6fdfd !important;
}
i {
color: @primary-color;
}
}
}
.item-box {
margin-bottom: 20px;
padding-bottom: 20px;
padding-top: 20px;
overflow: hidden;
border-bottom: 1px dashed #ccc;
&:nth-last-of-type(1) {
border: none;
margin-bottom: 0;
}
}
.cabin-box,
.to-box {
.ant-row {
margin-bottom: 10px;
}
}
.book-model-box {
position: relative;
padding-left: 50px;
.book-check {
position: absolute;
width: 50px;
height: 40px;
line-height: 40px;
top: 0;
left: 17px;
}
}
.pdf-view {
height: 400px;
}
.no-pdf {
text-align: center;
margin: 20px 0;
}
.Citems {
display: flex;
align-items: center;
justify-content: center;
}
.PrintMain {
display: flex;
flex-wrap: wrap;
.PrintTitle {
width: 100%;
display: flex;
padding: 20px;
box-sizing: border-box;
background: #f7f8fe;
border: 1px dashed #cdcdcd;
p {
margin: 0;
&:nth-child(2) {
margin-left: 35px;
}
span {
color: #ff6646;
}
}
}
.PrintMainBox {
width: 100%;
max-height: 50vh;
overflow-y: auto;
margin-top: 5px;
.items {
padding-left: 1rem;
height: 2.5rem;
line-height: 2.5rem;
border-bottom: 1px solid #ebebeb;
cursor: pointer;
&:hover {
color: #2f54eb;
}
span {
font-weight: bolder;
margin-right: 0.6rem;
}
}
}
}
/*订舱弹窗文件功能对齐 */
/deep/ .ant-form-file {
.ant-form-item-label {
margin-top: -5px;
margin-right: 12px;
}
}
/*弹窗按钮颜色修改 */
/deep/ .ant-modal-footer .ant-btn.ant-btn-primary span {
color: #fff;
}
/*弹窗文本框背景颜色修改 */
/deep/ .ant-modal-body .ant-input-affix-wrapper {
position: relative;
z-index: 1;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
// height: 24px;
z-index: -1;
background-color: @primary-color !important;
opacity: 0.04;
display: block;
}
}
.cabin-box {
/deep/ .ant-modal-body .ant-input-affix-wrapper {
position: relative;
z-index: 1;
&::after {
content: '';
position: absolute;
top: 4px;
left: 0;
width: 100%;
// height: 100%;
height: 24px;
z-index: -1;
background-color: @primary-color !important;
opacity: 0.04;
}
}
}
.initCabin-box{
/deep/ .ant-select-selection {
position: relative;
z-index: 1;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background-color: @primary-color !important;
opacity: 0.04;
}
}
}
/deep/ .ant-calendar-picker {
position: relative;
z-index: 1;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background-color: @primary-color !important;
opacity: 0.04;
}
}
/deep/ .ant-input-affix-wrapper,
.ant-input-affix-wrapper-textarea-with-clear-btn {
position: relative;
z-index: 1;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background-color: @primary-color !important;
opacity: 0.04;
}
}
.remark-input {
position: relative;
z-index: 1;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background-color: @primary-color !important;
opacity: 0.04;
}
}
/deep/ .ant-modal-body .ant-input {
background: none;
}
.PrintRadio {
width: 100%;
padding-left: 1rem;
margin-bottom: 0.8rem;
}
.PrintMain {
display: flex;
flex-wrap: wrap;
.PrintTitle {
width: 100%;
display: flex;
padding: 20px;
box-sizing: border-box;
background: #f7f8fe;
border: 1px dashed #cdcdcd;
p {
margin: 0;
&:nth-child(2) {
margin-left: 35px;
}
span {
color: #ff6646;
}
}
}
.PrintMainBox {
width: 100%;
max-height: 50vh;
overflow-y: auto;
margin-top: 5px;
.items {
padding-left: 1rem;
height: 2.5rem;
line-height: 2.5rem;
border-bottom: 1px solid #ebebeb;
cursor: pointer;
&:hover {
color: #2f54eb;
}
span {
font-weight: bolder;
margin-right: 0.6rem;
}
}
}
}
.trace-box {
padding: 20px 0;
}
.trace-check {
margin-left: 10px;
}
.model-btn-list {
margin-bottom: 15px;
.btn {
margin-right: 6px;
&.ant-btn-primary {
color: #fff;
}
}
}

@ -1,101 +0,0 @@
.tit {
// margin-bottom: 10px;
// font-size: 14px;
// color: #666;
font-size: 14px;
color: #666;
line-height: 32px;
.iconfont {
margin-right: 4px;
font-weight: 600;
}
}
.ramark-box {
margin-bottom: 2px;
// padding-bottom: 10px;
}
.required{
padding-left: 10px;
position: relative;
&::before{
display: inline-block;
margin-right: 4px;
color: #f5222d;
font-size: 14px;
font-family: SimSun, sans-serif;
line-height: 1;
content: '*';
position: absolute;
top: 14px;
left: 0;
}
}
/deep/ .ant-card-body{
padding-top: 5px;
padding-bottom: 10px;
}
.ant-form-item{
margin-bottom: 0px !important;
}
.has-error{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 0 !important;
}
}
.has-success{
.ant-input{
margin-right: 0 !important;
}
.ant-input-suffix{
padding-right: 0 !important;
}
.ant-select-selection__rendered{
margin-right: 0 !important;
}
.ant-select-arrow{
right: 0 !important;
}
}
/deep/ .has-success .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-error .ant-select-selection-selected-value{
padding-right: 0 !important;
}
/deep/ .has-success .ant-select-arrow{
right: 8px !important;
}
/deep/ .has-error .ant-select-arrow{
right: 8px !important;
}
/deep/ .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear{
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{
right: 0px !important;
padding-right: 10px;
}
/deep/ form .has-feedback .ant-calendar-picker-icon, form .has-feedback .ant-time-picker-icon, form .has-feedback .ant-calendar-picker-clear, form .has-feedback .ant-time-picker-clear{
right: 10px !important;
}

@ -1,667 +0,0 @@
.title {
height: 42px;
line-height: 42px;
border-bottom: 1px solid #d9d9d9;
font-size: 14px;
color: #333;
font-weight: 600;
.iconfont {
font-size: 14px;
margin-right: 7px;
color: @primary-color;
}
.right {
float: right;
font-size: 12px;
font-weight: 500;
line-height: 47px;
color: @primary-color;
.iconfont {
color: @primary-color;
font-size: 16px;
line-height: 47px;
margin-right: 5px;
vertical-align: bottom;
}
}
.right:hover {
cursor: pointer;
}
}
.content {
max-height: 300px;
overflow-y: auto;
overflow-x: hidden;
width: 100%;
&::-webkit-scrollbar {
width: 0 !important;
}
.no-data {
text-align: center;
line-height: 20px;
display: block;
.iconfont {
font-size: 40px;
line-height: 70px;
display: block;
color: #999;
}
.text {
font-size: 13px;
color: #999;
span {
color: @primary-color;
cursor: pointer;
}
}
}
.tip {
width: 100%;
padding: 10px;
line-height: 22px;
font-size: 13px;
color: #666;
position: relative;
margin-top: 10px;
&::before {
width: 100%;
height: 100%;
content: '';
background: @primary-color;
opacity: 0.08;
position: absolute;
top: 0;
left: 0;
border-radius: 4px;
}
&.no-data {
text-align: center;
line-height: 20px;
.iconfont {
font-size: 40px;
line-height: 70px;
display: block;
color: #999;
}
.text {
font-size: 13px;
color: #999;
.btn {
color: @primary-color;
cursor: pointer;
display: inline-block;
}
}
}
}
.items {
display: inline-block;
height: 28px;
line-height: 26px;
border: 1px dashed #ccc;
border-radius: 4px;
padding: 0 10px;
margin-top: 10px;
margin-right: 10px;
font-size: 13px;
cursor: pointer;
position: relative;
.edit{
width: 17px;
height: 17px;
border-radius: 0 3px 0 0;
background: #c9c9c9;
display: none;
position: absolute;
right: -1px;
top: -1px;
text-align: center;
line-height: 17px;
}
&:hover {
border: 1px dashed @primary-color;
position: relative;
&::before {
width: 100%;
height: 100%;
content: '';
background: @primary-color;
opacity: 0.08;
position: absolute;
top: 0;
left: 0;
border-radius: 4px;
}
.edit{
display: block;
}
}
&.active {
background: @primary-color;
border: 1px dashed @primary-color;
color: #fff;
}
}
.remark {
padding-bottom: 8px;
display: flex;
.remark-main {
flex: 1;
.top {
font-size: 13px;
line-height: 24px;
color: #666;
font-weight: 600;
position: relative;
padding-left: 20px;
.iconfont {
margin-right: 4px;
color: @primary-color;
position: absolute;
top: 0;
left: 0;
}
}
.bottom {
color: #999;
padding-left: 20px;
font-size: 12px;
}
}
.remark-btn {
width: 24px;
height: 100%;
line-height: 24px;
color: @primary-color;
cursor: pointer;
}
}
.booking-log {
// padding-bottom: 10px;
.log {
// min-height: 30px;
// line-height: 30px;
line-height: 15px;
font-size: 14px;
color: #666;
display: flex;
position: relative;
&::before {
content: '';
position: absolute;
width: 1px;
height: 120%;
/*background: #ccc;*/
border-right: 1px dashed #ccc;
top: 0;
left: 0;
// top: 22px;
// left: 76px;
left: 122px;
}
i:hover {
cursor: inherit !important;
}
// &:nth-last-child(1){
// &::before{
// display: none;
// }
// }
.log-time {
// width: 65px;
// text-align: center;
// height: 50px;
// line-height: 15px;
// font-size: 12px;
// color: #999;
// // padding-top: 4px;
// margin-right: 30px;
width: 110px;
text-align: center;
height: 40px;
line-height: 15px;
font-size: 12px;
color: #999;
margin-right: 30px;
}
.icon {
width: 30px;
color: @primary-color;
font-size: 16px;
text-align: left;
cursor: pointer;
position: absolute;
top: 0;
// left: 69.5px;
left: 115px;
}
.log-name {
flex: 1;
.min-log {
font-size: 12px;
color: #999;
margin-left: 4px;
}
}
}
.child-log {
min-height: 15px;
line-height: 15px;
font-size: 14px;
color: #666;
display: flex;
position: relative;
margin-top: -10px;
&::before {
content: '';
position: absolute;
width: 1px;
height: 120%;
// background: @primary-color;
// background: #ccc;
top: 0;
// left: 0;
// top: 22px;
// left: 77px;
// left: 76px;
left: 122px;
border-right: 1px dashed #ccc;
}
// &:nth-last-child(1){
// &::before{
// display: none;
// }
// }
.log-time {
// width: 70px;
width: 110px;
text-align: left;
height: 35px;
line-height: 15px;
font-size: 12px;
color: #999;
// padding-top: 4px;
margin-right: 30px;
}
.icon {
width: 30px;
color: #999;
font-size: 16px;
text-align: left;
position: absolute;
top: 0;
// left: 68.5px;
left: 115px;
}
.log-name {
flex: 1;
display: flex;
.min-log {
font-size: 12px;
color: #999;
margin-left: 4px;
flex: 1;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
.hideline {
&::before {
display: none;
}
}
&:nth-last-of-type(1) {
.child-list {
.child-log {
&:nth-last-of-type(1) {
&::before {
display: none;
}
}
&:nth-last-of-type(2) {
&::before {
height: 110%;
top: 10px;
}
}
}
}
}
}
.file-btn {
margin-top: 10px;
color: #fff;
}
.file {
padding: 10px 0;
border-bottom: 1px solid #eee;
&:nth-last-child(1) {
border: none;
}
.top {
display: flex;
.left {
flex: 1;
font-size: 14px;
color: #666;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
i {
margin-right: 8px;
}
.icon-Excel {
color: #00cc99;
}
.icon-tupian {
color: #ff9900;
}
.icon-pdf {
color: #ff0033;
}
.icon-file-word {
color: #3366cc;
}
}
.right {
width: 40px;
i {
font-size: 14px;
// font-weight: 600;
color: @primary-color;
margin-right: 10px;
cursor: pointer;
}
}
}
.bottom {
font-size: 12px;
color: #999;
padding-top: 8px;
span {
margin-right: 4px;
margin-right: 6px;
i {
font-size: 12px;
margin-right: 6px;
color: #339999;
}
}
}
}
.no-data {
text-align: center;
color: #999;
padding: 20px 0;
line-height: 30px;
display: block;
.text {
display: inline-block;
}
}
.DataTime{
display: flex;
flex-direction: column;
>div{
display: flex;
margin-top: .5rem;
>span{
display: inline-block;
width: 2.5rem;
font-weight: bolder;
color: @primary-color;
}
>div{
flex: 1;
display: flex;
>p{
flex: 1;
span{
&:nth-child(1){
margin-right: .3rem;
font-weight: 600;
}
&:nth-child(2){
// color: @primary-color;
}
}
}
}
}
// p{
// margin: .5rem 0 0 1rem;
// span{
// &:nth-child(1){
// display: inline-block;
// width: 5rem;
// font-weight: bold;
// }
// }
// }
}
}
.collapse-box {
background: #fff;
padding-top: 0;
padding-bottom: 0;
border: none;
.title {
border: none;
}
.cargo-info {
max-height: 1015px;
overflow-x: scroll;
.info-header {
display: flex;
background: #f4f4f4;
height: 40px;
line-height: 40px;
text-align: center;
span {
display: inline-block;
border: 1px solid #eee;
flex: 1;
&:nth-of-type(1) {
border-right: none;
}
}
}
.list {
display: flex;
background: #fff;
height: 40px;
line-height: 40px;
text-align: center;
.btn {
display: inline-block;
flex: 1;
border: 1px solid #eee;
border-top: none;
padding: 0 8px;
overflow: hidden;
&:nth-of-type(1) {
padding: 0 19px;
border-right: none;
}
&:nth-of-type(2) {
padding-right: 30px;
position: relative;
}
}
.more {
width: 30px;
text-align: center;
transition: 0.5s all;
position: absolute;
top: 0;
right: 4px;
color: #999;
&.show {
transform: rotate(180deg);
}
}
}
.more-detail {
border-left: 1px solid #eee;
border-right: 1px solid #eee;
border-bottom: 1px solid #eee;
background: #f4f4f4;
padding: 0 14px;
.detail-single {
border-bottom: 1px dashed #ccc;
font-size: 12px;
color: #999;
padding: 4px 0;
&:nth-last-of-type(1) {
border: none;
}
.old {
// height: 26px;
line-height: 26px;
color: #666;
}
.new {
// height: 26px;
line-height: 26px;
color: #f9a629;
}
.o-title {
font-size: 12px;
font-weight: 600;
margin-right: 8px;
}
.line {
height: 26px;
line-height: 26px;
}
}
}
}
}
/*日志加滚动条 */
::-webkit-scrollbar {
width: 5px;
height: 10px;
}
// ::-webkit-scrollbar:hover {
// width: 6px;
// height: 10px;
// }
// 滚动条两端的按钮
::-webkit-scrollbar-button {
display: none;
background-color: transparent;
width: 100px;
height: 10px;
}
// 滚动条的滑块部分
::-webkit-scrollbar-thumb {
background: #aaa;
border: 0px none #ffffff;
border-radius: 50px;
}
// 滚动条滑块的hover样式
// ::-webkit-scrollbar-thumb:hover {
// background: #2b6cb0;
// }
// 滚动条滑块的激活样式
::-webkit-scrollbar-thumb:active {
background: #aaa;
}
// 滚动条的外层轨道
::-webkit-scrollbar-track {
background: transparent;
border: 0px none #ffffff;
border-radius: 50px;
}
// ::-webkit-scrollbar-track:hover {
// background: #666666;
// }
::-webkit-scrollbar-track:active {
background: #fff;
}
// 滚动条的外层轨道-可见部分
::-webkit-scrollbar-track-piece {
background: transparent;
}
// 滚动条边角
::-webkit-scrollbar-corner {
background: transparent;
}
// 滚动条右下角拖动块
::-webkit-resizer {
background-color: transparent;
}
/*给附件加背景 */
.uplad-bg {
background: #f9fafe;
border: 1px dashed #ccc;
padding: 15px;
display: flex;
position: relative;
.tip {
width: 140px;
line-height: 32px;
}
.format {
color: #999;
// color: @primary-color;
// opacity: .8;
font-size: 12px;
float: right;
margin-right: 20px;
position: absolute;
top: 24px;
right: 0;
}
}
&.ant-upload-disabled {
color: #ccc;
}
.uplad-type {
margin-top: 20px;
display: flex;
.upload-label {
height: 30px;
line-height: 30px;
font-size: 14px;
color: #666;
}
}
.rules-label {
i {
margin-right: 10px;
}
.Success {
color: #00cc99;
}
.Error {
color: #ff0033;
}
.Warning {
color: #ff9900;
}
}
/*多余线条去掉 */
.ant-collapse-item {
border-bottom: none;
}

@ -1,196 +0,0 @@
.operation-area {
width: 100%;
text-align: left;
.btn-list {
padding: 0 4px;
box-sizing: border-box;
display: inline-block;
vertical-align: top;
text-align: left;
// height: 48px;
// margin-bottom: 20px;
position: relative;
background: #fff;
&::before {
content: '';
position: absolute;
top: 7px;
right: 0;
width: 1px;
height: 35px;
background: #ccc;
}
&:nth-last-of-type(1) {
&::before {
display: none;
}
}
button {
border: none;
font-size: 14px;
color: #666;
cursor: pointer;
background: #fff;
.iconfont {
font-size: 16px;
margin-right: 6px;
font-weight: 400;
}
}
}
.more-view {
// width: 140px;
.iconfont {
color: #2095f2;
}
}
.more-view-1 {
width: 250px;
.iconfont {
color: #26b578;
}
}
.more-view-2 {
width: 200px;
.iconfont {
color: #1ebcd5;
}
}
.more-view-3 {
width: 160px;
.iconfont {
color: #f36f48;
}
}
.single-view {
width: 80px;
.iconfont {
color: #fcd017;
}
}
.single-view-1 {
width: 100px;
.iconfont {
color: #3455b6;
}
}
.single-view-4 {
width: 80px;
// padding-top: 10px;
.iconfont {
color: #1e7ece;
}
}
}
.box-flex {
display: flex;
padding-top: 8px;
span {
display: inline-block;
width: 60px;
text-align: right;
height: 32px;
line-height: 32px;
font-size: 13px;
color: @primary-color;
cursor: pointer;
}
}
.item-box {
margin-bottom: 20px;
padding-bottom: 20px;
padding-top: 20px;
overflow: hidden;
border-bottom: 1px dashed #ccc;
&:nth-last-of-type(1) {
border: none;
margin-bottom: 0;
}
}
.book-model-box {
position: relative;
padding-left: 50px;
.book-check {
position: absolute;
width: 50px;
height: 40px;
line-height: 40px;
top: 0;
left: 0;
}
}
.pdf-view {
height: 400px;
}
.no-pdf {
text-align: center;
margin: 20px 0;
}
.PrintRadio {
width: 100%;
padding-left: 1rem;
margin-bottom: 0.8rem;
}
.PrintMain {
display: flex;
flex-wrap: wrap;
.PrintTitle {
width: 100%;
display: flex;
padding: 20px;
box-sizing: border-box;
background: #f7f8fe;
border: 1px dashed #cdcdcd;
p {
margin: 0;
&:nth-child(2) {
margin-left: 35px;
}
span {
color: #ff6646;
}
}
}
.PrintMainBox {
width: 100%;
max-height: 50vh;
overflow-y: auto;
margin-top: 5px;
.items {
padding-left: 1rem;
height: 2.5rem;
line-height: 2.5rem;
border-bottom: 1px solid #ebebeb;
cursor: pointer;
&:hover {
color: #2f54eb;
}
span {
font-weight: bolder;
margin-right: 0.6rem;
}
}
}
}
.area-order-title {
// height: 50px;
// line-height: 50px;
display: inline-block;
font-size: 14px;
font-weight: 600;
color: #666;
padding: 0 20px;
i {
margin-right: 4px;
display: inline-block;
vertical-align: top;
color: #43c673;
}
span {
color: #ffa93e;
}
}

@ -1,383 +0,0 @@
.base-tit {
font-size: 14px;
font-weight: 600;
color: #666;
position: relative;
&::before {
content: '';
position: absolute;
width: 3px;
height: 30px;
background: #ccc;
top: 0;
left: 0;
}
i {
margin-right: 10px;
margin-left: 10px;
}
}
.booking-detail {
padding-bottom: 60px;
}
.pane-box {
margin-top: -17px;
min-height: 200px;
// background: #ffffff;
}
.show-content {
}
.hide-content {
padding-left: 60px;
position: relative;
}
.nav-min-icon {
width: 48px;
height: 50px;
text-align: center;
font-size: 24px;
line-height: 45px;
background: #fff;
box-shadow: 0 0 10px #eee;
margin-left: 10px;
font-weight: 600;
position: absolute;
top: 0;
left: 0;
cursor: pointer;
}
.sed-order-list {
background: #fff;
box-shadow: 0 0 10px #eee;
padding: 10px 20px 10px 20px;
// height: 100%;
height: calc(100vh - 240px);
display: flex;
flex-direction: column;
padding-top: 0px;
transition: 0.5s all;
border-radius: 4px;
.remove-btn{
float: right;
color: #f6826b;
display: block;
width: 30px;
text-align: center;
cursor: pointer;
}
&.show-nav {
width: 100%;
animation-name: showNav 0.6s;
animation-fill-mode: forwards;
.tit {
display: inline-block;
animation-name: showText 0.6s;
animation-fill-mode: forwards;
}
.sec-order {
display: block;
animation-name: showText 0.6s;
animation-fill-mode: forwards;
}
@keyframes showNav {
0% {
width: 58%;
}
100% {
width: 100%;
}
}
@keyframes showText {
0% {
opacity: 0;
}
75% {
opacity: 0;
}
100% {
opacity: 1;
}
}
}
&.hide-nav {
width: 58px;
animation-name: hideNav 0.6s;
animation-fill-mode: forwards;
.tit {
display: none;
animation-name: hideText 0.6s;
animation-fill-mode: forwards;
}
.sec-order {
display: none;
animation-name: hideText 0.6s;
animation-fill-mode: forwards;
}
@keyframes hideNav {
0% {
width: 100%;
}
100% {
width: 58px;
}
}
@keyframes hideText {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
}
.sed-order-title {
height: 50px;
line-height: 50px;
font-weight: 600;
font-size: 14px;
color: #333;
border-bottom: 1px solid #eee;
margin-bottom: 10px;
i {
color: #43c673;
font-size: 18px;
line-height: 50px;
display: inline-block;
vertical-align: top;
margin-right: 6px;
}
.right {
float: right;
font-weight: 500;
color: #999;
cursor: pointer;
}
}
.sed-order-label {
height: 40px;
line-height: 40px;
color: #999;
font-size: 14px;
text-align: left;
overflow: hidden;
width: 100%;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
display: flex;
padding-left: 10px;
.left{
flex: 1;
// float: left;
}
}
.active {
color: @primary-color;
// background: #f5f9fe;
position: relative;
padding-right: 30px;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
background: @primary-color;
opacity: 0.04;
}
.remove-btn{
display: none;
}
}
.sed-order-btn {
margin: 20px auto;
width: 80%;
height: 40px;
line-height: 40px;
border-radius: 4px;
border: 1px solid @primary-color;
color: @primary-color;
text-align: center;
cursor: pointer;
i {
margin-right: 10px;
font-size: 16px;
}
&:hover {
background: @primary-color;
color: #fff;
-webkit-box-shadow: 0 3px 10px 3px rgba(0, 0, 0, 0.1);
box-shadow: 0 3px 10px 3px rgba(0, 0, 0, 0.1);
-webkit-user-select: 0 3px 10px 3px rgba(0, 0, 0, 0.1);
}
}
}
.sec-order {
flex: 1;
overflow: auto;
&::-webkit-scrollbar {
display: none;
}
}
.order-title {
height: 50px;
line-height: 50px;
font-size: 14px;
font-weight: 600;
color: #666;
padding: 0 20px;
margin-bottom: 10px;
background: #fff;
i {
margin-right: 4px;
display: inline-block;
vertical-align: top;
color: #43c673;
}
span {
color: #ffa93e;
}
}
.sed-no-data {
margin: 220px auto;
text-align: center;
width: 100%;
text-align: center;
i {
display: block;
line-height: 140px;
font-size: 120px;
color: #999;
}
.no-data-text {
font-size: 16px;
color: #666;
line-height: 24px;
.btn {
color: @primary-color;
cursor: pointer;
}
}
}
.no-save {
float: right;
font-size: 12px;
color: #ff6646;
}
// @media (max-width: 1300px) {
// /deep/ .feeself{
// top: 21px;
// right: -26px;
// }
// }
.normal-nav {
transition: 0.5s all;
}
.fixed-nav {
position: fixed;
top: 56px;
box-shadow: 0px 15px 10px -15px #ccc;
box-shadow: -11px 15px 10px -15px #ccc;
z-index: 999;
background: #fff;
transition: 0.5s all;
}
/deep/ .ant-select-selection__clear {
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection__clear {
right: 10px !important;
margin-top: -4px !important;
}
/deep/ form .has-feedback .ant-input-affix-wrapper .ant-input-suffix {
right: 0px !important;
padding-right: 10px;
}
/deep/ form .has-feedback .ant-calendar-picker-icon,
form .has-feedback .ant-time-picker-icon,
form .has-feedback .ant-calendar-picker-clear,
form .has-feedback .ant-time-picker-clear {
right: 10px !important;
}
.sec-parent-tabs-box {
width: 100%;
// float: none;
list-style: none;
position: relative;
text-align: left;
padding: 29px 18px 0 0;
.parents-tabs-top {
position: absolute;
top: 0;
left: 0;
li {
float: left;
}
input[type='radio'] {
position: absolute;
top: -9999px;
left: -9999px;
}
.tabs-label {
display: block;
padding: 4px 10px;
border-radius: 2px 2px 0 0;
font-size: 12px;
font-weight: normal;
text-transform: uppercase;
background: #fafafa;
color: #999;
cursor: pointer;
position: relative;
top: 3px;
-webkit-transition: all 0.1s;
-moz-transition: all 0.1s;
-o-transition: all 0.1s;
transition: all 0.1s;
// transition: all 0.2s ease-in-out;
margin-right: 4px;
}
// [id^='stab']:checked + label {
// top: 0;
// background: #fff;
// color: @primary-color;
// font-size: 14px;
// }
.active {
input,
label {
top: 0;
background: #fff;
color: @primary-color;
font-size: 14px;
}
}
}
.parents-tabs-content {
width: 100%;
overflow: hidden;
white-space: nowrap;
vertical-align: top;
.tab-content {
display: inline-block;
vertical-align: top;
transition: 0.5s all;
overflow: hidden;
width: 100%;
padding: 10px 0;
}
}
// [id^="tab"]:checked ~ [id^="tab-content"] {
// display: block;
// }
}
Loading…
Cancel
Save