king
2020-02-16 5088d267c69e87673c85ba302dd9dc62c9da4951
src/tabviews/formtab/actionList/index.jsx
@@ -11,11 +11,13 @@
class MainAction extends Component {
  static propTpyes = {
    MenuID: PropTypes.string,      // 菜单ID
    primaryId: PropTypes.string,   // 主键
    actions: PropTypes.array,      // 按钮组
    logcolumns: PropTypes.array,   // 显示列
    dict: PropTypes.object,        // 字典项
    data: PropTypes.any,           // 数据
    setting: PropTypes.any,        // 页面通用设置
    getFormData: PropTypes.func,   // 获取表单值
    refreshdata: PropTypes.func,   // 执行完成后数据刷新
  }
@@ -33,21 +35,29 @@
    let _this = this
    if (item.btnType !== 'cancel') {
      this.props.getFormData().then(res => {
    if (item.OpenType === 'prompt') {
      confirm({
        title: this.props.dict['main.action.confirm.tip'],
        onOk() {
          return new Promise(resolve => {
            _this.execSubmit(item, data, resolve)
                _this.execSubmit(item, data, resolve, res)
          })
        },
        onCancel() {}
      })
    } else if (item.OpenType === 'exec') {
      this.setState({loadingUuid: item.uuid})
      this.execSubmit(item, data, () => {
        this.setState({loadingUuid: ''})
          }, res)
        }
      })
    } else {
      item.afterExecSuccess = 'close'
      this.props.refreshdata(item, 'success', '')
    }
  }
@@ -55,7 +65,9 @@
   * @description 按钮提交执行
   */
  execSubmit = (btn, data, _resolve, formdata) => {
    const { setting, logcolumns } = this.props
    const { setting, logcolumns, primaryId } = this.props
    let _primaryId = primaryId
    if (btn.intertype === 'inner') {
      // 使用内部接口时,内部函数和数据源不可同时为空, 使用系统函数时,类型不可为空
@@ -65,17 +77,8 @@
        return
      }
      // 执行方式为多行拼接,且打开方式为表单时,会转为循环发送请求
      // 打开方式为模态框,使用内部函数添加
      if (
        btn.Ot === 'notRequired' ||
        btn.Ot === 'requiredSgl' ||
        (btn.Ot === 'requiredOnce' && btn.OpenType !== 'pop') ||
        (btn.OpenType === 'pop' && !btn.innerFunc && btn.sql && btn.sqlType === 'insert')
      ) {
        // 创建凭证时,需要选择行时
        if (data.length === 0 && !btn.innerFunc && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
      if (!data && !btn.innerFunc && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
          notification.warning({
            top: 92,
            message: '使用创建凭证函数,需要选择行!',
@@ -88,140 +91,44 @@
          func: 'sPC_TableData_InUpDe',
          BID: ''
        }
        let primaryId = setting.primaryKey && data[0] ? (data[0][setting.primaryKey] || '') : ''
        if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 是否弹框或直接执行
          let ID = ''
          if (btn.Ot === 'notRequired') {
          } else if (btn.Ot === 'requiredSgl') {
            ID = data[0][setting.primaryKey]
          } else if (btn.Ot === 'requiredOnce') { // id值拼接
            let ids = data.map(d => { return d[setting.primaryKey]})
            ID = ids.join(',')
          }
          if (btn.innerFunc) { // 使用自定义函数
            param.func = btn.innerFunc
            if (setting.primaryKey) { // 主键存在时,设置主键参数
              param[setting.primaryKey] = ID
            }
          } else if (btn.sql) {
            param.ID = primaryId
            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param, data[0], logcolumns)) // 数据源
            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
          }
        } else if (btn.OpenType === 'pop') { // 表单
          if (btn.innerFunc) {
            param.func = btn.innerFunc
            if (setting.primaryKey) { // 主键存在时,设置主键参数
              param[setting.primaryKey] = primaryId
            }
            formdata.forEach(_data => {
              param[_data.key] = _data.value
            })
        if (!param[setting.primaryKey]) {
          param[setting.primaryKey] = Utils.getguid()
        }
        _primaryId = param[setting.primaryKey]
          } else if (btn.sql && btn.sqlType === 'insert') { // 系统函数添加时,生成uuid
            param.ID = Utils.getguid()
            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns)) // 数据源
        param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data, logcolumns)) // 数据源
            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
        _primaryId = param.ID
          } else if (btn.sql) {
            param.ID = primaryId
            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns)) // 数据源
        param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data, logcolumns)) // 数据源
            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
          }
        }
        Api.genericInterface(param).then((res) => {
          if (res.status) {
            this.execSuccess(btn, res)
          this.execSuccess(btn, res, _primaryId)
          } else {
            this.execError(res, btn)
          }
          _resolve()
        })
      } else if (btn.Ot === 'required' || (btn.Ot === 'requiredOnce' && btn.OpenType === 'pop')) {
        let _params = data.map(cell => {
          let param = {
            func: 'sPC_TableData_InUpDe',
            BID: ''
          }
          let primaryId = setting.primaryKey ? cell[setting.primaryKey] : ''
          if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 是否弹框或直接执行
            if (btn.innerFunc) {
              param.func = btn.innerFunc
              if (setting.primaryKey) {
                param[setting.primaryKey] = primaryId
              }
            } else if (btn.sql) {
              param.ID = primaryId
              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param, cell, logcolumns)) // 数据源
              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
            }
          } else if (btn.OpenType === 'pop') { // 表单
            if (btn.innerFunc) {
              param.func = btn.innerFunc
              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)) // 数据源
              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
            }
          }
          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
              } else {
                iserror = true
                errorMsg = res
              }
            })
            if (!iserror) {
              this.execSuccess(btn, errorMsg)
            } else {
              this.execError(errorMsg, btn)
            }
            _resolve()
          })
        } else { // 超出20个请求时循环执行
          this.innerLoopRequest(_params, btn, _resolve)
        }
      } else {
        this.actionSettingError()
        _resolve()
        return
      }
    } else if (btn.intertype === 'outer') {
      /** *********************调用外部接口************************* */
@@ -231,98 +138,21 @@
        return
      }
      let _params = [] // 请求参数数组
      if (btn.Ot === 'notRequired' || btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') {
        let param = {
          BID: ''
        }
        if (btn.OpenType === 'pop' && formdata) { // 表单
      param[setting.primaryKey] = primaryId
          formdata.forEach(_data => {
            param[_data.key] = _data.value
          })
      if (!param[setting.primaryKey]) {
        param[setting.primaryKey] = Utils.getguid()
        }
      _primaryId = param[setting.primaryKey]
        // 获取id
        if (btn.Ot === 'notRequired') {
        } else if (btn.Ot === 'requiredSgl' && setting.primaryKey) {
          param[setting.primaryKey] = data[0][setting.primaryKey]
        } else if (btn.Ot === 'requiredOnce' && setting.primaryKey) {
          let ids = data.map(d => { return d[setting.primaryKey]})
          param[setting.primaryKey] = ids.join(',')
        }
        _params.push(param)
      } else if (btn.Ot === 'required') {
        // 选择多行,循环调用
        let _formparam = {}
        if (btn.OpenType === 'pop' && formdata) { // 表单
          formdata.forEach(_data => {
            _formparam[_data.key] = _data.value
          })
        }
        _params = data.map(cell => {
          let _cell = {
            BID: '',
          }
          if (setting.primaryKey) {
            _cell[setting.primaryKey] = cell[setting.primaryKey]
          }
          _cell = {..._formparam, ..._cell}
          return _cell
        })
      } else {
        this.actionSettingError()
        _resolve()
        return
      }
      // 循环调用外部接口(包括内部及回调函数)
      this.outerLoopRequest(_params, btn, _resolve)
    } else {
      this.actionSettingError()
      _resolve()
      return
    }
  }
  /**
   * @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 => {
@@ -358,7 +188,7 @@
      } else {
        res.rduri = btn.interface
      }
      // res.method = btn.method
      if (btn.outerFunc) {
        res.func = btn.outerFunc
      }
@@ -380,14 +210,8 @@
        return Api.genericInterface(_callbackparam)
      } else {
        if (response.status) {
          // 一次请求成功,进行下一项请求
          if (params.length === 0) {
            this.execSuccess(btn, response)
            this.execSuccess(btn, response, _primaryId)
            _resolve()
          } else {
            this.outerLoopRequest(params, btn, _resolve)
          }
        } else {
          this.execError(response, btn)
          _resolve()
@@ -397,17 +221,19 @@
      if (!res) return
      if (res.status) {
        if (params.length === 0) {
          this.execSuccess(btn, res)
          this.execSuccess(btn, res, _primaryId)
          _resolve()
        } else {
          this.outerLoopRequest(params, btn, _resolve)
        }
      } else {
        this.execError(res, btn)
        _resolve()
      }
    })
    } else {
      this.actionSettingError()
      _resolve()
      return
    }
  }
  /**
@@ -418,12 +244,8 @@
   * 4、模态框执行成功后是否关闭
   * 5、通知主列表刷新
   */
  execSuccess = (btn, res) => {
    if (btn.OpenType === 'excelOut') { // 导出excel
      this.setState({
        loadingUuid: ''
      })
    } else if (res && res.ErrCode === 'S') { // 执行成功
  execSuccess = (btn, res, primaryId) => {
    if (res && res.ErrCode === 'S') { // 执行成功
      notification.success({
        top: 92,
        message: res.ErrMesg || this.props.dict['main.action.confirm.success'],
@@ -433,7 +255,7 @@
    }
    this.props.refreshdata(btn, 'success')
    this.props.refreshdata(btn, 'success', primaryId)
  }
  /**