king
2023-03-11 34e7681fd12b1c4e4994d3bea1a553870e10bc50
src/menu/datasource/verifycard/utils.jsx
@@ -14,12 +14,14 @@
    let _customScript = ''
    let arr_field = columns.map(item => item.field).join(',')
    if (scripts.length > 0) {
      scripts.forEach(item => {
        _customScript += `
          ${item.sql}
        `
      })
    scripts.forEach(item => {
      _customScript += `
        ${item.sql}
      `
    })
    if (!arr_field) {
      arr_field = '*'
    }
    if (setting.interType === 'system' && setting.execute !== 'false') {
@@ -40,8 +42,8 @@
    //   error = '系统函数' + _customScript.match(/\$ex@.{1,50}@ex\$/g)[0].replace(/\$ex@|@ex\$/g, '') + '未定义'
    // }
    _dataresource = _dataresource.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid)@/ig, `'${timestamp}'`)
    _customScript = _customScript.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid)@/ig, `'${timestamp}'`)
    _dataresource = _dataresource.replace(/@(BID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid|typename)@/ig, `'${timestamp}'`)
    _customScript = _customScript.replace(/@(BID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid|typename)@/ig, `'${timestamp}'`)
    _dataresource = _dataresource.replace(/@\$|\$@/ig, '')
    _customScript = _customScript.replace(/@\$|\$@/ig, '')
@@ -128,7 +130,7 @@
    let _search = defSearch
    if (setting.queryType === 'statistics' && _dataresource) {
    if (_dataresource) {
      _regoptions.forEach(item => {
        _dataresource = _dataresource.replace(item.reg, '0')
      })
@@ -161,9 +163,9 @@
    let sumSql = ''
    if (arr_field && _dataresource && /\/\*\$sum@/ig.test(_dataresource)) {
    if (_dataresource && /\/\*\$sum@/ig.test(_dataresource)) {
      let _sql = _dataresource.replace(/\/\*\$sum@|@sum\$\*\//ig, '')
      _sql = `${_sql} ${_search}`
      _sql = `/*system_query*/${_sql} ${_search}`
      if (_customScript) {
        sumSql = `/* sql sum验证 */
          ${_customScript}
@@ -180,15 +182,15 @@
    }
    // 数据源处理, 存在显示列时 
    if (arr_field && _dataresource) {
    if (_dataresource) {
      if (/\s/.test(_dataresource)) {
        _dataresource = '(' + _dataresource + ') tb'
      }
      if (setting.order) {
        _dataresource = `select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage === 'true' ?  'where rows > 0' : ''} order by tmptable.rows`
        _dataresource = `/*system_query*/select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage === 'true' ?  'where rows > 0' : ''} order by tmptable.rows`
      } else {
        _dataresource = `select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from ${_dataresource} ${_search}`
        _dataresource = `/*system_query*/select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from ${_dataresource} ${_search}`
      }
    }
@@ -214,14 +216,40 @@
    if (/@[0-9a-zA-Z_]+@/ig.test(sql)) {
      let arr = sql.match(/@[0-9a-zA-Z_]+@/ig)
      let getTrueSql = (sl) => {
        if (!/\/\*/.test(sl)) return sl
        let index = 0
        sl = sl.replace(/\s/ig, ' ')
        sl = sl.replace(/\*\//ig, 'm_k@')
        sl = sl.replace(/\/\*/ig, () => {
          index++
          return '@m_k' + index
        })
        for (let i = index; i > 0; i--) {
          let reg = new RegExp(`@m_k${i}.+m_k@`, 'ig')
          sl = sl.replace(reg, '')
        }
        return sl
      }
      let _scripts = []
      _dataresource = _dataresource.replace('/*system_query*/', '')
      _dataresource = getTrueSql(_dataresource)
      scripts.forEach(item => {
        _scripts.push({...item, sql: getTrueSql(item.sql)})
      })
      arr.forEach(item => {
        let reg = new RegExp(item, 'ig')
        if (reg.test(_dataresource)) {
          errors.push(`数据源中存在未替换值${item}`)
        }
        scripts && scripts.forEach(script => {
        _scripts.forEach(script => {
          if (reg.test(script.sql)) {
            errors.push(`自定义脚本(${script.$index})存在未替换值${item}`)
            errors.push(`自定义脚本(${script.$index || ''})存在未替换值${item}`)
          }
        })
      })
@@ -231,8 +259,10 @@
      sumSql = sumSql.replace(/\n\s{10}/ig, '\n')
      console.info(sumSql)
      sumSql = sumSql.replace(/\n/g, ' ')
    }
    sql = sql.replace(/\n/g, ' ')
    return { error, sql, sumSql, errors: errors.join(';') }
  }
}