king
2024-10-30 c96108bd84050feb01b47db3f5cae96670fda435
src/utils/utils.js
@@ -71,6 +71,7 @@
      uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1))
    }
    uuid = timestamp + uuid.join('')
    uuid = uuid.replace(/minke/ig, 'mnkie')
    return uuid
  }
@@ -416,7 +417,11 @@
          item.$first = true
        }
      }
      if (window.backend && ['select', 'link', 'multiselect', 'checkcard', 'radio'].includes(item.type) && item.resourceType === '1') {
        item.uuid = md5(config.uuid + item.uuid)
      }
      item.oriInitval = item.initval
      if (values) {
@@ -710,6 +715,157 @@
    })
    return searchText.join(' AND ')
  }
  static getSearchkeys (searches) {
    let searchText = []
    let matchs = {
      'like': '01',
      'not like': '02',
      '=': '03',
      '>': '04',
      '<': '05',
      '>=': '06',
      '<=': '07',
    }
    searches.forEach(item => {
      if (item.forbid || !item.value) return
      let cell = {
        key: item.key,
        match: item.match,
        type: 'text',
        value: item.value
      }
      if (item.type === 'text' || item.type === 'select') { // 综合搜索,文本或下拉,所有字段拼接
        if (/,/.test(item.key)) {
          cell.type = 'text_or'
        }
      } else if (item.type === 'multi') {
        cell.type = 'text_multi'
      } else if (item.type === 'date') {
        let _val = item.value
        let timetail = ''
        if (item.match === '<' || item.match === '<=') { // 时间为<=时,匹配后一天的0点,匹配方式为<
          cell.match = '<'
          if (item.precision === 'day') {
            _val = moment(_val, 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD')
          }
        }
        if (item.match === '=') {
          timetail = ''
        } else if (item.precision === 'day') {
          timetail = ' 00:00:00.000'
        } else if (item.precision === 'hour') {
          timetail = ':00:00.000'
        } else if (item.precision === 'minute') {
          timetail = ':00.000'
        } else if (item.precision === 'second') {
          timetail = '.000'
        }
        cell.value = _val + timetail
      }
      if (item.type === 'datemonth') { // 月-过滤条件,从月开始至结束,结束时间为月末加一天的0点,方式为<
        if (item.match === '=') {
          searchText.push(cell)
        } else {
          let _startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
          let _endval = moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
          searchText.push({
            key: item.key,
            match: '>=',
            type: 'text',
            value: _startval
          }, {
            key: item.key,
            match: '<',
            type: 'text',
            value: _endval
          })
        }
      } else if (item.type === 'dateweek') { // 周-过滤条件
        let _startval = moment(item.value, 'YYYY-MM-DD' ).startOf('week').format('YYYY-MM-DD') + ' 00:00:00.000'
        let _endval = moment(item.value, 'YYYY-MM-DD').endOf('week').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
        searchText.push({
          key: item.key,
          match: '>=',
          type: 'text',
          value: _startval
        }, {
          key: item.key,
          match: '<',
          type: 'text',
          value: _endval
        })
      } else if (item.type === 'daterange') {
        let val = item.value.split(',')
        let _startval = ''
        let _endval = ''
        if (item.precision === 'day') {
          _startval = val[0] + ' 00:00:00.000'
          _endval = moment(val[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
        } else if (item.precision === 'hour') {
          _startval = val[0] + ':00:00.000'
          _endval = val[1] + ':00:00.000'
        } else if (item.precision === 'minute') {
          _startval = val[0] + ':00.000'
          _endval = val[1] + ':00.000'
        } else if (item.precision === 'second') {
          _startval = val[0] + '.000'
          _endval = val[1] + '.000'
        }
        let _skey = item.key
        let _ekey = item.key
        if (/,/.test(item.key)) {
          _skey = item.key.split(',')[0]
          _ekey = item.key.split(',')[1]
        }
        searchText.push({
          key: _skey,
          match: '>=',
          type: 'text',
          value: _startval
        }, {
          key: _ekey,
          match: '<',
          type: 'text',
          value: _endval
        })
      } else if (item.type === 'range') {
        let val = item.value.split(',')
        searchText.push({
          key: item.key,
          match: '>=',
          type: 'text',
          value: val[0] || -999999999
        }, {
          key: item.key,
          match: '<=',
          type: 'text',
          value: val[1] || 999999999
        })
      } else {
        searchText.push(cell)
      }
    })
    searchText.forEach(item => {
      item.match = matchs[item.match] || '01'
    })
    return searchText
  }
  /**
@@ -1615,7 +1771,7 @@
 * @return {Array}   columns   显示列
 * @return {Boolean} retmsg    是否需要数据返回
 */
export function getSysDefaultSql (btn, setting, formdata, param, data, columns, retmsg = false, moduleParams) {
export function getSysDefaultSql (btn, setting, formdata, param, data, columns, retmsg = false) {
  let primaryId = param.ID
  let BID = param.BID || ''
  let verify = btn.verify || {}
@@ -1864,9 +2020,31 @@
  }
  // 失效验证,添加数据时不用
  if (verify.invalid === 'true' && moduleParams && moduleParams.dataresource) {
    let datasource = moduleParams.dataresource
    let customScript = moduleParams.customScript || ''
  if (verify.invalid === 'true' && setting.dataresource) {
    let datasource = setting.dataresource
    let customScript = setting.customScript || ''
    let regoptions = [{
      reg: new RegExp('@userName@', 'ig'),
      value: `'${sessionStorage.getItem('User_Name') || ''}'`
    }, {
      reg: new RegExp('@fullName@', 'ig'),
      value: `'${sessionStorage.getItem('Full_Name') || ''}'`
    }, {
      reg: new RegExp('@orderBy@', 'ig'),
      value: setting.order || primaryKey
    }, {
      reg: new RegExp('@pageSize@', 'ig'),
      value: 1
    }, {
      reg: new RegExp('@pageIndex@', 'ig'),
      value: 1
    }]
    regoptions.forEach(item => {
      datasource = datasource.replace(item.reg, item.value)
      customScript = customScript.replace(item.reg, item.value)
    })
    if (customScript) {
      _sql += `
@@ -1941,7 +2119,6 @@
      if (!keys.includes(_key)) return // 表单中不含单号生成字段
      let _ModularDetailCode = ''
      let _lpline = ''
      if (item.TypeCharOne === 'Lp') {
        if (_linkKey === 'bid' && BID) { // 替换bid
@@ -1949,33 +2126,29 @@
        } 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
        } else if (_data.hasOwnProperty(_linkKey)) {
          _val = _data[_linkKey]
          _lpline = `set @ModularDetailCode= 'BN'+ right(@BID@,48)`
        } else {
          _lpline = `set @ModularDetailCode= 'BN'+ right(@${_linkKey},48)`
        }
        _ModularDetailCode = `'${item.TypeCharOne + _val}'`
      } else {
        _ModularDetailCode = `'${item.ModularDetailCode}'`
        _lpline = `set @ModularDetailCode= right('${item.ModularDetailCode}',50)`
      }
      let _declare = ''
      // let _declare = ''
      if (!_vars.includes(_key)) {
        _declare = `Declare @${_key} nvarchar(50)`
        _vars.push(_key)
      }
      // if (!_vars.includes(_key)) {
      //   _declare = `Declare @${_key} nvarchar(50)`
      //   _vars.push(_key)
      // }
      _billcodesSql += `
      /* 单号生成 */
      ${_declare}
      select @BillCode='', @${_key}='', @ModularDetailCode=''
      ${_lpline}
      exec s_get_BillCode
        @ModularDetailCode=${_ModularDetailCode},
        @ModularDetailCode=@ModularDetailCode,
        @Type=${item.Type},
        @TypeCharOne='${item.TypeCharOne}',
        @TypeCharTwo ='${item.TypeCharTwo}',
@@ -2014,11 +2187,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}'`)
      }
@@ -2026,7 +2194,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(', ')} 已存在'
@@ -2233,7 +2401,7 @@
    if (data && 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 + '=' + data[col.field] + ','
        _index++
      })
@@ -2456,6 +2624,10 @@
      error = '行信息中无工作流参数'
    }
    if (!error && verify.flowSql !== 'true' && verify.flowType !== 'start' && line && line.approvalMethod === 'countersign') {
      error = '会签流程需要使用默认脚本'
    }
    if (error) {
      status = 0
      statusName = '异常'
@@ -2504,6 +2676,33 @@
        _sql += `
      /* 工作流默认sql */
      set @retmsg =''
      select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0 and userid =@userid@ and works_flow_detail_id =@works_flow_detail_id
      if @retmsg =''
      begin
          select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and userid=@userid@ and works_flow_detail_id =@works_flow_detail_id
          if @retmsg !=''
          begin
              select @ErrorCode='E', @retmsg='当前单据已审核,请刷新后重试'
              goto aaa
          end
          set @retmsg =''
          select @retmsg=userid from s_my_works_flow_role where works_flow_id=@id@ and works_flow_code=@works_flow_code@ and deleted=0 and works_flow_detail_id =@works_flow_detail_id
          if @retmsg !=''
          begin
              select @retmsg=workerCode+workerName from BD_workers where id=@retmsg
              select @retmsg='页面数据已更新,或没有当前单据的审批权限,请联系'+@retmsg+'操作'
              goto aaa
          end
          select @retmsg='页面数据已更新,或没有当前单据的审批权限'
          goto aaa
      end
      declare ${_declare},@works_flow_key_id nvarchar(50),@works_flow_key_status nvarchar(20),@s_my_works_flow_log_param  nvarchar(max),@s_my_works_flow_log_status int,@s_my_works_flow_log_statusname nvarchar(50),@s_my_works_flow_log_detail_id  nvarchar(50)
      select ${_select},@works_flow_key_id='',@works_flow_key_status ='',@s_my_works_flow_log_param='',@s_my_works_flow_log_status=0,@s_my_works_flow_log_statusname='',@s_my_works_flow_log_detail_id=''
@@ -2560,32 +2759,45 @@
        _sql += `
      /* 工作流默认sql */
      set @retmsg =''
      select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0 and userid =@userid@
      select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0 and userid =@userid@ and works_flow_detail_id =@works_flow_detail_id
      if @retmsg =''
      begin
          select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and userid=@userid@
          select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and userid=@userid@ and works_flow_detail_id =@works_flow_detail_id
          if @retmsg !=''
          begin
              select @ErrorCode='E', @retmsg='当前单据已审核,请刷新后重试'
            goto aaa
              goto aaa
          end
          if @dataM@ !='' 
          begin
            set @retmsg =''
            select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0
            select @retmsg='X' from s_my_works_flow_role where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0 and works_flow_detail_id =@works_flow_detail_id
            if @retmsg != ''
            begin
                goto goto_mk
            end
          end
          else
          begin
              set @retmsg =''
              select @retmsg=userid from s_my_works_flow_role where works_flow_id=@id@ and works_flow_code=@works_flow_code@ and deleted=0 and works_flow_detail_id =@works_flow_detail_id
              if @retmsg !=''
              begin
                  select @retmsg=workerCode+workerName from BD_workers where id=@retmsg
                  select @retmsg='页面数据已更新,或没有当前单据的审批权限,请联系'+@retmsg+'操作'
                  goto aaa
              end
          end
          select @retmsg='页面数据已更新,或没有当前单据的审批权限'
            goto aaa
      end
          goto aaa
      end
      goto_mk:
@@ -2599,7 +2811,7 @@
      update s_my_works_flow_role set deleted=10,modifydate=getdate(),upid=@time_id@,modifyuserid=@userid@,modifyuser=@username,modifystaff=@fullname 
      where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0
      ${line.mknode === 'startEdge' ? `update s_my_works_flow_role set deleted=0,modifydate=getdate(),upid=@time_id@,modifyuserid=@userid@,modifyuser=@username,modifystaff=@fullname
      ${line.mknode === 'startEdge' ? `update s_my_works_flow_role set deleted=0,modifydate=getdate(),upid=@time_id@,modifyuserid=@userid@,modifyuser=@username,modifystaff=@fullname,works_flow_detail_id=@works_flow_detail_id@
      where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and typecharone='begin'` : ''}
      if @check_userids@ != ''
@@ -2627,14 +2839,17 @@
      _sql += _backCustomScript
    }
    _sql = _sql.replace(/@works_flow_sign@/ig, `'${sign}'`)
    if (verify.flowType === 'start') {
      _sql = _sql.replace(/@start_type@/ig, `'开始'`)
    } else {
      _sql = _sql.replace(/@works_flow_sign@/ig, `'${sign}'`)
    _sql = _sql.replace(/@check_userids@/ig, `'${checkIds.join(',')}'`)
    _sql = _sql.replace(/@notice_userids@/ig, `'${noticeIds.join(',')}'`)
      _sql = _sql.replace(/@check_type@/ig, verify.flowType === 'reject' ? `'驳回'` : `'审核'`)
      _sql = _sql.replace(/@notice_type@/ig, `'抄送'`)
    _sql = _sql.replace(/@start_type@/ig, `'开始'`)
    _sql = _sql.replace(/@check_type@/ig, verify.flowType === 'reject' ? `'驳回'` : `'审核'`)
    _sql = _sql.replace(/@notice_type@/ig, `'抄送'`)
      _sql = _sql.replace(/@check_userids@/ig, `'${checkIds.join(',')}'`)
      _sql = _sql.replace(/@notice_userids@/ig, `'${noticeIds.join(',')}'`)
    }
    _sql = _sql.replace(/@works_flow_code@/ig, `'${flow.flow_code}'`)
    _sql = _sql.replace(/@works_flow_name@/ig, `'${flow.flow_name}'`)
@@ -2799,23 +3014,23 @@
/**
 * @description 生成替换函数列表
 */
export function setGLOBFuncs () {
  window.GLOB.funcs = []
  if (!window.GLOB.IndexDB) {
    return
  }
// export function setGLOBFuncs () {
//   window.GLOB.funcs = []
//   if (!window.GLOB.IndexDB) {
//     return
//   }
  let objectStore = window.GLOB.IndexDB.transaction('funcs').objectStore('funcs')
//   let objectStore = window.GLOB.IndexDB.transaction('funcs').objectStore('funcs')
  objectStore.openCursor().onsuccess = (event) => {
    let cursor = event.target.result
//   objectStore.openCursor().onsuccess = (event) => {
//     let cursor = event.target.result
    if (cursor) {
      window.GLOB.funcs.push({
        func_code: cursor.value.func_code,
        key_sql: window.decodeURIComponent(window.atob(cursor.value.key_sql))
      })
      cursor.continue()
    }
  }
}
//     if (cursor) {
//       window.GLOB.funcs.push({
//         func_code: cursor.value.func_code,
//         key_sql: window.decodeURIComponent(window.atob(cursor.value.key_sql))
//       })
//       cursor.continue()
//     }
//   }
// }