king
2024-08-20 58826d6f4eab9f8c9acf9fa8696f60039c645cfe
src/menu/debug/index.jsx
@@ -90,6 +90,65 @@
    if (process) {
      regs.push({ reg: /@works_flow_code@/ig, value: `'1949-10-01 15:00:00'` })
    }
    let _mainSearch = []
    if (sessionStorage.getItem('appType') === 'mob') {
      let search = []
      let ms = null
      config.components.forEach(item => {
        if (item.type === 'topbar' && item.wrap.type !== 'navbar' && item.search) {
          ms = item.search
        } else if (item.type === 'search' && item.wrap.field) {
          search.push({
            type: 'text',
            label: item.wrap.label,
            field: item.wrap.field,
            match: item.wrap.match,
            required: item.wrap.required,
            value: item.wrap.initval || ''
          })
        }
      })
      if (ms) {
        if (ms.setting.type === 'search') {
          search.push({
            type: 'text',
            label: '搜索栏',
            field: ms.setting.field,
            match: ms.setting.match,
            required: ms.setting.required,
            value: ms.setting.initval || ''
          })
        }
        search.push(...ms.fields)
        ms.groups.forEach(group => {
          if (group.setting.type === 'search') {
            search.push({
              type: 'text',
              label: group.wrap.name,
              field: group.setting.field,
              match: group.setting.match,
              required: group.setting.required,
              value: group.setting.initval || ''
            })
          }
          search.push(...group.fields)
        })
      }
      if (search.length > 0) {
        _mainSearch = search
      }
    } else {
      config.components.forEach(component => {
        if (component.type !== 'search') return
        _mainSearch = component.search || []
      })
    }
    
    if (config.interfaces && config.interfaces.length > 0) {
      config.interfaces.forEach(m => {
@@ -98,13 +157,13 @@
        m.setting.laypage = 'false'
        m.setting.$top = true
        let sql = this.formatDataSource(m, regs)
        let sql = this.formatDataSource(m, regs, _mainSearch)
  
        this.sqlList.push({label: m.setting.name, children: [{label: '数据源', sql: sql}]})
      })
    }
    this.filterComponent(config.components, [], regs, process)
    this.filterComponent(config.components, _mainSearch, regs, process)
    let sqls = []
    let foreachSql = (list, name, tabName = '', supName = '') => {
@@ -229,72 +288,23 @@
  filterComponent = (components, mainSearch, regs, process, ispop = false) => {
    let appType = sessionStorage.getItem('appType')
    let _mainSearch = mainSearch || []
    if (appType === 'mob') {
      let search = []
      let ms = null
      components.forEach(item => {
        if (item.type === 'topbar' && item.wrap.type !== 'navbar' && item.search) {
          ms = item.search
        } else if (item.type === 'search' && item.wrap.field) {
          search.push({
            type: 'text',
            label: item.wrap.label,
            field: item.wrap.field,
            match: item.wrap.match,
            required: item.wrap.required,
            value: item.wrap.initval || ''
          })
        }
      })
      if (ms) {
        if (ms.setting.type === 'search') {
          search.push({
            type: 'text',
            label: '搜索栏',
            field: ms.setting.field,
            match: ms.setting.match,
            required: ms.setting.required,
            value: ms.setting.initval || ''
          })
        }
        search.push(...ms.fields)
        ms.groups.forEach(group => {
          if (group.setting.type === 'search') {
            search.push({
              type: 'text',
              label: group.wrap.name,
              field: group.setting.field,
              match: group.setting.match,
              required: group.setting.required,
              value: group.setting.initval || ''
            })
          }
          search.push(...group.fields)
        })
      }
      if (search.length > 0) {
        _mainSearch = search
      }
    } else {
      components.forEach(component => {
        if (component.type !== 'search') return
        _mainSearch = component.search || []
      })
    }
    components.forEach(item => {
      if (item.type === 'tabs') {
        item.subtabs.forEach(tab => {
          let _mainSearch = mainSearch || []
          if (appType !== 'mob') {
            tab.components.forEach(com => {
              if (com.type !== 'search') return
              _mainSearch = com.search || []
            })
          }
          this.filterComponent(tab.components, _mainSearch, regs, process)
        })
      } else if (item.type === 'group') {
        this.filterComponent(item.components, _mainSearch, regs, process)
        this.filterComponent(item.components, mainSearch, regs, process)
      } else {
        let children = []
        if (item.wrap && item.setting) {
@@ -317,13 +327,13 @@
            item.setting.$top = true
          }
          let sql = this.formatDataSource(item, regs, _mainSearch)
          let sql = this.formatDataSource(item, regs, mainSearch)
  
          children.push({label: '数据源', sql: sql})
        } else if (item.setting && item.setting.useMSearch === 'true') {
          let searches = item.search || []
          if (_mainSearch.length > 0) {
            searches = [...searches, ..._mainSearch]
          if (mainSearch.length > 0) {
            searches = [...searches, ...mainSearch]
          }
          item.$searches = fromJS(searches).toJS()
        }
@@ -567,7 +577,31 @@
        if (process) {
          regs.push({ reg: /@works_flow_code@/ig, value: `'1949-10-01 15:00:00'` })
        }
        this.filterComponent(cell.config.components, [], regs, process, true)
        let _mainSearch = []
        if (sessionStorage.getItem('appType') === 'mob') {
          cell.config.components.forEach(item => {
            if (item.type === 'search' && item.wrap.field) {
              _mainSearch.push({
                type: 'text',
                label: item.wrap.label,
                field: item.wrap.field,
                match: item.wrap.match,
                required: item.wrap.required,
                value: item.wrap.initval || ''
              })
            }
          })
        } else {
          cell.config.components.forEach(component => {
            if (component.type !== 'search') return
            _mainSearch = component.search || []
          })
        }
        this.filterComponent(cell.config.components, _mainSearch, regs, process, true)
        if (this.sqlPopList.length) {
          sql = fromJS(this.sqlPopList).toJS()
@@ -982,34 +1016,28 @@
    if (verify.invalid === 'true') {
      let datasource = setting.dataresource
      let customScript = setting.customScript || ''
      let orderBy = setting.order
      let regoptions = [{
        reg: new RegExp('@userName@', 'ig'),
        value: `'${userName}'`
      }, {
        reg: new RegExp('@fullName@', 'ig'),
        value: `'${fullName}'`
      }, {
        reg: new RegExp('@orderBy@', 'ig'),
        value: setting.order || primaryKey
      }, {
        reg: new RegExp('@pageSize@', 'ig'),
        value: 1
      }, {
        reg: new RegExp('@pageIndex@', 'ig'),
        value: 1
      }]
      if (setting.queryType === 'statistics' || customScript) {
        let searches = formatSearch(component.$searches || [])
        let regoptions = getSearchRegs(searches)
        regoptions.push({
          reg: new RegExp('@userName@', 'ig'),
          value: `'${userName}'`
        }, {
          reg: new RegExp('@fullName@', 'ig'),
          value: `'${fullName}'`
        }, {
          reg: new RegExp('@orderBy@', 'ig'),
          value: orderBy
        }, {
          reg: new RegExp('@pageSize@', 'ig'),
          value: 999999
        }, {
          reg: new RegExp('@pageIndex@', 'ig'),
          value: 1
        })
        regoptions.forEach(item => {
          datasource = datasource.replace(item.reg, item.value)
          customScript = customScript.replace(item.reg, item.value)
        })
      }
      regoptions.forEach(item => {
        datasource = datasource.replace(item.reg, item.value)
        customScript = customScript.replace(item.reg, item.value)
      })
  
      if (customScript) {
        _sql += `
@@ -1084,7 +1112,6 @@
  
        if (!keys.includes(_key)) return // 表单中不含单号生成字段
  
        let _ModularDetailCode = ''
        let _lpline = ''
        if (item.TypeCharOne === 'Lp') {
          if (_linkKey === 'bid' && BID) { // 替换bid
@@ -1092,33 +1119,22 @@
          } else {
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@${_linkKey},48)`
          }
          _ModularDetailCode = '@ModularDetailCode'
        } else if (item.TypeCharOne === 'BN') {
          let _val = ''
          if (_linkKey === 'bid' && BID) { // 替换bid
            _val = BID
            _lpline = `set @ModularDetailCode= 'BN'+ right(@BID@,48)`
          } else {
            _val = 0
            _lpline = `set @ModularDetailCode= 'BN'+ right(@${_linkKey},48)`
          }
          _ModularDetailCode = `'${item.TypeCharOne + _val}'`
        } else {
          _ModularDetailCode = `'${item.ModularDetailCode}'`
        }
        let _declare = ''
        if (!_vars.includes(_key)) {
          _declare = `Declare @${_key} nvarchar(50)`
          _vars.push(_key)
          _lpline = `set @ModularDetailCode= right('${item.ModularDetailCode}',50)`
        }
  
        _billcodesSql += `
        /* 单号生成 */
        ${_declare}
        select @BillCode='', @${_key}='', @ModularDetailCode=''
        ${_lpline}
        exec s_get_BillCode
          @ModularDetailCode=${_ModularDetailCode},
          @ModularDetailCode=@ModularDetailCode,
          @Type=${item.Type},
          @TypeCharOne='${item.TypeCharOne}',
          @TypeCharTwo ='${item.TypeCharTwo}',
@@ -1157,11 +1173,6 @@
          _value.push(`${_labels[index] || ''}:${_val || ''}`)
        })
  
        let _verifyType = ''
        if (item.verifyType === 'logic') {
          _verifyType = ' and deleted=0'
        }
        if (!arr.includes(primaryKey.toLowerCase())) {
          _fieldValue.push(`${primaryKey} !='${primaryId}'`)
        }
@@ -1169,7 +1180,7 @@
        _sql += `
        /* 唯一性验证 */
        select @tbid='', @ErrorCode='',@retmsg=''
        select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${_verifyType}
        select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${item.verifyType === 'logic' ? ' and deleted=0' : ''}
        If @tbid!=''
        Begin
          select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 已存在'
@@ -1376,7 +1387,7 @@
      if (columns && columns.length > 0 && btn.Ot !== 'notRequired') {
        let _index = 0
        columns.forEach(col => {
          if (!col.field || col.Hide === 'true' || _index >= 4) return
          if (!col.field || col.Hide === 'true' || _index >= 4 || col.field === primaryKey) return
          _msg += col.label + '=0,'
          _index++
        })
@@ -2151,7 +2162,7 @@
          _dataresource = `/*system_query*/select top 1 ${arr_field} from ${_dataresource} ${_search}  `
        }
      } else if (item.setting.order) {
        _dataresource = `/*system_query*/select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${item.setting.order}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows `
        _dataresource = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} order by ${item.setting.order} `
      } else {
        _dataresource = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} `
      }
@@ -2196,10 +2207,10 @@
    )
    if (item.hasExtend) {
      regoptions.push({reg: /@mk_time@/ig, value: '2024-04-29 17:20:00'})
      regoptions.push({reg: /@mk_time@/ig, value: `'2024-04-29 17:20:00'`})
    }
    if (item.type === 'calendar') {
      regoptions.push({ reg: /@mk_year@/ig, value: '2024' })
      regoptions.push({ reg: /@mk_year@/ig, value: `'2024'` })
    }
    if (window.GLOB.getLocation) {
      regoptions.push(
@@ -2285,14 +2296,6 @@
          destroyOnClose
        >
          <div className="mk-sql-wrap">
            {/* <div className="header">
              <div className="sql-item">
                <div className="sql-1">组件</div>
                <div className="sql-2">检验项</div>
                <div className="sql-3">其他</div>
                <div className="sql-4">状态</div>
              </div>
            </div> */}
            <div className="body">
              {sqlList.map(item => {
                let other = ''