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) } }, } }