Przeglądaj źródła

fix(create-order): 修复上传发票内容模块的表单重置问题

- 在 uploadInvoiceContent 组件中添加 $nextTick 回调,确保发票信息正确显示
- 优化 uploadInvoiceContent 组件的 resetForm 方法,重置表单数据
- 在 uploadInvoiceModule 组件中调整 uploadCancel 方法的执行顺序
- 在 ServiceList 组件中添加空数组判断和错误日志,提高代码健壮性

Signed-off-by: tangshizhe <48740614+tangshizhe@users.noreply.github.com>
tangshizhe 2 miesięcy temu
rodzic
commit
f2393ec838

+ 9 - 0
src/views/create-order/components/order-detail-submodule/OrderDetailCardProductList.vue

@@ -378,12 +378,18 @@ export default {
               // 不同的值组成的数组
               differentValues = serviceIds.filter(value => !supServiceIds.includes(value));
               const differentValuesArr = differentValues.map(id => parseInt(id));
+              if(differentValuesArr.length === 0) {
+                console.warn('differentValuesArr为空')
+              }
               const baseServiceIdsArr = serviceListRef.calcAlreadyBuyServiceNamesArr(differentValuesArr);
               const baseServiceData = Array.isArray(baseServiceIdsArr)? baseServiceIdsArr.join('、') : ''
               // 补充服务
               // 相同的值组成的数组
               sameValues = supServiceIds.filter(value => serviceIds.includes(value));
               const supServiceIdsArr = sameValues.map(id => parseInt(id));
+              if(supServiceIdsArr.length === 0) {
+                console.warn('supServiceIdsArr为空') 
+              }
               const resSupServiceIdsArr = serviceListRef.calcAlreadyBuyServiceNamesArr(supServiceIdsArr);
               // 如果resSupServiceData中包含基础服务+企业管理,需要去掉, buy_subject为1时,去掉企业管理
               const baseServiceIndex = resSupServiceIdsArr.findIndex(item =>
@@ -400,6 +406,9 @@ export default {
               const serviceStr = `${supplement};【原已购服务】:${baseServiceData}`
               resolve(serviceStr);
             } else {
+              if(numericServiceIds.length === 0) {
+                console.warn('numericServiceIds为空')
+              }
               const res = serviceListRef.calcAlreadyBuyServiceNamesArr(numericServiceIds);
               const serviceData = Array.isArray(res) ? res.join('、') : '';
               resolve(serviceData);

+ 23 - 4
src/views/create-order/components/product-info-submodule/ServiceList.vue

@@ -522,7 +522,12 @@ export default {
         selectedNoDisabledList: [], // 不包含disabled的被选中子项
         selectedDisabledList: [], // 仅包含被禁用且未被选中的子项
       }
+      if (!Array.isArray(serviceList) || serviceList.length === 0) {
+        console.warn('serviceList is empty or invalid');
+        return map;
+      }
       serviceList.forEach(service => {
+        if(!Array.isArray(service.children)) return;
         service.children.forEach(serve => {
           if (serve.checked) {
             // 被选中
@@ -539,16 +544,30 @@ export default {
       return map
     },
     calcAlreadyBuyServiceNamesArr(ids = []) {
-      if (ids.length <= 0) return []
+      if (ids.length <= 0) {
+        console.warn('IDs are empty');
+        return [];
+      }
       const shadowServiceList = cloneDeep(this.serviceList)
+      if (!shadowServiceList || shadowServiceList.length === 0) {
+        console.error('Shadow service list is empty or invalid');
+        return [];
+      }
       this.setState(ids, shadowServiceList)
       const { selectedInfoList } = this.getSelected(shadowServiceList)
       const { nameArr } = this.calcSelectedArrIdNames(selectedInfoList)
+      if (nameArr.length === 0) {
+        console.warn('No names were generated from the given IDs', ids, selectedInfoList);
+      }
       return nameArr
     },
     // 计算选中列表的id数组(用来传参)和name数组(用来展示)
     calcSelectedArrIdNames(selectedInfoList) {
       const selectedInfoArr = []
+      if (!Array.isArray(selectedInfoList) || selectedInfoList.length === 0) {
+        console.warn('No selected info list provided');
+        return { idArr: [], nameArr: [] };
+      }
       // 默认选中 [1,3]
       selectedInfoList.forEach(s => {
         const selectedId = s.selected
@@ -654,19 +673,19 @@ export default {
     },
     setState(selectedIds = this.defaultSelectedIds, serviceList = this.serviceList) {
       const target = selectedIds
-      if (!Array.isArray(target)) return
+      if (!Array.isArray(target) || target.length === 0) return
       serviceList.forEach(service => {
         const childrenValue = []
         service.children.forEach(serve => {
           // 倒着找,同时有2种options中的权限时候,优先选中(展示)比较大的那个
-          const t = serve.options.findLast(item => target.includes(item.id))
+          const t = serve.options?.findLast(item => target.includes(item.id))
           if (t) {
             childrenValue.push(serve.value)
             serve.checked = true
             serve.selected = t.value
           } else {
             // 自定义备选项找不到,找原始list列表。因为有可能是套餐特有的id需要选中回显
-            const t2 = serve.list.findLast(item => target.includes(item.id))
+            const t2 = serve.list?.findLast(item => target.includes(item.id))
             if (t2) {
               childrenValue.push(serve.value)
               serve.checked = true

+ 28 - 1
src/views/create-order/components/uploadInvoiceContent.vue

@@ -304,6 +304,9 @@ export default {
   },
   mounted() {
     console.log(this.invoiceInfo, 'invoiceInfo')
+    this.$nextTick(() => {
+      this.$refs.uploadRef2.payHtml = this.ruleForm.addressUrl
+    })
   },
   methods: {
     // 回显数据
@@ -350,6 +353,7 @@ export default {
         phone: phone,
         email: mail
       }
+
     },
     invoiceFile(val) {
       this.ruleForm.addressUrl = val
@@ -473,7 +477,30 @@ export default {
       this.$emit('update', false)
     },
     resetForm(formName) {
-      this.$refs[formName].resetFields();
+      this.ruleForm = {
+        addressUrl: '',
+        fileUrl: '',
+        invoice_number: '',
+        billing_time: '',
+        allMoney: '',
+        money: '',
+        signing_subject: '',
+        invoice_variety: '1',
+        invoice_content: '',
+        invoiceHeader: '2',
+        company: '',
+        taxpayer_identnum: '',
+        unitAddress: '',
+        tel: '',
+        bank: '',
+        bankCode: '',
+        desc: '',
+        phone: '',
+        email: '',
+      }
+      setTimeout(() => {
+        this.$refs[formName].clearValidate();
+      }, 100)
     }
   },
 }

+ 1 - 1
src/views/create-order/components/uploadInvoiceModule.vue

@@ -41,8 +41,8 @@ export default {
       this.$refs.uploadInvoiceContentRef.submitForm('ruleForm')
     },
     uploadCancel() {
+      this.$refs.uploadInvoiceContentRef.resetForm('ruleForm')
       this.uploadDialogVisible = false;
-      this.$refs.uploadInvoiceContentRef.resetForm('ruleForm') 
     },
     updateStatus(status) {
       this.uploadDialogVisible = status;