From 92108e6c93de657838bbd766a9eb4f27d85e1c2d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 05 五月 2020 16:41:28 +0800
Subject: [PATCH] 2020-05-05

---
 src/utils/utils.js |  392 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 228 insertions(+), 164 deletions(-)

diff --git a/src/utils/utils.js b/src/utils/utils.js
index 39c4111..029cfc4 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -51,6 +51,43 @@
   }
 
   /**
+   * @description sql璇硶楠岃瘉
+   * @return {String}  sql    sql璇彞
+   * @return {String}  type   楠岃瘉绫诲瀷
+   */
+  static verifySql (sql, type) {
+    if (!sql) return ''
+    let chars = [
+      {key: 'create', reg: /(^|\s)create\s/ig},
+      {key: 'insert', reg: /(^|\s)insert\s/ig},
+      {key: 'delete', reg: /(^|\s)delete\s/ig},
+      {key: 'update', reg: /(^|\s)update\s/ig},
+      {key: 'set', reg: /(^|\s)set\s/ig},
+      {key: 'drop', reg: /(^|\s)drop\s/ig},
+      {key: 'alter', reg: /(^|\s)alter\s/ig},
+      {key: 'truncate', reg: /(^|\s)truncate\s/ig},
+      {key: 'if', reg: /(^|\s)if\s/ig},
+      {key: 'exec', reg: /exec/ig},
+      {key: 'OBJECT', reg: /object/ig},
+      {key: 'sys.', reg: /sys\./ig},
+      {key: 'kill', reg: /kill/ig}
+    ]
+
+    if (type === 'customscript') {
+      chars = chars.filter(char => !['insert', 'delete', 'update', 'set', 'if', 'exec'].includes(char.key))
+    }
+
+    let error = ''
+    chars.forEach(char => {
+      if (!error && char.reg.test(sql)) {
+        error = char.key
+      }
+    })
+
+    return error
+  }
+
+  /**
    * @description sql鍔犲瘑
    * @return {String}  value
    */
@@ -59,105 +96,43 @@
 
     let salt = 'minKe' // 鐩愬��
     // 鍏抽敭瀛楄浆鎹㈣鍒�
-    let format = [{
-      key: 'select',
-      value: ' msltk '
-    }, {
-      key: 'from',
-      value: ' mfrmk '
-    }, {
-      key: 'where',
-      value: ' mwhrk '
-    }, {
-      key: 'order by',
-      value: ' modbk '
-    }, {
-      key: 'asc',
-      value: ' modack '
-    }, {
-      key: 'desc',
-      value: ' moddesk '
-    }, {
-      key: 'top',
-      value: ' mtpk '
-    }, {
-      key: 'like',
-      value: ' mlkk '
-    }, {
-      key: 'not like',
-      value: ' mnlkk '
-    }, {
-      key: 'between',
-      value: ' mbtnk '
-    }, {
-      key: 'and',
-      value: ' madk '
-    }, {
-      key: 'insert',
-      value: ' mistk '
-    }, {
-      key: 'into',
-      value: ' mitk '
-    }, {
-      key: 'update',
-      value: ' muptk '
-    }, {
-      key: 'delete',
-      value: ' mdelk '
-    }, {
-      key: 'begin',
-      value: ' mbgink '
-    }, {
-      key: 'end',
-      value: ' medk '
-    }, {
-      key: 'if',
-      value: ' mefk '
-    }, {
-      key: 'while',
-      value: ' mwilk '
-    }, {
-      key: 'create',
-      value: ' mcrtk '
-    }, {
-      key: 'alter',
-      value: ' matek '
-    }, {
-      key: 'len',
-      value: ' mlnk '
-    }, {
-      key: 'left',
-      value: ' mlftk '
-    }, {
-      key: 'right',
-      value: ' mritk '
-    }, {
-      key: 'union',
-      value: ' munok '
-    }, {
-      key: 'varchar',
-      value: ' mvcrk '
-    }, {
-      key: 'getdate',
-      value: ' mgtdtk '
-    }, {
-      key: 'TRY',
-      value: ' mtryonek '
-    }, {
-      key: 'TRAN',
-      value: ' mtrnk '
-    }, {
-      key: 'goto',
-      value: ' mgtk '
-    }, {
-      key: 'set',
-      value: ' mstk '
-    }, {
-      key: 'ROLLBACK',
-      value: ' mrlbkk '
-    }]
+    let format = [
+      { key: 'select', value: ' msltk ' },
+      { key: 'from', value: ' mfrmk ' },
+      { key: 'where', value: ' mwhrk ' },
+      { key: 'order by', value: ' modbk ' },
+      { key: 'asc', value: ' modack ' },
+      { key: 'desc', value: ' moddesk ' },
+      { key: 'top', value: ' mtpk ' },
+      { key: 'like', value: ' mlkk ' },
+      { key: 'not like', value: ' mnlkk ' },
+      { key: 'between', value: ' mbtnk ' },
+      { key: 'and', value: ' madk ' },
+      { key: 'insert', value: ' mistk ' },
+      { key: 'into', value: ' mitk ' },
+      { key: 'update', value: ' muptk ' },
+      { key: 'delete', value: ' mdelk ' },
+      { key: 'begin', value: ' mbgink ' },
+      { key: 'end', value: ' medk ' },
+      { key: 'if', value: ' mefk ' },
+      { key: 'while', value: ' mwilk ' },
+      { key: 'create', value: ' mcrtk ' },
+      { key: 'alter', value: ' matek ' },
+      { key: 'len', value: ' mlnk ' },
+      { key: 'left', value: ' mlftk ' },
+      { key: 'right', value: ' mritk ' },
+      { key: 'union', value: ' munok ' },
+      { key: 'varchar', value: ' mvcrk ' },
+      { key: 'getdate', value: ' mgtdtk ' },
+      { key: 'TRY', value: ' mtryonek ' },
+      { key: 'TRAN', value: ' mtrnk ' },
+      { key: 'goto', value: ' mgtk ' },
+      { key: 'set', value: ' mstk ' },
+      { key: 'ROLLBACK', value: ' mrlbkk ' }
+    ]
 
     if (!isUnFormat) { // 鍔犲瘑
+      value = value.replace(/\n/ig, ' \n ')
       // 鏇挎崲鍏抽敭瀛�
       format.forEach(item => {
         let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig')
@@ -166,7 +141,7 @@
   
       // 1銆佹浛鎹�%绗︼紙鏁版嵁搴撲腑瑙f瀽鍚巗ql鎶ラ敊锛�
       value = value.replace(/%/ig, ' mpercent ')
-  
+
       // 1銆乪ncode缂栫爜锛堜腑鏂囧瓧绗﹁秴鍑篵ase64鍔犲瘑鑼冨洿锛夛紝2銆乥ase64鍔犲瘑
       value = window.btoa(window.encodeURIComponent(value))
   
@@ -181,13 +156,15 @@
         value = window.atob(value)
         value = value.replace(salt, '')
         value = window.decodeURIComponent(window.atob(value))
+
         value = value.replace(/\smpercent\s/g, '%')
 
         format.forEach(item => {
           let reg = new RegExp(item.value, 'g')
           value = value.replace(reg, ' ' + item.key + ' ')
         })
-        
+
+        value = value.replace(/\s\n\s/ig, '\n')
         value = value.replace(/(^\s+|\s+$)/ig, '')
       } catch {
         console.warn('UnFormat Failure')
@@ -383,6 +360,95 @@
   }
 
   /**
+   * @description 鎷兼帴鎼滅储鏉′欢main
+   * @param {Array}   searches     鎼滅储鏉′欢
+   * @return {String}  searchText  鎷兼帴缁撴灉
+   */
+  static getAllSearchOptions (searches) {
+    if (!searches || searches.length === 0) return []
+
+    let options = []
+    let fieldmap = new Map()
+    searches.forEach(search => {
+      let item = {
+        key: search.key,
+        match: search.match,
+        type: search.type,
+        label: search.label,
+        value: search.value,
+        required: search.required
+      }
+
+      if (fieldmap.has(item.key)) {
+        item.key = item.key + '1'
+      }
+
+      fieldmap.set(item.key, true)
+
+      if (item.type === 'date') {
+        if (['>=', '>'].includes(item.match)) {
+          item.value = item.value ? item.value + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
+        } else if (['<=', '<'].includes(item.match)) {
+          item.value = item.value ? moment(item.value, 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
+        }
+
+        options.push(item)
+      } else if (item.type === 'datemonth') {
+        let _startval = item.value ? moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
+        let _endval = item.value ? moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
+
+        let copy = JSON.parse(JSON.stringify(item))
+        copy.key = copy.key + '1'
+        copy.value = _endval
+        
+        item.value = _startval
+
+        options.push(item)
+        options.push(copy)
+      } else if (item.type === 'dateweek') {
+        let _startval = item.value && item.value[0] ? moment(item.value[0], 'YYYY-MM-DD').format('YYYY-MM-DD') + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
+        let _endval = item.value && item.value[1] ? moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
+
+        let copy = JSON.parse(JSON.stringify(item))
+        copy.key = copy.key + '1'
+        copy.value = _endval
+        
+        item.value = _startval
+
+        options.push(item)
+        options.push(copy)
+      } else if (item.type === 'daterange') {
+        let _startval = item.value && item.value[0] ? item.value[0] + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
+        let _endval = item.value && item.value[1] ? moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
+
+        let copy = JSON.parse(JSON.stringify(item))
+        copy.key = copy.key + '1'
+        copy.value = _endval
+        
+        item.value = _startval
+
+        options.push(item)
+        options.push(copy)
+      } else if (item.type === 'multiselect') {
+        item.value = item.value ? item.value.join(',') : item.value
+
+        options.push(item)
+      } else if (item.type === 'text') {
+        item.key.split(',').forEach(field => { // 缁煎悎鎼滅储锛屾墍瀛楁鎷兼帴
+          let cell = JSON.parse(JSON.stringify(item))
+          cell.key = field
+
+          options.push(item)
+        })
+      } else {
+        options.push(item)
+      }
+    })
+
+    return options
+  }
+
+  /**
    * @description 鎷兼帴鎼滅储鏉′欢datamanage
    * @param {Array}   searches     鎼滅储鏉′欢
    * @return {String}  searchText  鎷兼帴缁撴灉
@@ -496,8 +562,28 @@
     let _topline = btn.range || 0
     let upId = this.getuuid()
 
-    if (btn.scripts && btn.scripts.length > 0) {
-      btn.scripts = btn.scripts.filter(item => item.status !== 'false')
+    let _initCustomScript = '' // 鍒濆鍖栬剼鏈�
+    let _prevCustomScript = '' // 榛樿sql鍓嶆墽琛岃剼鏈�
+    let _backCustomScript = '' // 榛樿sql鍚庢墽琛岃剼鏈�
+
+    if (btn.scripts) {
+      btn.scripts.forEach(script => {
+        if (script.status === 'false') return
+
+        if (script.position === 'init') {
+          _initCustomScript += `
+          ${script.sql}
+          `
+        } else if (script.position === 'front') {
+          _prevCustomScript += `
+          ${script.sql}
+          `
+        } else {
+          _backCustomScript += `
+          ${script.sql}
+          `
+        }
+      })
     }
 
     let _Ltext = data.map((item, lindex) => {
@@ -642,31 +728,19 @@
 
       let _insert = ''
 
-      if (btn.scripts && btn.scripts.length > 0) {
-        btn.scripts.forEach(script => {
-          if (script.position !== 'front') return
-
-          _insert += `
-          ${script.sql}
-          `
-        })
+      if (_prevCustomScript) {
+        _insert += _prevCustomScript
       }
 
       if (btn.default !== 'false') {
-        _insert = `
+        _insert += `
         Insert into ${item.sheet} (${fields},createuserid,createuser,createstaff,bid) 
         Select ${fields},@userid@,@username,@fullname,@BID@ From @${item.sheet}
         `
       }
 
-      if (btn.scripts && btn.scripts.length > 0) {
-        btn.scripts.forEach(script => {
-          if (script.position === 'front') return
-
-          _insert += `
-          ${script.sql}
-          `
-        })
+      if (_backCustomScript) {
+        _insert += _backCustomScript
       }
 
       _sql = `declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
@@ -675,7 +749,7 @@
       Select  @ErrorCode='', @retmsg=''
       
       select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID@
-      
+      ${_initCustomScript}
       Insert into  @${item.sheet} (${fields},jskey)
       ${_Ltext}
       ${_uniquesql}
@@ -709,6 +783,30 @@
 
     if (verify.default !== 'false') { // 鍒ゆ柇鏄惁浣跨敤榛樿sql
       _actionType = btn.sqlType
+    }
+
+    let _initCustomScript = '' // 鍒濆鍖栬剼鏈�
+    let _prevCustomScript = '' // 榛樿sql鍓嶆墽琛岃剼鏈�
+    let _backCustomScript = '' // 榛樿sql鍚庢墽琛岃剼鏈�
+
+    if (verify.scripts) {
+      verify.scripts.forEach(item => {
+        if (item.status === 'false') return
+
+        if (item.position === 'init') {
+          _initCustomScript += `
+          ${item.sql}
+          `
+        } else if (item.position === 'front') {
+          _prevCustomScript += `
+          ${item.sql}
+          `
+        } else {
+          _backCustomScript += `
+          ${item.sql}
+          `
+        }
+      })
     }
 
     // 闇�瑕佸0鏄庣殑鍙橀噺闆�
@@ -832,9 +930,6 @@
     if (verify.billcodes) {
       verify.billcodes = verify.billcodes.filter(item => item.status !== 'false')
     }
-    if (verify.scripts) {
-      verify.scripts = verify.scripts.filter(item => item.status !== 'false')
-    }
 
     let userName = sessionStorage.getItem('User_Name') || ''
     let fullName = sessionStorage.getItem('Full_Name') || ''
@@ -847,6 +942,10 @@
     // 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
     _sql += `select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}'
       `
+
+    if (_initCustomScript) {
+      _sql += _initCustomScript
+    }
 
     // 鍚敤璐︽湡楠岃瘉
     if (verify.accountdate === 'true') {
@@ -1037,16 +1136,8 @@
       let values = []
 
       formdata.forEach(item => {
-        if (item.type === 'funcvar') {
-          keys.push(item.key.toLowerCase())
-          values.push('@' + item.key)
-        } else if (item.type === 'number') {
-          keys.push(item.key.toLowerCase())
-          values.push(item.value)
-        } else {
-          keys.push(item.key.toLowerCase())
-          values.push('\'' + item.value + '\'')
-        }
+        keys.push(item.key.toLowerCase())
+        values.push('@' + item.key)
       })
 
       if (!keys.includes(primaryKey.toLowerCase())) {
@@ -1089,18 +1180,7 @@
 
       formdata.forEach(item => {
         _arr.push(item.key.toLowerCase())
-
-        if (item.type === 'funcvar') {
-          if (_actionType === 'update') {
-            _form.push(item.key + '=@' + item.key)
-          } else if (_actionType === 'insertOrUpdate') { // 娣诲姞鎴栦慨鏀规椂锛屽嚱鏁板彉閲忔坊鍔犺〃鍗曟暟鍊�
-            _form.push(item.key + '=\'' + item.value + '\'')
-          }
-        } else if (item.type === 'number') {
-          _form.push(item.key + '=' + item.value)
-        } else {
-          _form.push(item.key + '=\'' + item.value + '\'')
-        }
+        _form.push(item.key + '=@' + item.key)
       })
 
       if (!_arr.includes('modifydate')) {
@@ -1124,16 +1204,8 @@
       _updatesql = `update ${btn.sql} set ${_form} where ${primaryKey}=@${primaryKeyName};`
     }
 
-    // 鎷兼帴鑷畾涔夎剼鏈�
-    if (verify.scripts && verify.scripts.length > 0) {
-      let _scripts = ''
-      verify.scripts.forEach(item => {
-        if (item.position !== 'front') return
-
-        _scripts += `
-        ${item.sql}`
-      })
-      _sql += `${_scripts}`
+    if (_prevCustomScript) {
+      _sql += _prevCustomScript
     }
 
     // 娣诲姞銆佷慨鏀广�侀�昏緫鍒犻櫎銆佺墿鐞嗗垹闄�
@@ -1171,16 +1243,8 @@
       `
     }
 
-    // 鎷兼帴鑷畾涔夎剼鏈�
-    if (verify.scripts && verify.scripts.length > 0) {
-      let _scripts = ''
-      verify.scripts.forEach(item => {
-        if (item.position === 'front') return
-
-        _scripts += `
-        ${item.sql}`
-      })
-      _sql += `${_scripts}`
+    if (_backCustomScript) {
+      _sql += _backCustomScript
     }
 
     _sql += `

--
Gitblit v1.8.0