From 2c573446cd5059b09c06c8673eaf1f51f43967ce Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 14 六月 2024 13:44:27 +0800
Subject: [PATCH] 2024-06-14

---
 src/utils/utils-custom.js |  573 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 493 insertions(+), 80 deletions(-)

diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 209bc75..644475e 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -193,6 +193,42 @@
   }
 
   /**
+   * @description 鑾峰彇鎸囧畾缁勪欢
+   * @return {String}  缁勪欢id
+   */
+  static getComponent (Id) {
+    let interfaces = window.GLOB.customMenu.interfaces
+    let components = window.GLOB.customMenu.components
+    let cell = null
+
+    let mapComponents = (components = []) => {
+      components.forEach(item => {
+        if (item.uuid === Id) {
+          cell = item
+        }else if (item.type === 'tabs') {
+          item.subtabs.forEach(f_tab => {
+            mapComponents(f_tab.components)
+          })
+        } else if (item.type === 'group') {
+          mapComponents(item.components)
+        }
+      })
+    }
+
+    mapComponents(components)
+
+    if (!cell && interfaces) {
+      interfaces.forEach(m => {
+        if (m.uuid === Id && m.status === 'true') {
+          cell = m
+        }
+      })
+    }
+    
+    return cell
+  }
+
+  /**
    * @description 鑾峰彇涓婄骇妯″潡
    * @return {String}  selfId  褰撳墠缁勪欢id
    */
@@ -325,80 +361,6 @@
     check(modules)
    
     return has
-  }
-
-  /**
-   * @description 鑾峰彇鍙叧鑱旀ā鍧�
-   */
-  static getLinkModules (components) {
-    let modules = components.map(item => {
-      if ((item.type === 'card' && item.subtype === 'datacard') || (item.type === 'table' && item.subtype === 'normaltable')) {
-        return {
-          value: item.uuid,
-          label: item.name
-        }
-      } else if (item.type === 'tabs') {
-        let _item = {
-          value: item.uuid,
-          label: item.name,
-          children: item.subtabs.map(f_tab => {
-            let subItem = {
-              value: f_tab.uuid,
-              label: f_tab.label,
-              children: this.getLinkModules(f_tab.components)
-            }
-
-            if (!subItem.children || subItem.children.length === 0) {
-              return {children: null}
-            }
-            return subItem
-          })
-        }
-
-        _item.children = _item.children.filter(t => t.children !== null)
-
-        if (_item.children.length === 0) {
-          return {children: null}
-        }
-
-        return _item
-      } else if (item.type === 'group') {
-        let _item = {
-          value: item.uuid,
-          label: item.name,
-          children: item.components.map(f_tab => {
-            if ((f_tab.type === 'card' && f_tab.subtype === 'datacard') || (f_tab.type === 'table' && f_tab.subtype === 'normaltable')) {
-              return {
-                value: f_tab.uuid,
-                label: f_tab.name
-              }
-            }
-            return {
-              children: null
-            }
-          })
-        }
-
-        _item.children = _item.children.filter(t => t.children !== null)
-
-        if (_item.children.length === 0) {
-          return {children: null}
-        }
-
-        return _item
-      } else {
-        return {
-          children: null
-        }
-      }
-    })
-
-    modules = modules.filter(mod => mod.children !== null)
-
-    if (modules.length === 0) {
-      return null
-    }
-    return modules
   }
 
   /**
@@ -540,7 +502,16 @@
             return cell
           })
         }
-      } else if (item.type === 'table' && item.cols) {
+      } else if (item.type === 'table') {
+        if (item.supNodes && item.supNodes.length > 0) {
+          item.supNodes = item.supNodes.map(cell => {
+            cell.nodes = cell.nodes.map(n => md5(commonId + n))
+            cell.componentId = cell.nodes[cell.nodes.length - 1]
+
+            return cell
+          })
+        }
+
         let loopCol = (cols) => {
           return cols.map(col => {
             if (col.type === 'action') {
@@ -578,7 +549,7 @@
           })
         }
 
-        item.cols = loopCol(item.cols)
+        item.cols = loopCol(item.cols || [])
 
         if (item.colsCtrls) {
           item.colsCtrls = item.colsCtrls.map(col => {
@@ -587,6 +558,9 @@
           })
         }
       } else if (item.type === 'form') {
+        if (item.wrap.datatype === 'public' && item.wrap.publicId) {
+          item.wrap.publicId = md5(commonId + item.wrap.publicId)
+        }
         item.subcards = item.subcards.map(cell => {
           cell.uuid = this.getuuid()
   
@@ -655,7 +629,7 @@
         })
       }
 
-      if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
+      if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty' && item.setting.supModule[0] !== 'preview') {
         item.setting.supModule = item.setting.supModule.map(c => {
           return md5(commonId + c)
         })
@@ -846,7 +820,7 @@
           return cell
         })
       }
-    } else if (item.type === 'table' && item.cols) {
+    } else if (item.type === 'table') {
       let loopCol = (cols) => {
         return cols.map(col => {
           if (col.type === 'action') {
@@ -887,7 +861,7 @@
         })
       }
 
-      item.cols = loopCol(item.cols)
+      item.cols = loopCol(item.cols || [])
 
       if (item.colsCtrls) {
         item.colsCtrls = item.colsCtrls.map(col => {
@@ -966,6 +940,128 @@
 
     return item
   }
+}
+
+/**
+ * @description 鑾峰彇鍙叧鑱旀ā鍧�
+ */
+export function getLinkModules (components) {
+  let modules = components.map(item => {
+    if ((item.type === 'card' && item.subtype === 'datacard') || (item.type === 'table' && item.subtype === 'normaltable')) {
+      return {
+        value: item.uuid,
+        label: item.name
+      }
+    } else if (item.type === 'tabs') {
+      let _item = {
+        value: item.uuid,
+        label: item.name,
+        children: item.subtabs.map(f_tab => {
+          let subItem = {
+            value: f_tab.uuid,
+            label: f_tab.label,
+            children: getLinkModules(f_tab.components)
+          }
+
+          if (!subItem.children || subItem.children.length === 0) {
+            return {children: null}
+          }
+          return subItem
+        })
+      }
+
+      _item.children = _item.children.filter(t => t.children !== null)
+
+      if (_item.children.length === 0) {
+        return {children: null}
+      }
+
+      return _item
+    } else if (item.type === 'group') {
+      let _item = {
+        value: item.uuid,
+        label: item.name,
+        children: item.components.map(f_tab => {
+          if ((f_tab.type === 'card' && f_tab.subtype === 'datacard') || (f_tab.type === 'table' && f_tab.subtype === 'normaltable')) {
+            return {
+              value: f_tab.uuid,
+              label: f_tab.name
+            }
+          }
+          return {
+            children: null
+          }
+        })
+      }
+
+      _item.children = _item.children.filter(t => t.children !== null)
+
+      if (_item.children.length === 0) {
+        return {children: null}
+      }
+
+      return _item
+    } else {
+      return {
+        children: null
+      }
+    }
+  })
+
+  modules = modules.filter(mod => mod.children !== null)
+
+  if (modules.length === 0) {
+    return null
+  }
+  return modules
+}
+
+/**
+ * @description 鑾峰彇鍏叡鏁版嵁婧�
+ */
+export function getInterfaces () {
+  let menu = window.GLOB.customMenu
+
+  let interfaces = []
+  if (menu.interfaces) {
+    menu.interfaces.forEach(item => {
+      if (item.status === 'true') {
+        interfaces.push({
+          value: item.uuid,
+          label: item.name,
+          columns: JSON.parse(JSON.stringify(item.columns))
+        })
+      }
+    })
+  }
+
+  let mapComponents = (components = []) => {
+    components.forEach(item => {
+      if (item.type === 'card' && item.subtype === 'datacard') {
+        interfaces.push({
+          value: item.uuid,
+          label: item.name + '锛堟暟鎹崱锛�',
+          columns: JSON.parse(JSON.stringify(item.columns))
+        })
+      } else if (item.type === 'table' && item.subtype === 'normaltable') {
+        interfaces.push({
+          value: item.uuid,
+          label: item.name + '锛堝父鐢ㄨ〃锛�',
+          columns: JSON.parse(JSON.stringify(item.columns))
+        })
+      } else if (item.type === 'tabs') {
+        item.subtabs.forEach(f_tab => {
+          mapComponents(f_tab.components)
+        })
+      } else if (item.type === 'group') {
+        mapComponents(item.components)
+      }
+    })
+  }
+
+  mapComponents(menu.components)
+
+  return interfaces
 }
 
 /**
@@ -1675,7 +1771,7 @@
       } else if (!card.setting.supModule) {
         errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
       }
-    } else if (card.type === 'card' && card.subtype === 'datacard') { // 鏁版嵁鍗★紝鍙兘鏈夊涓婄骇
+    } else if ((card.type === 'card' && card.subtype === 'datacard') || card.subtype === 'normaltable') { // 鏁版嵁鍗°�乼able锛屽彲鑳芥湁澶氫笂绾�
       if (card.wrap.supType !== 'multi' && !card.setting.supModule) {
         errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
       }
@@ -1911,6 +2007,13 @@
       duration: 5
     })
     return false
+  } else if (/\send\s+begin\s/ig.test(sql)) {
+    notification.warning({
+      top: 92,
+      message: `end 鍚庝笉鍙揣璺� begin銆俙,
+      duration: 5
+    })
+    return false
   } else if (type === 'customscript' && /\son\s+[a-z0-9_]+\.[a-z0-9_]+\s*=\s*[a-z0-9_]+\.[a-z0-9_]+/ig.test(sql)) {
     let list = sql.match(/\son\s+[a-z0-9_]+\.[a-z0-9_]+\s*=\s*[a-z0-9_]+\.[a-z0-9_]+/ig)
     let errors = []
@@ -1971,4 +2074,314 @@
   }
 
   return true
+}
+
+/**
+ * @description 鑾峰彇璇█杞崲淇℃伅
+ */
+export function getLangTrans (config) {
+  let langList = sessionStorage.getItem('langList')
+  
+  if (!langList) return
+
+  let defLang = ''
+
+  try {
+    langList = JSON.parse(langList)
+    defLang = langList[0]
+  } catch (e) {
+    defLang = ''
+  }
+
+  if (!defLang) return ''
+
+  let sql = []
+  let btn = []
+  let ops = []
+  let text = []
+
+  let filterElement = (card) => {
+    if (card.datatype === 'static' && card.eleType === 'text' && !/@.+@/g.test(card.value)) {
+      sql.push(card.value)
+    }
+    if (card.prefix) {
+      sql.push(card.prefix)
+    }
+    if (card.postfix) {
+      sql.push(card.postfix)
+    }
+  }
+
+  let filterSql = (sl) => {
+    if (!sl) return
+
+    let cutreg = /[\u4E00-\u9FA5銆傦紒锛屻�乚+/ig
+    let tbs = sl.match(cutreg)
+
+    if (!tbs) return
+    
+    text.push(...tbs)
+  }
+
+  let filterBtn = (btn) => {
+    if (!btn.verify) return
+
+    btn.verify.customverifys && btn.verify.customverifys.forEach(script => {
+      filterSql(script.sql)
+    })
+    btn.verify.scripts && btn.verify.scripts.forEach(script => {
+      filterSql(script.sql)
+    })
+    btn.verify.cbScripts && btn.verify.cbScripts.forEach(script => {
+      filterSql(script.sql)
+    })
+
+    if (btn.OpenType === 'funcbutton') {
+      if (btn.intertype === 'system' && btn.verify.dataType === 'custom' && btn.verify.setting) {
+        filterSql(btn.verify.setting.dataresource)
+      }
+    } else if (btn.OpenType === 'excelOut') {
+      filterSql(btn.verify.dataresource)
+    }
+  }
+
+  let traversal = (components) => {
+    if (!components) return
+
+    components.forEach(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          sql.push(tab.label)
+          traversal(tab.components)
+        })
+      } else if (item.type === 'group') {
+        traversal(item.components)
+      } else {
+        if (item.setting && (!item.wrap || !item.wrap.datatype || item.wrap.datatype === 'dynamic')) {
+          if (item.setting.interType === 'system') {
+            filterSql(item.setting.dataresource)
+            item.scripts && item.scripts.forEach(script => {
+              filterSql(script.sql)
+            })
+          }
+        }
+
+        if (item.columns) {
+          item.columns.forEach(cell => {
+            sql.push(cell.label)
+          })
+        }
+        if (item.search) {
+          item.search.forEach(cell => {
+            sql.push(cell.label)
+            if (cell.options) {
+              cell.options.forEach(o => {
+                ops.push(o.Text)
+              })
+            }
+            if (cell.resourceType === '1') {
+              filterSql(cell.dataSource)
+            }
+          })
+        }
+        if (item.action) {
+          item.action.forEach(cell => {
+            btn.push(cell.label)
+            filterBtn(cell)
+            if (cell.OpenType === 'popview' && cell.config) {
+              traversal(cell.config.components)
+            } else if (cell.OpenType === 'pop') {
+              if (cell.modal && cell.modal.fields.length) {
+                cell.modal.fields.forEach(n => {
+                  sql.push(n.label)
+                  if (n.resourceType === '1') {
+                    filterSql(n.dataSource)
+                  }
+                })
+              }
+            }
+          })
+        }
+
+        if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') {
+          item.subcards.forEach(card => {
+            card.elements && card.elements.forEach(cell => {
+              if (cell.eleType === 'button') {
+                btn.push(cell.label)
+                filterBtn(cell)
+                if (cell.OpenType === 'popview' && cell.config) {
+                  traversal(cell.config.components)
+                } else if (cell.OpenType === 'pop') {
+                  if (cell.modal && cell.modal.fields.length) {
+                    cell.modal.fields.forEach(n => {
+                      sql.push(n.label)
+                      if (n.resourceType === '1') {
+                        filterSql(n.dataSource)
+                      }
+                    })
+                  }
+                }
+              } else {
+                filterElement(cell)
+              }
+            })
+            card.backElements && card.backElements.forEach(cell => {
+              if (cell.eleType === 'button') {
+                btn.push(cell.label)
+                filterBtn(cell)
+                if (cell.OpenType === 'popview' && cell.config) {
+                  traversal(cell.config.components)
+                } else if (cell.OpenType === 'pop') {
+                  if (cell.modal && cell.modal.fields.length) {
+                    cell.modal.fields.forEach(n => {
+                      sql.push(n.label)
+                      if (n.resourceType === '1') {
+                        filterSql(n.dataSource)
+                      }
+                    })
+                  }
+                }
+              } else {
+                filterElement(cell)
+              }
+            })
+          })
+        } else if (item.type === 'balcony') {
+          item.elements && item.elements.forEach(cell => {
+            if (cell.eleType === 'button') {
+              btn.push(cell.label)
+              filterBtn(cell)
+              if (cell.OpenType === 'popview' && cell.config) {
+                traversal(cell.config.components)
+              } else if (cell.OpenType === 'pop') {
+                if (cell.modal && cell.modal.fields.length) {
+                  cell.modal.fields.forEach(n => {
+                    sql.push(n.label)
+                    if (n.resourceType === '1') {
+                      filterSql(n.dataSource)
+                    }
+                  })
+                }
+              }
+            } else {
+              filterElement(cell)
+            }
+          })
+        } else if (item.type === 'table') {
+          let loopCol = (cols) => {
+            cols.forEach(col => {
+              sql.push(col.label)
+              if (col.prefix) {
+                sql.push(col.prefix)
+              }
+              if (col.postfix) {
+                sql.push(col.postfix)
+              }
+              if (col.type === 'colspan') {
+                loopCol(col.subcols)
+              } else if (col.type === 'custom') {
+                col.elements.forEach(cell => {
+                  if (cell.eleType === 'button') {
+                    btn.push(cell.label)
+                    filterBtn(cell)
+                    if (cell.OpenType === 'popview' && cell.config) {
+                      traversal(cell.config.components)
+                    } else if (cell.OpenType === 'pop') {
+                      if (cell.modal && cell.modal.fields.length) {
+                        cell.modal.fields.forEach(n => {
+                          sql.push(n.label)
+                          if (n.resourceType === '1') {
+                            filterSql(n.dataSource)
+                          }
+                        })
+                      }
+                    }
+                  } else {
+                    filterElement(cell)
+                  }
+                })
+              }
+            })
+          }
+          loopCol(item.cols)
+        } else if (item.type === 'form') {
+          item.subcards.forEach(cell => {
+            filterBtn(cell.subButton)
+            cell.fields.forEach(n => {
+              sql.push(n.label)
+              if (n.resourceType === '1') {
+                filterSql(n.dataSource)
+              }
+            })
+          })
+        }
+      }
+    })
+  }
+
+  if (config.interfaces) {
+    config.interfaces.forEach(item => {
+      if (item.setting.interType === 'system') {
+        filterSql(item.setting.dataresource)
+        item.scripts && item.scripts.forEach(script => {
+          filterSql(script.sql)
+        })
+      }
+    })
+  }
+
+  traversal(config.components)
+
+  sql = sql.filter(Boolean)
+  btn = btn.filter(Boolean)
+  ops = ops.filter(Boolean)
+  text = text.filter(Boolean)
+
+  sql = Array.from(new Set(sql))
+  btn = Array.from(new Set(btn))
+  ops = Array.from(new Set(ops))
+  text = Array.from(new Set(text))
+
+  sql = sql.map(l => `'${l}','title'`)
+  btn = btn.map(l => `'${l}','button'`)
+  ops = ops.map(l => `'${l}','list'`)
+  text = text.map(l => `'${l}','text'`)
+
+  let list = [...btn, ...sql, ...ops, ...text]
+
+  if (config.MenuName) {
+    list.unshift(`'${config.MenuName}','menu'`)
+  }
+
+  if (config.fstMenuId && config.parentId) {
+    let menulist = sessionStorage.getItem('fstMenuList')
+    try {
+      menulist = JSON.parse(menulist)
+    } catch(e) {
+      menulist = []
+    }
+
+    menulist.forEach(item => {
+      if (item.MenuID !== config.fstMenuId) return
+      list.unshift(`'${item.MenuName}','menu'`)
+      item.children.forEach(cell => {
+        if (cell.MenuID !== config.parentId) return
+        list.unshift(`'${cell.MenuName}','menu'`)
+      })
+    })
+  }
+
+  let result = []
+
+  langList.forEach(lan => {
+    if (lan === defLang) return
+
+    list.forEach(n => {
+      result.push(`'${lan}',${n}`)
+    })
+  })
+
+  config.trans = true
+  
+  return result.join(';')
 }
\ No newline at end of file

--
Gitblit v1.8.0