king
2020-10-26 c7df940632b5f238f524da651fbf27a91ff6ad36
src/utils/utils.js
@@ -161,9 +161,9 @@
      let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig')
      value = value.replace(reg, item.value)
    })
    // 1、替换%符(数据库中解析后sql报错)
    // 替换%符(数据库中解析后sql报错)
    value = value.replace(/%/ig, ' mpercent ')
    // 1、encode编码(中文字符超出base64加密范围),2、base64加密
    // encode编码(中文字符超出base64加密范围)
    value = window.btoa(window.encodeURIComponent(value))
    // 插入字符
    let index = Math.floor(value.length / 2)
@@ -181,27 +181,36 @@
  static UnformatOptions (value) {
    if (!value) return ''
    let salt = 'minKe' // 盐值
    let _value = ''
    try {
      value = window.atob(value)
      value = value.replace(salt, '')
      value = window.decodeURIComponent(window.atob(value))
      try {
        _value = JSON.parse(window.decodeURIComponent(window.atob(value)))
      } catch {
        _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, '')
      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 = ''
      _value = ''
    }
    return value
    return _value
  }
  /**
@@ -659,8 +668,11 @@
    if (item.type === 'link') {
      arrfield.push(item.linkField)
    } else if (item.type === 'select' && item.linkSubField && item.linkSubField.length > 0) {
    } else if ((item.type === 'select' || item.type === 'radio') && item.linkSubField && item.linkSubField.length > 0) {
      arrfield.push(...item.linkSubField)
    } else if (item.type === 'checkcard') {
      arrfield = item.fields.map(f => f.field)
      arrfield.push(item.valueField)
    }
    arrfield = Array.from(new Set(arrfield))
@@ -675,9 +687,9 @@
    arrfield = arrfield.join(',')
    if (item.orderBy) {
      sql = `select ${arrfield} from (select distinct ${arrfield},${item.orderBy} as orderfield from ${_datasource} ) a order by orderfield ${item.orderType}`
      sql = `select ${item.type === 'checkcard' ? 'top 20' : ''} ${arrfield} from (select distinct ${arrfield},${item.orderBy} as orderfield from ${_datasource} ) a order by orderfield ${item.orderType}`
    } else {
      sql = 'select distinct ' + arrfield + ' from ' + _datasource
      sql = `select ${item.type === 'checkcard' ? 'top 20' : ''} ${arrfield} from (select distinct ${arrfield} from ${_datasource})`
    }
    return {
@@ -701,6 +713,9 @@
      userName = sessionStorage.getItem('CloudUserName') || ''
      fullName = sessionStorage.getItem('CloudFullName') || ''
    }
    let database = item.sheet.match(/(.*)\.(.*)\./ig) || ''
    let sheet = item.sheet.replace(/(.*)\.(.*)\./ig, '')
    let errors = []
    let _topline = btn.range || 0
@@ -867,7 +882,7 @@
          _uniquesql += `
        /* 重复性验证 */
        Set @tbid=''
        Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${item.sheet} ) a group by ${unique.field} having sum(n)>1
        Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${sheet} ) a group by ${unique.field} having sum(n)>1
        
        If @tbid!=''
        Begin
@@ -876,7 +891,7 @@
        end
        
        Set @tbid=''
        Select top 1 @tbid=${_afields.join('+\' \'+')} from  @${item.sheet} a Inner join ${item.sheet} b on ${_fields_}
        Select top 1 @tbid=${_afields.join('+\' \'+')} from  @${sheet} a Inner join ${sheet} b on ${_fields_}
        
        If @tbid!=''
        Begin
@@ -907,20 +922,20 @@
      if (btn.default !== 'false') {
        _insert = `
        /* 默认sql */
        Insert into ${item.sheet} (${fields},createuserid,createuser,createstaff,bid)
        Select ${fields},@userid@,@username,@fullname,@BID@ From @${item.sheet}
        Insert into ${database}${sheet} (${fields},createuserid,createuser,createstaff,bid)
        Select ${fields},@userid@,@username,@fullname,@BID@ From @${sheet}
        `
      }
      _sql = `
        /* 系统生成 */
        declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50),BID nvarchar(50) )
        declare @${sheet} table (${declarefields.join(',')},jskey nvarchar(50),BID nvarchar(50) )
        Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
        
        Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}'
        ${_initCustomScript}
        `
      _sqlInsert = `Insert into @${item.sheet} (${fields},jskey,BID)`
      _sqlInsert = `Insert into @${sheet} (${fields},jskey,BID)`
      _sqlBottom = `
        /* 默认sql */
        delete tmp_excel_in where upid=@upid@
@@ -930,7 +945,7 @@
        ${_prevCustomScript}
        ${_insert}
        ${_backCustomScript}
        Delete @${item.sheet}
        Delete @${sheet}
        
        aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
@@ -949,7 +964,7 @@
    } else { // s_sDataDictb_excelIn 云端密钥验证参数
      _sql = `
        /* 系统生成 */
        declare @${item.sheet} table (jskey nvarchar(50))
        declare @${sheet} table (jskey nvarchar(50))
        Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
        
        Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}'
@@ -1014,70 +1029,64 @@
    })
    // 需要声明的变量集
    // let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey']
    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode']
    // 主键字段
    let primaryKey = setting.primaryKey || 'id'
    // 系统变量声明与设置初始值
    let _sql = `/* 系统生成 */
        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50)
      `
    // sql语句
    let _sql = ''
    // let _initvars = ['ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey'] // 已赋值字段集
    let _initvars = [] // 已赋值字段集
    let _initfields = []
    let _declarefields = []
    // 获取字段键值对
    if (formdata) {
      formdata.forEach(form => {
        if (form.type === 'text') { // 特殊字段替换
          form.value = form.value.replace(/^(\s*)@appkey@(\s*)$/ig, appkey)
          form.value = form.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, sessionUid)
          form.value = form.value.replace(/^(\s*)@bid@(\s*)$/ig, BID)
        }
    formdata && formdata.forEach(form => {
      if (form.type === 'text') { // 特殊字段替换
        form.value = form.value.replace(/^(\s*)@appkey@(\s*)$/ig, appkey)
        form.value = form.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, sessionUid)
        form.value = form.value.replace(/^(\s*)@bid@(\s*)$/ig, BID)
      }
        _formFieldValue[form.key] = form.value
        let _key = form.key.toLowerCase()
      _formFieldValue[form.key] = form.value
      let _key = form.key.toLowerCase()
        if (!_initvars.includes(_key)) {
          _initvars.push(_key)
      if (!_initvars.includes(_key)) {
        _initvars.push(_key)
          if (form.type === 'number') {
            let val = form.value
            if (typeof(val) !== 'number') {
              val = parseFloat(val)
              if (isNaN(val)) {
                val = 0
              }
        if (form.type === 'number') {
          let val = form.value
          if (typeof(val) !== 'number') {
            val = parseFloat(val)
            if (isNaN(val)) {
              val = 0
            }
            _initfields.push(`@${_key}=${val}`)
          } else {
            _initfields.push(`@${_key}='${form.value}'`)
          }
          _initfields.push(`@${_key}=${val}`)
        } else {
          _initfields.push(`@${_key}='${form.value}'`)
        }
        if (!_vars.includes(_key)) {
          _vars.push(_key)
      }
      if (!_vars.includes(_key)) {
        _vars.push(_key)
          if (form.fieldlen && form.fieldlen > 2048) {
            form.fieldlen = 'max'
          }
          let _type = `nvarchar(${form.fieldlen})`
          if (form.type.match(/date/ig)) {
            _type = 'datetime'
          } else if (form.type === 'number') {
            _type = `decimal(18,${form.fieldlen})`
          }
          _declarefields.push(`@${_key} ${_type}`)
        if (form.fieldlen && form.fieldlen > 2048) {
          form.fieldlen = 'max'
        }
      })
    }
        let _type = `nvarchar(${form.fieldlen})`
        if (form.type.match(/date/ig)) {
          _type = 'datetime'
        } else if (form.type === 'number') {
          _type = `decimal(18,${form.fieldlen})`
        }
        _declarefields.push(`@${_key} ${_type}`)
      }
    })
    // 添加数据中字段,表单值优先(按钮不选行或多行拼接时跳过)
    if (data && btn.Ot !== 'notRequired' && btn.Ot !== 'requiredOnce') {
@@ -1130,10 +1139,11 @@
    // 变量声明
    _declarefields = _declarefields.join(',')
    if (_declarefields) {
      _sql = `/* 系统生成 */
        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50),${_declarefields}
      `
      _declarefields = ',' + _declarefields
    }
    _sql = `/* 系统生成 */
        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50)${_declarefields}
      `
    // 变量赋值
    _initfields = _initfields.join(',')
@@ -1257,8 +1267,12 @@
    // 单号生成,使用上级id(BID)或列表数据,声明变量(检验)
    let _billcodesSql  = ''
    if (verify.billcodes && verify.billcodes.length > 0) {
    if (formdata && verify.billcodes && verify.billcodes.length > 0) {
      let keys = formdata.map(item => item.key.toLowerCase()) // 表单字段
      verify.billcodes.forEach(item => {
        if (!keys.includes(item.field.toLowerCase())) return // 表单中不含单号生成字段
        let _ModularDetailCode = ''
        let _lpline = ''
        if (item.TypeCharOne === 'Lp') {