king
2020-01-14 7ea1c5f53702951fc4df60e969fc67ef5d7af4dd
src/utils/utils.js
@@ -433,7 +433,11 @@
    if (item.type === 'link') {
      sql = 'select ' + item.valueField + ',' + item.valueText + ',' + item.linkField + ' from ' + _datasource
    } else {
      sql = 'select ' + item.valueField + ',' + item.valueText + ' from ' + _datasource
      let _linkSubField = '' // 下拉菜单关联表单
      if (item.linkSubField && item.linkSubField.length > 0) {
        _linkSubField = ',' + item.linkSubField.join(',')
      }
      sql = 'select ' + item.valueField + ',' + item.valueText + _linkSubField + ' from ' + _datasource
    }
    if (item.orderBy) {
@@ -448,7 +452,9 @@
   * @return {String} type   执行类型
   * @return {String} table  表名
   */
  static getSysDefaultSql (btn, setting, formdata, primaryId, data) {
  static getSysDefaultSql (btn, setting, formdata, param, data) {
    let primaryId = param.ID
    let BID = param.BID
    let verify = btn.verify
    let _formFieldValue = {}
@@ -461,7 +467,7 @@
    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)
      Select @tbid='', @ErrorCode='',@retmsg='',@BVoucher='',@FIBVoucherDate='',@FiYear=''
      Select @BVoucher='',@FIBVoucherDate='',@FiYear=''
      `
    if (verify && verify.accountdate === 'true') { // 启用账期验证
@@ -470,34 +476,42 @@
          GOTO aaa
        `
    }
    if (btn.sqlType !== 'insert' && verify && verify.invalid === 'true') { // 失效验证,添加数据时不用
      _sql += `Select @tbid=${primaryKey} from ${btn.sql} where ${primaryKey} ='${primaryId}'
    if (btn.sqlType !== 'insert' && verify && verify.invalid === 'true' && setting.dataresource) { // 失效验证,添加数据时不用
      let datasource = setting.dataresource
      if (/\s/.test(datasource)) { // 拼接别名
        datasource = '(' + datasource + ') tb'
      }
      _sql += `Select @tbid='', @ErrorCode='',@retmsg=''
        Select @tbid=${primaryKey} from ${datasource} where ${primaryKey} ='${primaryId}'
        If @tbid=''
        Begin
          Setect @ErrorCode='E',@retmsg='数据已失效'
          select @ErrorCode='E',@retmsg='数据已失效'
          goto aaa
        end
        `
    }
    if (formdata && verify && verify.uniques.length > 0) { // 唯一性验证,必须存在表单(表单存在时,主键均为单值)
    if (formdata && verify && verify.uniques.length > 0) { // 唯一性验证,必须存在表单(表单存在时,主键均为单值),必须填写数据源
      let _primaryId = primaryId
      if (btn.sqlType === 'insert') {
        _primaryId = ''
      }
      verify.uniques.forEach(item => {
        let _fieldValue = [] // 表单键值对field=value
        let _value = []      // 表单值,用于错误提示
        let _labels = item.fieldlabel.split(',')
        item.field.split(',').forEach(_field => {
        item.field.split(',').forEach((_field, index) => {
          _fieldValue.push(`${_field}='${_formFieldValue[_field]}'`)
          _value.push(_formFieldValue[_field])
          _value.push(`${_labels[index] || ''}:${_formFieldValue[_field] || ''}`)
        })
        _sql += `Select @tbid='', @ErrorCode='',@retmsg=''
          Select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')} and ${primaryKey} !='${_primaryId}'
          If @tbid!=''
          Begin
            Setect @ErrorCode='${item.errorCode}',@retmsg='${item.fieldlabel || ''}:${_value.join(' ')} 已存在'
            select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 已存在'
            goto aaa
          end
          `
@@ -505,6 +519,11 @@
    }
    
    if (verify && verify.customverifys.length > 0) { // 自定义验证
      let _primaryId = primaryId
      if (btn.sqlType === 'insert') {
        _primaryId = ''
      }
      verify.customverifys.forEach(item => {
        let _cuSql = item.sql
        if (data) {
@@ -514,15 +533,22 @@
        keys = keys.sort((a, b) => {
          return b.length - a.length
        })
        keys.forEach(key => {
          _cuSql.replace('@' + key, _formFieldValue[key])
          let reg = new RegExp('@' + key, 'ig')
          _cuSql = _cuSql.replace(reg, `'${_formFieldValue[key]}'`)
        })
        let idreg = new RegExp('@ID', 'ig')
        _cuSql = _cuSql.replace(idreg, `'${_primaryId}'`)
        let bidreg = new RegExp('@BID', 'ig')
        _cuSql = _cuSql.replace(bidreg, `'${BID}'`)
        _sql += `Select @tbid='', @ErrorCode='',@retmsg=''
          Select top 1 @tbid='X' from (${_cuSql}) a
          If @tbid ${item.result === 'true' ? '=' : '!='}''
          If @tbid ${item.result === 'true' ? '!=' : '='}''
          Begin
            Setect @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
            select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
            goto aaa
          end
          `
@@ -554,8 +580,12 @@
      })
    }
    let _updateconfig = ''
    if (verify && verify.voucher && verify.voucher.enabled) { // 凭证-显示列中选取,必须选行
      let _voucher = verify.voucher
      _updateconfig = ',BVoucher=@BVoucher,FIBVoucherDate=@FIBVoucherDate,FiYear=@FiYear'
      _sql += `exec s_BVoucher_Create
          @Bill ='${data[_voucher.linkField]}',
@@ -587,8 +617,10 @@
      })
      keys = keys.join(',')
      values = values.join(',')
      _sql += `insert into ${btn.sql} (${keys}, createuserid, BID) select ${values},@BID,@userid`
      _sql += `declare @UserName  nvarchar(50),@FullName nvarchar(50)
        select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID
        `
      _sql += `insert into ${btn.sql} (${keys},createuserid,CreateUser,CreateStaff,BID) select ${values},@BID,@userid,@username,@fullname`
    } else if (btn.OpenType === 'pop' && btn.sqlType === 'update') {
      let _form = []
      formdata.forEach(item => {
@@ -599,15 +631,15 @@
        }
      })
      _form = _form.join(',')
      _sql += `update ${btn.sql} set ${_form},modifydate=getdate(),modifyuserid=@userid,BVoucher=@BVoucher,FIBVoucherDate=@FIBVoucherDate,FiYear=@FiYear where ${primaryKey}=@${primaryKey}`
      _sql += `update ${btn.sql} set ${_form},modifydate=getdate(),modifyuserid=@userid${_updateconfig} where ${primaryKey}=@${primaryKey}`
    } else if ((btn.OpenType === 'prompt' || btn.OpenType === 'exec') && btn.sqlType === 'LogicDelete') { // 逻辑删除
      _sql += `update ${btn.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid where ${primaryKey}=@${primaryKey}`
    } else if ((btn.OpenType === 'prompt' || btn.OpenType === 'exec') && btn.sqlType === 'delete') {
    } else if ((btn.OpenType === 'prompt' || btn.OpenType === 'exec') && btn.sqlType === 'delete') {      // 物理删除
      _sql += `insert into snote (remark,createuserid) select '删除表:${btn.sql} 数据: ${primaryKey}='+@${primaryKey},@userid delete ${btn.sql} where ${primaryKey}=@${primaryKey}`
    }
    _sql += `
      aaa:
      select @ErrorCode= as ErrorCode,@retmsg as ErrorCode
      select @ErrorCode as ErrorCode,@retmsg as retmsg
      `
    console.log(_sql)
    return _sql