Преглед на файлове

feat: 优化发票重开逻辑,支持传递拆分初始化数据

xieyong преди 5 дни
родител
ревизия
1464c1f5d1
променени са 2 файла, в които са добавени 18 реда и са изтрити 5 реда
  1. 5 2
      src/views/financialManage/invoiceManage/components/addOrEditDialogNew.vue
  2. 13 3
      src/views/financialManage/invoiceManage/index.vue

+ 5 - 2
src/views/financialManage/invoiceManage/components/addOrEditDialogNew.vue

@@ -760,7 +760,7 @@
     },
     methods: {
       //从发票管理新增发票初始化
-      async init(row = {}, type) {
+      async init(row = {}, type, splitData = null) {
         // 重置冲红标记,避免上次编辑状态污染本次
         this.ifRedReversalInvoice = 0;
         this.businessId = type == 'reissue' ? '' : row.id || '';
@@ -793,7 +793,8 @@
           // 开发票:根据总单ID拉取拆分初始化数据,预填到表单上
           if (type == 'reissue' && row.id) {
             try {
-              const data = await splitInitAPI(row.id);
+              // 优先使用调用方传入的 splitData(handleReissue 已检查过接口),避免重复调用
+              const data = splitData ?? (await splitInitAPI(row.id));
               data.type = Number(data.type);
               Object.keys(data || {}).forEach((k) => {
                 this.$set(this.form, k, data[k]);
@@ -807,6 +808,7 @@
               });
             } catch (e) {
               console.error('splitInit failed:', e);
+              return false;
             }
           }
         } else {
@@ -815,6 +817,7 @@
         this.$nextTick(async () => {
           // await this.getUser List(this.form.applyDeptId);
         });
+        return true;
       },
       updateInvoiceAmount(row) {
         // row.invoiceAmount = Number(row.invoiceAmount).toFixed(2);

+ 13 - 3
src/views/financialManage/invoiceManage/index.vue

@@ -162,7 +162,8 @@
   import {
     invoiceApplyPageListAPI,
     invoiceApplyRemoveAPI,
-    invoiceApplySubmit
+    invoiceApplySubmit,
+    splitInitAPI
   } from '@/api/financialManage/invoiceManage';
   import { reviewStatus, finInvoiceSourceTypeOp } from '@/enum/dict';
   import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
@@ -398,10 +399,19 @@
         });
       },
       //开发票:以当前总单ID拉取拆分初始化数据,复用新增/修改弹框
-      handleReissue(row) {
+      async handleReissue(row) {
+        // 先调 splitInitAPI 检查,成功后才打开弹框,避免打开空弹框
+        let splitData;
+        try {
+          splitData = await splitInitAPI(row.id);
+        } catch (e) {
+          console.error('splitInit failed:', e);
+          return;
+        }
         this.addOrEditDialogNewFlag = true;
         this.$nextTick(() => {
-          this.$refs.addOrEditDialogNewRef.init(row, 'reissue');
+          // 把已拉到的数据传给 init,避免 init 里再调一次接口
+          this.$refs.addOrEditDialogNewRef.init(row, 'reissue', splitData);
         });
       },
       //详情