From 0847aeed380492bafaf5b27a49ac4e4b77a819b1 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 08 七月 2021 16:39:09 +0800
Subject: [PATCH] 2021-07-08

---
 src/menu/datasource/index.jsx                                                     |  150 +++++++++++++++++++-----
 src/menu/datasource/verifycard/utils.jsx                                          |   14 +
 src/mob/searchconfig/settingform/index.jsx                                        |    2 
 src/mob/searchconfig/index.jsx                                                    |   87 +++++++++++++-
 src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx |    6 
 src/mob/searchconfig/settingform/index.scss                                       |    7 +
 src/tabviews/zshare/topSearch/index.jsx                                           |    4 
 src/menu/datasource/verifycard/index.jsx                                          |   38 ++++-
 src/utils/utils.js                                                                |   15 ++
 9 files changed, 261 insertions(+), 62 deletions(-)

diff --git a/src/menu/datasource/index.jsx b/src/menu/datasource/index.jsx
index 01d1c81..8115d65 100644
--- a/src/menu/datasource/index.jsx
+++ b/src/menu/datasource/index.jsx
@@ -16,6 +16,7 @@
 
   state = {
     dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
+    appType: sessionStorage.getItem('appType'),
     sourcelist: [],
     mainSearch: [],
     visible: false,
@@ -35,42 +36,129 @@
 
   editDataSource = () => {
     const { config } = this.props
+    const { appType } = this.state
 
     let search = []
-    let parents = []
-    let _conf = config
-    let getParents = (box) => {
-      box.components.forEach(item => {
-        if (item.type !== 'tabs') return
+    let menu = fromJS(window.GLOB.customMenu).toJS()
 
-        item.subtabs.forEach(tab => {
-          if (_conf.parentId === tab.parentId && _conf.tabId === tab.uuid) {
-            parents.unshift(tab)
-            _conf = item
-
-            if (_conf.parentId && _conf.tabId) {
-              getParents(tab)
-            }
-          } else {
-            getParents(tab)
-          }
-        })
-      })
-    }
-
-    if (config.parentId && config.tabId) {
-      getParents(window.GLOB.customMenu)
-    }
-
-    parents.unshift(window.GLOB.customMenu)
-
-    parents.forEach(parent => {
-      parent.components.forEach(item => {
-        if (item.type === 'search') {
-          search = item.search
+    if (appType === 'mob') {
+      let ms = null
+      menu.components.forEach(item => {
+        if (item.type === 'topbar' && (item.wrap.type === 'search' || (item.wrap.type === 'navbar' && item.wrap.search === 'true'))) {
+          ms = item.search
         }
       })
-    })
+
+      if (config.floor > 1) {
+        let _search = null
+        let filterComponent = (box) => {
+          box.components.forEach(item => {
+            if (_search) return
+
+            if (item.uuid === config.uuid) {
+              _search = box.slist.pop()
+            } else if (item.type === 'group') {
+              item.components.forEach(m => {
+                if (m.uuid !== config.uuid) return
+                _search = box.slist.pop()
+              })
+            } else if (item.type === 'tabs') {
+              let able = item.setting.display === 'inline-block' && item.setting.position === 'top'
+              item.subtabs.forEach(tab => {
+                if (able && tab.hasSearch === 'icon' && tab.search) {
+                  tab.slist = [...box.slist, tab.search]
+                } else {
+                  tab.slist = [...box.slist]
+                }
+                
+                filterComponent(tab)
+              })
+            }
+          })
+        }
+        menu.slist = []
+        filterComponent(menu)
+
+        if (_search) {
+          ms = _search
+        }
+      }
+
+      if (ms) {
+        if (ms.setting.type === 'search') {
+          search.push({
+            type: 'text',
+            label: '鎼滅储鏍�',
+            field: ms.setting.field,
+            match: ms.setting.match,
+            required: ms.setting.required,
+            value: ms.setting.initval || ''
+          })
+        }
+        ms.fields.forEach(item => {
+          if (item.type === 'range') {
+            item.initval = `${item.minValue},${item.maxValue}`
+          }
+          search.push(item)
+        })
+
+        ms.groups.forEach(group => {
+          if (group.setting.type === 'search') {
+            search.push({
+              type: 'text',
+              label: group.wrap.name,
+              field: group.setting.field,
+              match: group.setting.match,
+              required: group.setting.required,
+              value: group.setting.initval || ''
+            })
+          }
+
+          group.fields.forEach(item => {
+            if (item.type === 'range') {
+              item.initval = `${item.minValue},${item.maxValue}`
+            }
+            search.push(item)
+          })
+        })
+      }
+    } else {
+      if (config.floor > 1) {
+        let _search = null
+        let filterComponent = (box) => {
+          box.components.forEach(item => {
+            if (_search) return
+
+            if (item.type === 'search') {
+              box.slist = [...box.slist, item.search]
+            } else if (item.uuid === config.uuid) {
+              _search = box.slist.pop()
+            } else if (item.type === 'group') {
+              item.components.forEach(m => {
+                if (m.uuid !== config.uuid) return
+                _search = box.slist.pop()
+              })
+            } else if (item.type === 'tabs') {
+              item.subtabs.forEach(tab => {
+                tab.slist = [...box.slist]
+                filterComponent(tab)
+              })
+            }
+          })
+        }
+        menu.slist = []
+        filterComponent(menu)
+
+        if (_search) {
+          search = _search
+        }
+      } else {
+        menu.components.forEach(item => {
+          if (item.type !== 'search') return
+          search = item.search
+        })
+      }
+    }
 
     this.setState({
       visible: true,
diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx
index 0d6dcc5..2e247f9 100644
--- a/src/menu/datasource/verifycard/index.jsx
+++ b/src/menu/datasource/verifycard/index.jsx
@@ -34,6 +34,7 @@
     initsql: '',          // sql楠岃瘉鏃跺彉閲忓0鏄庡強璧嬪��
     usefulfields: '',
     defaultsql: '',       // 榛樿Sql
+    defaultSearch: '',
     systemScripts: [],
     colColumns: [
       {
@@ -208,11 +209,18 @@
       })
     }
 
+    let _search = this.formatSearch(search)
+    _search = Utils.joinMainSearchkey(_search)
+
+    _search = _search.replace(/@\$@/ig, '')
+    _search = _search ? 'where ' + _search : ''
+
     this.setState({
       scripts,
       columns: fromJS(config.columns).toJS(),
       setting: _setting,
       searches: search,
+      defaultSearch: _search,
       varMarks: Marks
     })
 
@@ -386,8 +394,15 @@
           return
         }
 
+        let _search = this.formatSearch(search)
+        _search = Utils.joinMainSearchkey(_search)
+
+        _search = _search.replace(/@\$@/ig, '')
+        _search = _search ? 'where ' + _search : ''
+
         this.setState({
           searches: search,
+          defaultSearch: _search,
           setting: res
         }, () => {
           this.sqlverify(() => { // 楠岃瘉鎴愬姛
@@ -441,15 +456,9 @@
   }
 
   getdefaultSql = () => {
-    const { columns, searches, setting } = this.state
+    const { columns, setting, defaultSearch } = this.state
     let defaultsql = ''
     let arr_field = columns.map(col => col.field).join(',')
-
-    let _search = this.formatSearch(searches)
-    _search = Utils.joinMainSearchkey(_search)
-
-    _search = _search.replace(/@\$@/ig, '')
-    _search = _search ? 'where ' + _search : ''
 
     if (setting.dataresource) {
       let _dataresource = setting.dataresource
@@ -458,7 +467,7 @@
         _dataresource = '(' + _dataresource + ') tb'
       }
 
-      defaultsql = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${_search}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
+      defaultsql = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${defaultSearch}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
     }
 
     this.setState({defaultsql})
@@ -499,6 +508,8 @@
         item.value = moment().format('YYYY-MM-DD')
       } else if (item.type === 'daterange') {
         item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
+      } else if (item.type === 'range') {
+
       } else if (item.type === 'multiselect' || (item.type === 'checkcard' && search.multiple === 'true')) {
         item.type = 'multi'
         item.value = '@$@'
@@ -534,8 +545,15 @@
             return
           }
 
+          let _search = this.formatSearch(search)
+          _search = Utils.joinMainSearchkey(_search)
+
+          _search = _search.replace(/@\$@/ig, '')
+          _search = _search ? 'where ' + _search : ''
+
           this.setState({
             searches: search,
+            defaultSearch: _search,
             setting: res
           }, () => {
             this.sqlverify(() => { resolve({setting: res, columns, scripts }) }, reject, false)
@@ -569,7 +587,7 @@
   }
 
   sqlverify = (resolve, reject, change = false, testScripts) => {
-    const { columns, setting, scripts, searches } = this.state
+    const { columns, setting, scripts, searches, defaultSearch } = this.state
 
     let _scripts = scripts.filter(item => item.status !== 'false')
 
@@ -587,7 +605,7 @@
     }
 
     if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) {
-      let result = SettingUtils.getDebugSql(setting, _scripts, columns, searches)
+      let result = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch)
 
       if (result.error) {
         notification.warning({
diff --git a/src/menu/datasource/verifycard/utils.jsx b/src/menu/datasource/verifycard/utils.jsx
index 3b3b266..fa55bc3 100644
--- a/src/menu/datasource/verifycard/utils.jsx
+++ b/src/menu/datasource/verifycard/utils.jsx
@@ -7,7 +7,7 @@
    * @return {Object}  setting       椤甸潰璁剧疆
    * @return {Array}   columns       鏄剧ず瀛楁
    */
-  static getDebugSql (setting, scripts, columns, searches = []) {
+  static getDebugSql (setting, scripts, columns, searches = [], defSearch) {
     let sql = ''
     let error = ''
     let _dataresource = ''
@@ -77,7 +77,7 @@
           reg: new RegExp('@' + item.datefield + '1@', 'ig')
         })
       }
-      if (['dateweek', 'datemonth', 'daterange'].includes(item.type)) {
+      if (['dateweek', 'datemonth', 'daterange', 'range'].includes(item.type)) {
         _regoptions.push({
           var: new RegExp('@' + item.field, 'ig'),
           reg: new RegExp('@' + item.field + '@', 'ig')
@@ -114,7 +114,7 @@
       }
     })
 
-    let _search = ''
+    let _search = defSearch
 
     if (setting.queryType === 'statistics' && _dataresource) {
       _regoptions.forEach(item => {
@@ -136,7 +136,7 @@
       }, {
         reg: new RegExp('@FullName@', 'ig'),
       })
-      if (setting.laypage !== 'false') {
+      if (setting.laypage === 'true') {
         _regoptions.push({
           reg: new RegExp('@pageSize@', 'ig'),
         }, {
@@ -176,7 +176,11 @@
         _dataresource = '(' + _dataresource + ') tb'
       }
 
-      _dataresource = `select${setting.laypage !== 'false' ?  ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage !== 'false' ?  'where rows > 0' : ''} order by tmptable.rows`
+      if (setting.order) {
+        _dataresource = `select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage === 'true' ?  'where rows > 0' : ''} order by tmptable.rows`
+      } else {
+        _dataresource = `select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from ${_dataresource} ${_search}`
+      }
     }
 
     if (_customScript) {
diff --git a/src/mob/searchconfig/index.jsx b/src/mob/searchconfig/index.jsx
index 2d7aa16..74d36b4 100644
--- a/src/mob/searchconfig/index.jsx
+++ b/src/mob/searchconfig/index.jsx
@@ -148,20 +148,49 @@
    * 3銆侀�氳繃loading鍒锋柊
    */
   handleSubmit = () => {
+    const { config } = this.state
     this.formRef.handleConfirm().then(res => {
       let _group = fromJS(this.state.group).toJS()
-      let fieldrepet = false // 瀛楁閲嶅
-
+      
       _group.fields = _group.fields.map(item => {
-        if (item.uuid !== res.uuid && item.field.toLowerCase() === res.field.toLowerCase()) {
-          fieldrepet = true
-        }
-
         if (item.uuid === res.uuid) {
           return res
         } else {
           return item
         }
+      })
+
+      let fieldrepet = false // 瀛楁閲嶅
+      let lowerField = res.field.toLowerCase()
+
+      if (config.setting.field) {
+        let m = config.setting.field.toLowerCase().split(',')
+        if (m.includes(lowerField)) {
+          fieldrepet = true
+        }
+      }
+      config.fields.forEach(item => {
+        if (item.uuid === res.uuid) return
+        if (res.type === 'date' && item.type === 'date') return
+        if (item.field.toLowerCase() === lowerField) {
+          fieldrepet = true
+        }
+      })
+
+      config.groups.forEach(group => {
+        if (group.setting.field) {
+          let m = group.setting.field.toLowerCase().split(',')
+          if (m.includes(lowerField)) {
+            fieldrepet = true
+          }
+        }
+        group.fields.forEach(item => {
+          if (item.uuid === res.uuid) return
+          if (res.type === 'date' && item.type === 'date') return
+          if (item.field.toLowerCase() === lowerField) {
+            fieldrepet = true
+          }
+        })
       })
 
       if (fieldrepet) {
@@ -285,8 +314,54 @@
    * @description 淇濆瓨鍒嗙粍璁剧疆
    */
   settingSave = () => {
+    const { config } = this.state
     this.settingRef.handleConfirm().then(res => {
       let _group = {...this.state.group, setting: res}
+      let lowers = _group.setting.field ? _group.setting.field.toLowerCase() : ''
+
+      if (lowers) {
+        let fieldrepet = false // 瀛楁閲嶅
+        lowers = lowers.split(',')
+        let length = lowers.length
+
+        if (_group.floor !== 1 && config.setting.field) {
+          let m = config.setting.field.toLowerCase().split(',')
+          if (Array.from(new Set([...m, ...lowers])).length < m.length + length) {
+            fieldrepet = true
+          }
+        }
+
+        config.fields.forEach(item => {
+          if (lowers.includes(item.field.toLowerCase())) {
+            fieldrepet = true
+          }
+        })
+
+        config.groups.forEach(group => {
+          if (_group.uuid === group.uuid) return
+          if (group.setting.field) {
+            let m = group.setting.field.toLowerCase().split(',')
+            if (Array.from(new Set([...m, ...lowers])).length < m.length + length) {
+              fieldrepet = true
+            }
+          }
+          group.fields.forEach(item => {
+            if (lowers.includes(item.field.toLowerCase())) {
+              fieldrepet = true
+            }
+          })
+        })
+
+        if (fieldrepet) {
+          notification.warning({
+            top: 92,
+            message: '瀛楁宸插瓨鍦紒',
+            duration: 10
+          })
+          return
+        }
+      }
+
       this.setState({
         group: _group,
         settingVisible: false
diff --git a/src/mob/searchconfig/settingform/index.jsx b/src/mob/searchconfig/settingform/index.jsx
index 8468602..c5a5443 100644
--- a/src/mob/searchconfig/settingform/index.jsx
+++ b/src/mob/searchconfig/settingform/index.jsx
@@ -69,7 +69,7 @@
     }
 
     return (
-      <Form {...formItemLayout} className="ant-advanced-search-form modal-setting-form">
+      <Form {...formItemLayout} className="mob-search-setting-form">
         <Row gutter={24}>
           <Col span={12}>
             <Form.Item label="椤堕儴鏍峰紡">
diff --git a/src/mob/searchconfig/settingform/index.scss b/src/mob/searchconfig/settingform/index.scss
index 9a74987..f0d30ef 100644
--- a/src/mob/searchconfig/settingform/index.scss
+++ b/src/mob/searchconfig/settingform/index.scss
@@ -1,4 +1,4 @@
-.ant-advanced-search-form.modal-setting-form {
+.mob-search-setting-form {
   .textarea {
     .ant-form-item-label {
       width: 16.3%;
@@ -15,4 +15,9 @@
     position: relative;
     left: -3px;
   }
+  .ant-col.ant-col-12 {
+    display: inline-block;
+    float: none;
+    vertical-align: top;
+  }
 }
\ No newline at end of file
diff --git a/src/tabviews/zshare/topSearch/index.jsx b/src/tabviews/zshare/topSearch/index.jsx
index d97e992..c16a881 100644
--- a/src/tabviews/zshare/topSearch/index.jsx
+++ b/src/tabviews/zshare/topSearch/index.jsx
@@ -144,10 +144,6 @@
               data_sql: Utils.formatOptions(_option.sql)
             })
           } else { // 鍚堝苟璇锋眰锛屽尯鍒嗘湰鍦板強绯荤粺
-            // 澶栬仈鏁版嵁搴撴浛鎹�
-            if (window.GLOB.externalDatabase !== null) {
-              _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase)
-            }
             if (item.database === 'sso') {
               mainItems.push(`select '${item.field}' as obj_name,'${_option.field}' as arr_field,'${window.btoa(window.encodeURIComponent(_option.sql))}' as LText`)
             } else {
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
index 26c87fe..dd5f292 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
@@ -229,8 +229,10 @@
         fields = fields + ','
       }
 
-      let database = btn.sheet.match(/(.*)\.(.*)\./ig) || ''
-      let sheet = btn.sheet.replace(/(.*)\.(.*)\./ig, '')
+      let database = btn.sheet.match(/(.*)\.(.*)\.|@db@/ig) || ''
+      let sheet = btn.sheet.replace(/(.*)\.(.*)\.|@db@/ig, '')
+
+      database = database ? (database[0] || '') : ''
 
       _value = `Insert into ${database}${sheet} (${fields}createuserid,createuser,createstaff,bid)\nSelect ${fields}@userid@,@username,@fullname,@BID@ From @${sheet}`
     } else {
diff --git a/src/utils/utils.js b/src/utils/utils.js
index 8be2c14..6804c9e 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -500,6 +500,10 @@
         let _endval = moment(val[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
 
         searchText += '(' + item.key + ' >= \'' + _startval + '\' AND ' + item.key + ' < \'' + _endval + '\')'
+      } else if (item.type === 'range') {
+        let val = item.value.split(',')
+
+        searchText += '(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')'
       } else {
         searchText += '(' + item.key + ' ' + item.match + ' \'' + item.value + '\')'
       }
@@ -762,14 +766,21 @@
   let userName = sessionStorage.getItem('User_Name') || ''
   let fullName = sessionStorage.getItem('Full_Name') || ''
   let city = sessionStorage.getItem('city') || ''
+  let _sheet = item.sheet
 
   if (sessionStorage.getItem('isEditState') === 'true') {
     userName = sessionStorage.getItem('CloudUserName') || ''
     fullName = sessionStorage.getItem('CloudFullName') || ''
   }
 
-  let database = item.sheet.match(/(.*)\.(.*)\./ig) || ''
-  let sheet = item.sheet.replace(/(.*)\.(.*)\./ig, '')
+  if (window.GLOB.externalDatabase !== null) {
+    _sheet = _sheet.replace(/@db@/ig, window.GLOB.externalDatabase)
+  }
+
+  let database = _sheet.match(/(.*)\.(.*)\./ig)
+  let sheet = _sheet.replace(/(.*)\.(.*)\./ig, '')
+  
+  database = database ? (database[0] || '') : ''
 
   let getuuid = () => {
     let uuid = []

--
Gitblit v1.8.0