From 3659f0773a14b54c18ed0af8b64de4afe8227489 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 04 十二月 2020 19:31:12 +0800 Subject: [PATCH] 2020-12-04 --- src/utils/utils.js | 745 +++++++++++++++++++++++++++++++------------------------- 1 files changed, 411 insertions(+), 334 deletions(-) diff --git a/src/utils/utils.js b/src/utils/utils.js index c2cc84f..4631294 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -2,7 +2,55 @@ import md5 from 'md5' import options from '@/store/options.js' +const formatKeys = [ + { 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 ' } +] + export default class Utils { + /** + * @description 鏁版嵁婧愬悕绉帮紝鐢ㄤ簬缁熶竴鏌ヨ + * @return {String} name + */ + static getdataName () { + let name = [] + let _options = 'abcdefghigklmnopqrstuvwxyz' + for (let i = 0; i < 6; i++) { + name.push(_options.substr(Math.floor(Math.random() * 26), 1)) + } + return name.join('') + } + /** * @description 鐢熸垚32浣島uid string + 鏃堕棿 * @return {String} uuid @@ -38,22 +86,26 @@ * @description md5鍔犲瘑 * @return {String} str 鍔犲瘑涓� * @return {String} timestamp 鏃堕棿鎴� - * @return {Boolean} isopenkey 鏄惁涓轰簯绔瘑閽� */ - static encrypt (str, timestamp, isopenkey) { - let salt1 = 'mingke' // sql璇硶鐩愬�� - let salt2 = 'open_key' // 浜戠鏁版嵁鎿嶄綔鐩愬�� - let _str = '' - - if (isopenkey) { - _str = salt2 + timestamp + str - } else { - _str = str + salt1 + timestamp - } + static encrypt (str, timestamp) { + let salt = 'mingke' // sql璇硶鐩愬�� + let _str = str + salt + timestamp if (_str.length > 8000) { _str = _str.slice(_str.length - 8000) } + return md5(_str) + } + + /** + * @description md5鍔犲瘑 浜戠openkey鍔犲瘑 + * @return {String} secretkey Ltext瀵嗛挜 + * @return {String} timestamp 鏃堕棿鎴� + */ + static encryptOpenKey (secretkey, timestamp) { + let salt = 'open_key' // 浜戠鏁版嵁鎿嶄綔鐩愬�� + let _str = salt + timestamp + secretkey + return md5(_str) } @@ -96,90 +148,73 @@ /** * @description sql鍔犲瘑 - * @return {String} value + * @return {String} value */ - static formatOptions (value, isUnFormat = false) { + static formatOptions (value) { 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 ' } - ] - 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銆乪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)) - - 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') - value = '' - } + value = value.replace(/\n/ig, ' \n ') + // 鏇挎崲鍏抽敭瀛� + formatKeys.forEach(item => { + let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig') + value = value.replace(reg, item.value) + }) + // 鏇挎崲%绗︼紙鏁版嵁搴撲腑瑙f瀽鍚巗ql鎶ラ敊锛� + value = value.replace(/%/ig, ' mpercent ') + // 澶栬仈鏁版嵁搴撴浛鎹� + if (window.GLOB.externalDatabase !== null) { + value = value.replace(/@db@/ig, `[${window.GLOB.externalDatabase}]..`) } + // encode缂栫爜锛堜腑鏂囧瓧绗﹁秴鍑篵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) return value + } + + /** + * @description 瑙e瘑 + * @return {String} value + */ + static UnformatOptions (value) { + if (!value) return '' + let salt = 'minKe' // 鐩愬�� + let _value = '' + + try { + try { + _value = JSON.parse(window.decodeURIComponent(window.atob(value))) + } catch { + _value = '' + } + + if (!_value) { + _value = window.atob(value) + _value = _value.replace(salt, '') + _value = window.decodeURIComponent(window.atob(_value)) + + _value = _value.replace(/\smpercent\s/g, '%') + + formatKeys.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') + _value = '' + } + + return _value } /** @@ -188,53 +223,21 @@ */ static sPCInUpDeFormatOptions (value) { if (!value) return {LText: '', LText1: '', LText2: ''} - 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 ' } - ] value = value.replace(/\n/ig, ' \n ') // 鏇挎崲鍏抽敭瀛� - format.forEach(item => { + formatKeys.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 ') + // 澶栬仈鏁版嵁搴撴浛鎹� + if (window.GLOB.externalDatabase !== null) { + value = value.replace(/@db@/ig, `[${window.GLOB.externalDatabase}]..`) + } let encodesql = (val) => { if (!val) return '' @@ -249,11 +252,21 @@ return window.btoa(_value) } + let len = value.length // 娉細LText 涓� LText1 椤哄簭棰犲�� - return { - LText: encodesql(value.substring(5000, 10000)), - LText1: encodesql(value.substring(0, 5000)), - LText2: encodesql(value.substring(10000)) + if (len > 1000) { + let limit = Math.floor(len / 3) + return { + LText1: encodesql(value.substring(0, limit)), + LText: encodesql(value.substring(limit, limit * 2)), + LText2: encodesql(value.substring(limit * 2)) + } + } else { + return { + LText1: '', + LText: encodesql(value), + LText2: '' + } } } @@ -511,7 +524,7 @@ } /** - * @description 鎷兼帴鎼滅储鏉′欢main + * @description 鑾峰彇鎼滅储鐢ㄤ簬姝e垯鏇挎崲 * @param {Array} searches 鎼滅储鏉′欢 * @return {String} searchText 鎷兼帴缁撴灉 */ @@ -525,9 +538,7 @@ key: search.key, match: search.match, type: search.type, - label: search.label, - value: search.value, - required: search.required + value: search.value } if (fieldmap.has(item.key)) { @@ -600,6 +611,50 @@ } /** + * @description 鑾峰彇鎼滅储鐢ㄤ簬姝e垯鏇挎崲 + * @param {Array} searches 鎼滅储鏉′欢 + * @return {String} searchText 鎷兼帴缁撴灉 + */ + static getRegOptions (searches) { + if (!searches || searches.length === 0) return [] + + let options = [] + let fieldmap = new Map() + searches.forEach(search => { + let item = { + key: search.field, + value: '0' + } + + if (fieldmap.has(item.key)) { + item.key = item.key + '1' + } + + fieldmap.set(item.key, true) + + if (search.type === 'group') { + options.push({ + key: search.datefield, + value: '0' + }) + if (search.transfer === 'true') { + options.push(item) + } + } else if (['datemonth', 'dateweek', 'daterange'].includes(search.type)) { + options.push(item) + options.push({ + key: item.key + '1', + value: '0' + }) + } else { + options.push(item) + } + }) + + return options + } + + /** * @description 鎷兼帴鎼滅储鏉′欢datamanage * @param {Array} searches 鎼滅储鏉′欢 * @return {String} searchText 鎷兼帴缁撴灉 @@ -639,9 +694,7 @@ } else { baseurl = window.GLOB.location + window.GLOB.service } - // if (!/Content\/images\/upload\//.test(url)) { - // baseurl = baseurl + 'Content/images/upload/' - // } + let realurl = url.match(/^http/) || url.match(/^\/\//) ? url : baseurl + url return realurl } @@ -673,8 +726,11 @@ if (item.type === 'link') { arrfield.push(item.linkField) - } else if (item.type === 'select' && item.linkSubField && item.linkSubField.length > 0) { + } else if ((item.type === 'select' || item.type === 'radio') && item.linkSubField && item.linkSubField.length > 0) { arrfield.push(...item.linkSubField) + } else if (item.type === 'checkcard') { + arrfield = item.fields.map(f => f.field) + arrfield.push(item.valueField) } arrfield = Array.from(new Set(arrfield)) @@ -689,9 +745,9 @@ arrfield = arrfield.join(',') if (item.orderBy) { - sql = 'select distinct ' + arrfield + ',' + item.orderBy + ' as orderfield from ' + _datasource + ' order by orderfield ' + item.orderType + sql = `select ${item.type === 'checkcard' ? 'top 20' : ''} ${arrfield} from (select distinct ${arrfield},${item.orderBy} as orderfield from ${_datasource} ) a order by orderfield ${item.orderType}` } else { - sql = 'select distinct ' + arrfield + ' from ' + _datasource + sql = `select ${item.type === 'checkcard' ? 'top 20' : ''} ${arrfield} from (select distinct ${arrfield} from ${_datasource}) a` } return { @@ -705,7 +761,7 @@ * @return {String} btn 鎸夐挳 * @return {String} data excel鏁版嵁 */ - static getExcelInSql (item, data, dict) { + static getExcelInSql (item, data, dict, BID) { let btn = item.verify let keys = ['delete', 'drop', 'insert', 'truncate', 'update'] let userName = sessionStorage.getItem('User_Name') || '' @@ -715,6 +771,9 @@ userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } + + let database = item.sheet.match(/(.*)\.(.*)\./ig) || '' + let sheet = item.sheet.replace(/(.*)\.(.*)\./ig, '') let errors = [] let _topline = btn.range || 0 @@ -765,11 +824,11 @@ val = val.replace(/(^\s*$)|\t*|\v*/ig, '') - if (!val && col.required === 'true') { // 蹇呭~鏍¢獙 + if (!val && col.required === 'true') { // 蹇呭~鏍¢獙 errors.push(_position + dict['main.excel.content.emptyerror']) - } else if (val.length > col.limit) { // 闀垮害鏍¢獙 + } else if (col.limit && val.length > col.limit) { // 闀垮害鏍¢獙 errors.push(_position + dict['main.excel.content.maxlimit']) - } else { // 鍏抽敭瀛楁牎楠� + } else { // 鍏抽敭瀛楁牎楠� keys.forEach(key => { let _patten = new RegExp('(^' + key + '\\s+)|(\\s+' + key + '\\s+)', 'ig') if (_patten.test(val)) { @@ -815,7 +874,10 @@ if (val > 2958465 || val <= 0) { // 鏃堕棿杩囧ぇ鎴栧皬浜庣瓑浜�0 errors.push(_position + dict['main.excel.content.date.over']) } else { // 鏃堕棿鏍煎紡鍖� - val = this.formatExcelDate(val) + if (val < 60) { // 1900-2-29锛宔xcel涓瓨鍦紝瀹為檯涓嶅瓨鍦� + val++ + } + val = moment('19000101', 'YYYYMMDD').add(Math.floor(val - 2), 'days').format('YYYY-MM-DD') } } else if (typeof(val) === 'string') { val = val.replace(/(^\s*$)|\t*|\v*/ig, '') @@ -840,9 +902,11 @@ _lineIndex = _lineIndex.substring(_lineIndex.length - 6) vals.push(`'${upId + _lineIndex}'`) + vals.push(`'${BID}'`) if (lindex < 40) { convals.push(`'${upId + _lineIndex}' as jskey`) + convals.push(`'${BID}' as BID`) conLtext.push(`Select ${convals.join(',')}`) } @@ -858,7 +922,7 @@ let _sqlInsert = '' let _sqlBottom = '' - if (item.intertype === 'inner' && !item.innerFunc) { + if (item.intertype === 'system') { let _uniquesql = '' if (btn.uniques && btn.uniques.length > 0) { btn.uniques.forEach(unique => { @@ -876,7 +940,7 @@ _uniquesql += ` /* 閲嶅鎬ч獙璇� */ Set @tbid='' - Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${item.sheet} ) a group by ${unique.field} having sum(n)>1 + Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${sheet} ) a group by ${unique.field} having sum(n)>1 If @tbid!='' Begin @@ -885,7 +949,7 @@ end Set @tbid='' - Select top 1 @tbid=${_afields.join('+\' \'+')} from @${item.sheet} a Inner join ${item.sheet} b on ${_fields_} + Select top 1 @tbid=${_afields.join('+\' \'+')} from @${sheet} a Inner join ${sheet} b on ${_fields_} If @tbid!='' Begin @@ -916,20 +980,20 @@ if (btn.default !== 'false') { _insert = ` /* 榛樿sql */ - Insert into ${item.sheet} (${fields},createuserid,createuser,createstaff,bid) - Select ${fields},@userid@,@username,@fullname,@BID@ From @${item.sheet} + Insert into ${database}${sheet} (${fields},createuserid,createuser,createstaff,bid) + Select ${fields},@userid@,@username,@fullname,@BID@ From @${sheet} ` } _sql = ` /* 绯荤粺鐢熸垚 */ - declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) ) + declare @${sheet} table (${declarefields.join(',')},jskey nvarchar(50),BID nvarchar(50) ) Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512) Select @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}' ${_initCustomScript} ` - _sqlInsert = `Insert into @${item.sheet} (${fields},jskey)` + _sqlInsert = `Insert into @${sheet} (${fields},jskey,BID)` _sqlBottom = ` /* 榛樿sql */ delete tmp_excel_in where upid=@upid@ @@ -939,12 +1003,11 @@ ${_prevCustomScript} ${_insert} ${_backCustomScript} - Delete @${item.sheet} + Delete @${sheet} aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` - // if (window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') { - if (window.GLOB.systemType !== 'production') { + if ((window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') || window.debugger === true) { let fsql = ` ${_sql} ${_sqlInsert} @@ -954,18 +1017,18 @@ ${_sqlBottom} ` fsql = fsql.replace(/\n\s{8}/ig, '\n') - console.log(fsql) + console.info(fsql) } } else { // s_sDataDictb_excelIn 浜戠瀵嗛挜楠岃瘉鍙傛暟 _sql = ` /* 绯荤粺鐢熸垚 */ - declare @${item.sheet} table (jskey nvarchar(50)) + declare @${sheet} table (jskey nvarchar(50)) Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512) Select @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}' ` } - + return { sql: _sql, lines: result.map((list, index) => { @@ -981,32 +1044,18 @@ } /** - * @description 鏍煎紡鍖杄xcel涓殑date鍊� - * @param {Number} number 鏃堕棿鍊� - */ - static formatExcelDate(number) { - const time = new Date((number - 1) * 24 * 3600000 + 1) - time.setYear(time.getFullYear() - 70) - const year = time.getFullYear() - const month = time.getMonth() + 1 - const date = time.getDate() - 1 - - return `${year}-${(month < 10 ? '0' + month : month)}-${(date < 10 ? '0' + date : date)}` - } - - /** * @description 浣跨敤绯荤粺鍑芥暟鏃讹紙sPC_TableData_InUpDe 锛夛紝鐢熸垚sql璇彞 * @return {String} type 鎵ц绫诲瀷 * @return {String} table 琛ㄥ悕 */ - static getSysDefaultSql (btn, setting, formdata, param, data, logcolumns, tab) { + static getSysDefaultSql (btn, setting, formdata, param, data, columns, tab) { let primaryId = param.ID let BID = param.BID let verify = btn.verify || {} let _formFieldValue = {} let _actionType = null let appkey = window.GLOB.appkey || '' - let sessionUid = sessionStorage.getItem('SessionUid') || '' + let sessionUid = localStorage.getItem('SessionUid') || '' if (verify.default !== 'false') { // 鍒ゆ柇鏄惁浣跨敤榛樿sql _actionType = btn.sqlType @@ -1038,106 +1087,92 @@ }) // 闇�瑕佸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'] // 涓婚敭瀛楁 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) - ` + // sql璇彞 + let _sql = '' - // let _initvars = ['ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey'] // 宸茶祴鍊煎瓧娈甸泦 let _initvars = [] // 宸茶祴鍊煎瓧娈甸泦 - let _initfields = [] + let _initFormfields = [] + let _initColfields = [] let _declarefields = [] // 鑾峰彇瀛楁閿�煎 - if (formdata) { - formdata.forEach(form => { - if (form.type === 'text') { // 鐗规畩瀛楁鏇挎崲 - form.value = form.value.replace(/^(\s*)@appkey@(\s*)$/ig, appkey) - form.value = form.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, sessionUid) - form.value = form.value.replace(/^(\s*)@bid@(\s*)$/ig, BID) + formdata && formdata.forEach(form => { + if (form.type === 'text') { // 鐗规畩瀛楁鏇挎崲 + form.value = form.value.replace(/^(\s*)@appkey@(\s*)$/ig, appkey) + form.value = form.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, sessionUid) + form.value = form.value.replace(/^(\s*)@bid@(\s*)$/ig, BID) + } + + _formFieldValue[form.key] = form.value + let _key = form.key.toLowerCase() + + if (!_initvars.includes(_key)) { + _initvars.push(_key) + + if (form.type === 'number') { + let val = form.value + if (typeof(val) !== 'number') { + val = parseFloat(val) + if (isNaN(val)) { + val = 0 + } + } + _initFormfields.push(`@${_key}=${val}`) + } else { + _initFormfields.push(`@${_key}='${form.value}'`) + } + } + + if (!_vars.includes(_key)) { + _vars.push(_key) + + if (form.fieldlen && form.fieldlen > 2048) { + form.fieldlen = 'max' } - _formFieldValue[form.key] = form.value - let _key = form.key.toLowerCase() + let _type = `nvarchar(${form.fieldlen})` + + if (form.type.match(/date/ig)) { + _type = 'datetime' + } else if (form.type === 'number') { + _type = `decimal(18,${form.fieldlen})` + } + + _declarefields.push(`@${_key} ${_type}`) + } + }) + + // 娣诲姞鏁版嵁涓瓧娈碉紝琛ㄥ崟鍊间紭鍏�(鎸夐挳涓嶉�夎鎴栧琛屾嫾鎺ユ椂璺宠繃) + if (data && btn.Ot !== 'notRequired' && btn.Ot !== 'requiredOnce') { + _formFieldValue = {...data, ..._formFieldValue} + const setField = (col) => { + if (!col.field) return + let _key = col.field.toLowerCase() if (!_initvars.includes(_key)) { - _initvars.push(_key) + let _val = data.hasOwnProperty(col.field) ? data[col.field] : '' - 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}'`) - } + _initvars.push(_key) + _initColfields.push(`@${_key}='${_val}'`) } if (!_vars.includes(_key)) { _vars.push(_key) - if (form.fieldlen && form.fieldlen > 2048) { - form.fieldlen = 'max' - } - - let _type = `nvarchar(${form.fieldlen})` - - if (form.type.match(/date/ig)) { - _type = 'datetime' - } else if (form.type === 'number') { - _type = `decimal(18,${form.fieldlen})` - } - - _declarefields.push(`@${_key} ${_type}`) - } - }) - } - - // 娣诲姞鏁版嵁涓瓧娈碉紝琛ㄥ崟鍊间紭鍏�(鎸夐挳涓嶉�夎鎴栧琛屾嫾鎺ユ椂璺宠繃) - if (data && btn.Ot !== 'notRequired' && btn.Ot !== 'requiredOnce') { - _formFieldValue = {...data, ..._formFieldValue} - - if (logcolumns && logcolumns.length > 0) { - logcolumns.forEach(col => { - let _key = col.field.toLowerCase() - - if (!_initvars.includes(_key)) { - _initvars.push(_key) - - let _val = data.hasOwnProperty(col.field) ? data[col.field] : '' - - 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}'`) - } - } - - if (!_vars.includes(_key)) { - _vars.push(_key) - + if (col.datatype) { + _declarefields.push(`@${_key} ${col.datatype}`) + } else { if (col.fieldlength && col.fieldlength > 2048) { col.fieldlength = 'max' } let _type = `nvarchar(${col.fieldlength || 50})` - + if (col.type === 'number') { let _length = col.decimal ? col.decimal : 0 _type = `decimal(18,${_length})` @@ -1147,6 +1182,18 @@ _declarefields.push(`@${_key} ${_type}`) } + } + } + + if (columns && columns.length > 0) { + columns.forEach(col => { + if (col.type === 'colspan' || col.type === 'old_colspan') { + col.subcols.forEach(cell => { + setField(cell) + }) + } else { + setField(col) + } }) } } @@ -1154,17 +1201,24 @@ // 鍙橀噺澹版槑 _declarefields = _declarefields.join(',') if (_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} - ` + _declarefields = ',' + _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} + ` - // 鍙橀噺璧嬪�� - _initfields = _initfields.join(',') - if (_initfields) { + // 琛ㄥ崟鍙橀噺璧嬪�� + if (_initFormfields.length > 0) { _sql += ` - - select ${_initfields} + /* 琛ㄥ崟鍙橀噺璧嬪�� */ + select ${_initFormfields.join(',')} + ` + } + // 鏄剧ず鍒楀彉閲忚祴鍊� + if (_initColfields.length > 0) { + _sql += ` + /* 鏄剧ず鍒楀彉閲忚祴鍊� */ + select ${_initColfields.join(',')} ` } @@ -1213,8 +1267,15 @@ // 澶辨晥楠岃瘉锛屾坊鍔犳暟鎹椂涓嶇敤 if (btn.sqlType !== 'insert' && verify.invalid === 'true' && setting.dataresource) { let datasource = setting.dataresource - if (/\s/.test(datasource)) { // 鎷兼帴鍒悕 + if (/\s/.test(datasource) && !/tb$/.test(datasource)) { // 鎷兼帴鍒悕 datasource = '(' + datasource + ') tb' + } + + if (setting.customScript) { + _sql += ` + /* 鏁版嵁婧愯嚜瀹氫箟鑴氭湰锛岃娉ㄦ剰鍙橀噺瀹氫箟鏄惁閲嶅 */ + ${setting.customScript} + ` } if (btn.Ot === 'requiredOnce') { @@ -1256,6 +1317,81 @@ 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 (formdata && verify.billcodes && verify.billcodes.length > 0) { + let keys = formdata.map(item => item.key.toLowerCase()) // 琛ㄥ崟瀛楁 + + verify.billcodes.forEach(item => { + if (!keys.includes(item.field.toLowerCase())) return // 琛ㄥ崟涓笉鍚崟鍙风敓鎴愬瓧娈� + + let _ModularDetailCode = '' + let _lpline = '' + if (item.TypeCharOne === 'Lp') { + if (item.linkField === 'BID' && BID) { // 鏇挎崲bid + _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@BID@,48)` + } else { + _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@${item.linkField},48)` + } + _ModularDetailCode = '@ModularDetailCode' + } else if (item.TypeCharOne === 'BN') { + let _val = '' + if (item.linkField === 'BID' && BID) { // 鏇挎崲bid + _val = BID + } else if (data && data.hasOwnProperty(item.linkField)) { + _val = data[item.linkField] + } + _ModularDetailCode = `'${item.TypeCharOne + _val}'` + } else { + _ModularDetailCode = `'${item.ModularDetailCode}'` + } + + let _declare = '' + let _key = item.field.toLowerCase() + + if (!_vars.includes(_key)) { + _declare = `Declare @${_key} nvarchar(50)` + _vars.push(_key) + } + + _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 + } } // 鍞竴鎬ч獙璇侊紝蹇呴』瀛樺湪琛ㄥ崟锛堣〃鍗曞瓨鍦ㄦ椂锛屼富閿潎涓哄崟鍊硷級,蹇呴』濉啓鏁版嵁婧愶紝澶氳鎷兼帴鏃朵笉鍙敤 @@ -1312,9 +1448,18 @@ } else if (verify.uniques && verify.uniques.length > 0 && btn.Ot === 'requiredOnce' && setting.dataresource) { let datasource = setting.dataresource if (/\s/.test(datasource)) { // 鎷兼帴鍒悕 - datasource = '(' + datasource + ') tb' + if (!/tb$/.test(datasource)) { + datasource = '(' + datasource + ') tb' + } } else { datasource = datasource + ' tb' + } + + if (setting.customScript) { + _sql += ` + /* 鏁版嵁婧愯嚜瀹氫箟鑴氭湰锛岃娉ㄦ剰鍙橀噺瀹氫箟鏄惁閲嶅 */ + ${setting.customScript} + ` } verify.uniques.forEach(item => { @@ -1331,77 +1476,6 @@ 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 = '' - let _lpline = '' - if (item.TypeCharOne === 'Lp') { - if (item.linkField === 'BID' && BID) { // 鏇挎崲bid - _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@BID@,48)` - } else { - _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@${item.linkField},48)` - } - _ModularDetailCode = '@ModularDetailCode' - } else if (item.TypeCharOne === 'BN') { - let _val = '' - if (item.linkField === 'BID' && BID) { // 鏇挎崲bid - _val = BID - } else if (data && data.hasOwnProperty(item.linkField)) { - _val = data[item.linkField] - } - _ModularDetailCode = `'${item.TypeCharOne + _val}'` - } else { - _ModularDetailCode = `'${item.ModularDetailCode}'` - } - - let _declare = '' - let _key = item.field.toLowerCase() - - if (!_vars.includes(_key)) { - _declare = `Declare @${_key} nvarchar(50)` - _vars.push(_key) - } - - _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 @@ -1439,6 +1513,8 @@ let values = [] formdata.forEach(item => { + if (item.writein === false) return + keys.push(item.key.toLowerCase()) values.push('@' + item.key) }) @@ -1482,6 +1558,8 @@ let _arr = [] formdata.forEach(item => { + if (item.writein === false) return + _arr.push(item.key.toLowerCase()) _form.push(item.key + '=@' + item.key) }) @@ -1548,10 +1626,10 @@ } else if (_actionType === 'delete') { // 鐗╃悊鍒犻櫎 let _msg = '' - if (data && logcolumns && logcolumns.length > 0) { + if (data && columns && columns.length > 0) { let _index = 0 - logcolumns.forEach(col => { - if (col.Hide !== 'true' && _index < 4) { + columns.forEach(col => { + if (col.Hide !== 'true' && col.type !== 'colspan' && col.type !== 'old_colspan' && _index < 4) { _msg += col.label + '=' + data[col.field] + ',' _index++ } @@ -1591,10 +1669,9 @@ _sql += ` aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` - // if (window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') { - if (window.GLOB.systemType !== 'production') { + if ((window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') || window.debugger === true) { _sql = _sql.replace(/\n\s{8}/ig, '\n') - console.log(_sql) + console.info(_sql) } return _sql -- Gitblit v1.8.0