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

feat: 销售订单切换tab栏保持页码和筛选条件不变

liujt 1 неделя назад
Родитель
Сommit
2bb000e3db

+ 7 - 1
src/views/saleManage/saleOrder/accountstatement/index.vue

@@ -400,7 +400,13 @@
       }
     },
 
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
         if (this.contactData.id) {

+ 6 - 0
src/views/saleManage/saleOrder/adjustmentNote‌/index.vue

@@ -366,6 +366,12 @@
       this.requestDict('冲差方式');
       this.requestDict('冲差类型');
     },
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
     computed: {
       ...mapGetters(['dict','getDictValue']),
       getDict() {

+ 7 - 1
src/views/saleManage/saleOrder/customerReturnOrder/index.vue

@@ -347,7 +347,13 @@
     },
     computed: {},
 
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
         return saleReturnPageList({

+ 7 - 1
src/views/saleManage/saleOrder/entrustedReceive/index.vue

@@ -354,7 +354,13 @@
         deep: true
       }
     },
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
         if (this.saleOrderData.id) {

+ 7 - 1
src/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue

@@ -305,7 +305,13 @@
       // });
     },
     filters: {},
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       //处置
       dispose(type, row) {
         this.$refs.disposeRef.open(type, row);

+ 36 - 42
src/views/saleManage/saleOrder/index.vue

@@ -24,7 +24,7 @@
         </div>
       </div>
       <div class="main" style="padding: 0 10px">
-        <div v-if="activeComp == 'saleorder'">
+        <div v-show="activeComp == 'saleorder'">
           <div class="ele-border-lighter form-content" v-loading="loading">
             <search-table @search="reload"></search-table>
             <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
@@ -290,48 +290,13 @@
             </div>
           </div>
         </div>
-        <div v-if="activeComp == 'invoice'">
-          <invoice @getToDoReminder="getToDoReminder"></invoice>
-        </div>
-        <div v-if="activeComp == 'invoiceConfirm'">
-          <invoice-confirm @getToDoReminder="getToDoReminder"></invoice-confirm>
-        </div>
-        <div v-if="activeComp == 'entrustedReceive'">
-          <entrustedReceive
-            @getToDoReminder="getToDoReminder"
-          ></entrustedReceive>
-        </div>
-        <div v-if="activeComp == 'returnorder'" class="returnorder">
-          <return-goods @getToDoReminder="getToDoReminder"></return-goods>
-        </div>
-        <div v-if="activeComp == 'accountstatement'">
-          <accountstatement
-            @getToDoReminder="getToDoReminder"
-          ></accountstatement>
-        </div>
-        <div v-if="activeComp == 'customerReturnOrder'">
-          <customerReturnOrder
-            @getToDoReminder="getToDoReminder"
-          ></customerReturnOrder>
-        </div>
-        <div v-if="activeComp == 'exceptionList'">
-          <exceptionList @getToDoReminder="getToDoReminder"></exceptionList>
-        </div>
-        <div v-if="activeComp == 'trayList'">
-          <palletManagement
-            @getToDoReminder="getToDoReminder"
-          ></palletManagement>
-        </div>
-        <div v-if="activeComp == 'adjustmentNote'">
-          <adjustmentNote
+        <keep-alive>
+          <component
+            v-if="currentTabComponent"
+            :is="currentTabComponent"
             @getToDoReminder="getToDoReminder"
-          ></adjustmentNote>
-        </div>
-        <div v-if="activeComp == 'suspend'">
-          <suspend
-            @getToDoReminder="getToDoReminder"
-          ></suspend>
-        </div>
+          ></component>
+        </keep-alive>
       </div>
     </el-card>
 
@@ -633,6 +598,22 @@ export default {
     clearInterval(this.timeR);
   },
   computed: {
+    // 根据当前页签返回对应的子组件(用于 keep-alive + 单一动态组件,避免多 v-if 兄弟节点导致缓存错乱)
+    currentTabComponent() {
+      const map = {
+        invoice: invoice,
+        invoiceConfirm: invoiceConfirm,
+        entrustedReceive: entrustedReceive,
+        returnorder: returnGoods,
+        accountstatement: accountstatement,
+        customerReturnOrder: customerReturnOrder,
+        exceptionList: exceptionList,
+        trayList: palletManagement,
+        adjustmentNote: adjustmentNote,
+        suspend: suspend
+      };
+      return map[this.activeComp] || null;
+    },
     exportParams() {
       return {
         ...this.params,
@@ -987,6 +968,19 @@ export default {
       ];
     }
   },
+  watch: {
+    // 切回销售订单主列表时,保持搜索条件与页码不变,仅刷新列表数据
+    activeComp(val) {
+      if (val === 'saleorder') {
+        this.$nextTick(() => {
+          if (this.$refs.table) {
+            this.$refs.table.reload();
+            if (this.$refs.table.doLayout) this.$refs.table.doLayout();
+          }
+        });
+      }
+    }
+  },
   methods: {
     getSummaries(param) {
         return getSummaries(

+ 7 - 1
src/views/saleManage/saleOrder/invoice/index.vue

@@ -613,7 +613,13 @@
         deep: true
       }
     },
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       getSummaries(param) {
         return getSummaries(
           param,

+ 7 - 1
src/views/saleManage/saleOrder/invoiceConfirm/index.vue

@@ -350,7 +350,13 @@
       }
     },
 
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
         if (this.saleOrderData.id) {

+ 7 - 1
src/views/saleManage/saleOrder/palletManagement/index.vue

@@ -154,7 +154,13 @@
     },
     computed: {},
 
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
         return getTableList({

+ 7 - 1
src/views/saleManage/saleOrder/returnGoods/index.vue

@@ -432,7 +432,13 @@
         }
       });
     },
-    methods: {
+    activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
+  methods: {
       handlePrint() {
         if (this.selection.length > 1) return this.$message.warning('请选择一条');
         this.$refs.printTemplateHtRef.open(this.selection[0].id);

+ 6 - 0
src/views/saleManage/saleOrder/suspend/index.vue

@@ -749,6 +749,12 @@ export default {
       ];
     }
   },
+  activated() {
+    // 由 keep-alive 切回时刷新列表,但保留搜索条件与当前页码
+    if (this.$refs.table) {
+      this.$refs.table.reload();
+    }
+  },
   methods: {
     async getInfo() {
       try {