| | |
| | | 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位uuid string + 时间 |
| | | * @return {String} uuid |
| | |
| | | * @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 {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、替换%符(数据库中解析后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) |
| | | }) |
| | | // 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) |
| | | |
| | | 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) |
| | | }) |
| | |
| | | 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 => { |
| | |
| | | // 失效验证,添加数据时不用 |
| | | 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') { |
| | |
| | | } 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 => { |
| | |
| | | let values = [] |
| | | |
| | | formdata.forEach(item => { |
| | | if (item.writein === false) return |
| | | |
| | | keys.push(item.key.toLowerCase()) |
| | | values.push('@' + item.key) |
| | | }) |
| | |
| | | let _arr = [] |
| | | |
| | | formdata.forEach(item => { |
| | | if (item.writein === false) return |
| | | |
| | | _arr.push(item.key.toLowerCase()) |
| | | _form.push(item.key + '=@' + item.key) |
| | | }) |