Эх сурвалжийг харах

处理表单编辑中布局嵌套导致下拉数据sql获取异常问题

lph 1 жил өмнө
parent
commit
8c7f48c36e

+ 63 - 5
zkqy-ui/src/views/system/fromModel/index.vue

@@ -69,22 +69,80 @@ export default {
   data() {
     return {
       fid: null,
+      needHandlerTypeList: ["table", "grid", "tabs", "card"],
     };
   },
   methods: {
+    // 处理表单布局嵌套
+    getAllSelectItems(itemList = [], res = []) {
+      if (itemList.length == 0) return;
+      itemList.forEach((item) => {
+        if (this.isNeedSql(item)) {
+          res.push(item);
+        } else {
+          console.log(item.type);
+          switch (item.type) {
+            case "table":
+              item.trs.forEach((n) => {
+                n.tds.forEach((m) => {
+                  this.getAllSelectItems(m.list, res);
+                });
+              });
+              break;
+            case "grid":
+              item.columns.forEach((n) => {
+                this.getAllSelectItems(n.list, res);
+              });
+              break;
+            case "tabs":
+              console.log("item.columns", item.columns);
+              item.columns.forEach((n) => {
+                this.getAllSelectItems(n.list, res);
+              });
+              break;
+            case "card":
+              // item.columns?.forEach((n) => {
+              //   this.getAllSelectItems(n.list, res);
+              // });
+              this.getAllSelectItems(item.list, res);
+              break;
+            default:
+              break;
+          }
+          return;
+        }
+      });
+      return;
+    },
+    // 判断是否需要sql
+    isNeedSql(item) {
+      let needSqlArr = ["select", "treeSelect", "cascader"];
+      return needSqlArr.includes(item.type) && item.options.dynamic;
+    },
+    // 判断是否需要处理嵌套
+    isNeedDeep(item) {
+      let needDeepArr = ["table", "grid", "tabs", "card"];
+      return needDeepArr.includes(item.type);
+    },
+    // 保存回调
     handleSave(values) {
       var jsonData = JSON.parse(values);
       //
       var editorHtmlJson =
         codeHtmlFront + JSON.stringify(jsonData) + codeHtmlLast;
       let { list } = jsonData;
-      let needSqlArr = ["select", "treeSelect", "cascader"];
-      let selectArr = list.filter((item) => {
-        return needSqlArr.includes(item.type) && item.options.dynamic;
-      });
+      // let needSqlArr = ["select", "treeSelect", "cascader"];
+
+      // console.log(list);
+      // let selectArr = list.filter((item) => {
+      //   return needSqlArr.includes(item.type) && item.options.dynamic;
+      // });
+      let selectArr = [];
+      console.log("list", list);
+      this.getAllSelectItems(list, selectArr);
       let formSQL = {};
+      console.log("selectArr", selectArr);
       selectArr.forEach((item) => {
-        console.log(item);
         // formSQL = {
         //   ...formSQL,
         //   ...item.options.sqlData,