wfg hai 4 semanas
pai
achega
90f326e1cf

+ 8 - 0
src/api/iosBasicData/bills.js

@@ -303,6 +303,14 @@ export const listFeeCountByCorp = (data) => {
     params: data
   })
 }
+// 收发通校验接口
+export const verificationDetails = (row) => {
+  return request({
+    url: '/api/blade-los/bills/verificationDetails',
+    method: 'post',
+    data: row
+  })
+}
 // 单据校验接口
 export const documentVerification = (row) => {
   return request({

+ 1 - 1
src/api/iosBasicData/reports.js

@@ -107,7 +107,7 @@ export const getDocumentTypesListAll = (params) => {
 }
 
 export const buildExportFileName = (report, form) => {
-    let fmt = report ? (report.fileNameFormat ? report.fileNameFormat : report.cnName) : "";
+    let fmt = report ? (report.fileNameFormat ? report.fileNameFormat : (report.cnName + " #mblno")) : "";
     if(!fmt) fmt = "report";
     if(form){
         for(const key in form){

+ 21 - 6
src/views/iosBasicData/SeafreightExportF/bills/assembly/DistributionBox/PackingBusiness.vue

@@ -1471,14 +1471,29 @@ export default {
         },
         // 货物详情弹窗开启
         DetailAdd() {
-            this.Detailform.packingUnitId = this.assemblyForm.packingUnitId
-            this.Detailform.packingUnit = this.assemblyForm.packingUnit
+            let cntrRow = this.selectionList.length>0 ? this.selectionList[0] : {};
+            // this.Detailform.packingUnitId = this.assemblyForm.packingUnitId
+            // this.Detailform.packingUnit = this.assemblyForm.packingUnit
+
+            this.Detailform.packingUnitId = cntrRow.packingUnitId ? cntrRow.packingUnitId : this.assemblyForm.packingUnitId;
+            this.Detailform.packingUnit = cntrRow.packingUnit ? cntrRow.packingUnit : this.assemblyForm.packingUnit;
+
+            this.Detailform.quantity = cntrRow.quantity ? cntrRow.quantity : 0;
+            this.Detailform.grossWeight = cntrRow.grossWeight ? cntrRow.grossWeight : 0;
+            this.Detailform.measurement = cntrRow.measurement ? cntrRow.measurement : 0;
+
             this.Detailform.commodityDescr = this.assemblyForm.commodityDescr
             this.Detailform.marks = this.assemblyForm.marks
-            this.Detailform.Detailform = {
-                dgEmerTemperatureUnit: 'C',
-                dgCtrlTemperatureUnit: 'C',
-            }
+            // this.Detailform.Detailform = {
+            //     dgFlashPointUnit: "C",
+            //     dgEmerTemperatureUnit: 'C',
+            //     dgCtrlTemperatureUnit: 'C',
+            // }
+
+            this.Detailform.dgFlashPointUnit = "C"
+            this.Detailform.dgEmerTemperatureUnit = 'C'
+            this.Detailform.dgCtrlTemperatureUnit = 'C'
+
             this.Detailform.hscode = this.assemblyForm.hscode
             this.Detailform.commodityEnName = this.assemblyForm.commodityEnName
             this.Detailform.commodityCnName = this.assemblyForm.commodityCnName

+ 1 - 1
src/views/iosBasicData/SeafreightExportF/bills/assembly/DocumentCenter.vue

@@ -1224,7 +1224,7 @@ export default {
         allowPrintCount: printRow.allowPrintCount,
         printCount: 0,
         canPrint: printRow.allowPrintCount >= 0,
-        fileName: buildExportFileName(printRow, printData)
+        fileName: buildExportFileName(printRow, data)
       };
 
       if (printRow.allowPrintCount > 0) {

+ 1 - 1
src/views/iosBasicData/SeafreightExportF/bills/assembly/filescenter.vue

@@ -258,7 +258,7 @@ export default {
             {
                 label: "发送地址",
                 prop: "receiverAddress",
-                width: "80",
+                width: "200",
             },
           // {
           //   label: "排序",

+ 24 - 14
src/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsFrame/BillofLadingDetailsSI.vue

@@ -28,7 +28,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Pre-Carriage by" prop="value1">
-                                <el-input type="textarea" :rows="1" style="width: 100%;" v-model="documentForm.value1"
+                                <el-input style="width: 100%;" v-model="documentForm.value1"
                                           size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -37,7 +37,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="place of Receipt" prop="placeReceiptNamePrint">
-                                <el-input type="textarea" :rows="1" style="width: 100%;"
+                                <el-input style="width: 100%;"
                                           v-model="documentForm.placeReceiptNamePrint" size="small" autocomplete="off"
                                           clearable>
                                 </el-input>
@@ -49,7 +49,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Ocean Vessel Voy No." prop="vesselCnName">
-                                <el-input type="textarea" :rows="1" style="width: 100%;"
+                                <el-input style="width: 100%;"
                                           v-model="documentForm.vesselCnName" size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -58,7 +58,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Port of Loading" prop="polNamePrint">
-                                <el-input type="textarea" :rows="1" style="width: 100%;"
+                                <el-input style="width: 100%;"
                                           v-model="documentForm.polNamePrint" size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -69,7 +69,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Port of Discharge" prop="podNamePrint">
-                                <el-input type="textarea" :rows="1" style="width: 100%;"
+                                <el-input style="width: 100%;"
                                           v-model="documentForm.podNamePrint" size="small" autocomplete="off"
                                           clearable>
                                 </el-input>
@@ -79,7 +79,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Place of Delivery" prop="destinationNamePrint">
-                                <el-input type="textarea" :rows="1" style="width: 100%;"
+                                <el-input style="width: 100%;"
                                           v-model="documentForm.destinationNamePrint" size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -88,8 +88,8 @@
                 </el-row>
             </el-col>
             <el-col :span="10">
-              <el-row>
-                <el-col :span="6">
+              <el-row style="line-height: 40px;">
+                <el-col :span="6" style="text-align: center;">
                   <span style="width: 100px;">MBL NO</span>
                 </el-col>
                 <el-col :span="18">
@@ -98,8 +98,8 @@
                   </el-form-item>
                 </el-col>
               </el-row>
-              <el-row>
-                <el-col :span="6">
+              <el-row style="line-height: 40px;">
+                <el-col :span="6" style="text-align: center;">
                   <span style="width: 100px;">HBL NO</span>
                 </el-col>
                 <el-col :span="18">
@@ -140,6 +140,16 @@
                   </el-form-item>
                 </el-col>
               </el-row>
+              <el-row style="line-height: 40px;">
+                <el-col :span="6" style="text-align: center;">
+                  <span style="width: 100px;">HS CODE</span>
+                </el-col>
+                <el-col :span="18">
+                  <el-form-item label="" prop="mblNo">
+                    <el-input style="width: 100%;" v-model="documentForm.hscode" size="small" autocomplete="off" clearable> </el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
               <!--
                 <div style="border: 1px solid #000;">
                     <el-form-item label=" " prop="">
@@ -321,7 +331,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Prepaid at" prop="prepaidAt">
-                                <el-input type="textarea" :rows="1" style="width: 100%;" v-model="documentForm.prepaidAt"
+                                <el-input style="width: 100%;" v-model="documentForm.prepaidAt"
                                           size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -330,7 +340,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Payable at" prop="payableAt">
-                                <el-input type="textarea" :rows="1" style="width: 100%;" v-model="documentForm.payableAt"
+                                <el-input style="width: 100%;" v-model="documentForm.payableAt"
                                           size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -341,7 +351,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="Total Prepaid in Local Currency" prop="">
-                                <el-input type="textarea" :rows="1" style="width: 100%;"
+                                <el-input style="width: 100%;"
                                           size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>
@@ -350,7 +360,7 @@
                     <el-col :span="12">
                         <div style="border: 1px solid #000;">
                             <el-form-item label="No. of original B(s)L" prop="numberOfObl">
-                                <el-input type="textarea" :rows="1" style="width: 100%;" v-model="documentForm.numberOfObl"
+                                <el-input style="width: 100%;" v-model="documentForm.numberOfObl"
                                           size="small" autocomplete="off" clearable>
                                 </el-input>
                             </el-form-item>

+ 186 - 8
src/views/iosBasicData/SeafreightExportF/bills/billsDetails.vue

@@ -17,12 +17,21 @@
         <span v-if="auditStatus == 'B'" style="margin-right: 1em; color: red;">{{ levelName }}驳回:{{ auditMsg }}</span>
         <el-button size="small" type="primary" @click="addEdit">新 建 </el-button>
         <el-button type="success" size="small" style="margin-right: 8px" @click="CopyDocumentsfun">复制单据 </el-button>
+        <el-button
+          size="small"
+          type="primary"
+          style="margin-right: 8px"
+          :disabled="detailData.seeDisabled || showLock"
+          :loading="saveLoading"
+          @click="verificationSFT"
+          >一键校验收发通
+        </el-button>
         <el-dropdown style="line-height: 0" v-if="importTemplate == 1">
           <el-button size="small" type="warning" style="margin-right: 8px" :disabled="form.status > 0 || showLock || !form.id">
             导入模板<i class="el-icon-arrow-down el-icon--right"></i>
           </el-button>
           <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item v-for="item in imporiData" :key="item.id" @click.native="importData(item)">{{ item.name }} </el-dropdown-item>
+            <el-dropdown-item v-for="item in importData" :key="item.id" @click.native="doImportData(item)">{{ item.name }} </el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-dropdown v-if="ediData_SO.length > 0" style="line-height: 0">
@@ -513,6 +522,7 @@ import {
   billsAdd,
   deptGetDetailPol,
   postSelectByUser,
+  verificationDetails,
   documentVerification,
   agreementpriceList,
   createAndAdd,
@@ -997,11 +1007,14 @@ export default {
           value: "cyCnName"
         }
       ],
-      imporiData: [
+      importData: [
         { id: 0, name: "导入 ONE 模板", key: "ONE", showCoverDlg: true, document: "importOne" },
         { id: 1, name: "导入 PIL 订舱模板", key: "PIL-BOOKING", showCoverDlg: true, document: "importPilBooking" },
         { id: 2, name: "导入 PIL 截单格式", key: "PIL-CUTDOC", showCoverDlg: true, document: "importPilCutOffOrders" },
-        { id: 3, name: "导入海信提单", key: "HISENSE-BILL", showCoverDlg: false, document: "importHisenseBill" }
+        { id: 3, name: "导入海信提单", key: "HISENSE-BILL", showCoverDlg: false, document: "importHisenseBill" },
+        { id: 4, name: "导入报关总票", key: "CUSTOM-BILL", showCoverDlg: true, document: "importCustomBill" },
+        { id: 5, name: "导入托书(WORD)", key: "BILLOFLADING-WORD", showCoverDlg: true, document: "importBillOfLandingWord" },
+        { id: 6, name: "导入托书(PDF)", key: "BILLOFLADING-PDF", showCoverDlg: true, document: "importBillOfLandingPdf" }
       ],
       currentImportDataRow: null,
       excelForm: {},
@@ -1217,6 +1230,171 @@ export default {
         }
       }
     },
+    async verificationSFT() {
+      if (this.verifySymbolStatus == 1 && this.business == 1) {
+        let fldNames = "hshipperDetails,hconsigneeDetails,hnotifyDetails,mshipperDetails,mconsigneeDetails,mnotifyDetails".split(",");
+        let fldDescs = "发货人,收货人,通知人,MBL 发货人,MBL 收货人,MBL 通知人".split(",");
+        let msgsList = [];
+        fldNames.forEach((fld, idx) => {
+          const cfs = checkFullWidthSymbols(this.form.detail[fld]);
+          if (cfs.hasFullWidth) {
+            if (cfs.isResetText) {
+              this.$set(this.form.detail, fld, cfs.resetText);
+            }
+            msgsList.push(fldDescs[idx] + ": " + cfs.message);
+          }
+        });
+
+        // carrierCnName: "森罗商船青岛代表处"
+        // carrierEnName: "SM LINE CORPORATION QINGDAO OFFICE"
+        // carrierId: 10741
+        // carrierShortName: "森罗商船"
+        // 森罗商船 允许订舱备注输中文
+
+        fldNames = "marks,commodityDescr,mmarks,mcommodityDescr,forwarding,siRemarks".split(",");
+        fldDescs = "唛头,货描,M/BL 唛头,M/BL 货描,FORWARDING,SI 备注".split(",");
+        if (this.form.carrierId !== 10741) {
+          fldNames.push("bookingRemarks");
+          fldDescs.push("订舱备注");
+        }
+        fldNames.forEach((fld, idx) => {
+          const cfs = checkFullWidthSymbols(this.form[fld]);
+          if (cfs.isResetText === true) {
+            this.$set(this.form, fld, cfs.resetText);
+          }
+          if (cfs.hasFullWidth) {
+            msgsList.push(fldDescs[idx] + ": " + cfs.message);
+          }
+        });
+
+        fldNames = "placeReceiptNamePrint,polNamePrint,podNamePrint,destinationNamePrint,placeDeliveryNamePrint,potNamePrint".split(",");
+        fldDescs = "收货地,装货港,卸货港,目的地,交货地,中转港".split(",");
+        fldNames.forEach((fld, idx) => {
+          const cfs = checkFullWidthSymbols(this.form[fld]);
+          if (cfs.hasFullWidth) {
+            if (cfs.isResetText) {
+              this.$set(this.form, fld, cfs.resetText);
+            }
+            msgsList.push(fldDescs[idx] + ": " + cfs.message);
+          }
+        });
+
+        if (msgsList.length > 0) {
+          this.$message({
+            dangerouslyUseHTMLString: true,
+            message: `${msgsList.join("<br/><br/>")}`,
+            type: "error"
+          });
+          return;
+        }
+
+        msgsList = [];
+        if (!verifyEnglish(this.form.detail.hshipperDetails)) {
+          msgsList.push("发货人");
+        }
+        if (!verifyEnglish(this.form.detail.hconsigneeDetails)) {
+          msgsList.push("收货人");
+        }
+        if (!verifyEnglish(this.form.detail.hnotifyDetails)) {
+          msgsList.push("通知人");
+        }
+        if (!verifyEnglish(this.form.detail.mshipperDetails)) {
+          msgsList.push("MBL 发货人");
+        }
+        if (!verifyEnglish(this.form.detail.mconsigneeDetails)) {
+          msgsList.push("MBL 收货人");
+        }
+        if (!verifyEnglish(this.form.detail.mnotifyDetails)) {
+          msgsList.push("MBL 通知人");
+        }
+        if (!verifyEnglish(this.form.marks)) {
+          msgsList.push("唛头");
+        }
+        if (!verifyEnglish(this.form.commodityDescr)) {
+          msgsList.push("货描");
+        }
+        if (!verifyEnglish(this.form.mmarks)) {
+          msgsList.push("M/BL 唛头");
+        }
+        if (!verifyEnglish(this.form.mcommodityDescr)) {
+          msgsList.push("M/BL 货描");
+        }
+        if (!verifyEnglish(this.form.forwarding)) {
+          msgsList.push("FORWARDING");
+        }
+        if (msgsList.length > 0) {
+          // this.$message.error(`请正确输入${msgsList.join(",")}的英文`);
+          this.$message.error(`${msgsList.join(",")}存在非英文字符,如汉字等,请修正后再保存!`);
+          return;
+        }
+      }
+      this.form.detail.hshipperDetails = this.getTextTirim(this.form.detail.hshipperDetails);
+      this.form.detail.hconsigneeDetails = this.getTextTirim(this.form.detail.hconsigneeDetails);
+      this.form.detail.hnotifyDetails = this.getTextTirim(this.form.detail.hnotifyDetails);
+      this.form.detail.marks = this.getTextTirim(this.form.detail.marks);
+      this.form.detail.commodityDescr = this.getTextTirim(this.form.detail.commodityDescr);
+      this.form.detail.mmarks = this.getTextTirim(this.form.detail.mmarks);
+      this.form.detail.mcommodityDescr = this.getTextTirim(this.form.detail.mcommodityDescr);
+      this.form.forwarding = this.getTextTirim(this.form.forwarding);
+      // 赋值 ETD 日期
+      this.form.billDate = this.form.etd ? this.form.etd.slice(0, 10) + " 00:00:00" : null; // 单据日期
+      // 调用保存接口
+      await verificationDetails(this.form).then(async res => {
+        let rb = res.data;
+        if (rb.status == 0) {
+          return this.$message.success("收发通无需调整!");
+        }
+        if (rb.status == 2) {
+          return this.$message.warning(rb.remark);
+        }
+        // 3 用户选择保存,收发通校验
+        if (rb.status == 3) {
+          this.sftVerifyData = {
+            status: status,
+            remark: rb.remark, // .replaceAll("<br />", "\n"),
+            hshipperId: rb.hshipperId == 1,
+            hshipperDetails: rb.hshipperDetails,
+            hconsigneeId: rb.hconsigneeId == 1,
+            hconsigneeDetails: rb.hconsigneeDetails,
+            hnotifyId: rb.hnotifyId == 1,
+            hnotifyDetails: rb.hnotifyDetails,
+            reserve1: rb.reserve1 == "1",
+            marks: rb.marks,
+            reserve2: rb.reserve2 == "1",
+            commodityDescr: rb.commodityDescr
+          };
+          console.log(this.sftVerifyData);
+          if (this.sftVerifyData.hshipperId === true) {
+            this.form.detail.hshipperDetails = this.sftVerifyData.hshipperDetails;
+          }
+          if (this.sftVerifyData.mshipperId === true) {
+            this.form.detail.mshipperDetails = this.sftVerifyData.mshipperDetails;
+          }
+          if (this.sftVerifyData.hconsigneeId === true) {
+            this.form.detail.hconsigneeDetails = this.sftVerifyData.hconsigneeDetails;
+          }
+          if (this.sftVerifyData.mconsigneeId === true) {
+            this.form.detail.mconsigneeDetails = this.sftVerifyData.mconsigneeDetails;
+          }
+          if (this.sftVerifyData.hnotifyId === true) {
+            this.form.detail.hnotifyDetails = this.sftVerifyData.hnotifyDetails;
+          }
+          if (this.sftVerifyData.mnotifyId === true) {
+            this.form.detail.mnotifyDetails = this.sftVerifyData.mnotifyDetails;
+          }
+          if (this.sftVerifyData.reserve1 === true) {
+            this.form.marks = this.sftVerifyData.marks;
+          }
+          if (this.sftVerifyData.reserve2 === true) {
+            this.form.commodityDescr = this.sftVerifyData.commodityDescr;
+          }
+
+          if (this.form.id) {
+            await this.billsSubmitfun();
+          }
+        }
+      });
+    },
     CopyDocumentsfun() {
       if (!this.form.id) {
         return this.$message.error("请保存数据");
@@ -1268,7 +1446,7 @@ export default {
       });
     },
     //文档导入
-    importData(row) {
+    doImportData(row) {
       if (!row) return;
 
       this.excelOption.column[0].action = `/api/blade-los/templateImport/${row.document}?billId=${this.form.id}`;
@@ -1332,11 +1510,11 @@ export default {
           // this.form = res;
           Object.keys(res).forEach(key => {
             if (res[key]) {
-              if (key != "detail") {
+              if (key !== "detail") {
                 // this.form[key] = res[key]
                 this.$set(this.form, key, res[key]);
               }
-              if (key == "detail") {
+              if (key === "detail") {
                 Object.keys(res.detail).forEach(key => {
                   if (res.detail[key]) {
                     // this.form.detail[key] = res.detail[key]
@@ -3405,10 +3583,10 @@ export default {
       // console.log("bills.billsDetailfun", id, status);
       const res = await billsDetail(id);
 
-      if(status==="containersList"){
+      if (status === "containersList") {
         this.$set(this.form, "containersList", res.data.data.containersList);
 
-        return
+        return;
       }
 
       // this.form = res.data.data;