king
2020-09-14 76427d51a079a5fd1f45bf7188249e7a4647ae05
src/utils/utils.js
@@ -2,6 +2,41 @@
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 数据源名称,用于统一查询
@@ -51,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)
  }
@@ -110,90 +149,68 @@
  /**
   * @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)
    })
    // 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
  }
  /**
@@ -202,47 +219,11 @@
   */
  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)
    })
@@ -877,7 +858,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 => {
@@ -1217,8 +1198,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') {
@@ -1387,11 +1375,20 @@
    } 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 += `
        /* 同类数据验证 */