<template> <div> <el-form ref="cusDeclarationForm" :rules="rules" :model="cusDeclarationObj" label-width="120px"> <el-form-item :label="$t('报关方式')" prop="dcCustomsType"> <el-select v-model="cusDeclarationObj.dcCustomsType" :placeholder="$t('请选择报关方式')"> <el-option v-for="type in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CUSTOMS_TYPE)" :key="type.value" :label="$l(type, 'label')" :value="type.value"></el-option> </el-select> </el-form-item> <el-form-item :label="$t('正常报关订单')" v-show="isShowNormal"> <div v-for="item in normalOrderList" :key="item.orderId"> <a href="javascript:void(0)" @click="jumpOrderDetail(item)">{{ item.orderNo }}</a> </div> </el-form-item> <el-form-item :label="$t('报关公司名称')"> <supplierSelect v-model="cusDeclarationObj.dcCompanyId" :companyType="'7'" :placeholder="$t('请选择报关公司名称')" :allSupplier="this.$attrs.allSupplier" /> </el-form-item> <el-form-item :label="$t('截关时间')"> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.dcCutOffTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> <el-form-item :label="$t('报关时间')" prop="dcDecTime"> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.dcDecTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> <el-form-item :label="$t('状态')" prop="dcCustomsStatus"> <el-radio-group v-model="cusDeclarationObj.dcCustomsStatus" :disabled="inReview || inOverReview || isCheckDeal('status')"> <el-radio v-for="item in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_DCCUSTOMS_STATUS)" :key="item.value" :label="item.value">{{ $l(item, 'label') }}</el-radio> </el-radio-group> </el-form-item> <div v-show="cusDeclarationObj.dcCustomsStatus === '3'"> <el-form-item :label="$t('查验')"> <el-radio-group v-model="cusDeclarationObj.dcCheckStatus" :disabled="inReview || inOverReview || isCheckDeal('check')"> <el-radio v-for="item in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CHECK_STATUS)" :key="item.value" :label="item.value" :disabled="disabledRadio(item)">{{ $l(item, 'label') }}</el-radio> </el-radio-group> </el-form-item> </div> <!-- 退场 --> <div v-show="['1', '2', '3'].includes(cusDeclarationObj.dcCheckStatus)"> <el-form-item :label="$t('查验时间')"> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.dcCheckTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> <el-form-item :label="$t('查验前图片')"> <ImageUpload :limit="1" :isShowTip="false" v-model="cusDeclarationObj.dcCheckPreImg" /> </el-form-item> <el-form-item :label="$t('退场状态')" v-if="cusDeclarationObj.dcCheckStatus === '1' || cusDeclarationObj.dcCheckStatus === '2'"> {{ getCheckExamineStatus }} </el-form-item> </div> <!-- 放行 --> <el-form-item :label="$t('放行时间')" v-show="cusDeclarationObj.dcCustomsStatus === '2' || cusDeclarationObj.dcCheckStatus === '3'"> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.dcPassTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> <el-form-item :label="$t('过机状态')" prop="overMachineStatus"> <el-radio-group v-model="cusDeclarationObj.overMachineStatus" :disabled="inReview || inOverReview"> <el-radio :label="1">{{ $t('顺利') }}</el-radio> <el-radio :label="2">{{ $t('异常') }}</el-radio> </el-radio-group> </el-form-item> <el-form-item prop="overMachineAbnormalStatus" v-show="cusDeclarationObj.overMachineStatus == 2"> <el-radio-group v-model="cusDeclarationObj.overMachineAbnormalStatus" :disabled="inReview || inOverReview"> <el-radio :label="1">{{ $t('敏感货') }}</el-radio> <el-radio :label="2">{{ $t('重量误报') }}</el-radio> </el-radio-group> </el-form-item> <!-- <el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1" :label="$t('删单退场类型')"> <el-radio-group v-model="cusDeclarationObj.deleteExitType" :disabled="inReview || inOverReview"> <el-radio :label="1" >{{ $t('退场时间') }}<el-tooltip class="item" effect="dark" :content="$t('选择退场时间,填写退场时间后,提交删单退场审核,订单返回到“已订舱”环节修改订舱号后,提交之后直接到报关流程')" placement="top"> <div class="el-icon-question"></div> </el-tooltip ></el-radio> <el-radio :label="2" >{{ $t('返回仓库') }}<el-tooltip class="item" effect="dark" :content="$t('删单退场审核通过后,通过PDA空运退场到仓进行货物入仓')" placement="top"> <div class="el-icon-question"></div> </el-tooltip ></el-radio> </el-radio-group> </el-form-item> <el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1 && cusDeclarationObj.deleteExitType == 1" :label="$t('退场时间')"> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.deleteExitTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> --> <el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1"> <el-form-item :label="$t('删单退场状态')"> {{ getOverExamineStatus }} </el-form-item> </el-form-item> <el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1 && ![1].includes(shipmentObj.overMachineExamineStatus)"> <el-button type="primary" @click="approvalCreate">{{ $t('提交删单退场审核') }}</el-button> </el-form-item> <el-form-item prop="weightMisreport" v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 2"> <el-radio-group v-model="cusDeclarationObj.weightMisreport" :disabled="inOverReview"> <el-radio :label="1">{{ $t('机场误差3%') }}</el-radio> <el-radio :label="2">{{ $t('超过误差10KG') }}</el-radio> <el-radio :label="3">{{ $t('过机放行-未找到重货订单') }}</el-radio> <el-radio :label="4">{{ $t('过机放行-已找到重货订单') }}</el-radio> </el-radio-group> </el-form-item> <el-form-item :label="$t('超出机场重量')" prop="overWeight" v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 2"> <el-input v-model="cusDeclarationObj.overWeight" style="width: 180px"> <template slot="append"> {{ $t('KG') }} </template> </el-input> </el-form-item> <el-form-item :label="$t('处理人')" prop="overDealUser" v-show="cusDeclarationObj.overMachineStatus == 2"> <usersSelect v-model="cusDeclarationObj.overDealUser" :placeholder="$t('请选择处理人')" :allUsers="this.$attrs.allUsers" /> </el-form-item> <el-form-item :label="$t('备注')" prop="overRemarks" v-show="cusDeclarationObj.overMachineStatus == 2"> <el-input v-model="cusDeclarationObj.overRemarks" style="width: 180px" /> </el-form-item> <el-form-item :label="$t('超重订单')" prop="overOrders" v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.weightMisreport == 4"> <ordersSelect v-model="cusDeclarationObj.overOrders" :placeholder="$t('请选择超重订单')" :shipmentId="shipmentObj.id" /> </el-form-item> <el-form-item prop="overOrders" v-show="cusDeclarationObj.overOrders.length > 0"> <div v-for="order in cusDeclarationObj.overOrders" :key="order"> {{ getOrders(order) }} <el-button type="text" @click="$router.push('/order/warehousing-update?id=' + order)">{{ $t('入仓修改') }}</el-button> </div> </el-form-item> <!-- <el-form-item :label="$t('装箱单')"> <el-button type="primary">{{$t('下载装箱单')}}</el-button> </el-form-item> --> <el-form-item :label="$t('报关单')" v-show="isDownload"> <el-button type="primary" @click="downloadCusFile">{{ $t('下载所有报关单') }}</el-button> </el-form-item> </el-form> <el-row class="operate-button" v-if="inReview"> <el-button type="primary" @click="jumpReviewDetail">{{ cusDeclarationObj.dcCheckStatus === '1' ? $t('全部退场审核中') : $t('部分退场审核中') }}</el-button> <el-button type="primary" plain @click="canclAudit">{{ cusDeclarationObj.dcCheckStatus === '1' ? $t('取消全部退场审核') : $t('取消部分退场审核') }}</el-button> </el-row> <el-row class="operate-button"> <el-button type="primary" v-if="inOverReview" @click="exitReviewDetail">{{ $t('删单退场审核中') }}</el-button> <el-button type="primary" v-if="inOverReview" plain @click="canclOverAudit">{{ $t('取消删单退场审核') }}</el-button> <el-button type="primary" @click="onSubmit(1)" :disabled="isCheckDeal('submit')">{{ $t('保存') }}</el-button> <el-button type="success" v-if="!inReview && !inOverReview" @click="onSubmit(2)" :disabled="isCheckDeal('submit')">{{ $t('提交') }}</el-button> <el-button @click="cancel">{{ $t('关闭') }}</el-button> <el-button type="primary" @click="extraCost" v-show="cusDeclarationObj.dcCustomsStatus === '2' || cusDeclarationObj.dcCustomsStatus === '3'">{{ $t('额外费用') }}</el-button> <el-button type="primary" @click="exceptionReg" :disabled="!isShowError">{{$t('异常登记')}}</el-button> </el-row> <!-- 对话框 --> <el-dialog custom-class="shipping-dialog customsClearance" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" width="700px" :modal-append-to-body="false" append-to-body> <el-row> <el-row> <el-form label-width="100px"> <el-form-item :label="$t('订单号')" class="two-element"> <el-input v-model="orderNo" :placeholder="$t('请输入订单号')" clearable /> <el-button type="primary" icon="el-icon-search" @click="searchOrder"></el-button> </el-form-item> </el-form> </el-row> <el-row> <el-table :data="costOrderList" border class="table-inputNumber"> <el-table-column :label="$t('订单号')" align="center" prop="orderNo" /> <el-table-column :label="$t('报关费用')" align="center" prop="fee" width="220"> <template slot-scope="scope"> <el-input-number v-model="scope.row.fee" controls-position="right" :min="1"></el-input-number> </template> </el-table-column> <el-table-column :label="$t('操作')" align="center"> <template slot-scope="scope"> <el-button type="primary" size="small" @click="createExtraCost(scope.row)">{{ $t('确定') }}</el-button> </template> </el-table-column> </el-table> </el-row> <el-row class="cost-title"> <div>{{ $t('额外费用订单') }}</div> <div> <el-button size="small" @click="restCostList()">{{ $t('重置') }}</el-button> </div> </el-row> <el-row> <el-table :data="costList" border height="300px" class="table-inputNumber"> <el-table-column type="selection" width="55" align="center" /> <el-table-column :label="$t('订单号')" align="center" prop="orderNo" /> <el-table-column :label="$t('报关费用')" align="center" prop="fee" width="220"> <template slot-scope="scope"> <el-input-number v-model="scope.row.fee" controls-position="right" :min="1"></el-input-number> </template> </el-table-column> <el-table-column :label="$t('操作')" align="center"> <template slot-scope="scope"> <el-button type="primary" size="small" @click="updateExtraCost(scope.row)">{{ $t('修改') }}</el-button> <el-button size="small" @click="restCostList(scope.row)">{{ $t('重置') }}</el-button> </template> </el-table-column> </el-table> </el-row> </el-row> </el-dialog> <!-- 对话框 --> <el-dialog custom-class="shipping-dialog" :title="$t('票异常')" :visible.sync="regDialogVisible" width="700px" :modal-append-to-body="false" append-to-body destroy-on-close> <regError @closeDialog="regCloseDialog" v-bind="$attrs" :shipmentObj="shipmentObj" /> </el-dialog> </div> </template> <script> import supplierSelect from './common/supplierSelect.vue' import usersSelect from './common/usersSelect.vue' import ordersSelect from './common/ordersSelect.vue' import { customsCreate, extraCostList, extraCostOrder, extraCostCreate, extraCostUpdate, approvalCancel, resetById, resetByShipmentId, customsOrderList, approvalCreate, boxGoodsDetail } from '@/api/ecw/boxSea' import { formatNumberString, formatDateStr, serviceMsg, toReviewDetail, downloadFileByUrl } from '../utils' import ImageUpload from '@/components/ImageUpload' import Decimal from 'decimal.js' import regError from '../../regError' import dayjs from 'dayjs' /** * 报关 * lanbm 2024-05-11 把 报关公司名称 下拉列表中的 * company_type 有2 改为7 解决下来框中的公司是海运公司类型的BUG */ export default { name: 'cusDeclaration', inheritAttrs: false, components: { supplierSelect, ImageUpload, regError, usersSelect, ordersSelect }, props: { shipmentObj: Object }, data() { return { // 报关对象 cusDeclarationObj: {}, // 校验 rules: { dcBoxWgt: [{ required: true, message: this.$t('必填'), trigger: 'change' }], dcGoodsWgt: [{ required: true, message: this.$t('必填'), trigger: 'change' }], dcCustomsType: [{ required: true, message: this.$t('必填'), trigger: 'change' }], dcCustomsStatus: [{ required: true, message: this.$t('必填'), trigger: 'change' }], dcDecTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }], overMachineStatus: [{ required: true, pattern: /^[12]$/, message: this.$t('必填') }] }, // 弹窗配置 dialogConfig: { title: '', dialogVisible: false }, // 订单号 orderNo: '', // 订单列表 costOrderList: [], // 额外费用列表 costList: [], // 是否审核中 inReview: false, inOverReview: false, // 异常登记 regDialogVisible: false, isShowError: false, inspectionTimecustoms: this.getDictDatas(this.DICT_TYPE.BOX_INSPECTION_TIME_CUSTOMS)[0].value, isDownload: false, normalOrderList: [], isShowNormal: false, sectionOrderList: [] } }, created() { const { currNode } = this.$attrs const { voName } = currNode let oldData = { ...this.shipmentObj[voName], documentInfo: this.shipmentObj.documentInfo?.split(',') ?? [] } if (!this.shipmentObj[voName]) { oldData.dcCustomsType = oldData.dcCustomsType ? oldData.dcCustomsType : this.getDcCustomsType(oldData.documentInfo) } oldData = formatDateStr(oldData, ['dcCutOffTime', 'dcCheckTime', 'dcPassTime', 'dcDecTime']) oldData = formatNumberString(oldData, ['dcCustomsType', 'dcCustomsStatus', 'dcCheckStatus']) oldData.overDealUser = this.strToArray(oldData.overDealUser) oldData.overOrders = this.strToArray(oldData.overOrders) this.cusDeclarationObj = oldData if (this.shipmentObj.overMachineExamineStatus == 1) { this.$set(this.cusDeclarationObj, 'overMachineStatus', 2) this.$set(this.cusDeclarationObj, 'overMachineAbnormalStatus', 1) } // if (this.shipmentObj.customsDeleteExitApprovalInfo) { // if (this.shipmentObj.customsDeleteExitApprovalInfo.details) { // let details = JSON.parse(this.shipmentObj.customsDeleteExitApprovalInfo.details) // this.$set(this.cusDeclarationObj, 'deleteExitType', details.deleteExitType) // this.$set(this.cusDeclarationObj, 'deleteExitTime', details.deleteExitTime) // } // } boxGoodsDetail({ shipmentId: this.shipmentObj.id, secId: 0 }).then((res) => { this.sectionOrderList = res.data.sectionOrderList }) }, methods: { strToArray(str) { if (!str) return [] let array = str?.split(',') ?? [] return array.map((item) => { return Number(item) }) }, getCustomsOrderList(dcCustomsType) { customsOrderList({ shipmentId: this.shipmentObj.id, customsTypes: dcCustomsType === '3' ? '2,3' : dcCustomsType }).then((res) => { this.normalOrderList = res.data ?? [] if (dcCustomsType === '1') { this.isShowNormal = false } else { this.isShowNormal = true } }) }, getOrders(id) { let order = this.sectionOrderList.find((item) => item.orderId == id) if (order) { return order.orderNo } return '' }, regCloseDialog(type) { this.regDialogVisible = false if (type === 'error') { this.$emit('getBoxInfo') } }, // 时间比较 compareDate(dcDecTime, dcPassTime) { this.isShowError = false let date1 = null, date2 = null if (dcDecTime) date1 = dayjs(dcDecTime) if (dcPassTime) date2 = dayjs(dcPassTime) if (date1 && date2) { const delayDay = date2.diff(date1, 'day') if (delayDay >= this.inspectionTimecustoms) this.isShowError = true } }, // 异常登记 exceptionReg() { this.regDialogVisible = true }, /* 跳转订单详情 */ jumpOrderDetail(row) { this.$router.push({ path: '/order/detail', query: { orderId: row.orderId } }) }, getDcCustomsType(documentInfo = []) { const newList = Array.from(new Set(documentInfo)) if (newList.length > 1) { return '3' } if (newList.length === 1) { return newList[0] === '1' ? '1' : '2' } }, getButtonLabel(documentInfo = []) { const newList = Array.from(new Set(documentInfo)) return newList.length >= 2 ? this.$t('混合报关') : this.$t('VGM声明') }, submitCustomsCreate(operateType) { let parems = { ...this.cusDeclarationObj } parems.overDealUser = !Array.isArray(parems.overDealUser) ? null : parems.overDealUser.join(',') parems.overOrders = !Array.isArray(parems.overOrders) ? null : parems.overOrders.join(',') customsCreate({ ...parems, shipmentId: this.shipmentObj.id, operateType }).then((res) => { serviceMsg(res, this).then(() => { this.cancel('submit') }) }) }, //提交删单退场审核 approvalCreate() { this.$refs['cusDeclarationForm'].validate((valid) => { if (valid) { // if (!this.cusDeclarationObj.deleteExitType) { // this.$message.error(this.$t('请选择删单退场类型或者时间')) // return // } // if (this.cusDeclarationObj.deleteExitType == 1 && !this.cusDeclarationObj.deleteExitTime) { // this.$message.error(this.$t('请选择退场时间')) // return // } let details = { deleteExitType: 2 } approvalCreate({ shipmentId: this.shipmentObj.id, approvalStatus: 0, approvalType: 11, details: JSON.stringify(details) }).then(() => { this.onSubmit(1) }) } }) }, /** 提交 */ onSubmit(operateType) { this.$refs['cusDeclarationForm'].validate((valid) => { if (valid) { if (operateType === 1) { this.submitCustomsCreate(operateType) return // 保存 } // 提交 const { dcCustomsStatus, dcCheckStatus } = this.cusDeclarationObj // 1.状态 报关中/放行 直接提交 if (dcCustomsStatus !== '3') { this.submitCustomsCreate(operateType) return } // 2.查验状态,空 直接提交 if (!dcCheckStatus) { this.submitCustomsCreate(operateType) return } // 3.查验状态,查验后放行 直接提交 if (dcCheckStatus === '3') { const { overMachineExamineStatus } = this.shipmentObj // 没有退场审核中的状态 if (overMachineExamineStatus !== 1) { this.submitCustomsCreate(operateType) return } } // 4.查验状态,退场/部分退场 提示 if (['1', '2'].includes(dcCheckStatus)) { const { overMachineExamineStatus } = this.shipmentObj // 退场审核状态,1-审核中,2-审核成功,3-审核失败,4-取消 if ([0, 2, 3, 4].includes(overMachineExamineStatus)) { this.$modal.confirm(this.$t(`您确认提交${dcCheckStatus === '1' ? this.$t('全部退场') : this.$t('部分退场')}审核吗?`)).then(() => { let parems = { ...this.cusDeclarationObj } parems.overDealUser = !Array.isArray(parems.overDealUser) ? null : parems.overDealUser.join(',') parems.overOrders = !Array.isArray(parems.overOrders) ? null : parems.overOrders.join(',') customsCreate({ ...parems, shipmentId: this.shipmentObj.id, operateType }).then((res) => { serviceMsg(res, this).then(() => { // 触发外层重新查询出货信息 this.$emit('getBoxInfo') }) }) }) } else { this.submitCustomsCreate(operateType) } } } }) }, /* 查询订单号 */ searchOrder() { if (!this.orderNo) { this.$message.error(this.$t('请输入订单号')) return } extraCostOrder({ shipmentId: this.shipmentObj.id, orderNo: this.orderNo }).then((res) => { serviceMsg(res, this).then(() => { this.costOrderList = [ { orderNo: this.orderNo, orderId: res.data } ] this.searchCostList() }) }) }, /* 查询额外费用订单 */ searchCostList() { extraCostList({ shipmentId: this.shipmentObj.id }).then((res) => { this.costList = res.data }) }, /* 创建额外费用 */ createExtraCost(row) { if (!row.fee) { this.$message.error(this.$t('请输入费用')) return } extraCostCreate({ fee: row.fee, orderId: row.orderId, orderNo: row.orderNo, shipmentId: this.shipmentObj.id }).then((res) => { serviceMsg(res, this).then(() => { this.searchCostList() }) }) }, /* 修改额外费用 */ updateExtraCost(row) { if (!row.fee) { this.$message.error(this.$t('请输入费用')) return } extraCostUpdate(row).then((res) => { serviceMsg(res, this).then(() => { this.searchCostList() }) }) }, /* 重置 */ restCostList(row) { if (row) { resetById({ id: row.id }).then((res) => { serviceMsg(res, this).then(() => { this.searchCostList() }) }) } else { resetByShipmentId({ id: this.shipmentObj.id }).then((res) => { serviceMsg(res, this).then(() => { this.searchCostList() }) }) } }, /** 取消 */ cancel(type) { this.$emit('closeDialog', type) }, // 下载VGM downloadVGM() { window.open('http://pdatest.groupage.cn//apivue/boxTrack/vgmExport?token=930b11a41d9ca06f306d157f336a5dcb&id=1752') }, // 额外费用 extraCost() { // 清空额外费用 this.orderNo = '' this.costOrderList = [] this.costList = [] this.$set(this.dialogConfig, 'title', `${this.shipmentObj.selfNo} ` + this.$t('报关费用')) this.$set(this.dialogConfig, 'dialogVisible', true) this.searchCostList() }, // 计算VGM重量 calcVGM(dcBoxWgt, dcGoodsWgt) { let dcBoxWgtTmp = 0, dcGoodsWgtTmp = 0 if (!Number.isNaN(Number(dcBoxWgt))) { dcBoxWgtTmp = Number(dcBoxWgt) } if (!Number.isNaN(Number(dcGoodsWgt))) { dcGoodsWgtTmp = Number(dcGoodsWgt) } this.$set(this.cusDeclarationObj, 'dcVgmWgt', Decimal.add(dcBoxWgtTmp, dcGoodsWgtTmp).toFixed(2)) }, // 审核详情 jumpReviewDetail() { const { customsApprovalInfo } = this.shipmentObj toReviewDetail.apply(this, [customsApprovalInfo.bpmProcessId]) this.cancel('close') }, //删单退场审核详情 exitReviewDetail() { const { customsDeleteExitApprovalInfo } = this.shipmentObj toReviewDetail.apply(this, [customsDeleteExitApprovalInfo.bpmProcessId]) this.cancel('close') }, /* 取消退场审核 */ canclAudit() { console.log(this.shipmentObj) approvalCancel({ applyReason: this.$t('取消审核'), id: this.shipmentObj['customsApprovalInfo'].id, shipmentId: this.shipmentObj.id }).then((res) => { serviceMsg(res, this).then(() => { // 触发外层重新查询出货信息 this.cancel('close') this.$emit('getBoxInfo') }) }) }, /* 取消删单退场审核 */ canclOverAudit() { console.log(this.shipmentObj) approvalCancel({ applyReason: this.$t('取消审核'), id: this.shipmentObj['customsDeleteExitApprovalInfo'].id, shipmentId: this.shipmentObj.id }).then((res) => { serviceMsg(res, this).then(() => { // 触发外层重新查询出货信息 this.cancel('close') this.$emit('getBoxInfo') }) }) }, /* 判断查验选择是否禁用 */ disabledRadio(item) { const { overMachineExamineStatus, checkDealStatus, customsInfo } = this.shipmentObj const { dcCheckStatus } = customsInfo ?? {} // 部分退场状态并且审核通过,退场不可选择 if (overMachineExamineStatus === 2 && dcCheckStatus === 2 && checkDealStatus === 0 && item.value === '1') { return true } return false }, /* 下载报关单 */ downloadCusFile() { downloadFileByUrl('downloadCustomFiles', { shipmentId: this.shipmentObj.id }) } }, watch: { 'cusDeclarationObj.dcCustomsType'(val) { this.getCustomsOrderList(val) }, 'cusDeclarationObj.documentInfo'(val) { this.isDownload = false if (val.includes('2')) { this.isDownload = true } }, 'cusDeclarationObj.dcBoxWgt'(dcBoxWgt) { this.calcVGM(dcBoxWgt, this.cusDeclarationObj.dcGoodsWgt) }, 'cusDeclarationObj.dcGoodsWgt'(dcGoodsWgt) { this.calcVGM(this.cusDeclarationObj.dcBoxWgt, dcGoodsWgt) }, 'cusDeclarationObj.dcCustomsStatus'(val) { if (val !== '3') { this.$set(this.cusDeclarationObj, 'dcCheckStatus', '') // this.$set(this.cusDeclarationObj, "dcPassTime", ""); } else { const { customsInfo } = this.shipmentObj this.$set(this.cusDeclarationObj, 'dcCheckStatus', (customsInfo?.dcCheckStatus && String(customsInfo?.dcCheckStatus)) || '3') } }, shipmentObj: { deep: true, immediate: true, handler: function (val) { // 监听查验状态变化 let { overMachineExamineStatus, checkExamineStatus } = val if (overMachineExamineStatus === 1) { // 按钮变成审核中 this.inOverReview = true } if (checkExamineStatus === 1) { // 按钮变成审核中 this.inReview = true } } }, // 报关时间 'cusDeclarationObj.dcDecTime'(val) { this.compareDate(val, this.cusDeclarationObj.dcPassTime) }, // 放行时间 'cusDeclarationObj.dcPassTime'(val) { this.compareDate(this.cusDeclarationObj.dcDecTime, val) }, // 查验状态 'cusDeclarationObj.dcCheckStatus'(val) { const { customsInfo } = this.shipmentObj if (val != customsInfo?.dcCheckStatus) { this.$set(this.cusDeclarationObj, 'dcPassTime', '') } } }, computed: { /* 获取报关审核退场状态文字 */ getCheckExamineStatus() { const { checkExamineStatus, checkDealStatus, customsInfo } = this.shipmentObj const { dcCheckStatus } = customsInfo ?? {} if (checkExamineStatus === 1) { return dcCheckStatus === 1 ? this.$t('退场审核中') : this.$t('部分退场审核中') } if (checkExamineStatus === 2 && checkDealStatus === 0) { return dcCheckStatus === 1 ? this.$t('审核通过,退场中') : this.$t('审核通过,部分退场中') } return this.$t('未审核') }, /* 获取报关审核删单退场状态文字 */ getOverExamineStatus() { const { overMachineExamineStatus, checkDealStatus, customsInfo } = this.shipmentObj const { dcCheckStatus } = customsInfo ?? {} if (overMachineExamineStatus === 1) { return dcCheckStatus === 1 ? this.$t('删单退场审核中') : this.$t('删单退场审核中') } if (overMachineExamineStatus === 2 && checkDealStatus === 0) { return dcCheckStatus === 1 ? this.$t('删单退场审核通过,退场中') : this.$t('删单退场审核通过,退场中') } return this.$t('未审核') }, /* 判断是否已处理 */ isCheckDeal() { return (type) => { const { overMachineExamineStatus, checkDealStatus, customsInfo } = this.shipmentObj const { dcCheckStatus } = customsInfo ?? {} // 状态 if (type === 'status') { // 退场/部分退场 审核通过未处理,禁用 if (overMachineExamineStatus === 2 && [1, 2].includes(dcCheckStatus) && checkDealStatus === 0) { return true } } // 查验 if (type === 'check') { // 退场 审核通过未处理,禁用 // 部分退场 审核通过未处理,由 disabledRadio 方法判断 if (overMachineExamineStatus === 2 && [1].includes(dcCheckStatus) && checkDealStatus === 0) { return true } } // 提交/保存 if (type === 'submit') { const { dcCheckStatus: newCheckStatus } = this.cusDeclarationObj // 退场/部分退场 审核通过未处理 if (overMachineExamineStatus === 2 && checkDealStatus === 0) { // 退场,禁用 if (dcCheckStatus === 1) return true // 部分退场 if (dcCheckStatus === 2) { // 修改为查验后放行,可用,其他禁用 if (newCheckStatus === '3') return false return true } } } return false } } } } </script> <style lang="scss"> .customsClearance { .cost-title { display: flex; align-items: center; margin: 20px 0; border-left: 5px solid gray; > div:first-child { margin-left: 10px; } > div:last-child { flex: 1; text-align: right; } } .el-table.table-inputNumber { .cell { overflow: visible; } } } </style>