| | |
| | | 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 数据源名称,用于统一查询 |
| | |
| | | * @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) |
| | | } |
| | | |
| | |
| | | /** |
| | | * @description sql加密 |
| | | * @return {String} value |
| | | * @return {Boolean} isUnFormat // 是否为解密 |
| | | */ |
| | | 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、替换%符(数据库中解析后sql报错) |
| | | value = value.replace(/%/ig, ' mpercent ') |
| | | |
| | | // 1、encode编码(中文字符超出base64加密范围),2、base64加密 |
| | | 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 { // 解密 |
| | | 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) |
| | | }) |
| | | // 替换%符(数据库中解析后sql报错) |
| | | value = value.replace(/%/ig, ' mpercent ') |
| | | // encode编码(中文字符超出base64加密范围) |
| | | 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 解密 |
| | | * @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 |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | 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) |
| | | }) |
| | |
| | | fullName = sessionStorage.getItem('CloudFullName') || '' |
| | | } |
| | | |
| | | let database = item.sheet.match(/(.*)\.(.*)\./ig) || '' |
| | | let sheet = item.sheet.replace(/(.*)\.(.*)\./ig, '') |
| | | |
| | | let errors = [] |
| | | let _topline = btn.range || 0 |
| | | let upId = this.getuuid() |
| | |
| | | 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 => { |
| | |
| | | _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 |
| | |
| | | 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 |
| | |
| | | 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),BID 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,BID)` |
| | | _sqlInsert = `Insert into @${sheet} (${fields},jskey,BID)` |
| | | _sqlBottom = ` |
| | | /* 默认sql */ |
| | | delete tmp_excel_in where upid=@upid@ |
| | |
| | | ${_prevCustomScript} |
| | | ${_insert} |
| | | ${_backCustomScript} |
| | | Delete @${item.sheet} |
| | | Delete @${sheet} |
| | | |
| | | aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` |
| | | |
| | |
| | | } 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}' |
| | |
| | | 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() |
| | | _formFieldValue[form.key] = form.value |
| | | let _key = form.key.toLowerCase() |
| | | |
| | | if (!_initvars.includes(_key)) { |
| | | _initvars.push(_key) |
| | | 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 |
| | | } |
| | | 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}'`) |
| | | } |
| | | _initfields.push(`@${_key}=${val}`) |
| | | } else { |
| | | _initfields.push(`@${_key}='${form.value}'`) |
| | | } |
| | | |
| | | if (!_vars.includes(_key)) { |
| | | _vars.push(_key) |
| | | } |
| | | |
| | | 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 (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') { |
| | |
| | | // 失效验证,添加数据时不用 |
| | | 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') { |
| | |
| | | |
| | | // 单号生成,使用上级id(BID)或列表数据,声明变量(检验) |
| | | let _billcodesSql = '' |
| | | if (verify.billcodes && verify.billcodes.length > 0) { |
| | | 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') { |
| | |
| | | } 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 => { |
| | | _sql += ` |
| | | /* 同类数据验证 */ |