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