{"remainingRequest":"D:\\jenkins\\workspace\\jd_cgpt_fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\jd_cgpt_fvue\\src\\components\\flow\\taskFlowComponents\\startFlow.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\jd_cgpt_fvue\\src\\components\\flow\\taskFlowComponents\\startFlow.vue","mtime":1719348014190},{"path":"D:\\jenkins\\workspace\\jd_cgpt_fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\jd_cgpt_fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\jd_cgpt_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//\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/taskFlowComponents/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', 'relationData'],\r\n data() {\r\n return {\r\n dialogTableVisible: false,\r\n tableData: [],\r\n dialogVisible: false,\r\n loading: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 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\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 this.checkAuth()\r\n },\r\n methods: {\r\n checkAuth() {\r\n const userId = this.$store.state.login.currentUser.userId,\r\n instId = this.instId,\r\n defId = this.defId,\r\n leadId = this.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 this.$alert('您没有该流程的启动权限', '无权限', {\r\n confirmButtonText: '返回',\r\n callback: (action) => {\r\n this.$emit('closeTaskFlow')\r\n },\r\n })\r\n } else {\r\n this.show = true\r\n }\r\n })\r\n },\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 _this.loading = true\r\n //获取VUE表单实例(判断是否是在线表单)\r\n if (document.getElementsByName('online-form')[0]) {\r\n let tables =\r\n document.getElementsByName('online-form')[0].__vue__\r\n .permission.table //获取子表权限\r\n let boData =\r\n 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 ||\r\n tables[key].required == 'true') &&\r\n zData['sub_' + key] &&\r\n zData['sub_' + key].length == 0\r\n ) {\r\n this.$message({\r\n message: '子表必填一条记录',\r\n type: 'warning',\r\n })\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 (\r\n typeof formDataStr === 'object' &&\r\n (formDataStr.hasOwnProperty('businessKey') ||\r\n formDataStr.hasOwnProperty('sysCode'))\r\n ) {\r\n this.data = formDataStr\r\n } else {\r\n _this.loading = false\r\n this.data = JSON.parse(formDataStr)\r\n }\r\n let scriptResult = this.runBeforeScript()\r\n\r\n if (scriptResult === false) return _this.loading = false\r\n if (\r\n scriptResult.then &&\r\n typeof scriptResult.then == 'function'\r\n ) {\r\n scriptResult.then(\r\n () => {\r\n _this.loading = false\r\n this.loading = false\r\n //接口返回成功则正常执行按钮操作\r\n _this.startNext()\r\n },\r\n (fail) => {\r\n //接口返回失败则终止按钮操作,并给与提示\r\n _this.$message.warning(fail)\r\n _this.loading = false\r\n this.loading = false\r\n return\r\n }\r\n )\r\n } else {\r\n //执行前置脚本返回true时正常执行按钮操作\r\n _this.loading = false\r\n this.loading = false\r\n _this.startNext()\r\n }\r\n })\r\n .catch((reason) =>{\r\n _this.loading = false\r\n utils\r\n .handleGetFormDataReject(reason, true)\r\n .then(() => this.processStart())\r\n }\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 _this.loading = false\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 _this.loading = false\r\n return true\r\n },\r\n startNext() {\r\n utils.getOnlineFormData(false).then((formDataStr) => {\r\n this.loading = false\r\n console.log(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 !=\r\n 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 this.loading = false\r\n }\r\n this.$refs.taskSelectDestination.showDialog(\r\n formData,\r\n '',\r\n ''\r\n ) //父组件调用子组件方法\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 =\r\n 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(\r\n 'formImportTempRefId',\r\n row.curBoPkVal\r\n )\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 // 回到上一页\r\n if (row.inst.status != 'end') {\r\n this.$emit('closeTaskFlow') //关闭流程\r\n // this.$router.go(-1)\r\n // this.$router.push(\r\n // '/inst/' + row.instId + '/request'\r\n // )\r\n\r\n } else {\r\n this.$emit('closeTaskFlow')\r\n // this.$router.go(-1)\r\n // this.$router.push(\r\n // '/instRead/' + row.instId + '/myRequest'\r\n // )\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 this.loading = 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 =\r\n sessionStorage.getItem('formImportTempJson')\r\n }\r\n\r\n this_.$store\r\n .dispatch('storeProcess/saveDraft', data)\r\n .then((row) => {\r\n this.loading = false\r\n if (row.curBoPkVal) {\r\n sessionStorage.setItem(\r\n 'formImportTempRefId',\r\n row.curBoPkVal\r\n )\r\n }\r\n sessionStorage.removeItem('formImportTempJson')\r\n this_.isMyRequest = true\r\n this_.localInstId = row.instId\r\n this_.$router.replace(\r\n '/start/' + this_.defId + '/' + row.instId\r\n )\r\n })\r\n .finally(() => {\r\n //保存完成后,需要重新加载bo数据,不然第二次保存的时候会因为版本号不同而导致保存失败\r\n this_.isMyRequest = false\r\n this.loading = false\r\n this.$refs.formContent.init(true)\r\n })\r\n })\r\n .catch((reason) => {\r\n this.loading = false\r\n this.disabled = false\r\n this_.isMyRequest = 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.$emit('closeTaskFlow')\r\n } else {\r\n this.$emit('closeTaskFlow')\r\n }\r\n }\r\n },\r\n toMyTodo() {\r\n this.$router.push('/v-flow/v-todo')\r\n },\r\n isMaskShow(data) {\r\n this.dialogTableVisible = data.isMaskShow\r\n if (data.isMaskShow) {\r\n //当子页面弹框开时\r\n //父页面外部滚动条隐藏\r\n // document.getElementsByClassName('indexCon')[0].style.overflow =\r\n // 'hidden'\r\n //将子页面iframe页面层级提升\r\n document.getElementById('parentDiv').style.position = 'relative'\r\n document.getElementById('parentDiv').style.zIndex = 20000000\r\n document.getElementById('frmFrame').style.position = 'absolute'\r\n document.getElementById('frmFrame').style.zIndex = 20000000\r\n } else {\r\n //当子页面弹框关时\r\n //恢复\r\n // document.getElementsByClassName('indexCon')[0].style.overflow =\r\n // 'auto'\r\n document.getElementById('parentDiv').style.position = 'unset'\r\n document.getElementById('frmFrame').style.position = 'unset'\r\n document.getElementById('frmFrame').style.zIndex = 'unset'\r\n }\r\n },\r\n },\r\n created() {\r\n console.log(this.defId, 'defId流程id')\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 (\r\n NodeDef.nodeProperties &&\r\n NodeDef.nodeProperties.length > 0 &&\r\n NodeDef.nodeProperties[0].initFillData\r\n ) {\r\n _this.initFillData = NodeDef.nodeProperties[0].initFillData\r\n _this.$refs['formContent'].setInitFillData(\r\n _this.initFillData\r\n )\r\n }\r\n })\r\n //获取流程信息\r\n req.get(\r\n 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 //监听主页面postmessage\r\n window.addEventListener(\r\n 'message',\r\n (event) => {\r\n const {data} = event\r\n this[data.handlerType] && this[data.handlerType](data.params)\r\n },\r\n false\r\n )\r\n },\r\n}\r\n",null]}