king
2020-08-31 b3547d1c531e479021219fda5df153a11b9b52a3
src/utils/utils.js
@@ -689,7 +689,7 @@
    arrfield = arrfield.join(',')
    if (item.orderBy) {
      sql = 'select distinct ' + arrfield + ',' + item.orderBy + ' as orderfield from ' + _datasource + ' order by orderfield ' + item.orderType
      sql = `select ${arrfield} from (select distinct ${arrfield},${item.orderBy} as orderfield from ${_datasource} ) a order by orderfield ${item.orderType}`
    } else {
      sql = 'select distinct ' + arrfield + ' from ' + _datasource
    }
@@ -705,7 +705,7 @@
   * @return {String} btn   按钮
   * @return {String} data  excel数据
   */
  static getExcelInSql (item, data, dict) {
  static getExcelInSql (item, data, dict, BID) {
    let btn = item.verify
    let keys = ['delete', 'drop', 'insert', 'truncate', 'update']
    let userName = sessionStorage.getItem('User_Name') || ''
@@ -747,8 +747,11 @@
      })
    }
    // 控制台打印数据
    let conLtext = []
    let _Ltext = data.map((item, lindex) => {
      let vals = []
      let convals = []
      btn.columns.forEach((col, cindex) => {
        if (col.import === 'false') return
@@ -762,92 +765,91 @@
          val = val.replace(/(^\s*$)|\t*|\v*/ig, '')
          if (!val && col.required === 'true') { // 必填校验
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
          } else if (val.length > col.limit) {    // 长度校验
            let _error =  _position + dict['main.excel.content.maxlimit']
            errors.push(_error)
          } else {                               // 关键字校验
          if (!val && col.required === 'true') {            // 必填校验
            errors.push(_position + dict['main.excel.content.emptyerror'])
          } else if (col.limit && val.length > col.limit) { // 长度校验
            errors.push(_position + dict['main.excel.content.maxlimit'])
          } else {                                          // 关键字校验
            keys.forEach(key => {
              let _patten = new RegExp('(^' + key + '\\s+)|(\\s+' + key + '\\s+)', 'ig')
              if (_patten.test(val)) {
                let _error = _position + dict['main.excel.includekey'] + key
                errors.push(_error)
                errors.push(_position + dict['main.excel.includekey'] + key)
              }
            })
          }
        } else if (/^int/ig.test(col.type)) {
          if (!val && val !== 0) {
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
            errors.push(_position + dict['main.excel.content.emptyerror'])
          } else {
            let _val = val + ''
            if (!/^(([^0][0-9]+|0)$)|^(([1-9]+)$)/.test(_val)) {               // 检验是否为整数
              let _error = _position + dict['main.excel.content.interror']
              errors.push(_error)
              errors.push(_position + dict['main.excel.content.interror'])
            } else if ((col.min || col.min === 0) && val < col.min) {          // 最小值检验
              let _error = _position + dict['main.excel.content.limitmin']
              errors.push(_error)
              errors.push(_position + dict['main.excel.content.limitmin'])
            } else if ((col.max || col.max === 0) && val > col.max) {          // 最大值检验
              let _error = _position + dict['main.excel.content.limitmax']
              errors.push(_error)
              errors.push(_position + dict['main.excel.content.limitmax'])
            }
          }
        } else if (/^Decimal/ig.test(col.type)) {
          if (!val && val !== 0) {
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
            errors.push(_position + dict['main.excel.content.emptyerror'])
          } else {
            let _val = val + ''
            let _vals = _val.split('.')
            if (!/^(([^0][0-9]+|0)\.([0-9]+)$)|^(([^0][0-9]+|0)$)|^(([1-9]+)\.([0-9]+)$)|^(([1-9]+)$)/.test(_val)) {                           // 检验是否为浮点数
              let _error = _position + dict['main.excel.content.floaterror']
              errors.push(_error)
            } else if (_vals[0].length > 18) {                         // 检验整数位
              let _error = _position + dict['main.excel.content.floatIntover']
              errors.push(_error)
              errors.push(_position + dict['main.excel.content.floaterror'])
            } else if (_vals[0].length > 18) {                          // 检验整数位
              errors.push(_position + dict['main.excel.content.floatIntover'])
            } else if (_vals[1] && _vals[1].length > col.limit) {       // 最小值检验
              let _error = _position + dict['main.excel.content.floatPointover']
              errors.push(_error)
            } else if ((col.min || col.min === 0) && val < col.min) { // 最小值检验
              let _error = _position + dict['main.excel.content.limitmin']
              errors.push(_error)
            } else if ((col.max || col.max === 0) && val > col.max) { // 最大值检验
              let _error = _position + dict['main.excel.content.limitmax']
              errors.push(_error)
              errors.push(_position + dict['main.excel.content.floatPointover'])
            } else if ((col.min || col.min === 0) && val < col.min) {   // 最小值检验
              errors.push(_position + dict['main.excel.content.limitmin'])
            } else if ((col.max || col.max === 0) && val > col.max) {   // 最大值检验
              errors.push(_position + dict['main.excel.content.limitmax'])
            }
          }
        } else if (col.type === 'date') {
          val = val.replace(/(^\s*$)|\t*|\v*/ig, '')
          if (!val && col.required === 'true') { // 必填校验
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
          } else {                               // 关键字校验
            keys.forEach(key => {
              let _patten = new RegExp('(^' + key + '\\s+)|(\\s+' + key + '\\s+)', 'ig')
              if (_patten.test(val)) {
                let _error = _position + dict['main.excel.includekey'] + key
                errors.push(_error)
          if (typeof(val) === 'number') {
            if (val > 2958465 || val <= 0) {                 // 时间过大或小于等于0
              errors.push(_position + dict['main.excel.content.date.over'])
            } else {                                         // 时间格式化
              if (val < 60) {                                // 1900-2-29,excel中存在,实际不存在
                val++
              }
            })
              val = moment('19000101', 'YYYYMMDD').add(Math.floor(val - 2), 'days').format('YYYY-MM-DD')
            }
          } else if (typeof(val) === 'string') {
            val = val.replace(/(^\s*$)|\t*|\v*/ig, '')
            if (!val && col.required === 'true') {           // 时间必填校验
              errors.push(_position + dict['main.excel.content.emptyerror'])
            } else if (val && !/^[1-9][0-9]{3}/.test(val)) { // 时间正则校验
              errors.push(_position + dict['main.excel.content.date.formatError'])
            }
          } else {                                           // 时间格式错误
            errors.push(_position + dict['main.excel.content.date.formatError'])
          }
        }
        if (col.type === 'date') {
          vals.push(`case when ${col.Column}='' then '1900-01-01' else dateadd(day,cast('${val}' as int)-2,'1900-01-01') end as ${col.Column}`)
        } else {
          vals.push(`'${val}' as ${col.Column}`)
        vals.push(`'${val}'`)
        if (lindex < 40) {
          convals.push(`'${val}' as ${col.Column}`)
        }
      })
      let _lineIndex = '0000' + (lindex + 1) + '0'
      _lineIndex = _lineIndex.substring(_lineIndex.length - 6)
      vals.push(`'${upId + _lineIndex}' as jskey`)
      vals.push(`'${upId + _lineIndex}'`)
      vals.push(`'${BID}'`)
      if (lindex < 40) {
        convals.push(`'${upId + _lineIndex}' as jskey`)
        convals.push(`'${BID}' as BID`)
        conLtext.push(`Select ${convals.join(',')}`)
      }
      return `Select ${vals.join(',')}`
    })
@@ -926,13 +928,13 @@
      _sql = `
        /* 系统生成 */
        declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
        declare @${item.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)`
      _sqlInsert = `Insert into @${item.sheet} (${fields},jskey,BID)`
      _sqlBottom = `
        /* 默认sql */
        delete tmp_excel_in where upid=@upid@
@@ -946,13 +948,13 @@
        
        aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
      if (window.GLOB.systemType !== 'official') {
      if ((window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') || window.debugger === true) {
        let fsql = `
        ${_sql}
        ${_sqlInsert}
        
        /* excel数据(前40条) */
        ${_Ltext.slice(0, 40).join(' Union all ')}
        ${conLtext.join(' Union all ')}
        ${_sqlBottom}
        `
        fsql = fsql.replace(/\n\s{8}/ig, '\n')
@@ -967,7 +969,7 @@
        Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}'
        `
    }
    return {
      sql: _sql,
      lines: result.map((list, index) => {
@@ -994,7 +996,7 @@
    let _formFieldValue = {}
    let _actionType = null
    let appkey = window.GLOB.appkey || ''
    let sessionUid = sessionStorage.getItem('SessionUid') || ''
    let sessionUid = localStorage.getItem('SessionUid') || ''
    if (verify.default !== 'false') { // 判断是否使用默认sql
      _actionType = btn.sqlType
@@ -1150,7 +1152,9 @@
    // 变量赋值
    _initfields = _initfields.join(',')
    if (_initfields) {
      _sql += `select ${_initfields}
      _sql += `
        select ${_initfields}
        `
    }
@@ -1243,6 +1247,77 @@
        `
      })
    }
    // 自定义验证
    verify.customverifys && verify.customverifys.forEach(item => {
      _sql += `
        /* 自定义验证 */
        select @tbid='', @ErrorCode='',@retmsg=''
        select top 1 @tbid='X' from (${item.sql}) a
        If @tbid ${item.result === 'true' ? '!=' : '='}''
        Begin
          select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
          goto aaa
        end
        `
    })
    // 单号生成,使用上级id(BID)或列表数据,声明变量(检验)
    let _billcodesSql  = ''
    if (verify.billcodes && verify.billcodes.length > 0) {
      verify.billcodes.forEach(item => {
        let _ModularDetailCode = ''
        let _lpline = ''
        if (item.TypeCharOne === 'Lp') {
          if (item.linkField === 'BID' && BID) { // 替换bid
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@BID@,48)`
          } else {
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@${item.linkField},48)`
          }
          _ModularDetailCode = '@ModularDetailCode'
        } else if (item.TypeCharOne === 'BN') {
          let _val = ''
          if (item.linkField === 'BID' && BID) { // 替换bid
            _val = BID
          } else if (data && data.hasOwnProperty(item.linkField)) {
            _val = data[item.linkField]
          }
          _ModularDetailCode = `'${item.TypeCharOne + _val}'`
        } else {
          _ModularDetailCode = `'${item.ModularDetailCode}'`
        }
        let _declare = ''
        let _key = item.field.toLowerCase()
        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},
          @Type=${item.Type},
          @TypeCharOne='${item.TypeCharOne}',
          @TypeCharTwo ='${item.TypeCharTwo}',
          @BillCode =@BillCode output,
          @ErrorCode =@ErrorCode output,
          @retmsg=@retmsg output
        if @ErrorCode!=''
          goto aaa
        set @${_key}=@BillCode
        `
      })
      if (_actionType !== 'insertOrUpdate') {
        _sql += _billcodesSql
      }
    }
    // 唯一性验证,必须存在表单(表单存在时,主键均为单值),必须填写数据源,多行拼接时不可用
    if (formdata && verify.uniques && verify.uniques.length > 0 && btn.Ot !== 'requiredOnce') {
@@ -1318,77 +1393,6 @@
        `
      })
    }
    // 自定义验证
    verify.customverifys && verify.customverifys.forEach(item => {
      _sql += `
        /* 自定义验证 */
        select @tbid='', @ErrorCode='',@retmsg=''
        select top 1 @tbid='X' from (${item.sql}) a
        If @tbid ${item.result === 'true' ? '!=' : '='}''
        Begin
          select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
          goto aaa
        end
        `
    })
    // 单号生成,使用上级id(BID)或列表数据,声明变量(检验)
    let _billcodesSql  = ''
    if (verify.billcodes && verify.billcodes.length > 0) {
      verify.billcodes.forEach(item => {
        let _ModularDetailCode = ''
        let _lpline = ''
        if (item.TypeCharOne === 'Lp') {
          if (item.linkField === 'BID' && BID) { // 替换bid
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@BID@,48)`
          } else {
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@${item.linkField},48)`
          }
          _ModularDetailCode = '@ModularDetailCode'
        } else if (item.TypeCharOne === 'BN') {
          let _val = ''
          if (item.linkField === 'BID' && BID) { // 替换bid
            _val = BID
          } else if (data && data.hasOwnProperty(item.linkField)) {
            _val = data[item.linkField]
          }
          _ModularDetailCode = `'${item.TypeCharOne + _val}'`
        } else {
          _ModularDetailCode = `'${item.ModularDetailCode}'`
        }
        let _declare = ''
        let _key = item.field.toLowerCase()
        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},
          @Type=${item.Type},
          @TypeCharOne='${item.TypeCharOne}',
          @TypeCharTwo ='${item.TypeCharTwo}',
          @BillCode =@BillCode output,
          @ErrorCode =@ErrorCode output,
          @retmsg=@retmsg output
        if @ErrorCode!=''
          goto aaa
        set @${_key}=@BillCode
        `
      })
      if (_actionType !== 'insertOrUpdate') {
        _sql += _billcodesSql
      }
    }
    let hasvoucher = false
@@ -1425,6 +1429,8 @@
      let values = []
      formdata.forEach(item => {
        if (item.writein === false) return
        keys.push(item.key.toLowerCase())
        values.push('@' + item.key)
      })
@@ -1468,6 +1474,8 @@
      let _arr = []
      formdata.forEach(item => {
        if (item.writein === false) return
        _arr.push(item.key.toLowerCase())
        _form.push(item.key + '=@' + item.key)
      })
@@ -1551,7 +1559,8 @@
      _sql += `
        /* 默认sql */
        insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('删除表:${btn.sql} 数据: ${_msg}${primaryKey}='+@ID@,200),@userid@,@username,@fullname delete ${btn.sql} where ${primaryKey}${_ID};`
        insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('删除表:${btn.sql} 数据: ${_msg}${primaryKey}='+@ID@,200),@userid@,@username,@fullname
        delete ${btn.sql} where ${primaryKey}${_ID};`
    } else if (_actionType === 'insertOrUpdate') {
      _sql += `
        /* 默认sql */
@@ -1576,7 +1585,7 @@
    _sql += `
        aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
    if (window.GLOB.systemType !== 'official') {
    if ((window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') || window.debugger === true) {
      _sql = _sql.replace(/\n\s{8}/ig, '\n')
      console.log(_sql)
    }