king
2020-05-09 aaaf56d7ca060f7c681d6b8a67aac46aa89a4dbc
src/utils/utils.js
@@ -193,7 +193,75 @@
        value: search.initval,
        required: search.required === 'true'
      }
      if (item.type === 'date') {
      if (item.type === 'group') {
        let copy = JSON.parse(JSON.stringify(item))
        copy.key = search.datefield
        item.value = search.initval && search.initval[0] ? search.initval[0] : ''
        item.match = '='
        copy.type = 'daterange'
        copy.match = 'between'
        copy.value = ''
        if (search.initval && search.initval.length > 0) {
          let _type = search.initval[0]
          let _val = search.initval[1]
          if (_type === 'day') {
            copy.value = [moment().subtract(_val, 'days').format('YYYY-MM-DD'),
              moment().subtract(_val, 'days').format('YYYY-MM-DD')]
          } else if (_type === 'week') {
            copy.value = [moment().subtract(_val * 7, 'days').startOf('week').format('YYYY-MM-DD'),
              moment().subtract(_val * 7, 'days').endOf('week').format('YYYY-MM-DD')]
          } else if (_type === 'month') {
            copy.value = [moment().subtract(_val, 'month').startOf('month').format('YYYY-MM-DD'),
              moment().subtract(_val, 'month').endOf('month').format('YYYY-MM-DD')]
          } else if (_type === 'quarter') {
            let _differ = parseInt(moment().format('MM')) % 3
            let _pdiffer = 0
            let _ndiffer = 0
            // 差值计算
            switch(_differ) {
              case 0:
                _pdiffer = 2
                _ndiffer = 0
                break
              case 1:
                _pdiffer = 0
                _ndiffer = -2
                break
              case 2:
                _pdiffer = 1
                _ndiffer = -1
                break
              default:
            }
            copy.value = [moment().subtract(_pdiffer + _val * 3, 'month').startOf('month').format('YYYY-MM-DD'),
              moment().subtract(_ndiffer + _val * 3, 'month').endOf('month').format('YYYY-MM-DD')]
          } else if (_type === 'year') {
            let _year = parseInt(moment().format('YYYY')) - _val
            copy.value = [_year + '-01-01', _year + '-12-31']
          } else if (_type === 'customized') {
            try {
              _val = JSON.parse(_val)
            } catch {
              _val = [0, 0]
            }
            copy.value = [moment().subtract(_val[0], 'days').format('YYYY-MM-DD'),
              moment().subtract(_val[1], 'days').format('YYYY-MM-DD')]
          }
        }
        if (search.transfer === 'true') {
          newsearches.push(item)
        }
        newsearches.push(copy)
        return
      } else if (item.type === 'date') {
        item.value = item.value ? moment().subtract(item.value, 'days').format('YYYY-MM-DD') : ''
      } else if (item.type === 'datemonth') {
        item.value = item.value ? moment().subtract(item.value, 'month').format('YYYY-MM') : ''
@@ -244,14 +312,14 @@
        }
        if (newsearches[item.key]) {
          newsearches[item.key + '1'] = _val ? _val + timetail : null
          newsearches[item.key + '1'] = _val ? _val + timetail : ''
        } else {
          newsearches[item.key] = _val ? _val + timetail : null
          newsearches[item.key] = _val ? _val + timetail : ''
        }
      } else if (item.type === 'datemonth') {
        // 月-过滤条件,从月开始至结束
        let _startval = null
        let _endval = null
        let _startval = ''
        let _endval = ''
        if (item.value) {
          _startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
@@ -266,16 +334,16 @@
          _endval = moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD')
        }
        newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : null
        newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : null
        newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : ''
        newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : ''
      } else if (item.type === 'daterange') {
        let _endval = ''
        if (item.value) {
          _endval = moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD')
        }
        newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : null
        newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : null
        newsearches[item.key] = item.value ? item.value[0] + ' 00:00:00.000' : ''
        newsearches[item.key + '1'] = item.value ? _endval + ' 00:00:00.000' : ''
      } else if (item.type === 'text') {
        item.key.split(',').forEach(field => { // 综合搜索,所字段拼接
          newsearches[field] = item.value
@@ -357,6 +425,95 @@
    })
    return searchText
  }
  /**
   * @description 拼接搜索条件main
   * @param {Array}   searches     搜索条件
   * @return {String}  searchText  拼接结果
   */
  static getAllSearchOptions (searches) {
    if (!searches || searches.length === 0) return []
    let options = []
    let fieldmap = new Map()
    searches.forEach(search => {
      let item = {
        key: search.key,
        match: search.match,
        type: search.type,
        label: search.label,
        value: search.value,
        required: search.required
      }
      if (fieldmap.has(item.key)) {
        item.key = item.key + '1'
      }
      fieldmap.set(item.key, true)
      if (item.type === 'date') {
        if (['>=', '>'].includes(item.match)) {
          item.value = item.value ? item.value + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
        } else if (['<=', '<'].includes(item.match)) {
          item.value = item.value ? moment(item.value, 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
        }
        options.push(item)
      } else if (item.type === 'datemonth') {
        let _startval = item.value ? moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
        let _endval = item.value ? moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
        let copy = JSON.parse(JSON.stringify(item))
        copy.key = copy.key + '1'
        copy.value = _endval
        item.value = _startval
        options.push(item)
        options.push(copy)
      } else if (item.type === 'dateweek') {
        let _startval = item.value && item.value[0] ? moment(item.value[0], 'YYYY-MM-DD').format('YYYY-MM-DD') + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
        let _endval = item.value && item.value[1] ? moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
        let copy = JSON.parse(JSON.stringify(item))
        copy.key = copy.key + '1'
        copy.value = _endval
        item.value = _startval
        options.push(item)
        options.push(copy)
      } else if (item.type === 'daterange') {
        let _startval = item.value && item.value[0] ? item.value[0] + ' 00:00:00.000' : '1990-01-01 00:00:00.000'
        let _endval = item.value && item.value[1] ? moment(item.value[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2030-01-01 00:00:00.000'
        let copy = JSON.parse(JSON.stringify(item))
        copy.key = copy.key + '1'
        copy.value = _endval
        item.value = _startval
        options.push(item)
        options.push(copy)
      } else if (item.type === 'multiselect') {
        item.value = item.value ? item.value.join(',') : item.value
        options.push(item)
      } else if (item.type === 'text') {
        item.key.split(',').forEach(field => { // 综合搜索,所字段拼接
          let cell = JSON.parse(JSON.stringify(item))
          cell.key = field
          options.push(item)
        })
      } else {
        options.push(item)
      }
    })
    return options
  }
  /**
@@ -700,25 +857,26 @@
    let _prevCustomScript = '' // 默认sql前执行脚本
    let _backCustomScript = '' // 默认sql后执行脚本
    if (verify.scripts) {
      verify.scripts.forEach(item => {
        if (item.status === 'false') return
    verify.scripts && verify.scripts.forEach(item => {
      if (item.status === 'false') return
        if (item.position === 'init') {
          _initCustomScript += `
          ${item.sql}
          `
        } else if (item.position === 'front') {
          _prevCustomScript += `
          ${item.sql}
          `
        } else {
          _backCustomScript += `
          ${item.sql}
          `
        }
      })
    }
      if (item.position === 'init') {
        _initCustomScript += `
        /* 自定义脚本 */
        ${item.sql}
        `
      } else if (item.position === 'front') {
        _prevCustomScript += `
        /* 自定义脚本 */
        ${item.sql}
        `
      } else {
        _backCustomScript += `
        /* 自定义脚本 */
        ${item.sql}
        `
      }
    })
    // 需要声明的变量集
    // let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey']
@@ -728,7 +886,8 @@
    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)
    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)
      `
    // let _initvars = ['ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey'] // 已赋值字段集
@@ -745,8 +904,15 @@
        if (!_initvars.includes(_key)) {
          _initvars.push(_key)
          if (form.type === 'number' && typeof(form.value) === 'number') {
            _initfields.push(`@${_key}=${form.value}`)
          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}'`)
          }
@@ -785,7 +951,13 @@
            let _val = data.hasOwnProperty(col.field) ? data[col.field] : ''
            if (col.type === 'number' && typeof(_val) === 'number') {
            if (col.type === 'number') {
              if (typeof(_val) !== 'number') {
                _val = parseFloat(_val)
                if (isNaN(_val)) {
                  _val = 0
                }
              }
              _initfields.push(`@${_key}=${_val}`)
            } else {
              _initfields.push(`@${_key}='${_val}'`)
@@ -817,8 +989,9 @@
    // 变量声明
    _declarefields = _declarefields.join(',')
    if (_declarefields) {
      _sql += `,${_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}
      `
    }
    // 变量赋值
@@ -851,8 +1024,10 @@
    }
    // 初始化凭证及用户信息字段
    _sql += `select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}'
      `
    _sql += `
        /* 凭证及用户信息初始化赋值 */
        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}'
        `
    if (_initCustomScript) {
      _sql += _initCustomScript
@@ -860,7 +1035,9 @@
    // 启用账期验证
    if (verify.accountdate === 'true') {
      _sql += `exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
      _sql += `
        /* 账期验证 */
        exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
        if @ErrorCode!=''
          GOTO aaa
        `
@@ -873,7 +1050,9 @@
        datasource = '(' + datasource + ') tb'
      }
      _sql += `select @tbid='', @ErrorCode='',@retmsg=''
      _sql += `
        /* 失效验证 */
        select @tbid='', @ErrorCode='',@retmsg=''
        select @tbid=${primaryKey} from ${datasource} where ${primaryKey} ='${primaryId}'
        If @tbid=''
        Begin
@@ -886,12 +1065,14 @@
    // 比较验证
    if (verify.contrasts && verify.contrasts.length > 0) {
      verify.contrasts.forEach(item => {
        _sql += `If ${item.frontfield} ${item.operator} ${item.backfield}
          Begin
            select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
              goto aaa
          end
          `
        _sql += `
        /* 比较验证 */
        If ${item.frontfield} ${item.operator} ${item.backfield}
        Begin
          select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
            goto aaa
        end
        `
      })
    }
@@ -932,30 +1113,32 @@
          _fieldValue.push(`${primaryKey} !='${primaryId}'`)
        }
        _sql += `select @tbid='', @ErrorCode='',@retmsg=''
          select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${_verifyType}
          If @tbid!=''
          Begin
            select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 已存在'
            goto aaa
          end
          `
        _sql += `
        /* 唯一性验证 */
        select @tbid='', @ErrorCode='',@retmsg=''
        select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${_verifyType}
        If @tbid!=''
        Begin
          select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 已存在'
          goto aaa
        end
        `
      })
    }
    
    // 自定义验证
    if (verify.customverifys && verify.customverifys.length > 0) {
      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
          `
      })
    }
    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  = ''
@@ -990,21 +1173,23 @@
          _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
          `
        _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') {
@@ -1020,7 +1205,9 @@
      hasvoucher = true
      _sql += `exec s_BVoucher_Create
      _sql += `
        /* 创建凭证 */
        exec s_BVoucher_Create
          @Bill ='${data[_voucher.linkField]}',
          @BVoucherType ='${_voucher.BVoucherType}',
          @VoucherTypeOne ='${_voucher.VoucherTypeOne}',
@@ -1121,11 +1308,17 @@
    // 添加、修改、逻辑删除、物理删除
    if (_actionType === 'insert') {
      _sql += _insertsql
      _sql += `
        /* 默认sql */
        ${_insertsql}`
    } else if (_actionType === 'update') {
      _sql += _updatesql
      _sql += `
        /* 默认sql */
        ${_updatesql}`
    } else if (_actionType === 'LogicDelete') { // 逻辑删除
      _sql += `update ${btn.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid@ where ${primaryKey}=@${primaryKeyName};`
      _sql += `
        /* 默认sql */
        update ${btn.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid@ where ${primaryKey}=@${primaryKeyName};`
    
    } else if (_actionType === 'delete') {      // 物理删除
      let _msg = ''
@@ -1138,9 +1331,13 @@
          }
        })
      }
      _sql += `insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('删除表:${btn.sql} 数据: ${_msg}${primaryKey}='+@${primaryKeyName},200),@userid@,@username,@fullname delete ${btn.sql} where ${primaryKey}=@${primaryKeyName};`
      _sql += `
        /* 默认sql */
        insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('删除表:${btn.sql} 数据: ${_msg}${primaryKey}='+@${primaryKeyName},200),@userid@,@username,@fullname delete ${btn.sql} where ${primaryKey}=@${primaryKeyName};`
    } else if (_actionType === 'insertOrUpdate') {
      _sql += `select @tbid=''
      _sql += `
        /* 默认sql */
        select @tbid=''
        select @tbid='X' from ${btn.sql} where ${primaryKey}=@ID@
        if @tbid=''
          begin
@@ -1159,7 +1356,9 @@
    }
    _sql += `
      aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
        aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
    _sql = _sql.replace(/\n\s{8}/ig, '\n')
    console.log(_sql)
    return _sql
  }