ddy-process-pc-vue2 1.0.1-beta.23 → 1.0.1-beta.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ddy-process-pc-vue2",
3
- "version": "1.0.1-beta.23",
3
+ "version": "1.0.1-beta.25",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bundleDependencies": false,
package/vue2/index.esm.js CHANGED
@@ -69,6 +69,29 @@ var api$1 = {
69
69
  type: "post"
70
70
  };
71
71
  return ajax(ajaxObj);
72
+ },
73
+ // 撤销
74
+ chexiao(taskId) {
75
+ let ajaxObj = {
76
+ url: proxyStrV2 + "/tis/withdrawTask",
77
+ param: {
78
+ withdrawType: 'wf_withdraw_end',
79
+ taskId: taskId
80
+ },
81
+ type: "post"
82
+ };
83
+ return ajax(ajaxObj);
84
+ },
85
+ // 催办
86
+ cuiban(processInsId) {
87
+ let ajaxObj = {
88
+ url: proxyStrV2 + "/tis/reminders",
89
+ param: {
90
+ processInsId
91
+ },
92
+ type: "get"
93
+ };
94
+ return ajax(ajaxObj);
72
95
  }
73
96
  },
74
97
  /**
@@ -397,10 +420,13 @@ var api$1 = {
397
420
  /**
398
421
  * 撤销,撤回:/blade-workflow/tis/withdrawTask
399
422
  */
400
- withdrawTask(param) {
423
+ withdrawTask(taskId) {
401
424
  let ajaxObj = {
402
425
  url: proxyStrV2 + "/tis/withdrawTask",
403
- param,
426
+ param: {
427
+ withdrawType: 'wf_withdraw_end',
428
+ taskId: taskId
429
+ },
404
430
  type: "post"
405
431
  };
406
432
  return ajax(ajaxObj);
@@ -8265,10 +8291,7 @@ var script$5 = {
8265
8291
  })
8266
8292
  .then(() => {
8267
8293
  api$1.tis
8268
- .withdrawTask({
8269
- taskId: this.absoluteTaskId,
8270
- withdrawType: 'wf_withdraw_end',
8271
- })
8294
+ .withdrawTask(this.absoluteTaskId)
8272
8295
  .then((res) => {
8273
8296
  if (res.code == apiCode.success) {
8274
8297
  Message.success("操作成功");
@@ -8291,8 +8314,7 @@ var script$5 = {
8291
8314
  type: "warning",
8292
8315
  })
8293
8316
  .then(() => {
8294
- console.log(this.ProcessInsObj);
8295
- api$1.tis.reminders(this.processData.processInstanceId).then((res) => {
8317
+ api$1.tis.reminders(this.processData.process.processInstanceId).then((res) => {
8296
8318
  if (res.code == apiCode.success) {
8297
8319
  Message.success("操作成功");
8298
8320
  this.$emit("Complete");
@@ -9087,11 +9109,11 @@ __vue_render__$5._withStripped = true;
9087
9109
  /* style */
9088
9110
  const __vue_inject_styles__$5 = function (inject) {
9089
9111
  if (!inject) return
9090
- inject("data-v-521a403c_0", { source: "@charset \"UTF-8\";\n.operation-box[data-v-521a403c] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-521a403c] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-521a403c] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-521a403c] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-521a403c]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-521a403c] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-521a403c] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-521a403c] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-521a403c] {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs[data-v-521a403c] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-521a403c] {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n.mianContent .topCard[data-v-521a403c] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-521a403c] {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n.mianContent .topCard .topRow div[data-v-521a403c]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-521a403c]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-521a403c] {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n.mianContent .tabs[data-v-521a403c] {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n.mianContent .tabs[data-v-521a403c] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-521a403c] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-521a403c] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-521a403c] {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button[data-v-521a403c] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-521a403c] {\n width: 90%;\n}\n.dialog[data-v-521a403c] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-521a403c] .el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n.dialog[data-v-521a403c] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-521a403c] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-521a403c] :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n.dialog .el-dialog__body[data-v-521a403c] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-521a403c] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-521a403c] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-521a403c] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-521a403c] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-521a403c] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-521a403c] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-521a403c] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-521a403c] {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["index.vue","C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\index.vue"],"names":[],"mappings":"AAAA,gBAAgB;ACm4ChB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;ADj4CA;ACm4CA;EACA,gBAAA;EACA,gCAAA;ADh4CA;ACi4CA;EACA,sBAAA;AD/3CA;ACk4CA;EACA,yBAAA;ADh4CA;ACm4CA;EACA,uBAAA;ADj4CA;ACo4CA;EACA,oBAAA;ADj4CA;ACs4CA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;ADn4CA;ACy4CA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;ADt4CA;ACw4CA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;ADx4CA;AC04CA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;ADz4CA;AC04CA;EACA,OAAA;EACA,SAAA;ADx4CA;ACy4CA;EACA,QAAA;ADv4CA;AC04CA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;ADx4CA;AC04CA;EACA,SAAA;EACA,OAAA;ADx4CA;AC+4CA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;AD74CA;ACg5CA;EACA,gBAAA;EACA,kCAAA;AD74CA;ACg5CA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;AD74CA;ACg5CA;EACA,cAAA;AD74CA;ACg5CA;EACA,cAAA;EACA,kBAAA;AD74CA;ACg5CA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;AD74CA;ACg5CA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;AD74CA;ACg5CA;EACA,eAAA;AD74CA;ACq5CA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;ADl5CA;ACy5CA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;ADt5CA;ACy5CA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EAEA,eAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;EACA,gBAAA;EACA,sBAAA;EACA,aAAA;ADv5CA;ACw5CA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;ADt5CA;AC05CA;EACA,UAAA;ADv5CA;AC05CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;ADv5CA;AC05CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;ADv5CA;AC05CA;EACA,aAAA;EACA,kBAAA;ADv5CA;AC05CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ADv5CA;AC25CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;ADx5CA;AC45CA;EACA,kBAAA;ADz5CA;AC25CA;EACA,wBAAA;EACA,kBAAA;ADz5CA;AC25CA;EACA,SAAA;EACA,WAAA;ADz5CA;AC45CA;EACA,cAAA;EACA,eAAA;ADz5CA;AC25CA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ADx5CA;AC05CA;EACA,eAAA;EACA,wBAAA;ADv5CA;AC05CA;EACA,cAAA;ADv5CA;ACy5CA;EACA,gBAAA;ADv5CA;AC05CA;EACA,WAAA;EACA,YAAA;ADv5CA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["@charset \"UTF-8\";\n.operation-box {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n\n.el-dropdown-menu__item {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item:last-child {\n border: none !important;\n}\n\n.el-dropdown-menu {\n padding-bottom: 30px;\n}\n\n.mianContent > .tabs > .demo-tabs > ::v-deep .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n\n.top-tabs {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n\n.mianContent {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n\n.mianContent .rowtitle {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n\n.mianContent .topCard {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n\n.mianContent .topCard .topRow {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n\n.mianContent .topCard .topRow div:first-child {\n color: #333333;\n}\n\n.mianContent .topCard .topRow div:last-child {\n color: #777777;\n padding-left: 10px;\n}\n\n.mianContent .topCard .topRow div.process-mliv-dd {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n\n.mianContent .tabs {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n\n.mianContent .tabs :deep(.is-active) {\n font-size: 16px;\n}\n\n.mianContent .tabs :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n\n.mianContent .topBtnRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n.mianContent .footBtnRow {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n\n.formInput {\n width: 90%;\n}\n\n.dialog :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n\n.dialog ::v-deep.el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n\n.dialog :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n\n.dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n\n.dialog .el-dialog__body {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n.view-file {\n color: #1389ff;\n cursor: pointer;\n}\n\n.view-node-info {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n\n.iconsR {\n cursor: pointer;\n transform: rotate(90deg);\n}\n\n::v-deep .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n::v-deep .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n\n.sign-img {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */","<template>\r\n <div\r\n class=\"mianContent\"\r\n v-loading=\"boxLoading && !isButton\"\r\n ref=\"mianContent\"\r\n :style=\"{\r\n // height:\r\n // activeName == '流程图'\r\n // ? '100%'\r\n // : $refs['footBtnRow']\r\n // ? `calc(100% - 50px)`\r\n // : ' 100%',\r\n // overflow: activeName == '流程图' ? 'hidden !important' : 'auto',\r\n }\"\r\n >\r\n <template v-if=\"!isButton\">\r\n <div class=\"tabs\" ref=\"baseTabs\">\r\n <el-tabs\r\n v-model=\"activeName\"\r\n class=\"demo-tabs\"\r\n @tab-click=\"handleClick\"\r\n >\r\n <el-tab-pane\r\n :label=\"item.name\"\r\n :name=\"item.slot || item.name\"\r\n v-for=\"(item, index) in tabs\"\r\n :key=\"index\"\r\n :item=\"item\"\r\n :class=\"['pane-' + item.name]\"\r\n >\r\n <template v-if=\"item.name == '基本信息' && !item.slot\">\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '流程图' && !item.slot\">\r\n <div class=\"view-node-info\" @click=\"getNodeList\">\r\n 查看流程节点信息\r\n </div>\r\n <iframe\r\n v-if=\"trackUrl\"\r\n :src=\"trackUrl\"\r\n style=\"width: 100%; height: 100%; border: none\"\r\n :style=\"{ height: `${iframeHeight}px` }\"\r\n scrolling=\"no\"\r\n frameborder=\"0\"\r\n :key=\"processId\"\r\n ></iframe>\r\n <!-- 展示条件需要同时满足v-if -->\r\n <bpmnLook v-if=\"activeName == '流程图' && processData.process && processData.process.xml\" :approvalData=\"processData.flow\" :diagram=\"processData.process.xml\"></bpmnLook>\r\n <div\r\n v-else\r\n style=\"\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无流程图\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '审批记录' && !item.slot\">\r\n <processFlow v-if=\"activeName == '审批记录' && processData.flow\" :flow-list=\"processData.flow\"></processFlow>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot\r\n v-if=\"item.slot\"\r\n :name=\"item.slot\"\r\n :taskNode=\"getTaskNode()\"\r\n ></slot>\r\n <slot v-else name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n <!-- <el-tab-pane label=\"流程图\" name=\"2\" style=\"height: 100%\">\r\n </el-tab-pane> -->\r\n <!-- <el-tab-pane label=\"审批记录\" name=\"3\">\r\n <el-table\r\n :data=\"taskCommentList\"\r\n border\r\n style=\"width: 100%; margin-bottom: 20px\"\r\n v-if=\"taskCommentList && taskCommentList.length > 0\"\r\n >\r\n <el-table-column type=\"index\" width=\"80\" label=\"序号\" />\r\n <el-table-column\r\n prop=\"activityName\"\r\n label=\"节点名称\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"createUserName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"actionName\"\r\n label=\"审批操作\"\r\n ></el-table-column>\r\n <el-table-column prop=\"msg\" label=\"审批意见\">\r\n <template #default=\"scope\">\r\n <div v-html=\"scope.row.msg\"></div>\r\n <el-popover\r\n placement=\"bottom-end\"\r\n :width=\"500\"\r\n trigger=\"click\"\r\n v-if=\"scope.row.metaAnnexList.length > 0\"\r\n >\r\n <template #reference>\r\n <div class=\"view-file\">查看附件</div>\r\n </template>\r\n <ViewFile\r\n v-if=\"scope.row.metaAnnexList\"\r\n :dataList=\"scope.row.metaAnnexList\"\r\n />\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column\r\n prop=\"createDate\"\r\n label=\"审批时间\"\r\n ></el-table-column>\r\n </el-table>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </el-tab-pane> -->\r\n </el-tabs>\r\n </div>\r\n </template>\r\n <!-- 底部按钮 -->\r\n <processBtns\r\n :loading=\"submitLoading\"\r\n :button-list=\"processData.button\"\r\n :process=\"processData.process\"\r\n :comment=\"comment\"\r\n @draft=\"handleDraft({ taskId: process.taskId, variables: form })\"\r\n @examine=\"handleExamine\"\r\n @user-select=\"handleUserSelect\"\r\n @print=\"handlePrint\"\r\n @rollback=\"handleRollbackTask\"\r\n @terminate=\"handleTerminateProcess\"\r\n @withdraw=\"handleWithdrawTask\"\r\n @reminders=\"handleReminders\"\r\n ></processBtns>\r\n <div class=\"dialog\">\r\n <el-dialog\r\n :visible.sync=\"dialogVisibleOperation\"\r\n append-to-body\r\n class=\"dialog\"\r\n width=\"600px\"\r\n v-dialogDrag\r\n :title=\"operationLabel\"\r\n :close-on-click-modal=\"false\"\r\n :show-close=\"!isOperLoading\"\r\n top=\"6vh\" :style=\"dynamicStyle\"\r\n >\r\n <div class=\"operation-box\" ref=\"obRef\">\r\n <component\r\n v-if=\"dialogVisibleOperation\"\r\n ref=\"operationRef\"\r\n :is=\"operationCom\"\r\n :param=\"operationParam\"\r\n @success=\"operationSuccess\"\r\n @fail=\"operationFail\"\r\n :isOperLoading=\"isOperLoading\"\r\n >\r\n <template #form>\r\n <slot :name=\"aftClickBtn.slot\" v-if=\"aftClickBtn.slot\"></slot>\r\n </template>\r\n <template #file>\r\n <el-form\r\n label-width=\"120px\"\r\n status-icon\r\n v-if=\"attachShow\"\r\n @submit.native.prevent\r\n :rules=\"rules\"\r\n >\r\n <el-form-item\r\n label=\"附件\"\r\n :prop=\"attachRule.required ? 'attach' : ''\"\r\n >\r\n <jyr-file-upload\r\n v-model=\"attach\"\r\n :multiple=\"attachRule.limit > 0\"\r\n :limit=\"attachRule.limit\"\r\n fullFileObject\r\n showFileName\r\n ref=\"fileUpload\"\r\n />\r\n </el-form-item>\r\n </el-form>\r\n </template>\r\n </component>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button\r\n v-loading\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n :loading=\"isOperLoading\"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click=\"dialogVisibleOperation = false\"\r\n :loading=\"isOperLoading\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n <!-- 选择任务 -->\r\n <el-dialog\r\n title=\"选择处理任务\"\r\n :visible.sync=\"showMulTask\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n width=\"500px\"\r\n :show-close=\"false\"\r\n >\r\n <el-form ref=\"form\" label-width=\"100px\" class=\"task\">\r\n <el-form-item label=\"请选择:\" prop=\"content\">\r\n <el-radio-group v-model=\"mulTaskTaskId\" size=\"small\">\r\n <el-radio\r\n v-for=\"item in mulTaskList\"\r\n :key=\"item.nodeId\"\r\n :label=\"item.taskId\"\r\n border\r\n >{{ item.nodeName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"onCheckSure\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"nodeInfoVisible\"\r\n append-to-body\r\n width=\"600px\"\r\n title=\"流程节点信息\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n v-dialogDrag\r\n >\r\n <el-table :data=\"filterFlow(processData.flow)\" border>\r\n <el-table-column\r\n label=\"序号\"\r\n type=\"index\"\r\n width=\"120px\"\r\n ></el-table-column>\r\n <el-table-column prop=\"historyActivityName\" label=\"节点名称\"></el-table-column>\r\n <!-- <el-table-column prop=\"type\" label=\"类型\"></el-table-column> -->\r\n <el-table-column\r\n prop=\"assigneeName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n </el-table>\r\n </el-dialog>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Message as ElMessage, MessageBox as ElMessageBox } from \"element-ui\";\r\nimport treeselect from \"@riophae/vue-treeselect\";\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\";\r\nimport api from \"./api\";\r\nimport * as $enum from \"./enum\";\r\nimport staffTree from \"./staff-tree.vue\";\r\nimport ViewFile from \"./view-file.vue\";\r\nimport * as operation from \"./operation/index.js\";\r\nimport JyrFileUpload from \"../JyrFileUpload/index\";\r\nimport processBtns from \"./operation/processBtns.vue\";\r\nimport processFlow from \"./operation/processFlow.vue\";\r\nimport bpmnLook from './bpmnLook.vue';\r\nimport dayjs from \"dayjs\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { bpmnLook, processBtns, processFlow, treeselect, staffTree, ...operation, ViewFile, JyrFileUpload },\r\n props: {\r\n /** 流程实例id */\r\n taskId: {\r\n // require: true,\r\n default: false,\r\n type: String,\r\n },\r\n processId: {\r\n require: true,\r\n default: false,\r\n type: String,\r\n },\r\n // processDefId: {\r\n // require: false,\r\n // default: false,\r\n // type: String,\r\n // },\r\n userId: { require: true, default: \"\", type: String },\r\n // task: {\r\n // default: false,\r\n // type: Object,\r\n // },\r\n showBtns: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n isView: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n getVars: { type: Function },\r\n before: { type: Function },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isAdditional: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n businessData: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n excludeBtn: {\r\n type: String,\r\n default: \"\",\r\n },\r\n showAsPlanned: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showCommIdea: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n commentMsgRequired: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n customBtn: {\r\n default: \"\",\r\n },\r\n tabs: {\r\n default: () => [\r\n {\r\n name: \"基本信息\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"流程图\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"审批记录\",\r\n slot: \"\",\r\n },\r\n ],\r\n },\r\n personType: {\r\n default: \"\",\r\n },\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n isButton: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n provide() {\r\n return {\r\n isAlisInject: this.isAlis,\r\n };\r\n },\r\n // emits: ['update:modelValue', \"getData\", \"change\", \"changeGetData\"],\r\n data() {\r\n return {\r\n // 流程信息\r\n deptId: '',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n processData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n submitLoading: false,\r\n flowChartVisible: false,\r\n comment: null,\r\n // 流程信息\r\n dynamicMaxHeight: '400px',\r\n showMulTask: false,\r\n mulTaskList: [],\r\n mulTaskTaskId: \"\",\r\n attach: [],\r\n customBtns: [],\r\n overheight: 10,\r\n iframeHeight: 500,\r\n mainWidth: 0,\r\n absoluteTaskId: \"\",\r\n infoView: false,\r\n showTopTabs: false,\r\n buttonLoading: false,\r\n footBtnLoading: true,\r\n tabheight: 400,\r\n aftClickBtn: \"\",\r\n attachRule: {\r\n required: true,\r\n limit: 0,\r\n },\r\n nodeInfoVisible: false,\r\n nodeInfoList: [],\r\n jjForm: {\r\n saveMetaAnnexCmdList: [],\r\n },\r\n targetUID: \"\",\r\n commentMsg: \"\",\r\n trackUrl: \"\",\r\n taskObj: {},\r\n taskCommentList: [],\r\n absoluteBtns: { inside: [], outside: [] },\r\n processStatus: \"\",\r\n nextTaskNode: [],\r\n activeName: \"基本信息\",\r\n ProcessInsObj: {},\r\n outGatewayUserTaskModel: [],\r\n dialogVisibleOperation: false,\r\n operationLabel: \"\",\r\n operationCom: {},\r\n operationParam: {},\r\n taskNode: [],\r\n aftTaskNode: {},\r\n operation,\r\n Enum: $enum,\r\n isOperLoading: false,\r\n boxLoading: false,\r\n rules: {\r\n attach: [{ required: true, trigger: \"change\" }],\r\n },\r\n\t noReload: false,\r\n digitalSignatureList: []\r\n };\r\n },\r\n mounted() {\r\n window.onresize = () => {\r\n return (() => {\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n })();\r\n };\r\n },\r\n watch: {\r\n activeName: function (n) {\r\n if (n == 1) this.activeName = \"基本信息\";\r\n },\r\n infoView: function () {\r\n this.calculateHeight();\r\n },\r\n taskId: {\r\n handler(val) {\r\n if (!val) return;\r\n this.absoluteTaskId = val;\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n processId: {\r\n handler(val) {\r\n if (val) {\r\n this.customBtns = [];\r\n this.absoluteBtns = { inside: [], outside: [] };\r\n this.activeName = this.tabs.length > 0 ? this.tabs[0][\"name\"] : \"\";\r\n // 获取流程节点,流程图,流程实例,流程审批\r\n this.getProcessInfo()\r\n if (Date.now()) return;\r\n\r\n api.repository.queryTaskNodeList(this.processId).then((e) => {\r\n\t\t\t if(!this.noReload){\r\n\t\t\t\t this.noReload = false\r\n\t\t\t\t if (!this.absoluteTaskId && e.data.length > 1) {\r\n\t\t\t\t this.mulTaskList = e.data;\r\n\t\t\t\t this.showMulTask = true;\r\n\t\t\t\t return;\r\n\t\t\t\t } else {\r\n\t\t\t\t this.absoluteTaskId =\r\n\t\t\t\t e.data && e.data.length > 0 ? e.data[0][\"taskId\"] : \"\";\r\n\t\t\t\t this.aftTaskNode = e.data[0];\r\n\t\t\t\t }\r\n\t\t\t }\r\n\r\n console.log(\"======\", this.absoluteTaskId);\r\n if (e.code == $enum.apiCode.success) {\r\n this.taskNode = e.data;\r\n api.pis\r\n .getProcessStatus(this.processId, this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.processStatus = res.data;\r\n if (this.absoluteTaskId) {\r\n api.repository\r\n .getUserTaskModelCmd(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.taskObj = res.data;\r\n this.straightenBtns();\r\n }\r\n });\r\n } else {\r\n this.straightenBtns();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n api.repository\r\n .getTrackUrl({ processInstId: val, type: $enum.SourceType.电脑端 })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n }\r\n });\r\n api.tis.getTaskCommentList(this.processId, \"\").then((res) => {\r\n this.taskCommentList = res.data;\r\n this.digitalSignatureList = res.data.filter(item => item.digitalSignature).map(item => item.digitalSignature)\r\n });\r\n api.pis.getProcessInstanceById(this.processId).then((res) => {\r\n this.ProcessInsObj = res.data;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n });\r\n\r\n // api.repository.queryTaskNodeList(this.processId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) this.taskNode = res.data;\r\n // });\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n absoluteTaskId: {\r\n handler(val) {\r\n if (val) {\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n dialogVisibleOperation: {\r\n handler(val) {\r\n this.$emit(\"show-modal\", val);\r\n },\r\n },\r\n },\r\n methods: {\r\n // 流程\r\n filterFlow(flowArr) {\r\n return flowArr.filter((item) => {\r\n return ['userTask', 'candidate'].includes(item.historyActivityType)\r\n });\r\n },\r\n getProcessInfo() {\r\n this.submitLoading = true\r\n this.boxLoading = true;\r\n\r\n api.tis.getTaskModelDetail(this.taskId ? {\r\n processInsId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInsId: this.processId,\r\n }).then(async res => {\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n console.log(this.processData.flow, 'flw')\r\n this.flowChartVisible = true\r\n this.submitLoading = false\r\n this.boxLoading = false\r\n }\r\n })\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n handleDraft() {\r\n this.submitLoading = true;\r\n },\r\n // 提交(办理)true、取消申请 false\r\n handleExamine(flag, name) {\r\n console.log(flag, 'flag')\r\n if (flag) {\r\n this.handlePass(name)\r\n } else {\r\n this.handleCancel(name)\r\n }\r\n this.submitLoading = true;\r\n },\r\n // 办理\r\n async handlePass(name) {\r\n if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n }\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, name);\r\n }\r\n },\r\n // 取消申请\r\n handleCancel(name) {\r\n this.showOperation(operation.cancel, name);\r\n },\r\n // 转办transfer,委托delegate,addInstance\r\n handleUserSelect({ type, checkType, name}) {\r\n if (type == 'transfer') {\r\n this.handleTransfer(name)\r\n }\r\n else if (type == 'addInstance') {\r\n this.handleAddInstance(name)\r\n }\r\n console.log('handleUserselect')\r\n },\r\n // 转办\r\n handleTransfer(name) {\r\n this.showOperation(operation.delegateTask, name);\r\n },\r\n // 加签\r\n handleAddInstance(name) {\r\n this.showOperation(operation.counterSign, name);\r\n },\r\n handlePrint() {\r\n console.log('handlePrint')\r\n },\r\n handleRollbackTask(name) {\r\n console.log('handleRollbackTask')\r\n this.showOperation(operation.roolback, name);\r\n },\r\n handleTerminateProcess() {\r\n console.log('handleTerminateProcess')\r\n },\r\n // 撤销,撤回\r\n handleWithdrawTask(name) {\r\n console.log('handleWithdrawTask')\r\n this.handleRevoke();\r\n // this.showOperation(operation.withdrawTask, '请选择撤销/撤回操作');\r\n },\r\n // 流程\r\n findTargetHtml(startNode, targetClass, searchKey = 'parentElement') {\r\n\t\t\t\tif (!startNode) return null\r\n \t\t\tif (startNode.classList.contains(targetClass)) {\r\n \t\t\treturn startNode\r\n \t\t\t}\r\n \t\t\tlet curEl = startNode[searchKey]\r\n \t\t\tif (!curEl) return null\r\n \t\t\tif (searchKey == 'children') {\r\n \t\t\tfor (let i = 0; i <= curEl.length - 1; i++) {\r\n \t\t\tif (curEl[i].classList.contains(targetClass)) {\r\n \t\t\treturn curEl[i]\r\n \t\t\t}\r\n \t\t\t}\r\n \t\t\treturn\r\n \t\t\t}\r\n \t\t\treturn this.findTargetHtml(curEl, targetClass)\r\n\t\t\t},\r\n findImageIndex(item){\r\n return item ? this.digitalSignatureList.findIndex(i => i == item) : -1\r\n },\r\n onCheckSure() {\r\n this.absoluteTaskId = this.mulTaskTaskId;\r\n this.mulTaskList.map((item) => {\r\n if (item.taskId == this.mulTaskTaskId) {\r\n this.aftTaskNode = item;\r\n }\r\n });\r\n\t this.noReload = true\r\n this.showMulTask = false;\r\n this.footBtnLoading = true;\r\n let temp = this.processId;\r\n this.processId = \"\";\r\n this.processId = temp;\r\n },\r\n showButtonLoading() {\r\n this.buttonLoading = true;\r\n },\r\n hideButtonLoading() {\r\n this.buttonLoading = false;\r\n },\r\n calculateHeight() {\r\n let h = 0;\r\n if (this.$refs[\"footBtnRow\"]) {\r\n h += this.$refs[\"footBtnRow\"].offsetHeight;\r\n }\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n if (this.infoView && this.absoluteBtns.outside.length > 0) {\r\n h += 32;\r\n }\r\n if (this.$refs[\"infoBoxFign\"]) {\r\n let windowHeight =\r\n window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n this.tabheight =\r\n windowHeight - this.$refs[\"infoBoxFign\"].offsetTop - 192;\r\n }\r\n this.overheight = h + 116;\r\n this.iframeHeight = this.$refs[\"mianContent\"].offsetHeight - 146;\r\n },\r\n getNodeList() {\r\n this.nodeInfoVisible = true;\r\n // api.pis.findNodeParticipantRows(this.processId).then((e) => {\r\n \r\n // e.data.map((item) => {\r\n // if (item.type == \"串签\" || item.type == \"并签\") {\r\n // item[\"name\"] += `【${item.type}】`;\r\n // }\r\n // });\r\n // this.nodeInfoList = e.data;\r\n // });\r\n },\r\n fileNameLastof(e, len = 0) {\r\n if (e.indexOf(\"http\") == -1) len = 0;\r\n if (!e) return;\r\n let last = \"/\";\r\n if (e.indexOf(\"\\\\\") != -1) {\r\n last = \"\\\\\";\r\n }\r\n //整理文件名\r\n let filename = e;\r\n let lastindex = filename.lastIndexOf(last);\r\n return filename.substr(lastindex + 1 + len, filename.length);\r\n },\r\n clickCustomButton(name) {\r\n this.$emit(\"clickCustomButton\", {\r\n name,\r\n processStatus: this.processStatus,\r\n setName: (label) => {\r\n this.taskObj.buttons.map((item) => {\r\n if (item.label == name) {\r\n item.label = label;\r\n }\r\n });\r\n this.straightenBtns();\r\n },\r\n });\r\n },\r\n // 获取下一个节点数据\r\n async getNextNode(deptId) {\r\n let res1\r\n try {\r\n res1 = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n );\r\n } catch (e) {\r\n console.error(e)\r\n res1 = {}\r\n }\r\n const nextTaskNode = res1.data || {};\r\n console.log(nextTaskNode, 'next')\r\n if (nextTaskNode.id && !nextTaskNode.setPersonnel) {\r\n const nodeUserParams = getNodeUserParams(nextTaskNode)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n // 需要传入部门id\r\n deptId: deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextTaskNode.userList = res.data\r\n }\r\n }\r\n this.nextTaskNode = nextTaskNode\r\n console.log(nextTaskNode, 'getNextNode')\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n async showOperation(com, label) {\r\n this.attach = [];\r\n if (false && this.processStatus.allUserNames.length > 0) {\r\n if (this.absoluteTaskId) {\r\n let vars;\r\n if (this.getVars) {\r\n vars = this.getVars();\r\n if (vars === false) {\r\n return false;\r\n }\r\n }\r\n let res = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n vars\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n for (var i in res.data) {\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"固定账户\" ||\r\n res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(this.absoluteTaskId, [\r\n res.data[i].id,\r\n ])\r\n .then((e) => {\r\n res.data[i].userTaskModelDTO.routeTxt[\"userNames\"] =\r\n e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n this.nextTaskNode = res.data;\r\n } else {\r\n this.nextTaskNode = [];\r\n this.outGatewayUserTaskModel = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n \"\"\r\n );\r\n }\r\n }\r\n }\r\n this.operationLabel = label;\r\n // this.operationParam = new operation.PorpParam(\"\", this.processId, this.processDefId, this.task.id, this.task.activityDefId);\r\n this.operationParam.processInstId = this.processId;\r\n // this.operationParam.processDefId = this.processDefId;\r\n this.operationParam.taskInstId = this.absoluteTaskId;\r\n // this.operationParam.taskDeftId = this.task.activityDefId;\r\n this.operationParam.nextTaskNode = this.nextTaskNode;\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.taskObj = this.taskObj;\r\n this.operationParam.getVars = this.getVars;\r\n this.operationParam.outGatewayUserTaskModel =\r\n this.outGatewayUserTaskModel;\r\n this.operationParam.taskNode = this.getTaskNode();\r\n this.operationParam.businessData = this.businessData;\r\n this.operationParam.showAsPlanned = this.showAsPlanned;\r\n this.operationParam.showCommIdea = this.showCommIdea;\r\n this.operationParam.commentMsgRequired = this.commentMsgRequired;\r\n this.operationParam.personType = this.personType;\r\n this.operationParam.personEntity = {\r\n ...this.personEntity,\r\n ...(this.aftClickBtn.personEntity || {}),\r\n };\r\n this.operationParam.ProcessInsObj = this.ProcessInsObj;\r\n this.operationCom = com;\r\n this.dialogVisibleOperation = true;\r\n this.$nextTick(() => {\r\n \t\tlet ctnEl = this.$refs.obRef\r\n\t\t\t\tconsole.log(ctnEl, this.$refs);\r\n \t\tif (!ctnEl) return \r\n \t\tlet topDistance = ctnEl.getBoundingClientRect().top\r\n \t\tlet dialogEl = this.findTargetHtml(ctnEl, 'el-dialog')\r\n \t\tlet dialogFootEl = this.findTargetHtml(dialogEl, 'el-dialog__footer', 'children')\r\n \t\t// 视口高度 - margin - head - footer\r\n \t\tlet val = window.innerHeight - topDistance - topDistance - dialogFootEl.clientHeight - 32\r\n \t\tthis.dynamicMaxHeight = `${val}px`\r\n \t\t})\r\n },\r\n onClickOperation() {\r\n if (\r\n this.attachShow &&\r\n this.attachRule.required &&\r\n this.attach.length == 0\r\n ) {\r\n return ElMessage.error(\"请上传附件\");\r\n }\r\n if (this.aftClickBtn.preposition) {\r\n this.operationMain(this.aftClickBtn.preposition);\r\n } else {\r\n this.operationMain();\r\n }\r\n\r\n // if (this.$refs[\"fileUpload\"] && this.$refs[\"fileUpload\"].getLoading()) {\r\n // return ElMessage.error(\"请等待附件上传完成后重试\");\r\n // }\r\n },\r\n operationMain(preposition = false) {\r\n if (this.attachShow) {\r\n let saveMetaAnnexCmdList = [];\r\n this.attach.map((item) => {\r\n saveMetaAnnexCmdList.push({\r\n id: item.id,\r\n name: this.fileNameLastof(item.name),\r\n size: item.fileSize,\r\n format: item.fileType,\r\n url: item.url,\r\n uploadTime: item.createTime,\r\n processInstId: this.operationParam.processInstId,\r\n taskInstId: this.operationParam.taskInstId,\r\n });\r\n });\r\n saveMetaAnnexCmdList = saveMetaAnnexCmdList.sort((a, b) => {\r\n return dayjs(a.uploadTime).valueOf() > dayjs(b.uploadTime).valueOf();\r\n });\r\n api.tis.patchSave({\r\n saveMetaAnnexCmdList,\r\n });\r\n }\r\n\r\n if (this.$refs.operationRef) {\r\n this.$refs.operationRef.confirm(preposition, () => {\r\n this.isOperLoading = true;\r\n });\r\n }\r\n },\r\n operationSuccess(isComplete = true) {\r\n ElMessage.success(\"操作成功\");\r\n this.dialogVisibleOperation = false;\r\n // router.go(0);\r\n if (isComplete) this.$emit(\"Complete\");\r\n this.isOperLoading = false;\r\n },\r\n operationFail(msg = \"\") {\r\n msg && ElMessage.warning(msg);\r\n this.isOperLoading = false;\r\n },\r\n async getOutgoingProcessNode(taskId, processNodeId) {\r\n let res = await api.repository.getOutgoingProcessNode(\r\n taskId,\r\n processNodeId\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n if (res.data) {\r\n for (let i = 0; i < res.data.length; i++) {\r\n let o = res.data[i];\r\n if (o.type != $enum.ProcessNodeType.用户任务) {\r\n o.childNode = await this.getOutgoingProcessNode(taskId, o.id);\r\n if (o.incomingConditionItemList.length !== 0) {\r\n // o.childNode.push(o);\r\n }\r\n }\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].humanPerformerName == \"固定账户\" ||\r\n res.data[i].humanPerformerName == \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(taskId, [res.data[i].id])\r\n .then((e) => {\r\n res.data[i][\"routeTxt\"][\"userNames\"] = e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n if (res.data.length == 0) {\r\n res.data.push({\r\n id: \"\",\r\n incomingConditionItemList: [],\r\n type: \"endEvent\",\r\n name: \"结束事件\",\r\n });\r\n }\r\n }\r\n return res.data;\r\n }\r\n return [];\r\n },\r\n getColor(status) {\r\n if (status == \"审核中\" || status == \"审批中\") return \"#6DC743\";\r\n if (status == \"已驳回\") return \"#F14B4C\";\r\n if (status == \"已撤销\") return \"#CECECE\";\r\n if (status == \"已完成\") return \"#6DC743\";\r\n\r\n return \"#1389FF\";\r\n },\r\n handleClick(e) {\r\n this.$emit(\"clickTab\",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)));\r\n },\r\n getTaskNode() {\r\n if (this.taskNode.filter)\r\n return this.taskNode.filter((o) => {\r\n return o.nodeId == this.taskObj.id;\r\n });\r\n return [];\r\n },\r\n handleRevoke() {\r\n ElMessageBox.confirm(`确定撤销吗`, \"撤销\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis\r\n .withdrawTask({\r\n taskId: this.absoluteTaskId,\r\n withdrawType: 'wf_withdraw_end',\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch(() => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n handleReminders() {\r\n console.log(ElMessageBox);\r\n ElMessageBox.confirm(`确定催办吗`, \"催办\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n console.log(this.ProcessInsObj);\r\n api.tis.reminders(this.processData.processInstanceId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch((e) => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n let flag =\r\n this.taskNode &&\r\n this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.不处理;\r\n\r\n // 加签\r\n if (flag && !this.isView && this.taskObj.counterSignLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.counterSignLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"sign\";\r\n obj.click = () => {\r\n this.showOperation(operation.counterSign, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 转办\r\n if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.delegateTaskButtonLabel;\r\n obj.key = \"delegate\";\r\n obj.click = () => {\r\n this.showOperation(operation.delegateTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 传阅\r\n if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.ccTaskButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"cc\";\r\n obj.click = () => {\r\n this.showOperation(operation.ccTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 催办\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"催办\";\r\n // obj.btnProps = { color: \"#1389ff\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleReminders();\r\n };\r\n btnList.push(obj);\r\n }\r\n // 撤销\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"撤销\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleRevoke();\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (\r\n // flag &&\r\n // !this.isView &&\r\n // this.taskObj &&\r\n // this.taskObj.buttons &&\r\n // this.taskObj.buttons.find((o) => o.label == \"退回\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"退回\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"back\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.roolback, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 拒绝\r\n if (flag && !this.isView && this.processStatus.currUserName) {\r\n let obj = {};\r\n obj.name = \"拒绝\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"refuse\";\r\n obj.click = () => {\r\n this.showOperation(operation.cancel, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 办理\r\n if (flag && !this.isView && this.taskObj.completeButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.completeButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"complete\";\r\n obj.click = () => {\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, obj.name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, obj.name);\r\n }\r\n };\r\n btnList.push(obj);\r\n }\r\n // 退回\r\n if (\r\n flag &&\r\n !this.isView &&\r\n this.taskObj &&\r\n this.taskObj.buttons.length > 0\r\n ) {\r\n this.taskObj.buttons.map((item) => {\r\n let obj = {};\r\n obj.name = item.label;\r\n if (item.label == \"退回\") {\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"back\";\r\n obj.click = () => {\r\n this.showOperation(operation.roolback, obj.name);\r\n };\r\n } else {\r\n obj.btnProps = {};\r\n obj.key = item.label;\r\n obj.click = () => {\r\n this.clickCustomButton(obj.name);\r\n };\r\n }\r\n\r\n btnList.unshift(obj);\r\n });\r\n }\r\n\r\n return btnList;\r\n },\r\n straightenBtns(flag = true) {\r\n let list = [];\r\n\r\n if (this.excludeBtn) {\r\n this.operBtn().map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n } else {\r\n list = this.operBtn();\r\n }\r\n if (this.customBtns.length > 0) {\r\n list = [];\r\n this.customBtns.map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n }\r\n\r\n let r = {\r\n outside: [],\r\n inside: [],\r\n };\r\n if (list.length > 4) {\r\n r.outside = list.splice(list.length - 4, list.length - 1);\r\n r.inside = list;\r\n } else {\r\n r.outside = list;\r\n }\r\n\r\n if (flag && this.customBtn) {\r\n this.customBtn(\r\n { btnList: this.operBtn(), processStatus: this.processStatus },\r\n (e) => {\r\n this.customBtns = e;\r\n this.straightenBtns(false);\r\n },\r\n () => {\r\n this.$emit(\"Complete\");\r\n }\r\n );\r\n console.log(\"=======333\");\r\n } else {\r\n this.absoluteBtns = r;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n this.footBtnLoading = false;\r\n this.boxLoading = false;\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n dynamicStyle() {\r\n \t\t\treturn { '--dynamic-ctx-height': this.dynamicMaxHeight }\r\n\t\t\t},\r\n attachShow() {\r\n let sign = false;\r\n let annex = \"\";\r\n switch (this.operationLabel) {\r\n case \"退回\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"办理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"处理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"同意\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"拒绝\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"加签\":\r\n annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"转办\":\r\n annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n }\r\n // 校验自定义按钮\r\n let temp = \"\";\r\n if (typeof annex != \"string\" && annex != null) {\r\n annex.map((item) => {\r\n if (item.indexOf(this.operationLabel) != -1) {\r\n sign = true;\r\n temp = item;\r\n }\r\n });\r\n }\r\n if (temp) annex = temp;\r\n\r\n // 解析数据\r\n if (sign) {\r\n this.attachRule.required = annex.split(\";\")[1] == \"true\";\r\n this.attachRule.limit =\r\n annex.split(\";\")[2] == -1 ? 999 : annex.split(\";\")[2];\r\n }\r\n\r\n return sign;\r\n },\r\n },\r\n};\r\n</script>\r\n<!-- <style >\r\n.demo-tabs {\r\n position: relative;\r\n .el-tabs__header {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n}\r\n</style> -->\r\n\r\n<style scoped lang=\"scss\">\r\n.operation-box {\r\n max-height: var(--dynamic-ctx-height);\r\n overflow: auto;\r\n padding-right: 20px;\r\n}\r\n.el-dropdown-menu__item {\r\n min-width: 140px;\r\n border-bottom: 1px solid #e8e8e8;\r\n .el-button--text {\r\n color: #333 !important;\r\n }\r\n &:hover {\r\n .el-button--text {\r\n color: #1389ff !important;\r\n }\r\n }\r\n &:last-child {\r\n border: none !important;\r\n }\r\n}\r\n.el-dropdown-menu {\r\n padding-bottom: 30px;\r\n}\r\n.mianContent {\r\n & > .tabs {\r\n & > .demo-tabs {\r\n & > ::v-deep .el-tabs__header {\r\n position: sticky;\r\n top: -20px;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.top-tabs {\r\n position: fixed;\r\n top: 62px;\r\n background-color: #fff;\r\n right: 0px;\r\n z-index: 1997;\r\n}\r\n.mianContent {\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n // margin-top: 20px;\r\n // padding-top: 20px;\r\n // width: 100%;\r\n /* // margin-bottom: 10px; */\r\n // overflow: hidden;\r\n .demo-tabs {\r\n flex: 1;\r\n height: 0;\r\n // height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ::v-deep .el-tabs__content {\r\n flex: 1;\r\n height: 0;\r\n &::-webkit-scrollbar {\r\n width: 0;\r\n }\r\n }\r\n ::v-deep .el-tab-pane {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n &.pane-流程图 {\r\n .bpmn-look {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.mianContent .rowtitle {\r\n /* margin-top: 24px; */\r\n margin-bottom: 16px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n border-left: 4px solid #1389ff;\r\n padding-left: 9px;\r\n}\r\n\r\n.mianContent .topCard {\r\n overflow: hidden;\r\n /* // border: 1px solid #DADBDE; */\r\n}\r\n\r\n.mianContent .topCard .topRow {\r\n display: flex;\r\n /* // line-height: 46px; */\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 32px;\r\n}\r\n\r\n.mianContent .topCard .topRow div:first-child {\r\n color: #333333;\r\n}\r\n\r\n.mianContent .topCard .topRow div:last-child {\r\n color: #777777;\r\n padding-left: 10px;\r\n}\r\n\r\n.mianContent .topCard .topRow div.process-mliv-dd {\r\n /* // height: 26px; */\r\n min-width: 30px;\r\n padding: 0px 16px;\r\n border-radius: 4px;\r\n background: #1389ff;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n margin-left: 10px;\r\n}\r\n\r\n.mianContent .tabs {\r\n /* // margin-bottom: 60px; */\r\n height: 0;\r\n flex: 1;\r\n overflow: visible !important;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.mianContent .tabs :deep(.is-active) {\r\n font-size: 16px;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content) {\r\n// height: calc(100% - 55px);\r\n// /* 修改BUGID:1003401 */\r\n// overflow: auto;\r\n// }\r\n.mianContent .tabs :deep(.el-tabs__header) {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content)::-webkit-scrollbar {\r\n// width: 0;\r\n// }\r\n\r\n.mianContent .topBtnRow {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n height: 100%;\r\n}\r\n\r\n.mianContent .footBtnRow {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n box-sizing: border-box;\r\n // height: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n right: 20px;\r\n height: 50px;\r\n border-top: 1px solid #dadbde;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n z-index: 1001;\r\n .el-button {\r\n min-width: 74px;\r\n height: 36px;\r\n border-radius: 6px;\r\n }\r\n}\r\n\r\n.formInput {\r\n width: 90%;\r\n}\r\n\r\n.dialog :deep(.el-dialog__header) {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n}\r\n\r\n.dialog ::v-deep.el-dialog__body {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n padding-right: 10px;\r\n}\r\n\r\n.dialog :deep(.el-dialog__footer) {\r\n padding: 12px;\r\n text-align: center;\r\n}\r\n.dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n}\r\n\r\n.dialog {\r\n .el-dialog__body {\r\n padding: 45px 30px;\r\n }\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n.view-file {\r\n color: #1389ff;\r\n cursor: pointer;\r\n}\r\n.view-node-info {\r\n cursor: pointer;\r\n color: #1389ff;\r\n margin-left: 34px;\r\n font-size: 16px;\r\n}\r\n.iconsR {\r\n cursor: pointer;\r\n transform: rotate(90deg);\r\n}\r\n::v-deep .task .el-radio-group {\r\n .el-radio--small.is-bordered {\r\n margin: 0 20px;\r\n }\r\n .el-radio.is-bordered + .el-radio.is-bordered {\r\n margin: 5px 20px;\r\n }\r\n}\r\n.sign-img {\r\n width: 60px;\r\n height: 60px;\r\n}\r\n</style>\r\n"]}, media: undefined });
9112
+ inject("data-v-1d1b7390_0", { source: "@charset \"UTF-8\";\n.operation-box[data-v-1d1b7390] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-1d1b7390] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-1d1b7390] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-1d1b7390] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-1d1b7390]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-1d1b7390] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-1d1b7390] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-1d1b7390] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-1d1b7390] {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs[data-v-1d1b7390] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-1d1b7390] {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n.mianContent .topCard[data-v-1d1b7390] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-1d1b7390] {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n.mianContent .topCard .topRow div[data-v-1d1b7390]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-1d1b7390]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-1d1b7390] {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n.mianContent .tabs[data-v-1d1b7390] {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n.mianContent .tabs[data-v-1d1b7390] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-1d1b7390] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-1d1b7390] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-1d1b7390] {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button[data-v-1d1b7390] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-1d1b7390] {\n width: 90%;\n}\n.dialog[data-v-1d1b7390] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-1d1b7390] .el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n.dialog[data-v-1d1b7390] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-1d1b7390] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-1d1b7390] :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n.dialog .el-dialog__body[data-v-1d1b7390] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-1d1b7390] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-1d1b7390] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-1d1b7390] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-1d1b7390] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-1d1b7390] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-1d1b7390] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-1d1b7390] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-1d1b7390] {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["index.vue","C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\index.vue"],"names":[],"mappings":"AAAA,gBAAgB;AC+3ChB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;AD73CA;AC+3CA;EACA,gBAAA;EACA,gCAAA;AD53CA;AC63CA;EACA,sBAAA;AD33CA;AC83CA;EACA,yBAAA;AD53CA;AC+3CA;EACA,uBAAA;AD73CA;ACg4CA;EACA,oBAAA;AD73CA;ACk4CA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;AD/3CA;ACq4CA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;ADl4CA;ACo4CA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;ADp4CA;ACs4CA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;ADr4CA;ACs4CA;EACA,OAAA;EACA,SAAA;ADp4CA;ACq4CA;EACA,QAAA;ADn4CA;ACs4CA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;ADp4CA;ACs4CA;EACA,SAAA;EACA,OAAA;ADp4CA;AC24CA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;ADz4CA;AC44CA;EACA,gBAAA;EACA,kCAAA;ADz4CA;AC44CA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;ADz4CA;AC44CA;EACA,cAAA;ADz4CA;AC44CA;EACA,cAAA;EACA,kBAAA;ADz4CA;AC44CA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;ADz4CA;AC44CA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;ADz4CA;AC44CA;EACA,eAAA;ADz4CA;ACi5CA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;AD94CA;ACq5CA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;ADl5CA;ACq5CA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EAEA,eAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;EACA,gBAAA;EACA,sBAAA;EACA,aAAA;ADn5CA;ACo5CA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;ADl5CA;ACs5CA;EACA,UAAA;ADn5CA;ACs5CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;ADn5CA;ACs5CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;ADn5CA;ACs5CA;EACA,aAAA;EACA,kBAAA;ADn5CA;ACs5CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ADn5CA;ACu5CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;ADp5CA;ACw5CA;EACA,kBAAA;ADr5CA;ACu5CA;EACA,wBAAA;EACA,kBAAA;ADr5CA;ACu5CA;EACA,SAAA;EACA,WAAA;ADr5CA;ACw5CA;EACA,cAAA;EACA,eAAA;ADr5CA;ACu5CA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ADp5CA;ACs5CA;EACA,eAAA;EACA,wBAAA;ADn5CA;ACs5CA;EACA,cAAA;ADn5CA;ACq5CA;EACA,gBAAA;ADn5CA;ACs5CA;EACA,WAAA;EACA,YAAA;ADn5CA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["@charset \"UTF-8\";\n.operation-box {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n\n.el-dropdown-menu__item {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item:last-child {\n border: none !important;\n}\n\n.el-dropdown-menu {\n padding-bottom: 30px;\n}\n\n.mianContent > .tabs > .demo-tabs > ::v-deep .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n\n.top-tabs {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n\n.mianContent {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n\n.mianContent .rowtitle {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n\n.mianContent .topCard {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n\n.mianContent .topCard .topRow {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n\n.mianContent .topCard .topRow div:first-child {\n color: #333333;\n}\n\n.mianContent .topCard .topRow div:last-child {\n color: #777777;\n padding-left: 10px;\n}\n\n.mianContent .topCard .topRow div.process-mliv-dd {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n\n.mianContent .tabs {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n\n.mianContent .tabs :deep(.is-active) {\n font-size: 16px;\n}\n\n.mianContent .tabs :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n\n.mianContent .topBtnRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n.mianContent .footBtnRow {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n\n.formInput {\n width: 90%;\n}\n\n.dialog :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n\n.dialog ::v-deep.el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n\n.dialog :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n\n.dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n\n.dialog .el-dialog__body {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n.view-file {\n color: #1389ff;\n cursor: pointer;\n}\n\n.view-node-info {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n\n.iconsR {\n cursor: pointer;\n transform: rotate(90deg);\n}\n\n::v-deep .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n::v-deep .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n\n.sign-img {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */","<template>\r\n <div\r\n class=\"mianContent\"\r\n v-loading=\"boxLoading && !isButton\"\r\n ref=\"mianContent\"\r\n :style=\"{\r\n // height:\r\n // activeName == '流程图'\r\n // ? '100%'\r\n // : $refs['footBtnRow']\r\n // ? `calc(100% - 50px)`\r\n // : ' 100%',\r\n // overflow: activeName == '流程图' ? 'hidden !important' : 'auto',\r\n }\"\r\n >\r\n <template v-if=\"!isButton\">\r\n <div class=\"tabs\" ref=\"baseTabs\">\r\n <el-tabs\r\n v-model=\"activeName\"\r\n class=\"demo-tabs\"\r\n @tab-click=\"handleClick\"\r\n >\r\n <el-tab-pane\r\n :label=\"item.name\"\r\n :name=\"item.slot || item.name\"\r\n v-for=\"(item, index) in tabs\"\r\n :key=\"index\"\r\n :item=\"item\"\r\n :class=\"['pane-' + item.name]\"\r\n >\r\n <template v-if=\"item.name == '基本信息' && !item.slot\">\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '流程图' && !item.slot\">\r\n <div class=\"view-node-info\" @click=\"getNodeList\">\r\n 查看流程节点信息\r\n </div>\r\n <iframe\r\n v-if=\"trackUrl\"\r\n :src=\"trackUrl\"\r\n style=\"width: 100%; height: 100%; border: none\"\r\n :style=\"{ height: `${iframeHeight}px` }\"\r\n scrolling=\"no\"\r\n frameborder=\"0\"\r\n :key=\"processId\"\r\n ></iframe>\r\n <!-- 展示条件需要同时满足v-if -->\r\n <bpmnLook v-if=\"activeName == '流程图' && processData.process && processData.process.xml\" :approvalData=\"processData.flow\" :diagram=\"processData.process.xml\"></bpmnLook>\r\n <div\r\n v-else\r\n style=\"\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无流程图\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '审批记录' && !item.slot\">\r\n <processFlow v-if=\"activeName == '审批记录' && processData.flow\" :flow-list=\"processData.flow\"></processFlow>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot\r\n v-if=\"item.slot\"\r\n :name=\"item.slot\"\r\n :taskNode=\"getTaskNode()\"\r\n ></slot>\r\n <slot v-else name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n <!-- <el-tab-pane label=\"流程图\" name=\"2\" style=\"height: 100%\">\r\n </el-tab-pane> -->\r\n <!-- <el-tab-pane label=\"审批记录\" name=\"3\">\r\n <el-table\r\n :data=\"taskCommentList\"\r\n border\r\n style=\"width: 100%; margin-bottom: 20px\"\r\n v-if=\"taskCommentList && taskCommentList.length > 0\"\r\n >\r\n <el-table-column type=\"index\" width=\"80\" label=\"序号\" />\r\n <el-table-column\r\n prop=\"activityName\"\r\n label=\"节点名称\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"createUserName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"actionName\"\r\n label=\"审批操作\"\r\n ></el-table-column>\r\n <el-table-column prop=\"msg\" label=\"审批意见\">\r\n <template #default=\"scope\">\r\n <div v-html=\"scope.row.msg\"></div>\r\n <el-popover\r\n placement=\"bottom-end\"\r\n :width=\"500\"\r\n trigger=\"click\"\r\n v-if=\"scope.row.metaAnnexList.length > 0\"\r\n >\r\n <template #reference>\r\n <div class=\"view-file\">查看附件</div>\r\n </template>\r\n <ViewFile\r\n v-if=\"scope.row.metaAnnexList\"\r\n :dataList=\"scope.row.metaAnnexList\"\r\n />\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column\r\n prop=\"createDate\"\r\n label=\"审批时间\"\r\n ></el-table-column>\r\n </el-table>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </el-tab-pane> -->\r\n </el-tabs>\r\n </div>\r\n </template>\r\n <!-- 底部按钮 -->\r\n <processBtns\r\n :loading=\"submitLoading\"\r\n :button-list=\"processData.button\"\r\n :process=\"processData.process\"\r\n :comment=\"comment\"\r\n @draft=\"handleDraft({ taskId: process.taskId, variables: form })\"\r\n @examine=\"handleExamine\"\r\n @user-select=\"handleUserSelect\"\r\n @print=\"handlePrint\"\r\n @rollback=\"handleRollbackTask\"\r\n @terminate=\"handleTerminateProcess\"\r\n @withdraw=\"handleWithdrawTask\"\r\n @reminders=\"handleReminders\"\r\n ></processBtns>\r\n <div class=\"dialog\">\r\n <el-dialog\r\n :visible.sync=\"dialogVisibleOperation\"\r\n append-to-body\r\n class=\"dialog\"\r\n width=\"600px\"\r\n v-dialogDrag\r\n :title=\"operationLabel\"\r\n :close-on-click-modal=\"false\"\r\n :show-close=\"!isOperLoading\"\r\n top=\"6vh\" :style=\"dynamicStyle\"\r\n >\r\n <div class=\"operation-box\" ref=\"obRef\">\r\n <component\r\n v-if=\"dialogVisibleOperation\"\r\n ref=\"operationRef\"\r\n :is=\"operationCom\"\r\n :param=\"operationParam\"\r\n @success=\"operationSuccess\"\r\n @fail=\"operationFail\"\r\n :isOperLoading=\"isOperLoading\"\r\n >\r\n <template #form>\r\n <slot :name=\"aftClickBtn.slot\" v-if=\"aftClickBtn.slot\"></slot>\r\n </template>\r\n <template #file>\r\n <el-form\r\n label-width=\"120px\"\r\n status-icon\r\n v-if=\"attachShow\"\r\n @submit.native.prevent\r\n :rules=\"rules\"\r\n >\r\n <el-form-item\r\n label=\"附件\"\r\n :prop=\"attachRule.required ? 'attach' : ''\"\r\n >\r\n <jyr-file-upload\r\n v-model=\"attach\"\r\n :multiple=\"attachRule.limit > 0\"\r\n :limit=\"attachRule.limit\"\r\n fullFileObject\r\n showFileName\r\n ref=\"fileUpload\"\r\n />\r\n </el-form-item>\r\n </el-form>\r\n </template>\r\n </component>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button\r\n v-loading\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n :loading=\"isOperLoading\"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click=\"dialogVisibleOperation = false\"\r\n :loading=\"isOperLoading\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n <!-- 选择任务 -->\r\n <el-dialog\r\n title=\"选择处理任务\"\r\n :visible.sync=\"showMulTask\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n width=\"500px\"\r\n :show-close=\"false\"\r\n >\r\n <el-form ref=\"form\" label-width=\"100px\" class=\"task\">\r\n <el-form-item label=\"请选择:\" prop=\"content\">\r\n <el-radio-group v-model=\"mulTaskTaskId\" size=\"small\">\r\n <el-radio\r\n v-for=\"item in mulTaskList\"\r\n :key=\"item.nodeId\"\r\n :label=\"item.taskId\"\r\n border\r\n >{{ item.nodeName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"onCheckSure\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"nodeInfoVisible\"\r\n append-to-body\r\n width=\"600px\"\r\n title=\"流程节点信息\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n v-dialogDrag\r\n >\r\n <el-table :data=\"filterFlow(processData.flow)\" border>\r\n <el-table-column\r\n label=\"序号\"\r\n type=\"index\"\r\n width=\"120px\"\r\n ></el-table-column>\r\n <el-table-column prop=\"historyActivityName\" label=\"节点名称\"></el-table-column>\r\n <!-- <el-table-column prop=\"type\" label=\"类型\"></el-table-column> -->\r\n <el-table-column\r\n prop=\"assigneeName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n </el-table>\r\n </el-dialog>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Message as ElMessage, MessageBox as ElMessageBox } from \"element-ui\";\r\nimport treeselect from \"@riophae/vue-treeselect\";\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\";\r\nimport api from \"./api\";\r\nimport * as $enum from \"./enum\";\r\nimport staffTree from \"./staff-tree.vue\";\r\nimport ViewFile from \"./view-file.vue\";\r\nimport * as operation from \"./operation/index.js\";\r\nimport JyrFileUpload from \"../JyrFileUpload/index\";\r\nimport processBtns from \"./operation/processBtns.vue\";\r\nimport processFlow from \"./operation/processFlow.vue\";\r\nimport bpmnLook from './bpmnLook.vue';\r\nimport dayjs from \"dayjs\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { bpmnLook, processBtns, processFlow, treeselect, staffTree, ...operation, ViewFile, JyrFileUpload },\r\n props: {\r\n /** 流程实例id */\r\n taskId: {\r\n // require: true,\r\n default: false,\r\n type: String,\r\n },\r\n processId: {\r\n require: true,\r\n default: false,\r\n type: String,\r\n },\r\n // processDefId: {\r\n // require: false,\r\n // default: false,\r\n // type: String,\r\n // },\r\n userId: { require: true, default: \"\", type: String },\r\n // task: {\r\n // default: false,\r\n // type: Object,\r\n // },\r\n showBtns: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n isView: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n getVars: { type: Function },\r\n before: { type: Function },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isAdditional: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n businessData: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n excludeBtn: {\r\n type: String,\r\n default: \"\",\r\n },\r\n showAsPlanned: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showCommIdea: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n commentMsgRequired: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n customBtn: {\r\n default: \"\",\r\n },\r\n tabs: {\r\n default: () => [\r\n {\r\n name: \"基本信息\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"流程图\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"审批记录\",\r\n slot: \"\",\r\n },\r\n ],\r\n },\r\n personType: {\r\n default: \"\",\r\n },\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n isButton: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n provide() {\r\n return {\r\n isAlisInject: this.isAlis,\r\n };\r\n },\r\n // emits: ['update:modelValue', \"getData\", \"change\", \"changeGetData\"],\r\n data() {\r\n return {\r\n // 流程信息\r\n deptId: '',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n processData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n submitLoading: false,\r\n flowChartVisible: false,\r\n comment: null,\r\n // 流程信息\r\n dynamicMaxHeight: '400px',\r\n showMulTask: false,\r\n mulTaskList: [],\r\n mulTaskTaskId: \"\",\r\n attach: [],\r\n customBtns: [],\r\n overheight: 10,\r\n iframeHeight: 500,\r\n mainWidth: 0,\r\n absoluteTaskId: \"\",\r\n infoView: false,\r\n showTopTabs: false,\r\n buttonLoading: false,\r\n footBtnLoading: true,\r\n tabheight: 400,\r\n aftClickBtn: \"\",\r\n attachRule: {\r\n required: true,\r\n limit: 0,\r\n },\r\n nodeInfoVisible: false,\r\n nodeInfoList: [],\r\n jjForm: {\r\n saveMetaAnnexCmdList: [],\r\n },\r\n targetUID: \"\",\r\n commentMsg: \"\",\r\n trackUrl: \"\",\r\n taskObj: {},\r\n taskCommentList: [],\r\n absoluteBtns: { inside: [], outside: [] },\r\n processStatus: \"\",\r\n nextTaskNode: [],\r\n activeName: \"基本信息\",\r\n ProcessInsObj: {},\r\n outGatewayUserTaskModel: [],\r\n dialogVisibleOperation: false,\r\n operationLabel: \"\",\r\n operationCom: {},\r\n operationParam: {},\r\n taskNode: [],\r\n aftTaskNode: {},\r\n operation,\r\n Enum: $enum,\r\n isOperLoading: false,\r\n boxLoading: false,\r\n rules: {\r\n attach: [{ required: true, trigger: \"change\" }],\r\n },\r\n\t noReload: false,\r\n digitalSignatureList: []\r\n };\r\n },\r\n mounted() {\r\n window.onresize = () => {\r\n return (() => {\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n })();\r\n };\r\n },\r\n watch: {\r\n activeName: function (n) {\r\n if (n == 1) this.activeName = \"基本信息\";\r\n },\r\n infoView: function () {\r\n this.calculateHeight();\r\n },\r\n taskId: {\r\n handler(val) {\r\n if (!val) return;\r\n this.absoluteTaskId = val;\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n processId: {\r\n handler(val) {\r\n if (val) {\r\n this.customBtns = [];\r\n this.absoluteBtns = { inside: [], outside: [] };\r\n this.activeName = this.tabs.length > 0 ? this.tabs[0][\"name\"] : \"\";\r\n // 获取流程节点,流程图,流程实例,流程审批\r\n this.getProcessInfo()\r\n if (Date.now()) return;\r\n\r\n api.repository.queryTaskNodeList(this.processId).then((e) => {\r\n\t\t\t if(!this.noReload){\r\n\t\t\t\t this.noReload = false\r\n\t\t\t\t if (!this.absoluteTaskId && e.data.length > 1) {\r\n\t\t\t\t this.mulTaskList = e.data;\r\n\t\t\t\t this.showMulTask = true;\r\n\t\t\t\t return;\r\n\t\t\t\t } else {\r\n\t\t\t\t this.absoluteTaskId =\r\n\t\t\t\t e.data && e.data.length > 0 ? e.data[0][\"taskId\"] : \"\";\r\n\t\t\t\t this.aftTaskNode = e.data[0];\r\n\t\t\t\t }\r\n\t\t\t }\r\n\r\n console.log(\"======\", this.absoluteTaskId);\r\n if (e.code == $enum.apiCode.success) {\r\n this.taskNode = e.data;\r\n api.pis\r\n .getProcessStatus(this.processId, this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.processStatus = res.data;\r\n if (this.absoluteTaskId) {\r\n api.repository\r\n .getUserTaskModelCmd(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.taskObj = res.data;\r\n this.straightenBtns();\r\n }\r\n });\r\n } else {\r\n this.straightenBtns();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n api.repository\r\n .getTrackUrl({ processInstId: val, type: $enum.SourceType.电脑端 })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n }\r\n });\r\n api.tis.getTaskCommentList(this.processId, \"\").then((res) => {\r\n this.taskCommentList = res.data;\r\n this.digitalSignatureList = res.data.filter(item => item.digitalSignature).map(item => item.digitalSignature)\r\n });\r\n api.pis.getProcessInstanceById(this.processId).then((res) => {\r\n this.ProcessInsObj = res.data;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n });\r\n\r\n // api.repository.queryTaskNodeList(this.processId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) this.taskNode = res.data;\r\n // });\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n absoluteTaskId: {\r\n handler(val) {\r\n if (val) {\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n dialogVisibleOperation: {\r\n handler(val) {\r\n this.$emit(\"show-modal\", val);\r\n },\r\n },\r\n },\r\n methods: {\r\n // 流程\r\n filterFlow(flowArr) {\r\n return flowArr.filter((item) => {\r\n return ['userTask', 'candidate'].includes(item.historyActivityType)\r\n });\r\n },\r\n getProcessInfo() {\r\n this.submitLoading = true\r\n this.boxLoading = true;\r\n\r\n api.tis.getTaskModelDetail(this.taskId ? {\r\n processInsId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInsId: this.processId,\r\n }).then(async res => {\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n console.log(this.processData.flow, 'flw')\r\n this.flowChartVisible = true\r\n this.submitLoading = false\r\n this.boxLoading = false\r\n }\r\n })\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n handleDraft() {\r\n this.submitLoading = true;\r\n },\r\n // 提交(办理)true、取消申请 false\r\n handleExamine(flag, name) {\r\n console.log(flag, 'flag')\r\n if (flag) {\r\n this.handlePass(name)\r\n } else {\r\n this.handleCancel(name)\r\n }\r\n this.submitLoading = true;\r\n },\r\n // 办理\r\n async handlePass(name) {\r\n if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n }\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, name);\r\n }\r\n },\r\n // 取消申请\r\n handleCancel(name) {\r\n this.showOperation(operation.cancel, name);\r\n },\r\n // 转办transfer,委托delegate,addInstance\r\n handleUserSelect({ type, checkType, name}) {\r\n if (type == 'transfer') {\r\n this.handleTransfer(name)\r\n }\r\n else if (type == 'addInstance') {\r\n this.handleAddInstance(name)\r\n }\r\n console.log('handleUserselect')\r\n },\r\n // 转办\r\n handleTransfer(name) {\r\n this.showOperation(operation.delegateTask, name);\r\n },\r\n // 加签\r\n handleAddInstance(name) {\r\n this.showOperation(operation.counterSign, name);\r\n },\r\n handlePrint() {\r\n console.log('handlePrint')\r\n },\r\n handleRollbackTask(name) {\r\n console.log('handleRollbackTask')\r\n this.showOperation(operation.roolback, name);\r\n },\r\n handleTerminateProcess() {\r\n console.log('handleTerminateProcess')\r\n },\r\n // 撤销,撤回\r\n handleWithdrawTask(name) {\r\n console.log('handleWithdrawTask')\r\n this.handleRevoke();\r\n // this.showOperation(operation.withdrawTask, '请选择撤销/撤回操作');\r\n },\r\n // 流程\r\n findTargetHtml(startNode, targetClass, searchKey = 'parentElement') {\r\n\t\t\t\tif (!startNode) return null\r\n \t\t\tif (startNode.classList.contains(targetClass)) {\r\n \t\t\treturn startNode\r\n \t\t\t}\r\n \t\t\tlet curEl = startNode[searchKey]\r\n \t\t\tif (!curEl) return null\r\n \t\t\tif (searchKey == 'children') {\r\n \t\t\tfor (let i = 0; i <= curEl.length - 1; i++) {\r\n \t\t\tif (curEl[i].classList.contains(targetClass)) {\r\n \t\t\treturn curEl[i]\r\n \t\t\t}\r\n \t\t\t}\r\n \t\t\treturn\r\n \t\t\t}\r\n \t\t\treturn this.findTargetHtml(curEl, targetClass)\r\n\t\t\t},\r\n findImageIndex(item){\r\n return item ? this.digitalSignatureList.findIndex(i => i == item) : -1\r\n },\r\n onCheckSure() {\r\n this.absoluteTaskId = this.mulTaskTaskId;\r\n this.mulTaskList.map((item) => {\r\n if (item.taskId == this.mulTaskTaskId) {\r\n this.aftTaskNode = item;\r\n }\r\n });\r\n\t this.noReload = true\r\n this.showMulTask = false;\r\n this.footBtnLoading = true;\r\n let temp = this.processId;\r\n this.processId = \"\";\r\n this.processId = temp;\r\n },\r\n showButtonLoading() {\r\n this.buttonLoading = true;\r\n },\r\n hideButtonLoading() {\r\n this.buttonLoading = false;\r\n },\r\n calculateHeight() {\r\n let h = 0;\r\n if (this.$refs[\"footBtnRow\"]) {\r\n h += this.$refs[\"footBtnRow\"].offsetHeight;\r\n }\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n if (this.infoView && this.absoluteBtns.outside.length > 0) {\r\n h += 32;\r\n }\r\n if (this.$refs[\"infoBoxFign\"]) {\r\n let windowHeight =\r\n window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n this.tabheight =\r\n windowHeight - this.$refs[\"infoBoxFign\"].offsetTop - 192;\r\n }\r\n this.overheight = h + 116;\r\n this.iframeHeight = this.$refs[\"mianContent\"].offsetHeight - 146;\r\n },\r\n getNodeList() {\r\n this.nodeInfoVisible = true;\r\n // api.pis.findNodeParticipantRows(this.processId).then((e) => {\r\n \r\n // e.data.map((item) => {\r\n // if (item.type == \"串签\" || item.type == \"并签\") {\r\n // item[\"name\"] += `【${item.type}】`;\r\n // }\r\n // });\r\n // this.nodeInfoList = e.data;\r\n // });\r\n },\r\n fileNameLastof(e, len = 0) {\r\n if (e.indexOf(\"http\") == -1) len = 0;\r\n if (!e) return;\r\n let last = \"/\";\r\n if (e.indexOf(\"\\\\\") != -1) {\r\n last = \"\\\\\";\r\n }\r\n //整理文件名\r\n let filename = e;\r\n let lastindex = filename.lastIndexOf(last);\r\n return filename.substr(lastindex + 1 + len, filename.length);\r\n },\r\n clickCustomButton(name) {\r\n this.$emit(\"clickCustomButton\", {\r\n name,\r\n processStatus: this.processStatus,\r\n setName: (label) => {\r\n this.taskObj.buttons.map((item) => {\r\n if (item.label == name) {\r\n item.label = label;\r\n }\r\n });\r\n this.straightenBtns();\r\n },\r\n });\r\n },\r\n // 获取下一个节点数据\r\n async getNextNode(deptId) {\r\n let res1\r\n try {\r\n res1 = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n );\r\n } catch (e) {\r\n console.error(e)\r\n res1 = {}\r\n }\r\n const nextTaskNode = res1.data || {};\r\n console.log(nextTaskNode, 'next')\r\n if (nextTaskNode.id && !nextTaskNode.setPersonnel) {\r\n const nodeUserParams = getNodeUserParams(nextTaskNode)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n // 需要传入部门id\r\n deptId: deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextTaskNode.userList = res.data\r\n }\r\n }\r\n this.nextTaskNode = nextTaskNode\r\n console.log(nextTaskNode, 'getNextNode')\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n async showOperation(com, label) {\r\n this.attach = [];\r\n if (false && this.processStatus.allUserNames.length > 0) {\r\n if (this.absoluteTaskId) {\r\n let vars;\r\n if (this.getVars) {\r\n vars = this.getVars();\r\n if (vars === false) {\r\n return false;\r\n }\r\n }\r\n let res = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n vars\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n for (var i in res.data) {\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"固定账户\" ||\r\n res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(this.absoluteTaskId, [\r\n res.data[i].id,\r\n ])\r\n .then((e) => {\r\n res.data[i].userTaskModelDTO.routeTxt[\"userNames\"] =\r\n e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n this.nextTaskNode = res.data;\r\n } else {\r\n this.nextTaskNode = [];\r\n this.outGatewayUserTaskModel = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n \"\"\r\n );\r\n }\r\n }\r\n }\r\n this.operationLabel = label;\r\n // this.operationParam = new operation.PorpParam(\"\", this.processId, this.processDefId, this.task.id, this.task.activityDefId);\r\n this.operationParam.processInstId = this.processId;\r\n // this.operationParam.processDefId = this.processDefId;\r\n this.operationParam.taskInstId = this.absoluteTaskId;\r\n // this.operationParam.taskDeftId = this.task.activityDefId;\r\n this.operationParam.nextTaskNode = this.nextTaskNode;\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.taskObj = this.taskObj;\r\n this.operationParam.getVars = this.getVars;\r\n this.operationParam.outGatewayUserTaskModel =\r\n this.outGatewayUserTaskModel;\r\n this.operationParam.taskNode = this.getTaskNode();\r\n this.operationParam.businessData = this.businessData;\r\n this.operationParam.showAsPlanned = this.showAsPlanned;\r\n this.operationParam.showCommIdea = this.showCommIdea;\r\n this.operationParam.commentMsgRequired = this.commentMsgRequired;\r\n this.operationParam.personType = this.personType;\r\n this.operationParam.personEntity = {\r\n ...this.personEntity,\r\n ...(this.aftClickBtn.personEntity || {}),\r\n };\r\n this.operationParam.ProcessInsObj = this.ProcessInsObj;\r\n this.operationCom = com;\r\n this.dialogVisibleOperation = true;\r\n this.$nextTick(() => {\r\n \t\tlet ctnEl = this.$refs.obRef\r\n\t\t\t\tconsole.log(ctnEl, this.$refs);\r\n \t\tif (!ctnEl) return \r\n \t\tlet topDistance = ctnEl.getBoundingClientRect().top\r\n \t\tlet dialogEl = this.findTargetHtml(ctnEl, 'el-dialog')\r\n \t\tlet dialogFootEl = this.findTargetHtml(dialogEl, 'el-dialog__footer', 'children')\r\n \t\t// 视口高度 - margin - head - footer\r\n \t\tlet val = window.innerHeight - topDistance - topDistance - dialogFootEl.clientHeight - 32\r\n \t\tthis.dynamicMaxHeight = `${val}px`\r\n \t\t})\r\n },\r\n onClickOperation() {\r\n if (\r\n this.attachShow &&\r\n this.attachRule.required &&\r\n this.attach.length == 0\r\n ) {\r\n return ElMessage.error(\"请上传附件\");\r\n }\r\n if (this.aftClickBtn.preposition) {\r\n this.operationMain(this.aftClickBtn.preposition);\r\n } else {\r\n this.operationMain();\r\n }\r\n\r\n // if (this.$refs[\"fileUpload\"] && this.$refs[\"fileUpload\"].getLoading()) {\r\n // return ElMessage.error(\"请等待附件上传完成后重试\");\r\n // }\r\n },\r\n operationMain(preposition = false) {\r\n if (this.attachShow) {\r\n let saveMetaAnnexCmdList = [];\r\n this.attach.map((item) => {\r\n saveMetaAnnexCmdList.push({\r\n id: item.id,\r\n name: this.fileNameLastof(item.name),\r\n size: item.fileSize,\r\n format: item.fileType,\r\n url: item.url,\r\n uploadTime: item.createTime,\r\n processInstId: this.operationParam.processInstId,\r\n taskInstId: this.operationParam.taskInstId,\r\n });\r\n });\r\n saveMetaAnnexCmdList = saveMetaAnnexCmdList.sort((a, b) => {\r\n return dayjs(a.uploadTime).valueOf() > dayjs(b.uploadTime).valueOf();\r\n });\r\n api.tis.patchSave({\r\n saveMetaAnnexCmdList,\r\n });\r\n }\r\n\r\n if (this.$refs.operationRef) {\r\n this.$refs.operationRef.confirm(preposition, () => {\r\n this.isOperLoading = true;\r\n });\r\n }\r\n },\r\n operationSuccess(isComplete = true) {\r\n ElMessage.success(\"操作成功\");\r\n this.dialogVisibleOperation = false;\r\n // router.go(0);\r\n if (isComplete) this.$emit(\"Complete\");\r\n this.isOperLoading = false;\r\n },\r\n operationFail(msg = \"\") {\r\n msg && ElMessage.warning(msg);\r\n this.isOperLoading = false;\r\n },\r\n async getOutgoingProcessNode(taskId, processNodeId) {\r\n let res = await api.repository.getOutgoingProcessNode(\r\n taskId,\r\n processNodeId\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n if (res.data) {\r\n for (let i = 0; i < res.data.length; i++) {\r\n let o = res.data[i];\r\n if (o.type != $enum.ProcessNodeType.用户任务) {\r\n o.childNode = await this.getOutgoingProcessNode(taskId, o.id);\r\n if (o.incomingConditionItemList.length !== 0) {\r\n // o.childNode.push(o);\r\n }\r\n }\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].humanPerformerName == \"固定账户\" ||\r\n res.data[i].humanPerformerName == \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(taskId, [res.data[i].id])\r\n .then((e) => {\r\n res.data[i][\"routeTxt\"][\"userNames\"] = e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n if (res.data.length == 0) {\r\n res.data.push({\r\n id: \"\",\r\n incomingConditionItemList: [],\r\n type: \"endEvent\",\r\n name: \"结束事件\",\r\n });\r\n }\r\n }\r\n return res.data;\r\n }\r\n return [];\r\n },\r\n getColor(status) {\r\n if (status == \"审核中\" || status == \"审批中\") return \"#6DC743\";\r\n if (status == \"已驳回\") return \"#F14B4C\";\r\n if (status == \"已撤销\") return \"#CECECE\";\r\n if (status == \"已完成\") return \"#6DC743\";\r\n\r\n return \"#1389FF\";\r\n },\r\n handleClick(e) {\r\n this.$emit(\"clickTab\",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)));\r\n },\r\n getTaskNode() {\r\n if (this.taskNode.filter)\r\n return this.taskNode.filter((o) => {\r\n return o.nodeId == this.taskObj.id;\r\n });\r\n return [];\r\n },\r\n handleRevoke() {\r\n ElMessageBox.confirm(`确定撤销吗`, \"撤销\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis\r\n .withdrawTask(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch(() => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n handleReminders() {\r\n console.log(ElMessageBox);\r\n ElMessageBox.confirm(`确定催办吗`, \"催办\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis.reminders(this.processData.process.processInstanceId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch((e) => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n let flag =\r\n this.taskNode &&\r\n this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.不处理;\r\n\r\n // 加签\r\n if (flag && !this.isView && this.taskObj.counterSignLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.counterSignLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"sign\";\r\n obj.click = () => {\r\n this.showOperation(operation.counterSign, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 转办\r\n if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.delegateTaskButtonLabel;\r\n obj.key = \"delegate\";\r\n obj.click = () => {\r\n this.showOperation(operation.delegateTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 传阅\r\n if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.ccTaskButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"cc\";\r\n obj.click = () => {\r\n this.showOperation(operation.ccTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 催办\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"催办\";\r\n // obj.btnProps = { color: \"#1389ff\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleReminders();\r\n };\r\n btnList.push(obj);\r\n }\r\n // 撤销\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"撤销\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleRevoke();\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (\r\n // flag &&\r\n // !this.isView &&\r\n // this.taskObj &&\r\n // this.taskObj.buttons &&\r\n // this.taskObj.buttons.find((o) => o.label == \"退回\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"退回\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"back\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.roolback, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 拒绝\r\n if (flag && !this.isView && this.processStatus.currUserName) {\r\n let obj = {};\r\n obj.name = \"拒绝\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"refuse\";\r\n obj.click = () => {\r\n this.showOperation(operation.cancel, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 办理\r\n if (flag && !this.isView && this.taskObj.completeButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.completeButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"complete\";\r\n obj.click = () => {\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, obj.name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, obj.name);\r\n }\r\n };\r\n btnList.push(obj);\r\n }\r\n // 退回\r\n if (\r\n flag &&\r\n !this.isView &&\r\n this.taskObj &&\r\n this.taskObj.buttons.length > 0\r\n ) {\r\n this.taskObj.buttons.map((item) => {\r\n let obj = {};\r\n obj.name = item.label;\r\n if (item.label == \"退回\") {\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"back\";\r\n obj.click = () => {\r\n this.showOperation(operation.roolback, obj.name);\r\n };\r\n } else {\r\n obj.btnProps = {};\r\n obj.key = item.label;\r\n obj.click = () => {\r\n this.clickCustomButton(obj.name);\r\n };\r\n }\r\n\r\n btnList.unshift(obj);\r\n });\r\n }\r\n\r\n return btnList;\r\n },\r\n straightenBtns(flag = true) {\r\n let list = [];\r\n\r\n if (this.excludeBtn) {\r\n this.operBtn().map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n } else {\r\n list = this.operBtn();\r\n }\r\n if (this.customBtns.length > 0) {\r\n list = [];\r\n this.customBtns.map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n }\r\n\r\n let r = {\r\n outside: [],\r\n inside: [],\r\n };\r\n if (list.length > 4) {\r\n r.outside = list.splice(list.length - 4, list.length - 1);\r\n r.inside = list;\r\n } else {\r\n r.outside = list;\r\n }\r\n\r\n if (flag && this.customBtn) {\r\n this.customBtn(\r\n { btnList: this.operBtn(), processStatus: this.processStatus },\r\n (e) => {\r\n this.customBtns = e;\r\n this.straightenBtns(false);\r\n },\r\n () => {\r\n this.$emit(\"Complete\");\r\n }\r\n );\r\n console.log(\"=======333\");\r\n } else {\r\n this.absoluteBtns = r;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n this.footBtnLoading = false;\r\n this.boxLoading = false;\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n dynamicStyle() {\r\n \t\t\treturn { '--dynamic-ctx-height': this.dynamicMaxHeight }\r\n\t\t\t},\r\n attachShow() {\r\n let sign = false;\r\n let annex = \"\";\r\n switch (this.operationLabel) {\r\n case \"退回\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"办理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"处理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"同意\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"拒绝\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"加签\":\r\n annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"转办\":\r\n annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n }\r\n // 校验自定义按钮\r\n let temp = \"\";\r\n if (typeof annex != \"string\" && annex != null) {\r\n annex.map((item) => {\r\n if (item.indexOf(this.operationLabel) != -1) {\r\n sign = true;\r\n temp = item;\r\n }\r\n });\r\n }\r\n if (temp) annex = temp;\r\n\r\n // 解析数据\r\n if (sign) {\r\n this.attachRule.required = annex.split(\";\")[1] == \"true\";\r\n this.attachRule.limit =\r\n annex.split(\";\")[2] == -1 ? 999 : annex.split(\";\")[2];\r\n }\r\n\r\n return sign;\r\n },\r\n },\r\n};\r\n</script>\r\n<!-- <style >\r\n.demo-tabs {\r\n position: relative;\r\n .el-tabs__header {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n}\r\n</style> -->\r\n\r\n<style scoped lang=\"scss\">\r\n.operation-box {\r\n max-height: var(--dynamic-ctx-height);\r\n overflow: auto;\r\n padding-right: 20px;\r\n}\r\n.el-dropdown-menu__item {\r\n min-width: 140px;\r\n border-bottom: 1px solid #e8e8e8;\r\n .el-button--text {\r\n color: #333 !important;\r\n }\r\n &:hover {\r\n .el-button--text {\r\n color: #1389ff !important;\r\n }\r\n }\r\n &:last-child {\r\n border: none !important;\r\n }\r\n}\r\n.el-dropdown-menu {\r\n padding-bottom: 30px;\r\n}\r\n.mianContent {\r\n & > .tabs {\r\n & > .demo-tabs {\r\n & > ::v-deep .el-tabs__header {\r\n position: sticky;\r\n top: -20px;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.top-tabs {\r\n position: fixed;\r\n top: 62px;\r\n background-color: #fff;\r\n right: 0px;\r\n z-index: 1997;\r\n}\r\n.mianContent {\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n // margin-top: 20px;\r\n // padding-top: 20px;\r\n // width: 100%;\r\n /* // margin-bottom: 10px; */\r\n // overflow: hidden;\r\n .demo-tabs {\r\n flex: 1;\r\n height: 0;\r\n // height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ::v-deep .el-tabs__content {\r\n flex: 1;\r\n height: 0;\r\n &::-webkit-scrollbar {\r\n width: 0;\r\n }\r\n }\r\n ::v-deep .el-tab-pane {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n &.pane-流程图 {\r\n .bpmn-look {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.mianContent .rowtitle {\r\n /* margin-top: 24px; */\r\n margin-bottom: 16px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n border-left: 4px solid #1389ff;\r\n padding-left: 9px;\r\n}\r\n\r\n.mianContent .topCard {\r\n overflow: hidden;\r\n /* // border: 1px solid #DADBDE; */\r\n}\r\n\r\n.mianContent .topCard .topRow {\r\n display: flex;\r\n /* // line-height: 46px; */\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 32px;\r\n}\r\n\r\n.mianContent .topCard .topRow div:first-child {\r\n color: #333333;\r\n}\r\n\r\n.mianContent .topCard .topRow div:last-child {\r\n color: #777777;\r\n padding-left: 10px;\r\n}\r\n\r\n.mianContent .topCard .topRow div.process-mliv-dd {\r\n /* // height: 26px; */\r\n min-width: 30px;\r\n padding: 0px 16px;\r\n border-radius: 4px;\r\n background: #1389ff;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n margin-left: 10px;\r\n}\r\n\r\n.mianContent .tabs {\r\n /* // margin-bottom: 60px; */\r\n height: 0;\r\n flex: 1;\r\n overflow: visible !important;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.mianContent .tabs :deep(.is-active) {\r\n font-size: 16px;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content) {\r\n// height: calc(100% - 55px);\r\n// /* 修改BUGID:1003401 */\r\n// overflow: auto;\r\n// }\r\n.mianContent .tabs :deep(.el-tabs__header) {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content)::-webkit-scrollbar {\r\n// width: 0;\r\n// }\r\n\r\n.mianContent .topBtnRow {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n height: 100%;\r\n}\r\n\r\n.mianContent .footBtnRow {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n box-sizing: border-box;\r\n // height: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n right: 20px;\r\n height: 50px;\r\n border-top: 1px solid #dadbde;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n z-index: 1001;\r\n .el-button {\r\n min-width: 74px;\r\n height: 36px;\r\n border-radius: 6px;\r\n }\r\n}\r\n\r\n.formInput {\r\n width: 90%;\r\n}\r\n\r\n.dialog :deep(.el-dialog__header) {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n}\r\n\r\n.dialog ::v-deep.el-dialog__body {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n padding-right: 10px;\r\n}\r\n\r\n.dialog :deep(.el-dialog__footer) {\r\n padding: 12px;\r\n text-align: center;\r\n}\r\n.dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n}\r\n\r\n.dialog {\r\n .el-dialog__body {\r\n padding: 45px 30px;\r\n }\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n.view-file {\r\n color: #1389ff;\r\n cursor: pointer;\r\n}\r\n.view-node-info {\r\n cursor: pointer;\r\n color: #1389ff;\r\n margin-left: 34px;\r\n font-size: 16px;\r\n}\r\n.iconsR {\r\n cursor: pointer;\r\n transform: rotate(90deg);\r\n}\r\n::v-deep .task .el-radio-group {\r\n .el-radio--small.is-bordered {\r\n margin: 0 20px;\r\n }\r\n .el-radio.is-bordered + .el-radio.is-bordered {\r\n margin: 5px 20px;\r\n }\r\n}\r\n.sign-img {\r\n width: 60px;\r\n height: 60px;\r\n}\r\n</style>\r\n"]}, media: undefined });
9091
9113
 
9092
9114
  };
9093
9115
  /* scoped */
9094
- const __vue_scope_id__$5 = "data-v-521a403c";
9116
+ const __vue_scope_id__$5 = "data-v-1d1b7390";
9095
9117
  /* module identifier */
9096
9118
  const __vue_module_identifier__$5 = undefined;
9097
9119
  /* functional template */
package/vue2/index.umd.js CHANGED
@@ -62,6 +62,29 @@
62
62
  type: "post"
63
63
  };
64
64
  return ajax(ajaxObj);
65
+ },
66
+ // 撤销
67
+ chexiao(taskId) {
68
+ let ajaxObj = {
69
+ url: proxyStrV2 + "/tis/withdrawTask",
70
+ param: {
71
+ withdrawType: 'wf_withdraw_end',
72
+ taskId: taskId
73
+ },
74
+ type: "post"
75
+ };
76
+ return ajax(ajaxObj);
77
+ },
78
+ // 催办
79
+ cuiban(processInsId) {
80
+ let ajaxObj = {
81
+ url: proxyStrV2 + "/tis/reminders",
82
+ param: {
83
+ processInsId
84
+ },
85
+ type: "get"
86
+ };
87
+ return ajax(ajaxObj);
65
88
  }
66
89
  },
67
90
  /**
@@ -390,10 +413,13 @@
390
413
  /**
391
414
  * 撤销,撤回:/blade-workflow/tis/withdrawTask
392
415
  */
393
- withdrawTask(param) {
416
+ withdrawTask(taskId) {
394
417
  let ajaxObj = {
395
418
  url: proxyStrV2 + "/tis/withdrawTask",
396
- param,
419
+ param: {
420
+ withdrawType: 'wf_withdraw_end',
421
+ taskId: taskId
422
+ },
397
423
  type: "post"
398
424
  };
399
425
  return ajax(ajaxObj);
@@ -8258,10 +8284,7 @@
8258
8284
  })
8259
8285
  .then(() => {
8260
8286
  api$1.tis
8261
- .withdrawTask({
8262
- taskId: this.absoluteTaskId,
8263
- withdrawType: 'wf_withdraw_end',
8264
- })
8287
+ .withdrawTask(this.absoluteTaskId)
8265
8288
  .then((res) => {
8266
8289
  if (res.code == apiCode.success) {
8267
8290
  elementUi.Message.success("操作成功");
@@ -8284,8 +8307,7 @@
8284
8307
  type: "warning",
8285
8308
  })
8286
8309
  .then(() => {
8287
- console.log(this.ProcessInsObj);
8288
- api$1.tis.reminders(this.processData.processInstanceId).then((res) => {
8310
+ api$1.tis.reminders(this.processData.process.processInstanceId).then((res) => {
8289
8311
  if (res.code == apiCode.success) {
8290
8312
  elementUi.Message.success("操作成功");
8291
8313
  this.$emit("Complete");
@@ -9080,11 +9102,11 @@
9080
9102
  /* style */
9081
9103
  const __vue_inject_styles__$5 = function (inject) {
9082
9104
  if (!inject) return
9083
- inject("data-v-521a403c_0", { source: "@charset \"UTF-8\";\n.operation-box[data-v-521a403c] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-521a403c] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-521a403c] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-521a403c] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-521a403c]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-521a403c] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-521a403c] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-521a403c] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-521a403c] {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs[data-v-521a403c] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-521a403c] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-521a403c] {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n.mianContent .topCard[data-v-521a403c] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-521a403c] {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n.mianContent .topCard .topRow div[data-v-521a403c]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-521a403c]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-521a403c] {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n.mianContent .tabs[data-v-521a403c] {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n.mianContent .tabs[data-v-521a403c] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-521a403c] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-521a403c] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-521a403c] {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button[data-v-521a403c] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-521a403c] {\n width: 90%;\n}\n.dialog[data-v-521a403c] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-521a403c] .el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n.dialog[data-v-521a403c] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-521a403c] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-521a403c] :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n.dialog .el-dialog__body[data-v-521a403c] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-521a403c] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-521a403c] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-521a403c] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-521a403c] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-521a403c] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-521a403c] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-521a403c] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-521a403c] {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["index.vue","C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\index.vue"],"names":[],"mappings":"AAAA,gBAAgB;ACm4ChB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;ADj4CA;ACm4CA;EACA,gBAAA;EACA,gCAAA;ADh4CA;ACi4CA;EACA,sBAAA;AD/3CA;ACk4CA;EACA,yBAAA;ADh4CA;ACm4CA;EACA,uBAAA;ADj4CA;ACo4CA;EACA,oBAAA;ADj4CA;ACs4CA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;ADn4CA;ACy4CA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;ADt4CA;ACw4CA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;ADx4CA;AC04CA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;ADz4CA;AC04CA;EACA,OAAA;EACA,SAAA;ADx4CA;ACy4CA;EACA,QAAA;ADv4CA;AC04CA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;ADx4CA;AC04CA;EACA,SAAA;EACA,OAAA;ADx4CA;AC+4CA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;AD74CA;ACg5CA;EACA,gBAAA;EACA,kCAAA;AD74CA;ACg5CA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;AD74CA;ACg5CA;EACA,cAAA;AD74CA;ACg5CA;EACA,cAAA;EACA,kBAAA;AD74CA;ACg5CA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;AD74CA;ACg5CA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;AD74CA;ACg5CA;EACA,eAAA;AD74CA;ACq5CA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;ADl5CA;ACy5CA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;ADt5CA;ACy5CA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EAEA,eAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;EACA,gBAAA;EACA,sBAAA;EACA,aAAA;ADv5CA;ACw5CA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;ADt5CA;AC05CA;EACA,UAAA;ADv5CA;AC05CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;ADv5CA;AC05CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;ADv5CA;AC05CA;EACA,aAAA;EACA,kBAAA;ADv5CA;AC05CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ADv5CA;AC25CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;ADx5CA;AC45CA;EACA,kBAAA;ADz5CA;AC25CA;EACA,wBAAA;EACA,kBAAA;ADz5CA;AC25CA;EACA,SAAA;EACA,WAAA;ADz5CA;AC45CA;EACA,cAAA;EACA,eAAA;ADz5CA;AC25CA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ADx5CA;AC05CA;EACA,eAAA;EACA,wBAAA;ADv5CA;AC05CA;EACA,cAAA;ADv5CA;ACy5CA;EACA,gBAAA;ADv5CA;AC05CA;EACA,WAAA;EACA,YAAA;ADv5CA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["@charset \"UTF-8\";\n.operation-box {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n\n.el-dropdown-menu__item {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item:last-child {\n border: none !important;\n}\n\n.el-dropdown-menu {\n padding-bottom: 30px;\n}\n\n.mianContent > .tabs > .demo-tabs > ::v-deep .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n\n.top-tabs {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n\n.mianContent {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n\n.mianContent .rowtitle {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n\n.mianContent .topCard {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n\n.mianContent .topCard .topRow {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n\n.mianContent .topCard .topRow div:first-child {\n color: #333333;\n}\n\n.mianContent .topCard .topRow div:last-child {\n color: #777777;\n padding-left: 10px;\n}\n\n.mianContent .topCard .topRow div.process-mliv-dd {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n\n.mianContent .tabs {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n\n.mianContent .tabs :deep(.is-active) {\n font-size: 16px;\n}\n\n.mianContent .tabs :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n\n.mianContent .topBtnRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n.mianContent .footBtnRow {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n\n.formInput {\n width: 90%;\n}\n\n.dialog :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n\n.dialog ::v-deep.el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n\n.dialog :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n\n.dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n\n.dialog .el-dialog__body {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n.view-file {\n color: #1389ff;\n cursor: pointer;\n}\n\n.view-node-info {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n\n.iconsR {\n cursor: pointer;\n transform: rotate(90deg);\n}\n\n::v-deep .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n::v-deep .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n\n.sign-img {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */","<template>\r\n <div\r\n class=\"mianContent\"\r\n v-loading=\"boxLoading && !isButton\"\r\n ref=\"mianContent\"\r\n :style=\"{\r\n // height:\r\n // activeName == '流程图'\r\n // ? '100%'\r\n // : $refs['footBtnRow']\r\n // ? `calc(100% - 50px)`\r\n // : ' 100%',\r\n // overflow: activeName == '流程图' ? 'hidden !important' : 'auto',\r\n }\"\r\n >\r\n <template v-if=\"!isButton\">\r\n <div class=\"tabs\" ref=\"baseTabs\">\r\n <el-tabs\r\n v-model=\"activeName\"\r\n class=\"demo-tabs\"\r\n @tab-click=\"handleClick\"\r\n >\r\n <el-tab-pane\r\n :label=\"item.name\"\r\n :name=\"item.slot || item.name\"\r\n v-for=\"(item, index) in tabs\"\r\n :key=\"index\"\r\n :item=\"item\"\r\n :class=\"['pane-' + item.name]\"\r\n >\r\n <template v-if=\"item.name == '基本信息' && !item.slot\">\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '流程图' && !item.slot\">\r\n <div class=\"view-node-info\" @click=\"getNodeList\">\r\n 查看流程节点信息\r\n </div>\r\n <iframe\r\n v-if=\"trackUrl\"\r\n :src=\"trackUrl\"\r\n style=\"width: 100%; height: 100%; border: none\"\r\n :style=\"{ height: `${iframeHeight}px` }\"\r\n scrolling=\"no\"\r\n frameborder=\"0\"\r\n :key=\"processId\"\r\n ></iframe>\r\n <!-- 展示条件需要同时满足v-if -->\r\n <bpmnLook v-if=\"activeName == '流程图' && processData.process && processData.process.xml\" :approvalData=\"processData.flow\" :diagram=\"processData.process.xml\"></bpmnLook>\r\n <div\r\n v-else\r\n style=\"\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无流程图\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '审批记录' && !item.slot\">\r\n <processFlow v-if=\"activeName == '审批记录' && processData.flow\" :flow-list=\"processData.flow\"></processFlow>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot\r\n v-if=\"item.slot\"\r\n :name=\"item.slot\"\r\n :taskNode=\"getTaskNode()\"\r\n ></slot>\r\n <slot v-else name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n <!-- <el-tab-pane label=\"流程图\" name=\"2\" style=\"height: 100%\">\r\n </el-tab-pane> -->\r\n <!-- <el-tab-pane label=\"审批记录\" name=\"3\">\r\n <el-table\r\n :data=\"taskCommentList\"\r\n border\r\n style=\"width: 100%; margin-bottom: 20px\"\r\n v-if=\"taskCommentList && taskCommentList.length > 0\"\r\n >\r\n <el-table-column type=\"index\" width=\"80\" label=\"序号\" />\r\n <el-table-column\r\n prop=\"activityName\"\r\n label=\"节点名称\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"createUserName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"actionName\"\r\n label=\"审批操作\"\r\n ></el-table-column>\r\n <el-table-column prop=\"msg\" label=\"审批意见\">\r\n <template #default=\"scope\">\r\n <div v-html=\"scope.row.msg\"></div>\r\n <el-popover\r\n placement=\"bottom-end\"\r\n :width=\"500\"\r\n trigger=\"click\"\r\n v-if=\"scope.row.metaAnnexList.length > 0\"\r\n >\r\n <template #reference>\r\n <div class=\"view-file\">查看附件</div>\r\n </template>\r\n <ViewFile\r\n v-if=\"scope.row.metaAnnexList\"\r\n :dataList=\"scope.row.metaAnnexList\"\r\n />\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column\r\n prop=\"createDate\"\r\n label=\"审批时间\"\r\n ></el-table-column>\r\n </el-table>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </el-tab-pane> -->\r\n </el-tabs>\r\n </div>\r\n </template>\r\n <!-- 底部按钮 -->\r\n <processBtns\r\n :loading=\"submitLoading\"\r\n :button-list=\"processData.button\"\r\n :process=\"processData.process\"\r\n :comment=\"comment\"\r\n @draft=\"handleDraft({ taskId: process.taskId, variables: form })\"\r\n @examine=\"handleExamine\"\r\n @user-select=\"handleUserSelect\"\r\n @print=\"handlePrint\"\r\n @rollback=\"handleRollbackTask\"\r\n @terminate=\"handleTerminateProcess\"\r\n @withdraw=\"handleWithdrawTask\"\r\n @reminders=\"handleReminders\"\r\n ></processBtns>\r\n <div class=\"dialog\">\r\n <el-dialog\r\n :visible.sync=\"dialogVisibleOperation\"\r\n append-to-body\r\n class=\"dialog\"\r\n width=\"600px\"\r\n v-dialogDrag\r\n :title=\"operationLabel\"\r\n :close-on-click-modal=\"false\"\r\n :show-close=\"!isOperLoading\"\r\n top=\"6vh\" :style=\"dynamicStyle\"\r\n >\r\n <div class=\"operation-box\" ref=\"obRef\">\r\n <component\r\n v-if=\"dialogVisibleOperation\"\r\n ref=\"operationRef\"\r\n :is=\"operationCom\"\r\n :param=\"operationParam\"\r\n @success=\"operationSuccess\"\r\n @fail=\"operationFail\"\r\n :isOperLoading=\"isOperLoading\"\r\n >\r\n <template #form>\r\n <slot :name=\"aftClickBtn.slot\" v-if=\"aftClickBtn.slot\"></slot>\r\n </template>\r\n <template #file>\r\n <el-form\r\n label-width=\"120px\"\r\n status-icon\r\n v-if=\"attachShow\"\r\n @submit.native.prevent\r\n :rules=\"rules\"\r\n >\r\n <el-form-item\r\n label=\"附件\"\r\n :prop=\"attachRule.required ? 'attach' : ''\"\r\n >\r\n <jyr-file-upload\r\n v-model=\"attach\"\r\n :multiple=\"attachRule.limit > 0\"\r\n :limit=\"attachRule.limit\"\r\n fullFileObject\r\n showFileName\r\n ref=\"fileUpload\"\r\n />\r\n </el-form-item>\r\n </el-form>\r\n </template>\r\n </component>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button\r\n v-loading\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n :loading=\"isOperLoading\"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click=\"dialogVisibleOperation = false\"\r\n :loading=\"isOperLoading\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n <!-- 选择任务 -->\r\n <el-dialog\r\n title=\"选择处理任务\"\r\n :visible.sync=\"showMulTask\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n width=\"500px\"\r\n :show-close=\"false\"\r\n >\r\n <el-form ref=\"form\" label-width=\"100px\" class=\"task\">\r\n <el-form-item label=\"请选择:\" prop=\"content\">\r\n <el-radio-group v-model=\"mulTaskTaskId\" size=\"small\">\r\n <el-radio\r\n v-for=\"item in mulTaskList\"\r\n :key=\"item.nodeId\"\r\n :label=\"item.taskId\"\r\n border\r\n >{{ item.nodeName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"onCheckSure\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"nodeInfoVisible\"\r\n append-to-body\r\n width=\"600px\"\r\n title=\"流程节点信息\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n v-dialogDrag\r\n >\r\n <el-table :data=\"filterFlow(processData.flow)\" border>\r\n <el-table-column\r\n label=\"序号\"\r\n type=\"index\"\r\n width=\"120px\"\r\n ></el-table-column>\r\n <el-table-column prop=\"historyActivityName\" label=\"节点名称\"></el-table-column>\r\n <!-- <el-table-column prop=\"type\" label=\"类型\"></el-table-column> -->\r\n <el-table-column\r\n prop=\"assigneeName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n </el-table>\r\n </el-dialog>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Message as ElMessage, MessageBox as ElMessageBox } from \"element-ui\";\r\nimport treeselect from \"@riophae/vue-treeselect\";\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\";\r\nimport api from \"./api\";\r\nimport * as $enum from \"./enum\";\r\nimport staffTree from \"./staff-tree.vue\";\r\nimport ViewFile from \"./view-file.vue\";\r\nimport * as operation from \"./operation/index.js\";\r\nimport JyrFileUpload from \"../JyrFileUpload/index\";\r\nimport processBtns from \"./operation/processBtns.vue\";\r\nimport processFlow from \"./operation/processFlow.vue\";\r\nimport bpmnLook from './bpmnLook.vue';\r\nimport dayjs from \"dayjs\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { bpmnLook, processBtns, processFlow, treeselect, staffTree, ...operation, ViewFile, JyrFileUpload },\r\n props: {\r\n /** 流程实例id */\r\n taskId: {\r\n // require: true,\r\n default: false,\r\n type: String,\r\n },\r\n processId: {\r\n require: true,\r\n default: false,\r\n type: String,\r\n },\r\n // processDefId: {\r\n // require: false,\r\n // default: false,\r\n // type: String,\r\n // },\r\n userId: { require: true, default: \"\", type: String },\r\n // task: {\r\n // default: false,\r\n // type: Object,\r\n // },\r\n showBtns: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n isView: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n getVars: { type: Function },\r\n before: { type: Function },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isAdditional: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n businessData: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n excludeBtn: {\r\n type: String,\r\n default: \"\",\r\n },\r\n showAsPlanned: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showCommIdea: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n commentMsgRequired: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n customBtn: {\r\n default: \"\",\r\n },\r\n tabs: {\r\n default: () => [\r\n {\r\n name: \"基本信息\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"流程图\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"审批记录\",\r\n slot: \"\",\r\n },\r\n ],\r\n },\r\n personType: {\r\n default: \"\",\r\n },\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n isButton: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n provide() {\r\n return {\r\n isAlisInject: this.isAlis,\r\n };\r\n },\r\n // emits: ['update:modelValue', \"getData\", \"change\", \"changeGetData\"],\r\n data() {\r\n return {\r\n // 流程信息\r\n deptId: '',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n processData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n submitLoading: false,\r\n flowChartVisible: false,\r\n comment: null,\r\n // 流程信息\r\n dynamicMaxHeight: '400px',\r\n showMulTask: false,\r\n mulTaskList: [],\r\n mulTaskTaskId: \"\",\r\n attach: [],\r\n customBtns: [],\r\n overheight: 10,\r\n iframeHeight: 500,\r\n mainWidth: 0,\r\n absoluteTaskId: \"\",\r\n infoView: false,\r\n showTopTabs: false,\r\n buttonLoading: false,\r\n footBtnLoading: true,\r\n tabheight: 400,\r\n aftClickBtn: \"\",\r\n attachRule: {\r\n required: true,\r\n limit: 0,\r\n },\r\n nodeInfoVisible: false,\r\n nodeInfoList: [],\r\n jjForm: {\r\n saveMetaAnnexCmdList: [],\r\n },\r\n targetUID: \"\",\r\n commentMsg: \"\",\r\n trackUrl: \"\",\r\n taskObj: {},\r\n taskCommentList: [],\r\n absoluteBtns: { inside: [], outside: [] },\r\n processStatus: \"\",\r\n nextTaskNode: [],\r\n activeName: \"基本信息\",\r\n ProcessInsObj: {},\r\n outGatewayUserTaskModel: [],\r\n dialogVisibleOperation: false,\r\n operationLabel: \"\",\r\n operationCom: {},\r\n operationParam: {},\r\n taskNode: [],\r\n aftTaskNode: {},\r\n operation,\r\n Enum: $enum,\r\n isOperLoading: false,\r\n boxLoading: false,\r\n rules: {\r\n attach: [{ required: true, trigger: \"change\" }],\r\n },\r\n\t noReload: false,\r\n digitalSignatureList: []\r\n };\r\n },\r\n mounted() {\r\n window.onresize = () => {\r\n return (() => {\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n })();\r\n };\r\n },\r\n watch: {\r\n activeName: function (n) {\r\n if (n == 1) this.activeName = \"基本信息\";\r\n },\r\n infoView: function () {\r\n this.calculateHeight();\r\n },\r\n taskId: {\r\n handler(val) {\r\n if (!val) return;\r\n this.absoluteTaskId = val;\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n processId: {\r\n handler(val) {\r\n if (val) {\r\n this.customBtns = [];\r\n this.absoluteBtns = { inside: [], outside: [] };\r\n this.activeName = this.tabs.length > 0 ? this.tabs[0][\"name\"] : \"\";\r\n // 获取流程节点,流程图,流程实例,流程审批\r\n this.getProcessInfo()\r\n if (Date.now()) return;\r\n\r\n api.repository.queryTaskNodeList(this.processId).then((e) => {\r\n\t\t\t if(!this.noReload){\r\n\t\t\t\t this.noReload = false\r\n\t\t\t\t if (!this.absoluteTaskId && e.data.length > 1) {\r\n\t\t\t\t this.mulTaskList = e.data;\r\n\t\t\t\t this.showMulTask = true;\r\n\t\t\t\t return;\r\n\t\t\t\t } else {\r\n\t\t\t\t this.absoluteTaskId =\r\n\t\t\t\t e.data && e.data.length > 0 ? e.data[0][\"taskId\"] : \"\";\r\n\t\t\t\t this.aftTaskNode = e.data[0];\r\n\t\t\t\t }\r\n\t\t\t }\r\n\r\n console.log(\"======\", this.absoluteTaskId);\r\n if (e.code == $enum.apiCode.success) {\r\n this.taskNode = e.data;\r\n api.pis\r\n .getProcessStatus(this.processId, this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.processStatus = res.data;\r\n if (this.absoluteTaskId) {\r\n api.repository\r\n .getUserTaskModelCmd(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.taskObj = res.data;\r\n this.straightenBtns();\r\n }\r\n });\r\n } else {\r\n this.straightenBtns();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n api.repository\r\n .getTrackUrl({ processInstId: val, type: $enum.SourceType.电脑端 })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n }\r\n });\r\n api.tis.getTaskCommentList(this.processId, \"\").then((res) => {\r\n this.taskCommentList = res.data;\r\n this.digitalSignatureList = res.data.filter(item => item.digitalSignature).map(item => item.digitalSignature)\r\n });\r\n api.pis.getProcessInstanceById(this.processId).then((res) => {\r\n this.ProcessInsObj = res.data;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n });\r\n\r\n // api.repository.queryTaskNodeList(this.processId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) this.taskNode = res.data;\r\n // });\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n absoluteTaskId: {\r\n handler(val) {\r\n if (val) {\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n dialogVisibleOperation: {\r\n handler(val) {\r\n this.$emit(\"show-modal\", val);\r\n },\r\n },\r\n },\r\n methods: {\r\n // 流程\r\n filterFlow(flowArr) {\r\n return flowArr.filter((item) => {\r\n return ['userTask', 'candidate'].includes(item.historyActivityType)\r\n });\r\n },\r\n getProcessInfo() {\r\n this.submitLoading = true\r\n this.boxLoading = true;\r\n\r\n api.tis.getTaskModelDetail(this.taskId ? {\r\n processInsId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInsId: this.processId,\r\n }).then(async res => {\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n console.log(this.processData.flow, 'flw')\r\n this.flowChartVisible = true\r\n this.submitLoading = false\r\n this.boxLoading = false\r\n }\r\n })\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n handleDraft() {\r\n this.submitLoading = true;\r\n },\r\n // 提交(办理)true、取消申请 false\r\n handleExamine(flag, name) {\r\n console.log(flag, 'flag')\r\n if (flag) {\r\n this.handlePass(name)\r\n } else {\r\n this.handleCancel(name)\r\n }\r\n this.submitLoading = true;\r\n },\r\n // 办理\r\n async handlePass(name) {\r\n if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n }\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, name);\r\n }\r\n },\r\n // 取消申请\r\n handleCancel(name) {\r\n this.showOperation(operation.cancel, name);\r\n },\r\n // 转办transfer,委托delegate,addInstance\r\n handleUserSelect({ type, checkType, name}) {\r\n if (type == 'transfer') {\r\n this.handleTransfer(name)\r\n }\r\n else if (type == 'addInstance') {\r\n this.handleAddInstance(name)\r\n }\r\n console.log('handleUserselect')\r\n },\r\n // 转办\r\n handleTransfer(name) {\r\n this.showOperation(operation.delegateTask, name);\r\n },\r\n // 加签\r\n handleAddInstance(name) {\r\n this.showOperation(operation.counterSign, name);\r\n },\r\n handlePrint() {\r\n console.log('handlePrint')\r\n },\r\n handleRollbackTask(name) {\r\n console.log('handleRollbackTask')\r\n this.showOperation(operation.roolback, name);\r\n },\r\n handleTerminateProcess() {\r\n console.log('handleTerminateProcess')\r\n },\r\n // 撤销,撤回\r\n handleWithdrawTask(name) {\r\n console.log('handleWithdrawTask')\r\n this.handleRevoke();\r\n // this.showOperation(operation.withdrawTask, '请选择撤销/撤回操作');\r\n },\r\n // 流程\r\n findTargetHtml(startNode, targetClass, searchKey = 'parentElement') {\r\n\t\t\t\tif (!startNode) return null\r\n \t\t\tif (startNode.classList.contains(targetClass)) {\r\n \t\t\treturn startNode\r\n \t\t\t}\r\n \t\t\tlet curEl = startNode[searchKey]\r\n \t\t\tif (!curEl) return null\r\n \t\t\tif (searchKey == 'children') {\r\n \t\t\tfor (let i = 0; i <= curEl.length - 1; i++) {\r\n \t\t\tif (curEl[i].classList.contains(targetClass)) {\r\n \t\t\treturn curEl[i]\r\n \t\t\t}\r\n \t\t\t}\r\n \t\t\treturn\r\n \t\t\t}\r\n \t\t\treturn this.findTargetHtml(curEl, targetClass)\r\n\t\t\t},\r\n findImageIndex(item){\r\n return item ? this.digitalSignatureList.findIndex(i => i == item) : -1\r\n },\r\n onCheckSure() {\r\n this.absoluteTaskId = this.mulTaskTaskId;\r\n this.mulTaskList.map((item) => {\r\n if (item.taskId == this.mulTaskTaskId) {\r\n this.aftTaskNode = item;\r\n }\r\n });\r\n\t this.noReload = true\r\n this.showMulTask = false;\r\n this.footBtnLoading = true;\r\n let temp = this.processId;\r\n this.processId = \"\";\r\n this.processId = temp;\r\n },\r\n showButtonLoading() {\r\n this.buttonLoading = true;\r\n },\r\n hideButtonLoading() {\r\n this.buttonLoading = false;\r\n },\r\n calculateHeight() {\r\n let h = 0;\r\n if (this.$refs[\"footBtnRow\"]) {\r\n h += this.$refs[\"footBtnRow\"].offsetHeight;\r\n }\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n if (this.infoView && this.absoluteBtns.outside.length > 0) {\r\n h += 32;\r\n }\r\n if (this.$refs[\"infoBoxFign\"]) {\r\n let windowHeight =\r\n window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n this.tabheight =\r\n windowHeight - this.$refs[\"infoBoxFign\"].offsetTop - 192;\r\n }\r\n this.overheight = h + 116;\r\n this.iframeHeight = this.$refs[\"mianContent\"].offsetHeight - 146;\r\n },\r\n getNodeList() {\r\n this.nodeInfoVisible = true;\r\n // api.pis.findNodeParticipantRows(this.processId).then((e) => {\r\n \r\n // e.data.map((item) => {\r\n // if (item.type == \"串签\" || item.type == \"并签\") {\r\n // item[\"name\"] += `【${item.type}】`;\r\n // }\r\n // });\r\n // this.nodeInfoList = e.data;\r\n // });\r\n },\r\n fileNameLastof(e, len = 0) {\r\n if (e.indexOf(\"http\") == -1) len = 0;\r\n if (!e) return;\r\n let last = \"/\";\r\n if (e.indexOf(\"\\\\\") != -1) {\r\n last = \"\\\\\";\r\n }\r\n //整理文件名\r\n let filename = e;\r\n let lastindex = filename.lastIndexOf(last);\r\n return filename.substr(lastindex + 1 + len, filename.length);\r\n },\r\n clickCustomButton(name) {\r\n this.$emit(\"clickCustomButton\", {\r\n name,\r\n processStatus: this.processStatus,\r\n setName: (label) => {\r\n this.taskObj.buttons.map((item) => {\r\n if (item.label == name) {\r\n item.label = label;\r\n }\r\n });\r\n this.straightenBtns();\r\n },\r\n });\r\n },\r\n // 获取下一个节点数据\r\n async getNextNode(deptId) {\r\n let res1\r\n try {\r\n res1 = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n );\r\n } catch (e) {\r\n console.error(e)\r\n res1 = {}\r\n }\r\n const nextTaskNode = res1.data || {};\r\n console.log(nextTaskNode, 'next')\r\n if (nextTaskNode.id && !nextTaskNode.setPersonnel) {\r\n const nodeUserParams = getNodeUserParams(nextTaskNode)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n // 需要传入部门id\r\n deptId: deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextTaskNode.userList = res.data\r\n }\r\n }\r\n this.nextTaskNode = nextTaskNode\r\n console.log(nextTaskNode, 'getNextNode')\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n async showOperation(com, label) {\r\n this.attach = [];\r\n if (false && this.processStatus.allUserNames.length > 0) {\r\n if (this.absoluteTaskId) {\r\n let vars;\r\n if (this.getVars) {\r\n vars = this.getVars();\r\n if (vars === false) {\r\n return false;\r\n }\r\n }\r\n let res = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n vars\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n for (var i in res.data) {\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"固定账户\" ||\r\n res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(this.absoluteTaskId, [\r\n res.data[i].id,\r\n ])\r\n .then((e) => {\r\n res.data[i].userTaskModelDTO.routeTxt[\"userNames\"] =\r\n e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n this.nextTaskNode = res.data;\r\n } else {\r\n this.nextTaskNode = [];\r\n this.outGatewayUserTaskModel = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n \"\"\r\n );\r\n }\r\n }\r\n }\r\n this.operationLabel = label;\r\n // this.operationParam = new operation.PorpParam(\"\", this.processId, this.processDefId, this.task.id, this.task.activityDefId);\r\n this.operationParam.processInstId = this.processId;\r\n // this.operationParam.processDefId = this.processDefId;\r\n this.operationParam.taskInstId = this.absoluteTaskId;\r\n // this.operationParam.taskDeftId = this.task.activityDefId;\r\n this.operationParam.nextTaskNode = this.nextTaskNode;\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.taskObj = this.taskObj;\r\n this.operationParam.getVars = this.getVars;\r\n this.operationParam.outGatewayUserTaskModel =\r\n this.outGatewayUserTaskModel;\r\n this.operationParam.taskNode = this.getTaskNode();\r\n this.operationParam.businessData = this.businessData;\r\n this.operationParam.showAsPlanned = this.showAsPlanned;\r\n this.operationParam.showCommIdea = this.showCommIdea;\r\n this.operationParam.commentMsgRequired = this.commentMsgRequired;\r\n this.operationParam.personType = this.personType;\r\n this.operationParam.personEntity = {\r\n ...this.personEntity,\r\n ...(this.aftClickBtn.personEntity || {}),\r\n };\r\n this.operationParam.ProcessInsObj = this.ProcessInsObj;\r\n this.operationCom = com;\r\n this.dialogVisibleOperation = true;\r\n this.$nextTick(() => {\r\n \t\tlet ctnEl = this.$refs.obRef\r\n\t\t\t\tconsole.log(ctnEl, this.$refs);\r\n \t\tif (!ctnEl) return \r\n \t\tlet topDistance = ctnEl.getBoundingClientRect().top\r\n \t\tlet dialogEl = this.findTargetHtml(ctnEl, 'el-dialog')\r\n \t\tlet dialogFootEl = this.findTargetHtml(dialogEl, 'el-dialog__footer', 'children')\r\n \t\t// 视口高度 - margin - head - footer\r\n \t\tlet val = window.innerHeight - topDistance - topDistance - dialogFootEl.clientHeight - 32\r\n \t\tthis.dynamicMaxHeight = `${val}px`\r\n \t\t})\r\n },\r\n onClickOperation() {\r\n if (\r\n this.attachShow &&\r\n this.attachRule.required &&\r\n this.attach.length == 0\r\n ) {\r\n return ElMessage.error(\"请上传附件\");\r\n }\r\n if (this.aftClickBtn.preposition) {\r\n this.operationMain(this.aftClickBtn.preposition);\r\n } else {\r\n this.operationMain();\r\n }\r\n\r\n // if (this.$refs[\"fileUpload\"] && this.$refs[\"fileUpload\"].getLoading()) {\r\n // return ElMessage.error(\"请等待附件上传完成后重试\");\r\n // }\r\n },\r\n operationMain(preposition = false) {\r\n if (this.attachShow) {\r\n let saveMetaAnnexCmdList = [];\r\n this.attach.map((item) => {\r\n saveMetaAnnexCmdList.push({\r\n id: item.id,\r\n name: this.fileNameLastof(item.name),\r\n size: item.fileSize,\r\n format: item.fileType,\r\n url: item.url,\r\n uploadTime: item.createTime,\r\n processInstId: this.operationParam.processInstId,\r\n taskInstId: this.operationParam.taskInstId,\r\n });\r\n });\r\n saveMetaAnnexCmdList = saveMetaAnnexCmdList.sort((a, b) => {\r\n return dayjs(a.uploadTime).valueOf() > dayjs(b.uploadTime).valueOf();\r\n });\r\n api.tis.patchSave({\r\n saveMetaAnnexCmdList,\r\n });\r\n }\r\n\r\n if (this.$refs.operationRef) {\r\n this.$refs.operationRef.confirm(preposition, () => {\r\n this.isOperLoading = true;\r\n });\r\n }\r\n },\r\n operationSuccess(isComplete = true) {\r\n ElMessage.success(\"操作成功\");\r\n this.dialogVisibleOperation = false;\r\n // router.go(0);\r\n if (isComplete) this.$emit(\"Complete\");\r\n this.isOperLoading = false;\r\n },\r\n operationFail(msg = \"\") {\r\n msg && ElMessage.warning(msg);\r\n this.isOperLoading = false;\r\n },\r\n async getOutgoingProcessNode(taskId, processNodeId) {\r\n let res = await api.repository.getOutgoingProcessNode(\r\n taskId,\r\n processNodeId\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n if (res.data) {\r\n for (let i = 0; i < res.data.length; i++) {\r\n let o = res.data[i];\r\n if (o.type != $enum.ProcessNodeType.用户任务) {\r\n o.childNode = await this.getOutgoingProcessNode(taskId, o.id);\r\n if (o.incomingConditionItemList.length !== 0) {\r\n // o.childNode.push(o);\r\n }\r\n }\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].humanPerformerName == \"固定账户\" ||\r\n res.data[i].humanPerformerName == \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(taskId, [res.data[i].id])\r\n .then((e) => {\r\n res.data[i][\"routeTxt\"][\"userNames\"] = e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n if (res.data.length == 0) {\r\n res.data.push({\r\n id: \"\",\r\n incomingConditionItemList: [],\r\n type: \"endEvent\",\r\n name: \"结束事件\",\r\n });\r\n }\r\n }\r\n return res.data;\r\n }\r\n return [];\r\n },\r\n getColor(status) {\r\n if (status == \"审核中\" || status == \"审批中\") return \"#6DC743\";\r\n if (status == \"已驳回\") return \"#F14B4C\";\r\n if (status == \"已撤销\") return \"#CECECE\";\r\n if (status == \"已完成\") return \"#6DC743\";\r\n\r\n return \"#1389FF\";\r\n },\r\n handleClick(e) {\r\n this.$emit(\"clickTab\",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)));\r\n },\r\n getTaskNode() {\r\n if (this.taskNode.filter)\r\n return this.taskNode.filter((o) => {\r\n return o.nodeId == this.taskObj.id;\r\n });\r\n return [];\r\n },\r\n handleRevoke() {\r\n ElMessageBox.confirm(`确定撤销吗`, \"撤销\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis\r\n .withdrawTask({\r\n taskId: this.absoluteTaskId,\r\n withdrawType: 'wf_withdraw_end',\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch(() => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n handleReminders() {\r\n console.log(ElMessageBox);\r\n ElMessageBox.confirm(`确定催办吗`, \"催办\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n console.log(this.ProcessInsObj);\r\n api.tis.reminders(this.processData.processInstanceId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch((e) => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n let flag =\r\n this.taskNode &&\r\n this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.不处理;\r\n\r\n // 加签\r\n if (flag && !this.isView && this.taskObj.counterSignLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.counterSignLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"sign\";\r\n obj.click = () => {\r\n this.showOperation(operation.counterSign, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 转办\r\n if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.delegateTaskButtonLabel;\r\n obj.key = \"delegate\";\r\n obj.click = () => {\r\n this.showOperation(operation.delegateTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 传阅\r\n if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.ccTaskButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"cc\";\r\n obj.click = () => {\r\n this.showOperation(operation.ccTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 催办\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"催办\";\r\n // obj.btnProps = { color: \"#1389ff\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleReminders();\r\n };\r\n btnList.push(obj);\r\n }\r\n // 撤销\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"撤销\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleRevoke();\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (\r\n // flag &&\r\n // !this.isView &&\r\n // this.taskObj &&\r\n // this.taskObj.buttons &&\r\n // this.taskObj.buttons.find((o) => o.label == \"退回\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"退回\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"back\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.roolback, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 拒绝\r\n if (flag && !this.isView && this.processStatus.currUserName) {\r\n let obj = {};\r\n obj.name = \"拒绝\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"refuse\";\r\n obj.click = () => {\r\n this.showOperation(operation.cancel, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 办理\r\n if (flag && !this.isView && this.taskObj.completeButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.completeButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"complete\";\r\n obj.click = () => {\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, obj.name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, obj.name);\r\n }\r\n };\r\n btnList.push(obj);\r\n }\r\n // 退回\r\n if (\r\n flag &&\r\n !this.isView &&\r\n this.taskObj &&\r\n this.taskObj.buttons.length > 0\r\n ) {\r\n this.taskObj.buttons.map((item) => {\r\n let obj = {};\r\n obj.name = item.label;\r\n if (item.label == \"退回\") {\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"back\";\r\n obj.click = () => {\r\n this.showOperation(operation.roolback, obj.name);\r\n };\r\n } else {\r\n obj.btnProps = {};\r\n obj.key = item.label;\r\n obj.click = () => {\r\n this.clickCustomButton(obj.name);\r\n };\r\n }\r\n\r\n btnList.unshift(obj);\r\n });\r\n }\r\n\r\n return btnList;\r\n },\r\n straightenBtns(flag = true) {\r\n let list = [];\r\n\r\n if (this.excludeBtn) {\r\n this.operBtn().map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n } else {\r\n list = this.operBtn();\r\n }\r\n if (this.customBtns.length > 0) {\r\n list = [];\r\n this.customBtns.map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n }\r\n\r\n let r = {\r\n outside: [],\r\n inside: [],\r\n };\r\n if (list.length > 4) {\r\n r.outside = list.splice(list.length - 4, list.length - 1);\r\n r.inside = list;\r\n } else {\r\n r.outside = list;\r\n }\r\n\r\n if (flag && this.customBtn) {\r\n this.customBtn(\r\n { btnList: this.operBtn(), processStatus: this.processStatus },\r\n (e) => {\r\n this.customBtns = e;\r\n this.straightenBtns(false);\r\n },\r\n () => {\r\n this.$emit(\"Complete\");\r\n }\r\n );\r\n console.log(\"=======333\");\r\n } else {\r\n this.absoluteBtns = r;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n this.footBtnLoading = false;\r\n this.boxLoading = false;\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n dynamicStyle() {\r\n \t\t\treturn { '--dynamic-ctx-height': this.dynamicMaxHeight }\r\n\t\t\t},\r\n attachShow() {\r\n let sign = false;\r\n let annex = \"\";\r\n switch (this.operationLabel) {\r\n case \"退回\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"办理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"处理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"同意\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"拒绝\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"加签\":\r\n annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"转办\":\r\n annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n }\r\n // 校验自定义按钮\r\n let temp = \"\";\r\n if (typeof annex != \"string\" && annex != null) {\r\n annex.map((item) => {\r\n if (item.indexOf(this.operationLabel) != -1) {\r\n sign = true;\r\n temp = item;\r\n }\r\n });\r\n }\r\n if (temp) annex = temp;\r\n\r\n // 解析数据\r\n if (sign) {\r\n this.attachRule.required = annex.split(\";\")[1] == \"true\";\r\n this.attachRule.limit =\r\n annex.split(\";\")[2] == -1 ? 999 : annex.split(\";\")[2];\r\n }\r\n\r\n return sign;\r\n },\r\n },\r\n};\r\n</script>\r\n<!-- <style >\r\n.demo-tabs {\r\n position: relative;\r\n .el-tabs__header {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n}\r\n</style> -->\r\n\r\n<style scoped lang=\"scss\">\r\n.operation-box {\r\n max-height: var(--dynamic-ctx-height);\r\n overflow: auto;\r\n padding-right: 20px;\r\n}\r\n.el-dropdown-menu__item {\r\n min-width: 140px;\r\n border-bottom: 1px solid #e8e8e8;\r\n .el-button--text {\r\n color: #333 !important;\r\n }\r\n &:hover {\r\n .el-button--text {\r\n color: #1389ff !important;\r\n }\r\n }\r\n &:last-child {\r\n border: none !important;\r\n }\r\n}\r\n.el-dropdown-menu {\r\n padding-bottom: 30px;\r\n}\r\n.mianContent {\r\n & > .tabs {\r\n & > .demo-tabs {\r\n & > ::v-deep .el-tabs__header {\r\n position: sticky;\r\n top: -20px;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.top-tabs {\r\n position: fixed;\r\n top: 62px;\r\n background-color: #fff;\r\n right: 0px;\r\n z-index: 1997;\r\n}\r\n.mianContent {\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n // margin-top: 20px;\r\n // padding-top: 20px;\r\n // width: 100%;\r\n /* // margin-bottom: 10px; */\r\n // overflow: hidden;\r\n .demo-tabs {\r\n flex: 1;\r\n height: 0;\r\n // height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ::v-deep .el-tabs__content {\r\n flex: 1;\r\n height: 0;\r\n &::-webkit-scrollbar {\r\n width: 0;\r\n }\r\n }\r\n ::v-deep .el-tab-pane {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n &.pane-流程图 {\r\n .bpmn-look {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.mianContent .rowtitle {\r\n /* margin-top: 24px; */\r\n margin-bottom: 16px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n border-left: 4px solid #1389ff;\r\n padding-left: 9px;\r\n}\r\n\r\n.mianContent .topCard {\r\n overflow: hidden;\r\n /* // border: 1px solid #DADBDE; */\r\n}\r\n\r\n.mianContent .topCard .topRow {\r\n display: flex;\r\n /* // line-height: 46px; */\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 32px;\r\n}\r\n\r\n.mianContent .topCard .topRow div:first-child {\r\n color: #333333;\r\n}\r\n\r\n.mianContent .topCard .topRow div:last-child {\r\n color: #777777;\r\n padding-left: 10px;\r\n}\r\n\r\n.mianContent .topCard .topRow div.process-mliv-dd {\r\n /* // height: 26px; */\r\n min-width: 30px;\r\n padding: 0px 16px;\r\n border-radius: 4px;\r\n background: #1389ff;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n margin-left: 10px;\r\n}\r\n\r\n.mianContent .tabs {\r\n /* // margin-bottom: 60px; */\r\n height: 0;\r\n flex: 1;\r\n overflow: visible !important;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.mianContent .tabs :deep(.is-active) {\r\n font-size: 16px;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content) {\r\n// height: calc(100% - 55px);\r\n// /* 修改BUGID:1003401 */\r\n// overflow: auto;\r\n// }\r\n.mianContent .tabs :deep(.el-tabs__header) {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content)::-webkit-scrollbar {\r\n// width: 0;\r\n// }\r\n\r\n.mianContent .topBtnRow {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n height: 100%;\r\n}\r\n\r\n.mianContent .footBtnRow {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n box-sizing: border-box;\r\n // height: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n right: 20px;\r\n height: 50px;\r\n border-top: 1px solid #dadbde;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n z-index: 1001;\r\n .el-button {\r\n min-width: 74px;\r\n height: 36px;\r\n border-radius: 6px;\r\n }\r\n}\r\n\r\n.formInput {\r\n width: 90%;\r\n}\r\n\r\n.dialog :deep(.el-dialog__header) {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n}\r\n\r\n.dialog ::v-deep.el-dialog__body {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n padding-right: 10px;\r\n}\r\n\r\n.dialog :deep(.el-dialog__footer) {\r\n padding: 12px;\r\n text-align: center;\r\n}\r\n.dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n}\r\n\r\n.dialog {\r\n .el-dialog__body {\r\n padding: 45px 30px;\r\n }\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n.view-file {\r\n color: #1389ff;\r\n cursor: pointer;\r\n}\r\n.view-node-info {\r\n cursor: pointer;\r\n color: #1389ff;\r\n margin-left: 34px;\r\n font-size: 16px;\r\n}\r\n.iconsR {\r\n cursor: pointer;\r\n transform: rotate(90deg);\r\n}\r\n::v-deep .task .el-radio-group {\r\n .el-radio--small.is-bordered {\r\n margin: 0 20px;\r\n }\r\n .el-radio.is-bordered + .el-radio.is-bordered {\r\n margin: 5px 20px;\r\n }\r\n}\r\n.sign-img {\r\n width: 60px;\r\n height: 60px;\r\n}\r\n</style>\r\n"]}, media: undefined });
9105
+ inject("data-v-1d1b7390_0", { source: "@charset \"UTF-8\";\n.operation-box[data-v-1d1b7390] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-1d1b7390] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-1d1b7390] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-1d1b7390] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-1d1b7390]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-1d1b7390] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-1d1b7390] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-1d1b7390] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-1d1b7390] {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs[data-v-1d1b7390] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-1d1b7390] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-1d1b7390] {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n.mianContent .topCard[data-v-1d1b7390] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-1d1b7390] {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n.mianContent .topCard .topRow div[data-v-1d1b7390]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-1d1b7390]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-1d1b7390] {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n.mianContent .tabs[data-v-1d1b7390] {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n.mianContent .tabs[data-v-1d1b7390] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-1d1b7390] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-1d1b7390] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-1d1b7390] {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button[data-v-1d1b7390] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-1d1b7390] {\n width: 90%;\n}\n.dialog[data-v-1d1b7390] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-1d1b7390] .el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n.dialog[data-v-1d1b7390] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-1d1b7390] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-1d1b7390] :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n.dialog .el-dialog__body[data-v-1d1b7390] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-1d1b7390] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-1d1b7390] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-1d1b7390] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-1d1b7390] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-1d1b7390] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-1d1b7390] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-1d1b7390] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-1d1b7390] {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["index.vue","C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\index.vue"],"names":[],"mappings":"AAAA,gBAAgB;AC+3ChB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;AD73CA;AC+3CA;EACA,gBAAA;EACA,gCAAA;AD53CA;AC63CA;EACA,sBAAA;AD33CA;AC83CA;EACA,yBAAA;AD53CA;AC+3CA;EACA,uBAAA;AD73CA;ACg4CA;EACA,oBAAA;AD73CA;ACk4CA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;AD/3CA;ACq4CA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;ADl4CA;ACo4CA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;ADp4CA;ACs4CA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;ADr4CA;ACs4CA;EACA,OAAA;EACA,SAAA;ADp4CA;ACq4CA;EACA,QAAA;ADn4CA;ACs4CA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;ADp4CA;ACs4CA;EACA,SAAA;EACA,OAAA;ADp4CA;AC24CA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;ADz4CA;AC44CA;EACA,gBAAA;EACA,kCAAA;ADz4CA;AC44CA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;ADz4CA;AC44CA;EACA,cAAA;ADz4CA;AC44CA;EACA,cAAA;EACA,kBAAA;ADz4CA;AC44CA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;ADz4CA;AC44CA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;ADz4CA;AC44CA;EACA,eAAA;ADz4CA;ACi5CA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;AD94CA;ACq5CA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;ADl5CA;ACq5CA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EAEA,eAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;EACA,gBAAA;EACA,sBAAA;EACA,aAAA;ADn5CA;ACo5CA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;ADl5CA;ACs5CA;EACA,UAAA;ADn5CA;ACs5CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;ADn5CA;ACs5CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;ADn5CA;ACs5CA;EACA,aAAA;EACA,kBAAA;ADn5CA;ACs5CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ADn5CA;ACu5CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;ADp5CA;ACw5CA;EACA,kBAAA;ADr5CA;ACu5CA;EACA,wBAAA;EACA,kBAAA;ADr5CA;ACu5CA;EACA,SAAA;EACA,WAAA;ADr5CA;ACw5CA;EACA,cAAA;EACA,eAAA;ADr5CA;ACu5CA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ADp5CA;ACs5CA;EACA,eAAA;EACA,wBAAA;ADn5CA;ACs5CA;EACA,cAAA;ADn5CA;ACq5CA;EACA,gBAAA;ADn5CA;ACs5CA;EACA,WAAA;EACA,YAAA;ADn5CA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["@charset \"UTF-8\";\n.operation-box {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n\n.el-dropdown-menu__item {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item:last-child {\n border: none !important;\n}\n\n.el-dropdown-menu {\n padding-bottom: 30px;\n}\n\n.mianContent > .tabs > .demo-tabs > ::v-deep .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n\n.top-tabs {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n\n.mianContent {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n\n.mianContent .rowtitle {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n\n.mianContent .topCard {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n\n.mianContent .topCard .topRow {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n\n.mianContent .topCard .topRow div:first-child {\n color: #333333;\n}\n\n.mianContent .topCard .topRow div:last-child {\n color: #777777;\n padding-left: 10px;\n}\n\n.mianContent .topCard .topRow div.process-mliv-dd {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n\n.mianContent .tabs {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n\n.mianContent .tabs :deep(.is-active) {\n font-size: 16px;\n}\n\n.mianContent .tabs :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n\n.mianContent .topBtnRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n.mianContent .footBtnRow {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n\n.formInput {\n width: 90%;\n}\n\n.dialog :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n\n.dialog ::v-deep.el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n\n.dialog :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n\n.dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n\n.dialog .el-dialog__body {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n.view-file {\n color: #1389ff;\n cursor: pointer;\n}\n\n.view-node-info {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n\n.iconsR {\n cursor: pointer;\n transform: rotate(90deg);\n}\n\n::v-deep .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n::v-deep .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n\n.sign-img {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */","<template>\r\n <div\r\n class=\"mianContent\"\r\n v-loading=\"boxLoading && !isButton\"\r\n ref=\"mianContent\"\r\n :style=\"{\r\n // height:\r\n // activeName == '流程图'\r\n // ? '100%'\r\n // : $refs['footBtnRow']\r\n // ? `calc(100% - 50px)`\r\n // : ' 100%',\r\n // overflow: activeName == '流程图' ? 'hidden !important' : 'auto',\r\n }\"\r\n >\r\n <template v-if=\"!isButton\">\r\n <div class=\"tabs\" ref=\"baseTabs\">\r\n <el-tabs\r\n v-model=\"activeName\"\r\n class=\"demo-tabs\"\r\n @tab-click=\"handleClick\"\r\n >\r\n <el-tab-pane\r\n :label=\"item.name\"\r\n :name=\"item.slot || item.name\"\r\n v-for=\"(item, index) in tabs\"\r\n :key=\"index\"\r\n :item=\"item\"\r\n :class=\"['pane-' + item.name]\"\r\n >\r\n <template v-if=\"item.name == '基本信息' && !item.slot\">\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '流程图' && !item.slot\">\r\n <div class=\"view-node-info\" @click=\"getNodeList\">\r\n 查看流程节点信息\r\n </div>\r\n <iframe\r\n v-if=\"trackUrl\"\r\n :src=\"trackUrl\"\r\n style=\"width: 100%; height: 100%; border: none\"\r\n :style=\"{ height: `${iframeHeight}px` }\"\r\n scrolling=\"no\"\r\n frameborder=\"0\"\r\n :key=\"processId\"\r\n ></iframe>\r\n <!-- 展示条件需要同时满足v-if -->\r\n <bpmnLook v-if=\"activeName == '流程图' && processData.process && processData.process.xml\" :approvalData=\"processData.flow\" :diagram=\"processData.process.xml\"></bpmnLook>\r\n <div\r\n v-else\r\n style=\"\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无流程图\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '审批记录' && !item.slot\">\r\n <processFlow v-if=\"activeName == '审批记录' && processData.flow\" :flow-list=\"processData.flow\"></processFlow>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot\r\n v-if=\"item.slot\"\r\n :name=\"item.slot\"\r\n :taskNode=\"getTaskNode()\"\r\n ></slot>\r\n <slot v-else name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n <!-- <el-tab-pane label=\"流程图\" name=\"2\" style=\"height: 100%\">\r\n </el-tab-pane> -->\r\n <!-- <el-tab-pane label=\"审批记录\" name=\"3\">\r\n <el-table\r\n :data=\"taskCommentList\"\r\n border\r\n style=\"width: 100%; margin-bottom: 20px\"\r\n v-if=\"taskCommentList && taskCommentList.length > 0\"\r\n >\r\n <el-table-column type=\"index\" width=\"80\" label=\"序号\" />\r\n <el-table-column\r\n prop=\"activityName\"\r\n label=\"节点名称\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"createUserName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"actionName\"\r\n label=\"审批操作\"\r\n ></el-table-column>\r\n <el-table-column prop=\"msg\" label=\"审批意见\">\r\n <template #default=\"scope\">\r\n <div v-html=\"scope.row.msg\"></div>\r\n <el-popover\r\n placement=\"bottom-end\"\r\n :width=\"500\"\r\n trigger=\"click\"\r\n v-if=\"scope.row.metaAnnexList.length > 0\"\r\n >\r\n <template #reference>\r\n <div class=\"view-file\">查看附件</div>\r\n </template>\r\n <ViewFile\r\n v-if=\"scope.row.metaAnnexList\"\r\n :dataList=\"scope.row.metaAnnexList\"\r\n />\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column\r\n prop=\"createDate\"\r\n label=\"审批时间\"\r\n ></el-table-column>\r\n </el-table>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </el-tab-pane> -->\r\n </el-tabs>\r\n </div>\r\n </template>\r\n <!-- 底部按钮 -->\r\n <processBtns\r\n :loading=\"submitLoading\"\r\n :button-list=\"processData.button\"\r\n :process=\"processData.process\"\r\n :comment=\"comment\"\r\n @draft=\"handleDraft({ taskId: process.taskId, variables: form })\"\r\n @examine=\"handleExamine\"\r\n @user-select=\"handleUserSelect\"\r\n @print=\"handlePrint\"\r\n @rollback=\"handleRollbackTask\"\r\n @terminate=\"handleTerminateProcess\"\r\n @withdraw=\"handleWithdrawTask\"\r\n @reminders=\"handleReminders\"\r\n ></processBtns>\r\n <div class=\"dialog\">\r\n <el-dialog\r\n :visible.sync=\"dialogVisibleOperation\"\r\n append-to-body\r\n class=\"dialog\"\r\n width=\"600px\"\r\n v-dialogDrag\r\n :title=\"operationLabel\"\r\n :close-on-click-modal=\"false\"\r\n :show-close=\"!isOperLoading\"\r\n top=\"6vh\" :style=\"dynamicStyle\"\r\n >\r\n <div class=\"operation-box\" ref=\"obRef\">\r\n <component\r\n v-if=\"dialogVisibleOperation\"\r\n ref=\"operationRef\"\r\n :is=\"operationCom\"\r\n :param=\"operationParam\"\r\n @success=\"operationSuccess\"\r\n @fail=\"operationFail\"\r\n :isOperLoading=\"isOperLoading\"\r\n >\r\n <template #form>\r\n <slot :name=\"aftClickBtn.slot\" v-if=\"aftClickBtn.slot\"></slot>\r\n </template>\r\n <template #file>\r\n <el-form\r\n label-width=\"120px\"\r\n status-icon\r\n v-if=\"attachShow\"\r\n @submit.native.prevent\r\n :rules=\"rules\"\r\n >\r\n <el-form-item\r\n label=\"附件\"\r\n :prop=\"attachRule.required ? 'attach' : ''\"\r\n >\r\n <jyr-file-upload\r\n v-model=\"attach\"\r\n :multiple=\"attachRule.limit > 0\"\r\n :limit=\"attachRule.limit\"\r\n fullFileObject\r\n showFileName\r\n ref=\"fileUpload\"\r\n />\r\n </el-form-item>\r\n </el-form>\r\n </template>\r\n </component>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button\r\n v-loading\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n :loading=\"isOperLoading\"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click=\"dialogVisibleOperation = false\"\r\n :loading=\"isOperLoading\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n <!-- 选择任务 -->\r\n <el-dialog\r\n title=\"选择处理任务\"\r\n :visible.sync=\"showMulTask\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n width=\"500px\"\r\n :show-close=\"false\"\r\n >\r\n <el-form ref=\"form\" label-width=\"100px\" class=\"task\">\r\n <el-form-item label=\"请选择:\" prop=\"content\">\r\n <el-radio-group v-model=\"mulTaskTaskId\" size=\"small\">\r\n <el-radio\r\n v-for=\"item in mulTaskList\"\r\n :key=\"item.nodeId\"\r\n :label=\"item.taskId\"\r\n border\r\n >{{ item.nodeName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"onCheckSure\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"nodeInfoVisible\"\r\n append-to-body\r\n width=\"600px\"\r\n title=\"流程节点信息\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n v-dialogDrag\r\n >\r\n <el-table :data=\"filterFlow(processData.flow)\" border>\r\n <el-table-column\r\n label=\"序号\"\r\n type=\"index\"\r\n width=\"120px\"\r\n ></el-table-column>\r\n <el-table-column prop=\"historyActivityName\" label=\"节点名称\"></el-table-column>\r\n <!-- <el-table-column prop=\"type\" label=\"类型\"></el-table-column> -->\r\n <el-table-column\r\n prop=\"assigneeName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n </el-table>\r\n </el-dialog>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Message as ElMessage, MessageBox as ElMessageBox } from \"element-ui\";\r\nimport treeselect from \"@riophae/vue-treeselect\";\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\";\r\nimport api from \"./api\";\r\nimport * as $enum from \"./enum\";\r\nimport staffTree from \"./staff-tree.vue\";\r\nimport ViewFile from \"./view-file.vue\";\r\nimport * as operation from \"./operation/index.js\";\r\nimport JyrFileUpload from \"../JyrFileUpload/index\";\r\nimport processBtns from \"./operation/processBtns.vue\";\r\nimport processFlow from \"./operation/processFlow.vue\";\r\nimport bpmnLook from './bpmnLook.vue';\r\nimport dayjs from \"dayjs\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { bpmnLook, processBtns, processFlow, treeselect, staffTree, ...operation, ViewFile, JyrFileUpload },\r\n props: {\r\n /** 流程实例id */\r\n taskId: {\r\n // require: true,\r\n default: false,\r\n type: String,\r\n },\r\n processId: {\r\n require: true,\r\n default: false,\r\n type: String,\r\n },\r\n // processDefId: {\r\n // require: false,\r\n // default: false,\r\n // type: String,\r\n // },\r\n userId: { require: true, default: \"\", type: String },\r\n // task: {\r\n // default: false,\r\n // type: Object,\r\n // },\r\n showBtns: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n isView: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n getVars: { type: Function },\r\n before: { type: Function },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isAdditional: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n businessData: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n excludeBtn: {\r\n type: String,\r\n default: \"\",\r\n },\r\n showAsPlanned: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showCommIdea: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n commentMsgRequired: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n customBtn: {\r\n default: \"\",\r\n },\r\n tabs: {\r\n default: () => [\r\n {\r\n name: \"基本信息\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"流程图\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"审批记录\",\r\n slot: \"\",\r\n },\r\n ],\r\n },\r\n personType: {\r\n default: \"\",\r\n },\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n isButton: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n provide() {\r\n return {\r\n isAlisInject: this.isAlis,\r\n };\r\n },\r\n // emits: ['update:modelValue', \"getData\", \"change\", \"changeGetData\"],\r\n data() {\r\n return {\r\n // 流程信息\r\n deptId: '',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n processData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n submitLoading: false,\r\n flowChartVisible: false,\r\n comment: null,\r\n // 流程信息\r\n dynamicMaxHeight: '400px',\r\n showMulTask: false,\r\n mulTaskList: [],\r\n mulTaskTaskId: \"\",\r\n attach: [],\r\n customBtns: [],\r\n overheight: 10,\r\n iframeHeight: 500,\r\n mainWidth: 0,\r\n absoluteTaskId: \"\",\r\n infoView: false,\r\n showTopTabs: false,\r\n buttonLoading: false,\r\n footBtnLoading: true,\r\n tabheight: 400,\r\n aftClickBtn: \"\",\r\n attachRule: {\r\n required: true,\r\n limit: 0,\r\n },\r\n nodeInfoVisible: false,\r\n nodeInfoList: [],\r\n jjForm: {\r\n saveMetaAnnexCmdList: [],\r\n },\r\n targetUID: \"\",\r\n commentMsg: \"\",\r\n trackUrl: \"\",\r\n taskObj: {},\r\n taskCommentList: [],\r\n absoluteBtns: { inside: [], outside: [] },\r\n processStatus: \"\",\r\n nextTaskNode: [],\r\n activeName: \"基本信息\",\r\n ProcessInsObj: {},\r\n outGatewayUserTaskModel: [],\r\n dialogVisibleOperation: false,\r\n operationLabel: \"\",\r\n operationCom: {},\r\n operationParam: {},\r\n taskNode: [],\r\n aftTaskNode: {},\r\n operation,\r\n Enum: $enum,\r\n isOperLoading: false,\r\n boxLoading: false,\r\n rules: {\r\n attach: [{ required: true, trigger: \"change\" }],\r\n },\r\n\t noReload: false,\r\n digitalSignatureList: []\r\n };\r\n },\r\n mounted() {\r\n window.onresize = () => {\r\n return (() => {\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n })();\r\n };\r\n },\r\n watch: {\r\n activeName: function (n) {\r\n if (n == 1) this.activeName = \"基本信息\";\r\n },\r\n infoView: function () {\r\n this.calculateHeight();\r\n },\r\n taskId: {\r\n handler(val) {\r\n if (!val) return;\r\n this.absoluteTaskId = val;\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n processId: {\r\n handler(val) {\r\n if (val) {\r\n this.customBtns = [];\r\n this.absoluteBtns = { inside: [], outside: [] };\r\n this.activeName = this.tabs.length > 0 ? this.tabs[0][\"name\"] : \"\";\r\n // 获取流程节点,流程图,流程实例,流程审批\r\n this.getProcessInfo()\r\n if (Date.now()) return;\r\n\r\n api.repository.queryTaskNodeList(this.processId).then((e) => {\r\n\t\t\t if(!this.noReload){\r\n\t\t\t\t this.noReload = false\r\n\t\t\t\t if (!this.absoluteTaskId && e.data.length > 1) {\r\n\t\t\t\t this.mulTaskList = e.data;\r\n\t\t\t\t this.showMulTask = true;\r\n\t\t\t\t return;\r\n\t\t\t\t } else {\r\n\t\t\t\t this.absoluteTaskId =\r\n\t\t\t\t e.data && e.data.length > 0 ? e.data[0][\"taskId\"] : \"\";\r\n\t\t\t\t this.aftTaskNode = e.data[0];\r\n\t\t\t\t }\r\n\t\t\t }\r\n\r\n console.log(\"======\", this.absoluteTaskId);\r\n if (e.code == $enum.apiCode.success) {\r\n this.taskNode = e.data;\r\n api.pis\r\n .getProcessStatus(this.processId, this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.processStatus = res.data;\r\n if (this.absoluteTaskId) {\r\n api.repository\r\n .getUserTaskModelCmd(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.taskObj = res.data;\r\n this.straightenBtns();\r\n }\r\n });\r\n } else {\r\n this.straightenBtns();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n api.repository\r\n .getTrackUrl({ processInstId: val, type: $enum.SourceType.电脑端 })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n }\r\n });\r\n api.tis.getTaskCommentList(this.processId, \"\").then((res) => {\r\n this.taskCommentList = res.data;\r\n this.digitalSignatureList = res.data.filter(item => item.digitalSignature).map(item => item.digitalSignature)\r\n });\r\n api.pis.getProcessInstanceById(this.processId).then((res) => {\r\n this.ProcessInsObj = res.data;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n });\r\n\r\n // api.repository.queryTaskNodeList(this.processId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) this.taskNode = res.data;\r\n // });\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n absoluteTaskId: {\r\n handler(val) {\r\n if (val) {\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n dialogVisibleOperation: {\r\n handler(val) {\r\n this.$emit(\"show-modal\", val);\r\n },\r\n },\r\n },\r\n methods: {\r\n // 流程\r\n filterFlow(flowArr) {\r\n return flowArr.filter((item) => {\r\n return ['userTask', 'candidate'].includes(item.historyActivityType)\r\n });\r\n },\r\n getProcessInfo() {\r\n this.submitLoading = true\r\n this.boxLoading = true;\r\n\r\n api.tis.getTaskModelDetail(this.taskId ? {\r\n processInsId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInsId: this.processId,\r\n }).then(async res => {\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n console.log(this.processData.flow, 'flw')\r\n this.flowChartVisible = true\r\n this.submitLoading = false\r\n this.boxLoading = false\r\n }\r\n })\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n handleDraft() {\r\n this.submitLoading = true;\r\n },\r\n // 提交(办理)true、取消申请 false\r\n handleExamine(flag, name) {\r\n console.log(flag, 'flag')\r\n if (flag) {\r\n this.handlePass(name)\r\n } else {\r\n this.handleCancel(name)\r\n }\r\n this.submitLoading = true;\r\n },\r\n // 办理\r\n async handlePass(name) {\r\n if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n }\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, name);\r\n }\r\n },\r\n // 取消申请\r\n handleCancel(name) {\r\n this.showOperation(operation.cancel, name);\r\n },\r\n // 转办transfer,委托delegate,addInstance\r\n handleUserSelect({ type, checkType, name}) {\r\n if (type == 'transfer') {\r\n this.handleTransfer(name)\r\n }\r\n else if (type == 'addInstance') {\r\n this.handleAddInstance(name)\r\n }\r\n console.log('handleUserselect')\r\n },\r\n // 转办\r\n handleTransfer(name) {\r\n this.showOperation(operation.delegateTask, name);\r\n },\r\n // 加签\r\n handleAddInstance(name) {\r\n this.showOperation(operation.counterSign, name);\r\n },\r\n handlePrint() {\r\n console.log('handlePrint')\r\n },\r\n handleRollbackTask(name) {\r\n console.log('handleRollbackTask')\r\n this.showOperation(operation.roolback, name);\r\n },\r\n handleTerminateProcess() {\r\n console.log('handleTerminateProcess')\r\n },\r\n // 撤销,撤回\r\n handleWithdrawTask(name) {\r\n console.log('handleWithdrawTask')\r\n this.handleRevoke();\r\n // this.showOperation(operation.withdrawTask, '请选择撤销/撤回操作');\r\n },\r\n // 流程\r\n findTargetHtml(startNode, targetClass, searchKey = 'parentElement') {\r\n\t\t\t\tif (!startNode) return null\r\n \t\t\tif (startNode.classList.contains(targetClass)) {\r\n \t\t\treturn startNode\r\n \t\t\t}\r\n \t\t\tlet curEl = startNode[searchKey]\r\n \t\t\tif (!curEl) return null\r\n \t\t\tif (searchKey == 'children') {\r\n \t\t\tfor (let i = 0; i <= curEl.length - 1; i++) {\r\n \t\t\tif (curEl[i].classList.contains(targetClass)) {\r\n \t\t\treturn curEl[i]\r\n \t\t\t}\r\n \t\t\t}\r\n \t\t\treturn\r\n \t\t\t}\r\n \t\t\treturn this.findTargetHtml(curEl, targetClass)\r\n\t\t\t},\r\n findImageIndex(item){\r\n return item ? this.digitalSignatureList.findIndex(i => i == item) : -1\r\n },\r\n onCheckSure() {\r\n this.absoluteTaskId = this.mulTaskTaskId;\r\n this.mulTaskList.map((item) => {\r\n if (item.taskId == this.mulTaskTaskId) {\r\n this.aftTaskNode = item;\r\n }\r\n });\r\n\t this.noReload = true\r\n this.showMulTask = false;\r\n this.footBtnLoading = true;\r\n let temp = this.processId;\r\n this.processId = \"\";\r\n this.processId = temp;\r\n },\r\n showButtonLoading() {\r\n this.buttonLoading = true;\r\n },\r\n hideButtonLoading() {\r\n this.buttonLoading = false;\r\n },\r\n calculateHeight() {\r\n let h = 0;\r\n if (this.$refs[\"footBtnRow\"]) {\r\n h += this.$refs[\"footBtnRow\"].offsetHeight;\r\n }\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n if (this.infoView && this.absoluteBtns.outside.length > 0) {\r\n h += 32;\r\n }\r\n if (this.$refs[\"infoBoxFign\"]) {\r\n let windowHeight =\r\n window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n this.tabheight =\r\n windowHeight - this.$refs[\"infoBoxFign\"].offsetTop - 192;\r\n }\r\n this.overheight = h + 116;\r\n this.iframeHeight = this.$refs[\"mianContent\"].offsetHeight - 146;\r\n },\r\n getNodeList() {\r\n this.nodeInfoVisible = true;\r\n // api.pis.findNodeParticipantRows(this.processId).then((e) => {\r\n \r\n // e.data.map((item) => {\r\n // if (item.type == \"串签\" || item.type == \"并签\") {\r\n // item[\"name\"] += `【${item.type}】`;\r\n // }\r\n // });\r\n // this.nodeInfoList = e.data;\r\n // });\r\n },\r\n fileNameLastof(e, len = 0) {\r\n if (e.indexOf(\"http\") == -1) len = 0;\r\n if (!e) return;\r\n let last = \"/\";\r\n if (e.indexOf(\"\\\\\") != -1) {\r\n last = \"\\\\\";\r\n }\r\n //整理文件名\r\n let filename = e;\r\n let lastindex = filename.lastIndexOf(last);\r\n return filename.substr(lastindex + 1 + len, filename.length);\r\n },\r\n clickCustomButton(name) {\r\n this.$emit(\"clickCustomButton\", {\r\n name,\r\n processStatus: this.processStatus,\r\n setName: (label) => {\r\n this.taskObj.buttons.map((item) => {\r\n if (item.label == name) {\r\n item.label = label;\r\n }\r\n });\r\n this.straightenBtns();\r\n },\r\n });\r\n },\r\n // 获取下一个节点数据\r\n async getNextNode(deptId) {\r\n let res1\r\n try {\r\n res1 = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n );\r\n } catch (e) {\r\n console.error(e)\r\n res1 = {}\r\n }\r\n const nextTaskNode = res1.data || {};\r\n console.log(nextTaskNode, 'next')\r\n if (nextTaskNode.id && !nextTaskNode.setPersonnel) {\r\n const nodeUserParams = getNodeUserParams(nextTaskNode)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n // 需要传入部门id\r\n deptId: deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextTaskNode.userList = res.data\r\n }\r\n }\r\n this.nextTaskNode = nextTaskNode\r\n console.log(nextTaskNode, 'getNextNode')\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n async showOperation(com, label) {\r\n this.attach = [];\r\n if (false && this.processStatus.allUserNames.length > 0) {\r\n if (this.absoluteTaskId) {\r\n let vars;\r\n if (this.getVars) {\r\n vars = this.getVars();\r\n if (vars === false) {\r\n return false;\r\n }\r\n }\r\n let res = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n vars\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n for (var i in res.data) {\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"固定账户\" ||\r\n res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(this.absoluteTaskId, [\r\n res.data[i].id,\r\n ])\r\n .then((e) => {\r\n res.data[i].userTaskModelDTO.routeTxt[\"userNames\"] =\r\n e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n this.nextTaskNode = res.data;\r\n } else {\r\n this.nextTaskNode = [];\r\n this.outGatewayUserTaskModel = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n \"\"\r\n );\r\n }\r\n }\r\n }\r\n this.operationLabel = label;\r\n // this.operationParam = new operation.PorpParam(\"\", this.processId, this.processDefId, this.task.id, this.task.activityDefId);\r\n this.operationParam.processInstId = this.processId;\r\n // this.operationParam.processDefId = this.processDefId;\r\n this.operationParam.taskInstId = this.absoluteTaskId;\r\n // this.operationParam.taskDeftId = this.task.activityDefId;\r\n this.operationParam.nextTaskNode = this.nextTaskNode;\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.taskObj = this.taskObj;\r\n this.operationParam.getVars = this.getVars;\r\n this.operationParam.outGatewayUserTaskModel =\r\n this.outGatewayUserTaskModel;\r\n this.operationParam.taskNode = this.getTaskNode();\r\n this.operationParam.businessData = this.businessData;\r\n this.operationParam.showAsPlanned = this.showAsPlanned;\r\n this.operationParam.showCommIdea = this.showCommIdea;\r\n this.operationParam.commentMsgRequired = this.commentMsgRequired;\r\n this.operationParam.personType = this.personType;\r\n this.operationParam.personEntity = {\r\n ...this.personEntity,\r\n ...(this.aftClickBtn.personEntity || {}),\r\n };\r\n this.operationParam.ProcessInsObj = this.ProcessInsObj;\r\n this.operationCom = com;\r\n this.dialogVisibleOperation = true;\r\n this.$nextTick(() => {\r\n \t\tlet ctnEl = this.$refs.obRef\r\n\t\t\t\tconsole.log(ctnEl, this.$refs);\r\n \t\tif (!ctnEl) return \r\n \t\tlet topDistance = ctnEl.getBoundingClientRect().top\r\n \t\tlet dialogEl = this.findTargetHtml(ctnEl, 'el-dialog')\r\n \t\tlet dialogFootEl = this.findTargetHtml(dialogEl, 'el-dialog__footer', 'children')\r\n \t\t// 视口高度 - margin - head - footer\r\n \t\tlet val = window.innerHeight - topDistance - topDistance - dialogFootEl.clientHeight - 32\r\n \t\tthis.dynamicMaxHeight = `${val}px`\r\n \t\t})\r\n },\r\n onClickOperation() {\r\n if (\r\n this.attachShow &&\r\n this.attachRule.required &&\r\n this.attach.length == 0\r\n ) {\r\n return ElMessage.error(\"请上传附件\");\r\n }\r\n if (this.aftClickBtn.preposition) {\r\n this.operationMain(this.aftClickBtn.preposition);\r\n } else {\r\n this.operationMain();\r\n }\r\n\r\n // if (this.$refs[\"fileUpload\"] && this.$refs[\"fileUpload\"].getLoading()) {\r\n // return ElMessage.error(\"请等待附件上传完成后重试\");\r\n // }\r\n },\r\n operationMain(preposition = false) {\r\n if (this.attachShow) {\r\n let saveMetaAnnexCmdList = [];\r\n this.attach.map((item) => {\r\n saveMetaAnnexCmdList.push({\r\n id: item.id,\r\n name: this.fileNameLastof(item.name),\r\n size: item.fileSize,\r\n format: item.fileType,\r\n url: item.url,\r\n uploadTime: item.createTime,\r\n processInstId: this.operationParam.processInstId,\r\n taskInstId: this.operationParam.taskInstId,\r\n });\r\n });\r\n saveMetaAnnexCmdList = saveMetaAnnexCmdList.sort((a, b) => {\r\n return dayjs(a.uploadTime).valueOf() > dayjs(b.uploadTime).valueOf();\r\n });\r\n api.tis.patchSave({\r\n saveMetaAnnexCmdList,\r\n });\r\n }\r\n\r\n if (this.$refs.operationRef) {\r\n this.$refs.operationRef.confirm(preposition, () => {\r\n this.isOperLoading = true;\r\n });\r\n }\r\n },\r\n operationSuccess(isComplete = true) {\r\n ElMessage.success(\"操作成功\");\r\n this.dialogVisibleOperation = false;\r\n // router.go(0);\r\n if (isComplete) this.$emit(\"Complete\");\r\n this.isOperLoading = false;\r\n },\r\n operationFail(msg = \"\") {\r\n msg && ElMessage.warning(msg);\r\n this.isOperLoading = false;\r\n },\r\n async getOutgoingProcessNode(taskId, processNodeId) {\r\n let res = await api.repository.getOutgoingProcessNode(\r\n taskId,\r\n processNodeId\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n if (res.data) {\r\n for (let i = 0; i < res.data.length; i++) {\r\n let o = res.data[i];\r\n if (o.type != $enum.ProcessNodeType.用户任务) {\r\n o.childNode = await this.getOutgoingProcessNode(taskId, o.id);\r\n if (o.incomingConditionItemList.length !== 0) {\r\n // o.childNode.push(o);\r\n }\r\n }\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].humanPerformerName == \"固定账户\" ||\r\n res.data[i].humanPerformerName == \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(taskId, [res.data[i].id])\r\n .then((e) => {\r\n res.data[i][\"routeTxt\"][\"userNames\"] = e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n if (res.data.length == 0) {\r\n res.data.push({\r\n id: \"\",\r\n incomingConditionItemList: [],\r\n type: \"endEvent\",\r\n name: \"结束事件\",\r\n });\r\n }\r\n }\r\n return res.data;\r\n }\r\n return [];\r\n },\r\n getColor(status) {\r\n if (status == \"审核中\" || status == \"审批中\") return \"#6DC743\";\r\n if (status == \"已驳回\") return \"#F14B4C\";\r\n if (status == \"已撤销\") return \"#CECECE\";\r\n if (status == \"已完成\") return \"#6DC743\";\r\n\r\n return \"#1389FF\";\r\n },\r\n handleClick(e) {\r\n this.$emit(\"clickTab\",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)));\r\n },\r\n getTaskNode() {\r\n if (this.taskNode.filter)\r\n return this.taskNode.filter((o) => {\r\n return o.nodeId == this.taskObj.id;\r\n });\r\n return [];\r\n },\r\n handleRevoke() {\r\n ElMessageBox.confirm(`确定撤销吗`, \"撤销\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis\r\n .withdrawTask(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch(() => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n handleReminders() {\r\n console.log(ElMessageBox);\r\n ElMessageBox.confirm(`确定催办吗`, \"催办\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis.reminders(this.processData.process.processInstanceId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch((e) => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n let flag =\r\n this.taskNode &&\r\n this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.不处理;\r\n\r\n // 加签\r\n if (flag && !this.isView && this.taskObj.counterSignLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.counterSignLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"sign\";\r\n obj.click = () => {\r\n this.showOperation(operation.counterSign, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 转办\r\n if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.delegateTaskButtonLabel;\r\n obj.key = \"delegate\";\r\n obj.click = () => {\r\n this.showOperation(operation.delegateTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 传阅\r\n if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.ccTaskButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"cc\";\r\n obj.click = () => {\r\n this.showOperation(operation.ccTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 催办\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"催办\";\r\n // obj.btnProps = { color: \"#1389ff\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleReminders();\r\n };\r\n btnList.push(obj);\r\n }\r\n // 撤销\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"撤销\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleRevoke();\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (\r\n // flag &&\r\n // !this.isView &&\r\n // this.taskObj &&\r\n // this.taskObj.buttons &&\r\n // this.taskObj.buttons.find((o) => o.label == \"退回\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"退回\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"back\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.roolback, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 拒绝\r\n if (flag && !this.isView && this.processStatus.currUserName) {\r\n let obj = {};\r\n obj.name = \"拒绝\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"refuse\";\r\n obj.click = () => {\r\n this.showOperation(operation.cancel, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 办理\r\n if (flag && !this.isView && this.taskObj.completeButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.completeButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"complete\";\r\n obj.click = () => {\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, obj.name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, obj.name);\r\n }\r\n };\r\n btnList.push(obj);\r\n }\r\n // 退回\r\n if (\r\n flag &&\r\n !this.isView &&\r\n this.taskObj &&\r\n this.taskObj.buttons.length > 0\r\n ) {\r\n this.taskObj.buttons.map((item) => {\r\n let obj = {};\r\n obj.name = item.label;\r\n if (item.label == \"退回\") {\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"back\";\r\n obj.click = () => {\r\n this.showOperation(operation.roolback, obj.name);\r\n };\r\n } else {\r\n obj.btnProps = {};\r\n obj.key = item.label;\r\n obj.click = () => {\r\n this.clickCustomButton(obj.name);\r\n };\r\n }\r\n\r\n btnList.unshift(obj);\r\n });\r\n }\r\n\r\n return btnList;\r\n },\r\n straightenBtns(flag = true) {\r\n let list = [];\r\n\r\n if (this.excludeBtn) {\r\n this.operBtn().map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n } else {\r\n list = this.operBtn();\r\n }\r\n if (this.customBtns.length > 0) {\r\n list = [];\r\n this.customBtns.map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n }\r\n\r\n let r = {\r\n outside: [],\r\n inside: [],\r\n };\r\n if (list.length > 4) {\r\n r.outside = list.splice(list.length - 4, list.length - 1);\r\n r.inside = list;\r\n } else {\r\n r.outside = list;\r\n }\r\n\r\n if (flag && this.customBtn) {\r\n this.customBtn(\r\n { btnList: this.operBtn(), processStatus: this.processStatus },\r\n (e) => {\r\n this.customBtns = e;\r\n this.straightenBtns(false);\r\n },\r\n () => {\r\n this.$emit(\"Complete\");\r\n }\r\n );\r\n console.log(\"=======333\");\r\n } else {\r\n this.absoluteBtns = r;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n this.footBtnLoading = false;\r\n this.boxLoading = false;\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n dynamicStyle() {\r\n \t\t\treturn { '--dynamic-ctx-height': this.dynamicMaxHeight }\r\n\t\t\t},\r\n attachShow() {\r\n let sign = false;\r\n let annex = \"\";\r\n switch (this.operationLabel) {\r\n case \"退回\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"办理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"处理\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"同意\":\r\n annex = this.operationParam.taskObj.completeButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"拒绝\":\r\n annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n break;\r\n case \"加签\":\r\n annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n case \"转办\":\r\n annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n if (annex) sign = true;\r\n break;\r\n }\r\n // 校验自定义按钮\r\n let temp = \"\";\r\n if (typeof annex != \"string\" && annex != null) {\r\n annex.map((item) => {\r\n if (item.indexOf(this.operationLabel) != -1) {\r\n sign = true;\r\n temp = item;\r\n }\r\n });\r\n }\r\n if (temp) annex = temp;\r\n\r\n // 解析数据\r\n if (sign) {\r\n this.attachRule.required = annex.split(\";\")[1] == \"true\";\r\n this.attachRule.limit =\r\n annex.split(\";\")[2] == -1 ? 999 : annex.split(\";\")[2];\r\n }\r\n\r\n return sign;\r\n },\r\n },\r\n};\r\n</script>\r\n<!-- <style >\r\n.demo-tabs {\r\n position: relative;\r\n .el-tabs__header {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n}\r\n</style> -->\r\n\r\n<style scoped lang=\"scss\">\r\n.operation-box {\r\n max-height: var(--dynamic-ctx-height);\r\n overflow: auto;\r\n padding-right: 20px;\r\n}\r\n.el-dropdown-menu__item {\r\n min-width: 140px;\r\n border-bottom: 1px solid #e8e8e8;\r\n .el-button--text {\r\n color: #333 !important;\r\n }\r\n &:hover {\r\n .el-button--text {\r\n color: #1389ff !important;\r\n }\r\n }\r\n &:last-child {\r\n border: none !important;\r\n }\r\n}\r\n.el-dropdown-menu {\r\n padding-bottom: 30px;\r\n}\r\n.mianContent {\r\n & > .tabs {\r\n & > .demo-tabs {\r\n & > ::v-deep .el-tabs__header {\r\n position: sticky;\r\n top: -20px;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.top-tabs {\r\n position: fixed;\r\n top: 62px;\r\n background-color: #fff;\r\n right: 0px;\r\n z-index: 1997;\r\n}\r\n.mianContent {\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n // margin-top: 20px;\r\n // padding-top: 20px;\r\n // width: 100%;\r\n /* // margin-bottom: 10px; */\r\n // overflow: hidden;\r\n .demo-tabs {\r\n flex: 1;\r\n height: 0;\r\n // height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ::v-deep .el-tabs__content {\r\n flex: 1;\r\n height: 0;\r\n &::-webkit-scrollbar {\r\n width: 0;\r\n }\r\n }\r\n ::v-deep .el-tab-pane {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n &.pane-流程图 {\r\n .bpmn-look {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.mianContent .rowtitle {\r\n /* margin-top: 24px; */\r\n margin-bottom: 16px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n border-left: 4px solid #1389ff;\r\n padding-left: 9px;\r\n}\r\n\r\n.mianContent .topCard {\r\n overflow: hidden;\r\n /* // border: 1px solid #DADBDE; */\r\n}\r\n\r\n.mianContent .topCard .topRow {\r\n display: flex;\r\n /* // line-height: 46px; */\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 32px;\r\n}\r\n\r\n.mianContent .topCard .topRow div:first-child {\r\n color: #333333;\r\n}\r\n\r\n.mianContent .topCard .topRow div:last-child {\r\n color: #777777;\r\n padding-left: 10px;\r\n}\r\n\r\n.mianContent .topCard .topRow div.process-mliv-dd {\r\n /* // height: 26px; */\r\n min-width: 30px;\r\n padding: 0px 16px;\r\n border-radius: 4px;\r\n background: #1389ff;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n margin-left: 10px;\r\n}\r\n\r\n.mianContent .tabs {\r\n /* // margin-bottom: 60px; */\r\n height: 0;\r\n flex: 1;\r\n overflow: visible !important;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.mianContent .tabs :deep(.is-active) {\r\n font-size: 16px;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content) {\r\n// height: calc(100% - 55px);\r\n// /* 修改BUGID:1003401 */\r\n// overflow: auto;\r\n// }\r\n.mianContent .tabs :deep(.el-tabs__header) {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content)::-webkit-scrollbar {\r\n// width: 0;\r\n// }\r\n\r\n.mianContent .topBtnRow {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n height: 100%;\r\n}\r\n\r\n.mianContent .footBtnRow {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n box-sizing: border-box;\r\n // height: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n right: 20px;\r\n height: 50px;\r\n border-top: 1px solid #dadbde;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n z-index: 1001;\r\n .el-button {\r\n min-width: 74px;\r\n height: 36px;\r\n border-radius: 6px;\r\n }\r\n}\r\n\r\n.formInput {\r\n width: 90%;\r\n}\r\n\r\n.dialog :deep(.el-dialog__header) {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n}\r\n\r\n.dialog ::v-deep.el-dialog__body {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n padding-right: 10px;\r\n}\r\n\r\n.dialog :deep(.el-dialog__footer) {\r\n padding: 12px;\r\n text-align: center;\r\n}\r\n.dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n}\r\n\r\n.dialog {\r\n .el-dialog__body {\r\n padding: 45px 30px;\r\n }\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n.view-file {\r\n color: #1389ff;\r\n cursor: pointer;\r\n}\r\n.view-node-info {\r\n cursor: pointer;\r\n color: #1389ff;\r\n margin-left: 34px;\r\n font-size: 16px;\r\n}\r\n.iconsR {\r\n cursor: pointer;\r\n transform: rotate(90deg);\r\n}\r\n::v-deep .task .el-radio-group {\r\n .el-radio--small.is-bordered {\r\n margin: 0 20px;\r\n }\r\n .el-radio.is-bordered + .el-radio.is-bordered {\r\n margin: 5px 20px;\r\n }\r\n}\r\n.sign-img {\r\n width: 60px;\r\n height: 60px;\r\n}\r\n</style>\r\n"]}, media: undefined });
9084
9106
 
9085
9107
  };
9086
9108
  /* scoped */
9087
- const __vue_scope_id__$5 = "data-v-521a403c";
9109
+ const __vue_scope_id__$5 = "data-v-1d1b7390";
9088
9110
  /* module identifier */
9089
9111
  const __vue_module_identifier__$5 = undefined;
9090
9112
  /* functional template */