Browse Source

新加箱动态查询
OW同步更新场站id
进口新加检索条件
新加报表组件
代理箱替换ow明细字段

Qukatie 1 week ago
parent
commit
48792691ab

+ 9 - 0
src/api/iosBasicData/boxDynamic.js

@@ -0,0 +1,9 @@
+import request from '@/router/axios';
+
+export const containerDynamicInquiry = (data) => {
+  return request({
+    url: '/api/blade-los/boxReminderStatistics/containerDynamicInquiry',
+    method: 'get',
+    params:data
+  })
+}

+ 237 - 181
src/components/feeModify/boxMain.vue

@@ -1,25 +1,41 @@
 <!-- eslint-disable vue/require-valid-default-prop -->
 <template>
   <div>
-    <el-dialog :title="title" :visible.sync="dialogVisible" append-to-body width="80%" :before-close="handleClose"
-      :close-on-click-modal="false">
+    <el-dialog :title="title" :visible.sync="dialogVisible" append-to-body width="80%" :before-close="handleClose" :close-on-click-modal="false">
       <div v-if="dialogVisible">
         <el-divider>费用原来信息</el-divider>
         <avue-form :option="oldOption" v-model="oldForm" ref="form"></avue-form>
         <el-divider>费用修改信息</el-divider>
         <avue-form :option="newOption" v-model="newForm" ref="form">
           <template slot="corpTypeUpdate">
-            <dic-select v-model="newForm.corpTypeUpdate" key="id" label="cnName" res="records"
-              url="/blade-los/bcorpstypedefine/list?status=0&current=1&size=20" :filterable="true" :remote="true"
-              dataName="cnName" @selectChange="dicChange('corpTypeUpdate', $event)"></dic-select>
+            <dic-select
+              v-model="newForm.corpTypeUpdate"
+              key="id"
+              label="cnName"
+              res="records"
+              url="/blade-los/bcorpstypedefine/list?status=0&current=1&size=20"
+              :filterable="true"
+              :remote="true"
+              dataName="cnName"
+              @selectChange="dicChange('corpTypeUpdate', $event)"
+            ></dic-select>
           </template>
           <template slot="shortNameUpdate">
-            <dic-select v-model="newForm.shortNameUpdate" placeholder="结算单位" :key="newForm.corpTypeUpdate"
-              label="shortName" res="records"
+            <dic-select
+              v-model="newForm.shortNameUpdate"
+              placeholder="结算单位"
+              :key="newForm.corpTypeUpdate"
+              label="shortName"
+              res="records"
               :url="'/blade-los/bcorps/selectList?status=0&current=1&size=5&corpTypeName=' + newForm.corpTypeUpdate"
-              :filterable="true" :remote="true" dataName="shortName"
-              @selectChange="dicChange('shortNameUpdate', $event)" :slotRight="true" rightLabel="code"
-              :disabled="newOption.disabled"></dic-select>
+              :filterable="true"
+              :remote="true"
+              dataName="shortName"
+              @selectChange="dicChange('shortNameUpdate', $event)"
+              :slotRight="true"
+              rightLabel="code"
+              :disabled="newOption.disabled"
+            ></dic-select>
           </template>
           <!-- <template slot="billShortNameUpdate">
             <dic-select v-model="newForm.billShortNameUpdate" placeholder="客户名称" label="shortName" res="records"
@@ -28,15 +44,32 @@
               rightLabel="code" :disabled="newOption.disabled"></dic-select>
           </template> -->
           <template slot="feeCnNameUpdate">
-            <dic-select v-model="newForm.feeCnNameUpdate" placeholder="费用名称" label="cnName" res="records"
-              url="/blade-los/bfees/list?status=0&current=1&size=20" :filterable="true" :remote="true" dataName="cnName"
-              @selectChange="dicChange('feeCnNameUpdate', $event)" :slotRight="true" rightLabel="code"
-              :disabled="newOption.disabled"></dic-select>
+            <dic-select
+              v-model="newForm.feeCnNameUpdate"
+              placeholder="费用名称"
+              label="cnName"
+              res="records"
+              url="/blade-los/bfees/list?status=0&current=1&size=20"
+              :filterable="true"
+              :remote="true"
+              dataName="cnName"
+              @selectChange="dicChange('feeCnNameUpdate', $event)"
+              :slotRight="true"
+              rightLabel="code"
+              :disabled="newOption.disabled"
+            ></dic-select>
           </template>
           <template slot="unitNoUpdate">
-            <dic-select v-model="newForm.unitNoUpdate" :key="updateFormKey" placeholder="计量单位" label="code"
-              :filterable="true" :mockData="unitNoData" :disabled="newOption.disabled"
-              @selectChange="dicChange('unitNoUpdate', $event)"></dic-select>
+            <dic-select
+              v-model="newForm.unitNoUpdate"
+              :key="updateFormKey"
+              placeholder="计量单位"
+              label="code"
+              :filterable="true"
+              :mockData="unitNoData"
+              :disabled="newOption.disabled"
+              @selectChange="dicChange('unitNoUpdate', $event)"
+            ></dic-select>
             <!-- <el-select v-model="newForm.unitNoUpdate" placeholder="请选择 计量单位" size="small"
               @visible-change="visibleChange" @change="dicChange('unitNoUpdate', $event)">
               <el-option v-for="item in unitNoData" :key="item.code" :label="item.code" :value="item.code">
@@ -44,20 +77,39 @@
             </el-select> -->
           </template>
           <template slot="curCodeUpdate">
-            <dic-select v-model="newForm.curCodeUpdate" placeholder="币别" label="code"
-              :url="'/blade-los/bcurrency/obtainRate?deptId=' + deptId + '&date=' + form.etd + ' 00:00:00' + '&type=1'"
-              :filterable="true" @selectChange="dicChange('curCodeUpdate', $event, row)"
-              :disabled="newOption.disabled"></dic-select>
+            <dic-select
+              v-model="newForm.curCodeUpdate"
+              placeholder="币别"
+              label="code"
+              :url="'/blade-los/bcurrency/obtainRate?deptId=' + deptId + '&date=' + (form.etd ? form.etd + ' 00:00:00' : nowDate) + '&type=1'"
+              :filterable="true"
+              @selectChange="dicChange('curCodeUpdate', $event, row)"
+              :disabled="newOption.disabled"
+            ></dic-select>
           </template>
           <template slot="priceUpdate">
-            <el-input-number v-model="newForm.priceUpdate" :controls="false" placeholder="请输入 单价" size="small"
-              style="width: 100%;" :precision="2" @change="countChange()"
-              :disabled="newOption.disabled"></el-input-number>
+            <el-input-number
+              v-model="newForm.priceUpdate"
+              :controls="false"
+              placeholder="请输入 单价"
+              size="small"
+              style="width: 100%;"
+              :precision="2"
+              @change="countChange()"
+              :disabled="newOption.disabled"
+            ></el-input-number>
           </template>
           <template slot="quantityUpdate">
-            <el-input-number v-model="newForm.quantityUpdate" :controls="false" placeholder="请输入 数量" size="small"
-              style="width: 100%;" :precision="0" @change="countChange()"
-              :disabled="newOption.disabled"></el-input-number>
+            <el-input-number
+              v-model="newForm.quantityUpdate"
+              :controls="false"
+              placeholder="请输入 数量"
+              size="small"
+              style="width: 100%;"
+              :precision="0"
+              @change="countChange()"
+              :disabled="newOption.disabled"
+            ></el-input-number>
           </template>
         </avue-form>
       </div>
@@ -70,9 +122,10 @@
 </template>
 
 <script>
-import { applyUpdate, revokeapplyUpdate, getDetail, applyUpdateCheck } from '@/api/iosBasicData/feeModify.js'
+import { applyUpdate, revokeapplyUpdate, getDetail, applyUpdateCheck } from "@/api/iosBasicData/feeModify.js";
 import dicSelect from "@/components/dicSelect/main";
 import { getBunitsPage } from "@/api/iosBasicData/bunits";
+import { getCurrentDate } from "@/util/date";
 import _ from "lodash";
 export default {
   components: {
@@ -81,21 +134,21 @@ export default {
   props: {
     form: {
       type: Object,
-      default: () => { },
+      default: () => {}
     },
     url: {
-      type: String,
+      type: String
     },
     pageStatus: {
-      type: String,
+      type: String
     },
     pageLabel: {
-      type: String,
+      type: String
     }
   },
   data() {
     return {
-      deptId: JSON.parse(localStorage.getItem('sysitemData')).deptId,
+      deptId: JSON.parse(localStorage.getItem("sysitemData")).deptId,
       oldForm: {},
       newForm: {},
       unitNoData: [],
@@ -108,11 +161,11 @@ export default {
         column: [
           {
             label: "类别",
-            prop: "corpType",
+            prop: "corpType"
           },
           {
             label: "结算单位",
-            prop: "shortName",
+            prop: "shortName"
           },
           // {
           //   label: "客户名称",
@@ -120,36 +173,36 @@ export default {
           // },
           {
             label: "费用名称",
-            prop: "feeCnName",
+            prop: "feeCnName"
           },
           {
             label: "计量单位",
-            prop: "unitNo",
+            prop: "unitNo"
           },
           {
             label: "币别",
-            prop: "curCode",
+            prop: "curCode"
           },
           {
             label: "汇率",
-            prop: "exrate",
+            prop: "exrate"
           },
           {
             label: "数量",
-            prop: "quantity",
+            prop: "quantity"
           },
           {
             label: "单价",
-            prop: "price",
+            prop: "price"
           },
           {
             label: "金额",
-            prop: "amount",
+            prop: "amount"
           },
           {
             label: "备注",
             prop: "remarks",
-            minRows: 2,
+            minRows: 2
           }
         ]
       },
@@ -161,62 +214,62 @@ export default {
         column: [
           {
             label: "类别",
-            prop: "corpTypeUpdate",
+            prop: "corpTypeUpdate"
           },
           {
             label: "结算单位",
-            prop: "shortNameUpdate",
+            prop: "shortNameUpdate"
           },
           {
             label: "费用名称",
-            prop: "feeCnNameUpdate",
+            prop: "feeCnNameUpdate"
           },
           {
             label: "计量单位",
-            prop: "unitNoUpdate",
+            prop: "unitNoUpdate"
           },
           {
             label: "币别",
-            prop: "curCodeUpdate",
+            prop: "curCodeUpdate"
           },
           {
             label: "汇率",
             prop: "exrateUpdate",
-            disabled: true,
+            disabled: true
           },
           {
             label: "数量",
-            prop: "quantityUpdate",
+            prop: "quantityUpdate"
           },
           {
             label: "单价",
-            prop: "priceUpdate",
+            prop: "priceUpdate"
           },
           {
             label: "金额",
             prop: "amountUpdate",
-            disabled: true,
+            disabled: true
           },
           {
             label: "备注",
             prop: "remarksUpdate",
-            minRows: 2,
+            minRows: 2
           },
           {
             label: "修改原因",
             prop: "updateReason",
-            minRows: 2,
+            minRows: 2
           }
         ]
       },
       type: null,
       title: null,
       updateFormKey: new Date().getTime(),
-    }
+      nowDate: getCurrentDate()
+    };
   },
   created() {
     // this.option = await this.getColumnData(this.getColumnName(309.6), this.optionBack);
-
   },
   methods: {
     // 获取计算属性
@@ -272,8 +325,8 @@ export default {
     //   // }
     // },
     openDialog(row, type) {
-      if (type == 'fix') {
-        this.oldForm = row
+      if (type == "fix") {
+        this.oldForm = row;
         this.newForm = {
           corpIdUpdate: row.corpId,
           corpCnNameUpdate: row.corpCnName,
@@ -293,17 +346,17 @@ export default {
           exrateUpdate: row.exrate,
           quantityUpdate: row.quantity,
           priceUpdate: row.price,
-          amountUpdate: row.amount,
-        }
-        this.checkRate(null, (this.form.etd ? this.form.etd + ' 00:00:00' : null), this.oldForm.dc, 1, this.form.branchId)
-        this.type = type
-        this.title = '费用申请修改'
+          amountUpdate: row.amount
+        };
+        this.checkRate(null, this.form.etd ? this.form.etd + " 00:00:00" : null, this.oldForm.dc, 1, this.form.branchId);
+        this.type = type;
+        this.title = "费用申请修改";
         let obj = {
           ...this.oldForm,
           ...this.newForm,
-          billDate: this.oldForm.billDate ? this.oldForm.billDate + ' 00:00:00' : null,
-          etd: this.oldForm.etd ? this.oldForm.etd + ' 00:00:00' : null,
-          eta: this.oldForm.eta ? this.oldForm.eta + ' 00:00:00' : null,
+          billDate: this.oldForm.billDate ? this.oldForm.billDate + " 00:00:00" : null,
+          etd: this.oldForm.etd ? this.oldForm.etd + " 00:00:00" : null,
+          eta: this.oldForm.eta ? this.oldForm.eta + " 00:00:00" : null,
           id: null,
           pid: this.form.id,
           itemId: this.oldForm.id,
@@ -311,26 +364,25 @@ export default {
           branchName: this.form.branchName,
           url: this.url,
           pageStatus: this.pageStatus,
-          pageLabel: this.pageLabel,
-        }
+          pageLabel: this.pageLabel
+        };
         applyUpdateCheck(obj).then(res => {
-          this.dialogVisible = true
-        })
-
+          this.dialogVisible = true;
+        });
       }
-      if (type == 'del') {
-        this.$confirm('是否申请费用删除?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
+      if (type == "del") {
+        this.$confirm("是否申请费用删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
         }).then(() => {
-          this.oldForm = row
+          this.oldForm = row;
           let obj = {
             ...this.oldForm,
             ...this.newForm,
-            billDate: this.oldForm.billDate ? this.oldForm.billDate + ' 00:00:00' : null,
-            etd: this.oldForm.etd ? this.oldForm.etd + ' 00:00:00' : null,
-            eta: this.oldForm.eta ? this.oldForm.eta + ' 00:00:00' : null,
+            billDate: this.oldForm.billDate ? this.oldForm.billDate + " 00:00:00" : null,
+            etd: this.oldForm.etd ? this.oldForm.etd + " 00:00:00" : null,
+            eta: this.oldForm.eta ? this.oldForm.eta + " 00:00:00" : null,
             type: 1,
             id: null,
             pid: this.form.id,
@@ -339,129 +391,130 @@ export default {
             branchName: this.form.branchName,
             url: this.url,
             pageStatus: this.pageStatus,
-            pageLabel: this.pageLabel,
-          }
+            pageLabel: this.pageLabel
+          };
           applyUpdateCheck(obj).then(res => {
             applyUpdate(obj).then(res => {
-              this.$message.success('操作成功');
-              this.$emit('updateDetail')
-            })
-          })
-
-        })
+              this.$message.success("操作成功");
+              this.$emit("updateDetail");
+            });
+          });
+        });
       }
-      if (type == 'view') {
+      if (type == "view") {
         const obj = {
-          id: row.id,
-        }
+          id: row.id
+        };
         getDetail(obj).then(res => {
-          this.oldForm = res.data.data
-          this.newForm = res.data.data
-          this.newOption.disabled = true
-          this.title = '查看费用'
-          this.dialogVisible = true
-        })
+          this.oldForm = res.data.data;
+          this.newForm = res.data.data;
+          this.newOption.disabled = true;
+          this.title = "查看费用";
+          this.dialogVisible = true;
+        });
       }
-      if (type == 'revoke') {
+      if (type == "revoke") {
         let obj = {
           billId: this.form.id,
           itemId: row.id
-        }
+        };
         revokeapplyUpdate(obj).then(res => {
-          this.$message.success('操作成功');
-          this.$emit('updateDetail')
-        })
+          this.$message.success("操作成功");
+          this.$emit("updateDetail");
+        });
       }
     },
     countChange() {
-      this.newForm.amountUpdate = _.round(_.multiply(this.newForm.priceUpdate ? this.newForm.priceUpdate : 0, this.newForm.quantityUpdate ? this.newForm.quantityUpdate : 0), 2)
+      this.newForm.amountUpdate = _.round(
+        _.multiply(this.newForm.priceUpdate ? this.newForm.priceUpdate : 0, this.newForm.quantityUpdate ? this.newForm.quantityUpdate : 0),
+        2
+      );
     },
     dicChange(name, row) {
-      if (name == 'corpTypeUpdate') {
-        console.log(row)
-        if (row.cnName == '国内直接客户' || row.cnName == '国内同行及代理' || row.cnName == '国外直接客户') {
-          this.newForm.corpIdUpdate = this.form.corpId
-          this.newForm.shortNameUpdate = this.form.shortName
-          this.newForm.corpCnNameUpdate = this.form.corpCnName
-          this.newForm.corpEnNameUpdate = this.form.corpEnName
-        } else if (row.cnName == '国外同行及代理') {
-          this.newForm.corpIdUpdate = this.form.foreignAgencyId
-          this.newForm.shortNameUpdate = this.form.foreignAgencyCnName
-          this.newForm.corpCnNameUpdate = this.form.foreignAgencyCnName
-          this.newForm.corpEnNameUpdate = this.form.foreignAgencyEnName
-        } else if (row.cnName == '船公司') {
-          this.newForm.corpIdUpdate = this.form.carrierId
-          this.newForm.shortNameUpdate = this.form.carrierShortName
-          this.newForm.corpCnNameUpdate = this.form.carrierCnName
-          this.newForm.corpEnNameUpdate = this.form.carrierEnName
-        } else if (row.cnName == '场站') {
-          this.newForm.corpIdUpdate = this.form.cyId
-          this.newForm.shortNameUpdate = this.form.cyShortName
-          this.newForm.corpCnNameUpdate = this.form.cyCnName
-          this.newForm.corpEnNameUpdate = this.form.cyEnName
-        } else if (row.cnName == '船代') {
-          this.newForm.corpIdUpdate = this.form.shippingAgencyId
-          this.newForm.shortNameUpdate = this.form.shippingAgencyCname
-          this.newForm.corpCnNameUpdate = this.form.shippingAgencyCname
-          this.newForm.corpEnNameUpdate = this.form.shippingAgencyEname
+      if (name == "corpTypeUpdate") {
+        console.log(row);
+        if (row.cnName == "国内直接客户" || row.cnName == "国内同行及代理" || row.cnName == "国外直接客户") {
+          this.newForm.corpIdUpdate = this.form.corpId;
+          this.newForm.shortNameUpdate = this.form.shortName;
+          this.newForm.corpCnNameUpdate = this.form.corpCnName;
+          this.newForm.corpEnNameUpdate = this.form.corpEnName;
+        } else if (row.cnName == "国外同行及代理") {
+          this.newForm.corpIdUpdate = this.form.foreignAgencyId;
+          this.newForm.shortNameUpdate = this.form.foreignAgencyCnName;
+          this.newForm.corpCnNameUpdate = this.form.foreignAgencyCnName;
+          this.newForm.corpEnNameUpdate = this.form.foreignAgencyEnName;
+        } else if (row.cnName == "船公司") {
+          this.newForm.corpIdUpdate = this.form.carrierId;
+          this.newForm.shortNameUpdate = this.form.carrierShortName;
+          this.newForm.corpCnNameUpdate = this.form.carrierCnName;
+          this.newForm.corpEnNameUpdate = this.form.carrierEnName;
+        } else if (row.cnName == "场站") {
+          this.newForm.corpIdUpdate = this.form.cyId;
+          this.newForm.shortNameUpdate = this.form.cyShortName;
+          this.newForm.corpCnNameUpdate = this.form.cyCnName;
+          this.newForm.corpEnNameUpdate = this.form.cyEnName;
+        } else if (row.cnName == "船代") {
+          this.newForm.corpIdUpdate = this.form.shippingAgencyId;
+          this.newForm.shortNameUpdate = this.form.shippingAgencyCname;
+          this.newForm.corpCnNameUpdate = this.form.shippingAgencyCname;
+          this.newForm.corpEnNameUpdate = this.form.shippingAgencyEname;
         } else {
-          this.newForm.corpIdUpdate = null
-          this.newForm.shortNameUpdate = null
-          this.newForm.corpCnNameUpdate = null
-          this.newForm.corpEnNameUpdate = null
+          this.newForm.corpIdUpdate = null;
+          this.newForm.shortNameUpdate = null;
+          this.newForm.corpCnNameUpdate = null;
+          this.newForm.corpEnNameUpdate = null;
         }
       }
-      if (name == 'shortNameUpdate') {
+      if (name == "shortNameUpdate") {
         if (row) {
-          this.newForm.corpIdUpdate = row.id
-          this.newForm.corpCnNameUpdate = row.cnName
-          this.newForm.corpEnNameUpdate = row.enName
+          this.newForm.corpIdUpdate = row.id;
+          this.newForm.corpCnNameUpdate = row.cnName;
+          this.newForm.corpEnNameUpdate = row.enName;
         } else {
-          this.newForm.corpIdUpdate = null
-          this.newForm.corpCnNameUpdate = null
-          this.newForm.corpEnNameUpdate = null
-          this.newForm.shortNameUpdate = null
+          this.newForm.corpIdUpdate = null;
+          this.newForm.corpCnNameUpdate = null;
+          this.newForm.corpEnNameUpdate = null;
+          this.newForm.shortNameUpdate = null;
         }
       }
-      if (name == 'billShortNameUpdate') {
+      if (name == "billShortNameUpdate") {
         if (row) {
-          this.newForm.billCorpIdUpdate = row.id
-          this.newForm.billCorpCnNameUpdate = row.cnName
-          this.newForm.billCorpEnNameUpdate = row.enName
+          this.newForm.billCorpIdUpdate = row.id;
+          this.newForm.billCorpCnNameUpdate = row.cnName;
+          this.newForm.billCorpEnNameUpdate = row.enName;
         } else {
-          this.newForm.billCorpIdUpdate = null
-          this.newForm.billCorpCnNameUpdate = null
-          this.newForm.billCorpEnNameUpdate = null
-          this.newForm.billShortNameUpdate = null
+          this.newForm.billCorpIdUpdate = null;
+          this.newForm.billCorpCnNameUpdate = null;
+          this.newForm.billCorpEnNameUpdate = null;
+          this.newForm.billShortNameUpdate = null;
         }
       }
-      if (name == 'feeCnNameUpdate') {
+      if (name == "feeCnNameUpdate") {
         if (row) {
-          this.newForm.feeIdUpdate = row.id
-          this.newForm.feeCodeUpdate = row.code
-          this.newForm.feeEnNameUpdate = row.enName
-          this.newForm.curCodeUpdate = row.curNo
-          this.newForm.exrateUpdate = this.getExchangeRate(row.curNo, this.oldForm.dc, 1)
+          this.newForm.feeIdUpdate = row.id;
+          this.newForm.feeCodeUpdate = row.code;
+          this.newForm.feeEnNameUpdate = row.enName;
+          this.newForm.curCodeUpdate = row.curNo;
+          this.newForm.exrateUpdate = this.getExchangeRate(row.curNo, this.oldForm.dc, 1);
           // this.getBunitsPagefun(true, row)
         } else {
-          this.newForm.feeIdUpdate = null
-          this.newForm.feeCodeUpdate = null
-          this.newForm.feeEnNameUpdate = null
-          this.newForm.feeCnNameUpdate = null
-          this.newForm.exrateUpdate = null
-          this.newForm.exrateUpdate = null
+          this.newForm.feeIdUpdate = null;
+          this.newForm.feeCodeUpdate = null;
+          this.newForm.feeEnNameUpdate = null;
+          this.newForm.feeCnNameUpdate = null;
+          this.newForm.exrateUpdate = null;
+          this.newForm.exrateUpdate = null;
         }
       }
-      if (name == 'curCodeUpdate') {
+      if (name == "curCodeUpdate") {
         if (row) {
           // console.log()
-          this.newForm.exrateUpdate = this.getExchangeRate(row.code, this.oldForm.dc, 1)
+          this.newForm.exrateUpdate = this.getExchangeRate(row.code, this.oldForm.dc, 1);
         } else {
-          this.newForm.exrateUpdate = null
+          this.newForm.exrateUpdate = null;
         }
-
       }
-      if (name == 'unitNoUpdate') {
+      if (name == "unitNoUpdate") {
         // console.log(row)
         // this.unitNoData.forEach(item => {
         //   if (item.code == row) {
@@ -470,8 +523,11 @@ export default {
         //   }
         // })
         if (row) {
-          this.newForm.quantityUpdate = row.quantity
-          this.newForm.amountUpdate = _.round(_.multiply(this.newForm.priceUpdate ? this.newForm.priceUpdate : 0, this.newForm.quantityUpdate ? this.newForm.quantityUpdate : 0), 2)
+          this.newForm.quantityUpdate = row.quantity;
+          this.newForm.amountUpdate = _.round(
+            _.multiply(this.newForm.priceUpdate ? this.newForm.priceUpdate : 0, this.newForm.quantityUpdate ? this.newForm.quantityUpdate : 0),
+            2
+          );
         }
       }
     },
@@ -482,9 +538,9 @@ export default {
       let obj = {
         ...this.oldForm,
         ...this.newForm,
-        billDate: this.oldForm.billDate ? this.oldForm.billDate + ' 00:00:00' : null,
-        etd: this.oldForm.etd ? this.oldForm.etd + ' 00:00:00' : null,
-        eta: this.oldForm.eta ? this.oldForm.eta + ' 00:00:00' : null,
+        billDate: this.oldForm.billDate ? this.oldForm.billDate + " 00:00:00" : null,
+        etd: this.oldForm.etd ? this.oldForm.etd + " 00:00:00" : null,
+        eta: this.oldForm.eta ? this.oldForm.eta + " 00:00:00" : null,
         type: 0,
         id: null,
         pid: this.form.id,
@@ -493,16 +549,16 @@ export default {
         branchName: this.form.branchName,
         url: this.url,
         pageStatus: this.pageStatus,
-        pageLabel: this.pageLabel,
-      }
+        pageLabel: this.pageLabel
+      };
       applyUpdate(obj).then(res => {
-        this.$message.success('操作成功');
-        this.dialogVisible = false
-        this.$emit('updateDetail')
-      })
-    },
-  },
-}
+        this.$message.success("操作成功");
+        this.dialogVisible = false;
+        this.$emit("updateDetail");
+      });
+    }
+  }
+};
 </script>
 
 <style scoped>

+ 14 - 0
src/router/views/index.js

@@ -4608,5 +4608,19 @@ export default [{
     },
     component: () => import( /* webpackChunkName: "views" */ '@/views/approval/businessApprovalH/index')
   }]
+},
+{
+  path: '/iosBasicData/boxDynamic/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/iosBasicData/boxDynamic/index',
+    name: '箱动态查询',
+    meta: {
+      i18n: '/iosBasicData/boxDynamic/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/iosBasicData/boxDynamic/index')
+  }]
 }
 ]

+ 1 - 0
src/views/basicData/container/archives.vue

@@ -508,6 +508,7 @@ export default {
             label: "放箱号类型OW",
             prop: "containerNumberTypeOw",
             width: 110,
+            labelWidth:100,
             overHidden: true,
             disabled: true
           },

+ 142 - 185
src/views/boxManagement/agentBox/detailsPage.vue

@@ -1190,11 +1190,6 @@ export default {
         menu: false,
         column: [
           {
-            label: "是否启用",
-            prop: "whetherEnable",
-            overHidden: true
-          },
-          {
             label: "放箱号",
             prop: "containerNumber",
             overHidden: true,
@@ -1204,106 +1199,41 @@ export default {
             label: "箱号",
             prop: "code",
             width: 140,
+            searchPlaceholder: "请输入箱号 多个箱号用空格区分",
             search: true,
-            cell: true,
-            slot: true,
-            formslot: true,
-            overHidden: true,
-            rules: [
-              {
-                required: true,
-                message: "请输入箱号",
-                trigger: "blur"
-              }
-            ]
+            overHidden: true
+          },
+          {
+            label: "账单日",
+            prop: "rentEndDate",
+            width: 100,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            overHidden: true
           },
-          // {
-          //   label: '代理名称',
-          //   prop: 'agentName',
-          //   cell: true,
-          //   slot: true,
-          //   formslot: true,
-          //   overHidden: true,
-          //   width: 100
-          // },
           {
             label: "箱型",
             prop: "boxType",
             width: 100,
-            cell: true,
-            slot: true,
-            formslot: true,
-            overHidden: true,
-            rules: [
-              {
-                required: true,
-                message: "请选择箱型",
-                trigger: "blur"
-              }
-            ]
+            overHidden: true
           },
           {
             label: "箱属",
             prop: "boxBelongsTo",
+            overHidden: true,
+            width: 100
+          },
+          {
+            label: "箱东",
+            prop: "boxEastName",
             overHidden: true
-            // cell: true,
-            // width: 100,
-            // type: 'select',
-            // dicUrl: "/api/blade-system/dict-biz/dictionary?code=boxBelongsTo",
-            // props: {
-            //   label: "dictValue",
-            //   value: "dictValue"
-            // },
-            // rules: [{
-            //   required: true,
-            //   message: "请选择箱属",
-            //   trigger: "blur"
-            // }]
           },
           {
             label: "放箱号类型",
             prop: "boxCategory",
             overHidden: true,
-            cell: true,
-            width: 100,
-            type: "select",
-            dicUrl: "/api/blade-system/dict-biz/dictionary?code=boxCategory",
-            props: {
-              label: "dictValue",
-              value: "dictValue"
-            },
-            rules: [
-              {
-                required: true,
-                message: "请选择放箱号类型",
-                trigger: "blur"
-              }
-            ]
-          },
-          {
-            label: "箱况",
-            prop: "boxCondition",
-            overHidden: true,
-            cell: true,
-            width: 100,
-            type: "select",
-            dicData: [
-              {
-                label: "新",
-                value: "新"
-              },
-              {
-                label: "旧",
-                value: "旧"
-              }
-            ],
-            rules: [
-              {
-                required: true,
-                message: "请选择箱况",
-                trigger: "blur"
-              }
-            ]
+            width: 100
           },
           {
             label: "箱状态",
@@ -1315,145 +1245,173 @@ export default {
             label: "箱好坏",
             prop: "boxStatus",
             width: 100,
-            cell: true,
+            overHidden: true
+          },
+          {
+            label: "箱动态",
+            prop: "boxDynamics",
+            width: 100,
+            overHidden: true
+          },
+          {
+            label: "当前港口",
+            prop: "portCname",
+            overHidden: true
+          },
+          {
+            label: "当前场站",
+            prop: "stationCname",
             overHidden: true,
-            type: "select",
-            dicUrl: "/api/blade-system/dict-biz/dictionary?code=box_status",
-            props: {
-              label: "dictValue",
-              value: "dictValue"
-            },
-            rules: [
-              {
-                required: true,
-                message: "请选择箱好坏",
-                trigger: "blur"
-              }
-            ]
+            width: 100
           },
-          // {
-          //   label: '箱动态',
-          //   prop: 'boxDynamics',
-          //   width: 100,
-          //   overHidden: true,
-          // },
           {
-            label: "金额",
-            prop: "amount",
-            cell: true,
-            type: "number",
-            controls: false,
+            label: "箱污染",
+            prop: "boxPollution",
             overHidden: true,
-            width: 100,
-            rules: [
-              {
-                required: true,
-                message: "请输入金额",
-                trigger: "blur"
-              }
-            ]
+            width: 100
           },
           {
-            label: "币别",
-            prop: "currency",
-            width: 100,
-            cell: true,
-            slot: true,
-            formslot: true,
+            label: "客户名称",
+            prop: "corpName",
             overHidden: true,
-            rules: [
-              {
-                required: true,
-                message: "请选择币别",
-                trigger: "blur"
-              }
-            ]
+            width: 100
           },
           {
-            label: "汇率",
-            prop: "exrate",
-            cell: true,
-            type: "number",
-            controls: false,
+            label: "提单号",
+            prop: "mblno",
             overHidden: true,
-            width: 100,
-            rules: [
-              {
-                required: true,
-                message: "请输入汇率",
-                trigger: "blur"
-              }
-            ]
+            width: 100
           },
           {
-            label: "造箱日期",
-            prop: "boxMakingDate",
+            label: "分单号",
+            prop: "hblno",
+            overHidden: true,
+            width: 100
+          },
+          {
+            label: "船名",
+            prop: "shipCname",
+            overHidden: true
+          },
+          {
+            label: "航次",
+            prop: "voyage",
+            overHidden: true
+          },
+          {
+            label: "ETD",
+            prop: "etd",
             overHidden: true,
-            cell: true,
             type: "date",
             format: "yyyy-MM-dd",
             valueFormat: "yyyy-MM-dd HH:mm:ss",
             width: 100
           },
           {
-            label: "箱东",
-            prop: "boxEastName",
+            label: "POL堆场",
+            prop: "polCyCname",
+            width: 100,
+            overHidden: true
+          },
+          {
+            label: "POL免箱使天数",
+            prop: "polFreeBoxUseDays",
+            width: "100",
+            overHidden: true
+          },
+          {
+            label: "POL预出场日期",
+            prop: "polPreAppearanceDate",
             overHidden: true,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
             width: 100
           },
           {
-            label: "原箱东",
-            prop: "originalBoxEastName",
-            cell: true,
-            slot: true,
-            formslot: true,
+            label: "POL场站空箱出场日期",
+            prop: "polStationEmptyContainerExitDate",
             overHidden: true,
-            width: 100
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            width: 140
           },
           {
-            label: "场站",
-            prop: "stationCname",
-            cell: true,
-            slot: true,
-            formslot: true,
+            label: "POL还箱日期",
+            prop: "polReturnDate",
             overHidden: true,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            width: 100
+          },
+          {
+            label: "POL超期箱使天数",
+            prop: "polOverdueBoxUseDays",
             width: 100,
-            rules: [
-              {
-                required: true,
-                message: "请选择场站",
-                trigger: "blur"
-              }
-            ]
+            overHidden: true
           },
           {
-            label: "限制港口",
-            prop: "restrictedPortsName",
-            cell: true,
-            slot: true,
-            formslot: true,
+            label: "ETA",
+            prop: "eta",
             overHidden: true,
-            width: 200
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            width: 100
           },
           {
-            label: "限制船公司",
-            prop: "restrictingShippingCompaniesName",
-            cell: true,
-            slot: true,
-            formslot: true,
+            label: "POD空箱还箱日期",
+            prop: "podEmptyContainerReturnDate",
+            overHidden: true,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            width: 120
+          },
+          {
+            label: "POL空箱提箱进场日期",
+            prop: "polPickUpDate",
             overHidden: true,
-            width: 200
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            width: 100
+          },
+          {
+            label: "POD场站",
+            prop: "podStationCname",
+            width: 100,
+            overHidden: true
+          },
+          {
+            label: "POD免箱使天数",
+            prop: "podFreeBoxUseDays",
+            width: "100",
+            overHidden: true
+          },
+          {
+            label: "POD箱使天数",
+            prop: "podBoxUseDays",
+            width: "100",
+            overHidden: true
           },
           {
             label: "启用日期",
             prop: "activationDate",
-            // cell: true,
             overHidden: true,
             type: "date",
             format: "yyyy-MM-dd",
             valueFormat: "yyyy-MM-dd HH:mm:ss"
           },
           {
+            label: "代理名称",
+            prop: "agentName",
+            overHidden: true,
+            width: 100
+          },
+          {
             label: "制单人",
             prop: "createUserName",
             overHidden: true
@@ -1484,7 +1442,6 @@ export default {
           {
             label: "备注",
             prop: "remarks",
-            cell: true,
             width: 150,
             overHidden: true
           }

+ 13 - 6
src/views/boxManagement/containerNumber/detailsPage.vue

@@ -1354,13 +1354,13 @@ export default {
             prop: "occupyNum",
             width: 100,
             overHidden: true
-          },
-          {
-            label: "实际操作占用",
-            prop: "actualOccupyNum",
-            width: 100,
-            overHidden: true
           }
+          // {
+          //   label: "实际操作占用",
+          //   prop: "actualOccupyNum",
+          //   width: 100,
+          //   overHidden: true
+          // }
         ]
       },
       occupyNumData: [],
@@ -1392,6 +1392,13 @@ export default {
       this.getCopydate(this.detailData.copyId);
     }
   },
+  activated() {
+    if (this.form.id && sessionStorage.getItem("occupyNumUpdate")) {
+      this.getDetail(this.form.id);
+      sessionStorage.removeItem("occupyNumUpdate");
+    }
+  },
+
   methods: {
     rowJump(row) {
       if (this.verifyTags("海运出口(F)")) {

+ 2 - 2
src/views/iosBasicData/OceanFreightImport/bills/assembly/feecenter.vue

@@ -3698,7 +3698,7 @@ export default {
     feecenterEditfun(dc) {
       if (dc == "D") {
         for (let item of this.assemblyForm.feeCenterListD) {
-          if ((item.accStatus != 1) & (item.auditStatus == 0)) {
+          if (item.accStatus != 1 && item.auditStatus == 0 && item.automaticGenerated != 1) {
             if (!item.id) {
               this.$delete(item, "edit");
               this.$set(item, "edit", true);
@@ -3711,7 +3711,7 @@ export default {
         }
       } else {
         for (let item of this.assemblyForm.feeCenterListC) {
-          if ((item.accStatus != 1) & (item.auditStatus == 0)) {
+         if (item.accStatus != 1 && item.auditStatus == 0 && item.automaticGenerated != 1) {
             if (!item.id) {
               this.$delete(item, "edit");
               this.$set(item, "edit", true);

+ 11 - 0
src/views/iosBasicData/OceanFreightImport/bills/index.vue

@@ -829,6 +829,17 @@ export default {
             label: this.$t("sea118n.pol"),
             prop: "polEnName",
             width: "120",
+            type: "select",
+            filterable: true,
+            remote: true,
+            dicUrl: "/api/blade-los/bports/list?enName={{key}}",
+            props: {
+              label: "enName",
+              value: "enName",
+              res: "data.records"
+            },
+            search: true,
+            searchOrder: 10.2,
             overHidden: true
           },
           // {

+ 54 - 42
src/views/iosBasicData/SeafreightExportF/bills/assembly/EntrustmentLnformation/precontainers.vue

@@ -104,7 +104,7 @@
         >
         </search-query>
       </template>
-      <template slot="quantityForm" slot-scope="{ row }">
+      <!-- <template slot="quantity" slot-scope="{ row }">
         <el-input
           v-if="row.$cellEdit"
           style="width: 100%;"
@@ -116,7 +116,7 @@
           placeholder="请输入箱量"
         ></el-input>
         <span v-else>{{ row.quantity }}</span>
-      </template>
+      </template> -->
       <template slot="number" slot-scope="{ row }">
         <el-input
           v-if="row.$cellEdit"
@@ -160,9 +160,20 @@
         <span v-else>{{ row.measurement }}</span>
       </template>
     </avue-crud>
-    <el-dialog title="查看放箱号" :visible.sync="dialogVisible" width="50%" :before-close="handleClose" append-to-body>
+    <el-dialog title="查看放箱号" :visible.sync="dialogVisible" width="60%" :before-close="handleClose" append-to-body>
       <span>
-        <avue-form ref="form" v-if="dialogVisible" :option="optionForm" v-model="boxForm"></avue-form>
+        <avue-form ref="form" v-if="dialogVisible" :option="optionForm" v-model="boxForm">
+          <template slot="quantity">
+            <el-input-number
+              v-model="boxForm.quantity"
+              :min="0"
+              placeholder="请输入 箱量"
+              size="small"
+              :controls="false"
+              :disabled="boxForm.containerNumberStatus == '录入'"
+            ></el-input-number>
+          </template>
+        </avue-form>
         <avue-crud
           v-if="dialogVisible"
           ref="crud2"
@@ -327,7 +338,7 @@ export default {
             label: this.$t("sea118n.ctnrQty"),
             prop: "quantity",
             type: "number",
-            slot: true,
+            cell: true,
             controls: false,
             precision: 0,
             width: "120",
@@ -557,12 +568,12 @@ export default {
             width: 100,
             overHidden: true
           },
-          {
-            label: "内部放箱号",
-            prop: "internalContainerNumber",
-            width: 100,
-            overHidden: true
-          },
+          // {
+          //   label: "内部放箱号",
+          //   prop: "internalContainerNumber",
+          //   width: 100,
+          //   overHidden: true
+          // },
           // {
           //   label: "放箱号类型",
           //   prop: "busType",
@@ -578,33 +589,33 @@ export default {
           {
             label: "箱型",
             prop: "boxType",
-            width: 100,
+            width: 60,
             overHidden: true
           },
           {
-            label: "可用箱数",
+            label: "可用",
             prop: "remainingNum",
-            width: 100,
+            width: 60,
             overHidden: true
           },
           {
-            label: "场地盘存",
+            label: "盘存",
             prop: "storageNum",
-            width: 100,
+            width: 60,
             overHidden: true
           },
           {
-            label: "占用箱量",
+            label: "占用",
             prop: "occupyNum",
-            width: 100,
-            overHidden: true
-          },
-          {
-            label: "实际操作占用",
-            prop: "actualOccupyNum",
-            width: 100,
+            width: 80,
             overHidden: true
           },
+          // {
+          //   label: "实际操作占用",
+          //   prop: "actualOccupyNum",
+          //   width: 100,
+          //   overHidden: true
+          // },
           {
             label: "优先等级",
             prop: "priorityLevel",
@@ -623,23 +634,23 @@ export default {
             width: 100,
             overHidden: true
           },
-          {
-            label: "是否出场状态",
-            prop: "whetherAppearStatus",
-            width: 100,
-            type: "select",
-            dicData: [
-              {
-                label: "否",
-                value: "0"
-              },
-              {
-                label: "是",
-                value: "1"
-              }
-            ],
-            overHidden: true
-          },
+          // {
+          //   label: "是否出场状态",
+          //   prop: "whetherAppearStatus",
+          //   width: 100,
+          //   type: "select",
+          //   dicData: [
+          //     {
+          //       label: "否",
+          //       value: "0"
+          //     },
+          //     {
+          //       label: "是",
+          //       value: "1"
+          //     }
+          //   ],
+          //   overHidden: true
+          // },
           {
             label: "备注",
             prop: "remarks",
@@ -709,7 +720,7 @@ export default {
               occupyNumSum += Number(item.occupyNum ? item.occupyNum : 0);
             }
             if (occupyNumSum != this.boxForm.quantity) {
-               return this.$message.error(`明细数据所有占用箱量的和必须等于箱量:${this.boxForm.quantity}!`);
+              return this.$message.error(`明细数据所有占用箱量的和必须等于箱量:${this.boxForm.quantity}!`);
             }
             selectedContainerNumber(this.containerNumberItemList).then(res => {
               this.$message.success("操作成功!");
@@ -735,6 +746,7 @@ export default {
             actualOccupyNumUpdate(obj).then(res => {
               this.$message.success("操作成功!");
               this.dialogVisible = false;
+              sessionStorage.setItem("occupyNumUpdate", true);
               this.$emit("billsDetailfun");
             });
           }

+ 4 - 4
src/views/iosBasicData/SeafreightExportF/bills/assembly/feecenter.vue

@@ -2624,8 +2624,8 @@ export default {
       }
       let arr = selection.map(item => {
         let obj = {};
-        if(dc=='C'){
-          obj.corpType = '国内直接客户';
+        if (dc == "C") {
+          obj.corpType = "国内直接客户";
           obj.corpId = this.assemblyForm.corpId;
           obj.shortName = this.assemblyForm.shortName;
           obj.corpCnName = this.assemblyForm.corpCnName;
@@ -3692,7 +3692,7 @@ export default {
     feecenterEditfun(dc) {
       if (dc == "D") {
         for (let item of this.assemblyForm.feeCenterListD) {
-          if (item.accStatus != 1 && item.auditStatus == 0) {
+          if (item.accStatus != 1 && item.auditStatus == 0 && item.automaticGenerated != 1) {
             if (!item.id) {
               this.$delete(item, "edit");
               this.$set(item, "edit", true);
@@ -3705,7 +3705,7 @@ export default {
         }
       } else {
         for (let item of this.assemblyForm.feeCenterListC) {
-          if (item.accStatus != 1 && item.auditStatus == 0) {
+          if (item.accStatus != 1 && item.auditStatus == 0 && item.automaticGenerated != 1) {
             if (!item.id) {
               this.$delete(item, "edit");
               this.$set(item, "edit", true);

+ 71 - 0
src/views/iosBasicData/boxDynamic/components/report-container.vue

@@ -0,0 +1,71 @@
+<template>
+  <el-dialog
+    :visible.sync="visible"
+    top="0"
+    width="100%"
+    height="100%"
+    style="width: 100%; height: 100%;"
+    :before-close="onClose"
+    :close-on-click-modal="false"
+    append-to-body
+    class="el-dialogDeep"
+    :fullscreen="true"
+  >
+    <div v-if="reportType" id="reportContainer" style="width: 100%; height: 100vh; padding: 0">
+    </div>
+  </el-dialog>
+</template>
+<script>
+
+// @ts-nocheck
+export default {
+  data() {
+    return {
+      visible: false,
+      refreshFun: null,
+      reportType:false, // 通过判断处理数据
+    };
+  },
+  props: {
+    switchDialog: {
+      type: Boolean,
+      default: false
+    },
+    reportName: {
+      type: String
+    },
+    reportId: {
+      type: String
+    },
+  },
+  methods: {
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    onClose() {
+      this.visible = false;
+    },
+    showContainer(initFun, refreshFun) {
+      if (typeof initFun == 'function') {
+        initFun()
+      }
+      this.refreshFun = refreshFun
+      this.reportType = true
+      this.visible = true
+    },
+    hideContainer() {
+      if (typeof this.refreshFun == 'function') {
+        this.refreshFun()
+      }
+      this.reportType = false
+      this.visible = false
+      console.log('hideContainer')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+/deep/.el-dialog__header {
+  display: none;
+}
+</style>

+ 409 - 0
src/views/iosBasicData/boxDynamic/components/report.vue

@@ -0,0 +1,409 @@
+<template>
+  <div>
+    <el-dialog
+      append-to-body
+      :title="title"
+      :visible.sync="previewDialog"
+      width="60%"
+      :close-on-click-modal="false"
+      :destroy-on-close="true"
+      :close-on-press-escape="false"
+      v-dialog-drag
+    >
+      <avue-crud
+        :option="option"
+        :table-loading="loading"
+        :data="data"
+        :page.sync="page"
+        v-model="form"
+        ref="crud"
+        id="out-table"
+        :header-cell-class-name="headerClassName"
+        :search.sync="query"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @refresh-change="refreshChange"
+      >
+        <template slot-scope="{ row }" slot="menu">
+          <el-link type="primary" :disabled="row.status == 1" @click="rowCell(row.url, row)">预览报表</el-link>
+        </template>
+      </avue-crud>
+    </el-dialog>
+    <reportContainer ref="reportContainer"></reportContainer>
+  </div>
+</template>
+
+<script>
+// @ts-nocheck
+import { reportsGetReportDataBox } from "@/api/iosBasicData/reports";
+import reportContainer from "./report-container.vue";
+import dicSelect from "@/components/dicSelect/main.vue";
+export default {
+  components: {
+    dicSelect,
+    reportContainer
+  },
+  props: {
+    title: {
+      type: String,
+      default: "预览报表"
+    },
+    //报表需要的id
+    id: {
+      type: String
+    },
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    //业务类型
+    businessValue: {
+      type: String,
+      default: ""
+    },
+    //类别
+    classifyCode: {
+      type: String,
+      default: ""
+    },
+    //组别
+    groupCode: {
+      type: String,
+      default: ""
+    },
+    //父组件传来的明细选中数据
+    selecList: {
+      type: Array,
+      default: []
+    },
+    //父组件传来的明细id
+    itemIds: {
+      type: String,
+      default: null
+    },
+    queryForm: {
+      type: Object,
+      default: function() {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      roleName: localStorage.getItem("roleName"),
+      userList: [],
+      previewDialog: false,
+      form: {},
+      query: {},
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      selectionList: [],
+      option: {
+        height: 400,
+        calcHeight: 30,
+        tip: false,
+        searchShow: false,
+        searchMenuSpan: 6,
+        border: true,
+        index: true,
+        viewBtn: true,
+        selection: true,
+        searchBtn: false,
+        addBtn: false,
+        emptyBtn: false,
+        dialogClickModal: false,
+        menuWidth: 100,
+        header: false,
+        column: [
+          {
+            label: "组别",
+            prop: "groupCode",
+            overHidden: true,
+            rules: [
+              {
+                required: true,
+                message: "请输入组别",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "类别",
+            prop: "classifyCode",
+            overHidden: true
+          },
+          {
+            label: "报表编码",
+            prop: "code",
+            overHidden: true,
+            rules: [
+              {
+                required: true,
+                message: "请输入报表编码",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "中文名称",
+            prop: "cnName",
+            overHidden: true,
+            rules: [
+              {
+                required: true,
+                message: "请输入中文名称",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "英文名称",
+            prop: "enName",
+            overHidden: true
+          },
+          {
+            label: "报表格式",
+            prop: "content",
+            overHidden: true,
+            rules: [
+              {
+                required: true,
+                message: "请输入报表格式",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "备注",
+            prop: "remarks",
+            overHidden: true
+          }
+        ]
+      },
+      data: []
+    };
+  },
+  async created() {},
+  computed: {
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(",");
+    }
+  },
+  methods: {
+    openDialog() {
+      //   this.onLoad(this.page, this.query, true);
+      console.log(111)
+      this.rowCell();
+    },
+    // 打印报表获取数据
+    rowCell(url, row) {
+      let obj = {};
+      obj = {
+        id: this.id,
+        reportCode: row.classifyCode,
+        groupCode: row.groupCode,
+        itemIds: this.itemIds,
+        type: this.businessValue,
+      };
+      reportsGetReportDataBox(obj).then(res => {
+        this.handleReportPreview(url, res.data.data.data);
+      });
+    },
+    // 预览报表
+    handleReportPreview(url, row) {
+      Stimulsoft.Base.StiLicense.key =
+        "6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHn0s4gy0Fr5YoUZ9V00Y0igCSFQzwEqYBh/N77k4f0fWXTHW5rqeBNLkaurJDenJ9o97TyqHs9HfvINK18Uwzsc/bG01Rq+x3H3Rf+g7AY92gvWmp7VA2Uxa30Q97f61siWz2dE5kdBVcCnSFzC6awE74JzDcJMj8OuxplqB1CYcpoPcOjKy1PiATlC3UsBaLEXsok1xxtRMQ283r282tkh8XQitsxtTczAJBxijuJNfziYhci2jResWXK51ygOOEbVAxmpflujkJ8oEVHkOA/CjX6bGx05pNZ6oSIu9H8deF94MyqIwcdeirCe60GbIQByQtLimfxbIZnO35X3fs/94av0ODfELqrQEpLrpU6FNeHttvlMc5UVrT4K+8lPbqR8Hq0PFWmFrbVIYSi7tAVFMMe2D1C59NWyLu3AkrD3No7YhLVh7LV0Tttr/8FrcZ8xirBPcMZCIGrRIesrHxOsZH2V8t/t0GXCnLLAWX+TNvdNXkB8cF2y9ZXf1enI064yE5dwMs2fQ0yOUG/xornE";
+      // Stimulsoft.Base.StiLicense.Key = '6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHkcgIvwL0jnpsDqRpWg5FI5kt2G7A0tYIcUygBh1sPs7plofUOqPB1a4HBIXJB621mau2oiAIj+ysU7gKUXfjn/D5BocmduNB+ZMiDGPxFrAp3PoD0nYNkkWh8r7gBZ1v/JZSXGE3bQDrCQCNSy6mgby+iFAMV8/PuZ1z77U+Xz3fkpbm6MYQXYp3cQooLGLUti7k1TFWrnawT0iEEDJ2iRcU9wLqn2g9UiWesEZtKwI/UmEI2T7nv5NbgV+CHguu6QU4WWzFpIgW+3LUnKCT/vCDY+ymzgycw9A9+HFSzARiPzgOaAuQYrFDpzhXV+ZeX31AxWlnzjDWqpfluygSNPtGul5gyNt2CEoJD1Yom0VN9fvRonYsMsimkFFx2AwyVpPcs+JfVBtpPbTcZscnzUdmiIvxv8Gcin6sNSibM6in/uUKFt3bVgW/XeMYa7MLGF53kvBSwi78poUDigA2n12SmghLR0AHxyEDIgZGOTbNI33GWu7ZsPBeUdGu55R8w='
+      Stimulsoft.Base.Localization.StiLocalization.addLocalizationFile("/reports/stimulsoft/Localization/zh-CHS.xml", true, "zh-CHS");
+      Stimulsoft.Base.Localization.StiLocalization.setLocalizationFile("/reports/stimulsoft/Localization/zh-CHS.xml");
+
+      // 工具栏
+      var options = new Stimulsoft.Viewer.StiViewerOptions();
+      options.height = "100%";
+      options.appearance.scrollbarsMode = true; // 滚动条模式
+      options.toolbar.showDesignButton = false; // 显示设计按钮
+      options.toolbar.showAboutButton = false; // 显示关于按钮
+      options.toolbar.showResourcesButton = false; // 显示资源按钮
+      options.toolbar.showFullScreenButton = false; // 显示全屏按钮
+      options.toolbar.showOpenButton = false; // 显示打开按钮
+      options.appearance.showTooltips = false; // 显示工具提示
+      options.appearance.showDialogsHelp = false; // 显示对话框帮助
+      options.exports.showExportToDocument = false; // 显示导出到文档
+      options.toolbar.showParametersButton = true; // 显示参数按钮
+      options.appearance.bookmarksPrint = true; // 书签打印
+      // printDestination 参数:用于指定报表打印的目标位置,可以是打印机、PDF 文件或者直接打印到浏览器等。
+      // Stimulsoft.Viewer.StiPrintDestination.Direct:表示直接打印到打印机,即将报表内容直接发送至打印机进行打印。
+      // 通过设置不同的 printDestination 参数,你可以控制报表打印的行为,例如是直接打印到打印机,还是生成 PDF 文件,或者直接在浏览器中预览打印内容等。
+      options.toolbar.printDestination = Stimulsoft.Viewer.StiPrintDestination.Direct;
+      // htmlRenderMode html渲染模式
+      options.appearance.htmlRenderMode = Stimulsoft.Report.Export.StiHtmlExportMode.Table;
+      // 是创建一个 Stimulsoft 报表查看器的实例的代码
+      let viewer = new Stimulsoft.Viewer.StiViewer(options, "StiViewer", false);
+      let report = new window.Stimulsoft.Report.StiReport();
+
+      // 加载文件
+      console.log("从url加载报表");
+      // report.loadFile("/reports/stimulsoft/demos/SimpleList.mrt");
+      report.load(url);
+
+      // 获取报表数据
+      var data = row;
+      data.pageOne = "Page : 1 of 1";
+      // console.log(data.hshipperDetails, 'hshipperDetails2')
+
+      // 创建一个 Stimulsoft 数据集(DataSet)的实例的代码
+      var dataSet = new Stimulsoft.System.Data.DataSet("reportData");
+
+      dataSet.readJson(data); // 用于将 JSON 格式的数据加载到数据集中。data 是包含报表数据的 JSON 对象。
+      // 这是一个方法调用,用于在报表中注册数据源。参数 'reportData' 是数据源的名称,
+      // 第二个 'reportData' 是数据源的别名,dataSet 则是之前创建的数据集实例
+      report.regData("reportData", "reportData", dataSet);
+
+      // 这是将报表对象指定给报表查看器的属性。viewer 是报表查看器的实例,而 report 是之前创建的报表对象。
+      viewer.report = report;
+
+      this.$refs.reportContainer.showContainer(
+        () => {
+          setTimeout(() => {
+            viewer.renderHtml("reportContainer");
+            this.createViewerButtons(viewer);
+          }, 50);
+        },
+        () => {}
+      );
+    },
+    createViewerButtons(viewer) {
+      viewer.jsObject.collections.images["myClose.png"] =
+        "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA0ElEQVQ4ja3TO05CQRQG4A8iOwAbtYWETndAaecK7NwCKmETtJZsSBNLobEz8ZFIJQ0UnOGSm3DnYviTybzO/895DQXGWGCVGQuMEqkRcwcfuMOLalziCaf4TIe9UG9nyMJmFRzNGoRK1BU4xxx9G7cfwostciGk+x8MqgySwDXe4tU53hVV+MNtTmAoX84JGv9NYgrHyR6DV8wUSW7hItZLm36ZVoVQxsFJLOMsPOrH/h7dQwR2cdxOTEn8DtUbPGc4V2H7Vb4Yqfedf/GYSGt8VUmxgyfuBAAAAABJRU5ErkJggg==";
+      const closeBtn = viewer.jsObject.SmallButton("closeBtn", "关闭", "myClose.png");
+      // 增加打印弹窗配置
+      const printBtn = viewer.jsObject.SmallButton("printBtn", "打印报表", "myClose.png");
+      // console.log(viewer.jsObject.print(),'1013')
+      // 获取 关闭按钮的dom元素位置
+      const toolbarTable = viewer.jsObject.controls.toolbar.firstChild.firstChild;
+      const buttonsTable = toolbarTable.rows[0].lastChild.lastChild;
+      const userButtonCell = buttonsTable.rows[0].insertCell(0);
+      // 获取打印按钮的位置
+      const buttonsTablePrint = toolbarTable.rows[0].childNodes[0].lastChild; // 打印按钮
+      const userButtonPrint = buttonsTablePrint.rows[0].childNodes[0]; // 打印按钮dom位置
+
+      userButtonPrint.addEventListener("click", event => {
+        console.log("打印点击");
+        // event.preventDefault()
+      });
+      userButtonPrint.addEventListener("mouseover", event => {
+        console.log("移入打印按钮");
+        console.log(event, 1035);
+      });
+
+      userButtonCell.className = "stiJsViewerClearAllStyles";
+      userButtonCell.appendChild(closeBtn); // 添加关闭节点
+
+      // userButtonPrint.prepend(printBtn) // 在 printBtn 节点里最前面增加一个子级节点
+
+      let that = this;
+      // 关闭按钮的监听点击
+      closeBtn.action = function() {
+        console.log(that.$refs.reportContainer, "1022");
+        if (that.$refs.reportContainer) that.$refs.reportContainer.hideContainer();
+      };
+    },
+
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}, type) {
+      this.loading = true;
+      params.businessType = this.businessValue;
+      params.classifyCode = this.classifyCode;
+      params.groupCode = this.groupCode;
+      getList(page.currentPage, page.pageSize, Object.assign(params, this.query))
+        .then(res => {
+          if (type) {
+            if (res.data.data.records.length == 1) {
+              this.rowCell(res.data.data.records[0].url, res.data.data.records[0]);
+            } else {
+              //报表没数据或者有多个数据时弹窗
+              this.previewDialog = true;
+            }
+          }
+          this.page.total = res.data.data.total;
+          this.data = res.data.data.records;
+          this.selectionClear();
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    // 更改表格颜色
+    headerClassName(tab) {
+      //颜色间隔
+      let back = "";
+      if (tab.columnIndex >= 0 && tab.column.level === 1) {
+        if (tab.columnIndex % 2 === 0) {
+          back = "back-one";
+        } else if (tab.columnIndex % 2 === 1) {
+          back = "back-two";
+        }
+      }
+      return back;
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+::v-deep#out-table .back-one {
+  background: #ecf5ff !important;
+}
+
+::v-deep#out-table .back-two {
+  background: #ecf5ff !important;
+}
+
+::v-deep .el-input-group__append {
+  padding: 0 0px !important;
+}
+
+/deep/ .el-tree-node__content > .el-tree-node__expand-icon {
+  visibility: hidden;
+}
+
+/deep/ .el-col-md-8 {
+  width: 24.33333%;
+}
+</style>

+ 208 - 0
src/views/iosBasicData/boxDynamic/index.vue

@@ -0,0 +1,208 @@
+<template>
+  <div class="pageBack">
+    <div class="gradient-background">
+      <el-form ref="query" :model="query" label-width="90px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="Release Ref">
+              <el-input class="rounded-input" v-model="query.containerNumber" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="Container">
+              <el-input class="rounded-input" v-model="query.code" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <div style="display: flex;justify-content: flex-end;">
+              <el-button type="primary" round @click="search">Search</el-button>
+              <el-button type="success" round @click="openReport">Download</el-button>
+            </div>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <div style="padding: 20px;">
+      <el-form ref="form" :model="form" label-width="90px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="Type/Quantity">
+              <el-input class="rounded-input" v-model="form.boxTypeQuantityOne" readonly></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="4">
+            <el-form-item label="Picked-up">
+              <el-input class="rounded-input" v-model="form.suitcaseNum" readonly></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="4">
+            <el-form-item label="Await">
+              <el-input class="rounded-input" v-model="form.notSuitcaseNum" readonly></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="Condition">
+              <el-input class="rounded-input" v-model="form.boxCondition" readonly></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="POL">
+              <el-input class="rounded-input" v-model="form.polCname" readonly></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="POD">
+              <el-input class="rounded-input" v-model="form.podCname" readonly></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <div style="padding:0 20px 20px 20px;">
+      <avue-crud class="diy_table" :option="option" :data="form.tradingBoxItemsList"> </avue-crud>
+    </div>
+    <report ref="report" :id="form.id" businessValue="经销商" classifyCode="销售预测" ></report>
+  </div>
+</template>
+
+<script>
+import { containerDynamicInquiry } from "@/api/iosBasicData/boxDynamic.js";
+import report from "./components/report.vue";
+export default {
+  name: "箱动态查询",
+  components: { report },
+  data() {
+    return {
+      query: {},
+      form: {
+        tradingBoxItemsList: []
+      },
+      option: {
+        header: false,
+        menu: false,
+        align: "center",
+        headerAlign: "center",
+        border: true,
+        index: true,
+        indexLabel: "Serial",
+        indexWidth: 60,
+        stripe: true,
+        emptyText: "No Data",
+        maxHeight: 600,
+        column: [
+          {
+            label: "Container",
+            prop: "code",
+            overHidden: true
+          },
+          {
+            label: "Type",
+            prop: "boxType",
+            overHidden: true
+          },
+          {
+            label: "POL Depot",
+            prop: "polCyCname",
+            overHidden: true
+          },
+          {
+            label: "Gate Out",
+            prop: "polPreAppearanceDate",
+            overHidden: true
+          },
+          {
+            label: "ETD",
+            prop: "etd",
+            overHidden: true
+          },
+          {
+            label: "ATD",
+            prop: "actualEtd",
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            overHidden: true
+          },
+          {
+            label: "ETA",
+            prop: "eta",
+            overHidden: true
+          },
+          {
+            label: "ATA",
+            prop: "actualEta",
+            overHidden: true
+          },
+          {
+            label: "Gatein",
+            prop: "podEmptyContainerReturnDate",
+            overHidden: true
+          },
+          {
+            label: "POD Depot",
+            prop: "podStationCname",
+            overHidden: true
+          },
+          {
+            label: "Days In Use",
+            prop: "podBoxUseDays",
+            overHidden: true
+          }
+        ]
+      }
+    };
+  },
+
+  created() {},
+  methods: {
+    openReport(){
+      this.$refs.report.openDialog()
+    },
+    search() {
+      if (!this.query.containerNumber) {
+        return this.$message.error("Please enter Release Ref!");
+      }
+      const loading = this.$loading({
+        lock: true,
+        text: "loading",
+        spinner: "el-icon-loading",
+        background: "rgba(255,255,255,0.7)"
+      });
+      containerDynamicInquiry(this.query)
+        .then(res => {
+          this.form = res.data.data;
+        })
+        .finally(() => {
+          loading.close();
+        });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.pageBack {
+  background-color: #ffffff;
+  width: 100%;
+  height: 100%; 
+}
+.gradient-background {
+  /* 背景渐变效果,从右上角到左下角 */
+  background: linear-gradient(to bottom left, #a1d1fe, #ffffff);
+  padding: 42px 20px 20px 20px;
+}
+.rounded-input ::v-deep .el-input__inner {
+  border-radius: 20px !important; /* 使用 !important 确保覆盖默认样式 */
+}
+.el-form ::v-deep .el-form-item__label {
+  font-weight: 700;
+  font-size: 20px;
+  color: #606266;
+}
+.avue-crud ::v-deep .el-table th {
+  color: #ffffff;
+  background-color: #001e63;
+}
+</style>

+ 53 - 30
src/views/ow/owTask/detailsPage.vue

@@ -166,21 +166,31 @@
                 ></dic-select>
               </tempalte>
               <tempalte slot="polStationCname">
-                <dic-select
-                  v-model="form.polStationCname"
-                  placeholder="场站"
-                  :key="updateFormKey"
-                  label="cnName"
-                  res="records"
-                  :slotRight="true"
-                  rightLabel="code"
-                  :url="'/blade-los/bcorps/selectList?current=1&size=5&corpTypeName=场站&status=0&ids=' + (form.cyText ? form.cyText : '')"
-                  :filterable="true"
-                  :remote="true"
-                  dataName="cnName"
-                  @selectChange="dicChange('polStationCname', $event)"
-                  :disabled="editDisabled || !form.polCname || (fixData && form.whetherEnable == '是')"
-                ></dic-select>
+                <div style="display: flex;">
+                  <dic-select
+                    v-model="form.polStationCname"
+                    placeholder="场站"
+                    :key="updateFormKey"
+                    label="cnName"
+                    res="records"
+                    :slotRight="true"
+                    rightLabel="code"
+                    :url="'/blade-los/bcorps/selectList?current=1&size=5&corpTypeName=场站&status=0&ids=' + (form.cyText ? form.cyText : '')"
+                    :filterable="true"
+                    :remote="true"
+                    dataName="cnName"
+                    @selectChange="dicChange('polStationCname', $event)"
+                    :disabled="editDisabled || !form.polCname || (fixData && form.whetherEnable == '是')"
+                  ></dic-select>
+                  <el-tooltip class="item" effect="dark" content="同步起运港场站" placement="top">
+                    <el-button
+                      size="small"
+                      icon="el-icon-refresh"
+                      :disabled="editDisabled || !form.polCname || (fixData && form.whetherEnable == '是')"
+                      @click="polRefresh"
+                    ></el-button>
+                  </el-tooltip>
+                </div>
               </tempalte>
               <tempalte slot="polCyContact">
                 <dic-select
@@ -1104,21 +1114,26 @@
             ></dic-select>
           </tempalte>
           <tempalte slot="polStationCname">
-            <dic-select
-              v-model="activationForm.polStationCname"
-              placeholder="场站"
-              :key="updateStationKey"
-              label="cnName"
-              res="records"
-              :slotRight="true"
-              rightLabel="code"
-              :url="'/blade-los/bcorps/selectList?current=1&size=5&corpTypeName=场站&status=0&ids=' + (form.cyTextOne ? form.cyTextOne : '')"
-              :filterable="true"
-              :remote="true"
-              dataName="cnName"
-              @selectChange="dicChange('polStationCname2', $event)"
-              :disabled="editDisabled || !activationForm.polCname"
-            ></dic-select>
+            <div style="display: flex;">
+              <dic-select
+                v-model="activationForm.polStationCname"
+                placeholder="场站"
+                :key="updateStationKey"
+                label="cnName"
+                res="records"
+                :slotRight="true"
+                rightLabel="code"
+                :url="'/blade-los/bcorps/selectList?current=1&size=5&corpTypeName=场站&status=0&ids=' + (form.cyTextOne ? form.cyTextOne : '')"
+                :filterable="true"
+                :remote="true"
+                dataName="cnName"
+                @selectChange="dicChange('polStationCname2', $event)"
+                :disabled="editDisabled || !activationForm.polCname"
+              ></dic-select>
+              <el-tooltip class="item" effect="dark" content="同步起运港场站" placement="top">
+                <el-button size="small" icon="el-icon-refresh"></el-button>
+              </el-tooltip>
+            </div>
           </tempalte>
           <tempalte slot="podCname">
             <dic-select
@@ -1302,6 +1317,8 @@ import {
   finstlbillsGetAccBillIdList,
   fininvoicesGetAccBillIdList
 } from "@/api/boxManagement/buyContainer";
+
+import { bportsDetail } from "@/api/iosBasicData/bports";
 import { getList as getOwList } from "@/api/boxManagement/buyContainer/index.js";
 import dicSelect from "@/components/dicSelect/main";
 import checkSchedule from "@/components/checkH/checkSchedule.vue";
@@ -3668,6 +3685,12 @@ export default {
     handleGet() {
       window.open(`/api/blade-los/baccelements/exportBAccElements/template?${this.website.tokenHeader}=${getToken()}`);
     },
+    polRefresh() {
+      bportsDetail(this.form.polId).then(res => {
+        this.form.cyText = res.data.data.addressId;
+        this.updateFormKey = new Date().getTime();
+      });
+    },
     dicChange(name, row) {
       if (name == "purchaseCompanyName") {
         if (row) {