{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-fvue\\src\\components\\flow\\start.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\src\\components\\flow\\start.vue","mtime":1667327529419},{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport req from \"@/request.js\";\r\nimport { mapState } from \"vuex\";\r\nimport FormContent from \"@/components/flow/formContent.vue\";\r\nimport TaskSelectDestination from \"@/components/flow/task/taskSelectDestination.vue\";\r\nimport utils from \"@/utils.js\";\r\nimport { Base64 } from \"js-base64\";\r\n\r\nexport default {\r\n  name: \"start\",\r\n  components: {\r\n    FormContent,\r\n    TaskSelectDestination,\r\n  },\r\n  props: [\"defId\", \"instId\", \"leaderId\", \"copyInstId\"],\r\n  data() {\r\n    return {\r\n      tableData:[],\r\n      dialogVisible: false,\r\n      disabled: true,\r\n      nodeDef: {},\r\n      flowId: \"\",\r\n      isShowStartBtn: true,\r\n      isMyRequest: false,\r\n      defName: \"\",\r\n      initFillData: false,\r\n      reloadForm: false,\r\n      defName: \"\",\r\n      btnAlias: \"\",\r\n      data: null,\r\n      show: false,\r\n      localInstId:this.instId\r\n    };\r\n  },\r\n  computed: mapState({\r\n    curOrgPost: (state) => state.user.postCharge,\r\n  }),\r\n  beforeRouteEnter(to,from,next){\r\n    next(vm=>{\r\n      //判断用户是否具有流程启动权限\r\n      const userId = vm.$store.state.login.currentUser.userId,\r\n            instId = to.params.instId,\r\n            defId = to.params.defId,\r\n            leadId = to.params.leaderId;\r\n      \r\n      let url = `${window.context.bpmModel}/flow/defAuthorize/v1/startRight?userId=${userId}&defId=${defId}&leadId=${leadId}`;\r\n      // 发起的是流程草稿时\r\n      if(instId){\r\n        url = `${url}&instId=${instId}`;\r\n      }\r\n\r\n      req.get(url).then(resp=>{\r\n        if(!resp.data || !resp.data.state || !resp.data.value){\r\n          vm.$alert('您没有该流程的启动权限','无权限',{\r\n            confirmButtonText: \"返回主页\",\r\n            callback: action =>{\r\n              vm.$router.push(\"/home\");\r\n            }\r\n          })\r\n        }else{\r\n          vm.show = true;\r\n        }\r\n      })\r\n    })\r\n  },\r\n  mounted() {\r\n    let _this = this;\r\n    //如果该字段的校验受另一个字段影响。则监听另一个字段控件发布的值改变事件\r\n    this.$root.$on(\"startFlowBtnChange\", function (value) {\r\n      _this.isShowStartBtn = value;\r\n    });\r\n    //监听表单加载完成发布事件\r\n    this.$root.$on(\"formLoading\", function (value) {\r\n      _this.disabled = value;\r\n    });\r\n  },\r\n  methods: {\r\n    //处理任务\r\n    handleTask(row){\r\n      this.$router.push(\"/task/\" + row.id + \"/0\");\r\n    },\r\n    // 准备数据\r\n    handleData(formDataStr) {\r\n      let data = { defId: this.defId };\r\n      if (formDataStr) {\r\n        // URL表单\r\n        if (formDataStr.constructor == Object) {\r\n          data.formType = \"frame\";\r\n          if (formDataStr.businessKey) {\r\n            data.businessKey = formDataStr.businessKey;\r\n          }\r\n          if (formDataStr.sysCode) {\r\n            data.sysCode = formDataStr.sysCode;\r\n          }\r\n          if (formDataStr.vars) {\r\n            data.vars = formDataStr.vars;\r\n          }\r\n        } else if (formDataStr.constructor == String) {\r\n          data.data = Base64.encode(formDataStr);\r\n          data.formType = \"inner\";\r\n        }\r\n      }\r\n      data.supportMobile = 0;\r\n      if (this.instId) {\r\n        data.proInstId = this.instId;\r\n      }\r\n      if (this.curOrgPost && this.curOrgPost.org) {\r\n        data.startOrgId = this.curOrgPost.org.id;\r\n      }\r\n      if (window.urgentStateValue) {\r\n        data.urgentStateValue = window.urgentStateValue;\r\n      }\r\n      if (this.leaderId && this.leaderId != 0) {\r\n        data.agentLeaderId = this.leaderId;\r\n      }\r\n      return data;\r\n    },\r\n    //启动\r\n    start() {\r\n      this.btnAlias = \"startFlow\";\r\n      let _this = this;\r\n      //获取VUE表单实例(判断是否是在线表单)\r\n      if (document.getElementsByName(\"online-form\")[0]) {\r\n        let tables = document.getElementsByName(\"online-form\")[0].__vue__\r\n          .permission.table; //获取子表权限\r\n        let boData = document.getElementsByName(\"online-form\")[0].__vue__.data; //获取表单bo对象\r\n        let zData = {};\r\n        for (let k in boData) {\r\n          zData = boData[k];\r\n        }\r\n        for (let key in tables) {\r\n          //如果有导入属性，则表明不是子表而是数据报表，不做必填校验\r\n          if (tables[key] && tables[key].hasOwnProperty(\"export\")) {\r\n            continue;\r\n          }\r\n          if (\r\n            (tables[key].required == true || tables[key].required == \"true\") &&\r\n            zData[\"sub_\" + key] &&\r\n            zData[\"sub_\" + key].length == 0\r\n          ) {\r\n            this.$message({ message: \"子表必填一条记录\", type: \"warning\" });\r\n            return;\r\n          }\r\n        }\r\n      }\r\n      utils\r\n        .getOnlineFormData(true)\r\n        .then((formDataStr) => {\r\n          //执行按钮前置脚本\r\n          if(typeof(formDataStr)===\"object\" && (formDataStr.hasOwnProperty('businessKey')||formDataStr.hasOwnProperty('sysCode'))){\r\n            this.data = formDataStr;\r\n          }else{\r\n            this.data = JSON.parse(formDataStr);\r\n          }\r\n          let scriptResult = this.runBeforeScript();\r\n\r\n          if (scriptResult === false) return;\r\n          if (scriptResult.then && typeof scriptResult.then == \"function\") {\r\n            scriptResult.then(\r\n              () => {\r\n                //接口返回成功则正常执行按钮操作\r\n                _this.startNext();\r\n              },\r\n              (fail) => {\r\n                //接口返回失败则终止按钮操作，并给与提示\r\n                _this.$message.warning(fail);\r\n                return;\r\n              }\r\n            );\r\n          } else {\r\n            //执行前置脚本返回true时正常执行按钮操作\r\n            _this.startNext();\r\n          }\r\n        })\r\n        .catch((reason) =>\r\n          utils\r\n            .handleGetFormDataReject(reason, true)\r\n            .then(() => this.processStart())\r\n        );\r\n    },\r\n    //执行前置脚本\r\n    runBeforeScript() {\r\n      let _this = this;\r\n      let item = utils.indexOfList(\r\n        _this.$refs.formContent.buttons,\r\n        \"alias\",\r\n        _this.btnAlias\r\n      );\r\n      return _this.tempScript(item.beforeScript);\r\n    },\r\n    //执行前置脚本\r\n    tempScript(script) {\r\n      let _this = this.$refs.formContent;\r\n      let _req = req;\r\n      let boData = this.$refs.formContent.data;\r\n      let tempScript =\r\n        \"var tempFunction = function(_req,data,_this){ \" + script + \"};\";\r\n      let result = eval(tempScript + \"tempFunction(_req,boData,_this);\");\r\n      if (result && result.then && typeof result.then == \"function\") {\r\n        return result;\r\n      }\r\n      if (result === false) return false;\r\n      return true;\r\n    },\r\n    startNext() {\r\n      utils.getOnlineFormData(false).then((formDataStr) => {\r\n        utils.closeAllNotification();\r\n        if (\r\n          !this.nodeDef.localProperties.jumpType &&\r\n          !this.nodeDef.localProperties.choiceExcutor\r\n        ) {\r\n          this.processStart(formDataStr);\r\n        } else {\r\n          this.$store\r\n            .dispatch(\"storeProcess/getAfterJumpNodes\", {\r\n              taskId: \"\",\r\n              data: Base64.encode(formDataStr),\r\n              defId: this.defId || \"\",\r\n              instId: this.instId || \"\",\r\n            })\r\n            .then((data) => {\r\n              if (\r\n                data.afterNodes.length == 0 ||\r\n                (data.afterNodes.length == 1 &&\r\n                  data.afterNodes[0].excutorList != undefined &&\r\n                  data.afterNodes[0].excutorList.length == 1)\r\n              ) {\r\n                this.processStart(formDataStr);\r\n              } else {\r\n                let formData = {};\r\n                if (formDataStr.constructor == Object) {\r\n                  formData = formDataStr;\r\n                  formData.data = \"\";\r\n                } else if (formDataStr.constructor == String) {\r\n                  formData.data = Base64.encode(formDataStr);\r\n                }\r\n                this.$refs.taskSelectDestination.showDialog(formData, \"\", \"\"); //父组件调用子组件方法\r\n              }\r\n            });\r\n        }\r\n      });\r\n    },\r\n    //流程发起\r\n    processStart(formDataStr) {\r\n      let formKey = this.$refs.formContent.formKey;\r\n      let data = this.handleData(formDataStr);\r\n      if (sessionStorage.getItem(\"formImportTempJson\")) {\r\n        data.updateSubTableJson = sessionStorage.getItem(\"formImportTempJson\");\r\n      }\r\n      this.disabled = true;\r\n      this.$store\r\n        .dispatch(\"storeProcess/start\", data)\r\n        .then((row) => {\r\n          if (row.curBoPkVal) {\r\n            sessionStorage.setItem(\"formImportTempRefId\", row.curBoPkVal);\r\n          }\r\n          sessionStorage.removeItem(\"formImportTempJson\");\r\n          if (row.tasks && row.tasks.length > 0) {\r\n            if (row.tasks.length == 1) {\r\n              this.$router.push(\"/task/\" + row.tasks[0].id + \"/0\");\r\n            } else {\r\n              //弹出窗口让用户自己选择去哪个待办\r\n              this.tableData=row.tasks;\r\n              this.dialogVisible=true;\r\n            }\r\n          } else {\r\n            if (row.inst.status != \"end\") {\r\n              this.$router.push(\"/inst/\" + row.instId + \"/request\");\r\n            } else {\r\n              this.$router.push(\"/instRead/\" + row.instId + \"/myRequest\");\r\n            }\r\n          }\r\n          // this.$store\r\n          //   .dispatch(\"storeProcess/getInstanceByInstId\", row.instId)\r\n          //   .then((insts) => {\r\n\r\n          //     if (insts.status != \"end\") {\r\n          //       this.$router.push(\"/inst/\" + row.instId + \"/request\");\r\n          //     } else {\r\n          //       this.$router.push(\"/instRead/\" + row.instId + \"/myRequest\");\r\n          //     }\r\n          //   });\r\n        })\r\n        .finally(() => {\r\n          this.disabled = false;\r\n        });\r\n    },\r\n    //保存\r\n    saveDraft() {\r\n      this.btnAlias = \"saveDraft\";\r\n      let scriptResult = this.runBeforeScript();\r\n      let formKey = this.$refs.formContent.formKey;\r\n      this.disabled = true;\r\n      const this_ = this;\r\n      utils\r\n        .getOnlineFormData(false)\r\n        .then((formDataStr) => {\r\n          utils.closeAllNotification();\r\n          let data = this_.handleData(formDataStr);\r\n          data.formKey = formKey;\r\n          if (sessionStorage.getItem(\"formImportTempJson\")) {\r\n            data.updateSubTableJson = sessionStorage.getItem(\r\n              \"formImportTempJson\"\r\n            );\r\n          }\r\n\r\n          this_.$store\r\n            .dispatch(\"storeProcess/saveDraft\", data)\r\n            .then((row) => {\r\n              if (row.curBoPkVal) {\r\n                sessionStorage.setItem(\"formImportTempRefId\", row.curBoPkVal);\r\n              }\r\n              sessionStorage.removeItem(\"formImportTempJson\");\r\n              this_.isMyRequest = true;\r\n              this_.localInstId = row.instId;\r\n              this_.$router.replace(\"/start/\" + this_.defId + \"/\" + row.instId);\r\n            })\r\n            .finally(() => {\r\n              //保存完成后,需要重新加载bo数据,不然第二次保存的时候会因为版本号不同而导致保存失败\r\n              this.$refs.formContent.init(true);\r\n            });\r\n        })\r\n        .catch((reason) => {\r\n          this.disabled = false;\r\n          utils.handleGetFormDataReject(reason);\r\n        });\r\n    },\r\n    //返回\r\n    back() {\r\n      utils.closeAllNotification();\r\n      if (this.instId) {\r\n        this.$router.push(\"/v-flow/v-request\");\r\n      } else {\r\n        if (JSON.stringify(this.$route.query) == \"{}\") {\r\n          // this.$router.push(\"/v-flow/v-flowList\");\r\n          this.$router.go(-1);\r\n        } else {\r\n          this.$router.go(-1);\r\n        }\r\n      }\r\n    },\r\n    toMyTodo(){\r\n      this.$router.push(\"/v-flow/v-todo\");\r\n    }\r\n  },\r\n  created() {\r\n    //监听表单数据请求完成\r\n    let _this = this;\r\n    //取发起节点的属性用于判断是否可以选择路径跳转\r\n    window.agentLeaderId = this.leaderId;\r\n    this.$store\r\n      .dispatch(\"storeProcess/getCurNodeProperties\", {\r\n        defId: this.defId || \"\",\r\n        instId: this.instId || \"\",\r\n        taskId: \"\",\r\n      })\r\n      .then((NodeDef) => {\r\n        this.nodeDef = NodeDef;\r\n        if (NodeDef.nodeProperties && NodeDef.nodeProperties.length>0 && NodeDef.nodeProperties[0].initFillData) {\r\n          _this.initFillData = NodeDef.nodeProperties[0].initFillData;\r\n          _this.$refs[\"formContent\"].setInitFillData(_this.initFillData);\r\n        }\r\n      });\r\n    //获取流程信息\r\n    req\r\n      .get(window.context.bpmModel + \"/flow/def/v1/defGet?defId=\" + this.defId)\r\n      .then((res) => {\r\n        this.defName = res.data.name;\r\n      });\r\n  },\r\n};\r\n",null]}