客户操作+格式单对比+提箱返场

master
sunzehua 7 months ago
parent 21c0e2e966
commit 46b0579529

12
.env

@ -1,8 +1,8 @@
NODE_ENV=production
VUE_APP_PREVIEW=true
VUE_APP_TYPE = 'customer'
# VUE_APP_TYPE = 'customer'
# VUE_APP_TYPE = 'hechuan'
# VUE_APP_TYPE = 'yunyingduan'
VUE_APP_TYPE = 'yunyingduan'
# VUE_APP_TYPE = 'gangjie'
# 打包部署的三个端 客户端customer 和川端hechuan 运营端djy
@ -19,16 +19,16 @@ VUE_APP_TYPE = 'customer'
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30813
# 运营端测试
# VUE_APP_API_BASE_URL=http://60.209.125.238:30814
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30814
VUE_APP_API_BASE_URL=http://60.209.125.238:30814
VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30814
# 港捷
# VUE_APP_API_BASE_URL=http://118.190.144.189:5001
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:5001
# 客户端正式
VUE_APP_API_BASE_URL=http://118.190.144.189:6001
VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6001
# VUE_APP_API_BASE_URL=http://118.190.144.189:6001
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6001
# 运营端正式
# VUE_APP_API_BASE_URL=http://118.190.144.189:6002

@ -19,8 +19,8 @@ VUE_APP_TYPE = 'yunyingduan'
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30813
# 运营端测试
VUE_APP_API_BASE_URL=http://60.209.125.238:30814
VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30814
# VUE_APP_API_BASE_URL=http://60.209.125.238:30814
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30814
# VUE_APP_API_BASE_URL=http://192.168.0.80:7373/
# VUE_APP_SOCKET_BASE_URL=http://192.168.0.80:7373/
@ -30,8 +30,8 @@ VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30814
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:5001
# 运营端正式
# VUE_APP_API_BASE_URL=http://118.190.144.189:6002
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6002
VUE_APP_API_BASE_URL=http://118.190.144.189:6002
VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6002
# 客户端正式
# VUE_APP_API_BASE_URL=http://118.190.144.189:6001

@ -956,6 +956,27 @@ export function RefreshBillTrace(parameter) {
})
}
export function SetTxxpEndTime(parameter) {
return axios({
url: '/BookingOrder/SetTxxpEndTime',
method: 'post',
params: parameter
})
}
export function RefreshYGT(parameter) {
return axios({
url: '/BookingYunZong/RefreshYGT?' + parameter,
method: 'post'
})
}
export function RefreshYard(parameter) {
return axios({
url: '/BookingYunZong/RefreshYard?' + parameter,
method: 'post'
})
}
export function GetToDoBCList(parameter) {
return axios({
url: '/TaskManageBC/GetToDoBCList',
@ -1168,6 +1189,14 @@ export function GetDraftCompareResultInfo(parameter) {
})
}
export function SaveDraftComparellanual(parameter) {
return axios({
url: '/TaskDraftCompare/SaveDraftCompareManual',
method: 'post',
data: parameter
})
}
export function GetShippingOrderCompareResult(parameter) {
return axios({
url: '/TaskShippingOrderCompare/GetShippingOrderCompareResult',

@ -373,10 +373,10 @@
<a-button type="danger" @click="showFlag = false">取消</a-button>
</template>
</a-modal>
<a-modal title="检索船期" :visible="visible" width="1200px" @cancel="visible = false">
<a-modal title="检索船期" :footer="null" :visible="visible" width="1200px" @cancel="visible = false">
<div style="display: flex;align-items: center;">
<a-row style="width:90%">
<a-form-model :model="searchForm" :label-col="{ span: 7 }" :wrapper-col="{ span: 17 }">
<a-row style="width:95%">
<a-form-model :model="searchForm" :label-col="{ span: 6 }" :wrapper-col="{ span: 15 }">
<a-col :span="6">
<a-form-model-item label="始发地">
{{ this.form.placeOfReceiptCityName }}
@ -387,19 +387,33 @@
{{ this.form.placeOfDeliveryCityName }}
</a-form-model-item>
</a-col>
<a-col :span="6">
<a-col :span="3">
<a-form-model-item label="箱型">
<a-select
show-search
v-model="searchForm.isoEquipmentCode"
:filter-option="filterOption"
size="small"
style="width: 100%">
<a-select-option v-for="(item, index) in ctnallList" :key="index" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="4">
<a-form-model-item label="船名">
<a-input v-model="searchForm.vesselName" />
<a-input size="small" v-model="searchForm.vesselName" />
</a-form-model-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-model-item label="航次号">
<a-input v-model="searchForm.carrierDepartureVoyageNumber" />
<a-input size="small" v-model="searchForm.carrierDepartureVoyageNumber" />
</a-form-model-item>
</a-col>
</a-form-model>
</a-row>
<a-button style="margin-left: 20px;" @click="handleOpenCQ" type="primary">检索</a-button>
<a-button style="margin-left: 10px;" @click="handleOpenCQ" type="primary">检索</a-button>
</div>
<a-spin :spinning="cqLoading">
<div class="box" v-for="(item, index) in shipList" :key="index">
@ -497,6 +511,7 @@ import {
CheckWarningBatchCopy, maskCopy
} from '@/api/modular/main/BookingLedger'
import { mapGetters } from 'vuex'
import moment from 'moment'
export default {
data() {
return {
@ -514,7 +529,9 @@ export default {
mskType: '',
mskNumber: '',
mskCopyId: '',
searchForm: {},
searchForm: {
isoEquipmentCode: ''
},
formLoading: false,
shipData: [],
contractnoList: [],
@ -614,6 +631,8 @@ export default {
importServiceMode: this.form.importServiceMode,
vesselOperatorCarrierCode: this.form.carrierCode,
startDate: this.form.earliestDepartureDate,
carrierCollectionOriginGeoID: this.form.carrierCollectionOriginGeoID,
carrierDeliveryDestinationGeoID: this.form.carrierDeliveryDestinationGeoID,
...this.searchForm
}
SearchShipSailingSchedule(data).then(res => {
@ -639,15 +658,20 @@ export default {
this.mskCopyId = copyId
this.getContractnoList()
this.shipData = []
//
if (!id) {
this.form = {
ctns: [],
ctns: [
{ ctnSufferWeight: 15000, ctnNum: 1, ctnCode: '22G1', ctnName: '20GP' },
{ ctnSufferWeight: 15000, ctnNum: 1, ctnCode: '45G11', ctnName: '40HC' }
],
isReefer: false,
productCode: 'MaerskContract',
carrierCode: 'MAEU',
isBookingPartOwnPrice: true,
importServiceMode: 'CY',
exportServiceMode: 'CY',
earliestDepartureDate: moment().format('YYYY-MM-DD'),
cargoType: 'DRY',
sender: 'BOOKAPI',
commodityCodeType: 'MaerskCode'
@ -739,6 +763,7 @@ export default {
handleSelectCQ(item) {
this.shipData = []
this.form.originDepartureDateTimeLocal = item.etd
this.form.isoEquipmentCode = this.searchForm.isoEquipmentCode
this.form.destinationArrivalDateTimeLocal = item.atd
this.form.placeOfReceiptUnLocCode = item.orignUNLocationCode
this.form.placeOfDeliveryUnLocCode = item.deliveryUNLocationCode
@ -748,6 +773,19 @@ export default {
this.form.estSailingDays = item.days
this.form.transportMode = item.transportMode
this.form.carrierProductId = item.carrierProductId
const arr = []
if (this.form.ctns.length > 0) {
this.form.ctns.forEach(item => {
if (item.ctnCode === this.searchForm.isoEquipmentCode) {
arr.push(1)
}
})
} else {
this.form.ctns.push({ ctnCode: this.searchForm.isoEquipmentCode, ctnNum: 1, ctnSufferWeight: 0 })
}
if (arr.length === 0) {
this.form.ctns.push({ ctnCode: this.searchForm.isoEquipmentCode, ctnNum: 1, ctnSufferWeight: 0 })
}
this.shipData.push(item)
this.visible = false
this.$forceUpdate()
@ -782,6 +820,7 @@ export default {
});
},
handleSave() {
console.log(this.form);
this.$refs.form.validate(valid => {
if (valid) {
this.form.carrierId = 'MSK'
@ -858,6 +897,7 @@ export default {
this.portloadList.forEach(item => {
if (item.carrierGeoID === val) {
this.form.placeOfReceiptCityName = item.cityName
this.form.carrierCollectionOriginGeoID = item.carrierGeoID
this.form.placeOfReceiptCountryCode = item.countryCode
this.form.userPlaceOfReceiptUnLocCode = item.unLocationCode
this.form.userPlaceOfReceiptCityName = item.cityName
@ -872,6 +912,7 @@ export default {
if (item.carrierGeoID === val) {
this.form.placeOfDeliveryCityName = item.cityName
this.form.placeOfDeliveryCountryCode = item.countryCode
this.form.carrierDeliveryDestinationGeoID = item.carrierGeoID
this.form.userPlaceOfDeliveryUnLocCode = item.unLocationCode
this.form.userPlaceOfDeliveryCityName = item.cityName
this.form.userPlaceOfDeliveryCountryCode = item.countryCode

@ -492,7 +492,11 @@
</a-row>
<a-row>
其他信息
<div>账号{{ details.extendData.Account }}&nbsp;&nbsp;&nbsp;密码{{ details.extendData.Password }}</div>
<div>
账号{{ details.extendData.Account }}&nbsp;&nbsp;&nbsp;
密码{{ details.extendData.Password }}&nbsp;&nbsp;&nbsp;
邮箱{{ details.extendData.OpMail }}
</div>
</a-row>
</a-form-model>
</div>

@ -519,21 +519,15 @@
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="4">
<a-form-model-item
class="from-label"
label="航线操作"
label="客户操作"
:labelCol="userLabelCol"
:wrapperCol="userWrapperCol"
has-feedback
prop="route">
<selectView
type="route"
:defaultVal="details.route"
:disabled="BookingLockOrder['route'] && isLockBooking"
searchApi="GetSysUserPage"
:searchQuery="{ name: '' }"
:showLabel="['name']"
:openSearch="true"
:isCopy="true"
@change="getSelectViewRes"></selectView>
prop="bookingUserName">
<inputView
type="bookingUserName"
:parentVal="details.bookingUserName"
@getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="8" :xl="4">
@ -934,9 +928,10 @@ export default {
},
deep: true
},
'$route.query': {
'$route': {
immediate: true,
handler(nD, oD) {
console.log(this.$route,111)
this.id = this.$route.query.id
if (this.$route.name === 'BookingDetail') {
this.init()

@ -2362,7 +2362,7 @@ export default {
document.body.removeChild(cInput);
},
editColumns(row) {
this.$router.push({ name: 'BookingDetail', query: { id: row.id, type: row.carrierid, mblno: row.mblno } })
this.$router.push({ name: 'BookingDetail', query: { id: row.id, type: row.carrierid, mblno: row.mblno ? row.mblno : '' } })
},
getList(queryParam = {}, isInit = false, isAdd = 'normal') {
this.$set(this.gridOptions, 'loading', true)

@ -4,10 +4,12 @@
<a-card :bordered="false" :bodyStyle="{ padding: '10px 20px' }">
<div class="from-line">
<div class="left" v-if="!isLockBooking">
<a-button class="btn btn-add" type="primary" @click="addboxLine"> <span style="margin-right: 5px;"
class="iconfont icon-zhizhishu"></span>添加</a-button>
<a-button class="btn btn-add" type="primary" @click="addboxLine"> <span
style="margin-right: 5px;"
class="iconfont icon-zhizhishu"></span>添加</a-button>
<a-button class="btn btn-delete" @click="removeLine" :style="{ marginRight: '20px' }"><span
style="margin-right: 5px;" class="iconfont icon-shanchu1"></span>删除</a-button>
style="margin-right: 5px;"
class="iconfont icon-shanchu1"></span>删除</a-button>
<a-button class="btn btn-more-name" type="primary" @click="openDialog" :disabled="tableData.length === 0">
<a-icon type="appstore" />多品名
</a-button>
@ -23,15 +25,24 @@
<a-button class="btn btn-weight" type="primary" @click="arrowsWeight">
<a-icon type="arrows-alt" />展开箱量
</a-button>
<a-button class="btn btn-add" type="primary" @click="handleRefsh"><span style="margin-right: 5px;"
class="iconfont icon-shuaxin"></span>刷新</a-button>
<a-button class="btn btn-add" type="primary" @click="handleRefsh"><span
style="margin-right: 5px;"
class="iconfont icon-shuaxin"></span>刷新</a-button>
</div>
<div v-if="details.autoYardImport && !details.autoYardImport.isRead"
<div
v-if="details.autoYardImport && !details.autoYardImport.isRead"
style="display: inline-block;margin-left: 10px;padding-top: 5px;">
<a-icon v-if="details.autoYardImport && details.autoYardImport.status == ''" @click="handleOpen"
type="check-circle" theme="filled" style="color: green;font-size: 19px;cursor: pointer;" />
<a-icon v-if="details.autoYardImport && details.autoYardImport.status == ''" @click="handleOpen"
type="exclamation-circle" theme="filled"
<a-icon
v-if="details.autoYardImport && details.autoYardImport.status == '已导入'"
@click="handleOpen"
type="check-circle"
theme="filled"
style="color: green;font-size: 19px;cursor: pointer;" />
<a-icon
v-if="details.autoYardImport && details.autoYardImport.status == '未导入'"
@click="handleOpen"
type="exclamation-circle"
theme="filled"
style="color: rgb(197, 194, 16);font-size: 19px;cursor: pointer;" />
</div>
<div class="table-right">
@ -44,9 +55,18 @@
</div>
<div v-if="tableLoaded">
<!-- rowKeyFieldName="rowKey" -->
<ve-table :columns="columns" :table-data="tableData" borderY ref="tableRef" style="min-width: 970"
:cell-autofill-option="cellAutofillOption" :editOption="editOption" :rowKeyFieldName="rowKeyName"
:rowStyleOption="rowStyleOption" :checkbox-option="checkboxOption" :clipboard-option="clipboardOption"
<ve-table
:columns="columns"
:table-data="tableData"
borderY
ref="tableRef"
style="min-width: 970"
:cell-autofill-option="cellAutofillOption"
:editOption="editOption"
:rowKeyFieldName="rowKeyName"
:rowStyleOption="rowStyleOption"
:checkbox-option="checkboxOption"
:clipboard-option="clipboardOption"
:cellSelectionOption="cellSelectionOption" />
<div class="table-no-data" v-if="tableData.length === 0"></div>
</div>
@ -54,10 +74,19 @@
</a-card>
</a-spin>
<a-modal title="多品名维护" width="80%" :visible="moreVisible" :confirmLoading="moreModelconfirm" :maskClosable="false"
<a-modal
title="多品名维护"
width="80%"
:visible="moreVisible"
:confirmLoading="moreModelconfirm"
:maskClosable="false"
@cancel="handleModelCancel">
<div class="model-content">
<ve-table style="width: 100%" :columns="modelColumns" :table-data="tableData" :radio-option="radioOption"
<ve-table
style="width: 100%"
:columns="modelColumns"
:table-data="tableData"
:radio-option="radioOption"
row-key-field-name="rowKey" />
<div class="model-botton-box">
<a-button class="btn" type="primary" @click="addChildData"></a-button>
@ -65,9 +94,15 @@
<a-button class="btn" type="primary" @click="saveChildData"></a-button>
</div>
<div class="model-child-table">
<ve-table :columns="childColumns" :table-data="childTableData" borderY
:cell-autofill-option="cellAutofillOption" :editOption="editChildOption" rowKeyFieldName="rowKey"
:rowStyleOption="rowStyleOption" :checkbox-option="checkChildboxOption"
<ve-table
:columns="childColumns"
:table-data="childTableData"
borderY
:cell-autofill-option="cellAutofillOption"
:editOption="editChildOption"
rowKeyFieldName="rowKey"
:rowStyleOption="rowStyleOption"
:checkbox-option="checkChildboxOption"
:clipboard-option="clipboardChildOption" />
<div class="table-no-data" v-if="childTableData.length === 0"></div>
</div>
@ -1910,15 +1945,17 @@ export default {
data.map((item, index) => {
const _data = {
rowKey: lastNum + index,
weightype: '',
weighkgs: ''
weightype: ''
}
ctnSetArr.forEach(ite => {
if (ite.code !== 'KINDPKGS') {
_data[ite.intoName] = item[ite.code]
} else {
if (ite.code === 'KINDPKGS') {
_data.kindpkgs = kindpkgsOld || item.KINDPKGS
}
if (ite.code === 'WEIGHKGS') {
const setWeighkgs = this.calc(Number(item.KGS), Number(item.TAREWEIGHT), '+')
_data.weighkgs = setWeighkgs
}
_data[ite.intoName] = item[ite.code]
})
addTable.push(_data)
})

@ -279,22 +279,25 @@
</a-popconfirm>
</template>
<template #bookstatus="{ row, column, rowIndex }">
<div style="display: flex;align-items: center;">
<div style="display: flex; align-items: center">
<a-icon
v-if="row.isBookingYZ != 0"
style="cursor: pointer;color: rgb(7, 231, 56);"
style="cursor: pointer; color: rgb(7, 231, 56)"
@click="handleRefshYZOnce(row, rowIndex)"
type="reload" />
type="reload"
/>
<a-spin :spinning="row.refshYzitemLoad">
<div
:style="row.isBookingYZ == 0 ? 'padding-left:14px' : ''"
class="billtrace-box"
:class="column.resizeWidth > 240 ? 'normal-box' : 'flex-box'">
:class="column.resizeWidth > 240 ? 'normal-box' : 'flex-box'"
>
<div
class="billtrace-btn"
v-for="(btn, bindex) in row.bookstatus"
:class="btn.staCode"
:key="bindex">
:key="bindex"
>
<a-popover placement="topLeft" v-if="btn.staTime">
<div slot="content">{{ btn.staTime }}</div>
<span @click="handleGetWebDataYZ(row, btn.staCode)" :class="{ active: btn.isChecked }">{{
@ -302,13 +305,16 @@
}}</span>
</a-popover>
<span
style="cursor: pointer;"
style="cursor: pointer"
@click="handleGetWebDataYZ(row, btn.staCode)"
:class="{ active: btn.isChecked }"
v-else>{{ enmuBookingBtn(btn.staCode) }}</span>
v-else
>{{ enmuBookingBtn(btn.staCode) }}</span
>
<i
class="iconfont icon-xiaoyoujiantou"
:class="{ hide: bindex === row.bookstatus.length - 1 }"></i>
:class="{ hide: bindex === row.bookstatus.length - 1 }"
></i>
</div>
</div>
</a-spin>
@ -317,34 +323,41 @@
<template #statuslogs="{ row, column }">
<div v-if="row.statuslogs1">
<div v-if="row.statuslogs1.length > 0">
<div class="billtrace-btn1" style="display: flex;align-items: center;">
<div class="billtrace-btn1" style="display: flex; align-items: center">
<a-icon
style="cursor: pointer; color: rgb(7, 231, 56); margin-right: 5px"
@click="handleRefshYard(row)"
type="reload"
/>
<a-spin :spinning="row.webDataLoad">
<a-popover placement="topLeft">
<div slot="content">
<div>
<span class="txfcSpan" style="width: 120px;">箱号</span>
<span class="txfcSpan" style="width: 120px">箱号</span>
<span @click="handleGetWebData(row, 'YARD')" class="txfcSpan">提箱</span>
<span @click="handleGetWebData(row, 'YARD')" class="txfcSpan">返场</span>
</div>
<div v-for="(item, index) in row.statuslogs1" :key="index">
<span class="txfcSpan" style="width: 120px;">{{ item.cntrno }}</span>
<span class="txfcSpan" style="width: 120px">{{ item.cntrno }}</span>
<span class="txfcSpan">{{ item.txopTime }}</span>
<span class="txfcSpan">{{ item.fcopTime }}</span>
</div>
</div>
<div
@click="handleGetWebData(row, 'YARD')"
:class="{ active: row.statuslogs1[0].txopTime }">
:class="{ active: row.statuslogs1[0].txopTime }"
>
提箱
</div>
<div
@click="handleGetWebData(row, 'YARD')"
:class="{ active: row.statuslogs1[0].fcopTime }">
:class="{ active: row.statuslogs1[0].fcopTime }"
>
返场
</div>
</a-popover>
</a-spin>
<span style="margin-left: 10px;">未提{{ row.txopNumber }}/{{ row.statuslogs1.length }}</span>
<span style="margin-left: 5px">未提{{ row.txopNumber }}/{{ row.statuslogs1.length }}</span>
</div>
</div>
</div>
@ -360,13 +373,19 @@
</template>
<template #txxp="{ row }">
<div style="display: flex;align-items: center;">
<span style="margin-right: 10px;cursor: pointer;color: #36cfc9;" class="iconfont icon-dayinxiaopiao" @click="TxxpLink(row)"></span>
<div v-if="row.extendState" style="display: flex;align-items: center;">
<span
style="margin-right: 10px;cursor: pointer;color: #36cfc9;"
class="iconfont icon-dayinxiaopiao"
@click="TxxpLink(row)"></span>
<div style="display: flex;align-items: center;">
<div>
<div>{{ row.extendState.txxpBeginTime.substring(0,16) }}</div>
<div>{{ row.extendState.txxpEndTime.substring(0,16) }}</div>
<div v-if="row.extendState && row.extendState.txxpEndTime">{{ row.extendState.txxpEndTime.substring(0, 16) }}</div>
<div> <a @click="openStop(row)" style="font-size: 12px;" href="javascript:;">修改到期时间</a></div>
</div>
<div v-if="row.extendState.txxpPdfUrl" @click="handleLookPdf(row)" style="cursor: pointer;color: #36cfc9;margin-left:10px;"></div>
<div
v-if="row.extendState && row.extendState.txxpPdfUrl"
@click="handleLookPdf(row)"
style="cursor: pointer;color: #36cfc9;margin-left:10px;">查看</div>
</div>
</div>
</template>
@ -389,7 +408,7 @@
比对时间: <span>{{ row.lstShipOrderCompareDate }}</span>
</p>
</template>
<div style="cursor: pointer;" @click="handleOpenResult(row)" v-if="row.lstShipOrderCompareRlt">
<div style="cursor: pointer" @click="handleOpenResult(row)" v-if="row.lstShipOrderCompareRlt">
<div v-if="row.lstShipOrderCompareRlt == 'DIFF'">
<a-icon type="close-circle" :style="{ color: 'red' }" />
</div>
@ -417,7 +436,8 @@
<a-icon
class="TablelstShipOrderCompareRltRedo"
@click="excuteShippingOrderCompareBatch(row)"
type="redo" />
type="redo"
/>
</div>
</template>
<template #lstDraftCompareRlt="{ row }">
@ -442,7 +462,8 @@
title="查看比对结果"
class="TablelstShipOrderCompareRltRedo"
@click="handleFormatContrast(row)"
type="diff" />
type="diff"
/>
</div>
</template>
<template #goodsStatusList="{ row }">
@ -607,16 +628,28 @@
:title="TaskShippingOrderCompareData.isExistsDiff ? '下货纸比对(有差异)' : '下货纸比对(正常)'"
@cancel="TaskShippingOrderCompareHandleCancel"
:visible="TaskShippingOrderCompareVisible"
width="40%">
class="formatSheetModal"
width="40%"
>
<template slot="footer">
<a-button key="back" @click="TaskShippingOrderCompareHandleCancel"> </a-button>
</template>
<div
style="margin:10px 0;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"
:title="TaskShippingOrderCompareData.manualFeedBackResult.operNote"
v-if="TaskShippingOrderCompareData.manualFeedBackResult">
{{ TaskShippingOrderCompareData.manualFeedBackResult.operTime }}
人工修正 {{ TaskShippingOrderCompareData.manualFeedBackResult.operUser }}
原因{{ TaskShippingOrderCompareData.manualFeedBackResult.reason }}
备注 {{ TaskShippingOrderCompareData.manualFeedBackResult.operNote }}
</div>
<p class="TaskShippingOrderCompareP">
{{ TaskShippingOrderCompareData.compareTime }}
<span v-if="TaskShippingOrderCompareData.isExistsDiff">
比对异常 合计
<span class="TaskShippingOrderCompareSpan">{{ TaskShippingOrderCompareData.total }}</span>
<a v-if="TaskShippingOrderCompareData.lstShipOrderCompareRlt === 'DIFF'" href="javascript:;" @click="openPersonal"></a>
</span>
</p>
<div class="TaskShippingOrderCompareMainBox">
@ -638,7 +671,8 @@
class="TaskShippingOrderCompareMainList"
v-for="(item, index) in TaskShippingOrderCompareData.showDetailList"
:key="index"
v-show="item.pCode != 'ContaList'">
v-show="item.pCode != 'ContaList'"
>
<p>{{ item.fieldName }}:</p>
<p>{{ item.reqVal }}</p>
<p v-if="item.msg">
@ -664,8 +698,10 @@
v-for="(item, index) in TaskShippingOrderCompareData.showDetailList"
:key="index"
v-show="item.pCode == 'ContaList'"
:class="item.fieldName == '箱号' ? 'TaskShippingOrderCompareMainList BoxNo' : 'TaskShippingOrderCompareMainList'
">
:class="
item.fieldName == '箱号' ? 'TaskShippingOrderCompareMainList BoxNo' : 'TaskShippingOrderCompareMainList'
"
>
<p>{{ item.fieldName }}:</p>
<p>{{ item.reqVal }}</p>
<p v-if="item.msg">
@ -683,212 +719,261 @@
:title="formatSheet.isExistsDiff ? '格式单比对(有差异)' : '格式单比对(正常)'"
@cancel="formatSheetVisible = false"
:visible="formatSheetVisible"
width="90%">
class="formatSheetModal"
width="90%"
>
<template slot="footer">
<a-button key="back" @click="formatSheetVisible = false"> 关闭 </a-button>
</template>
<div style="display: flex;">
<div style="width:55%">
<div>
<div
v-if="formatSheet.total > 0"
style="display: flex;justify-content: space-between;"
class="TaskShippingOrderCompareP">
<div>
{{ formatSheet.compareTime }}
<span v-if="formatSheet.isExistsDiff">
比对异常 合计
<span class="TaskShippingOrderCompareSpan">{{ formatSheet.total }}</span>
</span>
</div>
<div>
显示全部
<a-switch :checked="formatFlag" @change="formatFlag = !formatFlag" />
</div>
</div>
<div style="display: flex;align-items: flex-start;" v-else>
<a-icon
style="color: rgb(82,196,26);font-size: 50px;margin-top: 5px;"
type="check-circle"
theme="filled" />
<div style="margin-left: 20px;">
<div style="font-weight: bold;font-size: 22px;">格式单比对(正常)</div>
<div style="font-weight: bold;">提单号:{{ formatSheet.mBlNo }}</div>
<div style="font-weight: bold;">{{ formatSheet.compareTime }}</div>
</div>
<div style="margin:5px 0px 0px 40px">
显示全部
<a-switch :checked="formatFlag" @change="formatFlag = !formatFlag" />
</div>
</div>
<div
v-if="!formatFlag && formatSheet.total > 0"
class="TaskShippingOrderCompareMainBox"
style="height: 600px;">
<div class="TaskShippingOrderCompareMain">
<div class="TaskShippingOrderCompareMainHeader">
<div>
<p>提单号</p>
<div style="width: 100%;height: 1px;border-bottom: 1px dashed;margin: 5px 0;"></div>
<p>{{ formatSheet.mBlNo }}</p>
</div>
<div>
<div style="margin:10px 0" v-if="formatSheet.manualFeedBackResult">
{{ formatSheet.manualFeedBackResult.operTime }}
人工修正 {{ formatSheet.manualFeedBackResult.operUser }}
原因{{ formatSheet.manualFeedBackResult.reason }}
备注 {{ formatSheet.manualFeedBackResult.operNote }}
</div>
<div style="display: flex">
<div style="width: 55%">
<div>
<div
v-if="formatSheet.total > 0"
style="display: flex; justify-content: space-between"
class="TaskShippingOrderCompareP"
>
<div>
{{ formatSheet.compareTime }}
<span v-if="formatSheet.isExistsDiff">
比对异常 合计
<span class="TaskShippingOrderCompareSpan">{{ formatSheet.total }}</span>
<a v-if="formatSheet.lstDraftCompareRlt === 'DIFF'" href="javascript:;" @click="openPersonal"></a>
</span>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
style="display: flex;margin-top: 15px;"
v-show="item.pCode != 'ContaList' && item.isDiff">
<p style="padding-top: 4px;" v-if="item.msg">
<a-icon
style="color: rgb(194,5,5);font-size: 18px;margin-right: 35px;"
type="close-circle"
theme="filled" />
</p>
<p v-if="item.isDiff" style="width: 90px;margin-right: 20px;">{{ item.fieldName }}:</p>
<div v-if="item.isDiff" style="width:60%">
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(0,153,204);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">本地</span>
<div style="margin-bottom: 15px;">{{ item.reqVal }}</div>
</div>
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(100,163,90);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">格式单</span>
<div v-html="item.mergeHtml"></div>
</div>
</div>
<div>
显示全部
<a-switch :checked="formatFlag" @change="formatFlag = !formatFlag" />
</div>
</div>
<div class="TaskShippingOrderCompareMain">
<div>
<div>
<p>箱信息</p>
<div style="width: 100%;height: 1px;border-bottom: 1px dashed;margin: 5px 0;"></div>
</div>
<div style="display: flex; align-items: flex-start" v-else>
<a-icon
style="color: rgb(82, 196, 26); font-size: 50px; margin-top: 5px"
type="check-circle"
theme="filled"
/>
<div style="margin-left: 20px">
<div style="font-weight: bold; font-size: 22px">格式单比对(正常)</div>
<div style="font-weight: bold">提单号:{{ formatSheet.mBlNo }}</div>
<div style="font-weight: bold">{{ formatSheet.compareTime }}</div>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
v-show="(item.pCode == 'ContaList' && item.isDiff) || item.fieldName == '箱号'"
style="display: flex;margin-top: 15px;align-items: flex-start;">
<div v-if="item.fieldName == '箱号' && formatSheet.isShowCntall">:{{ item.primaryKey }}</div>
<p style="padding-top: 4px;" v-if="item.msg && item.isDiff && item.fieldName != '箱号'">
<a-icon
style="color: rgb(194,5,5);font-size: 18px;margin-right: 35px;"
type="close-circle"
theme="filled" />
</p>
<p v-if="item.isDiff && item.fieldName != '箱号'" style="width: 90px;margin-right: 20px;">{{
item.fieldName }}:</p>
<div v-if="item.isDiff && item.fieldName != '箱号'" style="width:60%">
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(0,153,204);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">本地</span>
<div style="margin-bottom: 15px;">{{ item.reqVal }}</div>
<div style="margin: 5px 0px 0px 40px">
显示全部
<a-switch :checked="formatFlag" @change="formatFlag = !formatFlag" />
</div>
</div>
<div
v-if="!formatFlag && formatSheet.total > 0"
class="TaskShippingOrderCompareMainBox"
style="height: 600px"
>
<div class="TaskShippingOrderCompareMain">
<div class="TaskShippingOrderCompareMainHeader">
<div>
<p>提单号</p>
<div style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"></div>
<p>{{ formatSheet.mBlNo }}</p>
</div>
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(100,163,90);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">格式单</span>
<div v-html="item.mergeHtml"></div>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
style="display: flex; margin-top: 15px"
v-show="item.pCode != 'ContaList' && item.isDiff"
>
<p style="padding-top: 4px" v-if="item.msg">
<a-icon
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
type="close-circle"
theme="filled"
/>
</p>
<p v-if="item.isDiff" style="width: 90px; margin-right: 20px">{{ item.fieldName }}:</p>
<div v-if="item.isDiff" style="width: 60%">
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">本地</span>
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
</div>
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">格式单</span>
<div v-html="item.mergeHtml"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div v-if="!formatFlag && formatSheet.total == 0"></div>
<div v-if="formatFlag" class="TaskShippingOrderCompareMainBox" style="height: 600px;">
<div class="TaskShippingOrderCompareMain">
<div class="TaskShippingOrderCompareMainHeader">
<div class="TaskShippingOrderCompareMain">
<div>
<p>提单号</p>
<div style="width: 100%;height: 1px;border-bottom: 1px dashed;margin: 5px 0;"></div>
<p>{{ formatSheet.mBlNo }}</p>
</div>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
style="display: flex;margin-top: 15px;"
v-show="item.pCode != 'ContaList'">
<p style="padding-top: 4px;" v-if="item.msg">
<a-icon
style="color: rgb(194,5,5);font-size: 18px;margin-right: 35px;"
type="close-circle"
theme="filled" />
</p>
<p style="padding-top: 4px;" v-else>
<a-icon
style="color: rgb(0,153,68);font-size: 18px;margin-right: 35px;"
type="check-circle"
theme="filled" />
</p>
<p style="width: 90px;margin-right: 20px;">{{ item.fieldName }}:</p>
<div style="width:60%">
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(0,153,204);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">本地</span>
<div style="margin-bottom: 15px;">{{ item.reqVal }}</div>
<div>
<p>箱信息</p>
<div style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"></div>
</div>
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(100,163,90);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">格式单</span>
<div v-if="item.isDiff" v-html="item.mergeHtml"></div>
<div v-else v-html="item.targetVal"></div>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
v-show="(item.pCode == 'ContaList' && item.isDiff) || item.fieldName == '箱号'"
style="display: flex; margin-top: 15px; align-items: flex-start"
>
<div v-if="item.fieldName == '箱号' && formatSheet.isShowCntall">:{{ item.primaryKey }}</div>
<p style="padding-top: 4px" v-if="item.msg && item.isDiff && item.fieldName != '箱号'">
<a-icon
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
type="close-circle"
theme="filled"
/>
</p>
<p v-if="item.isDiff && item.fieldName != '箱号'" style="width: 90px; margin-right: 20px">
{{ item.fieldName }}:
</p>
<div v-if="item.isDiff && item.fieldName != '箱号'" style="width: 60%">
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">本地</span>
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
</div>
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">格式单</span>
<div v-html="item.mergeHtml"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TaskShippingOrderCompareMain">
<div>
<div>
<p>箱信息</p>
<div style="width: 100%;height: 1px;border-bottom: 1px dashed;margin: 5px 0;"></div>
<!-- <div>箱号:{{ formatSheet.primaryKey }}</div> -->
<div v-if="!formatFlag && formatSheet.total == 0"></div>
<div v-if="formatFlag" class="TaskShippingOrderCompareMainBox" style="height: 600px">
<div class="TaskShippingOrderCompareMain">
<div class="TaskShippingOrderCompareMainHeader">
<div>
<p>提单号</p>
<div style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"></div>
<p>{{ formatSheet.mBlNo }}</p>
</div>
</div>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
v-show="item.pCode == 'ContaList'"
style="display: flex;margin-top: 15px;align-items: flex-start;">
<div v-if="item.fieldName == '箱号'">:{{ item.primaryKey }}</div>
<div style="display: flex;align-items: flex-start;" v-else>
<p style="padding-top: 4px;" v-if="item.msg">
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
style="display: flex; margin-top: 15px"
v-show="item.pCode != 'ContaList'"
>
<p style="padding-top: 4px" v-if="item.msg">
<a-icon
style="color: rgb(194,5,5);font-size: 18px;margin-right: 35px;"
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
type="close-circle"
theme="filled" />
theme="filled"
/>
</p>
<p style="padding-top: 4px;" v-else>
<p style="padding-top: 4px" v-else>
<a-icon
style="color: rgb(0,153,68);font-size: 18px;margin-right: 35px;"
style="color: rgb(0, 153, 68); font-size: 18px; margin-right: 35px"
type="check-circle"
theme="filled" />
theme="filled"
/>
</p>
<p style="width: 90px;margin-right: 20px;flex-shrink:0">{{ item.fieldName }}:</p>
<div style="width:60%">
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(0,153,204);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">本地</span>
<div style="margin-bottom: 15px;">{{ item.reqVal }}</div>
<p style="width: 90px; margin-right: 20px">{{ item.fieldName }}:</p>
<div style="width: 60%">
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">本地</span>
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
</div>
<div style="display: flex;">
<a-icon style="margin-top: 4px;margin-right: 5px;color: rgb(100,163,90);" type="right-circle" />
<span style="margin-right: 10px;font-weight: bold;width: 42px;flex-shrink:0;">格式单</span>
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">格式单</span>
<div v-if="item.isDiff" v-html="item.mergeHtml"></div>
<div v-else v-html="item.targetVal"></div>
</div>
</div>
</div>
</div>
<div class="TaskShippingOrderCompareMain">
<div>
<div>
<p>箱信息</p>
<div style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"></div>
<!-- <div>箱号:{{ formatSheet.primaryKey }}</div> -->
</div>
</div>
<div
v-for="(item, index) in formatSheet.showDetailList"
:key="index"
v-show="item.pCode == 'ContaList'"
style="display: flex; margin-top: 15px; align-items: flex-start"
>
<div v-if="item.fieldName == '箱号'">:{{ item.primaryKey }}</div>
<div style="display: flex; align-items: flex-start" v-else>
<p style="padding-top: 4px" v-if="item.msg">
<a-icon
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
type="close-circle"
theme="filled"
/>
</p>
<p style="padding-top: 4px" v-else>
<a-icon
style="color: rgb(0, 153, 68); font-size: 18px; margin-right: 35px"
type="check-circle"
theme="filled"
/>
</p>
<p style="width: 90px; margin-right: 20px; flex-shrink: 0">{{ item.fieldName }}:</p>
<div style="width: 60%">
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">本地</span>
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
</div>
<div style="display: flex">
<a-icon
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
type="right-circle"
/>
<span style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0">格式单</span>
<div v-if="item.isDiff" v-html="item.mergeHtml"></div>
<div v-else v-html="item.targetVal"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<a-spin class="padUrl" style="width: 100%; min-height: 600px" :spinning="pdfLoading">
<iframe style="width: 100%; height: 100%" :src="formatPdf" frameborder="0"></iframe>
</a-spin>
</div>
<a-spin class="padUrl" style="width: 100%;min-height: 600px;" :spinning="pdfLoading">
<iframe style="width: 100%;height: 100%;" :src="formatPdf" frameborder="0"></iframe>
</a-spin>
</div>
</a-modal>
<a-modal :maskClosable="false" :width="1700" :visible="addVisible" @ok="addSubmit" @cancel="addCancel">
@ -1241,6 +1326,34 @@
<a-modal title="提箱小票" width="900px" :visible="txxpUrlFlag" :footer="null" @cancel="txxpUrlFlag = false">
<iframe :src="txxpUrl" width="800" height="600" frameborder="0"></iframe>
</a-modal>
<a-modal title="修改到期时间" width="400px" @ok="handleStopTxxpTime" :visible="txxpEndFlag" @cancel="txxpEndFlag = false">
<a-spin :spinning="txxpEndLoad">
<a-date-picker
valueFormat="YYYY-MM-DD HH:mm:ss"
showTime
style="width: 100%;"
v-model="stopTxxpTime"
/>
</a-spin>
</a-modal>
<a-modal
:title="formatTitle"
width="900px"
:visible="personalFlag"
@ok="handleSubPer"
@cancel="personalFlag = false"
>
修正说明
<a-textarea v-model="personal.notes" :auto-size="{ minRows: 4, maxRows: 8 }" />
<div style="display: flex; align-items: center; margin-top: 20px">
原因
<div style="margin-left: 20px">
<a-checkbox v-model="personal.isOCRError"></a-checkbox>
<a-checkbox v-model="personal.isEditError"></a-checkbox>
<a-checkbox v-model="personal.isAgentError"></a-checkbox>
</div>
</div>
</a-modal>
<a-modal :title="webDataTitle" width="1400px" :visible="webDataFlag" :footer="null" @cancel="webDataFlag = false">
<iframe frameborder="0" height="700px" style="width: 100%;" :srcdoc="webData">
<!-- <div v-html="webData" style="overflow: hidden;"></div> -->
@ -1281,6 +1394,7 @@ import {
GetVessellist,
SendTrace,
getVesselInfoService,
SaveDraftComparellanual,
GetPortlist,
GetPortloadlist,
BookingOrderBachUpdate,
@ -1316,7 +1430,10 @@ import {
BachUpdateShipagency,
TxxpLink,
DownloadOriginal,
SubmitTelex
SubmitTelex,
RefreshYard,
RefreshYGT,
SetTxxpEndTime
} from '@/api/modular/main/BookingLedger'
import initData from '../../BookingLedger/list/modules/initData'
@ -1346,7 +1463,15 @@ export default {
return {
spinning: false,
isUpload: false,
txxpEndLoad: false,
txxpEndFlag: false,
stopTxxpTime: '',
telxLoad: false,
personal: {},
personalFlag: false,
formatContRow: {},
formatType: '',
formatTitle: '',
fileLoading: false,
webDataTitle: '',
serviceFlag: false,
@ -2101,9 +2226,34 @@ export default {
})
}
},
handleRefshYard(row) {
row.webDataLoad = true
RefreshYard('ids=' + row.id).then(res => {
if (res.success) {
PageDataByBooking({ id: row.id }).then(ress => {
const item = ress.data.items[0]
row.webDataLoad = false
row.statuslogs1 = item.statuslogs1
if (row.statuslogs1.length > 0) {
let num1 = row.statuslogs1.length
row.statuslogs1.forEach(item => {
if (item.txopTime) {
num1 -= 1
}
})
row.txopNumber = num1
}
this.$message.success('操作成功')
})
} else {
row.webDataLoad = false
this.$message.error(res.message)
}
})
},
handleRefshYZOnce(row, rowIndex) {
row.refshYzitemLoad = true
RefreshBillTrace('ids=' + row.id).then(res => {
RefreshYGT('ids=' + row.id).then(res => {
if (res.success) {
PageDataByBooking({ id: row.id }).then(ress => {
const item = ress.data.items[0]
@ -2167,6 +2317,35 @@ export default {
this.$refs.xGrid.sort(key, sort)
}
},
openStop(row) {
this.txxpEndFlag = true
this.stopRow = row
this.stopTxxpTime = ''
},
handleStopTxxpTime() {
const data = {
extId: this.stopRow.extendState ? this.stopRow.extendState.id : 0,
bookId: this.stopRow.id,
date: this.stopTxxpTime
}
this.txxpEndLoad = true
SetTxxpEndTime(data).then(res => {
if (res.success) {
this.$message.success('操作成功')
this.stopRow.extendState = {}
this.stopRow.extendState.txxpEndTime = this.stopTxxpTime
PageDataByBooking({ id: this.stopRow.id }).then(res => {
const item = res.data.items[0]
this.stopRow.extendState = item.extendState
this.$forceUpdate()
})
} else {
this.$message.error(res.message)
}
this.txxpEndFlag = false
this.txxpEndLoad = false
})
},
// - start
getCarrier() {
const Rdata = data => {
@ -2303,14 +2482,19 @@ export default {
},
handleOpenResult(row) {
this.spinning = true
GetShippingOrderCompareResult({ bookingId: row.id }).then(res => {
this.formatContRow = row
this.formatSheet = {}
GetShippingOrderCompareResult({ bookingId: row.id }).then((res) => {
if (res.success) {
if (!res.data.succ) {
this.spinning = false
this.$message.success(res.data.msg)
} else {
if (res.data.extra) {
this.formatType = 'SHIPORDER'
this.formatTitle = '下货纸比对-人工处理'
this.TaskShippingOrderCompareData = res.data.extra
this.TaskShippingOrderCompareData.lstShipOrderCompareRlt = row.lstShipOrderCompareRlt
this.TaskShippingOrderCompareData.total = res.data.total
this.TaskShippingOrderCompareVisible = true
this.spinning = false
@ -2908,6 +3092,34 @@ export default {
console.log(err)
})
},
handleSubPer() {
const data = {
bookingId: this.formatSheet.origPKId || this.TaskShippingOrderCompareData.origPKId,
mblNo: this.formatSheet.mBlNo || this.TaskShippingOrderCompareData.mBlNo,
taskCompareId: this.formatSheet.taskCompareId || this.TaskShippingOrderCompareData.taskCompareId,
compareType: this.formatType,
compareTime: this.personal.compareTime,
isOCRError: this.personal.isOCRError ? 1 : 0,
isEditError: this.personal.isEditError ? 1 : 0,
isAgentError: this.personal.isAgentError ? 1 : 0,
notes: this.personal.notes
}
SaveDraftComparellanual(data).then(res => {
if (res.success) {
this.$message.success('操作成功')
this.formatSheetVisible = false
this.TaskShippingOrderCompareVisible = false
this.personalFlag = false
if (this.formatType === 'DRAFT') {
this.formatContRow.lstDraftCompareRlt = 'NO DIFF'
} else {
this.formatContRow.lstShipOrderCompareRlt = 'NO_DIFF'
}
} else {
this.$message.error(res.message)
}
})
},
handleOpenShip() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
@ -2955,6 +3167,10 @@ export default {
addBooking() {
this.addVisible = !this.addVisible
},
openPersonal() {
this.personalFlag = true
this.personal = {}
},
copyBooking() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
@ -3076,8 +3292,12 @@ export default {
},
handleFormatContrast(row) {
this.spinning = true
this.formatContRow = row
this.formatType = 'DRAFT'
this.formatTitle = '格式单比对-人工处理'
this.pdfUrl = ''
GetDraftCompareResultInfo({ bookingid: row.id }).then(res => {
this.TaskShippingOrderCompareData = {}
GetDraftCompareResultInfo({ bookingid: row.id }).then((res) => {
if (res.success) {
if (!res.data.succ) {
this.spinning = false
@ -3085,10 +3305,11 @@ export default {
} else {
if (res.data.extra) {
this.formatSheet = res.data.extra
this.formatSheet.lstDraftCompareRlt = row.lstDraftCompareRlt
this.formatSheet.total = res.data.total
this.formatSheetVisible = true
const arr = []
this.formatSheet.showDetailList.forEach(item => {
this.formatSheet.showDetailList.forEach((item) => {
if (item.pCode === 'ContaList' && item.isDiff) {
arr.push(1)
}
@ -3104,7 +3325,7 @@ export default {
this.spinning = false
if (res.data.extra3) {
this.pdfLoading = true
BookingOrderDownload({ id: res.data.extra3 }).then(res => {
BookingOrderDownload({ id: res.data.extra3 }).then((res) => {
this.pdfUrl = window.URL.createObjectURL(new Blob([res], { type: 'application/pdf;charset=utf-8' }))
this.formatPdf = this.pdfUrl
this.pdfLoading = false

@ -938,9 +938,11 @@ export default {
immediate: true,
handler(nD, oD) {
this.id = this.$route.query.id
if (this.$route.name === 'BookingDetail') {
if (process.env.VUE_APP_TYPE === 'hechuan') {
if (this.$route.name === 'BookingDetail') {
this.init()
}
}
}
}
},

File diff suppressed because it is too large Load Diff

@ -1036,4 +1036,8 @@
pointer-events: auto;
padding: 20px;
z-index: 999;
}
.formatSheetModal /deep/ .ant-modal-body{
padding-top: 0px !important;
}

@ -729,7 +729,7 @@ export default {
},
deep: true
},
'$route.query': {
'$route': {
immediate: true,
handler(nD, oD) {
this.id = this.$route.query.id

@ -2189,7 +2189,7 @@ export default {
document.body.removeChild(cInput);
},
editColumns(row) {
this.$router.push({ name: 'BookingDetail', query: { id: row.id, type: row.carrierid, mblno: row.mblno } })
this.$router.push({ name: 'BookingDetail', query: { id: row.id, type: row.carrierid, mblno: row.mblno ? row.mblno : '' } })
},
getList(queryParam = {}, isInit = false, isAdd = 'normal') {
this.$set(this.gridOptions, 'loading', true)

@ -99,7 +99,7 @@ export default {
code: record.code,
enName: record.enName,
cnName: record.cnName,
// ediCode: record.ediCode,
ediCode: record.ediCode,
description: record.description,
remark: record.remark
})

@ -181,7 +181,7 @@
<vxe-toolbar>
<template #buttons>
<vxe-button @click="insertEvent(-1)"></vxe-button>
<vxe-button @click="$refs.xTable.removeCheckboxRow()"></vxe-button>
<vxe-button @click="handleDelete"></vxe-button>
<vxe-button icon="vxe-icon-save" @click="saveEvent"></vxe-button>
</template>
</vxe-toolbar>
@ -198,7 +198,7 @@
<vxe-column type="checkbox" width="60"></vxe-column>
<vxe-column field="Ffield" title="对象名" :edit-render="{}">
<template #edit="{ row }">
<vxe-select v-model="row.Ffield" style="width: 100%" placeholder="请选择对象名">
<vxe-select @change="roleChangeEvent($event, row)" v-model="row.Ffield" style="width: 100%" placeholder="请选择对象名">
<vxe-option
v-for="(item, index) in fieldList"
:key="index"
@ -343,7 +343,7 @@ export default {
focusEvent1(row) {
this.visible1 = false
this.fieldData = []
let fieldData = []
const fieldData = []
Object.keys(this.data1).forEach(ele => {
this.fieldList.forEach(e => {
if (e.name == row.Ffield) {
@ -379,7 +379,8 @@ export default {
saveEvent() {
const $table = this.$refs.xTable
const { insertRecords, removeRecords, updateRecords } = $table.getRecordset()
let tableData = []
const tableData = []
const arr = []
this.tableData.forEach(item => {
this.fieldList.forEach(item2 => {
if (item.Ffield == item2.name) {
@ -389,8 +390,15 @@ export default {
})
}
})
if (!item.fieldName) {
arr.push(1)
}
})
let children = [...tableData, ...insertRecords]
if (arr.length > 0) {
this.$message.warning('请选择字段名称')
return false
}
const children = [...tableData, ...insertRecords]
if (removeRecords.length) {
children.forEach((item, index) => {
removeRecords.forEach(ele => {
@ -409,6 +417,7 @@ export default {
})
})
}
console.log(children, this.fieldList)
BookingTemplateAddOrUpdateExcelTemplate({
pid: this.ExcelPid,
children
@ -478,7 +487,7 @@ export default {
},
columnChange(data) {
this.ColumnsQuery = [...data]
let Data = []
const Data = []
data.forEach(item => {
if (item.checked) {
Data.push(item.dataIndex)
@ -491,13 +500,27 @@ export default {
console.log(res)
})
},
handleDelete() {
const selectRecords = this.$refs.xTable.getCheckboxRecords()
for (let i = 0; i < selectRecords.length; i++) {
const delIndex = this.tableData.indexOf(selectRecords[i])
if (delIndex != -1) {
this.tableData.splice(delIndex, 1)
i--;
}
}
},
roleChangeEvent(row, row1) {
console.log(row, row1)
row1.fieldName = ''
},
columnChange1(data) {
this.TableType = true
this.TableColumns = data
this.$nextTick(() => {
this.TableType = false
})
let Data = []
const Data = []
data.forEach(item => {
if (item.checked) {
Data.push(item.dataIndex)
@ -557,7 +580,7 @@ export default {
columns.forEach(item => {
item.checked = false
})
let Arr = []
const Arr = []
JSON.parse(res.data.configJson).forEach(item => {
columns.forEach(item2 => {
if (item2.dataIndex == item) {
@ -590,7 +613,7 @@ export default {
columns.forEach(item => {
this.ColumnsQuery.push({ ...item, checked: false })
})
let Arr = []
const Arr = []
JSON.parse(res.data.configJson).forEach(item => {
this.ColumnsQuery.forEach(item2 => {
if (item == item2.dataIndex) {
@ -622,7 +645,7 @@ export default {
},
FnGetData() {
this.loading = true
let Data = {}
const Data = {}
BookingPrintTemplatePage({ ...this.queryParam, ...Data }).then(res => {
this.loadData = res.data.rows
this.loading = false

@ -11,7 +11,8 @@
{ "name": "货重", "code": "KGS","intoName": "kgs","type":"ctn","checked":false },
{ "name": "尺码", "code": "CBM","intoName": "cbm","type":"ctn","checked":false },
{ "name": "皮重", "code": "TAREWEIGHT","intoName": "tareweight","type":"ctn","checked":false },
{ "name": "称重日期", "code": "WEIGHDATE","intoName": "weighdate","type":"ctn","checked":false }
{ "name": "称重日期", "code": "WEIGHDATE","intoName": "weighdate","type":"ctn","checked":false },
{ "name": "称重重量", "code": "WEIGHKGS","intoName": "WEIGHKGS","type":"ctn","checked":false }
]
},
{

@ -30,6 +30,18 @@
<a-input size="small" placeholder="请输入模板名称" v-model="queryParam.TemplateName" />
</a-form-item>
</a-col>
<a-col :md="6" :sm="24">
<a-form-item label="合约号">
<a-input size="small" placeholder="请输入合约号" v-model="queryParam.ContractNO" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :md="6" :sm="24">
<a-form-item label="订舱账号">
<a-input size="small" placeholder="请输入订舱账号" v-model="queryParam.BookingAccount" />
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :md="4" :sm="24">
@ -146,6 +158,16 @@ export default {
align: 'center',
field: 'templateName'
},
{
title: '合约号',
align: 'center',
field: 'contractNO'
},
{
title: '订舱编号',
align: 'center',
field: 'bookingAccount'
},
{
title: '是否启用',
align: 'center',
@ -195,6 +217,16 @@ export default {
align: 'center',
field: 'templateName'
},
{
title: '合约号',
align: 'center',
field: 'contractNO'
},
{
title: '订舱编号',
align: 'center',
field: 'bookingAccount'
},
{
title: '是否启用',
align: 'center',

Loading…
Cancel
Save