From a2df1bad33874fc6d9f96b0ceb1a6ce97b2e7e80 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 26 五月 2020 19:35:40 +0800
Subject: [PATCH] 2020-05-26
---
src/utils/utils.js | 796 +++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 549 insertions(+), 247 deletions(-)
diff --git a/src/utils/utils.js b/src/utils/utils.js
index b59e5a2..3a918f8 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -51,131 +51,126 @@
}
/**
+ * @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
*/
- static formatOptions (value) {
+ static formatOptions (value, isUnFormat = false) {
if (!value) return ''
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 ' }
+ ]
- // 鏇挎崲鍏抽敭瀛�
- format.forEach(item => {
- let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig')
- value = value.replace(reg, item.value)
- })
+ if (!isUnFormat) { // 鍔犲瘑
+ value = value.replace(/\n/ig, ' \n ')
+ // 鏇挎崲鍏抽敭瀛�
+ format.forEach(item => {
+ let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig')
+ value = value.replace(reg, item.value)
+ })
+
+ // 1銆佹浛鎹�%绗︼紙鏁版嵁搴撲腑瑙f瀽鍚巗ql鎶ラ敊锛�
+ value = value.replace(/%/ig, ' mpercent ')
- // 1銆佹浛鎹�%绗︼紙鏁版嵁搴撲腑瑙f瀽鍚巗ql鎶ラ敊锛夛紝2銆佸幓闄ゆ敹灏惧浣欑┖鏍�
- value = value.replace(/%/ig, ' mpercent ')
- // value = value.replace(/(^\s|\s$)/ig, '')
+ // 1銆乪ncode缂栫爜锛堜腑鏂囧瓧绗﹁秴鍑篵ase64鍔犲瘑鑼冨洿锛夛紝2銆乥ase64鍔犲瘑
+ value = window.btoa(window.encodeURIComponent(value))
+
+ // 鎻掑叆瀛楃
+ let index = Math.floor(value.length / 2)
+ value = value.slice(0, index) + salt + value.slice(index)
+
+ // base64鍔犲瘑
+ value = window.btoa(value)
+ } else { // 瑙e瘑
+ try {
+ value = window.atob(value)
+ value = value.replace(salt, '')
+ value = window.decodeURIComponent(window.atob(value))
- // 1銆乪ncode缂栫爜锛堜腑鏂囧瓧绗﹁秴鍑篵ase64鍔犲瘑鑼冨洿锛夛紝2銆乥ase64鍔犲瘑
- value = window.btoa(window.encodeURIComponent(value))
+ value = value.replace(/\smpercent\s/g, '%')
- // 鎻掑叆瀛楃
- let index = Math.floor(value.length / 2)
- value = value.slice(0, index) + salt + value.slice(index)
+ format.forEach(item => {
+ let reg = new RegExp(item.value, 'g')
+ value = value.replace(reg, ' ' + item.key + ' ')
+ })
- // base64鍔犲瘑
- value = window.btoa(value)
+ value = value.replace(/\s\n\s/ig, '\n')
+ value = value.replace(/(^\s+|\s+$)/ig, '')
+ } catch {
+ console.warn('UnFormat Failure')
+ value = ''
+ }
+ }
return value
}
@@ -198,7 +193,76 @@
value: search.initval,
required: search.required === 'true'
}
- if (item.type === 'date') {
+
+ if (item.type === 'group') {
+ let copy = JSON.parse(JSON.stringify(item))
+ copy.key = search.datefield
+
+ item.value = search.initval && search.initval[0] ? search.initval[0] : ''
+ item.match = '='
+ item.forbid = true
+
+ copy.type = 'daterange'
+ copy.match = 'between'
+ copy.value = ''
+
+ if (search.initval && search.initval.length > 0) {
+ let _type = search.initval[0]
+ let _val = search.initval[1]
+
+ if (_type === 'day') {
+ copy.value = [moment().subtract(_val, 'days').format('YYYY-MM-DD'),
+ moment().subtract(_val, 'days').format('YYYY-MM-DD')]
+ } else if (_type === 'week') {
+ copy.value = [moment().subtract(_val * 7, 'days').startOf('week').format('YYYY-MM-DD'),
+ moment().subtract(_val * 7, 'days').endOf('week').format('YYYY-MM-DD')]
+ } else if (_type === 'month') {
+ copy.value = [moment().subtract(_val, 'month').startOf('month').format('YYYY-MM-DD'),
+ moment().subtract(_val, 'month').endOf('month').format('YYYY-MM-DD')]
+ } else if (_type === 'quarter') {
+ let _differ = parseInt(moment().format('MM')) % 3
+ let _pdiffer = 0
+ let _ndiffer = 0
+
+ // 宸�艰绠�
+ switch(_differ) {
+ case 0:
+ _pdiffer = 2
+ _ndiffer = 0
+ break
+ case 1:
+ _pdiffer = 0
+ _ndiffer = -2
+ break
+ case 2:
+ _pdiffer = 1
+ _ndiffer = -1
+ break
+ default:
+ }
+
+ copy.value = [moment().subtract(_pdiffer + _val * 3, 'month').startOf('month').format('YYYY-MM-DD'),
+ moment().subtract(_ndiffer + _val * 3, 'month').endOf('month').format('YYYY-MM-DD')]
+ } else if (_type === 'year') {
+ let _year = parseInt(moment().format('YYYY')) - _val
+ copy.value = [_year + '-01-01', _year + '-12-31']
+ } else if (_type === 'customized') {
+ try {
+ _val = JSON.parse(_val)
+ } catch {
+ _val = [0, 0]
+ }
+ copy.value = [moment().subtract(_val[0], 'days').format('YYYY-MM-DD'),
+ moment().subtract(_val[1], 'days').format('YYYY-MM-DD')]
+ }
+ }
+
+ if (search.transfer === 'true') {
+ newsearches.push(item)
+ }
+ newsearches.push(copy)
+ return
+ } else if (item.type === 'date') {
item.value = item.value ? moment().subtract(item.value, 'days').format('YYYY-MM-DD') : ''
} else if (item.type === 'datemonth') {
item.value = item.value ? moment().subtract(item.value, 'month').format('YYYY-MM') : ''
@@ -249,14 +313,14 @@
}
if (newsearches[item.key]) {
- newsearches[item.key + '1'] = _val ? _val + timetail : null
+ newsearches[item.key + '1'] = _val ? _val + timetail : ''
} else {
- newsearches[item.key] = _val ? _val + timetail : null
+ newsearches[item.key] = _val ? _val + timetail : ''
}
} else if (item.type === 'datemonth') {
// 鏈�-杩囨护鏉′欢锛屼粠鏈堝紑濮嬭嚦缁撴潫
- let _startval = null
- let _endval = null
+ let _startval = ''
+ let _endval = ''
if (item.value) {
_startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
@@ -271,16 +335,16 @@
_endval = moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD')
}
- newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : null
- newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : null
+ newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : ''
+ newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : ''
} else if (item.type === 'daterange') {
let _endval = ''
if (item.value) {
_endval = moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD')
}
- newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : null
- newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : null
+ newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : ''
+ newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : ''
} else if (item.type === 'text') {
item.key.split(',').forEach(field => { // 缁煎悎鎼滅储锛屾墍瀛楁鎷兼帴
newsearches[field] = item.value
@@ -311,7 +375,7 @@
let searchText = ''
searches.forEach(item => {
- if (!item.value || (item.type === 'multiselect' && item.value.length === 0)) return
+ if (item.forbid || !item.value || (item.type === 'multiselect' && item.value.length === 0)) return
searchText += (searchText !== '' ? ' AND ' : '')
if (item.type === 'text') {
@@ -362,6 +426,95 @@
})
return searchText
+ }
+
+ /**
+ * @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' : '1970-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' : '2050-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' : '1970-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' : '2050-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' : '1970-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' : '2050-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' : '1970-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' : '2050-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
}
/**
@@ -477,6 +630,31 @@
let errors = []
let _topline = btn.range || 0
let upId = this.getuuid()
+
+ 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) => {
let vals = btn.columns.map((col, cindex) => {
let val = item[col.Column] !== undefined ? item[col.Column] : ''
@@ -619,21 +797,19 @@
let _insert = ''
+ 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.status === 'false') return
-
- _insert += `
- ${script.sql}
- `
- })
+ if (_backCustomScript) {
+ _insert += _backCustomScript
}
_sql = `declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
@@ -642,7 +818,7 @@
Select @ErrorCode='', @retmsg=''
select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID@
-
+ ${_initCustomScript}
Insert into @${item.sheet} (${fields},jskey)
${_Ltext}
${_uniquesql}
@@ -672,6 +848,37 @@
let BID = param.BID
let verify = btn.verify || {}
let _formFieldValue = {}
+ let _actionType = null
+
+ if (verify.default !== 'false') { // 鍒ゆ柇鏄惁浣跨敤榛樿sql
+ _actionType = btn.sqlType
+ }
+
+ let _initCustomScript = '' // 鍒濆鍖栬剼鏈�
+ let _prevCustomScript = '' // 榛樿sql鍓嶆墽琛岃剼鏈�
+ let _backCustomScript = '' // 榛樿sql鍚庢墽琛岃剼鏈�
+
+ 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鏄庣殑鍙橀噺闆�
// let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey']
let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode']
@@ -680,7 +887,8 @@
let primaryKey = setting.primaryKey || 'id'
// 绯荤粺鍙橀噺澹版槑涓庤缃垵濮嬪��
- let _sql = `Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50)
+ let _sql = `/* 绯荤粺鐢熸垚 */
+ Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50)
`
// let _initvars = ['ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey'] // 宸茶祴鍊煎瓧娈甸泦
@@ -697,8 +905,15 @@
if (!_initvars.includes(_key)) {
_initvars.push(_key)
- if (form.type === 'number' && typeof(form.value) === 'number') {
- _initfields.push(`@${_key}=${form.value}`)
+ if (form.type === 'number') {
+ let val = form.value
+ if (typeof(val) !== 'number') {
+ val = parseFloat(val)
+ if (isNaN(val)) {
+ val = 0
+ }
+ }
+ _initfields.push(`@${_key}=${val}`)
} else {
_initfields.push(`@${_key}='${form.value}'`)
}
@@ -706,6 +921,10 @@
if (!_vars.includes(_key)) {
_vars.push(_key)
+
+ if (form.fieldlen && form.fieldlen > 2048) {
+ form.fieldlen = 'max'
+ }
let _type = `nvarchar(${form.fieldlen})`
@@ -720,8 +939,8 @@
})
}
- // 娣诲姞鏁版嵁涓瓧娈碉紝琛ㄥ崟鍊间紭鍏�(鎸夐挳涓嶉�夎鏃惰烦杩�)
- if (data && btn.Ot !== 'notRequired') {
+ // 娣诲姞鏁版嵁涓瓧娈碉紝琛ㄥ崟鍊间紭鍏�(鎸夐挳涓嶉�夎鎴栧琛屾嫾鎺ユ椂璺宠繃)
+ if (data && btn.Ot !== 'notRequired' && btn.Ot !== 'requiredOnce') {
_formFieldValue = {...data, ..._formFieldValue}
if (logcolumns && logcolumns.length > 0) {
@@ -733,7 +952,13 @@
let _val = data.hasOwnProperty(col.field) ? data[col.field] : ''
- if (col.type === 'number' && typeof(_val) === 'number') {
+ if (col.type === 'number') {
+ if (typeof(_val) !== 'number') {
+ _val = parseFloat(_val)
+ if (isNaN(_val)) {
+ _val = 0
+ }
+ }
_initfields.push(`@${_key}=${_val}`)
} else {
_initfields.push(`@${_key}='${_val}'`)
@@ -742,6 +967,10 @@
if (!_vars.includes(_key)) {
_vars.push(_key)
+
+ if (col.fieldlength && col.fieldlength > 2048) {
+ col.fieldlength = 'max'
+ }
let _type = `nvarchar(${col.fieldlength || 50})`
@@ -761,8 +990,9 @@
// 鍙橀噺澹版槑
_declarefields = _declarefields.join(',')
if (_declarefields) {
- _sql += `,${_declarefields}
- `
+ _sql = `/* 绯荤粺鐢熸垚 */
+ Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50),${_declarefields}
+ `
}
// 鍙橀噺璧嬪��
@@ -785,9 +1015,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') || ''
@@ -798,12 +1025,20 @@
}
// 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
- _sql += `select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}'
- `
+ _sql += `
+ /* 鍑瘉鍙婄敤鎴蜂俊鎭垵濮嬪寲璧嬪�� */
+ select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}'
+ `
+
+ if (_initCustomScript) {
+ _sql += _initCustomScript
+ }
// 鍚敤璐︽湡楠岃瘉
if (verify.accountdate === 'true') {
- _sql += `exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
+ _sql += `
+ /* 璐︽湡楠岃瘉 */
+ exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
if @ErrorCode!=''
GOTO aaa
`
@@ -816,8 +1051,15 @@
datasource = '(' + datasource + ') tb'
}
- _sql += `select @tbid='', @ErrorCode='',@retmsg=''
- select @tbid=${primaryKey} from ${datasource} where ${primaryKey} ='${primaryId}'
+ let _ID = '=@ID@'
+ if (btn.Ot === 'requiredOnce') {
+ _ID = ' in (select ID from dbo.SplitComma(@ID@))'
+ }
+
+ _sql += `
+ /* 澶辨晥楠岃瘉 */
+ select @tbid='', @ErrorCode='',@retmsg=''
+ select @tbid=${primaryKey} from ${datasource} where ${primaryKey} ${_ID}
If @tbid=''
Begin
select @ErrorCode='E',@retmsg='鏁版嵁宸插け鏁�'
@@ -829,17 +1071,19 @@
// 姣旇緝楠岃瘉
if (verify.contrasts && verify.contrasts.length > 0) {
verify.contrasts.forEach(item => {
- _sql += `If ${item.frontfield} ${item.operator} ${item.backfield}
- Begin
- select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
- goto aaa
- end
- `
+ _sql += `
+ /* 姣旇緝楠岃瘉 */
+ If ${item.frontfield} ${item.operator} ${item.backfield}
+ Begin
+ select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
+ goto aaa
+ end
+ `
})
}
- // 鍞竴鎬ч獙璇侊紝蹇呴』瀛樺湪琛ㄥ崟锛堣〃鍗曞瓨鍦ㄦ椂锛屼富閿潎涓哄崟鍊硷級,蹇呴』濉啓鏁版嵁婧�
- if (formdata && verify.uniques && verify.uniques.length > 0) {
+ // 鍞竴鎬ч獙璇侊紝蹇呴』瀛樺湪琛ㄥ崟锛堣〃鍗曞瓨鍦ㄦ椂锛屼富閿潎涓哄崟鍊硷級,蹇呴』濉啓鏁版嵁婧愶紝澶氳鎷兼帴鏃朵笉鍙敤
+ if (formdata && verify.uniques && verify.uniques.length > 0 && btn.Ot !== 'requiredOnce') {
let hasBid = false // 妫�楠岃〃鍗曞強鍒楀瓧娈典腑鏄惁鏈塨id
let _keys_ = Object.keys(_formFieldValue).map(key => key.toLowerCase())
if (_keys_.includes('bid')) {
@@ -854,9 +1098,7 @@
item.field.split(',').forEach((_field, index) => {
let _fval = `'${_formFieldValue[_field]}'`
- // if (['id', 'bid', 'loginuid', 'sessionuid', 'userid', 'appkey'].includes(_field.toLowerCase())) {
- // _fval = '@' + _field + '@'
- // }
+
if (_field.toLowerCase() === 'bid' && !hasBid) { // 琛ㄥ崟涓病鏈塨id鍒欎娇鐢ㄧ郴缁焍id鍙橀噺
_fval = '@BID@'
}
@@ -875,32 +1117,57 @@
_fieldValue.push(`${primaryKey} !='${primaryId}'`)
}
- _sql += `select @tbid='', @ErrorCode='',@retmsg=''
- select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${_verifyType}
- If @tbid!=''
- Begin
- select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 宸插瓨鍦�'
- goto aaa
- end
- `
+ _sql += `
+ /* 鍞竴鎬ч獙璇� */
+ select @tbid='', @ErrorCode='',@retmsg=''
+ select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${_verifyType}
+ If @tbid!=''
+ Begin
+ select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 宸插瓨鍦�'
+ goto aaa
+ end
+ `
+ })
+ } else if (verify.uniques && verify.uniques.length > 0 && btn.Ot === 'requiredOnce' && setting.dataresource) {
+ let datasource = setting.dataresource
+ if (/\s/.test(datasource)) { // 鎷兼帴鍒悕
+ datasource = '(' + datasource + ') tb'
+ }
+
+ verify.uniques.forEach(item => {
+ let _primaryKey = item.field.split(',').includes(primaryKey) ? '' : ',' + primaryKey
+
+ _sql += `
+ /* 鍚岀被鏁版嵁楠岃瘉 */
+ Set @tbid=''
+
+ Select top 1 @tbid='X' from (select ${item.field}${_primaryKey},1 as n from ${datasource} ) tb inner join (select ID from dbo.SplitComma(@ID@)) sp on tb.${primaryKey}=sp.ID group by ${item.field} having sum(n)>1
+
+ If @tbid!=''
+ Begin
+ Set @ErrorCode='E' Set @retmsg='${item.fieldlabel} 鍊间笉鍞竴'
+ goto aaa
+ end
+ `
})
}
// 鑷畾涔夐獙璇�
- if (verify.customverifys && verify.customverifys.length > 0) {
- verify.customverifys.forEach(item => {
- _sql += `select @tbid='', @ErrorCode='',@retmsg=''
- select top 1 @tbid='X' from (${item.sql}) a
- If @tbid ${item.result === 'true' ? '!=' : '='}''
- Begin
- select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
- goto aaa
- end
- `
- })
- }
+ verify.customverifys && verify.customverifys.forEach(item => {
+ _sql += `
+ /* 鑷畾涔夐獙璇� */
+ select @tbid='', @ErrorCode='',@retmsg=''
+ select top 1 @tbid='X' from (${item.sql}) a
+ If @tbid ${item.result === 'true' ? '!=' : '='}''
+ Begin
+ select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
+ goto aaa
+ end
+ `
+ })
// 鍗曞彿鐢熸垚锛屼娇鐢ㄤ笂绾d锛圔ID锛夋垨鍒楄〃鏁版嵁锛屽0鏄庡彉閲忥紙妫�楠岋級
+ let _billcodesSql = ''
if (verify.billcodes && verify.billcodes.length > 0) {
verify.billcodes.forEach(item => {
let _ModularDetailCode = ''
@@ -932,22 +1199,28 @@
_vars.push(_key)
}
- _sql += `${_declare}
- select @BillCode='', @${_key}='', @ModularDetailCode=''
- ${_lpline}
- exec s_get_BillCode
- @ModularDetailCode=${_ModularDetailCode},
- @Type=${item.Type},
- @TypeCharOne='${item.TypeCharOne}',
- @TypeCharTwo ='${item.TypeCharTwo}',
- @BillCode =@BillCode output,
- @ErrorCode =@ErrorCode output,
- @retmsg=@retmsg output
- if @ErrorCode!=''
- goto aaa
- set @${_key}=@BillCode
- `
+ _billcodesSql += `
+ /* 鍗曞彿鐢熸垚 */
+ ${_declare}
+ select @BillCode='', @${_key}='', @ModularDetailCode=''
+ ${_lpline}
+ exec s_get_BillCode
+ @ModularDetailCode=${_ModularDetailCode},
+ @Type=${item.Type},
+ @TypeCharOne='${item.TypeCharOne}',
+ @TypeCharTwo ='${item.TypeCharTwo}',
+ @BillCode =@BillCode output,
+ @ErrorCode =@ErrorCode output,
+ @retmsg=@retmsg output
+ if @ErrorCode!=''
+ goto aaa
+ set @${_key}=@BillCode
+ `
})
+
+ if (_actionType !== 'insertOrUpdate') {
+ _sql += _billcodesSql
+ }
}
let hasvoucher = false
@@ -958,7 +1231,9 @@
hasvoucher = true
- _sql += `exec s_BVoucher_Create
+ _sql += `
+ /* 鍒涘缓鍑瘉 */
+ exec s_BVoucher_Create
@Bill ='${data[_voucher.linkField]}',
@BVoucherType ='${_voucher.BVoucherType}',
@VoucherTypeOne ='${_voucher.VoucherTypeOne}',
@@ -977,31 +1252,14 @@
`
}
- let primaryKeyName = ['id', 'bid', 'loginuid', 'sessionuid', 'userid', 'appkey'].includes(primaryKey.toLowerCase()) ? primaryKey + '@' : primaryKey
-
- let _actionType = null
-
- if (verify.default !== 'false') { // 鍒ゆ柇鏄惁浣跨敤榛樿sql
- _actionType = btn.sqlType
- }
-
let _insertsql = ''
- let _updatesql = ''
if (_actionType === 'insert' || _actionType === 'insertOrUpdate') { // 娣诲姞璇彞
let keys = []
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())) {
@@ -1027,33 +1285,42 @@
keys.push('bid')
}
values.push('@BID@')
+ } else if (tab && tab.foreignKey && !keys.includes(tab.foreignKey.toLowerCase())) {
+ keys.push(tab.foreignKey)
+ values.push('@BID@')
}
keys = keys.join(',')
values = values.join(',')
_insertsql = `insert into ${btn.sql} (${keys}) select ${values};`
- } else if (_actionType === 'insert' || _actionType === 'insertOrUpdate') { // 淇敼璇彞
+ }
+
+ let _updatesql = ''
+ if (_actionType === 'update' || _actionType === 'audit' || _actionType === 'insertOrUpdate') { // 淇敼璇彞
let _form = []
let _arr = []
formdata.forEach(item => {
_arr.push(item.key.toLowerCase())
-
- if (item.type === 'funcvar') {
- _form.push(item.key + '=@' + item.key)
- } 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')) {
- _form.push('modifydate=getdate()')
+ if (_actionType === 'audit') {
+ if (!_arr.includes('submitdate')) {
+ _form.push('submitdate=getdate()')
+ }
+ if (!_arr.includes('submituserid')) {
+ _form.push('submituserid=@userid@')
+ }
+ } else {
+ if (!_arr.includes('modifydate')) {
+ _form.push('modifydate=getdate()')
+ }
+ if (!_arr.includes('modifyuserid')) {
+ _form.push('modifyuserid=@userid@')
+ }
}
- if (!_arr.includes('modifyuserid')) {
- _form.push('modifyuserid=@userid@')
- }
+
if (hasvoucher) {
if (!_arr.includes('bvoucher')) {
_form.push('BVoucher=@BVoucher')
@@ -1065,18 +1332,38 @@
_form.push('FiYear=@FiYear')
}
}
-
_form = _form.join(',')
- _updatesql = `update ${btn.sql} set ${_form} where ${primaryKey}=@${primaryKeyName};`
+
+ let _ID = '=@ID@'
+ if (btn.Ot === 'requiredOnce') {
+ _ID = ' in (select ID from dbo.SplitComma(@ID@))'
+ }
+
+ _updatesql = `update ${btn.sql} set ${_form} where ${primaryKey}${_ID};`
+ }
+
+ if (_prevCustomScript) {
+ _sql += _prevCustomScript
}
// 娣诲姞銆佷慨鏀广�侀�昏緫鍒犻櫎銆佺墿鐞嗗垹闄�
if (_actionType === 'insert') {
- _sql += _insertsql
- } else if (_actionType === 'update') {
- _sql += _updatesql
+ _sql += `
+ /* 榛樿sql */
+ ${_insertsql}`
+ } else if (_actionType === 'update' || _actionType === 'audit') {
+ _sql += `
+ /* 榛樿sql */
+ ${_updatesql}`
} else if (_actionType === 'LogicDelete') { // 閫昏緫鍒犻櫎
- _sql += `update ${btn.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid@ where ${primaryKey}=@${primaryKeyName};`
+ let _ID = '=@ID@'
+ if (btn.Ot === 'requiredOnce') {
+ _ID = ' in (select ID from dbo.SplitComma(@ID@))'
+ }
+
+ _sql += `
+ /* 榛樿sql */
+ update ${btn.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid@ where ${primaryKey}${_ID};`
} else if (_actionType === 'delete') { // 鐗╃悊鍒犻櫎
let _msg = ''
@@ -1089,29 +1376,40 @@
}
})
}
- _sql += `insert into snote (remark,createuserid,CreateUser,CreateStaff) select '鍒犻櫎琛�:${btn.sql} 鏁版嵁: ${_msg}${primaryKey}='+@${primaryKeyName},@userid@,@username,@fullname delete ${btn.sql} where ${primaryKey}=@${primaryKeyName};`
+
+ let _ID = '=@ID@'
+ if (btn.Ot === 'requiredOnce') {
+ _ID = ' in (select ID from dbo.SplitComma(@ID@))'
+ }
+
+ _sql += `
+ /* 榛樿sql */
+ insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('鍒犻櫎琛�:${btn.sql} 鏁版嵁: ${_msg}${primaryKey}='+@ID@,200),@userid@,@username,@fullname delete ${btn.sql} where ${primaryKey}${_ID};`
} else if (_actionType === 'insertOrUpdate') {
- _sql += `select @tbid=''
+ _sql += `
+ /* 榛樿sql */
+ select @tbid=''
select @tbid='X' from ${btn.sql} where ${primaryKey}=@ID@
if @tbid=''
+ begin
+ ${_billcodesSql}
${_insertsql}
+ end
else
+ begin
${_updatesql}
+ end
`
}
- // 鎷兼帴鑷畾涔夎剼鏈�
- if (verify.scripts && verify.scripts.length > 0) {
- let _scripts = ''
- verify.scripts.forEach(item => {
- _scripts += `
- ${item.sql}`
- })
- _sql += `${_scripts}`
+ if (_backCustomScript) {
+ _sql += _backCustomScript
}
_sql += `
- aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
+ aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
+
+ _sql = _sql.replace(/\n\s{8}/ig, '\n')
console.log(_sql)
return _sql
}
@@ -1277,7 +1575,11 @@
if (!_vars.includes(primaryKey.toLowerCase())) {
_vars.push(primaryKey.toLowerCase())
- formParam = `mchr13k@${primaryKey} nvarchar(50)='',`
+ let _type = '50'
+ if (btn.Ot === 'requiredOnce') { // 澶氳鎷兼帴鏃讹紝涓婚敭璁句负max
+ _type = 'max'
+ }
+ formParam = `mchr13k@${primaryKey} nvarchar(${_type})='',`
}
if (param.fields && param.fields.length > 0) {
--
Gitblit v1.8.0