king
2020-02-09 6d0137932fcc8f9848123743c1aad5cff8172d8a
src/utils/utils.js
@@ -448,10 +448,10 @@
  static getSysDefaultSql (btn, setting, formdata, param, data, logcolumns) {
    let primaryId = param.ID
    let BID = param.BID
    let verify = btn.verify
    let verify = btn.verify || {}
    let _formFieldValue = {}
    // 需要声明的变量集
    let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID']
    let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey']
    // 主键字段
    let primaryKey = setting.primaryKey || 'id'
@@ -460,16 +460,79 @@
    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)
      `
    let _initvars = ['ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey'] // 已赋值字段集
    let _initfields = []
    let _declarefields = []
    // 获取字段键值对
    if (formdata) {
      formdata.forEach(form => {
        _formFieldValue[form.key] = form.value
        if (!_initvars.includes(form.key)) {
          _initvars.push(form.key)
          _initfields.push(`@${form.key}='${form.value}'`)
        }
        if (!_vars.includes(form.key)) {
          _vars.push(form.key)
          let _type = `nvarchar(${form.fieldlen})`
          if (form.type.match(/date/ig)) {
            _type = 'datetime'
          } else if (form.type === 'number') {
            _type = `decimal(18,${form.fieldlen})`
          }
          _declarefields.push(`@${form.key} ${_type}`)
        }
      })
    }
    // 添加数据中字段,表单值优先
    if (data) {
    // 添加数据中字段,表单值优先(按钮不选行时跳过)
    if (data && btn.Ot !== 'notRequired') {
      _formFieldValue = {...data, ..._formFieldValue}
      if (logcolumns && logcolumns.length > 0) {
        logcolumns.forEach(col => {
          if (!_initvars.includes(col.field)) {
            _initvars.push(col.field)
            let _val = data.hasOwnProperty(col.field) ? data[col.field] : ''
            _initfields.push(`@${col.field}='${_val}'`)
          }
          if (!_vars.includes(col.field)) {
            _vars.push(col.field)
            let _type = `nvarchar(${col.fieldlength || 50})`
            if (col.type === 'number') {
              let _length = (col.decimal || col.decimal === 0) ? col.decimal : 18
              _type = `decimal(18,${_length})`
            } else if (col.type === 'picture' || col.type === 'textarea') {
              _type = `nvarchar(${col.fieldlength || 512})`
            }
            _declarefields.push(`@${col.field} ${_type}`)
          }
        })
      }
    }
    // 变量声明
    _declarefields = _declarefields.join(',')
    if (_declarefields) {
      _sql += `,${_declarefields}
        `
    }
    // 变量赋值
    _initfields = _initfields.join(',')
    if (_initfields) {
      _sql += `select ${_initfields}
        `
    }
    // 添加时主键为空
@@ -477,60 +540,29 @@
      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')
      }
      if (verify.customverifys) {
        verify.customverifys = verify.customverifys.filter(item => item.status !== 'false')
      }
      if (verify.billcodes) {
        verify.billcodes = verify.billcodes.filter(item => item.status !== 'false')
      }
      if (verify.scripts) {
        verify.scripts = verify.scripts.filter(item => item.status !== 'false')
      }
    if (verify.contrasts) {
      verify.contrasts = verify.contrasts.filter(item => item.status !== 'false')
    }
    if (verify.uniques) {
      verify.uniques = verify.uniques.filter(item => item.status !== 'false')
    }
    if (verify.customverifys) {
      verify.customverifys = verify.customverifys.filter(item => item.status !== 'false')
    }
    if (verify.billcodes) {
      verify.billcodes = verify.billcodes.filter(item => item.status !== 'false')
    }
    if (verify.scripts) {
      verify.scripts = verify.scripts.filter(item => item.status !== 'false')
    }
    // 初始化凭证字段
    _sql += `select @BVoucher='',@FIBVoucherDate='',@FiYear=''
    _sql += `select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg=''
      `
    // 启用账期验证
    if (verify && verify.accountdate === 'true') {
    if (verify.accountdate === 'true') {
      _sql += `exec s_FIBVoucherDateCheck @ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
        if @ErrorCode!=''
          GOTO aaa
@@ -538,7 +570,7 @@
    }
    // 失效验证,添加数据时不用
    if (btn.sqlType !== 'insert' && verify && verify.invalid === 'true' && setting.dataresource) {
    if (btn.sqlType !== 'insert' && verify.invalid === 'true' && setting.dataresource) {
      let datasource = setting.dataresource
      if (/\s/.test(datasource)) { // 拼接别名
        datasource = '(' + datasource + ') tb'
@@ -555,7 +587,7 @@
    }
    // 比较验证
    if (verify && verify.contrasts && verify.contrasts.length > 0) {
    if (verify.contrasts && verify.contrasts.length > 0) {
      verify.contrasts.forEach(item => {
        _sql += `If ${item.frontfield} ${item.operator} ${item.backfield}
          Begin
@@ -567,7 +599,7 @@
    }
    // 唯一性验证,必须存在表单(表单存在时,主键均为单值),必须填写数据源
    if (formdata && verify && verify.uniques.length > 0) {
    if (formdata && verify.uniques && verify.uniques.length > 0) {
      verify.uniques.forEach(item => {
        let _fieldValue = []                     // 表单键值对field=value
        let _value = []                          // 表单值,用于错误提示
@@ -595,7 +627,7 @@
    }
    
    // 自定义验证
    if (verify && verify.customverifys.length > 0) {
    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
@@ -609,7 +641,7 @@
    }
    // 单号生成,使用上级id(BID)或列表数据,声明变量(检验)
    if (verify && verify.billcodes.length > 0) {
    if (verify.billcodes && verify.billcodes.length > 0) {
      verify.billcodes.forEach(item => {
        let _ModularDetailCode = ''
        if (item.TypeCharOne === 'Lp' || item.TypeCharOne === 'BN') {
@@ -650,7 +682,7 @@
    let _updateconfig = ''
    // 凭证-显示列中选取,必须选行
    if (verify && verify.voucher && verify.voucher.enabled && data) {
    if (verify.voucher && verify.voucher.enabled && data) {
      let _voucher = verify.voucher
      _updateconfig = ',BVoucher=@BVoucher,FIBVoucherDate=@FIBVoucherDate,FiYear=@FiYear'
@@ -676,7 +708,7 @@
      `
    // 添加、修改、逻辑删除、物理删除
    if (btn.OpenType === 'pop' && btn.sqlType === 'insert') {
    if (btn.OpenType === 'pop' && btn.sqlType === 'insert' && verify.default !== 'false') {
      let keys = []
      let values = []
      formdata.forEach(item => {
@@ -696,7 +728,7 @@
      values = values.join(',')
      _sql += _user
      _sql += `insert into ${btn.sql} (${keys},createuserid,CreateUser,CreateStaff,BID) select ${values},@userid,@username,@fullname,@BID;`
    } else if (btn.OpenType === 'pop' && btn.sqlType === 'update') {
    } else if (btn.OpenType === 'pop' && btn.sqlType === 'update' && verify.default !== 'false') {
      let _form = []
      formdata.forEach(item => {
        if (item.type === 'funcvar') {
@@ -709,13 +741,17 @@
      })
      _form = _form.join(',')
      _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') { // 逻辑删除
    } else if ((btn.OpenType === 'prompt' || btn.OpenType === 'exec') && btn.sqlType === 'LogicDelete' && verify.default !== 'false') { // 逻辑删除
      _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' && verify.default !== 'false') {      // 物理删除
      let _msg = ''
      if (data && logcolumns && logcolumns.length > 0) {
        let _index = 0
        logcolumns.forEach(col => {
          _msg += col.label + '=' + data[col.field] + ','
          if (col.Hide !== 'true' && _index < 4) {
            _msg += col.label + '=' + data[col.field] + ','
            _index++
          }
        })
      }
      _sql += _user
@@ -723,7 +759,7 @@
    }
    // 拼接自定义脚本
    if (verify && verify.scripts && verify.scripts.length > 0) {
    if (verify.scripts && verify.scripts.length > 0) {
      let _scripts = ''
      verify.scripts.forEach(item => {
        _scripts += `