Selaa lähdekoodia

尾递归优化

tongshangming 2 vuotta sitten
vanhempi
commit
868e2ba468
2 muutettua tiedostoa jossa 16 lisäystä ja 7 poistoa
  1. 7 4
      src/components/core/form/BasicForm.vue
  2. 9 3
      src/utils/utils.ts

+ 7 - 4
src/components/core/form/BasicForm.vue

@@ -28,7 +28,10 @@ const uploadValueChange = (formItems: Array<BasicFormItem>) => {
         props.formData[item.name] = []
       }
     }
-    item.children && uploadValueChange(item.children)
+    // 尾递归
+    if (item.children) {
+      uploadValueChange(item.children)
+    }
   })
 }
 
@@ -42,7 +45,6 @@ const formData = computed(() => {
     const res = props.formData
     const buildFormData = (formItems: Array<BasicFormItem>, res: any) => {
       formItems.forEach(item => {
-        console.log(item.type)
         if (!item.notFormItem || !notFormItem.includes(item.type)) {
           // 将上传的值改成数组
           if (['upload', 'image-upload'].includes(item.type) && !Array.isArray(item.value)) {
@@ -52,7 +54,6 @@ const formData = computed(() => {
                 .filter((item: string) => item)
                 .map((item: string) => ({ url: item })) || []
           } else if (item.type === 'file-upload' && typeof item.value === 'string') {
-            console.log('file:', item)
             try {
               item.value = JSON.parse(item.value || '[]').map((item: any) => ({
                 url: item.url,
@@ -65,7 +66,9 @@ const formData = computed(() => {
           // 避免修改当前表单项value重置其他表单项的value
           res[item.name] = res[item.name] !== undefined && item.value !== undefined ? res[item.name] : item.value
         }
-        item.children && buildFormData(item.children, res)
+        if (item.children) {
+          buildFormData(item.children, res)
+        }
       })
     }
     buildFormData(props.formConfig.formItems, res)

+ 9 - 3
src/utils/utils.ts

@@ -83,7 +83,9 @@ export const placeholder = (item: BasicFormItem) => {
 export const buildFormSlots = (formItems: Array<BasicFormItem>, formSlots: Array<FormSlot>) => {
   formItems.forEach((formItem: BasicFormItem) => {
     formItem.slots && Array.prototype.push.apply(formSlots, formItem.slots)
-    formItem.children && buildFormSlots(formItem.children, formSlots)
+    if (formItem.children) {
+      buildFormSlots(formItem.children, formSlots)
+    }
   })
 }
 
@@ -92,13 +94,17 @@ export const buildContainerSlots = (formItems: Array<BasicFormItem>) => {
   const recursionSlots = (formItems: Array<BasicFormItem>, formSlots: Array<FormSlot>) => {
     formItems.forEach((formItem: BasicFormItem) => {
       formItem.slots && Array.prototype.push.apply(formSlots, formItem.slots)
-      formItem.children && recursionSlots(formItem.children, formSlots)
+      if (formItem.children) {
+        recursionSlots(formItem.children, formSlots)
+      }
     })
   }
   formItems.forEach((formItem: BasicFormItem) => {
     if (containerTypes.includes(formItem.type)) {
       formItem.slots = formItem.slots || []
-      formItem.children && recursionSlots(formItem.children, formItem.slots)
+      if (formItem.children) {
+        recursionSlots(formItem.children, formItem.slots)
+      }
     }
   })
 }