From 88f178df654b08411470a7eab75b3d5fed8817c0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 03 十一月 2023 01:37:45 +0800
Subject: [PATCH] Merge branch 'develop'

---
 src/utils/utils-custom.js |  416 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 364 insertions(+), 52 deletions(-)

diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 6cb5386..6e80931 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -270,6 +270,7 @@
 
     if (interfaces && interfaces.length > 0) {
       interfaces.forEach(item => {
+        if (item.uuid === selfId) return
         modules.push({
           value: item.uuid,
           label: item.name
@@ -544,8 +545,12 @@
 
                 return cell
               })
-            } else if (col.editable === 'true' && col.enter) {
-              col.enter = md5(commonId + col.enter)
+            } 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 col
@@ -553,6 +558,13 @@
         }
 
         item.cols = loopCol(item.cols)
+
+        if (item.colsCtrls) {
+          item.colsCtrls = item.colsCtrls.map(col => {
+            col.cols = col.cols.map(f => md5(commonId + f))
+            return col
+          })
+        }
       } else if (item.type === 'form') {
         item.subcards = item.subcards.map(cell => {
           cell.uuid = this.getuuid()
@@ -698,13 +710,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
     }
 
@@ -833,8 +845,12 @@
               }
               return cell
             })
-          } else if (col.editable === 'true' && col.enter) { // 鍙紪杈戣〃
-            col.enter = md5(commonId + col.enter)
+          } 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 col
@@ -842,6 +858,13 @@
       }
 
       item.cols = loopCol(item.cols)
+
+      if (item.colsCtrls) {
+        item.colsCtrls = item.colsCtrls.map(col => {
+          col.cols = col.cols.map(f => md5(commonId + f))
+          return col
+        })
+      }
     } else if (item.type === 'form') {
       item.subcards = item.subcards.map(cell => {
         cell.uuid = this.getuuid()
@@ -910,6 +933,13 @@
     if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
       item.setting.supModule = ''
     }
+    
+    if (item.wrap && item.wrap.supType === 'multi') {
+      item.wrap.supType = 'single'
+
+      delete item.supNodes
+    }
+    
     if (item.wrap && item.wrap.supModule) {
       item.wrap.supModule = ''
     }
@@ -920,6 +950,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.length > 0 ? 'where ' + 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
 }
 
 /**
@@ -1215,6 +1417,125 @@
 }
 
 /**
+ * @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) {
@@ -1246,6 +1567,11 @@
     } else if (card.type !== 'balcony' && !card.setting.supModule) {  // 鎮诞妗嗕笂绾х粍浠堕渶鍗曠嫭璁剧疆
       errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
     }
+    if (card.subtype === 'dualdatacard' && card.subColumns) {
+      card.subColumns.forEach(col => {
+        columns.push(col.field)
+      })
+    }
   } else if ((card.type === 'balcony' || card.type === 'card') && card.wrap.datatype === 'public') {
     columns = card.columns.map(c => c.field)
   }
@@ -1253,6 +1579,31 @@
   let doubleClick = ''
   if (card.type === 'table') {
     doubleClick = card.wrap.doubleClick || ''
+  }
+
+  let checkBtn = (cell) => {
+    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') {
+      if (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0) {
+        errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
+      } else if (cell.intertype === 'system' && cell.verify.dataType !== 'custom' && card.$c_ds && columns.length > 0) {
+        let cols = []
+        cell.verify.columns.forEach(col => {
+          if (col.output === 'false' || col.Column === '$Index') return
+          if (!columns.includes(col.Column)) {
+            cols.push(col.Column)
+          }
+        })
+        if (cols.length) {
+          errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楋紙${cols.join('銆�')}锛夊湪瀛楁闆嗕腑涓嶅瓨鍦紒`})
+        }
+      }
+    }
   }
 
   if (card.$c_ac) {
@@ -1265,15 +1616,7 @@
       //     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}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
-      }
+      checkBtn(cell)
       if (doubleClick === cell.uuid) {
         doubleClick = ''
       }
@@ -1286,15 +1629,7 @@
       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}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
-          }
+          checkBtn(cell)
           if (linkbtn && linkbtn === cell.uuid) {
             linkbtn = ''
           }
@@ -1307,15 +1642,7 @@
         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}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
-            }
+            checkBtn(cell)
             if (linkbtn && linkbtn === cell.uuid) {
               linkbtn = ''
             }
@@ -1339,15 +1666,7 @@
     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}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
-        }
+        checkBtn(cell)
       } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) {
         errors.push({ level: 1, detail: `鍗$墖涓姩鎬佸瓧娈碘��${cell.field}鈥濇棤鏁坄})
       }
@@ -1360,15 +1679,8 @@
         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}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣})
-            }
+
+            checkBtn(cell)
 
             if (doubleClick === cell.uuid) {
               doubleClick = ''

--
Gitblit v1.8.0