海运 新增部分

szh-new
张同海 7 months ago
parent 408d0b7deb
commit 9618f09c93

@ -15,10 +15,11 @@ export function PageDataByBooking(parameter) {
data: parameter,
})
}
// 获取单证员列表 (Auth)
export function GetVouchingClerkList(parameter) {
// 详情 (Auth)
export function BookingOrderGet(parameter) {
return request({
url: '/mainApi/ClientCommon/GetVouchingClerkList',
url: '/opApi/SeaExport/GetSeaExportInfo',
method: 'get',
params: parameter,
})
@ -31,32 +32,99 @@ export function GetYardClientList(parameter) {
params: parameter,
})
}
/**
* 分页查询订舱主表
* @params PageSize
* @params PageNo
*/
export function BookingOrderPage(parameter) {
// 获取委托单位下拉列表 (Auth)
export function GetControllerClientList(parameter) {
return request({
url: '/BookingOrder/page',
url: '/mainApi/ClientCommon/GetControllerClientList',
method: 'get',
params: parameter,
})
}
// 获取业务来源下拉列表-客户端 (Auth)
export function GetClientSourceSelectList(parameter) {
return request({
url: '/mainApi/Common/GetClientSourceSelectList',
method: 'get',
params: parameter,
})
}
// 获取业务来源明细下拉列表-客户端 (Auth)
export function GetClientSourceDetailSelectList(parameter) {
return request({
url: '/mainApi/Common/GetClientSourceDetailSelectList',
method: 'get',
params: parameter,
})
}
// 更新用户高级查询条件设置 (Auth)
export function UpdateUserQuerySet(parameter) {
// 获取结算方式下拉列表-客户端 (Auth)
export function GetClientStlModeSelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/UpdateUserQuerySet',
method: 'post',
data: parameter,
url: '/mainApi/Common/GetClientStlModeSelectList',
method: 'get',
params: parameter,
})
}
// 获取用户高级查询条件设置 (Auth)
export function GetUserQuerySet(parameter) {
// 获取操作员列表 (Auth)
export function GetOperatorUserList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetUserQuerySet',
url: '/mainApi/ClientCommon/GetOperatorUserList',
method: 'get',
params: parameter,
})
}
// 获取销售员列表 (Auth) 揽货人
export function GetSaleUserList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetSaleUserList',
method: 'get',
params: parameter,
})
}
// 获取单证员列表 (Auth)
export function GetVouchingClerkList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetVouchingClerkList',
method: 'get',
params: parameter,
})
}
// 获取客服列表 (Auth)
export function GetCustomerServiceList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetCustomerServiceList',
method: 'get',
params: parameter,
})
}
// 获取部门列表 (Auth)
export function GetDeptList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetDeptList',
method: 'get',
params: parameter,
})
}
// 获取发货人下拉列表 (Auth)
export function GetShipperClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetShipperClientList',
method: 'get',
params: parameter,
})
}
// 获取收货人下拉列表 (Auth)
export function GetConsigneeClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetConsigneeClientList',
method: 'get',
params: parameter,
})
}
// 获取通知人下拉列表 (Auth)
export function GetNotifyPartyClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetNotifyPartyClientList',
method: 'get',
params: parameter,
})
@ -69,14 +137,136 @@ export function GetCarrierlist(parameter) {
params: parameter,
})
}
// 获取代理(国外)下拉列表 (Auth)
export function GetAgentClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetAgentClientList',
method: 'get',
params: parameter,
})
}
// 获取船代下拉列表 (Auth)
export function GetShipAgencyClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetShipAgencyClientList',
method: 'get',
params: parameter,
})
}
// 获取报关行下拉列表 (Auth)
export function GetCustomClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetCustomClientList',
method: 'get',
params: parameter,
})
}
// 获取航线信息下拉列表-客户端 (Auth)
export function GetClientLanesSelectList(parameter) {
return request({
url: '/mainApi/Common/GetClientLanesSelectList',
method: 'get',
params: parameter,
})
}
// 获取仓库下拉列表 (Auth)
export function GetWareHouseClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetWareHouseClientList',
method: 'get',
params: parameter,
})
}
// 获取车队下拉列表 (Auth)
export function GetTruckClientList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetTruckClientList',
method: 'get',
params: parameter,
})
}
// 获获取船名下拉列表 (Auth)
export function GetVesselSelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetVesselSelectList',
method: 'get',
params: parameter,
})
}
// 获取航次下拉列表 (Auth)
export function GetVoynoSelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetVoynoSelectList',
method: 'get',
params: parameter,
})
}
// 获取港口信息下拉列表-客户端 (Auth)
export function GetClientPortSelectList(parameter) {
return request({
url: '/mainApi/Common/GetClientPortSelectList',
method: 'get',
params: parameter,
})
}
// 获取签单方式下拉列表 (Auth)
export function GetIssueTypeSelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetIssueTypeSelectList',
method: 'get',
params: parameter,
})
}
// 获取付费方式下拉列表-客户端 (Auth)
export function GetClientFrtSelectList(parameter) {
return request({
url: '/mainApi/Common/GetClientFrtSelectList',
method: 'get',
params: parameter,
})
}
// 获取运输条款下拉列表 (Auth)
export function GetServiceSelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetServiceSelectList',
method: 'get',
params: parameter,
})
}
// 获取包装类型下拉列表 (Auth)
export function GetPackageSelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetPackageSelectList',
method: 'get',
params: parameter,
})
}
/**
* 获取订舱明细
* @params Id
* 分页查询订舱主表
* @params PageSize
* @params PageNo
*/
export function BookingOrderGet(parameter) {
export function BookingOrderPage(parameter) {
return request({
url: '/BookingOrder/page',
method: 'get',
params: parameter,
})
}
// 更新用户高级查询条件设置 (Auth)
export function UpdateUserQuerySet(parameter) {
return request({
url: '/BookingOrder/get',
url: '/mainApi/ClientCommon/UpdateUserQuerySet',
method: 'post',
data: parameter,
})
}
// 获取用户高级查询条件设置 (Auth)
export function GetUserQuerySet(parameter) {
return request({
url: '/mainApi/ClientCommon/GetUserQuerySet',
method: 'get',
params: parameter,
})

@ -0,0 +1,122 @@
<template>
<div class="input-content">
<input
class="ant-input input-box"
:class="[`input-${type}`, { disabled: ishd }]"
size="small"
:type="inputType"
:value="value"
:disabled="ishd"
:placeholder="placeholder"
@blur="inputBlur"
@change="inputChange"
/>
<a-icon
type="close-circle"
theme="filled"
class="ant-input-suffix input-icon"
@click="clearInput"
v-if="value"
/>
</div>
</template>
<script>
export default {
name: '',
props: {
parentVal: {
type: [String, Number],
default: '',
},
type: {
type: String,
default: '',
},
ishd: {
type: Boolean,
default: false,
},
inputType: {
type: String,
default: 'text',
},
placeholder: {
type: String,
default: '',
},
},
data() {
return {
value: this.parentVal !== 0 && !this.parentVal ? '' : this.parentVal,
}
},
watch: {
parentVal(nval, oval) {
this.value = nval
},
},
mounted() {},
methods: {
inputBlur() {
this.$emit('getInputChange', {
type: this.type,
value: this.value,
})
},
inputChange(e) {
if (e.type === 'click' && !this.value) {
this.$emit('getInputChange', {
type: this.type,
value: this.value,
})
}
},
clearInput() {
this.value = ''
this.$emit('getInputChange', {
type: this.type,
value: this.value,
})
},
},
}
</script>
<style lang="less" scoped>
.input-content {
position: relative;
overflow: hidden;
width: 100%;
height: 100%;
.input-box {
width: 100%;
height: 24px;
line-height: 24px;
background: #fff !important;
&.disabled {
background: #f5f5f5 !important;
}
}
.input-icon {
position: absolute;
top: 50%;
z-index: 2;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
color: rgba(0, 0, 0, 0.25);
line-height: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
opacity: 0;
right: 10px;
}
&:hover {
.input-icon {
opacity: 1;
}
}
}
</style>

@ -2,7 +2,7 @@
<div class="input-content">
<input
class="ant-input input-box"
:class="[`input-${type}`, {'disabled': ishd}]"
:class="[`input-${type}`, { disabled: ishd }]"
size="small"
:type="inputType"
v-model="value"
@ -11,108 +11,92 @@
@blur="inputBlur"
@change="inputChange"
/>
<a-icon type="close-circle" theme="filled" class="ant-input-suffix input-icon" @click="clearInput" v-if="value"/>
<a-icon
type="close-circle"
theme="filled"
class="ant-input-suffix input-icon"
@click="clearInput"
v-if="value"
/>
</div>
</template>
<script>
export default {
name: '',
props: {
parentVal: {
type: [String, Number],
default: ''
},
type: {
type: String,
default: ''
},
ishd: {
type: Boolean,
default: false
},
inputType: {
type: String,
default: 'text'
},
placeholder: {
type: String,
default: ''
}
},
data() {
return {
value: this.parentVal !== 0 && !this.parentVal ? '' : this.parentVal,
}
},
watch: {
parentVal(nval, oval) {
this.value = nval
}
},
mounted() {
},
methods: {
inputBlur() {
this.$emit('getInputChange', {
type: this.type,
value: this.value
})
},
inputChange(e) {
if (e.type === 'click' && !this.value) {
this.$emit('getInputChange', {
type: this.type,
value: this.value
})
}
<script lang="ts" setup>
import { ref, watch, onMounted, onBeforeUnmount } from 'vue'
const props = defineProps({
parentVal: { type: [String, Number], default: '' },
type: { type: String, default: '' },
ishd: { type: Boolean, default: false },
inputType: { type: String, default: 'text' },
placeholder: { type: String, default: '' },
})
const emit = defineEmits(['getInputChange'])
const value = ref(props.parentVal !== 0 && !props.parentVal ? '' : props.parentVal)
watch(
() => props.parentVal,
(nval) => {
console.log(nval)
value.value = nval
},
clearInput () {
this.value = ''
this.$emit('getInputChange', {
type: this.type,
value: this.value
)
function inputBlur() {
emit('getInputChange', {
type: props.type,
value: value.value,
})
}
function inputChange(e) {
if (e.type === 'click' && !value.value) {
emit('getInputChange', {
type: props.type,
value: value.value,
})
}
}
}
function clearInput() {
value.value = ''
emit('getInputChange', {
type: props.type,
value: value.value,
})
}
</script>
<style lang="less" scoped>
.input-content{
position: relative;
overflow: hidden;
width: 100%;
height: 100%;
.input-box {
.input-content {
position: relative;
overflow: hidden;
width: 100%;
height: 24px;
line-height: 24px;
background: #fff !important;
&.disabled{
background: #f5f5f5 !important;
height: 100%;
.input-box {
width: 100%;
height: 24px;
line-height: 24px;
background: #fff !important;
&.disabled {
background: #f5f5f5 !important;
}
}
}
.input-icon{
position: absolute;
top: 50%;
z-index: 2;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
color: rgba(0, 0, 0, 0.25);
line-height: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
opacity: 0;
right: 10px;
}
&:hover{
.input-icon{
opacity: 1;
.input-icon {
position: absolute;
top: 50%;
z-index: 2;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
color: rgba(0, 0, 0, 0.25);
line-height: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
opacity: 0;
right: 10px;
}
&:hover {
.input-icon {
opacity: 1;
}
}
}
}
</style>

@ -6,7 +6,7 @@
size="small"
ref="RefselectView"
:class="`select-input-${type}`"
v-model="value"
v-model:value="value"
show-search
:allowClear="true"
:filter-option="!openSearch ? filterOption : false"
@ -24,8 +24,8 @@
<a-select-option
v-for="(item, index) in selectList"
:key="index"
:value="item[showLabel[0]] + index + 3"
:label="item[showLabel[0]]"
:value="props.showCode ? item[props.showCode] : item[props.showLabel[0]] + index + 3"
:label="item[props.showLabel[0]]"
>
<template v-if="type === 'contractno'">
<div class="contractno-label">
@ -38,20 +38,20 @@
<template v-if="type === 'vessel'">
<div class="vessel-label">
<div class="title">{{ item.vessel }}</div>
<div class="title">{{ item.vesselName }}</div>
<div class="voyno">
航次 <span>{{ item.voyno || '--' }}</span>
船代 <span>{{ item.shipAgency || '--' }}</span>
</div>
<div class="etd">
ETD: <span>{{ item.etd || '--' }}</span>
EDI: <span>{{ item.ediCode || '--' }}</span>
</div>
</div>
</template>
<template v-else>
<template v-for="(label, lindex) in showLabel">
<template v-for="(label, lindex) in props.showLabel">
{{ item[label] }}
<template v-if="lindex != showLabel.length - 1"> / </template>
<template v-if="lindex != props.showLabel.length - 1"> / </template>
</template>
</template>
</a-select-option>
@ -71,10 +71,40 @@
etd: any
}
import {
// ---------------basicInfo----------------
GetControllerClientList,
GetClientSourceSelectList,
GetClientSourceDetailSelectList,
GetClientLanesSelectList,
GetClientStlModeSelectList,
GetOperatorUserList,
GetSaleUserList,
GetVouchingClerkList,
GetCustomerServiceList,
GetDeptList,
// ---------------mailingInfo----------------
GetShipperClientList,
GetConsigneeClientList,
GetNotifyPartyClientList,
GetYardClientList,
GetCarrierlist,
GetAgentClientList,
GetShipAgencyClientList,
GetCustomClientList,
GetWareHouseClientList,
GetTruckClientList,
GetVesselSelectList,
GetVoynoSelectList,
GetClientPortSelectList,
GetIssueTypeSelectList,
GetClientFrtSelectList,
GetServiceSelectList,
// ---------------cargoInfo----------------
GetPackageSelectList,
} from '/@/views/operation/seaexport/api/BookingLedger'
import { ref } from 'vue'
import { getDictDropDown } from '/@/api/common'
import { ref, watch, onMounted, onBeforeUnmount } from 'vue'
import { useMessage } from '/@/hooks/web/useMessage'
const { notification } = useMessage()
const props = defineProps({
@ -84,6 +114,7 @@
searchQuery: { type: Object, default: {} },
openSearch: { type: Boolean, default: false },
showLabel: { type: Array, default: [] },
showCode: { type: String, default: '' },
isCopy: { type: Boolean, default: true },
details: { type: Object, default: {} },
disabled: { type: Boolean, default: false },
@ -95,7 +126,91 @@
const open = ref(false)
const inLoading = ref(false)
const inEdit = ref(false)
const inInit = ref(false)
const selectList = ref<Select[]>([])
const clickHandle = ref<any>(null)
watch(
() => props.defaultVal,
(nval) => {
if (['sourceDetailId'].includes(props.type) && nval) {
console.log(nval, props.details, 123123132)
FnInit(['sourceDetailId'])
}
if (inEdit.value) {
return false
}
value.value = nval
},
{
deep: true,
immediate: true,
},
)
watch(
() => value,
(nval, oval) => {
if (nval !== oval) {
handleValueChange(nval)
}
},
{
deep: true,
immediate: true,
},
)
inInit.value = true
setTimeout(() => {
inInit.value = false
}, 800)
onMounted(() => {
clickHandle.value = (e) => {
if (e.target && 'className' in e.target && open.value) {
const className = e.target.className
if (className.indexOf('select_overlap') === -1) {
open.value = false
}
} else {
open.value = false
}
}
if (inInit) {
FnInit(['sourceId', 'operatorId', 'laneId'])
}
document.body.addEventListener('click', clickHandle.value)
})
function FnInit(Arr) {
if (Arr.includes(props.type)) {
getFromSelectData(emnuSelectApi(props.searchApi), props.searchQuery).then((data: any) => {
selectList.value = data
})
}
}
onBeforeUnmount(() => {
if (clickHandle.value) {
document.body.removeEventListener('click', clickHandle.value)
clickHandle.value = null
}
})
function handleValueChange(val) {
if (inInit.value) {
return false
}
inEdit.value = true
setTimeout(() => {
inEdit.value = false
}, 300)
selectList.value.map((item, index) => {
if (`${item[props.showLabel[0]]}${index + 3}` === val) {
value.value = item[props.showLabel[0]]
emit('change', {
type: props.type,
res: selectList.value[index],
})
}
})
}
function filterOption(input, option) {
if (props.openSearch) {
return true
@ -120,22 +235,62 @@
console.log(open.value)
if (
[
// ---------------basicInfo----------------
'doc',
'blType',
// ---------------
'cargoid',
'customername',
'sourceId',
'sourceDetailId',
'stlName',
'operatorId',
'saleId',
'doc',
'customerService',
'saleDeptId',
// ---------------mailingInfo----------------
'shipperId',
'consigneeId',
'notifyPartyId',
'carrier',
'agentId',
'shipAgencyId',
'customser',
'foreignCustomerService',
'laneId',
'wareHouse',
'packingType',
'termDelivery',
'trucker',
'vessel',
'voyno',
'transport',
'receiptPlaceId',
'loadPortId',
'dischargePortId',
'deliveryPlaceId',
'destinationId',
'issuePlaceId',
'issueType',
'noBill',
'copyNoBill',
'mblFrt',
'prepareAt',
'payableAt',
'service',
// ---------------cargoInfo----------------
'goodsName',
'cargoId',
'kindPkgs',
// -------------------------------
'nobill',
'copynobill',
'carrierid',
'carrier',
'yard',
'kindpkgs',
'issuetype',
'blfrt',
'masterBolIndicator',
'salerCode',
'shippingMethod',
'sourceName',
'notifypartycountry',
'consigneecountry',
'shippercountry',
@ -143,13 +298,13 @@
) {
console.log(props.type)
if (props.type === 'blType') {
selectList.value = emnuData(props.type)
inLoading.value = false
console.log(selectList.value)
// if (props.type === 'blType') {
// selectList.value = emnuData(props.type)
// inLoading.value = false
// console.log(selectList.value)
return false
}
// return false
// }
// if (props.type === 'yard') {
// if (this.yardFilter.length === 0) {
// selectList.value = this.yardList
@ -256,27 +411,6 @@
}
}
function emnuData(type) {
switch (type) {
case 'blType':
return [
{
name: '整箱',
code: '整箱',
},
{
name: '拼箱单票',
code: '拼箱单票',
},
{
name: '拼箱主票',
code: '拼箱主票',
},
{
name: '拼箱分票',
code: '拼箱分票',
},
]
}
// case 'cargoid':
// return [
// {
@ -520,6 +654,58 @@
return GetVouchingClerkList
case 'GetYardClientList':
return GetYardClientList
case 'GetControllerClientList':
return GetControllerClientList
case 'getDictDropDown':
return getDictDropDown
case 'GetClientSourceSelectList':
return GetClientSourceSelectList
case 'GetClientSourceDetailSelectList':
return GetClientSourceDetailSelectList
case 'GetClientLanesSelectList':
return GetClientLanesSelectList
case 'GetClientStlModeSelectList':
return GetClientStlModeSelectList
case 'GetOperatorUserList':
return GetOperatorUserList
case 'GetSaleUserList':
return GetSaleUserList
case 'GetCustomerServiceList':
return GetCustomerServiceList
case 'GetDeptList':
return GetDeptList
case 'GetShipperClientList':
return GetShipperClientList
case 'GetConsigneeClientList':
return GetConsigneeClientList
case 'GetNotifyPartyClientList':
return GetNotifyPartyClientList
case 'GetCarrierlist':
return GetCarrierlist
case 'GetAgentClientList':
return GetAgentClientList
case 'GetShipAgencyClientList':
return GetShipAgencyClientList
case 'GetCustomClientList':
return GetCustomClientList
case 'GetWareHouseClientList':
return GetWareHouseClientList
case 'GetTruckClientList':
return GetTruckClientList
case 'GetVesselSelectList':
return GetVesselSelectList
case 'GetVoynoSelectList':
return GetVoynoSelectList
case 'GetClientPortSelectList':
return GetClientPortSelectList
case 'GetIssueTypeSelectList':
return GetIssueTypeSelectList
case 'GetClientFrtSelectList':
return GetClientFrtSelectList
case 'GetServiceSelectList':
return GetServiceSelectList
case 'GetPackageSelectList':
return GetPackageSelectList
}
}
function handleChange(op) {

@ -0,0 +1,118 @@
<template>
<textarea
class="ant-input"
v-model="value"
:disabled="disabled"
:style="`width:100%;display:inline-block;height: ${height}px`"
@input="debounce(textareaChange, 300, $event)"
@blur="textareaBlur"
></textarea>
<!-- -->
</template>
<script>
let timer
export default {
name: '',
props: {
parentVal: {
type: String,
default: ''
},
type: {
type: String,
default: ''
},
height: {
type: Number,
default: 120
},
openToCDB: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
}
},
data() {
return {
value: this.parentVal || '',
inEdit: false
}
},
watch: {
parentVal(nval, oval) {
if (this.inEdit) {
return false
}
this.value = nval
}
},
mounted() {},
methods: {
debounce(func, wait, ...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, wait)
},
textareaBlur() {
if (this.openToCDB) {
this.value = this.ToCDB(this.value).toUpperCase()
this.$emit('getTextareaChange', {
type: this.type,
value: this.value
})
}
},
textareaChange(e) {
this.inEdit = true
setTimeout(() => {
this.inEdit = false
}, 800)
this.$emit('getTextareaChange', {
type: this.type,
value: this.value
})
},
ToCDB(str) {
var tmp = ''
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 65248 && str.charCodeAt(i) < 65375) {
tmp += String.fromCharCode(str.charCodeAt(i) - 65248)
} else {
tmp += String.fromCharCode(str.charCodeAt(i))
}
}
tmp = tmp.replace(//gi, ',')
tmp = tmp.replace(/。/gi, '.')
tmp = tmp.replace(//gi, ';')
tmp = tmp.replace(//gi, ':')
tmp = tmp.replace(//gi, '?')
tmp = tmp.replace(//gi, '!')
tmp = tmp.replace(/《/gi, '<<')
tmp = tmp.replace(/》/gi, '>>')
tmp = tmp.replace(//gi, "'")
tmp = tmp.replace(//gi, "'")
tmp = tmp.replace(/、/gi, ',')
// tab
tmp = tmp.replace(/\t/gi, ' ')
//
if (/[\u4E00-\u9FA5]+/g.test(tmp) && ['description', 'marks'].includes(this.type)) {
tmp = tmp.replace(/[\u4E00-\u9FA5]+/g, '')
this.$message.error(`${this.getTypeName(this.type)}中,不支持中文字符`)
}
return tmp
},
getTypeName(type) {
switch (type) {
case 'marks':
return '封志号 / 标记与号码'
case 'description':
return '包装种类与货名'
}
}
}
}
</script>

@ -7,112 +7,91 @@
@input="debounce(textareaChange, 300, $event)"
@blur="textareaBlur"
></textarea>
<!-- -->
</template>
<script>
let timer
export default {
name: '',
props: {
parentVal: {
type: String,
default: ''
},
type: {
type: String,
default: ''
},
height: {
type: Number,
default: 120
},
openToCDB: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
}
},
data() {
return {
value: this.parentVal || '',
inEdit: false
}
},
watch: {
parentVal(nval, oval) {
if (this.inEdit) {
<script lang="ts" setup>
import { ref, watch } from 'vue'
import { useMessage } from '/@/hooks/web/useMessage'
const { notification } = useMessage()
let timer
const props = defineProps({
parentVal: { type: String, default: '' },
type: { type: String, default: '' },
height: { type: Number, default: 120 },
openToCDB: { type: Boolean, default: false },
disabled: { type: Boolean, default: false },
})
const emit = defineEmits(['getTextareaChange'])
const value = ref(props.parentVal || '')
const inEdit = ref(false)
watch(
() => props.parentVal,
(nval) => {
if (inEdit.value) {
return false
}
this.value = nval
}
},
mounted() {},
methods: {
debounce(func, wait, ...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, wait)
value.value = nval
},
textareaBlur() {
if (this.openToCDB) {
this.value = this.ToCDB(this.value).toUpperCase()
this.$emit('getTextareaChange', {
type: this.type,
value: this.value
})
}
},
textareaChange(e) {
this.inEdit = true
setTimeout(() => {
this.inEdit = false
}, 800)
this.$emit('getTextareaChange', {
type: this.type,
value: this.value
)
function debounce(func, wait, ...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
func(args)
}, wait)
}
function textareaBlur() {
if (props.openToCDB) {
value.value = ToCDB(value.value).toUpperCase()
emit('getTextareaChange', {
type: props.type,
value: value.value,
})
},
ToCDB(str) {
var tmp = ''
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 65248 && str.charCodeAt(i) < 65375) {
tmp += String.fromCharCode(str.charCodeAt(i) - 65248)
} else {
tmp += String.fromCharCode(str.charCodeAt(i))
}
}
tmp = tmp.replace(//gi, ',')
tmp = tmp.replace(/。/gi, '.')
tmp = tmp.replace(//gi, ';')
tmp = tmp.replace(//gi, ':')
tmp = tmp.replace(//gi, '?')
tmp = tmp.replace(//gi, '!')
tmp = tmp.replace(/《/gi, '<<')
tmp = tmp.replace(/》/gi, '>>')
tmp = tmp.replace(//gi, "'")
tmp = tmp.replace(//gi, "'")
tmp = tmp.replace(/、/gi, ',')
// tab
tmp = tmp.replace(/\t/gi, ' ')
//
if (/[\u4E00-\u9FA5]+/g.test(tmp) && ['description', 'marks'].includes(this.type)) {
tmp = tmp.replace(/[\u4E00-\u9FA5]+/g, '')
this.$message.error(`${this.getTypeName(this.type)}中,不支持中文字符`)
}
return tmp
},
getTypeName(type) {
switch (type) {
case 'marks':
return '封志号 / 标记与号码'
case 'description':
return '包装种类与货名'
}
}
function textareaChange(e) {
inEdit.value = true
setTimeout(() => {
inEdit.value = false
}, 800)
emit('getTextareaChange', {
type: props.type,
value: value.value,
})
}
function ToCDB(str) {
var tmp = ''
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 65248 && str.charCodeAt(i) < 65375) {
tmp += String.fromCharCode(str.charCodeAt(i) - 65248)
} else {
tmp += String.fromCharCode(str.charCodeAt(i))
}
}
tmp = tmp.replace(//gi, ',')
tmp = tmp.replace(/。/gi, '.')
tmp = tmp.replace(//gi, ';')
tmp = tmp.replace(//gi, ':')
tmp = tmp.replace(//gi, '?')
tmp = tmp.replace(//gi, '!')
tmp = tmp.replace(/《/gi, '<<')
tmp = tmp.replace(/》/gi, '>>')
tmp = tmp.replace(//gi, "'")
tmp = tmp.replace(//gi, "'")
tmp = tmp.replace(/、/gi, ',')
// tab
tmp = tmp.replace(/\t/gi, ' ')
//
if (/[\u4E00-\u9FA5]+/g.test(tmp) && ['description', 'marks'].includes(props.type)) {
tmp = tmp.replace(/[\u4E00-\u9FA5]+/g, '')
notification.error(`${getTypeName(props.type)}中,不支持中文字符`)
}
return tmp
}
function getTypeName(type) {
switch (type) {
case 'marks':
return '封志号 / 标记与号码'
case 'description':
return '包装种类与货名'
}
}
}
</script>

@ -179,17 +179,7 @@
</a-tabs>
</div>
</template>
<!-- <script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
beforeRouteEnter(to, from, next) {
console.log('beforeRouteEnter', to, from)
next((vm) => {
vm.getRouterHis()
})
},
})
</script> -->
<script lang="ts" setup>
import { ref, reactive, getCurrentInstance, h, watch, onMounted, nextTick } from 'vue'
import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router'
@ -396,24 +386,25 @@
cntrNo: '',
// ----------
doc: '',
bsno: '1',
bsno: '',
hblno: '',
mblno: '',
voyno: '',
blType: '整箱',
blType: '',
irCode: '',
remark: '',
applyNo: '',
stlName: '',
transNo: '',
bookingNo: '',
orderNo: '',
invoiceNo: '',
voucherNo: '',
contractNo: '',
customerNo: '',
sourceCode: '',
accountDate: '1',
bookingType: '',
bookingType: '操作录入',
grossWeight: '',
insuranceer: '',
insuranceNo: '',
@ -422,6 +413,7 @@
operatorTel: '',
customername: '',
operatorCode: '',
operatorId: '',
temperatureUnit: '',
financialStaffEmail: '',
financialStaffTel: '',
@ -473,11 +465,13 @@
temperatureMax: '',
temperatureMin: '',
temperatureSet: '',
// ------------- ---------------
businessStatus: '0',
// ----------------------------
voyno2N: '',
customNo: '',
kindPkgs: '',
masterNo: '1',
masterNo: '2',
vessel2N: '',
ediRemark: '',
cntrSealNo: '',
@ -564,7 +558,7 @@
const hasTableRules = ref(false)
const tableRules = ref(rules.tableRules)
const saveBtnFlag = ref(false)
const oldBookingDetails = ref({
const oldBookingDetails = ref<any>({
log: '',
goodsStatus: '',
})
@ -772,6 +766,7 @@
}
//
async function bookingOrderUpdate() {
console.log(initDetail, bookingDetails.value)
let basicFrom = true
let basicObject = true
await RefbasicInfo.value.RefbasicFrom.validateFields()
@ -813,31 +808,31 @@
return false
}
// if (RefediMore.value) {
// let ediFrom = true
// RefediMore.value.$refs.ediFrom.validate((valid) => {
// ediFrom = valid
// })
// if (!ediFrom) {
// mainOrderActiveKey.value = '2-2'
// notification.error({ message: 'EDI', duration: 3 })
// return false
// }
// } else {
// Object.keys(ediRules.value).map((item) => {
// if (
// checkFrom.value.includes(item) &&
// !bookingDetails.value[item.split('.')[0]][item.split('.')[1]]
// ) {
// hasEdiRules.value = true
// }
// })
// if (hasEdiRules.value) {
// mainOrderActiveKey.value = '2-2'
// notification.error({ message: 'EDI', duration: 3 })
// return false
// }
// }
if (RefediMore.value) {
let ediFrom = true
RefediMore.value.$refs.RefediFrom.validate((valid) => {
ediFrom = valid
})
if (!ediFrom) {
mainOrderActiveKey.value = '2-2'
notification.error({ message: '保存失败请检查EDI必填项', duration: 3 })
return false
}
} else {
Object.keys(ediRules.value).map((item) => {
if (
checkFrom.value.includes(item) &&
!bookingDetails.value[item.split('.')[0]][item.split('.')[1]]
) {
hasEdiRules.value = true
}
})
if (hasEdiRules.value) {
mainOrderActiveKey.value = '2-2'
notification.error({ message: '保存失败请检查EDI必填项', duration: 3 })
return false
}
}
// if (
// hasTableRules.value &&
@ -867,15 +862,17 @@
// }
// }
const FnOk = () => {
console.log(bookingDetails.value, RefbasicInfo.value.RefbasicFrom.getFieldsValue())
const _data = {
...initDetail,
...bookingDetails.value,
...RefbasicInfo.value.RefbasicFrom.getFieldsValue(),
...RefmailingInfo.value.RefmailingFrom.getFieldsValue(),
...RefcargoInfo.value.RefcargoFrom.getFieldsValue(),
...RefediMore.value.RefediFrom.getFieldsValue(),
}
console.log(initDetail, bookingDetails.value)
bookingDetails.value
// delete _data.hbList
appStore.setinBookingDetailsSave(true)
// if (route.query.isCopy) {
@ -1069,7 +1066,9 @@
// CheckCtnCover(checkData).then((res) => {
// if (res.success) {
// if (!res.data) {
FnOk()
// } else {
// Modal.confirm({
// content: h('p', {}, [
@ -1148,11 +1147,11 @@
//
function changeDetailFun(data) {
const { detail } = data
console.log(data, detail.value, bookingDetails.value, 'changeDetailFun')
// if (ifCompare(bookingDetails.value, detail.value) && !inChildLoading.value) {
// checkSaveFun({ type: 'details', hasChange: true })
// }
bookingDetails.value = detail.value
// bookingDetails.value = detail.value
}
//
// function ifCompare(object1, object2) {
@ -1399,9 +1398,9 @@
inChildLoading.value = false
}, 500)
}
RefbasicInfo.value.$refs.basicFrom.clearValidate()
RefmailingInfo.value.$refs.mailingFrom.clearValidate()
RefcargoInfo.value.$refs.cargoFrom.clearValidate()
RefbasicInfo.value.$refs.RefbasicFrom.clearValidate()
RefmailingInfo.value.$refs.RefmailingFrom.clearValidate()
RefcargoInfo.value.$refs.RefcargoFrom.clearValidate()
}
function fileNewUpadte(file) {
bookingDetails.value.tempFiles.push({
@ -1991,96 +1990,97 @@
}
function setDeatilsFun(res, overSet = false) {
if (!res.data.bookingEDIExt) {
res.data.bookingEDIExt = bookingEDIExtData
}
if (res.data.cargoid == 'R') {
cargoRules.value['goodsname'][0].required = true
}
if (res.data.cargoid != 'R') {
cargoRules.value['goodsname'][0].required = false
}
if (!res.data.extendState) {
isLockBooking.value = false
} else {
isLockBooking.value = res.data.extendState.isLockBooking
}
// if (!res.data.bookingEDIExt) {
// res.data.bookingEDIExt = bookingEDIExtData
// }
// if (res.data.cargoid == 'R') {
// cargoRules.value['goodsname'][0].required = true
// }
// if (res.data.cargoid != 'R') {
// cargoRules.value['goodsname'][0].required = false
// }
// if (!res.data.extendState) {
// isLockBooking.value = false
// } else {
// isLockBooking.value = res.data.extendState.isLockBooking
// }
if (res.data.ctnInputs.length > 0) {
res.data.ctnInputs.map((item) => {
if (item.weightype === '累加') {
item.weighkgs = item.weighkgs
? item.weighkgs
: calc(Number(item['kgs']), Number(item['tareweight']), '+')
}
item.pkgs = item.pkgs ? item.pkgs : ''
item.kgs = item.kgs ? item.kgs : ''
item.cbm = item.cbm ? item.cbm : ''
item.tareweight = item.tareweight ? item.tareweight : ''
item.weighkgs = item.weighkgs ? item.weighkgs : ''
if (!item.cntrno) {
item.cntrno = ''
}
if (!item.sealno) {
item.sealno = ''
}
if (!item.weighdate) {
item.weighdate = ''
}
})
}
if (res.data.hbList.length > 0) {
res.data.hbList.map((item, index) => {
const newBookingEDIExt = {
...JSON.parse(JSON.stringify(bookingEDIExtData)),
...item.bookingEDIExt,
}
item = {
...JSON.parse(JSON.stringify(initDetail)),
...item,
...{ bookingEDIExt: newBookingEDIExt },
}
if (item.ctnInputs.length > 0) {
item.ctnInputs.map((citem) => {
citem.pkgs = citem.pkgs ? citem.pkgs : ''
citem.kgs = citem.kgs ? citem.kgs : ''
citem.cbm = citem.cbm ? citem.cbm : ''
citem.tareweight = citem.tareweight ? citem.tareweight : ''
citem.weighkgs = citem.weighkgs ? citem.weighkgs : ''
})
}
res.data.hbList[index] = item
})
}
res.data.feeself = !!res.data.feeself
// if (res.data.ctnInputs.length > 0) {
// res.data.ctnInputs.map((item) => {
// if (item.weightype === '') {
// item.weighkgs = item.weighkgs
// ? item.weighkgs
// : calc(Number(item['kgs']), Number(item['tareweight']), '+')
// }
// item.pkgs = item.pkgs ? item.pkgs : ''
// item.kgs = item.kgs ? item.kgs : ''
// item.cbm = item.cbm ? item.cbm : ''
// item.tareweight = item.tareweight ? item.tareweight : ''
// item.weighkgs = item.weighkgs ? item.weighkgs : ''
// if (!item.cntrno) {
// item.cntrno = ''
// }
// if (!item.sealno) {
// item.sealno = ''
// }
// if (!item.weighdate) {
// item.weighdate = ''
// }
// })
// }
// if (res.data.hbList.length > 0) {
// res.data.hbList.map((item, index) => {
// const newBookingEDIExt = {
// ...JSON.parse(JSON.stringify(bookingEDIExtData)),
// ...item.bookingEDIExt,
// }
// item = {
// ...JSON.parse(JSON.stringify(initDetail)),
// ...item,
// ...{ bookingEDIExt: newBookingEDIExt },
// }
// if (item.ctnInputs.length > 0) {
// item.ctnInputs.map((citem) => {
// citem.pkgs = citem.pkgs ? citem.pkgs : ''
// citem.kgs = citem.kgs ? citem.kgs : ''
// citem.cbm = citem.cbm ? citem.cbm : ''
// citem.tareweight = citem.tareweight ? citem.tareweight : ''
// citem.weighkgs = citem.weighkgs ? citem.weighkgs : ''
// })
// }
// res.data.hbList[index] = item
// })
// }
// res.data.feeself = !!res.data.feeself
let newData = res.data
if (route.query.isCopy && !overSet) {
delete res.data.id
const copyData = {
customername: res.data.customername,
portloadid: res.data.portloadid,
portload: res.data.portload,
issueplace: res.data.issueplace,
prepardat: res.data.prepardat,
route: res.data.route,
shippingMethod: res.data.shippingMethod,
shipper: res.data.shipper,
consignee: res.data.consignee,
notifyparty: res.data.notifyparty,
sale: res.data.sale,
}
newData = { ...JSON.parse(JSON.stringify(initDetail)), ...copyData }
}
const $BookingEDIExt = {
...JSON.parse(JSON.stringify(bookingEDIExtData)),
...res.data.bookingEDIExt,
}
// if (route.query.isCopy && !overSet) {
// delete res.data.id
// const copyData = {
// customername: res.data.customername,
// portloadid: res.data.portloadid,
// portload: res.data.portload,
// issueplace: res.data.issueplace,
// prepardat: res.data.prepardat,
// route: res.data.route,
// shippingMethod: res.data.shippingMethod,
// shipper: res.data.shipper,
// consignee: res.data.consignee,
// notifyparty: res.data.notifyparty,
// sale: res.data.sale,
// }
// newData = { ...initDetail, ...copyData }
// }
// const $BookingEDIExt = {
// ...bookingEDIExtData,
// ...res.data.bookingEDIExt,
// }
bookingDetails.value = {
...bookingDetails.value,
...newData,
...{ bookingEDIExt: $BookingEDIExt },
// ...{ bookingEDIExt: $BookingEDIExt },
}
oldBookingDetails.value = JSON.parse(JSON.stringify(bookingDetails.value))
oldBookingDetails.value = bookingDetails.value
sendMessageFY()
if (route.query.isCopy && route.query.copyId) {
const hisData = {
@ -2112,17 +2112,17 @@
if (res.data.hbList && res.data.hbList.length > 0) {
Showtabs.value = true
}
if (!hasHbList.value && bookingDetails.value.hbList.length > 0) {
RefsedOrder.value.init(bookingDetails.value.hbList)
hasHbList.value = true
} else {
RefsedOrder.value.init([])
}
// if (!hasHbList.value && bookingDetails.value.hbList.length > 0) {
// RefsedOrder.value.init(bookingDetails.value.hbList)
// hasHbList.value = true
// } else {
// RefsedOrder.value.init([])
// }
if (bookingDetails.value.ctnInputs.length > 0) {
RefgoodsTable.value.init()
}
}, 1200)
that.$forceUpdate()
// that.$forceUpdate()
}
function sendMessageFY() {
const mapFrame = iframe.value
@ -2344,6 +2344,19 @@
tabActiveKey.value = '1'
}
}
defineExpose({
getRouterHis,
})
</script>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
beforeRouteEnter(to, from, next) {
next((vm) => {
vm.getRouterHis()
})
},
})
</script>
<style lang="less" scoped>
@import url('./style/index.less');

File diff suppressed because it is too large Load Diff

@ -13,12 +13,12 @@
></div>
</template>
<div class="container cargo-info">
<a-form :selfUpdate="true" ref="RefcargoFrom" :model="details" :rules="rules">
<a-form :selfUpdate="true" ref="RefcargoFrom" :model="props.details" :rules="rules">
<a-row :gutter="10">
<a-col :span="5">
<div
class="cargo-info-tit"
:class="{ required: rules['marks'] && rules['marks'][0].required }"
:class="{ required: props.rules['marks'] && props.rules['marks'][0].required }"
>
<div
>Seal No.(封志号)<span
@ -34,7 +34,7 @@
<textareaView
class="input-box"
id="marks-scroll"
:parentVal="details.marks"
:parentVal="props.details.marks"
type="marks"
:disabled="BookingLockOrder['marks'] && isLockBooking"
:height="100"
@ -58,7 +58,10 @@
<div class="left">
<div
class="title"
:class="{ required: rules['description'] && rules['description'][0].required }"
:class="{
required:
props.rules['description'] && props.rules['description'][0].required,
}"
>
<span
@click="handleOpen(2)"
@ -72,22 +75,21 @@
name="goodsName"
label=""
:class="{
'goods-name-box': rules['goodsName'] && rules['goodsName'][0].required,
'goods-name-box':
props.rules['goodsName'] && props.rules['goodsName'][0].required,
}"
>
<i
style="top: 4px"
class="icon required goods-required"
v-if="rules['goodsName'] && rules['goodsName'][0].required"
v-if="props.rules['goodsName'] && props.rules['goodsName'][0].required"
></i>
<selectView
type="goodsName"
:defaultVal="details.goodsName"
searchApi="getGoodsname"
:defaultVal="props.details.goodsName"
searchApi="GetPackageSelectList"
:disabled="BookingLockOrder['goodsName'] && isLockBooking"
:searchQuery="{ queryItem: '', top: 50 }"
:showLabel="['goodsNameEN', 'goodsCode']"
:openSearch="true"
:showLabel="['packageName', 'ediCode']"
@change="getSelectViewRes"
style="width: 75%; max-width: 210px"
></selectView>
@ -95,7 +97,9 @@
</div>
<div class="cargo-mark">
<div
:class="{ required: rules['cargoid'] && rules['cargoid'][0].required }"
:class="{
required: props.rules['cargoid'] && props.rules['cargoid'][0].required,
}"
class="tit"
>货物标识</div
>
@ -108,12 +112,11 @@
>
<selectView
type="cargoId"
:defaultVal="details.cargoId"
searchApi="cargoData"
:searchQuery="{ name: '' }"
:disabled="BookingLockOrder['cargoId'] && isLockBooking"
:defaultVal="props.details.cargoId"
searchApi="getDictDropDown"
:searchQuery="{ code: 'cargo_tag' }"
:showLabel="['name']"
:openSearch="false"
:disabled="BookingLockOrder['cargoId'] && isLockBooking"
@change="getSelectViewRes"
style="width: 120px; margin-top: 7px"
></selectView>
@ -121,7 +124,9 @@
</div>
<div class="input">
<div
:class="{ required: rules['hsCode'] && rules['hsCode'][0].required }"
:class="{
required: props.rules['hsCode'] && props.rules['hsCode'][0].required,
}"
calss="tit"
>HS编码</div
>
@ -136,7 +141,7 @@
:ishd="BookingLockOrder['hsCode'] && isLockBooking"
type="hsCode"
size="small"
:parentVal="details.hsCode"
:parentVal="props.details.hsCode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -147,7 +152,7 @@
<textareaView
id="description-scroll"
class="input-box"
:parentVal="details.description"
:parentVal="props.details.description"
:disabled="BookingLockOrder['description'] && isLockBooking"
type="description"
:height="100"
@ -181,7 +186,7 @@
:allowClear="true"
size="small"
:disabled="BookingLockOrder['pkgs'] && isLockBooking"
v-model="details.pkgs"
v-model="props.details.pkgs"
type="number"
@change="changePkgs"
/>
@ -203,15 +208,13 @@
>
<selectView
type="kindPkgs"
:defaultVal="details.kindPkgs"
searchApi="GetPackage"
:defaultVal="props.details.kindPkgs"
searchApi="GetPackageSelectList"
:disabled="BookingLockOrder['kindPkgs'] && isLockBooking"
:searchQuery="{ KeyWord: '' }"
:showLabel="['name']"
:openSearch="false"
:showLabel="['packageName', 'ediCode']"
@change="getSelectViewRes"
>
</selectView>
style="width: 75%; max-width: 210px"
></selectView>
</a-form-item>
</a-col>
<a-col :span="12" style="overflow: hidden">
@ -228,7 +231,7 @@
:disabled="BookingLockOrder['kgs'] && isLockBooking"
size="small"
:allowClear="true"
v-model="details.kgs"
v-model="props.details.kgs"
/>
<i
class="iconfont icon-bianji1 edit-icon"
@ -252,7 +255,7 @@
:disabled="BookingLockOrder['cbm'] && isLockBooking"
size="small"
:allowClear="true"
v-model="details.cbm"
v-model="props.details.cbm"
/>
<i
class="iconfont icon-bianji1 edit-icon"
@ -262,7 +265,7 @@
</div>
</a-form-item>
</a-col>
<template v-if="details.cargoid == 'R'">
<template v-if="props.details.cargoid == 'R'">
<a-col :span="12">
<a-form-item
class="from-label"
@ -276,7 +279,7 @@
:ishd="BookingLockOrder['temperatureSet'] && isLockBooking"
type="temperatureSet"
size="small"
:parentVal="details.temperatureSet"
:parentVal="props.details.temperatureSet"
@getInputChange="inputChange"
/>
</a-form-item>
@ -294,7 +297,7 @@
:ishd="BookingLockOrder['reeferQuantity'] && isLockBooking"
type="reeferQuantity"
size="small"
:parentVal="details.reeferQuantity"
:parentVal="props.details.reeferQuantity"
@getInputChange="inputChange"
/>
</a-form-item>
@ -311,8 +314,8 @@
<a-select
:disabled="BookingLockOrder['tempid'] && isLockBooking"
size="small"
:default-value="details.tempid || 'C摄氏'"
v-model="details.tempid"
:default-value="props.details.tempid || 'C摄氏'"
v-model="props.details.tempid"
>
<a-select-option value="C"> C摄氏 </a-select-option>
<a-select-option value="F"> F华氏 </a-select-option>
@ -332,7 +335,7 @@
:ishd="BookingLockOrder['temperatureMin'] && isLockBooking"
type="temperatureMin"
size="small"
:parentVal="details.temperatureMin"
:parentVal="props.details.temperatureMin"
@getInputChange="inputChange"
/>
</a-form-item>
@ -350,7 +353,7 @@
:ishd="BookingLockOrder['temperatureMax'] && isLockBooking"
type="temperatureMax"
size="small"
:parentVal="details.temperatureMax"
:parentVal="props.details.temperatureMax"
@getInputChange="inputChange"
/>
</a-form-item>
@ -368,13 +371,13 @@
:ishd="BookingLockOrder['humidity'] && isLockBooking"
type="humidity"
size="small"
:parentVal="details.humidity"
:parentVal="props.details.humidity"
@getInputChange="inputChange"
/>
</a-form-item>
</a-col>
</template>
<template v-if="details.cargoid == 'D'">
<template v-if="props.details.cargoid == 'D'">
<a-col :span="12">
<a-form-item
class="from-label"
@ -388,7 +391,7 @@
:ishd="BookingLockOrder['dangerClass'] && isLockBooking"
type="dangerClass"
size="small"
:parentVal="details.dangerClass"
:parentVal="props.details.dangerClass"
@getInputChange="inputChange"
/>
</a-form-item>
@ -406,7 +409,7 @@
:ishd="BookingLockOrder['dangerNo'] && isLockBooking"
type="dangerNo"
size="small"
:parentVal="details.dangerNo"
:parentVal="props.details.dangerNo"
@getInputChange="inputChange"
/>
</a-form-item>
@ -424,7 +427,7 @@
:ishd="BookingLockOrder['dangerPage'] && isLockBooking"
type="dangerPage"
size="small"
:parentVal="details.dangerPage"
:parentVal="props.details.dangerPage"
@getInputChange="inputChange"
/>
</a-form-item>
@ -442,7 +445,7 @@
:ishd="BookingLockOrder['dangerLabel'] && isLockBooking"
type="dangerLabel"
size="small"
:parentVal="details.dangerLabel"
:parentVal="props.details.dangerLabel"
@getInputChange="inputChange"
/>
</a-form-item>
@ -468,7 +471,7 @@
:ishd="BookingLockOrder['linkMan'] && isLockBooking"
type="linkMan"
size="small"
:parentVal="details.linkMan"
:parentVal="props.details.linkMan"
@getInputChange="inputChange"
/>
</a-form-item>
@ -480,7 +483,7 @@
<a-input
:allowClear="true"
class="input-val num-box-right"
v-model="details.totalNo"
v-model="props.details.totalNo"
disabled
placeholder="自动生成"
/>
@ -500,7 +503,7 @@
<textareaView
class="input-box"
id="marks-scroll"
:parentVal="details.marks"
:parentVal="props.details.marks"
type="marks"
:height="500"
style="font-size: 20px; margin-right: 10px"
@ -521,7 +524,7 @@
<textareaView
id="description-scroll"
class="input-box"
:parentVal="details.description"
:parentVal="props.details.description"
type="description"
:height="500"
style="font-size: 20px; margin-right: 10px"
@ -551,7 +554,7 @@
<a-form v-if="textEntryType === 'pkgs'">
<div class="text-input">
<a-textarea
v-model="details.pkgstotal"
v-model="props.details.pkgstotal"
placeholder="请输入内容"
:auto-size="{ minRows: 6, maxRows: 9 }"
@change="pkgsTextChange"
@ -563,7 +566,7 @@
<a-form v-if="textEntryType === 'kgs'">
<div class="text-input">
<a-textarea
v-model="details.kgstotal"
v-model="props.details.kgstotal"
placeholder="请输入内容"
:auto-size="{ minRows: 6, maxRows: 9 }"
@change="kgsTextChange"
@ -575,7 +578,7 @@
<a-form v-if="textEntryType === 'cbm'">
<div class="text-input">
<a-textarea
v-model="details.cbmtotal"
v-model="props.details.cbmtotal"
placeholder="请输入内容"
:auto-size="{ minRows: 6, maxRows: 9 }"
@change="cbmTextChange"
@ -739,9 +742,9 @@
} else if (type === 'cargoid') {
props.details.cargoid = res.code || ''
if (res.code == 'R') {
props.rules['goodsname'][0].required = true
props.props.rules['goodsname'][0].required = true
} else {
props.rules['goodsname'][0].required = false
props.props.rules['goodsname'][0].required = false
}
} else if (['kindpkgs'].includes(type)) {
props.details.kindpkgs = res['name'] || ''

@ -1,6 +1,6 @@
<template>
<div class="more-edi" :style="{ paddingTop: '20px', paddingBottom: '10px' }">
<a-form ref="ediFrom" :model="details" :rules="rules" v-if="details">
<a-form ref="RefediFrom" :model="props.details" :rules="rules" v-if="props.details">
<div class="normal">
<a-row :gutter="16">
<a-col :span="8">
@ -13,7 +13,7 @@
>
<inputView
type="customNo"
:parentVal="details.customNo"
:parentVal="props.details.customNo"
@getInputChange="inputChange"
/>
</a-form-item>
@ -30,8 +30,8 @@
<div class="date-box">
<datePickerView
class="date-picker"
:disabled="details['customDate'] && isLockBooking"
:parentVal="details.customDate"
:disabled="props.details['customDate'] && isLockBooking"
:parentVal="props.details.customDate"
type="customDate"
format="YYYY-MM-DD"
@dateChange="dateChangeFun"
@ -50,7 +50,7 @@
>
<inputView
type="inspectionNo"
:parentVal="details.inspectionNo"
:parentVal="props.details.inspectionNo"
@getInputChange="inputChange"
/>
</a-form-item>
@ -67,8 +67,8 @@
<div class="date-box">
<datePickerView
class="date-picker"
:disabled="details['inspectionDate'] && isLockBooking"
:parentVal="details.inspectionDate"
:disabled="props.details['inspectionDate'] && isLockBooking"
:parentVal="props.details.inspectionDate"
type="inspectionDate"
format="YYYY-MM-DD"
@dateChange="dateChangeFun"
@ -87,7 +87,7 @@
>
<inputView
type="ediRemark"
:parentVal="details.ediRemark"
:parentVal="props.details.ediRemark"
@getInputChange="inputChange"
/>
</a-form-item>
@ -102,7 +102,7 @@
>
<selectView
type="enterprise"
:defaultVal="details.enterprise"
:defaultVal="props.details.enterprise"
searchApi="enterprise"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
@ -121,7 +121,7 @@
>
<inputView
type="enterpriseId"
:parentVal="details.enterpriseId"
:parentVal="props.details.enterpriseId"
@getInputChange="inputChange"
/>
</a-form-item>
@ -136,7 +136,7 @@
>
<inputView
type="customsNum"
:parentVal="details.customsNum"
:parentVal="props.details.customsNum"
@getInputChange="inputChange"
/>
</a-form-item>
@ -151,7 +151,7 @@
>
<inputView
type="preRecord"
:parentVal="details.preRecord"
:parentVal="props.details.preRecord"
@getInputChange="inputChange"
/>
</a-form-item>
@ -164,7 +164,7 @@
has-feedback
name="isMoreGood"
>
<a-radio v-model:checked="details.isMoreGood"></a-radio>
<a-radio v-model:checked="props.details.isMoreGood"></a-radio>
</a-form-item>
</a-col>
<a-col :span="8">
@ -175,7 +175,7 @@
has-feedback
name="isContainerSoc"
>
<a-radio v-model:checked="details.isContainerSoc"></a-radio>
<a-radio v-model:checked="props.details.isContainerSoc"></a-radio>
</a-form-item>
</a-col>
<a-col :span="8">
@ -188,7 +188,7 @@
>
<selectView
type="termDelivery"
:defaultVal="details.termDelivery"
:defaultVal="props.details.termDelivery"
searchApi="termDelivery"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
@ -207,7 +207,7 @@
>
<selectView
type="insperctService"
:defaultVal="details.insperctService"
:defaultVal="props.details.insperctService"
searchApi="insperctService"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
@ -226,7 +226,7 @@
>
<selectView
type="vessel2N"
:defaultVal="details.vessel2N"
:defaultVal="props.details.vessel2N"
searchApi="vessel2N"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
@ -245,7 +245,7 @@
>
<inputView
type="voyno2N"
:parentVal="details.voyno2N"
:parentVal="props.details.voyno2N"
@getInputChange="inputChange"
/>
</a-form-item>
@ -261,7 +261,7 @@
>
<inputView
type="sendCode"
:parentVal="details.sendCode"
:parentVal="props.details.sendCode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -274,10 +274,10 @@
has-feedback
name="receiveCode"
>
<!-- <a-input :allowClear="true" v-model="details.receiveCode" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.receiveCode" /> -->
<inputView
type="receiveCode"
:parentVal="details.receiveCode"
:parentVal="props.details.receiveCode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -290,10 +290,10 @@
has-feedback
name="ediAttn"
>
<!-- <a-input :allowClear="true" v-model="details.ediAttn" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.ediAttn" /> -->
<inputView
type="ediAttn"
:parentVal="details.ediAttn"
:parentVal="props.details.ediAttn"
@getInputChange="inputChange"
/>
</a-form-item>
@ -306,10 +306,10 @@
has-feedback
name="ediAttnTel"
>
<!-- <a-input :allowClear="true" v-model="details.ediAttnTel" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.ediAttnTel" /> -->
<inputView
type="ediAttnTel"
:parentVal="details.ediAttnTel"
:parentVal="props.details.ediAttnTel"
@getInputChange="inputChange"
/>
</a-form-item>
@ -322,10 +322,10 @@
has-feedback
name="ediAttnMail"
>
<!-- <a-input :allowClear="true" v-model="details.ediAttnMail" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.ediAttnMail" /> -->
<inputView
type="ediAttnMail"
:parentVal="details.ediAttnMail"
:parentVal="props.details.ediAttnMail"
@getInputChange="inputChange"
/>
</a-form-item>
@ -338,10 +338,10 @@
has-feedback
name="amsConsignee"
>
<!-- <a-input :allowClear="true" v-model="details.amsConsignee" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.amsConsignee" /> -->
<inputView
type="amsConsignee"
:parentVal="details.amsConsignee"
:parentVal="props.details.amsConsignee"
@getInputChange="inputChange"
/>
</a-form-item>
@ -354,10 +354,10 @@
has-feedback
name="amsNotifyParty"
>
<!-- <a-input :allowClear="true" v-model="details.amsNotifyParty" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.amsNotifyParty" /> -->
<inputView
type="amsNotifyParty"
:parentVal="details.amsNotifyParty"
:parentVal="props.details.amsNotifyParty"
@getInputChange="inputChange"
/>
</a-form-item>
@ -370,10 +370,10 @@
has-feedback
name="opEName"
>
<!-- <a-input :allowClear="true" v-model="details.opEName" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.opEName" /> -->
<inputView
type="opEName"
:parentVal="details.opEName"
:parentVal="props.details.opEName"
@getInputChange="inputChange"
/>
</a-form-item>
@ -386,8 +386,12 @@
has-feedback
name="opTel"
>
<!-- <a-input :allowClear="true" v-model="details.opTel" /> -->
<inputView type="opTel" :parentVal="details.opTel" @getInputChange="inputChange" />
<!-- <a-input :allowClear="true" v-model="props.details.opTel" /> -->
<inputView
type="opTel"
:parentVal="props.details.opTel"
@getInputChange="inputChange"
/>
</a-form-item>
</a-col>
<a-col :span="8">
@ -398,10 +402,10 @@
has-feedback
name="opEmail"
>
<!-- <a-input :allowClear="true" v-model="details.opEmail" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.opEmail" /> -->
<inputView
type="opEmail"
:parentVal="details.opEmail"
:parentVal="props.details.opEmail"
@getInputChange="inputChange"
/>
</a-form-item>
@ -414,10 +418,10 @@
has-feedback
name="goodsName"
>
<!-- <a-input :allowClear="true" v-model="details.goodsName" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.goodsName" /> -->
<inputView
type="goodsName"
:parentVal="details.goodsName"
:parentVal="props.details.goodsName"
@getInputChange="inputChange"
/>
</a-form-item>
@ -449,10 +453,10 @@
has-feedback
name="scaccode"
>
<!-- <a-input :allowClear="true" v-model="details.scaccode" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.scaccode" /> -->
<inputView
type="scaccode"
:parentVal="details.scaccode"
:parentVal="props.details.scaccode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -465,10 +469,10 @@
has-feedback
name="itncode"
>
<!-- <a-input :allowClear="true" v-model="details.itncode" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.itncode" /> -->
<inputView
type="itncode"
:parentVal="details.itncode"
:parentVal="props.details.itncode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -481,11 +485,11 @@
has-feedback
name="orderRemark"
>
<!-- <a-input v-model="details.orderRemark" /> -->
<!-- <a-input v-model="props.details.orderRemark" /> -->
<inputView
type="orderRemark"
:placeholder="'订舱人说明或ESL BP CODE'"
:parentVal="details.orderRemark"
:parentVal="props.details.orderRemark"
@getInputChange="inputChange"
/>
</a-form-item>
@ -498,10 +502,10 @@
has-feedback
name="freightpayer"
>
<!-- <a-input :allowClear="true" v-model="details.freightpayer" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.freightpayer" /> -->
<inputView
type="freightpayer"
:parentVal="details.freightpayer"
:parentVal="props.details.freightpayer"
@getInputChange="inputChange"
/>
</a-form-item>
@ -516,7 +520,7 @@
>
<inputView
type="kingTareweight"
:parentVal="details.kingTareweight"
:parentVal="props.details.kingTareweight"
@getInputChange="inputChange"
/>
</a-form-item>
@ -529,10 +533,14 @@
has-feedback
name="xmcywy"
>
<inputView type="xmcywy" :parentVal="details.xmcywy" @getInputChange="inputChange" />
<inputView
type="xmcywy"
:parentVal="props.details.xmcywy"
@getInputChange="inputChange"
/>
</a-form-item>
</a-col>
<a-col v-if="details.carrierid == 'EMC'" :span="8">
<a-col v-if="props.details.carrierid == 'EMC'" :span="8">
<a-form-item
label="Name accout"
:labelCol="{ xs: { span: 24 }, sm: { span: 9 } }"
@ -542,7 +550,7 @@
>
<inputView
type="emcNameAccount"
:parentVal="details.emcNameAccount"
:parentVal="props.details.emcNameAccount"
@getInputChange="inputChange"
/>
</a-form-item>
@ -558,7 +566,7 @@
>
<a-textarea
size="small"
v-model="details.weiTuoFang"
v-model="props.details.weiTuoFang"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -584,7 +592,7 @@
<a-textarea
size="small"
:allowClear="true"
v-model="details.exRemark1"
v-model="props.details.exRemark1"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -600,7 +608,7 @@
<a-textarea
size="small"
:allowClear="true"
v-model="details.exRemark2"
v-model="props.details.exRemark2"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -618,7 +626,7 @@
<a-textarea
size="small"
:allowClear="true"
v-model="details.exRemark3"
v-model="props.details.exRemark3"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -634,7 +642,7 @@
<a-textarea
size="small"
:allowClear="true"
v-model="details.exRemark4"
v-model="props.details.exRemark4"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -643,7 +651,7 @@
</div>
</div>
<!-- === 太平添加 start === -->
<template v-if="details.carrierid == 'PIL'">
<template v-if="props.details.carrierid == 'PIL'">
<div class="taiping">
<a-row :gutter="16">
<a-col :span="12">
@ -654,10 +662,10 @@
has-feedback
name="consigneeEdiCode"
>
<!-- <a-input :allowClear="true" v-model="details.consigneeEdiCode" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.consigneeEdiCode" /> -->
<inputView
type="consigneeEdiCode"
:parentVal="details.consigneeEdiCode"
:parentVal="props.details.consigneeEdiCode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -670,10 +678,10 @@
has-feedback
name="shipperEdiCode"
>
<!-- <a-input :allowClear="true" v-model="details.shipperEdiCode" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.shipperEdiCode" /> -->
<inputView
type="shipperEdiCode"
:parentVal="details.shipperEdiCode"
:parentVal="props.details.shipperEdiCode"
@getInputChange="inputChange"
/>
</a-form-item>
@ -686,10 +694,10 @@
has-feedback
name="notifyCdoe"
>
<!-- <a-input :allowClear="true" v-model="details.notifyCdoe" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.notifyCdoe" /> -->
<inputView
type="notifyCdoe"
:parentVal="details.notifyCdoe"
:parentVal="props.details.notifyCdoe"
@getInputChange="inputChange"
/>
</a-form-item>
@ -704,14 +712,14 @@
>
<selectView
type="salerCode"
:defaultVal="details.salerCode"
:defaultVal="props.details.salerCode"
searchApi="salerCode"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
<!-- <a-select size="small" default-value="CN087 | GRACE SUN" v-model="details.salerCode" @change="handleSaleChange">
<!-- <a-select size="small" default-value="CN087 | GRACE SUN" v-model="props.details.salerCode" @change="handleSaleChange">
<a-select-option v-for="(sales, sindex) in StoreSalesRepCode" :value="sales.NAME" :key="sindex">
{{ sales.NAME }}
</a-select-option>
@ -726,10 +734,10 @@
has-feedback
name="emanifestHbl"
>
<!-- <a-input :allowClear="true" v-model="details.emanifestHbl" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.emanifestHbl" /> -->
<inputView
type="emanifestHbl"
:parentVal="details.emanifestHbl"
:parentVal="props.details.emanifestHbl"
@getInputChange="inputChange"
/>
</a-form-item>
@ -744,14 +752,14 @@
>
<selectView
type="masterBolIndicator"
:defaultVal="details.masterBolIndicatorName"
:defaultVal="props.details.masterBolIndicatorName"
searchApi="StoreMasterBOLIndicator"
:searchQuery="{ NAME: '' }"
:showLabel="['NAME']"
:openSearch="false"
@change="getSelectViewRes"
></selectView>
<!-- <a-select size="small" v-model="details.masterBolIndicator" @change="handleMasterBolChange" optionLabelProp="label">
<!-- <a-select size="small" v-model="props.details.masterBolIndicator" @change="handleMasterBolChange" optionLabelProp="label">
<a-select-option v-for="(master, mindex) in StoreMasterBOLIndicator" :value="mindex" :key="mindex">
{{ master.NAME }}
</a-select-option>
@ -770,7 +778,7 @@
<a-textarea
size="small"
:allowClear="true"
v-model="details.s0CC0C"
v-model="props.details.s0CC0C"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -786,7 +794,7 @@
>
<a-textarea
size="small"
v-model="details.ckhi"
v-model="props.details.ckhi"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -805,7 +813,7 @@
>
<a-textarea
size="small"
v-model="details.cncm"
v-model="props.details.cncm"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -820,7 +828,7 @@
>
<a-textarea
size="small"
v-model="details.wncm"
v-model="props.details.wncm"
:auto-size="{ minRows: 2, maxRows: 5 }"
/>
</a-form-item>
@ -833,10 +841,10 @@
has-feedback
name="acihbl"
>
<!-- <a-input :allowClear="true" v-model="details.acihbl" /> -->
<!-- <a-input :allowClear="true" v-model="props.details.acihbl" /> -->
<inputView
type="acihbl"
:parentVal="details.acihbl"
:parentVal="props.details.acihbl"
@getInputChange="inputChange"
/>
</a-form-item>
@ -851,7 +859,7 @@
>
<inputView
type="CNPTNo"
:parentVal="details.cnptNo"
:parentVal="props.details.cnptNo"
@getInputChange="inputChange"
/>
</a-form-item>
@ -867,7 +875,12 @@
import inputView from '../components/inputView.vue'
import selectView from '../components/selectView.vue'
import datePickerView from '../components/datePickerView.vue'
import { useRoute, useRouter } from 'vue-router'
const router = useRouter()
const route = useRoute()
import { ref, reactive, getCurrentInstance, h, watch, onMounted } from 'vue'
let timer
let { ctx: that, proxy }: any = getCurrentInstance()
const props = defineProps({
details: {
type: Object,
@ -886,6 +899,24 @@
default: '',
},
})
const PropsDetails = ref(props.details)
const emit = defineEmits(['changeDetail'])
const RefediFrom = ref()
watch(
() => PropsDetails,
(nval) => {
if (!props.inSave) {
emit('changeDetail', {
detail: nval,
type: 'ediMore',
})
}
},
{
deep: true,
},
)
function inputChange({ type, value }) {
const bookingEDIExtArr = [
'sendCode',
@ -915,8 +946,20 @@
} else {
props.details[type] = value
}
this.$forceUpdate()
that.$forceUpdate()
}
function getSelectViewRes({ type, res }) {
if (type === 'masterBolIndicator') {
props.details.masterBolIndicator = res.ID || ''
props.details.masterBolIndicatorName = res.NAME || ''
} else if (type === 'salerCode') {
props.details.salerCode = res.ID
props.details.salerCodeName = res.NAME
}
}
defineExpose({
RefediFrom,
})
</script>
<style lang="less" scoped>
/deep/ .ant-form-explain {

File diff suppressed because it is too large Load Diff

@ -1,6 +1,6 @@
export default {
basicRules: {
bsno: [{ required: true, message: '请输入业务编号', trigger: 'change' }],
// bsno: [{ required: true, message: '请输入业务编号', trigger: 'change' }],
businessStatus: [{ required: false, message: '请选择业务状态', trigger: 'change' }],
feeStatus: [{ required: false, message: '请选择费用状态', trigger: 'change' }],
blType: [{ required: true, message: '请选择装运方式', trigger: 'change' }],
@ -16,12 +16,14 @@ export default {
operatorId: [{ required: false, message: '请选择操作员', trigger: 'change' }],
operatorCode: [{ required: false, message: '请选择操作员代码', trigger: 'change' }],
sale: [{ required: false, message: '请选择揽货人', trigger: 'change' }],
saleId: [{ required: false, message: '请选择揽货人ID', trigger: 'change' }],
doc: [{ required: false, message: '请选择单证', trigger: 'change' }],
customerService: [{ required: false, message: '请选择客服', trigger: 'change' }],
saleDeptId: [{ required: false, message: '请选择所属业务部门', trigger: 'change' }],
invoiceNo: [{ required: false, message: '请输入发票号', trigger: 'change' }],
customerNo: [{ required: false, message: '请输入委托编号', trigger: 'change' }],
bookingNo: [{ required: false, message: '请输入订舱编号', trigger: 'change' }],
orderNo: [{ required: false, message: '请输入订舱编号', trigger: 'change' }],
mblno: [{ required: false, message: '请输入主提单号', trigger: 'change' }],
hblno: [{ required: false, message: '请输入分提单号', trigger: 'change' }],
contractNo: [{ required: false, message: '请输入运费协议号', trigger: 'change' }],
@ -310,7 +312,7 @@ export default {
// 'bookingEDIExt.acihbl': [{ required: false, message: '请输入ACI HBL', trigger: 'change' }],
},
masterRules: {
masterNo: [{ required: false, message: '请输入主票业务编号', trigger: 'change' }],
// masterNo: [{ required: false, message: '请输入主票业务编号', trigger: 'change' }],
masterShipperId: [{ required: false, message: '请输入Master发货人', trigger: 'change' }],
masterConsigneeId: [{ required: false, message: '请输入Master收货人 ', trigger: 'change' }],
masterNotifyPartyId: [{ required: false, message: '请输入Master通知人', trigger: 'change' }],

Loading…
Cancel
Save