king
2020-01-08 669d7cc31eb3728ad09bfb7ce6e615f5c571c14e
src/utils/utils.js
@@ -448,41 +448,139 @@
   * @return {String} type   执行类型
   * @return {String} table  表名
   */
  static getSysDefaultSql (btn, setting, formdata, primaryId) {
    // let verify = btn.verify
    let primaryKey = setting.primaryKey || 'id'
    let _sql = ''
  static getSysDefaultSql (btn, setting, formdata, primaryId, data) {
    let verify = btn.verify
    let _formFieldValue = {}
    // if (verify && verify.accountdate === 'true') {
    //   _sql += `exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
    //     if @ErrorCode!=''
    //     GOTO aaa
    //     `
    // }
    // if (verify && verify.invalid === 'true') {
    //   _sql += `Declare @tbid nvarchar(50), @ErrorCode nvarchar(50),
    //     @retmsg nvarchar(4000)
    //     Select @tbid='', @ErrorCode='',@retmsg=''
    //     Select @tbid=${primaryKey} from ${btn.sql} where ${primaryKey} ='${primaryId}'
    //     If @tbid=''
    //     Begin
    //       Setect @ErrorCode='E',@retmsg='数据已失效'
    //       goto aaa
    //     end
    //     `
    // }
    if (formdata) { // 获取字段键值对
      formdata.forEach(form => {
        _formFieldValue[form.key] = form.value
      })
    }
    console.log(btn)
    console.log(formdata)
    console.log(primaryId)
    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=''
      `
    if (verify && verify.accountdate === 'true') { // 启用账期验证
      _sql += `exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
        if @ErrorCode!=''
          GOTO aaa
        `
    }
    if (btn.sqlType !== 'insert' && verify && verify.invalid === 'true') { // 失效验证,添加数据时不用
      _sql += `Select @tbid=${primaryKey} from ${btn.sql} where ${primaryKey} ='${primaryId}'
        If @tbid=''
        Begin
          Setect @ErrorCode='E',@retmsg='数据已失效'
          goto aaa
        end
        `
    }
    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 = []      // 表单值,用于错误提示
        item.field.split(',').forEach(_field => {
          _fieldValue.push(`${_field}='${_formFieldValue[_field]}'`)
          _value.push(_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(' ')} 已存在'
            goto aaa
          end
          `
      })
    }
    if (verify && verify.customverifys.length > 0) { // 自定义验证
      verify.customverifys.forEach(item => {
        let _cuSql = item.sql
        if (data) {
          _formFieldValue = {...data, ..._formFieldValue}
        }
        let keys = Object.keys(_formFieldValue)
        keys = keys.sort((a, b) => {
          return b.length - a.length
        })
        keys.forEach(key => {
          _cuSql.replace('@' + key, _formFieldValue[key])
        })
        _sql += `Select @tbid='', @ErrorCode='',@retmsg=''
          Select top 1 @tbid='X' from (${_cuSql}) a
          If @tbid ${item.result === 'true' ? '=' : '!='}''
          Begin
            Setect @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
            goto aaa
          end
          `
      })
    }
    if (verify && verify.billcodes.length > 0) {
      verify.billcodes.forEach(item => {
        let _ModularDetailCode = ''
        if (item.TypeCharOne === 'Lp' || item.TypeCharOne === 'BN') {
          _ModularDetailCode = item.TypeCharOne + item.linkField
        } else {
          _ModularDetailCode = item.ModularDetailCode
        }
        _sql += `Declare @${item.field} nvarchar(50)
          select @BillCode='', @${item.field}=''
          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 @${item.field}=@BillCode
          `
      })
    }
    if (verify && verify.voucher && verify.voucher.enabled) { // 凭证-显示列中选取,必须选行
      let _voucher = verify.voucher
      _sql += `exec s_BVoucher_Create
          @Bill ='${data[_voucher.linkField]}',
          @BVoucherType ='${_voucher.BVoucherType}',
          @VoucherTypeOne ='${_voucher.VoucherTypeOne}',
          @VoucherTypeTwo ='${_voucher.VoucherTypeTwo}',
          @Type =${_voucher.Type},
          @BVoucher =@BVoucher OUTPUT ,
          @FIBVoucherDate =@FIBVoucherDate OUTPUT ,
          @FiYear =@FiYear OUTPUT ,
          @ErrorCode =@ErrorCode OUTPUT,
          @retmsg=@retmsg OUTPUT
        if @ErrorCode!=''
          GOTO aaa
        `
    }
    if (btn.OpenType === 'pop' && btn.sqlType === 'insert') {
      let keys = []
      let values = []
      formdata.forEach(item => {
        if (!item.readonly && item.type === 'number') {
        if (item.type === 'number') {
          keys.push(item.key)
          values.push(item.value)
        } else if (!item.readonly) {
        } else {
          keys.push(item.key)
          values.push('\'' + item.value + '\'')
        }
@@ -494,19 +592,23 @@
    } else if (btn.OpenType === 'pop' && btn.sqlType === 'update') {
      let _form = []
      formdata.forEach(item => {
        if (!item.readonly && item.type === 'number') {
        if (item.type === 'number') {
          _form.push(item.key + '=' + item.value)
        } else if (!item.readonly) {
        } else {
          _form.push(item.key + '=\'' + item.value + '\'')
        }
      })
      _form = _form.join(',')
      _sql += `update ${btn.sql} set ${_form},modifydate=getdate(),modifyuserid=@userid where ${primaryKey}=@${primaryKey}`
      _sql += `update ${btn.sql} set ${_form},modifydate=getdate(),modifyuserid=@userid,BVoucher=@BVoucher,FIBVoucherDate=@FIBVoucherDate,FiYear=@FiYear 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') {
      _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
      `
    console.log(_sql)
    return _sql
  }
@@ -652,7 +754,6 @@
   * @return {String}
   */
  static getfunc (param, btn, menu, config) {
    console.log(menu)
    let form = ''
    let formParam = ''
    let columns = config.columns