king
2020-02-05 b4744510a44b2f59b7ecece75085d4b70da2b059
src/utils/utils.js
@@ -450,9 +450,8 @@
    let BID = param.BID
    let verify = btn.verify
    let _formFieldValue = {}
    // 需要声明的变量集
    let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName']
    let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID']
    // 主键字段
    let primaryKey = setting.primaryKey || 'id'
@@ -468,8 +467,50 @@
      })
    }
    // 添加数据中字段,表单值优先
    if (data) {
      _formFieldValue = {...data, ..._formFieldValue}
    }
    // 添加时主键为空
    if (btn.sqlType === 'insert') {
      primaryId = ''
    }
    // 声明表单及列表数据字段,初始化赋值
    let keys = Object.keys(_formFieldValue)
    let _initfields = []
    let _initvars = ['ID', 'BID']
    let _formfields = []
    keys.forEach(key => {
      if (!_initvars.includes(key)) {
        _initvars.push(key)
        _initfields.push(`@${key}='${_formFieldValue[key]}'`)
      }
      if (!_vars.includes(key)) {
        _vars.push(key)
        _formfields.push(`@${key} nvarchar(50)`)
      }
    })
    _formfields = _formfields.join(',')
    if (_formfields) {
      _sql += `,${_formfields}
        `
    }
    _initfields = _initfields.join(',')
    if (_initfields) {
      _sql += `select ${_initfields}
        `
    }
    // 去除禁用的验证
    if (verify) {
      if (verify.contrasts) {
        verify.contrasts = verify.contrasts.filter(item => item.status !== 'false')
      }
      if (verify.uniques) {
        verify.uniques = verify.uniques.filter(item => item.status !== 'false')
      }
@@ -482,28 +523,6 @@
      if (verify.scripts) {
        verify.scripts = verify.scripts.filter(item => item.status !== 'false')
      }
    }
    // 设置有自定义脚本时,声明变量中添加所有表单字段,并避免重复
    if (verify && verify.scripts && verify.scripts.length > 0 && formdata && formdata.length > 0) {
      let _initfields = []
      let _formfields = formdata.filter(form => {
        _initfields.push(`@${form.key}='${form.value}'`)
        return !_vars.includes(form.key)
      })
      _formfields = _formfields.map(form => {
        _vars.push(form.key)
        return `@${form.key} nvarchar(50)`
      })
      _formfields = _formfields.join(',')
      _sql += `,${_formfields}
        `
      _initfields = _initfields.join(',')
      _sql += `select ${_initfields}
        `
    }
    // 初始化凭证字段
@@ -535,13 +554,20 @@
        `
    }
    // 唯一性验证,必须存在表单(表单存在时,主键均为单值),必须填写数据源
    if (formdata && verify && verify.uniques.length > 0) {
      let _primaryId = primaryId
      if (btn.sqlType === 'insert') {
        _primaryId = ''
    // 比较验证
    if (verify && 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
          `
      })
      }
    // 唯一性验证,必须存在表单(表单存在时,主键均为单值),必须填写数据源
    if (formdata && verify && verify.uniques.length > 0) {
      verify.uniques.forEach(item => {
        let _fieldValue = []                     // 表单键值对field=value
        let _value = []                          // 表单值,用于错误提示
@@ -552,8 +578,13 @@
          _value.push(`${_labels[index] || ''}:${_formFieldValue[_field] || ''}`)
        })
        let _verifyType = ''
        if (item.verifyType === 'logic') {
          _verifyType = ' and deleted=0'
        }
        _sql += `select @tbid='', @ErrorCode='',@retmsg=''
          select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')} and ${primaryKey} !='${_primaryId}'
          select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')} and ${primaryKey} !='${primaryId}'${_verifyType}
          If @tbid!=''
          Begin
            select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 已存在'
@@ -563,35 +594,11 @@
      })
    }
    
    // 自定义验证,使用列表及表单数据(表单优先),替换所有@相同字段、@ID、@BID
    // 自定义验证
    if (verify && verify.customverifys.length > 0) {
      let _primaryId = primaryId
      if (btn.sqlType === 'insert') {
        _primaryId = ''
      }
      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 => {
          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
          select top 1 @tbid='X' from (${item.sql}) a
          If @tbid ${item.result === 'true' ? '!=' : '='}''
          Begin
            select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'