king
2020-02-06 b7c41fce93fbe30ac8334fc03eef700b1640bc15
2020-02-06
4个文件已修改
509 ■■■■■ 已修改文件
src/components/header/index.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/tableshare/actionList/index.jsx 429 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/tableshare/verifycard/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/header/index.jsx
@@ -157,6 +157,10 @@
    }
    let result = await Api.getSystemConfig(_param)
    // 登录超时
    if (!result) return
    if (result.status) {
      if (result.debug === 'true') { // 是否为debug模式,即可复制菜单参数
        this.props.resetDebug()
@@ -201,6 +205,10 @@
  async getRolesMenu () {
    // 获取角色权限
    let result = await Api.getSystemConfig({func: 'sPC_Get_RolesMenu'})
    // 登录超时
    if (!result) return
    if (result.status) {
      let _permAction = {}
      let _permFuncField = []
src/tabviews/tableshare/actionList/index.jsx
@@ -225,7 +225,6 @@
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
          }
        }
        Api.genericInterface(param).then((res) => {
          if (res.status) {
@@ -236,7 +235,7 @@
          _resolve()
        })
      } else if (btn.Ot === 'required' || (btn.Ot === 'requiredOnce' && btn.OpenType === 'pop')) {
        let deffers = data.map(cell => {
        let _params = data.map(cell => {
          let param = {
            func: 'sPC_TableData_InUpDe',
            BID: this.props.BID
@@ -260,14 +259,13 @@
            if (btn.innerFunc) {
              param.func = btn.innerFunc
              if (setting.primaryKey) {
                param[setting.primaryKey] = primaryId
              }
              formdata.forEach(_data => {
                param[_data.key] = _data.value
              })
              if (setting.primaryKey) {
                param[setting.primaryKey] = primaryId
              }
            } else if (btn.sql) {
              param.ID = primaryId
              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns)) // 数据源
@@ -276,30 +274,38 @@
            }
          }
          return new Promise(resolve => {
            Api.genericInterface(param).then(res => {
              resolve(res)
          return param
        })
        if (_params.length <= 20) {
          let deffers = _params.map(param => {
            return new Promise(resolve => {
              Api.genericInterface(param).then(res => {
                resolve(res)
              })
            })
          })
        })
        Promise.all(deffers).then(result => {
          let iserror = false
          let errorMsg = ''
          result.forEach(res => {
            if (res.status) {
              errorMsg = res
          Promise.all(deffers).then(result => {
            let iserror = false
            let errorMsg = ''
            result.forEach(res => {
              if (res.status) {
                errorMsg = res
              } else {
                iserror = true
                errorMsg = res
              }
            })
            if (!iserror) {
              this.execSuccess(btn, errorMsg)
            } else {
              iserror = true
              errorMsg = res
              this.execError(errorMsg, btn)
            }
            _resolve()
          })
          if (!iserror) {
            this.execSuccess(btn, errorMsg)
          } else {
            this.execError(errorMsg, btn)
          }
          _resolve()
        })
        } else { // 超出20个请求时循环执行
          this.innerLoopRequest(_params, btn, _resolve)
        }
      } else {
        this.actionSettingError()
        _resolve()
@@ -307,9 +313,6 @@
      }
    } else if (btn.intertype === 'outer') {
      /** *********************调用外部接口************************* */
      let param = {
        BID: this.props.BID
      }
      if (!btn.interface) { // 接口地址不存在时报错
        this.actionSettingError()
@@ -317,7 +320,19 @@
        return
      }
      let _params = [] // 请求参数数组
      if (btn.Ot === 'notRequired' || btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') {
        let param = {
          BID: this.props.BID
        }
        if (btn.OpenType === 'pop' && formdata) { // 表单
          formdata.forEach(_data => {
            param[_data.key] = _data.value
          })
        }
        // 获取id
        if (btn.Ot === 'notRequired') {
          
@@ -328,244 +343,37 @@
          param[setting.primaryKey] = ids.join(',')
        }
        if (btn.OpenType === 'pop' && formdata) { // 表单
          formdata.forEach(_data => {
            param[_data.key] = _data.value
          })
        }
        let _outParam = null
        new Promise(resolve => {
          // 内部请求
          if (btn.innerFunc) {
            param.func = btn.innerFunc
            // 存在内部函数时,数据预处理
            Api.genericInterface(param).then(res => {
              if (res.status) {
                delete res.ErrCode
                delete res.ErrMesg
                delete res.message
                delete res.status
                if (btn.sysInterface === 'true') {
                  res.rduri = window.GLOB.mainSystemApi || window.GLOB.subSystemApi
                } else {
                  res.rduri = btn.interface
                }
                // res.method = btn.method
                if (btn.outerFunc) {
                  res.func = btn.outerFunc
                }
                // 使用处理后的数据调用外部接口
                resolve(res)
              } else {
                this.execError(res, btn)
                _resolve()
              }
            })
          } else {
            // 不存在内部函数时,生成外部请求参数
            if (btn.sysInterface === 'true') {
              param.rduri = window.GLOB.mainSystemApi || window.GLOB.subSystemApi
            } else {
              param.rduri = btn.interface
            }
            // param.method = btn.method
            if (btn.outerFunc) {
              param.func = btn.outerFunc
            }
            resolve(param)
          }
        }).then(res => {
          if (!res) return
          // 外部请求
          _outParam = JSON.parse(JSON.stringify(res))
          res.appkey = window.GLOB.appkey || '' // 外部请求时,统一添加appkey
          return Api.genericInterface(res)
        }).then(response => {
          if (!response) return
          // 回调请求
          if (btn.callbackFunc) {
            // 存在回调函数时,调用
            delete response.ErrMesg
            delete response.message
            delete response.status
            delete _outParam.rduri
            response.func = btn.callbackFunc
            let _callbackparam = {..._outParam, ...response}
            return Api.genericInterface(_callbackparam)
          } else {
            if (response.status) {
              this.execSuccess(btn, response)
              _resolve()
            } else {
              this.execError(response, btn)
              _resolve()
            }
          }
        }).then(res => {
          if (!res) return
          if (res.status) {
            this.execSuccess(btn, res)
          } else {
            this.execError(res, btn)
          }
          _resolve()
        })
        _params.push(param)
      } else if (btn.Ot === 'required') {
        // 选择多行,循环调用
        new Promise(resolve => {
          // 内部请求
          if (btn.innerFunc) {
            let deffers = data.map(cell => {
              let _param = {
                BID: this.props.BID,
                func: btn.innerFunc
              }
              if (setting.primaryKey) {
                _param[setting.primaryKey] = cell[setting.primaryKey]
              }
              return new Promise(resolve => {
                Api.genericInterface(_param).then(res => {
                  resolve(res)
                })
              })
            })
            Promise.all(deffers).then(result => {
              let iserror = false
              let errorMsg = ''
              result.forEach(res => {
                if (!res.status) {
                  iserror = true
                  errorMsg = res.message
                }
              })
              if (!iserror) {
                resolve(result)
              } else {
                notification.error({
                  top: 92,
                  message: errorMsg,
                  duration: 15
                })
                this.refreshdata(btn, 'error')
                _resolve()
              }
            })
          } else {
            let params = data.map(cell => {
              let _cell = {
                BID: this.props.BID,
              }
              if (setting.primaryKey) {
                _cell[setting.primaryKey] = cell[setting.primaryKey]
              }
              return _cell
            })
            resolve(params)
          }
        }).then(result => {
          // 外部请求
          if (!result) return
          let deffers = result.map(res => {
            delete res.ErrCode
            delete res.ErrMesg
            delete res.message
            delete res.status
            if (btn.sysInterface === 'true') {
              res.rduri = window.GLOB.mainSystemApi || window.GLOB.subSystemApi
            } else {
              res.rduri = btn.interface
            }
            // res.method = btn.method
            if (btn.outerFunc) {
              res.func = btn.outerFunc
            }
            return new Promise(resolve => {
              Api.genericInterface(res).then(response => {
                resolve(response)
              })
            })
        let _formparam = {}
        if (btn.OpenType === 'pop' && formdata) { // 表单
          formdata.forEach(_data => {
            _formparam[_data.key] = _data.value
          })
          return Promise.all(deffers)
        }
        }).then(result => {
          // 回调请求
          let iserror = false
          let errorMsg = ''
          result.forEach(res => {
            if (!res.status) {
              iserror = true
              errorMsg = res
            } else {
              errorMsg = res
            }
          })
          if (iserror) {
            this.execError(errorMsg, btn)
            _resolve()
            return
        _params = data.map(cell => {
          let _cell = {
            BID: this.props.BID,
          }
          if (btn.callbackFunc) {
            // 存在回调函数时,调用
            let deffers = result.map(res => {
              delete res.ErrCode
              delete res.ErrMesg
              delete res.message
              delete res.status
              res.func = btn.callbackFunc
              return new Promise(resolve => {
                Api.genericInterface(res).then(response => {
                  resolve(response)
                })
              })
            })
            return Promise.all(deffers)
          } else {
            _resolve()
            this.execSuccess(btn, errorMsg)
          if (setting.primaryKey) {
            _cell[setting.primaryKey] = cell[setting.primaryKey]
          }
        }).then(result => {
          if (!result) return
          let iserror = false
          let errorMsg = ''
          result.forEach(res => {
            if (!res.status) {
              iserror = true
              errorMsg = res
            } else {
              errorMsg = res
            }
          })
          if (iserror) {
            this.execError(errorMsg, btn)
            return
          } else {
            this.execSuccess(btn, errorMsg)
          }
          _resolve()
          _cell = {..._formparam, ..._cell}
          return _cell
        })
      } else {
        this.actionSettingError()
        _resolve()
        return
      }
      // 循环调用外部接口(包括内部及回调函数)
      this.outerLoopRequest(_params, btn, _resolve)
      
    } else {
      this.actionSettingError()
@@ -575,6 +383,123 @@
  }
  /**
   * @description 内部请求循环执行
   */
  innerLoopRequest = (params, btn, _resolve) => {
    if (!params && params.length === 0) return
    let param = params.shift()
    Api.genericInterface(param).then(res => {
      if (res.status) {
        if (params.length === 0) {
          this.execSuccess(btn, res)
          _resolve()
        } else {
          this.innerLoopRequest(params, btn, _resolve)
        }
      } else {
        this.execError(res, btn)
        _resolve()
      }
    })
  }
  /**
   * @description 外部请求循环执行
   */
  outerLoopRequest = (params, btn, _resolve) => {
    if (!params && params.length === 0) return
    let param = params.shift()
    let _outParam = null
    new Promise(resolve => {
      // 内部请求
      if (btn.innerFunc) {
        param.func = btn.innerFunc
        // 存在内部函数时,数据预处理
        Api.genericInterface(param).then(res => {
          if (res.status) {
            delete res.ErrCode
            delete res.ErrMesg
            delete res.message
            delete res.status
            // 使用处理后的数据调用外部接口
            resolve(res)
          } else {
            this.execError(res, btn)
            resolve(false)
            _resolve()
          }
        })
      } else {
        resolve(param)
      }
    }).then(res => {
      if (!res) return
      // 外部请求
      _outParam = JSON.parse(JSON.stringify(res))
      if (btn.sysInterface === 'true') {
        res.rduri = window.GLOB.mainSystemApi || window.GLOB.subSystemApi
      } else {
        res.rduri = btn.interface
      }
      // res.method = btn.method
      if (btn.outerFunc) {
        res.func = btn.outerFunc
      }
      res.appkey = window.GLOB.appkey || '' // 外部请求时,统一添加appkey
      return Api.genericInterface(res)
    }).then(response => {
      if (!response) return
      // 回调请求
      if (btn.callbackFunc) {
        // 存在回调函数时,调用
        delete response.message
        delete response.status
        response.func = btn.callbackFunc
        let _callbackparam = {..._outParam, ...response}
        return Api.genericInterface(_callbackparam)
      } else {
        if (response.status) {
          // 一次请求成功,进行下一项请求
          if (params.length === 0) {
            this.execSuccess(btn, response)
            _resolve()
          } else {
            this.outerLoopRequest(params, btn, _resolve)
          }
        } else {
          this.execError(response, btn)
          _resolve()
        }
      }
    }).then(res => {
      if (!res) return
      if (res.status) {
        if (params.length === 0) {
          this.execSuccess(btn, res)
          _resolve()
        } else {
          this.outerLoopRequest(params, btn, _resolve)
        }
      } else {
        this.execError(res, btn)
        _resolve()
      }
    })
  }
  /**
   * @description 操作成功后处理
   * 1、excel导出,成功后取消导出按钮加载中状态
   * 2、状态码为 S 时,显示成功信息后系统默认信息
src/templates/tableshare/verifycard/index.jsx
@@ -1,6 +1,6 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Tabs, Row, Col, Radio, Button, Table, Popconfirm, Icon, notification, Modal, message, InputNumber } from 'antd'
import { Form, Tabs, Row, Col, Radio, Button, Table, Popconfirm, Icon, notification, Modal, message, InputNumber, Tooltip } from 'antd'
import moment from 'moment'
import Api from '@/api'
@@ -361,6 +361,7 @@
    this.setState({
      verify: {
        default: _verify.default || 'true',
        invalid: _verify.invalid || 'false',
        uniques: _verify.uniques || [],
        contrasts: _verify.contrasts || [],
@@ -923,6 +924,19 @@
          <Form {...formItemLayout}>
            <Row gutter={24}>
              <Col span={12}>
                <Form.Item label={
                  <Tooltip placement="bottomLeft" title={'默认sql执行顺序为自定义脚本之前'}>
                    <Icon type="question-circle" style={{color: '#c49f47', marginRight: '5px'}} />
                    默认sql
                  </Tooltip>
                }>
                  <Radio.Group value={verify.default} onChange={(e) => {this.onOptionChange(e, 'default')}}>
                    <Radio value="true">执行</Radio>
                    <Radio value="false">不执行</Radio>
                  </Radio.Group>
                </Form.Item>
              </Col>
              <Col span={12}>
                <Form.Item label={'账期验证'}>
                  <Radio.Group value={verify.accountdate} onChange={(e) => {this.onOptionChange(e, 'accountdate')}}>
                    <Radio value="true">开启</Radio>
src/utils/utils.js
@@ -448,7 +448,7 @@
  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']
@@ -507,22 +507,20 @@
    }
    // 去除禁用的验证
    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')
    }
    // 初始化凭证字段
@@ -530,7 +528,7 @@
      `
    // 启用账期验证
    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 +536,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 +553,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 +565,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 +593,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 +607,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 +648,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 +674,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 +694,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,9 +707,9 @@
      })
      _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) {
        logcolumns.forEach(col => {
@@ -723,7 +721,7 @@
    }
    // 拼接自定义脚本
    if (verify && verify.scripts && verify.scripts.length > 0) {
    if (verify.scripts && verify.scripts.length > 0) {
      let _scripts = ''
      verify.scripts.forEach(item => {
        _scripts += `