From 9a1416e0b5cdb40f49b3c2061b04b35551d77e99 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 19 九月 2023 18:14:21 +0800
Subject: [PATCH] 2023-09-19

---
 src/utils/utils-custom.js |  736 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 621 insertions(+), 115 deletions(-)

diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 3d8f378..9ad1446 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -19,6 +19,8 @@
       } else if (item.type === 'tabs') {
         if (item.subtype === 'tabletabs') {
           item.subtabs.forEach(tab => {
+            if (tab.components[0].uuid === selfId) return
+            
             modules.push({
               value: tab.components[0].uuid,
               label: tab.label,
@@ -268,6 +270,7 @@
 
     if (interfaces && interfaces.length > 0) {
       interfaces.forEach(item => {
+        if (item.uuid === selfId) return
         modules.push({
           value: item.uuid,
           label: item.name
@@ -429,6 +432,9 @@
         if (item.wrap.datatype === 'public' && item.wrap.publicId) {
           item.wrap.publicId = md5(commonId + item.wrap.publicId)
         }
+        if (item.wrap.autoExec) {
+          item.wrap.autoExec = md5(commonId + item.wrap.autoExec)
+        }
 
         if (item.supNodes && item.supNodes.length > 0) {
           item.supNodes = item.supNodes.map(cell => {
@@ -514,73 +520,44 @@
           })
         }
       } else if (item.type === 'table' && item.cols) {
-        let loopCol = (col) => {
-          col.subcols = col.subcols.map(c => {
-            c.uuid = md5(commonId + c.uuid)
-  
-            if (c.type === 'colspan' && c.subcols) {
-              c = loopCol(c)
-            } else if (c.type === 'custom' && c.elements) {
-              c.elements = c.elements.map(cell => {
-                cell.uuid = this.getuuid()
+        let loopCol = (cols) => {
+          return cols.map(col => {
+            if (col.type === 'action') {
+              col.type = 'custom'
+            }
 
-                return cell
-              })
-            } else if (c.type === 'action' && c.elements) {
-              c.elements = c.elements.map(cell => {
+            col.uuid = md5(commonId + col.uuid)
+  
+            if (col.type === 'colspan' && col.subcols) {
+              col.subcols = loopCol(col.subcols)
+            } else if (col.type === 'custom' && col.elements) {
+              col.elements = col.elements.map(cell => {
                 cell.uuid = md5(commonId + cell.uuid)
 
-                if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
-                  cell.pageTemplate = ''
-                  cell.linkmenu = ''
-                }
+                if (cell.eleType === 'button') {
+                  if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) {
+                    cell.pageTemplate = ''
+                    cell.linkmenu = ''
+                  }
 
-                this.resetBtn(cell, commonId)
+                  this.resetBtn(cell, commonId)
+                }
 
                 return cell
               })
+            } else if (col.editable === 'true' && col.enter && col.enter !== '$next' && col.enter !== '$sub') {
+              if (/\$next_/.test(col.enter)) {
+                col.enter = '$next_' + md5(commonId + col.enter.split('_')[1])
+              } else {
+                col.enter = md5(commonId + col.enter)
+              }
             }
-            return c
-          })
-  
-          return col
-        }
 
-        item.cols = item.cols.map(col => {
-          col.uuid = md5(commonId + col.uuid)
-  
-          if (col.type === 'colspan' && col.subcols) {
-            col = loopCol(col)
-          } else if (col.type === 'custom' && col.elements) {
-            col.elements = col.elements.map(cell => {
-              cell.uuid = this.getuuid()
-              return cell
-            })
-          } else if (col.type === 'action' && col.elements) {
-            col.elements = col.elements.map(cell => {
-              cell.uuid = md5(commonId + cell.uuid)
-              this.resetBtn(cell, commonId)
-              return cell
-            })
-          }
-          return col
-        })
-
-        if (item.subtype === 'editable') {
-          item.cols = item.cols.map(col => {
-            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
           })
         }
+
+        item.cols = loopCol(item.cols)
       } else if (item.type === 'form') {
         item.subcards = item.subcards.map(cell => {
           cell.uuid = this.getuuid()
@@ -671,13 +648,26 @@
    * @description 鎸夐挳閲嶇疆
    */
   static resetBtn (btn, commonId) {
+    if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.execMode === 'pop')) {
+      if (btn.modal && btn.modal.fields.length > 0) {
+        btn.modal.fields = btn.modal.fields.map(m => {
+          m.uuid = this.getuuid()
+          return m
+        })
+      }
+    }
     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) {
+    if (btn.syncComponent && btn.syncComponent[0] === 'multiComponent' && btn.syncComponents) {
+      btn.syncComponents = btn.syncComponents.map(m => {
+        m.syncComId = m.syncComId.map(n => md5(commonId + n))
+        return m
+      })
+    } else if (btn.syncComponent && btn.syncComponent.length > 0) {
       btn.syncComponent = btn.syncComponent.map(m => md5(commonId + m))
     }
   }
@@ -698,7 +688,7 @@
   * @description 閲嶇疆缁勪欢閰嶇疆
   * @return {String}  item 缁勪欢淇℃伅
   */
-  static resetComponentConfig = (item) => {
+  static resetComponentConfig = (item, appType) => {
     if (item.type === 'navbar') {
       return item
     }
@@ -713,13 +703,13 @@
     // 閲嶇疆缁勪欢鍚嶇О
     let sign = this.getSignName()
     if (item.plot) { // 鍥捐〃
-      item.plot.name = item.plot.name + sign
+      item.plot.name = (item.plot.name || '') + sign
       item.name = item.plot.name
     } else if (item.wrap) { // 閫氱敤
-      item.wrap.name = item.wrap.name + sign
+      item.wrap.name = (item.wrap.name || '') + sign
       item.name = item.wrap.name
     } else if (item.setting) { // 鍒嗙粍銆佹爣绛鹃〉绛�
-      item.setting.name = item.setting.name + sign
+      item.setting.name = (item.setting.name || '') + sign
       item.name = item.setting.name
     }
 
@@ -729,6 +719,20 @@
         return cell
       })
     } else if (['card', 'carousel', 'timeline'].includes(item.type)) {
+      if (item.wrap.autoExec) {
+        item.wrap.autoExec = md5(commonId + item.wrap.autoExec)
+      }
+
+      if (appType !== 'mob') {
+        if (item.wrap.pagestyle === 'slide') {
+          item.wrap.pagestyle = 'page'
+        }
+      } else {
+        if (item.wrap.pagestyle === 'switch') {
+          item.wrap.pagestyle = 'page'
+        }
+      }
+      
       item.subcards.forEach(card => {
         card.uuid = this.getuuid()
 
@@ -743,6 +747,15 @@
           card.elements = card.elements.map(cell => {
             if (cell.eleType === 'button') {
               cell.uuid = md5(commonId + cell.uuid)
+
+              if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+                if (cell.modal && cell.modal.fields.length > 0) {
+                  cell.modal.fields = cell.modal.fields.map(m => {
+                    m.uuid = this.getuuid()
+                    return m
+                  })
+                }
+              }
             } else {
               cell.uuid = this.getuuid()
             }
@@ -756,6 +769,14 @@
           card.backElements = card.backElements.map(cell => {
             if (cell.eleType === 'button') {
               cell.uuid = md5(commonId + cell.uuid)
+              if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+                if (cell.modal && cell.modal.fields.length > 0) {
+                  cell.modal.fields = cell.modal.fields.map(m => {
+                    m.uuid = this.getuuid()
+                    return m
+                  })
+                }
+              }
             } else {
               cell.uuid = this.getuuid()
             }
@@ -774,6 +795,14 @@
         item.elements = item.elements.map(cell => {
           if (cell.eleType === 'button') {
             cell.uuid = md5(commonId + cell.uuid)
+            if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+              if (cell.modal && cell.modal.fields.length > 0) {
+                cell.modal.fields = cell.modal.fields.map(m => {
+                  m.uuid = this.getuuid()
+                  return m
+                })
+              }
+            }
           } else {
             cell.uuid = this.getuuid()
           }
@@ -781,55 +810,47 @@
         })
       }
     } else if (item.type === 'table' && item.cols) {
-      let loopCol = (col) => {
-        col.subcols = col.subcols.map(c => {
-          c.uuid = this.getuuid()
+      let loopCol = (cols) => {
+        return cols.map(col => {
+          if (col.type === 'action') {
+            col.type = 'custom'
+          }
 
-          if (c.type === 'colspan' && c.subcols) {
-            c = loopCol(c)
-          } else if (c.type === 'custom' && c.elements) {
-            c.elements = c.elements.map(cell => {
-              cell.uuid = this.getuuid()
+          col.uuid = md5(commonId + col.uuid)
+
+          if (col.type === 'colspan' && col.subcols) {
+            col.subcols = loopCol(col.subcols)
+          } else if (col.type === 'custom' && col.elements) {
+            if (sessionStorage.getItem('editMenuType') === 'popview') {
+              col.elements = col.elements.filter(c => c.eleType !== 'button' || (c.OpenType !== 'popview' && c.OpenType !== 'funcbutton'))
+            }
+            col.elements = col.elements.map(cell => {
+              cell.uuid = md5(commonId + cell.uuid)
+              if (cell.eleType === 'button') {
+                if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+                  if (cell.modal && cell.modal.fields.length > 0) {
+                    cell.modal.fields = cell.modal.fields.map(m => {
+                      m.uuid = this.getuuid()
+                      return m
+                    })
+                  }
+                }
+              }
               return cell
             })
+          } else if (col.editable === 'true' && col.enter && col.enter !== '$next' && col.enter !== '$sub') { // 鍙紪杈戣〃
+            if (/\$next_/.test(col.enter)) {
+              col.enter = '$next_' + md5(commonId + col.enter.split('_')[1])
+            } else {
+              col.enter = md5(commonId + col.enter)
+            }
           }
-          return c
-        })
 
-        return col
-      }
-
-      item.cols = item.cols.map(col => {
-        col.uuid = md5(commonId + col.uuid)
-
-        if (col.type === 'colspan' && col.subcols) {
-          col = loopCol(col)
-        } else if (col.type === 'custom' && col.elements) {
-          col.elements = col.elements.map(cell => {
-            cell.uuid = this.getuuid()
-            return cell
-          })
-        } else if (col.type === 'action' && col.elements) {
-          if (sessionStorage.getItem('editMenuType') === 'popview') {
-            col.elements = col.elements.filter(c => c.OpenType !== 'popview' && c.OpenType !== 'funcbutton')
-          }
-          col.elements = col.elements.map(cell => {
-            cell.uuid = md5(commonId + cell.uuid)
-
-            return cell
-          })
-        }
-        return col
-      })
-
-      if (item.subtype === 'editable') {
-        item.cols = item.cols.map(col => {
-          if (col.editable === 'true' && col.enter) {
-            col.enter = md5(commonId + col.enter)
-          }
           return col
         })
       }
+
+      item.cols = loopCol(item.cols)
     } else if (item.type === 'form') {
       item.subcards = item.subcards.map(cell => {
         cell.uuid = this.getuuid()
@@ -851,6 +872,14 @@
       }
       item.action = item.action.map(cell => {
         cell.uuid = md5(commonId + cell.uuid)
+        if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+          if (cell.modal && cell.modal.fields.length > 0) {
+            cell.modal.fields = cell.modal.fields.map(m => {
+              m.uuid = this.getuuid()
+              return m
+            })
+          }
+        }
 
         return cell
       })
@@ -900,6 +929,178 @@
 
     return item
   }
+}
+
+/**
+ * @description 鏍煎紡鍖栨悳绱㈡潯浠�
+ */
+export function formatSearch (searches) {
+  if (!searches) return []
+
+  let newsearches = []
+  searches.forEach(item => {
+    if (!item.field) return
+
+    if (item.type === 'group') {
+      newsearches.push({
+        key: item.field,
+        match: '',
+        type: item.type,
+        value: 'customized',
+        forbid: true
+      }, {
+        key: item.datefield,
+        match: 'between',
+        type: 'daterange',
+        value: '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000',
+        forbid: item.query === 'false'
+      })
+    } else {
+      let value = item.initval
+      let type = item.type
+
+      if (item.type === 'date') {
+        value = '1949-10-01 00:00:00.000'
+      } else if (item.type === 'datemonth') {
+        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
+      } else if (item.type === 'dateweek') {
+        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
+      } else if (item.type === 'daterange') {
+        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
+      } else if (item.type === 'range') {
+        value = `${item.minValue},${item.maxValue}`
+      } else if (item.type === 'multiselect' || (item.type === 'checkcard' && item.multiple === 'true')) {
+        type = 'multi'
+        value = '0'
+      } else {
+        value = '0'
+      }
+      newsearches.push({
+        key: item.field,
+        match: item.match,
+        type: type,
+        value: value,
+        precision: item.precision || 'day',
+        forbid: item.query === 'false'
+      })
+    }
+  })
+
+  return newsearches
+}
+
+/**
+ * @description 鎷兼帴where鏉′欢
+ */
+export function joinMainSearchkey (searches) {
+  if (!searches || searches.length === 0) return ''
+
+  let searchText = []
+  searches.forEach(item => {
+    if (item.forbid) return
+    
+    if (item.type === 'text' || item.type === 'select') { // 缁煎悎鎼滅储锛屾枃鏈垨涓嬫媺锛屾墍鏈夊瓧娈垫嫾鎺�
+      let str = item.match === 'like' || item.match === 'not like' ? '%' : ''
+      let fields = item.key.split(',').map(field => {
+        return field + ' ' + item.match + ' \'' + str + item.value + str + '\''
+      })
+
+      searchText.push('(' + fields.join(' OR ') + ')')
+    } else if (item.type === 'checkcard') {
+      let str = item.match === 'like' || item.match === 'not like' ? '%' : ''
+
+      searchText.push('(' + item.key + ' ' + item.match + ' \'' + str + item.value + str + '\')')
+    } else if (item.type === 'multi') {
+      searchText.push(`('${item.value}' ${item.match} '%'+${item.key}+'%')`)
+    } else if (item.type === 'date') {
+      searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')')
+    } else if (item.type === 'datemonth' || item.type === 'dateweek' || item.type === 'range') {
+      let val = item.value.split(',')
+      searchText.push('(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')')
+    } else if (item.type === 'daterange') {
+      let val = item.value.split(',')
+
+      let _skey = item.key
+      let _ekey = item.key
+
+      if (/,/.test(item.key)) {
+        _skey = item.key.split(',')[0]
+        _ekey = item.key.split(',')[1]
+      }
+
+      searchText.push('(' + _skey + ' >= \'' + val[0] + '\' AND ' + _ekey + ' < \'' + val[1] + '\')')
+    } else {
+      searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')')
+    }
+  })
+
+  return searchText.join(' AND ')
+}
+
+/**
+ * @description 鑾峰彇鎼滅储姝e垯鏇挎崲
+ */
+export function getSearchRegs (searches) {
+  if (!searches) return []
+
+  let options = []
+  let fieldmap = new Map()
+  searches.forEach(item => {
+    if (item.type === 'date') {
+      if (fieldmap.has(item.key)) {
+        options.push({
+          reg: new RegExp('@' + item.key + '1@', 'ig'),
+          value: `'${item.value}'`
+        })
+      } else {
+        fieldmap.set(item.key, true)
+        options.push({
+          reg: new RegExp('@' + item.key + '@', 'ig'),
+          value: `'${item.value}'`
+        })
+      }
+    } else if (['dateweek', 'datemonth', 'range'].includes(item.type)) {
+      let val = item.value.split(',')
+      options.push({
+        reg: new RegExp('@' + item.key + '@', 'ig'),
+        value: `'${val[0]}'`
+      }, {
+        reg: new RegExp('@' + item.key + '1@', 'ig'),
+        value: `'${val[1]}'`
+      })
+    } else if (item.type === 'daterange') {
+      let val = item.value.split(',')
+      let _skey = item.key
+      let _ekey = item.key + '1'
+
+      if (/,/.test(item.key)) {
+        _skey = item.key.split(',')[0]
+        _ekey = item.key.split(',')[1]
+      }
+
+      options.push({
+        reg: new RegExp('@' + _skey + '@', 'ig'),
+        value: `'${val[0]}'`
+      }, {
+        reg: new RegExp('@' + _ekey + '@', 'ig'),
+        value: `'${val[1]}'`
+      })
+    } else if (item.type === 'text' || item.type === 'select') {
+      item.key.split(',').forEach(field => {
+        options.push({
+          reg: new RegExp('@' + field + '@', 'ig'),
+          value: `'${item.value}'`
+        })
+      })
+    } else {
+      options.push({
+        reg: new RegExp('@' + item.key + '@', 'ig'),
+        value: `'${item.value}'`
+      })
+    }
+  })
+
+  return options
 }
 
 /**
@@ -1028,23 +1229,31 @@
     })
   }
 
-  config.cols && config.cols.forEach(col => {
-    if (col.type === 'action') {
-      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})
-          } else if (cell.config && cell.config.$tables) {
-            tables.push(...cell.config.$tables)
-          }
+  if (config.cols) {
+    let loopCol = (cols) => {
+      cols.forEach(col => {
+        if (col.type === 'colspan') {
+          loopCol(col.subcols)
+        } else if (col.type === 'custom') {
+          col.elements.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) {
+                pops.push({...cell, parentId: config.uuid})
+              } else if (cell.config && cell.config.$tables) {
+                tables.push(...cell.config.$tables)
+              }
+            }
+          })
         }
       })
     }
-  })
+    loopCol(config.cols)
+  }
 
   config.elements && config.elements.forEach(cell => {
     if (cell.eleType !== 'button') return
@@ -1184,4 +1393,301 @@
   tables = Array.from(new Set(tables))
 
   return tables
+}
+
+/**
+ * @description 鑾峰彇鎺ュ彛鍙婂嚱鏁�
+ */
+export function getFuncsAndInters (config) {
+  let inters = 'false'
+
+  let filterBtn = (cell) => {
+    if ((cell.intertype === 'outer' && cell.sysInterface !== 'true') || cell.intertype === 'custom') {
+      inters = 'true'
+    }
+  }
+
+  let traversal = (components) => {
+    if (!components || inters === 'true') return
+
+    components.forEach(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          traversal(tab.components)
+        })
+      } else if (item.type === 'group') {
+        traversal(item.components)
+      } else {
+        if (item.setting && item.setting.interType === 'outer' && item.setting.sysInterface !== 'true') {
+          inters = 'true'
+        }
+
+        if (item.action) {
+          item.action.forEach(cell => {
+            if (cell.OpenType === 'popview') {
+              if (cell.config) {
+                traversal(cell.config.components)
+              }
+            } else {
+              filterBtn(cell)
+            }
+          })
+        }
+
+        if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') {
+          item.subcards.forEach(card => {
+            card.elements && card.elements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+              
+              if (cell.OpenType === 'popview') {
+                if (cell.config) {
+                  traversal(cell.config.components)
+                }
+              } else {
+                filterBtn(cell)
+              }
+            })
+            card.backElements && card.backElements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+              
+              if (cell.OpenType === 'popview') {
+                if (cell.config) {
+                  traversal(cell.config.components)
+                }
+              } else {
+                filterBtn(cell)
+              }
+            })
+          })
+        } else if (item.type === 'balcony') {
+          item.elements && item.elements.forEach(cell => {
+            if (cell.eleType !== 'button') return
+            
+            if (cell.OpenType === 'popview') {
+              if (cell.config) {
+                traversal(cell.config.components)
+              }
+            } else {
+              filterBtn(cell)
+            }
+          })
+        } else if (item.type === 'table') {
+          let loopCol = (cols) => {
+            cols.forEach(col => {
+              if (col.type === 'colspan') {
+                loopCol(col.subcols)
+              } else if (col.type === 'custom') {
+                col.elements.forEach(cell => {
+                  if (cell.eleType !== 'button') return
+                  
+                  if (cell.OpenType === 'popview') {
+                    if (cell.config) {
+                      traversal(cell.config.components)
+                    }
+                  } else {
+                    filterBtn(cell)
+                  }
+                })
+              }
+            })
+          }
+          loopCol(item.cols)
+        } else if (item.type === 'form') {
+          item.subcards.forEach(group => {
+            filterBtn(group.subButton)
+          })
+        }
+      }
+    })
+  }
+
+  if (config.interfaces) {
+    config.interfaces.forEach(item => {
+      if (item.setting && item.setting.interType === 'outer' && item.setting.sysInterface !== 'true') {
+        inters = 'true'
+      }
+    })
+  }
+
+  traversal(config.components)
+
+  return inters
+}
+
+/**
+ * @description 妫�娴嬬粍浠跺唴瀹�
+ */
+export function checkComponent (card) {
+  let errors = []
+  let columns = []
+
+  if (card.$c_ds) {
+    columns = card.columns.map(c => c.field)
+    if (card.setting.interType === 'system' && card.setting.execute !== 'false' && !card.setting.dataresource) {
+      errors.push({ level: 0, detail: '鏈缃暟鎹簮锛�'})
+    } else if (card.setting.interType === 'system' && card.setting.execute === 'false' && card.scripts.filter(script => script.status !== 'false').length === 0) {
+      errors.push({ level: 0, detail: '鏁版嵁婧愪腑鏃犲彲鐢ㄨ剼鏈紒'})
+    } else if (!card.setting.primaryKey) {
+      errors.push({ level: 0, detail: '鏈缃富閿紒'})
+    } else if (!columns.includes(card.setting.primaryKey)) {
+      errors.push({ level: 0, detail: '涓婚敭宸插け鏁堬紒'})
+    } else if (card.subtype === 'dualdatacard') {                     // 鍙岄噸鍗�
+      if (!card.setting.subKey) {
+        errors.push({ level: 0, detail: '鏈缃瓙琛ㄤ富閿紒'})
+      } else if (!card.setting.subBID) {
+        errors.push({ level: 0, detail: '鏈缃瓙琛˙ID锛�'})
+      } else if (!card.setting.supModule) {
+        errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
+      }
+    } else if (card.type === 'card' && card.subtype === 'datacard') { // 鏁版嵁鍗★紝鍙兘鏈夊涓婄骇
+      if (card.wrap.supType !== 'multi' && !card.setting.supModule) {
+        errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
+      }
+    } else if (card.type !== 'balcony' && !card.setting.supModule) {  // 鎮诞妗嗕笂绾х粍浠堕渶鍗曠嫭璁剧疆
+      errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
+    }
+  } else if ((card.type === 'balcony' || card.type === 'card') && card.wrap.datatype === 'public') {
+    columns = card.columns.map(c => c.field)
+  }
+
+  let doubleClick = ''
+  if (card.type === 'table') {
+    doubleClick = card.wrap.doubleClick || ''
+  }
+
+  if (card.$c_ac) {
+    card.action.forEach(cell => {
+      if (cell.hidden === 'true' || cell.origin) return
+      // if (cell.OpenType === 'popview') {
+      //   if (!cell.config) {
+      //     errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑寮圭獥鏍囩灏氭湭璁剧疆`})
+      //   } else if (!cell.config.enabled) {
+      //     errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑寮圭獥鏍囩鏈惎鐢╜})
+      //   }
+      // }
+      if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+        if (!cell.modal || cell.modal.fields.length === 0) {
+          errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`})
+        }
+      } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
+        errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣})
+      } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
+        errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
+      }
+      if (doubleClick === cell.uuid) {
+        doubleClick = ''
+      }
+    })
+  }
+
+  if (card.$c_sc) {
+    card.subcards.forEach((item, i) => {
+      let linkbtn = item.setting.linkbtn || ''
+      item.elements.forEach(cell => {
+        if (cell.eleType === 'button') {
+          if (cell.hidden === 'true') return
+          if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+            if (!cell.modal || cell.modal.fields.length === 0) {
+              errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`})
+            }
+          } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
+            errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣})
+          } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
+            errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
+          }
+          if (linkbtn && linkbtn === cell.uuid) {
+            linkbtn = ''
+          }
+        } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) {
+          errors.push({ level: 1, detail: `鍗$墖涓姩鎬佸瓧娈碘��${cell.field}鈥濇棤鏁坄})
+        }
+      })
+  
+      if (card.subtype === 'dualdatacard' || (item.setting.type === 'multi' && item.backElements && sessionStorage.getItem('appType') !== 'mob')) {
+        item.backElements.forEach(cell => {
+          if (cell.eleType === 'button') {
+            if (cell.hidden === 'true') return
+            if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+              if (!cell.modal || cell.modal.fields.length === 0) {
+                errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`})
+              }
+            } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
+              errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣})
+            } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
+              errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
+            }
+            if (linkbtn && linkbtn === cell.uuid) {
+              linkbtn = ''
+            }
+          } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) {
+            errors.push({ level: 1, detail: `鍗$墖涓姩鎬佸瓧娈碘��${cell.field}鈥濇棤鏁坄})
+          }
+        })
+      }
+  
+      if (linkbtn) {
+        errors.push({ level: 1, detail: `绗�${i + 1}寮犲崱鐗囦腑缁戝畾鎸夐挳宸插垹闄})
+      }
+    })
+
+    if (card.subcards.length === 0) {
+      errors.push({ level: 0, detail: '鍗$墖涓嶅彲涓虹┖锛�'})
+    }
+  }
+
+  if (card.$c_el) {
+    card.elements.forEach(cell => {
+      if (cell.eleType === 'button') {
+        if (cell.hidden === 'true') return
+        if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+          if (!cell.modal || cell.modal.fields.length === 0) {
+            errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`})
+          }
+        } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
+          errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣})
+        } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
+          errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
+        }
+      } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) {
+        errors.push({ level: 1, detail: `鍗$墖涓姩鎬佸瓧娈碘��${cell.field}鈥濇棤鏁坄})
+      }
+    })
+  }
+
+  if (card.$c_cl) {
+    card.cols.forEach(col => {
+      if (col.type === 'custom') {
+        col.elements.forEach(cell => {
+          if (cell.eleType === 'button') {
+            if (cell.hidden === 'true') return
+            if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
+              if (!cell.modal || cell.modal.fields.length === 0) {
+                errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`})
+              }
+            } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
+              errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣})
+            } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
+              errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
+            }
+
+            if (doubleClick === cell.uuid) {
+              doubleClick = ''
+            }
+          } else {
+            if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) {
+              errors.push({ level: 1, detail: `鏄剧ず鍒椻��${col.label}鈥濅腑鍔ㄦ�佸瓧娈碘��${cell.field}鈥濇棤鏁坄})
+            }
+          }
+        })
+      } else if (col.field && !columns.includes(col.field)) {
+        errors.push({ level: 1, detail: `鏄剧ず鍒椻��${col.label}鈥濅腑瀛楁鈥�${col.field}鈥濇棤鏁坄})
+      }
+    })
+
+    if (doubleClick) {
+      errors.push({ level: 1, detail: `缁戝畾鐨勫弻鍑绘寜閽凡鍒犻櫎`})
+    }
+  }
+
+  return errors
 }
\ No newline at end of file

--
Gitblit v1.8.0