king
2024-08-28 c10fc10d5fd307a7b334bcde6af5c1175aaa0410
src/utils/utils-custom.js
@@ -1985,10 +1985,18 @@
  let _quot = sql.match(/'{1}/g)
  let _lparen = sql.match(/\({1}/g)
  let _rparen = sql.match(/\){1}/g)
  let _ch_b = sql.match(/\$check@/ig)
  let _ch_d = sql.match(/@check\$/ig)
  let _m_b = sql.match(/\$@/ig)
  let _m_d = sql.match(/@\$/ig)
  _quot = _quot ? _quot.length : 0
  _lparen = _lparen ? _lparen.length : 0
  _rparen = _rparen ? _rparen.length : 0
  _ch_b = _ch_b ? _ch_b.length : 0
  _ch_d = _ch_d ? _ch_d.length : 0
  _m_b = _m_b ? _m_b.length : 0
  _m_d = _m_d ? _m_d.length : 0
  if (_quot % 2 !== 0) {
    notification.warning({
@@ -2001,6 +2009,20 @@
    notification.warning({
      top: 92,
      message: 'sql中()必须成对出现',
      duration: 5
    })
    return false
  } else if (_ch_b !== _ch_d) {
    notification.warning({
      top: 92,
      message: 'sql中 $check@ 与 @check$ 必须成对出现',
      duration: 5
    })
    return false
  } else if (_m_b !== _m_d) {
    notification.warning({
      top: 92,
      message: 'sql中 $@ 与 @$ 必须成对出现',
      duration: 5
    })
    return false
@@ -2869,6 +2891,8 @@
  let filterComponent = (components, mainSearch) => {
    components.forEach(item => {
      item.$menuname = (config.MenuName || '') + '-' + (item.name || '')
      if (item.type === 'tabs') {
        item.subtabs.forEach(tab => {
          let _mainSearch = mainSearch || []
@@ -3135,7 +3159,6 @@
  let getSearches = (searches) => {
    let sFields = []
    let query = false
    searches.forEach(item => {
      if (!item.field) return
  
@@ -3177,13 +3200,9 @@
      } else {
        sFields.push(item.field)
      }
      if (query) return
      query = item.query !== 'false'
    })
  
    return { sFields, query }
    return sFields
  }
  let getSysDefaultSql = (btn, component) => {
@@ -4347,7 +4366,7 @@
      searches = [...searches, ...mainSearch]
    }
    item.$searches = fromJS(searches).toJS()
    let { sFields, query } = getSearches(searches)
    let sFields = getSearches(searches)
    let _columns = []
    if (item.subtype === 'dualdatacard') {
@@ -4374,8 +4393,18 @@
      }
    })
    if (_customScript || _tailScript) {
      _tailScript += `${_tailScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
      `
    }
    let _search = ''
    if (item.setting.execute !== 'false') {
      _dataresource = item.setting.dataresource || ''
      _search = '@mk_search@'
    }
    if (/\s/.test(_dataresource)) {
@@ -4385,20 +4414,12 @@
    item.setting.dataresource = _dataresource
    item.setting.customScript = _customScript
    
    let _search = '@search@'
    if (item.setting.queryType === 'statistics' || !query) {
      _search = ''
    }
    let testSql = _dataresource + _customScript + _tailScript
    
    let decSql = [`@ErrorCode nvarchar(50),@retmsg nvarchar(4000)`]
    let secSql = [`@ErrorCode='',@retmsg =''`]
    let reps = []
    if (_customScript || _tailScript) {
      reps.push('UserID', 'time_id')
    }
    let syses = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address']
    syses.forEach(s => {
@@ -4446,134 +4467,83 @@
    let LText = ''
    let DateCount = ''
    if (_dataresource) {
      /*system_query*/
      if (/@pageSize@|@orderBy@|@mk_total/i.test(testSql)) {
        LText = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} `
        LText = `select ${arr_field} from ${_dataresource} ${_search} `
      } else if (item.setting.laypage === 'true' && item.setting.order) {
        LText = `/*system_query*/select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${_search}) tmptable where rows > @pageSize@ * (@pageIndex@ - 1) order by tmptable.rows `
        LText = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${_search}) tmptable where rows > @pageSize@ * (@pageIndex@ - 1) order by tmptable.rows `
        reps.push('pageSize', 'orderBy', 'pageIndex')
        if (item.subtype === 'dualdatacard') {
          DateCount = `/*system_query*/select count(1) as total from (select distinct ${item.setting.primaryKey || 'ID'} from ${_dataresource} ${_search})a`
          DateCount = `select count(1) as total from (select distinct ${item.setting.primaryKey || 'ID'} from ${_dataresource} ${_search})a`
        } else {
          DateCount = `/*system_query*/select count(1) as total from ${_dataresource} ${_search}`
          DateCount = `select count(1) as total from ${_dataresource} ${_search}`
        }
      } else if (item.setting.$top) {
        if (item.setting.order) {
          LText = `/*system_query*/select top 1 ${arr_field} from ${_dataresource} ${_search} order by @orderBy@ `
          LText = `select top 1 ${arr_field} from ${_dataresource} ${_search} order by @orderBy@ `
          reps.push('orderBy')
        } else {
          LText = `/*system_query*/select top 1 ${arr_field} from ${_dataresource} ${_search}  `
          LText = `select top 1 ${arr_field} from ${_dataresource} ${_search}  `
        }
      } else if (item.setting.order) {
        LText = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} order by @orderBy@ `
        LText = `select ${arr_field} from ${_dataresource} ${_search} order by @orderBy@ `
        reps.push('orderBy')
      } else {
        LText = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search}  `
        LText = `select ${arr_field} from ${_dataresource} ${_search}  `
      }
    }
    if (_customScript) {
      _customScript = `${decSql}
        ${_customScript}
      `
      if (DateCount) {
        DateCount = `${DateCount}
        ${_tailScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode,@retmsg,@UserID@
        `
      } else if (LText) {
        LText = `${LText}
        ${_tailScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode,@retmsg,@UserID@
        `
      } else {
        _customScript = `${_customScript}
        ${_tailScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
        `
      }
    } else if (_tailScript && DateCount) {
      LText = `${decSql}
        ${LText}
      `
      DateCount = `${DateCount}
        ${_tailScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
      `
    } else if (_tailScript) {
      LText = `${decSql}
        ${LText}
        ${_tailScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
      `
    } else {
      LText = `${decSql}
        ${LText}
      `
    }
    reps = Array.from(new Set(reps))
    // LText = LText.replace(/\n\s{6,8}/g, '\n')
    // DateCount = DateCount.replace(/\n\s{6,8}/g, '\n')
    // _customScript = _customScript.replace(/\n\s{6,8}/g, '\n')
    // LText = LText.replace(/\n\s+\/\*/g, `\n/*`)
    // DateCount = DateCount.replace(/\n\s+\/\*/g, `\n/*`)
    // _customScript = _customScript.replace(/\n\s+\/\*/g, `\n/*`)
    let sub_name = ''
    let tabid = ''
    let parid = ''
    let sub_field = ''
    if (item.subtype === 'dualdatacard') {
      arr_field = item.columns.map(col => col.field).join(',')
      sub_name = item.setting.subdata
      tabid = item.setting.primaryKey || ''
      parid = item.setting.subBID || ''
      sub_field = item.subColumns.map(col => col.field).join(',')
    }
    let sql = `SELECT obj_name='@mk_obj_name@',prm_field='',str_field='',
      arr_field='${arr_field}',tabid='${tabid}',parid='${parid}',sub_name='${sub_name}',sub_field='${sub_field}'
      `
    if (DateCount) {
      sql += `UNION ALL
        SELECT obj_name='DateCount',prm_field='total',str_field='',
        arr_field='',tabid='',parid='',sub_name='',sub_field=''
      `
    }
    sql += `
      ${decSql}
      ${_customScript}
      ${LText}
      ${DateCount}
      ${_tailScript}
    `
    reps.forEach(n => {
      if (['orderBy', 'pageSize', 'pageIndex'].includes(n)) return
      LText = LText.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
      DateCount = DateCount.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
      _customScript = _customScript.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
    })
    if (/\$@/ig.test(testSql)) {
      LText = LText.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
      DateCount = DateCount.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
      _customScript = _customScript.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
    if (/\$@/ig.test(sql)) {
      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
      reps.push('datam_begin', 'datam_end')
    }
    if (/@db@/ig.test(testSql)) {
    if (/@db@/ig.test(sql)) {
      reps.push('db')
    }
    reps.push('mk_obj_name')
    // let sql = ''
    // let sub_name = ''
    // let tabid = ''
    // let parid = ''
    // let sub_field = ''
    sql = sql.replace(/\n\x20{6,8}/g, '\n').replace(/\n{3,}/g, '\n\n').replace(/^\s+|\s+$/g, '')
    // if (item.subtype === 'dualdatacard') {
    //   arr_field = item.columns.map(col => col.field).join(',')
    //   sub_name = item.setting.subdata
    //   tabid = item.setting.primaryKey || ''
    //   parid = item.setting.subBID || ''
    //   sub_field = item.subColumns.map(col => col.field).join(',')
    // }
    // sql += `
    //   SELECT obj_name='data',prm_field='',str_field='',
    //   arr_field='${arr_field}',tabid='${tabid}',parid='${parid}',sub_name='${sub_name}',sub_field='${sub_field}'
    // `
    // if (DateCount) {
    //   sql += `UNION ALL
    //     SELECT obj_name='DateCount',prm_field='total',str_field='',
    //     arr_field='',tabid='',parid='',sub_name='',sub_field=''
    //   `
    // }
    return {LText, DateCount, customScript: _customScript, reps}
    return {LText: sql, reps}
  }
  let getExcelInSql = (item) => {
@@ -5321,14 +5291,14 @@
      item.dataSource = '(' + item.dataSource + ') tb'
    }
    let sql = ''
    let LText = ''
    let DateCount = ''
    let _search = ''
    let reps = []
    let sFields = []
    if (item.searchKey) {
      _search = '@search@'
      _search = '@mk_search@'
      sFields = item.searchKey.split(',')
    }
@@ -5341,22 +5311,12 @@
      }
    })
    if (item.laypage === 'true') {
      sql = `/*system_query*/select top @pageSize@ ${arrfield} from (select ${arrfield} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${item.dataSource} ${_search}) tmptable where rows > @pageSize@ * (@pageIndex@ - 1) order by tmptable.rows `
      DateCount = `/*system_query*/select count(1) as total from ${item.dataSource} ${_search}`
      reps.push('pageSize', 'orderBy', 'pageIndex')
    } else {
      sql = `/*system_query*/select ${arrfield} from ${item.dataSource} ${_search} order by @orderBy@ `
      reps.push('orderBy')
    }
    let decSql = []
    let secSql = []
    let syses = ['mk_departmentcode', 'mk_organization', 'mk_user_type']
    syses.forEach(s => {
      if (new RegExp('@' + s + '[^0-9a-z_]', 'ig').test(sql)) {
      if (new RegExp('@' + s + '[^0-9a-z_]', 'ig').test(item.dataSource)) {
        if (['mk_departmentcode', 'mk_organization'].includes(s)) {
          decSql.push(`@${s} nvarchar(512)`)
        } else {
@@ -5371,27 +5331,53 @@
    secSql = secSql.join(',')
    if (decSql) {
      sql = `Declare ${decSql} select ${secSql}
        ${sql}
      decSql = `Declare ${decSql} select ${secSql}`
    }
    if (item.laypage === 'true') {
      /*system_query*/
      LText = `select top @pageSize@ ${arrfield} from (select ${arrfield} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${item.dataSource} ${_search}) tmptable where rows > @pageSize@ * (@pageIndex@ - 1) order by tmptable.rows `
      DateCount = `select count(1) as total from ${item.dataSource} ${_search}`
      reps.push('pageSize', 'orderBy', 'pageIndex')
    } else {
      LText = `select ${arrfield} from ${item.dataSource} ${_search} order by @orderBy@ `
      reps.push('orderBy')
    }
    let sql = `SELECT obj_name='data',prm_field='',str_field='',
      arr_field='${arrfield}',tabid='',parid='',sub_name='',sub_field=''
      `
    if (DateCount) {
      sql += `UNION ALL
        SELECT obj_name='DateCount',prm_field='total',str_field='',
        arr_field='',tabid='',parid='',sub_name='',sub_field=''
      `
    }
    sql += `
      ${decSql}
      ${LText}
      ${DateCount}
    `
    reps.forEach(n => {
      if (['orderBy', 'pageSize', 'pageIndex'].includes(n)) return
      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
      DateCount = DateCount.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
    })
    if (/\$@/ig.test(sql)) {
      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
      DateCount = DateCount.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
      reps.push('datam_begin', 'datam_end')
    }
    if (/@db@/ig.test(sql)) {
      reps.push('db')
    }
    
    return {LText: sql, DateCount, reps}
    sql = sql.replace(/\n\x20{6,8}/g, '\n').replace(/\n{3,}/g, '\n\n').replace(/^\s+|\s+$/g, '')
    return {LText: sql, reps}
  }
  let _mainSearch = []