Просмотр исходного кода

1.发票申请 销项发票发票抬头人联动改为结算单位
2.海运出口 单证中心 保存报表时 调用自动生成改单费 并刷新详情
3.放箱号 批量删除和新增 系统自动生成的不让点
4.海运出口 新增收发通人检索条件
5.海运出口 费用 撤销审核 ATD+2 小于当前日期就不允许点
6.海运出口 费用审核通过 主表ATD+2小于当前日期就不允许编辑
7.海运出口 查看放箱号 修改的箱量小于上一次箱量时 修改后弹出配箱信息
8.OW拿 OW放新加上下票功能

Qukatie 3 недель назад
Родитель
Сommit
a9468a2cfa

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

@@ -224,6 +224,14 @@ export const reportslogSubmit = (row) => {
     data: row
   })
 }
+// 单证 自动生成应收客户
+export const generateAmendmentFee = (row) => {
+  return request({
+    url: '/api/blade-los/bills/generateAmendmentFee',
+    method: 'get',
+    params: row
+  })
+}
 // 单证中心 删除
 export const reportslogRemove = (ids) => {
   return request({

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

@@ -4484,6 +4484,20 @@ export default [{
   }]
 },
 {
+  path: '/ow/owNotification/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/ow/owNotification/index',
+    name: '消息提醒',
+    meta: {
+      i18n: '/ow/owNotification/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/ow/owNotification/index')
+  }]
+},
+{
   path: '/iosBasicData/ImportExchange/index',
   component: Layout,
   hidden: true,

+ 2 - 2
src/views/boxManagement/containerNumber/detailsPage.vue

@@ -286,7 +286,7 @@
           <template slot="menuLeft">
             <el-button type="info" plain size="small" :disabled="editDisabled || searchStatus" @click="allClick('一键保存')">一键保存</el-button>
             <el-button type="info" plain size="small" :disabled="editDisabled || searchStatus" @click="allClick('一键编辑')">一键编辑</el-button>
-            <el-button type="danger" plain size="small" :disabled="editDisabled || selectionList.length == 0" @click="allClick('批量删除')"
+            <el-button type="danger" plain size="small" :disabled="editDisabled || selectionList.length == 0||form.whetherManuallyCreate==1" @click="allClick('批量删除')"
               >批量删除</el-button
             >
             <el-button type="success" size="small" :disabled="!form.id" @click="allClick('导出')">导出</el-button>
@@ -301,7 +301,7 @@
                 </el-button> -->
           </template>
           <template slot="indexHeader" slot-scope="{ row, index }">
-            <el-button type="primary" size="mini" icon="el-icon-plus" :disabled="editDisabled || searchStatus" circle @click="addRow()"> </el-button>
+            <el-button type="primary" size="mini" icon="el-icon-plus" :disabled="editDisabled || searchStatus||form.whetherManuallyCreate==1" circle @click="addRow()"> </el-button>
           </template>
           <template slot="index" slot-scope="{ row, index }">
             <span>{{ index + 1 }}</span>

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

@@ -1034,16 +1034,6 @@ export default {
             prop: "receivingAndShipping",
             width: "120",
             overHidden: true,
-            // type: "select",
-            // filterable: true,
-            // remote: true,
-            // dicUrl:
-            //     "/api/blade-los/bcorps/listByType?cnName={{key}}",
-            // props: {
-            //     label: "cnName",
-            //     value: "cnName",
-            //     res: "data.records"
-            // },
             search: true,
             span: 6,
             searchOrder: 18

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

@@ -196,7 +196,7 @@
 
 <script>
 import { getList as reportsList, reportsGetReportData, reportsDetail, reportsRemove, getList } from "@/api/iosBasicData/reports";
-import { reportslogList, reportslogSubmit } from "@/api/iosBasicData/bills";
+import { reportslogList, reportslogSubmit,generateAmendmentFee} from "@/api/iosBasicData/bills";
 import { bbusinesstypeList } from "@/api/iosBasicData/bbusinesstype";
 import bbusinesstype from "@/views/iosBasicData/bbusinesstype/index.vue";
 import reportformsList from "@/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsList.vue";
@@ -416,7 +416,7 @@ export default {
       addShow: false,
       mttachedGoodsdesc: 15,
       mttachedMark: 15,
-      mttachedCntry: 3
+      mttachedCntry: 3,
     };
   },
   props: {
@@ -456,7 +456,6 @@ export default {
         this.mttachedCntry = res.data.data;
       }
     });
-
     // this.reportsListfun()
   },
   methods: {
@@ -753,6 +752,9 @@ export default {
           });
         } else {
           this.$message.success("操作成功");
+          generateAmendmentFee({id:this.assemblyForm.id}).then(res=>{
+            this.$emit("billsDetailfun");
+          })
           this.reportslogListfun(this.documentPage, { ...this.query, reportsCode: res.data.data.reportsCode });
           // this.editData = {};
           this.documentForm = JSON.parse(res.data.data.printContent).data;

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

@@ -801,7 +801,7 @@
                   clearable
                   type="date"
                   size="small"
-                  :disabled="detailData.seeDisabled || (assemblyForm.billType == 'MH' && assemblyForm.masterBillNo > 0)"
+                  :disabled="detailData.seeDisabled || (assemblyForm.billType == 'MH' && assemblyForm.masterBillNo > 0)||isATD"
                   value-format="yyyy-MM-dd"
                   placeholder="选择日期"
                   @change="atdChange"
@@ -3424,6 +3424,20 @@ export default {
         this.dgPackingLevelData = res.data.data;
       });
     }
+  },
+  computed: {
+    //ATD +2是否 大于 当前日期
+    isATD() {
+      const feeList = [...this.assemblyForm.feeCenterListD, ...this.assemblyForm.feeCenterListC];
+      if (feeList.length && feeList.filter(item => item.auditStatus > 3).length) {
+        const atd2day = new Date(this.assemblyForm.actualEtd);
+        atd2day.setDate(atd2day.getDate() + 2);
+        const newDate = new Date(dateFormat(new Date(), "yyyy-MM-dd"));
+        return atd2day < newDate;
+      } else {
+        return false;
+      }
+    }
   }
 };
 </script>

+ 215 - 0
src/views/iosBasicData/SeafreightExportF/bills/assembly/EntrustmentLnformation/components/boxInfo.vue

@@ -0,0 +1,215 @@
+<template>
+  <div>
+    <el-dialog title="配箱信息" :visible.sync="dialogVisible" append-to-body width="60%" :before-close="handleClose">
+      <avue-crud v-if="dialogVisible" :option="option" :data="data" ref="crud" id="out-table" :header-cell-class-name="headerClassName">
+        <template slot-scope="{ row, index }" slot="menu">
+          <el-button v-if="form.billType != 'MM'" type="text" size="small" @click.stop="rowDel(row, index)"
+            >{{ $t("btn118n.deleted") }}
+          </el-button>
+        </template>
+      </avue-crud>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { removeById } from "@/api/iosBasicData/containers";
+export default {
+  props: {},
+  data() {
+    return {
+      quotationObj: null,
+      id: null,
+      data: [],
+      form: {},
+      dialogVisible: false,
+      loading: false,
+      option: {
+        height: 500,
+        calcHeight: 30,
+        menuWidth: 70,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        delBtn: false,
+        editBtn: false,
+        menu: true,
+        header: false,
+        // highlightCurrentRow: true,
+        column: [
+          {
+            label: this.$t("sea118n.ctnrType"),
+            prop: "cntrTypeCode",
+            width: "100"
+          },
+          {
+            label: this.$t("sea118n.ctnrNo"),
+            prop: "cntrNo",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: this.$t("sea118n.sealNo"),
+            prop: "sealNo",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: "HB/L NO",
+            prop: "hblno",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: this.$t("sea118n.quantity"),
+            prop: "quantity",
+            width: "80"
+          },
+          {
+            label: this.$t("sea118n.GW"),
+            prop: "grossWeight",
+            width: "120"
+          },
+          // {
+          //     label: "净重(KGM)",
+          //     prop: "netWeight",
+          //     width: "120",
+          // },
+          {
+            label: this.$t("sea118n.CBM"),
+            prop: "measurement",
+            width: "100"
+          },
+          {
+            label: this.$t("sea118n.ctnrTare"),
+            prop: "tare",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: "VGM(KGM)",
+            prop: "vgmWeight",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: "remarks",
+            prop: "remarks",
+            type: "textarea",
+            width: 180,
+            slot: true,
+            minRows: 3,
+            span: 24
+          },
+          {
+            label: "箱来源类型",
+            prop: "boxSrcType",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: "PODCY",
+            prop: "podStationCname",
+            width: "140"
+          },
+          {
+            label: "POLCY",
+            prop: "polCyCname",
+            width: "140",
+            overHidden: true
+          },
+          {
+            label: "podReturnDate",
+            prop: "podEmptyContainerReturnDate",
+            width: "160",
+            overHidden: true
+          }
+          // {
+          //     label: "MARKS",
+          //     prop: "marks",
+          // },
+        ]
+      }
+    };
+  },
+  async created() {
+    // this.option = await this.getColumnData(this.getColumnName(309.6), this.optionBack);
+  },
+  methods: {
+    openDialog(obj, row) {
+      this.dialogVisible = true;
+      this.form=obj
+      this.data =this.deepClone(obj.containersList);
+    },
+    rowDel(row, index) {
+      this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          removeById(row.id).then(() => {
+            this.data.splice(index, 1);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$emit("getUpdate");
+          });
+        });
+    },
+    //自定义列保存
+    async saveColumn(ref, option, optionBack, code) {
+      /**
+       * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
+       * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
+       * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
+       */
+      const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+        this.searchReset();
+      }
+    },
+    //自定义列重置
+    async resetColumn(ref, option, optionBack, code) {
+      this[option] = this[optionBack];
+      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs[ref].$refs.dialogColumn.columnBox = 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 scoped>
+::v-deep#out-table .back-one {
+  background: #ecf5ff !important;
+  text-align: center;
+  padding: 4px 0;
+}
+
+::v-deep#out-table .back-two {
+  background: #ecf5ff !important;
+  text-align: center;
+  padding: 4px 0;
+}
+</style>

+ 0 - 4
src/views/iosBasicData/SeafreightExportF/bills/assembly/EntrustmentLnformation/components/fixBoxQuantity.vue

@@ -180,10 +180,6 @@ export default {
       this.data = obj.containerNumberItemList.filter(item => row.cntrTypeCode == item.boxType && item.occupyNum > 0);
     },
     submit() {
-      // if (!this.quotationObj) {
-      //     return this.$message.error("请选择数据");
-      // }
-      // delete this.quotationObj.id
       let obj = {
         id: this.form.id
       };

+ 10 - 2
src/views/iosBasicData/SeafreightExportF/bills/assembly/EntrustmentLnformation/precontainers.vue

@@ -212,7 +212,8 @@
     <import-temp ref="importTemp" @importData="importTemp"></import-temp>
     <send-edi ref="sendEdi" @importData="sendEdi"></send-edi>
     <fix-boxQuantity ref="fixBoxQuantity" @getUpdate="getUpdate"></fix-boxQuantity>
-  </basic-container>
+    <box-info ref="boxInfo" @getUpdate="getUpdate"></box-info>
+ </basic-container>
 </template>
 
 <script>
@@ -238,9 +239,10 @@ import { Header } from "element-ui";
 import importTemp from "./components/importTemp.vue";
 import sendEdi from "./components/sendEdi.vue";
 import fixBoxQuantity from "./components/fixBoxQuantity.vue";
+import boxInfo from "./components/boxInfo.vue";
 import { isProcurement } from "@/api/basicData/configuration";
 export default {
-  components: { SearchQuery, importTemp, sendEdi, fixBoxQuantity },
+  components: { SearchQuery, importTemp, sendEdi, fixBoxQuantity,boxInfo },
   props: {
     pid: {},
     assemblyForm: {
@@ -264,6 +266,7 @@ export default {
       // 集装箱尺码箱型
       cntrTypeCodeData: [],
       boxForm: {},
+      oldBoxForm:{},
       containerNumberItemList: [],
       optionForm: {
         menuBtn: false,
@@ -746,6 +749,9 @@ export default {
             actualOccupyNumUpdate(obj).then(res => {
               this.$message.success("操作成功!");
               this.dialogVisible = false;
+              if(this.oldBoxForm.quantity>this.boxForm.quantity){
+                this.$refs.boxInfo.openDialog(this.assemblyForm)
+              }
               sessionStorage.setItem("occupyNumUpdate", true);
               this.$emit("billsDetailfun");
             });
@@ -796,10 +802,12 @@ export default {
     },
     rowView(row) {
       this.boxForm = {};
+      this.oldBoxForm={};
       this.containerNumberItemList = [];
       this.editStatus = true;
       this.dialogVisible = true;
       this.boxForm = row;
+      this.oldBoxForm=this.deepClone(row)
       this.containerNumberItemList = this.deepClone(this.assemblyForm.containerNumberItemList.filter(item => row.cntrTypeCode == item.boxType && item.occupyNum > 0));
     },
     handleClose() {

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

@@ -147,7 +147,7 @@
             type="danger"
             plain
             size="small"
-            :disabled="disabled || selectionDList.length == 0 || isFeedDisabled"
+            :disabled="disabled || selectionDList.length == 0 || isFeedDisabled||isATD"
             @click="allClick('D撤销请核')"
             >{{ $t("btn118n.unApplyFee") }}</el-button
           >
@@ -489,7 +489,7 @@
             type="danger"
             plain
             size="small"
-            :disabled="disabled || selectionCList.length == 0 || isFeecDisabled"
+            :disabled="disabled || selectionCList.length == 0 || isFeecDisabled||isATD"
             @click="allClick('C撤销请核')"
             >{{ $t("btn118n.unApplyFee") }}</el-button
           >
@@ -2262,6 +2262,13 @@ export default {
       } else {
         return false;
       }
+    },
+    //ATD +2是否 大于 当前日期
+    isATD(){
+      const atd2day = new Date(this.assemblyForm.actualEtd)
+      atd2day.setDate(atd2day.getDate() + 2)
+      const newDate=new Date(dateFormat(new Date(),"yyyy-MM-dd"))
+      return atd2day<newDate
     }
   },
   async created() {
@@ -4580,7 +4587,7 @@ export default {
       deep: true, // 深度监听
       immediate: true // 第一次改变就执行,
     }
-  }
+  },
 };
 </script>
 

+ 7 - 1
src/views/iosBasicData/SeafreightExportF/bills/billsDetails.vue

@@ -441,7 +441,13 @@
           </feecenter>
         </el-tab-pane>
         <el-tab-pane :label="$t('sea118n.docCenter')" name="dz" class="scrollable-container">
-          <document-center ref="documentCenter" :detailData="detailData" :assemblyForm="form" :disabled="showLock"></document-center>
+          <document-center
+            ref="documentCenter"
+            :detailData="detailData"
+            :assemblyForm="form"
+            :disabled="showLock"
+            @billsDetailfun="billsDetailfun(form.id)"
+          ></document-center>
         </el-tab-pane>
         <el-tab-pane :label="$t('sea118n.hblnolist')" name="fd" v-if="form.billType == 'MM'" class="scrollable-container">
           <Split-list

+ 6 - 0
src/views/iosBasicData/SeafreightExportF/bills/index.vue

@@ -1393,6 +1393,12 @@ export default {
             search: true,
             hide: true
           },
+         {
+            label: this.$t("sea118n.scndesc"),
+            prop: "receivingAndShipping",
+            search: true,
+            hide: true
+          },
           {
             label: this.$t("sea118n.createTime"),
             prop: "createTime",

+ 4 - 4
src/views/iosBasicData/financialManagement/fininvoicesApplyfor/detailsPage.vue

@@ -83,13 +83,13 @@
                   <tempalte slot="invoiceTitle">
                     <dic-select
                       v-model="form.invoiceTitle"
-                      placeholder="开票单位"
-                      :key="form.invCorpId"
+                      placeholder="发票抬头"
+                      :key="form.corpId"
                       res="corpsInvoiceHeaderList"
                       label="invoiceHeader"
-                      :url="'/blade-los/bcorps/detail?id=' + form.invCorpId"
+                      :url="'/blade-los/bcorps/detail?id=' + form.corpId"
                       :filterable="true"
-                      :disabled="editDisabled || (form.finInvoicesItemsList.length && form.isDk == 1) || !form.invCorpId"
+                      :disabled="editDisabled || (form.finInvoicesItemsList.length && form.isDk == 1) || !form.corpId"
                     >
                     </dic-select>
                   </tempalte>

+ 4 - 4
src/views/iosBasicData/financialManagement/fininvoicesOutput/detailsPage.vue

@@ -73,13 +73,13 @@
                    <tempalte slot="invoiceTitle">
                     <dic-select
                       v-model="form.invoiceTitle"
-                      placeholder="开票单位"
-                      :key="form.invCorpId"
+                      placeholder="发票抬头"
+                      :key="form.corpId"
                       res="corpsInvoiceHeaderList"
                       label="invoiceHeader"
-                      :url="'/blade-los/bcorps/detail?id=' + form.invCorpId"
+                      :url="'/blade-los/bcorps/detail?id=' + form.corpId"
                       :filterable="true"
-                      :disabled="editDisabled || (form.finInvoicesItemsList.length && form.isDk == 1) || !form.invCorpId"
+                      :disabled="editDisabled || (form.finInvoicesItemsList.length && form.isDk == 1) || !form.corpId"
                     >
                     </dic-select>
                   </tempalte>

+ 440 - 0
src/views/ow/owNotification/index.vue

@@ -0,0 +1,440 @@
+<template>
+  <div>
+    <basic-container>
+      <avue-crud
+        :option="option"
+        :table-loading="loading"
+        :data="data"
+        :search.sync="query"
+        v-model="form"
+        id="out-table"
+        :header-cell-class-name="headerClassName"
+        ref="crud"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @refresh-change="refreshChange"
+        @resetColumn="resetColumn('crud', 'option', 'optionBack', 529)"
+        @saveColumn="saveColumn('crud', 'option', 'optionBack', 529)"
+        @on-load="onLoad"
+      >
+        <template slot="menuLeft">
+          <el-tabs v-model="query.type" type="card" @tab-click="refreshChange">
+            <el-tab-pane label="提箱提醒" name="2">
+              <span slot="label">
+                <el-badge :value="badgeNum1" class="item" :max="99">
+                  提箱提醒
+                </el-badge>
+              </span>
+            </el-tab-pane>
+            <el-tab-pane label="出运提醒" name="3">
+              <span slot="label">
+                <el-badge :value="badgeNum2" class="item" :max="99">
+                  出运提醒
+                </el-badge>
+              </span>
+            </el-tab-pane>
+            <el-tab-pane label="箱量提醒" name="1">
+              <span slot="label">
+                <el-badge :value="badgeNum3" class="item" :max="99">
+                  箱量提醒
+                </el-badge>
+              </span>
+            </el-tab-pane>
+          </el-tabs>
+          <el-button type="warning" size="small" @click="outExport">导 出 </el-button>
+          <el-tag type="danger" v-if="query.type == 2">OW(拿)启用并且合同生效日期{{ boxUsageReminder }}天后还有未提箱的</el-tag>
+          <el-tag type="danger" v-if="query.type == 3">OW(拿)启用并且合同失效日期前后{{postponementReminder}}天</el-tag>
+        </template>
+        <template slot="suitcaseNum" slot-scope="{ row }">
+          <span v-if="row.suitcaseNum != 0" style="color:#F56C6C;">
+            {{ row.suitcaseNum }}
+          </span>
+          <span v-if="row.suitcaseNum == 0">
+            {{ row.suitcaseNum }}
+          </span>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getListReminder } from "@/api/boxManagement/buyContainer/index.js";
+import { defaultDate2 } from "@/util/date";
+import dicSelect from "@/components/dicSelect/main";
+import { getToken } from "@/util/auth";
+import { dateFormat } from "@/util/date";
+import { isProcurement } from "@/api/basicData/configuration";
+export default {
+  name: "消息提醒",
+  data() {
+    return {
+      boxUsageReminder: 10,
+      postponementReminder:3,
+      badgeNum1: 0,
+      badgeNum2: 0,
+      badgeNum3: 0,
+      roleName: localStorage.getItem("roleName"),
+      form: {},
+      query: {
+        type: "2"
+      },
+      loading: false,
+      selectionList: [],
+      option: {},
+      optionBack: {
+        height: "auto",
+        calcHeight: 30,
+        menuWidth: 140,
+        menu: false,
+        tip: false,
+        searchBtn: false,
+        emptyBtn: false,
+        searchMenuSpan: 24,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        align: "center",
+        column: [
+          // {
+          //   label: "provider",
+          //   prop: "provider",
+          //   overHidden: true,
+          //   hide: false
+          // },
+          {
+            label: "业务类型",
+            prop: "busType",
+            overHidden: true,
+            dicData: [
+              {
+                label: "买箱",
+                value: "BUY"
+              },
+              {
+                label: "卖箱",
+                value: "SELL"
+              },
+              {
+                label: "租入",
+                value: "ZR"
+              },
+              {
+                label: "租出",
+                value: "ZC"
+              },
+              {
+                label: "代理箱",
+                value: "DL"
+              },
+              {
+                label: "OW拿箱",
+                value: "OW-N"
+              },
+              {
+                label: "OW放箱",
+                value: "OW-F"
+              },
+              {
+                label: "箱管费用",
+                value: "XGFY"
+              },
+              {
+                label: "箱管调箱",
+                value: "XGDX"
+              },
+              {
+                label: "出场申请",
+                value: "CCSQ"
+              },
+              {
+                label: "调箱成本",
+                value: "DXCB"
+              }
+            ]
+          },
+          {
+            label: "放箱号",
+            prop: "containerNumber",
+            overHidden: true
+          },
+
+          {
+            label: "箱型",
+            prop: "boxType",
+            overHidden: true
+            // // search: true,
+            // type: "select",
+            // filterable: true,
+            // remote: true,
+            // dicUrl: "/api/blade-los/bcntrtypes/list?status=0&current=1&size=5&cnName={{key}}",
+            // props: {
+            //   label: "cnName",
+            //   value: "cnName",
+            //   desc: 'code',
+            //   res: "data.records"
+            // }
+          },
+          {
+            label: "箱量",
+            prop: "boxNumber",
+            overHidden: true
+          },
+          {
+            label: "已提箱",
+            prop: "suitcaseNum",
+            overHidden: true
+          },
+          {
+            label: "未提箱",
+            prop: "notSuitcaseNum",
+            overHidden: true
+          },
+          {
+            label: "起运港",
+            prop: "polCname",
+            overHidden: true
+          },
+          {
+            label: "起运港场站",
+            prop: "polStationCname",
+            width: 100,
+            overHidden: true
+          },
+          {
+            label: "目的港",
+            prop: "podCname",
+            overHidden: true
+          },
+          {
+            label: "目的港场站",
+            prop: "podStationCname",
+            width: 100,
+            overHidden: true
+          },
+          {
+            label: "有效期起",
+            prop: "effectiveDate",
+            width: "100",
+            overHidden: true,
+            // search: true,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00"
+            // searchValue: dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00",
+          },
+          {
+            label: "有效期止",
+            prop: "expiryDate",
+            width: "100",
+            overHidden: true,
+            // search: true,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 23:59:59"
+          },
+          {
+            label: "启用日期",
+            prop: "activationDate",
+            width: "100",
+            overHidden: true,
+            type: "date",
+            format: "yyyy-MM-dd"
+          },
+          {
+            label: "提单号",
+            prop: "mblno",
+            overHidden: true
+          },
+          {
+            label: "分单号",
+            prop: "hblno",
+            overHidden: true
+          },
+          {
+            label: "ETD",
+            prop: "etd",
+            overHidden: true,
+            type: "date",
+            format: "yyyy-MM-dd"
+          },
+          {
+            label: "ETA",
+            prop: "eta",
+            overHidden: true,
+            type: "date",
+            format: "yyyy-MM-dd"
+          }
+        ]
+      },
+      data: []
+    };
+  },
+  components: {
+    dicSelect
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(529), this.optionBack);
+    isProcurement({ param: "box.usage.reminder" }).then(res => {
+      if (res.data.data) {
+        this.boxUsageReminder = res.data.data;
+      }
+    });
+    isProcurement({ param: "postponement.reminder" }).then(res => {
+      if (res.data.data) {
+        this.postponementReminder = res.data.data;
+      }
+    });
+    // if (this.roleName.includes("箱管")) {
+    //   this.option.column.forEach(item => {
+    //     if (item.prop == "provider") {
+    //       item.hide = true;
+    //     }
+    //   });
+    // }
+    this.$nextTick(() => {
+      this.$refs.crud.doLayout();
+      this.$refs.crud.dicInit();
+    });
+    this.getBadge();
+  },
+  activated() {
+    setTimeout(() => {}, 100);
+  },
+  methods: {
+    searchReset() {
+      this.query = this.$options.data().query;
+      this.onLoad();
+    },
+    // 搜索按钮点击
+    searchChange(params, done) {
+      this.onLoad(this.query);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    refreshChange() {
+      this.onLoad(this.query);
+    },
+    getBadge() {
+      getListReminder({ type: 2 }).then(res => {
+        this.badgeNum1 = res.data.data.length;
+      });
+      getListReminder({ type: 3 }).then(res => {
+        this.badgeNum2 = res.data.data.length;
+      });
+      getListReminder({ type: 1 }).then(res => {
+        this.badgeNum3 = res.data.data.length;
+      });
+    },
+    onLoad(page, params = {}) {
+      let obj = {};
+      obj = {
+        ...Object.assign(params, this.query)
+      };
+      this.loading = true;
+      getListReminder(obj)
+        .then(res => {
+          this.data = res.data.data;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    outExport() {
+      let config = { params: { ...this.query } };
+      if (config.params) {
+        for (const propName of Object.keys(config.params)) {
+          const value = config.params[propName];
+          if (value !== null && typeof value !== "undefined") {
+            if (value instanceof Array) {
+              for (const key of Object.keys(value)) {
+                let params = propName + "[" + key + "]";
+                config.params[params] = value[key];
+              }
+              delete config.params[propName];
+            }
+          }
+        }
+      }
+      const routeData = this.$router.resolve({
+        path: "/api/blade-los/boxReminderStatistics/boxUsageReminderExport", //跳转目标窗口的地址
+        query: {
+          ...config.params, //括号内是要传递给新窗口的参数
+          identification: this.url
+        }
+      });
+      window.open(routeData.href.slice(1, routeData.href.length) + "&" + `${this.website.tokenHeader}=${getToken()}`);
+    },
+    //自定义列保存
+    async saveColumn(ref, option, optionBack, code) {
+      /**
+       * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
+       * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
+       * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
+       */
+      const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //自定义列重置
+    async resetColumn(ref, option, optionBack, code) {
+      this[option] = this[optionBack];
+      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs[ref].$refs.dialogColumn.columnBox = 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;
+  text-align: center;
+}
+
+::v-deep #out-table .back-two {
+  background: #ecf5ff !important;
+  text-align: center;
+}
+
+.pointerClick {
+  cursor: pointer;
+  color: #1e9fff;
+}
+
+::v-deep .el-col-md-8 {
+  width: 24.33333%;
+}
+::v-deep .el-tabs__item {
+  width: 110px !important;
+}
+::v-deep .el-badge__content.is-fixed {
+  top: 10px !important;
+  right: 0px !important;
+}
+</style>

+ 27 - 1
src/views/ow/owPut/detailsPage.vue

@@ -3,6 +3,8 @@
     <div class="customer-head">
       <div class="customer-back">
         <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left" @click="goBack()">返回列表 </el-button>
+        <el-button v-if="form.id && pageIds.length" type="text" @click="lastPage">上一票</el-button>
+        <el-button v-if="form.id && pageIds.length" type="text" @click="nextPage">下一票</el-button>
       </div>
       <div class="add-customer-btn">
         <el-button size="small" style="margin-right: 8px" :disabled="!form.id" @click="$refs.print.openDialog()">预 览 </el-button>
@@ -3070,7 +3072,11 @@ export default {
     containerNumber
   },
   props: {
-    detailData: Object
+    detailData: Object,
+    pageIds: {
+      type: Array, // 指定 prop 的类型为 Array
+      default: () => [] // 提供一个默认值,这里使用函数形式返回一个空数组
+    }
   },
   async created() {
     this.roleName = localStorage.getItem("roleName").split(",");
@@ -3099,6 +3105,26 @@ export default {
     this.saveLocalCurrency(this.deptId);
   },
   methods: {
+    lastPage() {
+      if (this.pageIds.length) {
+        const index = this.pageIds.indexOf(this.form.id);
+        if (index == 0) {
+          return this.$message.error("没有上一票了");
+        }
+        const lastIndex = index - 1;
+        this.getDetails(this.pageIds[lastIndex]);
+      }
+    },
+    nextPage() {
+      if (this.pageIds.length) {
+        const index = this.pageIds.indexOf(this.form.id);
+        if (this.pageIds[this.pageIds.length - 1] == this.form.id) {
+          return this.$message.error("没有下一票了");
+        }
+        const nextIndex = index + 1;
+        this.getDetails(this.pageIds[nextIndex]);
+      }
+    },
     enter() {
       this.showSpan = true;
     },

+ 8 - 1
src/views/ow/owPut/index.vue

@@ -45,7 +45,7 @@
         </template>
       </avue-crud>
     </basic-container>
-    <detailsPage v-if="!isShow" :detailData="detailData" @goBack="goBack"></detailsPage>
+    <detailsPage v-if="!isShow" :detailData="detailData" :pageIds="pageIds" @goBack="goBack"></detailsPage>
   </div>
 </template>
 
@@ -61,6 +61,7 @@ export default {
     return {
       isShow: true,
       form: {},
+      pageIds: [],
       query: {
         type: "OW-F"
       },
@@ -508,6 +509,7 @@ export default {
   },
   methods: {
     addButton() {
+      this.pageIds = [];
       this.isShow = false;
     },
     copyButton() {
@@ -576,6 +578,10 @@ export default {
       });
     },
     rowEdit(row) {
+        this.pageIds = [];
+      this.data.forEach(item => {
+        this.pageIds.push(item.id);
+      });
       this.detailData = {
         id: row.id
       };
@@ -644,6 +650,7 @@ export default {
     },
     // 详情的返回列表
     goBack() {
+      this.pageIds = [];
       // 初始化数据
       if (JSON.stringify(this.$route.query) != "{}") {
         this.$router.$avueRouter.closeTag();

+ 27 - 1
src/views/ow/owTask/detailsPage.vue

@@ -3,6 +3,8 @@
     <div class="customer-head">
       <div class="customer-back">
         <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left" @click="goBack()">返回列表 </el-button>
+        <el-button v-if="form.id && pageIds.length" type="text" @click="lastPage">上一票</el-button>
+        <el-button v-if="form.id && pageIds.length" type="text" @click="nextPage">下一票</el-button>
       </div>
       <div class="add-customer-btn">
         <el-button size="small" style="margin-right: 8px" :disabled="!form.id" @click="$refs.print.openDialog()">预 览 </el-button>
@@ -3414,7 +3416,11 @@ export default {
     feeModifyView
   },
   props: {
-    detailData: Object
+    detailData: Object,
+    pageIds: {
+      type: Array, // 指定 prop 的类型为 Array
+      default: () => [] // 提供一个默认值,这里使用函数形式返回一个空数组
+    }
   },
   async created() {
     this.roleName = localStorage.getItem("roleName").split(",");
@@ -3469,6 +3475,26 @@ export default {
     }
   },
   methods: {
+    lastPage() {
+      if (this.pageIds.length) {
+        const index = this.pageIds.indexOf(this.form.id);
+        if (index == 0) {
+          return this.$message.error("没有上一票了");
+        }
+        const lastIndex = index - 1;
+        this.getDetail(this.pageIds[lastIndex]);
+      }
+    },
+    nextPage() {
+      if (this.pageIds.length) {
+        const index = this.pageIds.indexOf(this.form.id);
+        if (this.pageIds[this.pageIds.length - 1] == this.form.id) {
+          return this.$message.error("没有下一票了");
+        }
+        const nextIndex = index + 1;
+        this.getDetail(this.pageIds[nextIndex]);
+      }
+    },
     enter() {
       this.showSpan = true;
     },

+ 8 - 1
src/views/ow/owTask/index.vue

@@ -53,7 +53,7 @@
         </template>
       </avue-crud>
     </basic-container>
-    <detailsPage v-if="!isShow" :detailData="detailData" @goBack="goBack"></detailsPage>
+    <detailsPage v-if="!isShow" :detailData="detailData" :pageIds="pageIds" @goBack="goBack"></detailsPage>
   </div>
 </template>
 
@@ -68,6 +68,7 @@ export default {
   data() {
     return {
       isShow: true,
+      pageIds: [],
       form: {},
       query: {
         type: "OW-N",
@@ -621,6 +622,7 @@ export default {
   },
   methods: {
     addButton() {
+      this.pageIds = [];
       this.isShow = false;
     },
     copyButton() {
@@ -689,6 +691,10 @@ export default {
       });
     },
     rowEdit(row) {
+         this.pageIds = [];
+      this.data.forEach(item => {
+        this.pageIds.push(item.id);
+      });
       this.detailData = {
         id: row.id
       };
@@ -761,6 +767,7 @@ export default {
     },
     // 详情的返回列表
     goBack() {
+      this.pageIds = [];
       // 初始化数据
       if (JSON.stringify(this.$route.query) != "{}") {
         this.$router.$avueRouter.closeTag();