From 6b680ace26dc95031a1b7a3e33f8785c112f787d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期一, 20 四月 2020 18:32:01 +0800
Subject: [PATCH] 2020-04-20

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

diff --git a/src/utils/utils.js b/src/utils/utils.js
index 39c4111..2a4bd06 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.map(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')
@@ -496,8 +473,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 +639,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 +660,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 +694,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 +841,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 +853,10 @@
     // 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
     _sql += `select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}'
       `
+
+    if (_initCustomScript) {
+      _sql += _initCustomScript
+    }
 
     // 鍚敤璐︽湡楠岃瘉
     if (verify.accountdate === 'true') {
@@ -1037,16 +1047,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 +1091,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 +1115,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 +1154,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