preJavascript.js 2.15 KB
import request from '@/utils/request'
export default {
  methods: {
    //执行前置脚本
    handlePreScript(btnAlias) {
      //执行前置脚本内容
      const _this = this
      const _req = request
      const boData = this.data
      const buttonConfig = this.getCurrentButtonConfigByBtnAlias(btnAlias)
      const preScript = `const scriptFunction = function(_req,boData,_this){
        ${buttonConfig?.beforeScript}
      };`
      try {
        const result = eval(`${preScript}scriptFunction(_req,boData,_this);`)
        if (result && result.then && typeof result.then === 'function') {
          return result
        }
        if (result === false) return false
        return true
      } catch (err) {
        this.$message.error(`操作按钮的前置事件执行错误:${err}`)
      }
    },
    getCurrentButtonConfigByBtnAlias(btnAlias) {
      let buttonConfig = null
      //流程启动页面,启动和保存
      if(['startFlow','saveDraft'].includes(btnAlias)){
        buttonConfig = this.buttonMap[btnAlias]
      }else if(btnAlias === 'save'){
        //审批页面保存
        buttonConfig = {...this.saveDraftBtn}
      }else{
        this.approvalButtonList?.find((btn) => btn.alias === btnAlias)
      }
      return buttonConfig
    },
    submitBefore(btnAlias) {
      //获取执行前置脚本返回结果
      const preScriptResult = this.handlePreScript(btnAlias)
      //前置脚本结果为false直接return
      if (!preScriptResult) {
        this.startFlowLoading = false
        this.loading = false
        return false
      }
      //执行前置脚本返回的接口时先执行前置事件接口
      if (preScriptResult.then && typeof preScriptResult.then === 'function') {
        preScriptResult.then(
          () => {
            this.onSubmit(btnAlias)
          },
          (fail) => {
            //接口返回失败则终止按钮操作,并输出错误信息
            this.startFlowLoading = false
            this.loading = false
            return this.$message.warning(fail)
          }
        )
      } else {
        //执行前置脚本返回true时继续提交
        this.onSubmit(btnAlias)
      }
    },
  }
}