From 52faefc67ffef29e3d208d2233c2547fc0ee47d3 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期六, 04 三月 2023 21:11:41 +0800
Subject: [PATCH] 2023-03-04

---
 src/utils/utils-custom.js |  291 +++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 205 insertions(+), 86 deletions(-)

diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 77d77ab..3d8f378 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -1,3 +1,5 @@
+import md5 from 'md5'
+
 export default class MenuUtils {
   /**
    * @description 鑾峰彇涓嬬骇妯″潡
@@ -277,6 +279,31 @@
   }
 
   /**
+   * @description 鑾峰彇涓婄骇妯″潡
+   * @return {String}  selfId  褰撳墠缁勪欢id
+   */
+  static checkSupModules (modules, supId) {
+    let has = false
+
+    let check = (list) => {
+      list.forEach(m => {
+        if (has) return
+        if (supId === m.value) {
+          has = true
+          return
+        }
+        if (m.children) {
+          check(m.children)
+        }
+      })
+    }
+
+    check(modules)
+   
+    return has
+  }
+
+  /**
    * @description 鑾峰彇鍙叧鑱旀ā鍧�
    */
   static getLinkModules (components) {
@@ -369,7 +396,7 @@
    * @description 閲嶇疆鑿滃崟閰嶇疆锛岄〉闈㈡暣浣撳鍒�
    * @return {String}  components 閰嶇疆淇℃伅
    */
-  static resetConfig = (components, uuids = {}, clear = false) => {
+  static resetConfig = (components, commonId, clear = false) => {
     return components.map(item => {
       if (item.type === 'navbar') {
         return item
@@ -379,18 +406,16 @@
         item.type = 'card'
       }
 
-      uuids[item.uuid] = this.getuuid()
-      item.uuid = uuids[item.uuid]
+      item.uuid = md5(commonId + item.uuid)
 
       if (item.type === 'tabs') {
         item.subtabs.forEach(tab => {
-          uuids[tab.uuid] = this.getuuid()
-          tab.uuid = uuids[tab.uuid]
+          tab.uuid = md5(commonId + tab.uuid)
 
-          tab.components = this.resetConfig(tab.components, uuids, clear)
+          tab.components = this.resetConfig(tab.components, commonId, clear)
         })
       } else if (item.type === 'group') {
-        item.components = this.resetConfig(item.components, uuids, clear)
+        item.components = this.resetConfig(item.components, commonId, clear)
       } else if (item.type === 'menubar') {
         item.subMenus = item.subMenus.map(cell => {
           cell.uuid = this.getuuid()
@@ -401,8 +426,17 @@
           return cell
         })
       } else if (['card', 'carousel', 'timeline'].includes(item.type)) {
-        if (item.wrap.datatype === 'public' && uuids[item.wrap.publicId]) {
-          item.wrap.publicId = uuids[item.wrap.publicId]
+        if (item.wrap.datatype === 'public' && item.wrap.publicId) {
+          item.wrap.publicId = md5(commonId + item.wrap.publicId)
+        }
+
+        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
+          })
         }
         
         item.subcards.forEach(card => {
@@ -419,13 +453,21 @@
             }
           }
 
+          if (card.setting.click === 'button' && card.setting.linkbtn) {
+            card.setting.linkbtn = md5(commonId + card.setting.linkbtn)
+          }
+
           if (card.elements) {
             card.elements = card.elements.map(cell => {
-              cell.uuid = this.getuuid()
-
-              if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
-                cell.pageTemplate = ''
-                cell.linkmenu = ''
+              if (cell.eleType === 'button') {
+                cell.uuid = md5(commonId + cell.uuid)
+                if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
+                  cell.pageTemplate = ''
+                  cell.linkmenu = ''
+                }
+                this.resetBtn(cell, commonId)
+              } else {
+                cell.uuid = this.getuuid()
               }
               
               return cell
@@ -433,11 +475,15 @@
           }
           if (card.backElements) {
             card.backElements = card.backElements.map(cell => {
-              cell.uuid = this.getuuid()
-
-              if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
-                cell.pageTemplate = ''
-                cell.linkmenu = ''
+              if (cell.eleType === 'button') {
+                cell.uuid = md5(commonId + cell.uuid)
+                if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
+                  cell.pageTemplate = ''
+                  cell.linkmenu = ''
+                }
+                this.resetBtn(cell, commonId)
+              } else {
+                cell.uuid = this.getuuid()
               }
 
               return cell
@@ -445,16 +491,23 @@
           }
         })
       } else if (item.type === 'balcony') {
-        if (item.wrap.datatype === 'public' && uuids[item.wrap.publicId]) {
-          item.wrap.publicId = uuids[item.wrap.publicId]
+        if (item.wrap.datatype === 'public' && item.wrap.publicId) {
+          item.wrap.publicId = md5(commonId + item.wrap.publicId)
+        }
+        if (item.wrap.linkbtn) {
+          item.wrap.linkbtn = md5(commonId + item.wrap.linkbtn)
         }
         if (item.elements) {
           item.elements = item.elements.map(cell => {
-            cell.uuid = this.getuuid()
-
-            if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
-              cell.pageTemplate = ''
-              cell.linkmenu = ''
+            if (cell.eleType === 'button') {
+              cell.uuid = md5(commonId + cell.uuid)
+              if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
+                cell.pageTemplate = ''
+                cell.linkmenu = ''
+              }
+              this.resetBtn(cell, commonId)
+            } else {
+              cell.uuid = this.getuuid()
             }
 
             return cell
@@ -463,7 +516,7 @@
       } else if (item.type === 'table' && item.cols) {
         let loopCol = (col) => {
           col.subcols = col.subcols.map(c => {
-            c.uuid = this.getuuid()
+            c.uuid = md5(commonId + c.uuid)
   
             if (c.type === 'colspan' && c.subcols) {
               c = loopCol(c)
@@ -475,12 +528,14 @@
               })
             } else if (c.type === 'action' && c.elements) {
               c.elements = c.elements.map(cell => {
-                cell.uuid = this.getuuid()
+                cell.uuid = md5(commonId + cell.uuid)
 
                 if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
                   cell.pageTemplate = ''
                   cell.linkmenu = ''
                 }
+
+                this.resetBtn(cell, commonId)
 
                 return cell
               })
@@ -490,12 +545,9 @@
   
           return col
         }
-        let _uuids = {}
-        item.cols = item.cols.map(col => {
-          let uuid = this.getuuid()
 
-          _uuids[col.uuid] = uuid
-          col.uuid = uuid
+        item.cols = item.cols.map(col => {
+          col.uuid = md5(commonId + col.uuid)
   
           if (col.type === 'colspan' && col.subcols) {
             col = loopCol(col)
@@ -506,7 +558,8 @@
             })
           } else if (col.type === 'action' && col.elements) {
             col.elements = col.elements.map(cell => {
-              cell.uuid = this.getuuid()
+              cell.uuid = md5(commonId + cell.uuid)
+              this.resetBtn(cell, commonId)
               return cell
             })
           }
@@ -515,8 +568,15 @@
 
         if (item.subtype === 'editable') {
           item.cols = item.cols.map(col => {
-            if (col.editable === 'true' && col.enter && _uuids[col.enter]) {
-              col.enter = _uuids[col.enter]
+            if (col.editable === 'true' && col.enter) {
+              col.enter = md5(commonId + col.enter)
+            } else if (col.type === 'colspan' && col.subcols) {
+              col.subcols = col.subcols.map(c => {
+                if (c.editable === 'true' && c.enter) {
+                  c.enter = md5(commonId + c.enter)
+                }
+                return c
+              })
             }
             return col
           })
@@ -530,6 +590,11 @@
     
             return m
           })
+
+          if (cell.subButton) {
+            this.resetBtn(cell.subButton, commonId)
+          }
+
           return cell
         })
       }
@@ -538,18 +603,16 @@
         item.btnlog = null
       }
   
-      let oriUids = {}
       if (item.action) {
         item.action = item.action.map(cell => {
-          let _uuid = this.getuuid()
-
-          oriUids[cell.uuid] = _uuid
-          cell.uuid = _uuid
+          cell.uuid = md5(commonId + cell.uuid)
 
           if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
             cell.pageTemplate = ''
             cell.linkmenu = ''
           }
+
+          this.resetBtn(cell, commonId)
 
           return cell
         })
@@ -588,24 +651,35 @@
       }
 
       if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
-        let em = false
         item.setting.supModule = item.setting.supModule.map(c => {
-          if (!uuids[c]) {
-            em = true
-          }
-          return uuids[c] || ''
+          return md5(commonId + c)
         })
-        if (em) {
-          item.setting.supModule = ''
+        if (item.wrap && item.wrap.supModule) {
+          item.wrap.supModule = item.setting.supModule
         }
       }
 
       if (item.wrap && item.wrap.doubleClick) {
-        item.wrap.doubleClick = oriUids[item.wrap.doubleClick] || ''
+        item.wrap.doubleClick = md5(commonId + item.wrap.doubleClick)
       }
   
       return item
     })
+  }
+
+  /**
+   * @description 鎸夐挳閲嶇疆
+   */
+  static resetBtn (btn, commonId) {
+    if (btn.switchTab && btn.switchTab.length > 0) {
+      btn.switchTab = btn.switchTab.map(m => md5(commonId + m))
+    }
+    if (btn.anchors && btn.anchors.length > 0) {
+      btn.anchors = btn.anchors.map(m => md5(commonId + m))
+    }
+    if (btn.syncComponent && btn.syncComponent.length > 0) {
+      btn.syncComponent = btn.syncComponent.map(m => md5(commonId + m))
+    }
   }
 
   /**
@@ -624,7 +698,7 @@
   * @description 閲嶇疆缁勪欢閰嶇疆
   * @return {String}  item 缁勪欢淇℃伅
   */
-  static resetComponentConfig = (item, uuids = {}) => {
+  static resetComponentConfig = (item) => {
     if (item.type === 'navbar') {
       return item
     }
@@ -633,11 +707,8 @@
       item.type = 'card'
     }
 
-    let _uuid = this.getuuid()
-
-    uuids[item.uuid] = _uuid
-
-    item.uuid = _uuid
+    item.uuid = this.getuuid()
+    let commonId = this.getuuid()
 
     // 閲嶇疆缁勪欢鍚嶇О
     let sign = this.getSignName()
@@ -660,12 +731,21 @@
     } else if (['card', 'carousel', 'timeline'].includes(item.type)) {
       item.subcards.forEach(card => {
         card.uuid = this.getuuid()
+
+        if (card.setting.click === 'button' && card.setting.linkbtn) {
+          card.setting.linkbtn = md5(commonId + card.setting.linkbtn)
+        }
+
         if (card.elements) {
           if (sessionStorage.getItem('editMenuType') === 'popview') {
             card.elements = card.elements.filter(b => b.OpenType !== 'popview' && b.OpenType !== 'funcbutton')
           }
           card.elements = card.elements.map(cell => {
-            cell.uuid = this.getuuid()
+            if (cell.eleType === 'button') {
+              cell.uuid = md5(commonId + cell.uuid)
+            } else {
+              cell.uuid = this.getuuid()
+            }
             return cell
           })
         }
@@ -674,7 +754,11 @@
             card.elements = card.elements.filter(b => b.OpenType !== 'popview' && b.OpenType !== 'funcbutton')
           }
           card.backElements = card.backElements.map(cell => {
-            cell.uuid = this.getuuid()
+            if (cell.eleType === 'button') {
+              cell.uuid = md5(commonId + cell.uuid)
+            } else {
+              cell.uuid = this.getuuid()
+            }
             return cell
           })
         }
@@ -684,8 +768,15 @@
         if (sessionStorage.getItem('editMenuType') === 'popview') {
           item.elements = item.elements.filter(b => b.OpenType !== 'popview' && b.OpenType !== 'funcbutton')
         }
+        if (item.wrap.linkbtn) {
+          item.wrap.linkbtn = md5(commonId + item.wrap.linkbtn)
+        }
         item.elements = item.elements.map(cell => {
-          cell.uuid = this.getuuid()
+          if (cell.eleType === 'button') {
+            cell.uuid = md5(commonId + cell.uuid)
+          } else {
+            cell.uuid = this.getuuid()
+          }
           return cell
         })
       }
@@ -708,12 +799,8 @@
         return col
       }
 
-      let _uuids = {}
       item.cols = item.cols.map(col => {
-        let uuid = this.getuuid()
-
-        _uuids[col.uuid] = uuid
-        col.uuid = uuid
+        col.uuid = md5(commonId + col.uuid)
 
         if (col.type === 'colspan' && col.subcols) {
           col = loopCol(col)
@@ -727,7 +814,8 @@
             col.elements = col.elements.filter(c => c.OpenType !== 'popview' && c.OpenType !== 'funcbutton')
           }
           col.elements = col.elements.map(cell => {
-            cell.uuid = this.getuuid()
+            cell.uuid = md5(commonId + cell.uuid)
+
             return cell
           })
         }
@@ -736,8 +824,8 @@
 
       if (item.subtype === 'editable') {
         item.cols = item.cols.map(col => {
-          if (col.editable === 'true' && col.enter && _uuids[col.enter]) {
-            col.enter = _uuids[col.enter]
+          if (col.editable === 'true' && col.enter) {
+            col.enter = md5(commonId + col.enter)
           }
           return col
         })
@@ -757,17 +845,12 @@
 
     delete item.btnlog
 
-    let oriUids = {}
     if (item.action) {
       if (sessionStorage.getItem('editMenuType') === 'popview') {
         item.action = item.action.filter(c => c.OpenType !== 'popview' && c.OpenType !== 'funcbutton')
       }
       item.action = item.action.map(cell => {
-        let _uuid = this.getuuid()
-
-        oriUids[cell.uuid] = _uuid
-
-        cell.uuid = _uuid
+        cell.uuid = md5(commonId + cell.uuid)
 
         return cell
       })
@@ -805,20 +888,14 @@
     }
 
     if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
-      let em = false
-      item.setting.supModule = item.setting.supModule.map(c => {
-        if (!uuids[c]) {
-          em = true
-        }
-        return uuids[c] || ''
-      })
-      if (em) {
-        item.setting.supModule = ''
-      }
+      item.setting.supModule = ''
+    }
+    if (item.wrap && item.wrap.supModule) {
+      item.wrap.supModule = ''
     }
 
     if (item.wrap && item.wrap.doubleClick) {
-      item.wrap.doubleClick = oriUids[item.wrap.doubleClick] || ''
+      item.wrap.doubleClick = md5(commonId + item.wrap.doubleClick)
     }
 
     return item
@@ -850,17 +927,36 @@
 }
 
 /**
+ * @description 鑾峰彇鍥捐〃楂樺害
+ */
+export function getHeight (val) {
+  if (typeof(val) === 'string') {
+    if (val.indexOf('px') > -1) {
+      val = parseFloat(val)
+    } else if (val.indexOf('vw') > -1) {
+      val = parseFloat(val)
+      val = document.body.clientWidth * val / 100
+    } else if (val.indexOf('vh') > -1) {
+      val = parseFloat(val)
+      val = document.body.clientHeight * val / 100
+    }
+  }
+
+  return parseInt(val || 400) - 30
+}
+
+/**
  * @description 鑾峰彇琛ㄥ悕
  */
 export function getTables (config, pops) {
   let tables = []
   let cuts = []
-  let cutreg = /(from|update|insert\s+into)\s+(@db@)?[a-z_]+/ig
+  let cutreg = /(from|update|insert\s+into)\s+(@db@)?[a-z0-9_]+/ig
   let trimreg = /(from|update|insert\s+into)\s+(@db@)?/ig
 
   if (config.setting && (!config.wrap || !config.wrap.datatype || config.wrap.datatype === 'dynamic')) {
     if (config.setting.interType === 'system') {
-      if (config.setting.execute !== 'false') {
+      if (config.setting.execute !== 'false' && config.setting.dataresource) {
         let tbs = config.setting.dataresource.match(cutreg)
         tbs && cuts.push(...tbs)
       }
@@ -902,6 +998,8 @@
         if (cell.eleType !== 'button') return
         if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) {
           action.push(cell)
+        } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) {
+          action.push(cell)
         } else if (cell.OpenType === 'popview') {
           if (pops) {
             pops.push({...cell, parentId: config.uuid})
@@ -915,6 +1013,8 @@
         item.backElements.forEach(cell => {
           if (cell.eleType !== 'button') return
           if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) {
+            action.push(cell)
+          } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) {
             action.push(cell)
           } else if (cell.OpenType === 'popview') {
             if (pops) {
@@ -933,6 +1033,8 @@
       col.elements.forEach(cell => {
         if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) {
           action.push(cell)
+        } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) {
+          action.push(cell)
         } else if (cell.OpenType === 'popview') {
           if (pops) {
             pops.push({...cell, parentId: config.uuid})
@@ -948,6 +1050,8 @@
     if (cell.eleType !== 'button') return
     if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) {
       action.push(cell)
+    } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) {
+      action.push(cell)
     } else if (cell.OpenType === 'popview') {
       if (pops) {
         pops.push({...cell, parentId: config.uuid})
@@ -959,6 +1063,8 @@
 
   config.action && config.action.forEach(cell => {
     if (['pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) {
+      action.push(cell)
+    } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) {
       action.push(cell)
     } else if (cell.OpenType === 'popview') {
       if (pops) {
@@ -980,6 +1086,19 @@
       }
       if (btn.intertype === 'system' && btn.verify.scripts) {
         btn.verify.scripts.forEach(script => {
+          if (script.status === 'false') return
+          let tbs = script.sql.match(cutreg)
+          tbs && cuts.push(...tbs)
+        })
+      }
+    } else if (btn.OpenType === 'funcbutton') {
+      if (btn.intertype !== 'system' || !btn.verify || !btn.verify.setting) return
+      if (btn.verify.dataType === 'custom') {
+        if (btn.verify.setting.defaultSql !== 'false') {
+          let tbs = btn.verify.setting.dataresource.match(cutreg)
+          tbs && cuts.push(...tbs)
+        }
+        btn.verify.scripts && btn.verify.scripts.forEach(script => {
           if (script.status === 'false') return
           let tbs = script.sql.match(cutreg)
           tbs && cuts.push(...tbs)
@@ -1061,7 +1180,7 @@
 
   cuts = cuts.map(item => item.replace(trimreg, ''))
   tables.push(...cuts)
-  tables = tables.filter(Boolean)
+  tables = tables.filter(tb => tb && tb !== 'dbo' && tb.length > 1)
   tables = Array.from(new Set(tables))
 
   return tables

--
Gitblit v1.8.0