ddy-process-pc-vue2 1.0.1-rc.2.39 → 1.0.1-rc.2.41
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 +1 -1
- package/vue2/index.esm.js +1 -1
- package/vue2/index.umd.js +1 -1
package/vue2/index.esm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Message as e,MessageBox as n}from"element-ui";import r from"@riophae/vue-treeselect";import"@riophae/vue-treeselect/dist/vue-treeselect.css";import{departPerson as t}from"checked-pick-pc";import"checked-pick-pc/style.css";import s from"bpmn-js/lib/Viewer";import i from"diagram-js/lib/navigation/movecanvas";import a from"diagram-js/lib/features/tooltips";import o from"dayjs";import"element-ui/lib/theme-chalk/index.css";import l from"@/assets/images/pdf-file.png";import d from"@/assets/images/components/attach.png";let c;const p="/aws",m="/bladex/blade-workflow",h="/auth";var f={getAjaxObj:()=>({get:(e,n)=>{let r={url:e,param:n.params,type:"get"};return c(r)},post:(e,n)=>c({url:e,param:n,type:"post"})}),getAjax:()=>c,setAjax:e=>{c=e},common:{deptUser:e=>c({url:"/system/dept/list/dept/user",param:{subjectId:e},type:"get"}),getTaskAuditor:(e,n)=>c({url:"/auth/post/getTaskAuditor",param:{deptId:e,taskPostIds:n},type:"post"}),chexiao:e=>c({url:m+"/tis/withdrawTask",param:{processInstId:e},type:"get"}),cuiban:e=>c({url:m+"/tis/reminders",param:{processInstId:e},type:"get"})},pis:{start:e=>c({url:p+"/pis/start",param:e,type:"post"}),createAndStart:e=>c({url:m+"/pis/createAndStart",param:e,type:"post"}),cancel:(e,n)=>c({url:p+"/pis/cancel",param:{processInstId:e,processBusinessKey:n},type:"post"}),findNodeParticipantRows:e=>c({url:p+"/pis/findNodeParticipantRows",param:{processInstId:e},type:"get"}),revoke:(e,n)=>c({url:p+"/pis/revoke",param:{processInstId:e,processBusinessKey:n},type:"post"}),getProcessStatus:(e,n)=>c({url:p+"/pis/getProcessStatus",param:{processInstId:e,taskId:n||""},type:"get"}),getProcessInstanceById:e=>c({url:p+"/pis/getProcessInstanceById",param:{processInstId:e},type:"get"}),reactivate:e=>c({url:m+"/pis/reactivate",param:e,type:"post"}),getProcessInstanceByBusinessKey:e=>c({url:p+"/pis/getProcessInstanceByBusinessKey",param:{businessKey:e},type:"get"}),getProcessForecast:e=>c({url:p+"/pis/getProcessForecast",param:e,type:"post"}),deleteProcessById:e=>c({url:p+"/pis/deleteProcessById",param:{processInstId:e},type:"get"})},tis:{getTaskModelDetail:e=>c({url:m+"/tis/getTaskModelDetail",param:e,type:"get"}),query:(e,n,r,t)=>c({url:p+"/tis/query",param:{appId:e,firstRow:n*r-r,rowCount:n*r,returnVars:!0,titleLike:t,taskState:1},type:"get"}),patchSave:e=>c({url:p+"/meta/annex/patchSave",param:e,type:"post"}),queryTaskPage(e,n,r,t,s=b.待处理,i,a){let o={url:p+"/tis/queryTaskPageByCriteria",param:{appIds:e,firstRow:n,rowCount:r,isReturnVars:!0,titleLike:t,taskState:s,varQueries:i,...a},type:"post"};return c(o)},queryHiTaskPage(e,n,r,t="",s=b.待处理,i,a){let o={url:p+"/tis/queryHiTaskPageByCriteria",param:{appIds:e,firstRow:n,rowCount:r,isReturnVars:!0,titleLike:t,taskState:s,varQueries:i,...a},type:"post"};return c(o)},getTaskCommentList:(e,n)=>c({url:p+"/tis/getTaskCommentList",param:{processInstId:e,processBusinessKey:n},type:"get"}),complete:e=>c({url:m+"/tis/complete",param:e,type:"post"}),delegate:e=>c({url:p+"/tis/delegate",param:e,type:"post"}),transferTask:e=>c({url:m+"/tis/transferTask",param:e,type:"post"}),withdrawTask:e=>c({url:m+"/tis/withdrawTask",param:{processInstId:e},type:"get"}),addMultiInstance:e=>c({url:m+"/tis/addMultiInstance",param:e,type:"post"}),reject:(e,n)=>c({url:p+"/tis/reject",param:{taskInstId:e,commentMsg:n},type:"post"}),simulation:(e,n,r)=>c({url:m+"/tis/simulation",param:{taskId:e},type:"get"}),createDynamicTask:e=>c({url:p+"/tis/createDynamicTask",param:e,type:"post"}),createCCTask:e=>c({url:m+"/tis/createCCTask",param:e,type:"post"}),reminders:e=>c({url:m+"/tis/reminders",param:{processInstId:e},type:"get"}),getReturnableNodes:e=>c({url:p+"/tis/getReturnableNodes",param:{taskId:e},type:"get"}),rollback:(e,n,r)=>c({url:m+"/tis/rollback",param:{taskInstId:e,rollbackReason:r,targetActivityId:n},type:"post"})},repository:{getUserTaskModelCmd:e=>c({url:p+"/repository/getUserTaskModel",param:{taskId:e},type:"get"}),getAfferentParticipantNodeList:e=>c({url:p+"/repository/getAfferentParticipantNodeList",param:{processDefId:e},type:"get"}),getXmlByProcessDefId:e=>c({url:m+"/process/getXmlByProcessDefId",param:e,type:"get"}),backNodes:e=>c({url:m+"/process/getBackNodes",param:e,type:"get"}),getDiagramUrl:e=>c({url:m+"/repository/getDiagramUrl",param:e,type:"get"}),getTrackUrl:e=>c({url:p+"/repository/getTrackUrl",param:e,type:"get"}),getProcessDefList:(e,n)=>c({url:m+"/repository/getProcessDefList",param:{appId:e,processGroupName:n},type:"post"}),getProcessDefListNew(e){let n={url:m+"/repository/getProcessDefList",param:{...e,businessCode:e.businessCode||e.businessType},type:"post"};return c(n)},getOutgoingProcessNode:(e,n)=>c({url:m+"/tis/getOutgoingProcessNode",param:{taskId:e,processNodeId:n},type:"get"}),queryTaskNodeList:e=>c({url:m+"/repository/queryTaskNodeList",param:{processInstId:e},type:"get"}),getFirstProcessNode:e=>c({url:m+"/repository/getAllProcessNode",param:{processDefId:e},type:"get"}),getParticipantsOfPerformerNames:(e,n)=>c({url:p+"/repository/getParticipantsOfPerformerNames?taskInstId="+e,param:{taskInstId:e,userTaskDefIds:n},type:"post"})},org:{list:(e="",n="",r="")=>c({url:p+"/org/list",param:{deptId:n,companyId:r,searchKey:e},type:"get"}),findTeamMember:(e="",n="")=>c({url:p+"/org/findTeamMember",param:{teamId:n,searchKey:e},type:"get"})},user:{getTaskAuditor:e=>c({url:h+"/user/getTaskAuditor",param:e,type:"post",headers:{"X-Tag":"lwl "}}),getSelectTree:e=>c({url:h+"/dept/list/user/dept/selectTree",param:e,type:"get",headers:{"X-Tag":"lwl "}})}};const u={success:200,err:500,empty:404},g={"电脑端":"pc","移动端":"mobile"},A={"人员":1,"部门":0,"主体":-1,"群组":2},b={"待处理":1,"抄送":2,"不处理":4,"无子节点":11},v={"单一分支":"ExclusiveGatewayModel","用户任务":"UserTaskModel","用户节点":"userTask","多选节点":"InclusiveGatewayModel","结束":"endEvent","结束事件":"EndEventModel"};var y=Object.freeze({__proto__:null,AdHocType:{"阅办":0,"会签":1,"加签":2,"协同":3},DiagramType:{"缩略图":0,"原始大图":1},OperationType:{"加签":"counterSignLabel"},ProcessNodeType:v,SealBusinessSign:{"流程待办":1,"业务待办":2},SourceType:g,TaskState:b,UserType:A,apiCode:u}),x={components:{departPerson:t},unmounted(){window.clearInterval(this.searchInterval)},props:{modelValue:{type:Object|String},defaultOption:{type:Array},personType:"",personEntity:{type:Object,default:()=>{}},disable:!1,multiple:{default:!1,type:Boolean},max:{default:1,type:Number},items:{default:void 0,type:Array},processNodeObj:{default:void 0,request:!1},isAlis:{type:Boolean,default:!1}},inject:{isAlisInject:{value:"isAlisInject",default:null}},data(){return{visible:!1,treeOptions:null,selectModel:this.multiple?[]:void 0,treeSearchOptions:null,noPostOption:!1,onePostUser:!1,positionArray:[],searchTime:-1,searchParam:"",userList:[],checkedArray:[],entity:{source:"1",type:this.personType||"0",request:f.getAjaxObj(),orgType:[],codeType:[3],multiple:!0,maxMultiple:this.processNodeObj&&-1==this.processNodeObj.loopCardinality?1e3:this.max>1?this.max:1,deptCode:this.processNodeObj?this.getDeptCode(1):"",deptCodeArray:this.processNodeObj&&this.getDeptCode(0)||[],subjectName:this.processNodeObj?this.getSubjectName():""},searchInterval:window.setInterval(this.searchIntervalFunc,100)}},model:{prop:"modelValue",event:"update:modelValue"},mounted(){""!=this.personEntity&&(this.entity={...this.entity,...this.personEntity}),this.processNodeObj&&this.processNodeObj.participantList&&this.processNodeObj.participantList.length>0&&(this.processNodeObj.participantList.map(e=>{e.id=e.id}),this.userList=this.processNodeObj.participantList,this.checkedArray=this.processNodeObj.participantList.map(e=>({type:3,id:e.id,name:e.name||e.realName,subjectId:e.subjectId})),this.$emit("update:modelValue",this.userList.map(e=>e.id)),this.$emit("select",this.userList)),this.gePostUsers()},methods:{getSubjectName(){let e="";return"固定单位"==this.processNodeObj.humanPerformerName&&(e=this.processNodeObj.routeTxt.companyIds[0].name),e},gePostUsers(){if("固定角色/岗位"==this.processNodeObj.humanPerformerName){let{routeTxt:e}=this.processNodeObj,n={taskDefId:this.processNodeObj.id,postIds:[]};e.postList.map(e=>{n.postIds.push(e.postId)}),e.postList&&e.postList.length>0&&f.common.getTaskAuditor(this.personEntity._businessDeptId?this.personEntity._businessDeptId:this.processNodeObj.taskNode?this.processNodeObj.taskNode[0].vars._businessDeptId:"",[n]).then(e=>{let n=[],r=[],t=!1;e.data.map(e=>{e.posts.map(e=>{r.push(...e.users),1==e.users.length?n.push(...e.users):t=!0})}),n.length>this.entity.maxMultiple&&0!=this.entity.maxMultiple&&(t=!0),t&&(n=[]),0!=r.length?(n.length>0&&(this.onePostUser=!0,this.handleCallback(n)),this.entity.orgType=[5],this.entity.codeType=[8],e.data[0].posts.map(e=>{this.positionArray.push({...e,projectPost:!(this.personEntity._businessDeptId||this.processNodeObj.taskNode&&this.processNodeObj.taskNode[0].vars._businessDeptId),id:e.users.map(e=>e.id)})})):this.noPostOption=!0})}},getDeptCode(e){let n="";return"固定部门"==this.processNodeObj.humanPerformerName&&("1"==e&&1==this.processNodeObj.routeTxt.departmentIds.length&&(n=this.processNodeObj.routeTxt.departmentIds[0].rangeId),"0"==e&&this.processNodeObj.routeTxt.departmentIds.length>1&&(n=this.processNodeObj.routeTxt.departmentIds.map(e=>e.rangeId))),n},handleCallback(e){this.userList=e,this.checkedArray=this.userList.map(e=>({type:3,id:e.id,name:e.name||e.realName,subjectId:e.subjectId})),this.$emit("update:modelValue",this.userList.map(e=>e.id)),this.$emit("select",this.userList)},handleClose(e){this.userList.splice(e,1),this.checkedArray=this.userList.map(e=>({type:3,id:e.id,name:e.name||e.realName,subjectId:e.subjectId})),this.$emit("update:modelValue",this.userList.map(e=>e.id)),this.$emit("select",this.userList)},searchIntervalFunc(){this.searchTime>0&&(this.searchTime-=100),0==this.searchTime&&(this.searchTime=-1,!this.searchParam||this.items&&this.items.length>0?this.treeSearchOptions=null:f.org.list(this.searchParam).then(async e=>{if(e.code==u.success){let n=e.data.map(e=>(e.children=null,e.label=e.name,e.id=e.id,e.deptName=e.deptName,e.alisName=e.alisName,e));this.treeSearchOptions=n,await this.$nextTick(),this.$refs.deptTree.forest.normalizedOptions.forEach(e=>{e.isBranch=!1}),await this.$nextTick(),this.$refs.deptTree.handleLocalSearch()}}))},searchChange(e){this.searchParam=e,this.searchTime=500},onSelect(e,n){this.$emit("update:modelValue",this.selectModel),this.$emit("select",e)},onInput(n,r){this.max>0&&this.multiple&&n.length>this.max&&n.length>this.max?(this.$refs.deptTree.clear(),this.$refs.deptTree.forest.selectedNodeIds=this.selectModel,this.$refs.deptTree.select(this.selectModel),e.warning(`最多选择 ${this.max} 人`)):(this.selectModel=n,this.$emit("update:modelValue",this.selectModel))},normalizer(e){if(e.children&&!e.children.length&&delete e.children,e.leaf){let n=`${e.deptName} - ${e.label}(${e.phone})`;return(this.isAlis||this.isAlisInject)&&e.alisName&&(n+="participantList -- "+e.alisName),this.$refs.deptTree.trigger.searchQuery&&(n+=`(${this.$refs.deptTree.trigger.searchQuery})`),{id:e.id,label:n,leaf:e.leaf,phone:e.phone,deptName:e.deptName,alisName:e.alisName}}return{id:e.id,label:e.label,leaf:e.leaf,phone:e.phone,children:e.children,deptName:e.deptName,alisName:e.alisName}},async loadTreeOptions({action:e,parentNode:n,callback:r,instanceId:t}){if(e===LOAD_ROOT_OPTIONS)if(this.items){let e=this.items.map(e=>(e.children=null,e.label=e.name,e.id=e.id,e));this.$set(this,"treeOptions",e)}else f.org.list().then(e=>{if(e.code==u.success){let n=e.data.map(e=>(e.children=null,e.label=e.name,e.id=e.id,e));this.defaultOption&&(n=[...n,...this.defaultOption]),this.$set(this,"treeOptions",n)}});else if(e===LOAD_CHILDREN_OPTIONS){let e=n.id,t="";if(n.orgType==A.主体&&(t=n.id,e=""),n.orgType==A.群组)return void f.org.findTeamMember("",e).then(e=>{let t=e.data.map(e=>(e.label=e.name,e.id=e.id,e));n.children=t,r()});f.org.list("",e,t).then(e=>{if(e.code==u.success){let t=e.data.map(e=>(e.leaf||(e.children=null),e.label=e.name,e.id=e.id,e));n.children=t,r()}})}}}};function I(e,n,r,t,s,i,a,o,l,d){"boolean"!=typeof a&&(l=o,o=a,a=!1);const c="function"==typeof r?r.options:r;let p;if(e&&e.render&&(c.render=e.render,c.staticRenderFns=e.staticRenderFns,c._compiled=!0,s&&(c.functional=!0)),t&&(c._scopeId=t),i?(p=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(i)},c._ssrRegister=p):n&&(p=a?function(e){n.call(this,d(e,this.$root.$options.shadowRoot))}:function(e){n.call(this,o(e))}),p)if(c.functional){const e=c.render;c.render=function(n,r){return p.call(r),e(n,r)}}else{const e=c.beforeCreate;c.beforeCreate=e?[].concat(e,p):[p]}return r}const w="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());function k(e){return(e,n)=>function(e,n){const r=w?n.media||"default":e,t=C[r]||(C[r]={ids:new Set,styles:[]});if(!t.ids.has(e)){t.ids.add(e);let r=n.source;if(n.map&&(r+="\n/*# sourceURL="+n.map.sources[0]+" */",r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n.map))))+" */"),t.element||(t.element=document.createElement("style"),t.element.type="text/css",n.media&&t.element.setAttribute("media",n.media),void 0===T&&(T=document.head||document.getElementsByTagName("head")[0]),T.appendChild(t.element)),"styleSheet"in t.element)t.styles.push(r),t.element.styleSheet.cssText=t.styles.filter(Boolean).join("\n");else{const e=t.ids.size-1,n=document.createTextNode(r),s=t.element.childNodes;s[e]&&t.element.removeChild(s[e]),s.length?t.element.insertBefore(n,s[e]):t.element.appendChild(n)}}}(e,n)}let T;const C={};const D=x;var N=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("div",{staticClass:"user-list"},[e.processNodeObj&&"固定角色/岗位"==e.processNodeObj.humanPerformerName?[e.noPostOption?r("span",[e._v("没有可选人员,请检查配置")]):e.userList.length>=1?r("span",{staticStyle:{"margin-right":"10px"}},[e._v(e._s(e.userList.map(function(e){return e.name}).join(";")))]):e._e(),e._v(" "),e.noPostOption||e.onePostUser?e._e():r("span",{staticClass:"staff-tree-btn",on:{click:function(n){!e.disable&&(e.visible=!0)}}},[e._v("选择")])]:[e.userList.length>0?r("span",{staticStyle:{"margin-right":"10px"}},[e._v(e._s(e.userList.map(function(e){return e.name}).join(";")))]):e._e(),e._v(" "),r("span",{staticClass:"staff-tree-btn",on:{click:function(n){!e.disable&&(e.visible=!0)}}},[e._v("选择")])]],2),e._v(" "),r("departPerson",e._b({attrs:{visible:e.visible,checkedArray:e.checkedArray,positionArray:e.positionArray},on:{"update:visible":function(n){e.visible=n},callback:e.handleCallback}},"departPerson",e.entity,!1))],1)};N._withStripped=!0;const O=I({render:N,staticRenderFns:[]},function(e){e&&e("data-v-61e6d5d3_0",{source:"\n.staffTree[data-v-61e6d5d3] {\r\n line-height: initial;\n}\n.staff-tree-btn[data-v-61e6d5d3] {\r\n color: rgb(19, 137, 255);\r\n font-size: 14px;\r\n cursor: pointer;\n}\r\n",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\staff-tree.vue"],names:[],mappings:";AAkbA;EACA,oBAAA;AACA;AACA;EACA,wBAAA;EACA,eAAA;EACA,eAAA;AACA",file:"staff-tree.vue",sourcesContent:['<template>\r\n <div>\r\n <div class="user-list">\r\n <template\r\n v-if="\r\n processNodeObj && processNodeObj.humanPerformerName == \'固定角色/岗位\'\r\n "\r\n >\r\n <span v-if="noPostOption">没有可选人员,请检查配置</span>\r\n <span v-else-if="userList.length >= 1" style="margin-right: 10px">{{\r\n userList.map((item) => item.name).join(";")\r\n }}</span>\r\n <span\r\n v-if="!noPostOption && !onePostUser"\r\n @click="!disable ? (visible = true) : \'\'"\r\n class="staff-tree-btn"\r\n >选择</span\r\n >\r\n </template>\r\n <template v-else>\r\n <span v-if="userList.length > 0" style="margin-right: 10px">{{\r\n userList.map((item) => item.name).join(";")\r\n }}</span>\r\n <span @click="!disable ? (visible = true) : \'\'" class="staff-tree-btn"\r\n >选择</span\r\n >\r\n </template>\r\n </div>\r\n\r\n <departPerson\r\n :visible.sync="visible"\r\n v-bind="entity"\r\n :checkedArray="checkedArray"\r\n :positionArray="positionArray"\r\n @callback="handleCallback"\r\n ></departPerson>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "./api";\r\n// import treeselect, { LOAD_ROOT_OPTIONS, LOAD_CHILDREN_OPTIONS } from \'@riophae/vue-treeselect\';\r\n// import \'@riophae/vue-treeselect/dist/vue-treeselect.css\';\r\nimport { Message as ElMessage } from "element-ui"; //ElMessage\r\nimport * as $enum from "./enum";\r\nimport { departPerson } from "checked-pick-pc";\r\nimport "checked-pick-pc/style.css";\r\n\r\nexport default {\r\n components: { departPerson },\r\n unmounted() {\r\n window.clearInterval(this.searchInterval);\r\n },\r\n props: {\r\n modelValue: { type: Object | String },\r\n defaultOption: { type: Array },\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n disable: false,\r\n multiple: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n max: {\r\n default: 1,\r\n type: Number,\r\n },\r\n items: {\r\n default: undefined,\r\n type: Array,\r\n },\r\n processNodeObj: {\r\n default: undefined,\r\n request: false,\r\n },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n inject: {\r\n isAlisInject: { value: "isAlisInject", default: null },\r\n // getUserInfo: { value: "getUserInfo", default: {} },\r\n },\r\n data() {\r\n return {\r\n visible: false,\r\n treeOptions: null,\r\n selectModel: this.multiple ? [] : undefined,\r\n treeSearchOptions: null,\r\n noPostOption: false,\r\n onePostUser: false,\r\n positionArray: [],\r\n searchTime: -1,\r\n searchParam: "",\r\n userList: [],\r\n checkedArray: [],\r\n entity: {\r\n source: "1",\r\n type: this.personType || "0",\r\n request: api.getAjaxObj(),\r\n orgType: [],\r\n codeType: [3],\r\n multiple: true,\r\n maxMultiple:\r\n this.processNodeObj && this.processNodeObj.loopCardinality == -1\r\n ? 1000\r\n : (this.max > 1 ? this.max : 1),\r\n deptCode: this.processNodeObj ? this.getDeptCode(1) : "",\r\n deptCodeArray: this.processNodeObj ? this.getDeptCode(0) || [] : [],\r\n subjectName: this.processNodeObj ? this.getSubjectName() : "",\r\n // uuuid: this.processNodeObj?this.gePostUsers() : ""\r\n },\r\n searchInterval: window.setInterval(this.searchIntervalFunc, 100),\r\n };\r\n },\r\n model: {\r\n prop: "modelValue",\r\n event: "update:modelValue",\r\n },\r\n mounted() {\r\n if (this.personEntity != "") {\r\n this.entity = {\r\n ...this.entity,\r\n ...this.personEntity,\r\n };\r\n }\r\n if (\r\n this.processNodeObj &&\r\n this.processNodeObj.participantList &&\r\n this.processNodeObj.participantList.length > 0\r\n ) {\r\n this.processNodeObj.participantList.map((item) => {\r\n item["id"] = item["id"];\r\n });\r\n this.userList = this.processNodeObj.participantList;\r\n\r\n this.checkedArray = this.processNodeObj.participantList.map((item) => {\r\n return {\r\n type: 3,\r\n id: item.id,\r\n name: item.name || item.realName,\r\n subjectId: item.subjectId,\r\n };\r\n });\r\n this.$emit(\r\n "update:modelValue",\r\n this.userList.map((item) => item.id)\r\n );\r\n this.$emit("select", this.userList);\r\n }\r\n // console.log(this.entity.request);\r\n // this.entity.request = {\r\n // get: 222,\r\n // post: 444,\r\n // };\r\n this.gePostUsers();\r\n },\r\n methods: {\r\n getSubjectName() {\r\n let rData = "";\r\n if (this.processNodeObj.humanPerformerName == "固定单位") {\r\n rData = this.processNodeObj.routeTxt.companyIds[0]["name"];\r\n }\r\n return rData;\r\n },\r\n gePostUsers() {\r\n if (this.processNodeObj.humanPerformerName == "固定角色/岗位") {\r\n let { routeTxt } = this.processNodeObj;\r\n let taskPostIds = {\r\n taskDefId: this.processNodeObj.id,\r\n postIds: [],\r\n };\r\n routeTxt.postList.map((item) => {\r\n taskPostIds.postIds.push(item["postId"]);\r\n });\r\n if (routeTxt.postList && routeTxt.postList.length > 0) {\r\n api.common\r\n .getTaskAuditor(\r\n\t\t\t\tthis.personEntity._businessDeptId ? this.personEntity._businessDeptId : \r\n\t\t\t\t this.processNodeObj.taskNode ? this.processNodeObj.taskNode[0]["vars"]._businessDeptId : \'\',\r\n [taskPostIds]\r\n )\r\n .then((e) => {\r\n let users = [];\r\n let allUsers = [];\r\n let sign = false;\r\n e.data.map((item) => {\r\n item.posts.map((_item) => {\r\n allUsers.push(..._item["users"])\r\n if (_item["users"].length == 1) {\r\n users.push(..._item["users"]);\r\n } else {\r\n sign = true;\r\n }\r\n });\r\n });\r\n if (\r\n users.length > this.entity.maxMultiple &&\r\n this.entity.maxMultiple != 0\r\n )\r\n sign = true;\r\n\r\n if (sign) users = [];\r\n\r\n if (allUsers.length == 0) {\r\n this.noPostOption = true;\r\n return;\r\n }\r\n if (users.length > 0) {\r\n this.onePostUser = true;\r\n this.handleCallback(users);\r\n }\r\n this.entity.orgType = [5];\r\n this.entity.codeType = [8];\r\n e.data[0].posts.map((item) => {\r\n this.positionArray.push({\r\n ...item,\r\n\t\t\t\t projectPost: this.personEntity._businessDeptId || (this.processNodeObj.taskNode && this.processNodeObj.taskNode[0]["vars"]._businessDeptId) ? false : true,\r\n id: item.users.map((item) => item.id),\r\n });\r\n });\r\n });\r\n }\r\n }\r\n },\r\n getDeptCode(type) {\r\n let rData = "";\r\n if (this.processNodeObj.humanPerformerName == "固定部门") {\r\n if (\r\n type == "1" &&\r\n this.processNodeObj.routeTxt.departmentIds.length == 1\r\n ) {\r\n rData = this.processNodeObj.routeTxt.departmentIds[0]["rangeId"];\r\n }\r\n if (\r\n type == "0" &&\r\n this.processNodeObj.routeTxt.departmentIds.length > 1\r\n ) {\r\n rData = this.processNodeObj.routeTxt.departmentIds.map(\r\n (item) => item["rangeId"]\r\n );\r\n }\r\n }\r\n return rData;\r\n },\r\n handleCallback(e) {\r\n console.log("========handleCallback", e);\r\n this.userList = e;\r\n this.checkedArray = this.userList.map((item) => {\r\n return {\r\n type: 3,\r\n id: item.id,\r\n name: item.name || item.realName,\r\n subjectId: item.subjectId,\r\n };\r\n });\r\n this.$emit(\r\n "update:modelValue",\r\n this.userList.map((item) => item.id)\r\n );\r\n this.$emit("select", this.userList);\r\n },\r\n handleClose(index) {\r\n this.userList.splice(index, 1);\r\n this.checkedArray = this.userList.map((item) => {\r\n return {\r\n type: 3,\r\n id: item.id,\r\n name: item.name || item.realName,\r\n subjectId: item.subjectId,\r\n };\r\n });\r\n this.$emit(\r\n "update:modelValue",\r\n this.userList.map((item) => item.id)\r\n );\r\n this.$emit("select", this.userList);\r\n },\r\n searchIntervalFunc() {\r\n // console.log(searchTime)\r\n if (this.searchTime > 0) this.searchTime -= 100;\r\n if (this.searchTime == 0) {\r\n this.searchTime = -1;\r\n if (this.searchParam && !(this.items && this.items.length > 0))\r\n api.org.list(this.searchParam).then(async (res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n let obj = res.data.map((o) => {\r\n o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n o.deptName = o.deptName;\r\n o.alisName = o.alisName;\r\n return o;\r\n });\r\n this.treeSearchOptions = obj;\r\n await this.$nextTick();\r\n this.$refs.deptTree.forest.normalizedOptions.forEach((o) => {\r\n o.isBranch = false;\r\n });\r\n await this.$nextTick();\r\n this.$refs.deptTree.handleLocalSearch();\r\n }\r\n });\r\n else {\r\n this.treeSearchOptions = null;\r\n }\r\n }\r\n },\r\n searchChange(param) {\r\n this.searchParam = param;\r\n this.searchTime = 500;\r\n console.log(param, this.deptTree);\r\n },\r\n onSelect(node, instanceId) {\r\n this.$emit("update:modelValue", this.selectModel);\r\n this.$emit("select", node);\r\n },\r\n onInput(value, instanceId) {\r\n if (\r\n this.max > 0 &&\r\n this.multiple &&\r\n value.length > this.max &&\r\n value.length > this.max\r\n ) {\r\n this.$refs.deptTree.clear();\r\n this.$refs.deptTree.forest.selectedNodeIds = this.selectModel;\r\n this.$refs.deptTree.select(this.selectModel);\r\n console.log(this.$refs.deptTree.forest.selectedNodeIds);\r\n console.log(value);\r\n ElMessage.warning(`最多选择 ${this.max} 人`);\r\n } else {\r\n this.selectModel = value;\r\n this.$emit("update:modelValue", this.selectModel);\r\n }\r\n },\r\n normalizer(node) {\r\n if (node.children && !node.children.length) {\r\n delete node.children;\r\n }\r\n if (node.leaf) {\r\n let label = `${node.deptName} - ${node.label}(${node.phone})`;\r\n if ((this.isAlis || this.isAlisInject) && node.alisName)\r\n label += "participantList -- " + node.alisName;\r\n if (this.$refs.deptTree.trigger.searchQuery) {\r\n label += `(${this.$refs.deptTree.trigger.searchQuery})`;\r\n }\r\n return {\r\n id: node.id,\r\n label: label,\r\n leaf: node.leaf,\r\n phone: node.phone,\r\n deptName: node.deptName,\r\n alisName: node.alisName,\r\n };\r\n }\r\n return {\r\n id: node.id,\r\n label: node.label,\r\n leaf: node.leaf,\r\n phone: node.phone,\r\n children: node.children,\r\n deptName: node.deptName,\r\n alisName: node.alisName,\r\n };\r\n },\r\n async loadTreeOptions({ action, parentNode, callback, instanceId }) {\r\n if (action === LOAD_ROOT_OPTIONS) {\r\n if (this.items) {\r\n let obj = this.items.map((o) => {\r\n o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n return o;\r\n });\r\n this.$set(this, "treeOptions", obj);\r\n } else\r\n api.org.list().then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n let obj = res.data.map((o) => {\r\n o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n return o;\r\n });\r\n if (this.defaultOption) {\r\n obj = [...obj, ...this.defaultOption];\r\n }\r\n this.$set(this, "treeOptions", obj);\r\n }\r\n });\r\n } else if (action === LOAD_CHILDREN_OPTIONS) {\r\n let deptId = parentNode.id;\r\n let subjectId = "";\r\n if (parentNode.orgType == $enum.UserType.主体) {\r\n subjectId = parentNode.id;\r\n deptId = "";\r\n }\r\n if (parentNode.orgType == $enum.UserType.群组) {\r\n api.org.findTeamMember("", deptId).then((res) => {\r\n let obj = res.data.map((o) => {\r\n // o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n // o.leaf =true;\r\n return o;\r\n });\r\n parentNode.children = obj;\r\n callback();\r\n });\r\n return;\r\n }\r\n api.org.list("", deptId, subjectId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n let obj = res.data.map((o) => {\r\n if (!o.leaf) o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n return o;\r\n });\r\n parentNode.children = obj;\r\n callback();\r\n }\r\n });\r\n }\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n.staffTree {\r\n line-height: initial;\r\n}\r\n.staff-tree-btn {\r\n color: rgb(19, 137, 255);\r\n font-size: 14px;\r\n cursor: pointer;\r\n}\r\n</style>\r\n']},media:void 0})},D,"data-v-61e6d5d3",false,undefined,!1,k,void 0,void 0),j=require("./assets/xiazai.png"),L=require("./assets/yulan.png");const E={props:{dataList:{}},data:()=>({dialogImageUrl:"",dialogVisible:!1,xiazai:j,yulan:L}),computed:{sortData(){return this.dataList.sort((e,n)=>o(e.uploadTime).valueOf()-o(n.uploadTime).valueOf())}},methods:{getExt(e){if(!e)return"";let n=e.lastIndexOf(".");return e.substring(n+1).toLocaleLowerCase()},isAssetTypeAnImage(e){let n=this.getExt(e);return-1!==["png","jpg","jpeg","bmp","gif","webp","psd","svg","tiff"].indexOf(n.toLowerCase())},fileNameLastof(e,n=0){if(-1==e.indexOf("http")&&(n=0),!e)return;let r="/";-1!=e.indexOf("\\")&&(r="\\");let t=e,s=t.lastIndexOf(r);return t.substr(s+1+n,t.length)},formatSize(e){if(!e)return"";var n=1024;return e<n?e+"B":e<Math.pow(n,2)?(e/n).toFixed(2)+"KB":e<Math.pow(n,3)?(e/Math.pow(n,2)).toFixed(2)+"MB":e<Math.pow(n,4)?(e/Math.pow(n,3)).toFixed(2)+"G":(e/Math.pow(n,4)).toFixed(2)+"T"},handleDownload(e){let n=e.url||e.response.data.url;n&&this.downloadFile(n,e.name)},downloadFile:(e,n)=>{var r=document.createElement("a");r.download=n,r.style.display="none";var t=new Blob([e]);r.href=URL.createObjectURL(t),document.body.appendChild(r),r.click(),document.body.removeChild(r)},getFileUrl(e){let n=e.url||e.response.data.url;return this.isAssetTypeAnImage(n)?n:"zip"==this.getExt(n)||"rar"==this.getExt(n)?require("./assets/zip.png"):"doc"==this.getExt(n)||"docx"==this.getExt(n)?require("./assets/doc.png"):"xls"==this.getExt(n)||"xlsx"==this.getExt(n)?require("./assets/xls.png"):"pdf"==this.getExt(n)?require("./assets/pdf.png"):require("./assets/qt.png")},handlePictureCardPreview(e){let n=e.url||e.response.data.url,r=n.lastIndexOf(".");"zip"==n.substring(r+1)||"rar"==n.substring(r+1)?window.open(n):n.includes("https")?window.open(`https://wdyl.ddzg.cn:8089/?ssl=1&furl=${n}`):window.open(`https://wdyl.ddzg.cn:8089/?ssl=0&furl=${n}`)}}};var _=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{staticClass:"view-file"},[r("p",{staticClass:"lable"},[e._v("查看附件")]),e._v(" "),e._l(e.sortData,function(n,t){return r("div",{staticClass:"file-info"},[r("div",{staticClass:"name"},[r("el-image",{attrs:{src:e.getFileUrl(n),fit:"fill"}}),e._v(" "),r("div",[r("span",[e._v(" "+e._s(e.fileNameLastof(n.name)))]),e._v(" "),r("b",{staticClass:"time"},[e._v(e._s(n.uploadTime)+" | "+e._s(e.formatSize(n.size)))])])],1),e._v(" "),r("div",{staticClass:"op"},[r("div",{on:{click:function(r){return e.handlePictureCardPreview(n)}}},[r("el-image",{attrs:{src:e.yulan,fit:"fill"}}),e._v("\n 预览\n ")],1),e._v(" "),r("div",{on:{click:function(r){return e.handleDownload(n)}}},[r("el-image",{attrs:{src:e.xiazai,fit:"fill"}}),e._v("\n 下载\n ")],1)])])}),e._v(" "),r("el-dialog",{attrs:{"append-to-body":""},model:{value:e.dialogVisible,callback:function(n){e.dialogVisible=n},expression:"dialogVisible"}},[r("el-image",{staticStyle:{width:"100%"},attrs:{src:e.dialogImageUrl,alt:"Preview Image"}})],1)],2)};_._withStripped=!0;const P=I({render:_,staticRenderFns:[]},function(e){e&&e("data-v-31b9e4ca_0",{source:".view-file[data-v-31b9e4ca] {\n max-height: 400px;\n overflow: auto;\n padding: 4px 11px;\n}\n.view-file .time[data-v-31b9e4ca] {\n font-weight: 400;\n}\n.view-file .lable[data-v-31b9e4ca] {\n font-size: 16px;\n margin-bottom: 30px;\n margin-top: 0;\n color: #333;\n}\n.view-file .file-info[data-v-31b9e4ca] {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.view-file .file-info .name[data-v-31b9e4ca] {\n width: 100%;\n flex: 1;\n color: #000;\n display: flex;\n align-items: flex-start;\n}\n.view-file .file-info .name .el-image[data-v-31b9e4ca] {\n flex: none;\n width: 36px;\n height: 40px;\n margin-right: 14px;\n}\n.view-file .file-info .name > div[data-v-31b9e4ca] {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n}\n.view-file .file-info .name span[data-v-31b9e4ca] {\n display: inline-block;\n text-overflow: -o-ellipsis-lastline;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.view-file .file-info .name b[data-v-31b9e4ca] {\n color: #999999;\n}\n.view-file .op[data-v-31b9e4ca] {\n display: flex;\n align-items: center;\n width: 150px;\n}\n.view-file .op > div[data-v-31b9e4ca] {\n display: flex;\n align-items: center;\n margin-left: 20px;\n cursor: pointer;\n}\n.view-file .op .el-image[data-v-31b9e4ca] {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n}\n\n/*# sourceMappingURL=view-file.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\view-file.vue","view-file.vue"],names:[],mappings:"AA8JA;EACA,iBAAA;EACA,cAAA;EACA,iBAAA;AC7JA;AD8JA;EACA,gBAAA;AC5JA;AD8JA;EACA,eAAA;EACA,mBAAA;EACA,aAAA;EACA,WAAA;AC5JA;AD8JA;EACA,aAAA;EACA,mBAAA;EACA,mBAAA;AC5JA;AD6JA;EACA,WAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;EACA,uBAAA;AC3JA;AD6JA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;AC3JA;AD6JA;EACA,aAAA;EACA,sBAAA;EACA,2BAAA;AC3JA;AD6JA;EACA,qBAAA;EACA,mCAAA;EACA,gBAAA;EACA,uBAAA;EACA,oBAAA;EACA,qBAAA;EACA,aAAA;EACA,4BAAA;AC3JA;AD6JA;EACA,cAAA;AC3JA;ADgKA;EACA,aAAA;EACA,mBAAA;EACA,YAAA;AC9JA;AD+JA;EACA,aAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;AC7JA;AD+JA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;AC7JA;;AAEA,wCAAwC",file:"view-file.vue",sourcesContent:["<template>\r\n\r\n <div class=\"view-file\">\r\n <p class=\"lable\">查看附件</p>\r\n <div class=\"file-info\" v-for=\"(item,index) in sortData\">\r\n <div class=\"name\">\r\n <el-image :src=\"getFileUrl(item)\" fit=\"fill\"></el-image>\r\n <div>\r\n <span> {{ fileNameLastof(item.name) }}</span>\r\n <b class=\"time\">{{item.uploadTime}} | {{ formatSize(item.size) }}</b>\r\n </div>\r\n </div>\r\n\r\n <div class=\"op\">\r\n <div @click=\"handlePictureCardPreview(item)\">\r\n <el-image :src=\"yulan\" fit=\"fill\"></el-image>\r\n 预览\r\n </div>\r\n <div @click=\"handleDownload(item)\">\r\n <el-image :src=\"xiazai\" fit=\"fill\"></el-image>\r\n 下载\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <el-dialog v-model=\"dialogVisible\" append-to-body>\r\n <el-image :src=\"dialogImageUrl\" alt=\"Preview Image\" style=\"width: 100%;\" ></el-image>\r\n </el-dialog>\r\n </div>\r\n\r\n\r\n</template>\r\n\r\n<script>\r\n// import yulan from '../img/yulan.png'\r\n// import xiazai from '../img/xiazai.png'\r\n// import docIcon from '@/app/img/doc.png'\r\n// import pdfIcon from '@/app/img/pdf.png'\r\n// import xlsIcon from '@/app/img/xls.png'\r\n// import imgIcon from '@/app/img/img.png'\r\n// import zipIcon from '@/app/img/zip.png'\r\n// import { UploadFile } from 'element-plus'\r\nimport dayjs from 'dayjs';\r\n\r\n\r\n// import { ref } from 'vue'\r\nconst xiazai = require('./assets/xiazai.png')\r\nconst yulan = require('./assets/yulan.png')\r\n\r\n\r\nexport default{\r\n props:{\r\n dataList:{}\r\n },\r\n data(){\r\n return{\r\n dialogImageUrl:'',\r\n dialogVisible: false,\r\n xiazai,\r\n yulan\r\n }\r\n },\r\n computed:{\r\n sortData(){\r\n return this.dataList.sort((a,b)=>{\r\n return dayjs(a.uploadTime).valueOf() - dayjs(b.uploadTime).valueOf()\r\n })\r\n }\r\n },\r\n methods:{\r\n getExt(url){\r\n if (!url) return \"\";\r\n //获取最后一个.的位置\r\n let index = url.lastIndexOf(\".\");\r\n let ext = url.substring(index + 1);\r\n return ext.toLocaleLowerCase();\r\n },\r\n isAssetTypeAnImage(url) {\r\n //获取后缀\r\n let ext = this.getExt(url);\r\n return [\r\n 'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].\r\n indexOf(ext.toLowerCase()) !== -1;\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 formatSize (size) {\r\n if (!size) return '';\r\n var num = 1024.0; //byte\r\n if (size < num) return size + 'B';\r\n if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + 'KB'; //kb\r\n if (size < Math.pow(num, 3)) return (size / Math.pow(num, 2)).toFixed(2) + 'MB'; //M\r\n if (size < Math.pow(num, 4)) return (size / Math.pow(num, 3)).toFixed(2) + 'G'; //G\r\n return (size / Math.pow(num, 4)).toFixed(2) + 'T'; //T\r\n },\r\n handleDownload(uploadFile){\r\n let url = uploadFile.url || uploadFile.response.data.url;\r\n if (url)\r\n this.downloadFile(url,uploadFile.name)\r\n },\r\n downloadFile: (fileurl, filename) => {\r\n //fileurl文件地址(一般是接口返回) filename文件下载后的名字\r\n var a = document.createElement(\"a\");\r\n a.download = filename; //下载后文件名\r\n a.style.display = \"none\";\r\n var blob = new Blob([fileurl]); // 字符内容转变成blob地址 二进制地址\r\n a.href = URL.createObjectURL(blob);\r\n document.body.appendChild(a);\r\n a.click(); // 触发点击\r\n document.body.removeChild(a); // 然后移除\r\n },\r\n getFileUrl(uploadFile){\r\n let url = uploadFile.url || uploadFile.response.data.url;\r\n\r\n if (this.isAssetTypeAnImage(url)) {\r\n return url;\r\n } else if (this.getExt(url) == \"zip\" || this.getExt(url) == \"rar\") {\r\n return require('./assets/zip.png');\r\n } else if (this.getExt(url) == \"doc\" || this.getExt(url) == \"docx\") {\r\n return require('./assets/doc.png');\r\n } else if (this.getExt(url) == \"xls\" || this.getExt(url) == \"xlsx\") {\r\n return require('./assets/xls.png');\r\n } else if (this.getExt(url) == \"pdf\") {\r\n return require('./assets/pdf.png');\r\n }\r\n return require('./assets/qt.png');\r\n },\r\n handlePictureCardPreview(uploadFile){\r\n let url = uploadFile.url || uploadFile.response.data.url;\r\n let index = url.lastIndexOf(\".\");\r\n if (url.substring(index + 1) == \"zip\" || url.substring(index + 1) == \"rar\") {\r\n window.open(url);\r\n } else {\r\n if (url.includes(\"https\"))\r\n window.open(`https://wdyl.ddzg.cn:8089/?ssl=1&furl=${url}`);\r\n else\r\n window.open(`https://wdyl.ddzg.cn:8089/?ssl=0&furl=${url}`);\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\n<\/script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\r\n .view-file{\r\n max-height: 400px;\r\n overflow: auto;\r\n padding: 4px 11px;\r\n .time{\r\n font-weight: 400;\r\n }\r\n .lable{\r\n font-size: 16px;\r\n margin-bottom: 30px;\r\n margin-top: 0;\r\n color: #333;\r\n }\r\n .file-info{\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n .name{\r\n width: 100%;\r\n flex: 1;\r\n color: #000;\r\n display: flex;\r\n align-items: flex-start;\r\n\r\n .el-image{\r\n flex: none;\r\n width: 36px;\r\n height: 40px;\r\n margin-right: 14px;\r\n }\r\n &>div{\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n }\r\n span{\r\n display: inline-block;\r\n text-overflow: -o-ellipsis-lastline;\r\n overflow: hidden;\t\t\t\t//溢出内容隐藏\r\n text-overflow: ellipsis;\t\t//文本溢出部分用省略号表示\r\n display: -webkit-box;\t\t\t//特别显示模式\r\n -webkit-line-clamp: 2;\t\t\t//行数\r\n line-clamp: 2;\r\n -webkit-box-orient: vertical;\t//盒子中内容竖直排列\r\n }\r\n b{\r\n color: #999999;\r\n // margin-top: 10px;\r\n }\r\n }\r\n }\r\n .op{\r\n display: flex;\r\n align-items: center;\r\n width: 150px;\r\n &>div{\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n cursor: pointer;\r\n }\r\n .el-image{\r\n width: 16px;\r\n height: 16px;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n</style>\r\n",".view-file {\n max-height: 400px;\n overflow: auto;\n padding: 4px 11px;\n}\n.view-file .time {\n font-weight: 400;\n}\n.view-file .lable {\n font-size: 16px;\n margin-bottom: 30px;\n margin-top: 0;\n color: #333;\n}\n.view-file .file-info {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.view-file .file-info .name {\n width: 100%;\n flex: 1;\n color: #000;\n display: flex;\n align-items: flex-start;\n}\n.view-file .file-info .name .el-image {\n flex: none;\n width: 36px;\n height: 40px;\n margin-right: 14px;\n}\n.view-file .file-info .name > div {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n}\n.view-file .file-info .name span {\n display: inline-block;\n text-overflow: -o-ellipsis-lastline;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.view-file .file-info .name b {\n color: #999999;\n}\n.view-file .op {\n display: flex;\n align-items: center;\n width: 150px;\n}\n.view-file .op > div {\n display: flex;\n align-items: center;\n margin-left: 20px;\n cursor: pointer;\n}\n.view-file .op .el-image {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n}\n\n/*# sourceMappingURL=view-file.vue.map */"]},media:void 0})},E,"data-v-31b9e4ca",false,undefined,!1,k,void 0,void 0);const B={components:{staffTree:O},props:{param:Object},data:()=>({reason:"",targetUser:[]}),methods:{getRes(){return{targetUser:this.targetUser}},confirm(n,r){if(!this.targetUser||0==this.targetUser.length)return e.warning("请选择审核人"),!1;if(!this.reason)return e.warning("请填写加签原因"),!1;if(this.reason.length>200)return e.warning("加签原因不能超过200个字"),!1;let t=this.targetUser.join(",")||"";n&&n(),r(),f.tis.addMultiInstance({taskId:this.param.taskInstId,assignee:t,comment:this.reason}).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})}}};var M=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"加签人员",rules:[{required:!0,message:"请选择加签人员"}]}},[r("staffTree",{attrs:{personType:e.param.personType,personEntity:e.param.personEntity,multiple:"",max:5},model:{value:e.targetUser,callback:function(n){e.targetUser=n},expression:"targetUser"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"加签原因",rules:[{required:!0,message:"加签原因不能为空"}]}},[r("el-input",{staticClass:"formInput",attrs:{rows:5,maxlength:"200","show-word-limit":"",resize:"none",type:"textarea",placeholder:"请输入加签原因(200字以内)"},model:{value:e.reason,callback:function(n){e.reason=n},expression:"reason"}})],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};M._withStripped=!0;const $=I({render:M,staticRenderFns:[]},function(e){e&&e("data-v-2b96c561_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\counterSign.vue"],names:[],mappings:";AAuFA,uBAAA",file:"counterSign.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="加签人员"\r\n :rules="[{ required: true, message: \'请选择加签人员\' }]"\r\n >\r\n <staffTree :personType="param.personType" :personEntity="param.personEntity" v-model="targetUser" multiple :max="5"></staffTree>\r\n </el-form-item>\r\n <el-form-item\r\n label="加签原因"\r\n :rules="[{ required: true, message: \'加签原因不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="reason"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n type="textarea"\r\n placeholder="请输入加签原因(200字以内)"\r\n class="formInput"\r\n />\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n reason: "",\r\n targetUser: [],\r\n };\r\n },\r\n methods: {\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n\r\n confirm(preposition,loading) {\r\n if (!this.targetUser || this.targetUser.length == 0) {\r\n ElMessage.warning("请选择审核人");\r\n return false;\r\n }\r\n if (!this.reason) {\r\n ElMessage.warning("请填写加签原因");\r\n return false;\r\n }\r\n if (this.reason.length > 200) {\r\n ElMessage.warning("加签原因不能超过200个字");\r\n return false;\r\n }\r\n let ids = this.targetUser.join(",") || "";\r\n if (preposition)preposition();\r\n loading();\r\n api.tis\r\n .addMultiInstance({\r\n // processInstId: this.param.processInstId,\r\n taskId: this.param.taskInstId,\r\n assignee: ids,\r\n // adHocType: $enum.AdHocType.加签,\r\n comment: this.reason,\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},B,"data-v-2b96c561",false,undefined,!1,k,void 0,void 0);const F={props:{showLabel:!1},data:()=>({value:"",list:[]}),mounted(){this.getList()},methods:{addIdea(e){if(!e)return this.$message({type:"error",message:"请输入意见后重试"});this.$confirm(`将”${e}”设为常用意见。`,"操作信息提醒",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}).then(()=>{f.getAjaxObj().post("/auth/user/opinion/save",{opinionName:e}).then(e=>{e.success?(this.getList(),this.$message({type:"success",message:"设置成功"})):this.$message({type:"error",message:e.msg})})})},changeFun(){this.$emit("change",this.value),this.value=""},getList(){f.getAjaxObj().get("/auth/user/opinion/my","").then(e=>{this.list=e.data})},del(e){this.$confirm("此操作将永久删除该意见, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{f.getAjaxObj().get(`/auth/user/opinion/del/${e.opinionId}`,"").then(e=>{this.getList(),this.$message({type:"success",message:"删除成功"})})}).catch(()=>{})}}};var S=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-select",{staticClass:"select",attrs:{placeholder:"选择常用意见"},on:{change:e.changeFun},model:{value:e.value,callback:function(n){e.value=n},expression:"value"}},e._l(e.list,function(n,t){return r("el-option",{key:n.opinionId,attrs:{label:n.opinionName,value:n.opinionName}},[r("el-tooltip",{attrs:{effect:"dark","visible-arrow":!0,"popper-class":"pr-option-tooltip",content:n.opinionName,placement:"right"}},[r("div",{staticClass:"option-c"},[r("span",[e._v(e._s(n.opinionName))]),e._v(" "),r("i",{staticClass:"el-icon-delete",staticStyle:{float:"right"},on:{click:function(r){return r.stopPropagation(),e.del(n)}}})])])],1)}),1)],1)};S._withStripped=!0;const U=I({render:S,staticRenderFns:[]},function(e){e&&(e("data-v-562eb279_0",{source:".pr-option-tooltip {\n max-width: 200px;\n max-height: 100px;\n overflow: auto;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\commIdea.vue","commIdea.vue"],names:[],mappings:"AAyHA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;ACxHA;;AAEA,uCAAuC",file:"commIdea.vue",sourcesContent:['<template>\r\n <div>\r\n <el-select\r\n class="select"\r\n v-model="value"\r\n @change="changeFun"\r\n placeholder="选择常用意见"\r\n >\r\n <el-option\r\n :label="item.opinionName"\r\n :value="item.opinionName"\r\n v-for="(item, index) in list"\r\n :key="item.opinionId"\r\n >\r\n <el-tooltip\r\n effect="dark"\r\n :visible-arrow="true"\r\n popper-class="pr-option-tooltip"\r\n :content="item.opinionName"\r\n placement="right"\r\n >\r\n <div class="option-c">\r\n <span>{{ item.opinionName }}</span>\r\n <i\r\n @click.stop="del(item)"\r\n style="float: right"\r\n class="el-icon-delete"\r\n ></i>\r\n </div>\r\n </el-tooltip>\r\n </el-option>\r\n </el-select>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "../api";\r\n\r\nexport default {\r\n props: {\r\n showLabel: false,\r\n },\r\n data() {\r\n return {\r\n value: "",\r\n list: [],\r\n };\r\n },\r\n mounted() {\r\n this.getList();\r\n },\r\n methods: {\r\n addIdea(commentMsg) {\r\n if (!commentMsg)\r\n return this.$message({\r\n type: "error",\r\n message: "请输入意见后重试",\r\n });\r\n\r\n this.$confirm(`将”${commentMsg}”设为常用意见。`, "操作信息提醒", {\r\n confirmButtonText: "继续",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n }).then(() => {\r\n api\r\n .getAjaxObj()\r\n .post("/auth/user/opinion/save", {\r\n opinionName: commentMsg,\r\n })\r\n .then((e) => {\r\n if (e.success) {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "设置成功",\r\n });\r\n } else {\r\n this.$message({\r\n type: "error",\r\n message: e.msg,\r\n });\r\n }\r\n });\r\n });\r\n },\r\n changeFun() {\r\n this.$emit("change", this.value);\r\n this.value = "";\r\n },\r\n getList() {\r\n api\r\n .getAjaxObj()\r\n .get("/auth/user/opinion/my", "")\r\n .then((e) => {\r\n this.list = e.data;\r\n });\r\n },\r\n del(item) {\r\n this.$confirm("此操作将永久删除该意见, 是否继续?", "提示", {\r\n confirmButtonText: "确定",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n })\r\n .then(() => {\r\n api\r\n .getAjaxObj()\r\n .get(`/auth/user/opinion/del/${item.opinionId}`, "")\r\n .then((e) => {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "删除成功",\r\n });\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n },\r\n};\r\n<\/script>\r\n<style lang="scss">\r\n.pr-option-tooltip {\r\n max-width: 200px;\r\n max-height: 100px;\r\n overflow: auto;\r\n}\r\n</style>\r\n<style lang="scss" scoped>\r\n.select {\r\n width: 100%;\r\n ::v-deep .el-input__inner {\r\n border-radius: 4px;\r\n }\r\n}\r\n.option-c {\r\n display: flex;\r\n align-items: center;\r\n span {\r\n width: 378px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n i {\r\n font-size: 20px;\r\n color: #e57c7f;\r\n }\r\n}\r\n</style>\r\n',".pr-option-tooltip {\n max-width: 200px;\n max-height: 100px;\n overflow: auto;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */"]},media:void 0}),e("data-v-562eb279_1",{source:".select[data-v-562eb279] {\n width: 100%;\n}\n.select[data-v-562eb279] .el-input__inner {\n border-radius: 4px;\n}\n.option-c[data-v-562eb279] {\n display: flex;\n align-items: center;\n}\n.option-c span[data-v-562eb279] {\n width: 378px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.option-c i[data-v-562eb279] {\n font-size: 20px;\n color: #e57c7f;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\commIdea.vue","commIdea.vue"],names:[],mappings:"AAgIA;EACA,WAAA;AC/HA;ADgIA;EACA,kBAAA;AC9HA;ADiIA;EACA,aAAA;EACA,mBAAA;AC9HA;AD+HA;EACA,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;AC7HA;AD+HA;EACA,eAAA;EACA,cAAA;AC7HA;;AAEA,uCAAuC",file:"commIdea.vue",sourcesContent:['<template>\r\n <div>\r\n <el-select\r\n class="select"\r\n v-model="value"\r\n @change="changeFun"\r\n placeholder="选择常用意见"\r\n >\r\n <el-option\r\n :label="item.opinionName"\r\n :value="item.opinionName"\r\n v-for="(item, index) in list"\r\n :key="item.opinionId"\r\n >\r\n <el-tooltip\r\n effect="dark"\r\n :visible-arrow="true"\r\n popper-class="pr-option-tooltip"\r\n :content="item.opinionName"\r\n placement="right"\r\n >\r\n <div class="option-c">\r\n <span>{{ item.opinionName }}</span>\r\n <i\r\n @click.stop="del(item)"\r\n style="float: right"\r\n class="el-icon-delete"\r\n ></i>\r\n </div>\r\n </el-tooltip>\r\n </el-option>\r\n </el-select>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "../api";\r\n\r\nexport default {\r\n props: {\r\n showLabel: false,\r\n },\r\n data() {\r\n return {\r\n value: "",\r\n list: [],\r\n };\r\n },\r\n mounted() {\r\n this.getList();\r\n },\r\n methods: {\r\n addIdea(commentMsg) {\r\n if (!commentMsg)\r\n return this.$message({\r\n type: "error",\r\n message: "请输入意见后重试",\r\n });\r\n\r\n this.$confirm(`将”${commentMsg}”设为常用意见。`, "操作信息提醒", {\r\n confirmButtonText: "继续",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n }).then(() => {\r\n api\r\n .getAjaxObj()\r\n .post("/auth/user/opinion/save", {\r\n opinionName: commentMsg,\r\n })\r\n .then((e) => {\r\n if (e.success) {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "设置成功",\r\n });\r\n } else {\r\n this.$message({\r\n type: "error",\r\n message: e.msg,\r\n });\r\n }\r\n });\r\n });\r\n },\r\n changeFun() {\r\n this.$emit("change", this.value);\r\n this.value = "";\r\n },\r\n getList() {\r\n api\r\n .getAjaxObj()\r\n .get("/auth/user/opinion/my", "")\r\n .then((e) => {\r\n this.list = e.data;\r\n });\r\n },\r\n del(item) {\r\n this.$confirm("此操作将永久删除该意见, 是否继续?", "提示", {\r\n confirmButtonText: "确定",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n })\r\n .then(() => {\r\n api\r\n .getAjaxObj()\r\n .get(`/auth/user/opinion/del/${item.opinionId}`, "")\r\n .then((e) => {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "删除成功",\r\n });\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n },\r\n};\r\n<\/script>\r\n<style lang="scss">\r\n.pr-option-tooltip {\r\n max-width: 200px;\r\n max-height: 100px;\r\n overflow: auto;\r\n}\r\n</style>\r\n<style lang="scss" scoped>\r\n.select {\r\n width: 100%;\r\n ::v-deep .el-input__inner {\r\n border-radius: 4px;\r\n }\r\n}\r\n.option-c {\r\n display: flex;\r\n align-items: center;\r\n span {\r\n width: 378px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n i {\r\n font-size: 20px;\r\n color: #e57c7f;\r\n }\r\n}\r\n</style>\r\n',".select {\n width: 100%;\n}\n.select ::v-deep .el-input__inner {\n border-radius: 4px;\n}\n\n.option-c {\n display: flex;\n align-items: center;\n}\n.option-c span {\n width: 378px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.option-c i {\n font-size: 20px;\n color: #e57c7f;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */"]},media:void 0}))},F,"data-v-562eb279",false,undefined,!1,k,void 0,void 0);const R={components:{staffTree:O,commIdea:U},props:{param:Object},data:()=>({commentMsg:"",targetName:"",targetUID:"",personEntity:{}}),watch:{param:{handler(e){this.personEntity={...e.personEntity,maxMultiple:1}},immediate:!0,deep:!0}},methods:{getRes(){return{targetUID:this.targetUID,targetName:this.targetName,commentMsg:this.commentMsg}},confirm(n,r){return this.targetUID?this.commentMsg?this.commentMsg.length>200?(e.warning("审批意见不能超过200个字"),!1):(n&&n(),r(),void f.tis.transferTask({taskId:this.param.taskInstId,assignee:this.targetUID.join(" "),comment:this.commentMsg}).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})):(e.warning("请输入审批意见"),!1):(e.warning("请选择转办人"),!1)}}};var z=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"转办人",rules:[{required:!0,message:"请选择转办人"}]}},[r("staffTree",{attrs:{personType:e.param.personType,personEntity:e.personEntity},model:{value:e.targetUID,callback:function(n){e.targetUID=n},expression:"targetUID"}})],1),e._v(" "),e.param.showCommIdea?r("el-form-item",{attrs:{label:"快捷回复"}},[r("commIdea",{ref:"commIdea",on:{change:function(n){return e.commentMsg=n}}})],1):e._e(),e._v(" "),r("el-form-item",{attrs:{label:"审批意见",rules:[{required:!0,message:"审批意见不能为空"}]}},[r("el-input",{attrs:{rows:5,maxlength:"200","show-word-limit":"",resize:"none",type:"textarea",placeholder:"请输入审批意见"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}}),e._v(" "),e.param.showCommIdea?r("div",{staticClass:"add-idea"},[r("span",{on:{click:function(n){return e.$refs.commIdea.addIdea(e.commentMsg)}}},[e._v("设置为常用意见")])]):e._e()],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};z._withStripped=!0;const V=I({render:z,staticRenderFns:[]},function(e){e&&e("data-v-37b590d8_0",{source:'\n@import "./content.css";\n.add-idea[data-v-37b590d8] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-37b590d8] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\delegateTask.vue"],names:[],mappings:";AAkHA,uBAAA;AACA;EACA,aAAA;EACA,oBAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA",file:"delegateTask.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="转办人"\r\n :rules="[{ required: true, message: \'请选择转办人\' }]"\r\n >\r\n <staffTree\r\n :personType="param.personType"\r\n :personEntity="personEntity"\r\n v-model="targetUID"\r\n ></staffTree>\r\n </el-form-item>\r\n <el-form-item label="快捷回复" v-if="param.showCommIdea">\r\n <commIdea ref="commIdea" @change="(e) => (commentMsg = e)" />\r\n </el-form-item>\r\n <el-form-item\r\n label="审批意见"\r\n :rules="[{ required: true, message: \'审批意见不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n type="textarea"\r\n placeholder="请输入审批意见"\r\n />\r\n <div class="add-idea" v-if="param.showCommIdea">\r\n <span @click="$refs[\'commIdea\'].addIdea(commentMsg)"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport commIdea from "./commIdea.vue";\r\n\r\nexport default {\r\n components: { staffTree, commIdea },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n targetName: "",\r\n targetUID: "",\r\n personEntity:{}\r\n };\r\n },\r\n watch:{\r\n param:{\r\n handler(val){\r\n this.personEntity ={ ...val.personEntity, maxMultiple:1 } \r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n }\r\n },\r\n methods: {\r\n getRes() {\r\n return {\r\n targetUID: this.targetUID,\r\n targetName: this.targetName,\r\n commentMsg: this.commentMsg,\r\n };\r\n },\r\n\r\n confirm(preposition,loading) {\r\n if (!this.targetUID) {\r\n ElMessage.warning("请选择转办人");\r\n return false;\r\n }\r\n if (!this.commentMsg) {\r\n ElMessage.warning("请输入审批意见");\r\n return false;\r\n }\r\n if (this.commentMsg.length > 200) {\r\n ElMessage.warning("审批意见不能超过200个字");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading()\r\n api.tis\r\n .transferTask({\r\n taskId: this.param.taskInstId,\r\n // targetUID: this.targetUID.join(" "),\r\n assignee: this.targetUID.join(" "),\r\n // commentMsg: this.commentMsg,\r\n comment: this.commentMsg,\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n</style>\r\n']},media:void 0})},R,"data-v-37b590d8",false,undefined,!1,k,void 0,void 0);const q={name:"userTask",components:{staffTree:O},props:{index:{type:Number,default:0},processNode:{require:!0},label:"",peopleLabel:"",lv1label:"",personType:"",personEntity:{type:Object,default:()=>{}},rules:{require:!1,type:Array}},data(){return{deptList:[],Enum:y,resultList:[],radioModel:{},checkList:[],targetUserId:"",targetUserList:[],processNodeObj:this.processNode,userTaskListData:{},personnelList:[]}},computed:{checkModelList(){let e=this.processNodeObj.branches.filter(e=>this.checkList.includes(e.incomingConditionItemList[0].compareValue));return this.resultList=e||[],this.resultList}},watch:{processNode:{handler(e,n){"userTask"==e.nodeType&&e.setPersonnel&&e.assignees&&e.assignees.length>0&&(this.targetUserId=e.assignees.map(e=>e.id)),e.userList&&1==e.userList.length&&(this.targetUserId=e.userList[0].userId),this.processNodeObj=e||{}},deep:!0}},mounted(){this.processNodeObj.childNode&&1==this.processNodeObj.childNode.length&&this.processNodeObj.type==v.单一分支&&(this.radioModel=this.processNodeObj.childNode[0])},methods:{isSelect(e){if(e.incomingConditionItemList[0]){let n=e.incomingConditionItemList[0].itemName.includes("selecd");return n&&(this.checkList.includes(e.name)||this.checkList.push(e.name)),n}return!1},fixPeopleChange(e){this.complete(e,this.processNodeObj)},selectChange(e){this.targetUserList=e},complete(e,n){n.vars=e,this.resultList.every(e=>e.vars)&&(this.processNodeObj.vars=this.resultList.map(e=>e.vars),this.$emit("complete",this.processNodeObj))},setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},getTreeData(e){if(e){if("固定部门"==e.humanPerformerName)return e.routeTxt.departmentIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=this.Enum.UserType.部门,n});if("固定单位"==e.humanPerformerName)return e.routeTxt.companyIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=this.Enum.UserType.主体,n});if("固定群组"==e.humanPerformerName)return e.routeTxt.teamList.map(e=>{let n={};return n.id=e.id,n.leaf=!1,n.name=e.teamName,n.orgType=this.Enum.UserType.群组,n})}},isOption:e=>"任意指定"==e||"固定部门"==e||"固定单位"==e||"固定角色/岗位"==e||"固定群组"==e,getValue(){let n=!0,r={multiNodeParticipant:{},vars:{}};if(this.processNodeObj.type&&this.processNodeObj.type!=this.Enum.ProcessNodeType.用户任务&&this.processNodeObj.type!=v.用户节点)for(let t in this.userTaskListData){let s=this.userTaskListData[t],i=this.$refs[s];if(i=Array.isArray(i)?i[0]:i,i){let t=i.getValue();if(t){if("exclusiveGateway"==this.processNodeObj.nodeType){if(!this.radioModel||!this.radioModel.id)return this.processNodeObj.name&&e.warning(`请选择 ${this.processNodeObj.name} 下一节点`),!1;this.radioModel.incomingConditionItemList&&this.radioModel.incomingConditionItemList.length>0&&(r.vars[this.radioModel.incomingConditionItemList[0].itemName]=this.radioModel.incomingConditionItemList[0].compareValue)}else if("inclusiveGateway"==this.processNodeObj.nodeType){if(!(this.resultList&&this.resultList.length>0))return this.processNodeObj.name&&e.warning(`请选择 ${this.processNodeObj.name} `),!1;this.resultList.forEach(e=>{0!==e.incomingConditionItemList.length&&e.incomingConditionItemList.forEach(e=>{e.itemName&&(r.vars[e.itemName]=e.compareValue)})})}r.multiNodeParticipant={...r.multiNodeParticipant,...t.multiNodeParticipant},r.vars={...r.vars,...t.vars}}else n=!1}}else if("exclusiveGateway"==this.processNodeObj.nodeType)for(let e in this.userTaskListData){let t=this.userTaskListData[e],s=this.$refs[t];if(s=Array.isArray(s)?s[0]:s,s){let e=s.getValue();e?(this.radioModel&&this.radioModel.nodeInfoDTO&&this.radioModel.nodeInfoDTO.id&&this.radioModel.nodeInfoDTO.incomingConditionItemList&&this.radioModel.nodeInfoDTO.incomingConditionItemList.length>0&&(r.vars[this.radioModel.nodeInfoDTO.incomingConditionItemList[0].itemName]=this.radioModel.nodeInfoDTO.incomingConditionItemList[0].compareValue),r.multiNodeParticipant={...r.multiNodeParticipant,...e.multiNodeParticipant},r.vars={...r.vars,...e.vars}):n=!1}}else if("inclusiveGateway"==this.processNodeObj.nodeType){if(!(this.resultList&&this.resultList.length>0))return this.processNodeObj&&"inclusiveGateway"==this.processNodeObj.nodeType?e.warning("请选择下一节点"):this.processNodeObj.nodeInfoDTO.name&&e.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} `),!1;this.resultList.forEach(e=>{const t=this.userTaskListData[e.nodeInfoDTO.id];let s=this.$refs[t];if(s=Array.isArray(s)?s[0]:s,s){let t=s.getValue();t?(0!==e.nodeInfoDTO.incomingConditionItemList.length&&e.nodeInfoDTO.incomingConditionItemList.forEach(e=>{e.itemName&&(r.vars[e.itemName]=e.compareValue)}),r.multiNodeParticipant={...r.multiNodeParticipant,...t.multiNodeParticipant},r.vars={...r.vars,...t.vars}):n=!1}})}else if(this.processNodeObj.assignee&&Array.isArray(this.processNodeObj.assignee)&&this.processNodeObj.setPersonnel&&!this.isOption(this.processNodeObj.humanPerformerName)&&(!this.processNodeObj.nodeInfoDTO||this.processNodeObj.nodeInfoDTO.assignee&&Array.isArray(this.processNodeObj.nodeInfoDTO.assignee)&&this.processNodeObj.nodeInfoDTO.setPersonnel&&!this.isOption(this.processNodeObj.nodeInfoDTO.humanPerformerName)))this.processNodeObj.incomingConditionItemList&&this.processNodeObj.incomingConditionItemList.length>0&&(r.vars[this.processNodeObj.incomingConditionItemList[0].itemName]=this.processNodeObj.incomingConditionItemList[0].compareValue);else if(this.targetUserId&&this.targetUserId.length>0)r.multiNodeParticipant={},r.multiNodeParticipant[this.processNode.nodeInfoDTO?this.processNodeObj.nodeInfoDTO.id:this.processNodeObj.id]=Array.isArray(this.targetUserId)?this.targetUserId:[this.targetUserId];else if(!1!==this.processNodeObj.REQUIRED||this.processNodeObj.nodeInfoDTO&&!1!==this.processNodeObj.nodeInfoDTO.REQUIRED)return this.processNodeObj.nodeInfoDTO?this.processNodeObj.nodeInfoDTO.name&&e.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} 处理人`):this.processNodeObj.name&&e.warning(`请选择 ${this.processNodeObj.name} 处理人`),!1;return n?r:n},getLabel(e){let n="";return e.incomingConditionItemList.length>0&&(n=e.incomingConditionItemList[0].compareValue),n||e.name||"后续节点"}}};var H=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{staticClass:"user-task"},["exclusiveGateway"==e.processNodeObj.nodeType&&e.processNodeObj.branches&&e.processNodeObj.branches.length>=1?[e.processNodeObj.branches.length>1?r("el-form-item",{attrs:{label:e.processNodeObj.name||"下一节点"}},[r("el-radio-group",{staticClass:"ml-4",model:{value:e.radioModel,callback:function(n){e.radioModel=n},expression:"radioModel"}},e._l(e.processNodeObj.branches,function(n){return r("el-radio",{key:n.id,attrs:{label:n,size:"large"}},[e._v(e._s(n.name?n.name:n.nodeInfoDTO?n.nodeInfoDTO.name:""))])}),1)],1):e._e(),e._v(" "),e.radioModel.id?[e.radioModel.nodeInfoDTO&&"userTask"==e.radioModel.nodeInfoDTO.nodeType||e.radioModel.nodeInfoDTO&&"inclusiveGateway"==e.radioModel.nodeInfoDTO.nodeType?[r("userTask",{key:e.radioModel.nodeInfoDTO.id,ref:e.setItemRef(e.radioModel.nodeInfoDTO.id),attrs:{personType:e.personType,personEntity:e.personEntity,"process-node":Object.assign({},e.radioModel.nodeInfoDTO,{REQUIRED:!(1==e.radioModel.nodeInfoDTO.setPersonnel&&e.radioModel.nodeInfoDTO.assignees&&e.radioModel.nodeInfoDTO.assignees.length>0)}),rules:[{required:!0,message:"请选择处理人"}]}})]:e.radioModel.nodeInfoDTO&&"exclusiveGateway"==e.radioModel.nodeInfoDTO.nodeType?e._l(e.radioModel.nodeInfoDTO.branches,function(n){return r("userTask",{key:n.nodeInfoDTO.id,ref:e.setItemRef(n.nodeInfoDTO.id),refInFor:!0,attrs:{personType:e.personType,personEntity:e.personEntity,processNode:Object.assign({},n.nodeInfoDTO,{REQUIRED:!(1==n.nodeInfoDTO.setPersonnel&&n.nodeInfoDTO.assignees&&n.nodeInfoDTO.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})}):e._e()]:e.processNodeObj&&e.processNodeObj.branches&&1==e.processNodeObj.branches.length?e._l(e.processNodeObj.branches,function(n){return r("userTask",{key:n.nodeInfoDTO?n.nodeInfoDTO.id:n.id,ref:e.setItemRef(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),refInFor:!0,attrs:{personType:e.personType,personEntity:e.personEntity,"process-node":Object.assign({},n.nodeInfoDTO?n.nodeInfoDTO:n,{REQUIRED:!(1==n.nodeInfoDTO.setPersonnel&&n.nodeInfoDTO.assignees&&n.nodeInfoDTO.assignees.length>0)}),rules:[{required:!0,message:"请选择处理人"}]}})}):e._e()]:"inclusiveGateway"==e.processNodeObj.nodeType&&e.processNodeObj.branches&&e.processNodeObj.branches.length>0?[r("el-form-item",{attrs:{label:e.processNodeObj.name||"下一节点"}},[r("el-checkbox-group",{model:{value:e.checkList,callback:function(n){e.checkList=n},expression:"checkList"}},[e._l(e.processNodeObj.branches,function(n){return[e.isSelect(n.nodeInfoDTO?n.nodeInfoDTO:n)?r("el-checkbox",{key:"checkbox"+(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),attrs:{label:n.nodeInfoDTO?n.nodeInfoDTO.name:n.name,checked:!0,disabled:""}}):r("el-checkbox",{key:"checkbox1"+(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),attrs:{label:n.nodeInfoDTO?n.nodeInfoDTO.name:n.name}})]})],2)],1),e._v(" "),e._l(e.checkModelList,function(n){return r("userTask",{key:n.nodeInfoDTO?n.nodeInfoDTO.id:n.id,ref:e.setItemRef(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),refInFor:!0,attrs:{personType:e.personType,personEntity:e.personEntity,processNode:Object.assign({},n.nodeInfoDTO?n.nodeInfoDTO:n,{REQUIRED:n.nodeInfoDTO?!(1==n.nodeInfoDTO.setPersonnel&&n.nodeInfoDTO.assignees&&n.nodeInfoDTO.assignees.length>0):!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)})}})})]:e.processNodeObj.assignee&&e.processNodeObj.assignees&&!e.isOption(e.processNodeObj.humanPerformerName)?e._e():[r("el-form-item",{staticStyle:{"margin-bottom":"10px"},attrs:{label:e.lv1label||"节点名称"},scopedSlots:e._u([{key:"label",fn:function(n){return n.label,[r("div",{staticStyle:{"font-size":"16px"}},[e._v(e._s(e.lv1label||"节点名称"))])]}}])},[e._v(" "),r("b",{staticStyle:{"font-size":"16px"}},[e._v(e._s(e.processNodeObj.name))])]),e._v(" "),e.processNodeObj.routeTxt&&e.processNodeObj.routeTxt.length>0&&e.processNodeObj.userList&&e.processNodeObj.userList.length>0?r("el-form-item",{staticStyle:{"margin-bottom":"10px"},attrs:{label:e.peopleLabel||"所属范围"}},e._l(e.processNodeObj.routeTxt,function(n,t){return r("div",{key:n.type},[n.ids&&n.ids.length>0?r("div",[r("b",{staticClass:"include include-type",class:["include-"+n.type]},[e._v(e._s("user"==n.type?"用户":"dept"==n.type?"部门":"岗位"))]),e._v(" "),r("span",{staticClass:"include include-name"},[e._v(e._s(n.name))]),e._v(" "),t!==e.processNodeObj.routeTxt.length-1?r("div",{staticClass:"include include-assign",class:["include-assign-"+(n.assigneeRetain?"true":"false")]},[e._v(e._s("true"==e.processNodeObj.assigneeRetain?"且同时满足":"或者满足"))]):e._e()]):e._e()])}),0):e._e(),e._v(" "),r("el-form-item",{attrs:{label:e.label||"处理人",rules:e.rules||{}}},[e.processNodeObj.userList&&e.processNodeObj.userList.length>=2?r("el-select",{attrs:{multiple:-1==e.processNodeObj.loopCardinality},on:{change:e.fixPeopleChange},model:{value:e.targetUserId,callback:function(n){e.targetUserId=n},expression:"targetUserId"}},e._l(e.processNodeObj.userList,function(e,n){return r("el-option",{key:e.userId,attrs:{label:e.realName,value:e.userId}})}),1):e.processNodeObj.userList&&1==e.processNodeObj.userList.length?r("div",{staticClass:"setVal"},[e._v("\n "+e._s(e.processNodeObj.userList[0].realName)+"\n ")]):e.processNodeObj.setPersonnel&&e.processNodeObj.assignees?r("div",{staticClass:"setVal"},[e._v("\n "+e._s((e.processNodeObj.assignees||[]).map(function(e){return e.name||e.realName}).join(", "))+"\n ")]):r("staffTree",{attrs:{processNodeObj:e.processNodeObj,personType:e.personType,personEntity:e.personEntity,multiple:"",max:-1==e.processNodeObj.loopCardinality?1e3:1,items:e.getTreeData(e.processNodeObj)},on:{"update:modelValue":function(n){e.complete(n,e.processNodeObj)},select:e.selectChange},model:{value:e.targetUserId,callback:function(n){e.targetUserId=n},expression:"targetUserId"}})],1)]],2)};H._withStripped=!0;const W=I({render:H,staticRenderFns:[]},function(e){e&&e("data-v-ac30aa7a_0",{source:".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\userTask.vue","userTask.vue"],names:[],mappings:"AA8oBA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,yBAAA;EACA,uBAAA;AC7oBA;AD+oBA;EACA,YAAA;AC7oBA;AD8oBA;EACA,kBAAA;AC5oBA;AD8oBA;EACA,eAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,gBAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,iBAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,kBAAA;EACA,UAAA;EACA,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EACA,YAAA;AC5oBA;AD+oBA;EACA,mBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,WAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;AC7oBA;;AAEA,uCAAuC",file:"userTask.vue",sourcesContent:['<template>\r\n <div class="user-task">\r\n \x3c!-- <pre class="111">\r\n {{ JSON.stringify(processNodeObj, null, 2) }}\r\n </pre> --\x3e\r\n \x3c!-- 单选 --\x3e\r\n <template v-if="processNodeObj.nodeType == \'exclusiveGateway\' && processNodeObj.branches && processNodeObj.branches.length >= 1">\r\n \x3c!-- <div>进来这里</div> --\x3e\r\n <el-form-item\r\n :label="processNodeObj.name || \'下一节点\'"\r\n v-if="processNodeObj.branches.length > 1"\r\n >\r\n <el-radio-group v-model="radioModel" class="ml-4">\r\n <el-radio\r\n v-for="item in processNodeObj.branches"\r\n :key="item.id"\r\n :label="item"\r\n size="large"\r\n >{{ item.name ? item.name : (item.nodeInfoDTO ? item.nodeInfoDTO.name : \'\') }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n \x3c!-- <div>{{ \'id: \' + radioModel.id }}</div> --\x3e\r\n <template v-if="radioModel.id">\r\n \x3c!-- 直接是节点 --\x3e\r\n <template v-if="radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == \'userTask\'">\r\n <userTask\r\n :ref="setItemRef(radioModel.nodeInfoDTO.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(radioModel.nodeInfoDTO),\r\n REQUIRED: radioModel.nodeInfoDTO.setPersonnel == true && radioModel.nodeInfoDTO.assignees && radioModel.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="radioModel.nodeInfoDTO.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n \x3c!-- 多选 --\x3e\r\n <template v-else-if="radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == \'inclusiveGateway\'">\r\n <userTask\r\n :ref="setItemRef(radioModel.nodeInfoDTO.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(radioModel.nodeInfoDTO),\r\n REQUIRED: radioModel.nodeInfoDTO.setPersonnel == true && radioModel.nodeInfoDTO.assignees && radioModel.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="radioModel.nodeInfoDTO.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n \x3c!-- 单选 --\x3e\r\n <template v-else-if="radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == \'exclusiveGateway\'">\r\n <userTask\r\n v-for="item in radioModel.nodeInfoDTO.branches"\r\n :key="item.nodeInfoDTO.id"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :processNode="{ \r\n ...item.nodeInfoDTO,\r\n REQUIRED: item.nodeInfoDTO.setPersonnel == true && item.nodeInfoDTO.assignees && item.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(item.nodeInfoDTO.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template v-else-if="processNodeObj && processNodeObj.branches && processNodeObj.branches.length == 1">\r\n <userTask\r\n v-for="pitem in processNodeObj.branches"\r\n :ref="setItemRef(pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem),\r\n REQUIRED: pitem.nodeInfoDTO.setPersonnel == true && pitem.nodeInfoDTO.assignees && pitem.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n\r\n\r\n \x3c!-- <template v-if="processNodeObj.nodeType == \'exclusiveGateway\' && processNodeObj.branches && processNodeObj.branches.length == 1">\r\n <div>进来这里</div>\r\n <el-form-item\r\n :label="processNodeObj.name || \'下一节点\'"\r\n v-if="processNodeObj.branches.length > 1"\r\n >\r\n <el-radio-group v-model="radioModel" class="ml-4">\r\n <el-radio\r\n v-for="item in processNodeObj.branches"\r\n :key="item.id"\r\n :label="item"\r\n size="large"\r\n >{{ item.name }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <div>{{ \'id: \' + radioModel.id }}</div>\r\n \r\n <template v-if="processNodeObj && processNodeObj.branches && processNodeObj.branches.length > 0">\r\n <userTask\r\n v-for="pitem in processNodeObj.branches"\r\n :ref="setItemRef(pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem),\r\n REQUIRED: pitem.nodeInfoDTO.setPersonnel == true && pitem.nodeInfoDTO.assignees && pitem.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template> --\x3e\r\n \x3c!-- 多选 --\x3e\r\n <template\r\n v-else-if="\r\n processNodeObj.nodeType == \'inclusiveGateway\' &&\r\n processNodeObj.branches && processNodeObj.branches.length > 0\r\n "\r\n >\r\n <el-form-item :label="processNodeObj.name || \'下一节点\'">\r\n <el-checkbox-group v-model="checkList">\r\n <template v-for="item in processNodeObj.branches">\r\n <el-checkbox\r\n :label="item.nodeInfoDTO ? item.nodeInfoDTO.name : item.name"\r\n v-if="isSelect(item.nodeInfoDTO ? item.nodeInfoDTO : item)"\r\n :checked="true"\r\n disabled\r\n :key="\'checkbox\' + (item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)"\r\n />\r\n <el-checkbox\r\n :label="item.nodeInfoDTO ? item.nodeInfoDTO.name : item.name"\r\n v-else\r\n :key="\'checkbox1\' + (item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref="setItemRef(item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :key="item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id"\r\n v-for="item in checkModelList"\r\n :processNode="{ \r\n ...(item.nodeInfoDTO ? item.nodeInfoDTO : item),\r\n REQUIRED: item.nodeInfoDTO ? (item.nodeInfoDTO.setPersonnel == true && item.nodeInfoDTO.assignees && item.nodeInfoDTO.assignees.length > 0 ? false : true) : (item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true)\r\n }"\r\n >\r\n </userTask>\r\n </template>\r\n\r\n <template v-else-if="!processNodeObj.assignee || !processNodeObj.assignees || isOption(processNodeObj.humanPerformerName)">\r\n <el-form-item\r\n :label="lv1label || \'节点名称\'"\r\n style="margin-bottom: 10px"\r\n >\r\n <template v-slot:label="{ label }">\r\n \x3c!-- <b class="task-index">{{ (index + 1 ) }}</b> --\x3e\r\n <div style="font-size: 16px">{{ (lv1label || \'节点名称\') }}</div>\r\n </template>\r\n <b style="font-size: 16px">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item\r\n v-if="processNodeObj.routeTxt && processNodeObj.routeTxt.length > 0 && processNodeObj.userList && processNodeObj.userList.length >0"\r\n :label="peopleLabel || \'所属范围\'"\r\n style="margin-bottom: 10px"\r\n >\r\n <div v-for="(item, index) in processNodeObj.routeTxt" :key="item.type">\r\n <div v-if="item.ids && item.ids.length > 0">\r\n <b class="include include-type" :class="[\'include-\' + item.type]">{{ item.type == \'user\' ? \'用户\' : item.type == \'dept\' ? \'部门\' : \'岗位\' }}</b>\r\n <span class="include include-name">{{ item.name }}</span>\r\n <div class="include include-assign" :class="[\'include-assign-\' + (item.assigneeRetain ? \'true\' : \'false\')]" v-if="index !== processNodeObj.routeTxt.length - 1">{{ processNodeObj.assigneeRetain == \'true\' ? \'且同时满足\' : \'或者满足\' }}</div>\r\n </div>\r\n </div>\r\n </el-form-item>\r\n \x3c!-- 如果有固定的人 --\x3e\r\n <el-form-item :label="label || \'处理人\'" :rules="rules || {}">\r\n \x3c!-- 使用el-select --\x3e\r\n \x3c!-- 发起流程的时候 --\x3e\r\n <el-select v-if="processNodeObj.userList && processNodeObj.userList.length >= 2" v-model="targetUserId" :multiple="processNodeObj.loopCardinality == -1 ? true : false" @change="fixPeopleChange">\r\n <el-option\r\n v-for="(item, index) in processNodeObj.userList"\r\n :key="item.userId"\r\n :label="item.realName"\r\n :value="item.userId"\r\n ></el-option>\r\n </el-select>\r\n <div class="setVal" v-else-if="processNodeObj.userList && processNodeObj.userList.length == 1">\r\n {{ processNodeObj.userList[0].realName }}\r\n </div>\r\n \x3c!-- 审批流程的时候 --\x3e\r\n <div class="setVal" v-else-if="processNodeObj.setPersonnel && processNodeObj.assignees">\r\n {{ (processNodeObj.assignees || []).map(i => i.name || i.realName).join(\', \') }}\r\n </div>\r\n <staffTree\r\n v-else\r\n :processNodeObj="processNodeObj"\r\n v-model="targetUserId"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n @update:modelValue="\r\n (e) => {\r\n complete(e, processNodeObj);\r\n }\r\n "\r\n @select="selectChange"\r\n multiple\r\n :max="processNodeObj.loopCardinality == -1 ? 1000 : 1"\r\n :items="getTreeData(processNodeObj)"\r\n >\r\n </staffTree>\r\n </el-form-item>\r\n </template>\r\n \x3c!-- <template v-else>\r\n <el-form-item :label="lv1label || \'节点名称\'">\r\n <b style="font-size: 16px">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item :label="label || \'处理人\'">\r\n {{ \'--\' || processNodeObj.routeTxt.userNames }}\r\n </el-form-item>\r\n </template> --\x3e\r\n \x3c!-- <template v-else-if="processNodeObj.type == Enum.ProcessNodeType.单一分支">\r\n <el-form-item\r\n :label="processNodeObj.name || \'下一节点\'"\r\n v-if="processNodeObj.childNode.length > 1"\r\n >\r\n <el-radio-group v-model="radioModel" class="ml-4">\r\n <el-radio\r\n v-for="item in processNodeObj.childNode"\r\n :key="item.id"\r\n :label="item"\r\n size="large"\r\n >{{ getLabel(item) }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <template v-if="radioModel.id">\r\n <userTask\r\n :ref="setItemRef(radioModel.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ ...radioModel, taskNode: processNode.taskNode }"\r\n :key="radioModel.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template\r\n v-else-if="\r\n processNodeObj.type == Enum.ProcessNodeType.多选节点 &&\r\n processNodeObj.childNode.length > 0\r\n "\r\n >\r\n <el-form-item :label="processNodeObj.name || \'下一节点\'">\r\n <el-checkbox-group v-model="checkList">\r\n <template v-for="item in processNodeObj.childNode">\r\n <el-checkbox\r\n :label="getLabel(item)"\r\n v-if="isSelect(item)"\r\n :checked="true"\r\n disabled\r\n :key="\'checkbox\' + item.id"\r\n />\r\n <el-checkbox\r\n :label="getLabel(item)"\r\n v-else\r\n :key="\'checkbox1\' + item.id"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref="setItemRef(item.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :key="item.id"\r\n v-for="item in checkModelList"\r\n :processNode="{ ...item, taskNode: processNode.taskNode }"\r\n >\r\n </userTask>\r\n </template> --\x3e\r\n \x3c!-- <template v-else-if="processNodeObj.type == Enum.ProcessNodeType.结束事件">\r\n <el-form-item :label="lv1label || \'节点名称\'">\r\n <b style="font-size: 16px">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n </template> --\x3e\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport * as Enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\n// import userTask from "./userTask.vue"\r\nimport { Message as ElMessage } from "element-ui";\r\nimport api from "../api";\r\n\r\nexport default {\r\n name: "userTask",\r\n components: { staffTree },\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n processNode: { require: true },\r\n label: "",\r\n peopleLabel: "",\r\n lv1label: "",\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n rules: {\r\n require: false,\r\n type: Array,\r\n },\r\n },\r\n data() {\r\n return {\r\n deptList: [],\r\n Enum,\r\n resultList: [],\r\n radioModel: {},\r\n checkList: [],\r\n targetUserId: "",\r\n targetUserList: [],\r\n processNodeObj: this.processNode,\r\n userTaskListData: {},\r\n personnelList: [],\r\n };\r\n },\r\n computed: {\r\n checkModelList() {\r\n let arr = this.processNodeObj.branches.filter((o) =>\r\n {\r\n return this.checkList.includes(o.incomingConditionItemList[0].compareValue)\r\n }\r\n );\r\n\r\n this.resultList = arr || [];\r\n return this.resultList;\r\n },\r\n },\r\n watch: {\r\n processNode: {\r\n handler(newVal, oldVal) {\r\n // 如果是长度为1,固定\r\n console.log(newVal, \'processNodeObj\')\r\n if (newVal.nodeType == \'userTask\' && newVal.setPersonnel && newVal.assignees && newVal.assignees.length > 0) {\r\n this.targetUserId = newVal.assignees.map(i => i.id)\r\n }\r\n if (newVal.userList && newVal.userList.length == 1) {\r\n this.targetUserId = newVal.userList[0].userId\r\n }\r\n this.processNodeObj = newVal || {};\r\n },\r\n deep: true,\r\n }\r\n },\r\n mounted() {\r\n if (\r\n this.processNodeObj.childNode &&\r\n this.processNodeObj.childNode.length == 1 &&\r\n this.processNodeObj.type == Enum.ProcessNodeType.单一分支\r\n ) {\r\n this.radioModel = this.processNodeObj.childNode[0];\r\n }\r\n },\r\n methods: {\r\n isSelect(item) {\r\n if (item.incomingConditionItemList[0]) {\r\n let flag =\r\n item.incomingConditionItemList[0].itemName.includes("selecd");\r\n if (flag) {\r\n if (!this.checkList.includes(item.name))\r\n this.checkList.push(item.name);\r\n }\r\n return flag;\r\n }\r\n return false;\r\n },\r\n fixPeopleChange(e) {\r\n console.log(e, \'e\')\r\n this.complete(e, this.processNodeObj)\r\n },\r\n // 获取选中的人的对象\r\n selectChange (list) {\r\n console.log(list, \'list\')\r\n this.targetUserList = list;\r\n },\r\n complete(e, item) {\r\n console.log(e, item, \'e item\', this.resultList, this.resultList.every((o) => o.vars))\r\n item.vars = e;\r\n if (this.resultList.every((o) => o.vars)) {\r\n this.processNodeObj.vars = this.resultList.map((o) => o.vars);\r\n console.log(this.processNodeObj.vars, \'this.processNodeObj.vars\')\r\n this.$emit("complete", this.processNodeObj);\r\n }\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getTreeData(item) {\r\n if (item) {\r\n if (item.humanPerformerName == "固定部门") {\r\n return item.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == "固定单位") {\r\n return item.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.主体;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == "固定群组") {\r\n return item.routeTxt.teamList.map((o) => {\r\n let obj = {};\r\n obj.id = o.id;\r\n obj.leaf = false;\r\n obj.name = o.teamName;\r\n obj.orgType = this.Enum.UserType.群组;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定单位" ||\r\n humanPerformer == "固定角色/岗位" ||\r\n humanPerformer == "固定群组"\r\n );\r\n },\r\n getValue() {\r\n let flag = true;\r\n let val = { multiNodeParticipant: {}, vars: {} };\r\n if (\r\n (!this.processNodeObj.type || \r\n this.processNodeObj.type == this.Enum.ProcessNodeType.用户任务 ||\r\n this.processNodeObj.type == Enum.ProcessNodeType.用户节点)\r\n \r\n ) {\r\n\r\n /**\r\n * &&\r\n (\r\n this.processNodeObj.nodeType != \'exclusiveGateway\'\r\n ||\r\n this.processNodeObj.nodeType == \'exclusiveGateway\' && this.processNodeObj.branches.length == 0\r\n )\r\n */\r\n // exclusiveGateway 节点\r\n console.log(this.processNodeObj, \'this.processNodeObj 第一个判断\')\r\n if (this.processNodeObj.nodeType == \'exclusiveGateway\') {\r\n // 进来这里\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (this.radioModel && this.radioModel.nodeInfoDTO && this.radioModel.nodeInfoDTO.id) {\r\n if (\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList &&\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList[0].compareValue;\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n \r\n } \r\n else if (this.processNodeObj.nodeType == \'inclusiveGateway\') {\r\n // 进来这里\r\n if (this.resultList && this.resultList.length > 0) {\r\n\r\n this.resultList.forEach(rlItem => {\r\n const o = this.userTaskListData[rlItem.nodeInfoDTO.id]\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (rlItem.nodeInfoDTO.incomingConditionItemList.length !== 0) {\r\n rlItem.nodeInfoDTO.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n })\r\n\r\n } else {\r\n console.log(this.processNodeObj, \'this.processNodeObj.nodeInfoDTO 判断是否是多分支\')\r\n // 判断是否是多分支\r\n if (this.processNodeObj && this.processNodeObj.nodeType == \'inclusiveGateway\') {\r\n ElMessage.warning(`请选择下一节点`)\r\n } else {\r\n this.processNodeObj.nodeInfoDTO.name && ElMessage.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} `);\r\n }\r\n return false;\r\n }\r\n } \r\n // 新流程需要进入这里\r\n else if (!this.processNodeObj.assignee || !Array.isArray(this.processNodeObj.assignee) || !this.processNodeObj.setPersonnel || this.isOption(this.processNodeObj.humanPerformerName)\r\n || \r\n (this.processNodeObj.nodeInfoDTO && (!this.processNodeObj.nodeInfoDTO.assignee || !Array.isArray(this.processNodeObj.nodeInfoDTO.assignee) || !this.processNodeObj.nodeInfoDTO.setPersonnel || this.isOption(this.processNodeObj.nodeInfoDTO.humanPerformerName)))\r\n ) {\r\n if (this.targetUserId && this.targetUserId.length > 0) {\r\n let obj = {};\r\n val.multiNodeParticipant = {};\r\n val.multiNodeParticipant[this.processNode.nodeInfoDTO ? this.processNodeObj.nodeInfoDTO.id : this.processNodeObj.id] =\r\n Array.isArray(this.targetUserId) ? this.targetUserId : [this.targetUserId];\r\n // val.push(obj);\r\n } else if (this.processNodeObj.REQUIRED !== false || (this.processNodeObj.nodeInfoDTO && this.processNodeObj.nodeInfoDTO.REQUIRED !== false)) {\r\n if (this.processNodeObj.nodeInfoDTO) {\r\n this.processNodeObj.nodeInfoDTO.name && ElMessage.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} 处理人`);\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(`请选择 ${this.processNodeObj.name} 处理人`);\r\n }\r\n // ElMessage.warning(`请选择审批人`);\r\n return false;\r\n }\r\n } else {\r\n if (\r\n this.processNodeObj.incomingConditionItemList &&\r\n this.processNodeObj.incomingConditionItemList.length > 0\r\n ) {\r\n val.vars[\r\n this.processNodeObj.incomingConditionItemList[0].itemName\r\n ] = this.processNodeObj.incomingConditionItemList[0].compareValue;\r\n }\r\n }\r\n } else {\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (\r\n this.processNodeObj.nodeType == \'exclusiveGateway\'\r\n ) {\r\n if (this.radioModel && this.radioModel.id) {\r\n if (\r\n this.radioModel.incomingConditionItemList &&\r\n this.radioModel.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.incomingConditionItemList[0].compareValue;\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(\r\n `请选择 ${this.processNodeObj.name} 下一节点`\r\n );\r\n return false;\r\n }\r\n } else if (\r\n this.processNodeObj.nodeType == \'inclusiveGateway\'\r\n ) {\r\n if (this.resultList && this.resultList.length > 0) {\r\n this.resultList.forEach((r) => {\r\n if (r.incomingConditionItemList.length !== 0) {\r\n r.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(`请选择 ${this.processNodeObj.name} `);\r\n return false;\r\n }\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n }\r\n if (flag) return val;\r\n return flag;\r\n },\r\n getLabel(node) {\r\n let name = "";\r\n if (node.incomingConditionItemList.length > 0) {\r\n name = node.incomingConditionItemList[0].compareValue;\r\n }\r\n return name || node.name || "后续节点";\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss">\r\n.user-task {\r\n :deep(.el-form-item__label) {\r\n white-space: nowrap;\r\n text-align: right;\r\n font-size: 14px;\r\n overflow: hidden;\r\n display: block !important;\r\n text-overflow: ellipsis;\r\n }\r\n .include {\r\n padding: 6px;\r\n &-type {\r\n border-radius: 6px;\r\n }\r\n &-user {\r\n background: red;\r\n color: aliceblue;\r\n }\r\n &-dept {\r\n background: blue;\r\n color: aliceblue;\r\n }\r\n &-post {\r\n background: green;\r\n color: aliceblue;\r\n }\r\n &-assign {\r\n background: bisque;\r\n color: red;\r\n border-radius: 12px;\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n height: 18px;\r\n }\r\n }\r\n .task-index {\r\n background: #1389ff;\r\n color: white;\r\n border-radius: 12px;\r\n width: -moz-fit-content;\r\n width: 25px;\r\n height: 100%;\r\n display: inline-flex;\r\n justify-content: center;\r\n margin-right: 6px;\r\n }\r\n}\r\n</style>\r\n',".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */"]},media:void 0})},q,undefined,false,undefined,!1,k,void 0,void 0),G=e=>new Promise((n,r)=>{f.getAjaxObj().post("/file/upload",e).then(e=>{n(e)})});const J={data:()=>({ctx:null,signatureImage:"",actionHeight:0,isDrawing:!1,paths:[],currentPath:[],historyPics:[]}),methods:{startDrawing(e){this.isDrawing=!0,this.currentPath=[];const n=this.$refs.canvasRef.getBoundingClientRect(),r=(e.clientX-n.left)*(this.$refs.canvasRef.width/n.width),t=(e.clientY-n.top)*(this.$refs.canvasRef.height/n.height);this.ctx.beginPath(),this.ctx.moveTo(r,t),this.currentPath.push({x:r,y:t})},draw(e){if(this.isDrawing&&this.currentPath.length>0){const n=this.$refs.canvasRef.getBoundingClientRect(),r=(e.clientX-n.left)*(this.$refs.canvasRef.width/n.width),t=(e.clientY-n.top)*(this.$refs.canvasRef.height/n.height);this.ctx.lineWidth=2,this.ctx.strokeStyle="#000000",this.ctx.lineTo(r,t),this.ctx.stroke(),this.currentPath.push({x:r,y:t})}},undo(){this.paths.pop(),this.ctx.clearRect(0,0,this.$refs.canvasRef.width,this.$refs.canvasRef.height);for(let e of this.paths)for(let n=0;n<e.length-1;n++){const{x:r,y:t}=e[n];0===n?(this.ctx.beginPath(),this.ctx.moveTo(r,t)):(this.ctx.lineTo(r,t),this.ctx.stroke())}},finishDrawing(e){this.currentPath.length>0&&this.paths.push(this.currentPath),this.isDrawing=!1},clearCanvas(){this.ctx.clearRect(0,0,this.$refs.canvasRef.width,this.$refs.canvasRef.height),this.signatureImage="",this.paths=[],this.$emit("saveSignature","",!1)},saveSignature(){0!=this.paths.length?this.signatureImage=this.$refs.canvasRef.toBlob(e=>{this.uploadImage(e)},"image/png",.95):this.$emit("validateFail","请签字")},async uploadImage(e,n){this.loading=!0;const r=new FormData;r.append("file",e,n||`signature-${Date.now()}.png`);const t=await G(r);if(this.loading=!1,!t.success)return;let s=JSON.parse(localStorage.getItem("signaturesArr"))||[];s.unshift(t.data),this.$set(this,"historyPics",s.slice(0,3)),localStorage.setItem("signaturesArr",JSON.stringify(this.historyPics)),this.$emit("saveSignature",t.data,!0)},useHistory(e){this.historyPics[e]&&this.$confirm("是否使用历史签字","操作信息提醒",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}).then(()=>{this.$emit("saveSignature",this.historyPics[e],!0)})}},computed:{setDynamicVars(){return{"--action-height":`${this.actionHeight}px`}}},watch:{setDynamicVars(e){let n=document.querySelector(".canvas-container");n&&(this.$refs.canvasRef.width=n.offsetWidth,this.$refs.canvasRef.height=n.offsetHeight-this.actionHeight)}},mounted(){this.actionHeight=document.querySelector(".actions-box").offsetHeight,this.ctx=this.$refs.canvasRef.getContext("2d"),localStorage.getItem("signaturesArr")?this.historyPics=JSON.parse(localStorage.getItem("signaturesArr")):this.historyPics=[]}};var Q=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{staticClass:"sign-container",style:e.setDynamicVars},[r("div",{staticClass:"content-area"},[r("div",{staticClass:"canvas-container"},[r("canvas",{ref:"canvasRef",attrs:{id:"canvas-id","canvas-id":"canvas-id"},on:{mousemove:e.draw,mousedown:e.startDrawing,mouseup:e.finishDrawing}})]),e._v(" "),r("div",{staticClass:"history"},[r("div",{staticClass:"img-grid",on:{click:function(n){return e.useHistory(0)}}},[e.historyPics[0]?r("el-image",{attrs:{src:e.historyPics[0]?e.historyPics[0].url:"",fit:"scale-down"}}):e._e()],1),e._v(" "),r("div",{staticClass:"img-grid",on:{click:function(n){return e.useHistory(1)}}},[e.historyPics[1]?r("el-image",{attrs:{src:e.historyPics[1]?e.historyPics[1].url:"",fit:"scale-down"}}):e._e()],1),e._v(" "),r("div",{staticClass:"img-grid",on:{click:function(n){return e.useHistory(2)}}},[e.historyPics[2]?r("el-image",{attrs:{src:e.historyPics[2]?e.historyPics[2].url:"",fit:"scale-down"}}):e._e()],1)])]),e._v(" "),r("div",{staticClass:"actions-box"},[r("button",{staticClass:"commn-btn",on:{click:e.clearCanvas}},[e._v("清除")]),e._v(" "),r("button",{staticClass:"commn-btn",on:{click:e.saveSignature}},[e._v("保存")]),e._v(" "),r("button",{staticClass:"commn-btn",on:{click:e.undo}},[e._v("撤销")])])])};Q._withStripped=!0;const X={components:{staffTree:O,userTask:W,commIdea:U,TopSign:I({render:Q,staticRenderFns:[]},function(e){e&&e("data-v-32de1c56_0",{source:".sign-container[data-v-32de1c56] {\n width: 100%;\n height: 100%;\n}\n.sign-container .canvas-container[data-v-32de1c56] {\n position: relative;\n width: 540px;\n height: 540px;\n border: 1px solid;\n}\n.sign-container .canvas-container #canvas-id[data-v-32de1c56] {\n width: 100%;\n height: 100%;\n}\n.sign-container .actions-box[data-v-32de1c56] {\n width: 100%;\n bottom: constant(safe-area-inset-bottom);\n bottom: env(safe-area-inset-bottom);\n background: #fff;\n display: flex;\n justify-content: space-evenly;\n padding: 10px 0 10px 0;\n padding: 10px 0 10px 0;\n}\n.sign-container .actions-box .commn-btn[data-v-32de1c56] {\n background: #409EFF;\n border-color: #409EFF;\n color: #FFF;\n border-radius: 4px;\n padding: 10px 20px;\n border: 1px solid #DCDFE6;\n font-size: 14px;\n}\n.sign-container .actions-box .commn-btn[data-v-32de1c56]:hover {\n background: #66b1ff;\n border-color: #66b1ff;\n}\n.history[data-v-32de1c56] {\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n padding: 0px 15px;\n background: #f6f6f6;\n}\n.history .img-grid[data-v-32de1c56] {\n height: 170px;\n width: 170px;\n border: 1px solid #333;\n background-color: #fff;\n}\n.history .img-grid .el-image[data-v-32de1c56] {\n background: #fff;\n height: 100%;\n width: 100%;\n}\n.content-area[data-v-32de1c56] {\n display: flex;\n}\n\n/*# sourceMappingURL=topSign.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\TopSign\\topSign.vue","topSign.vue"],names:[],mappings:"AAwMA;EACA,WAAA;EACA,YAAA;ACvMA;ADyMA;EACA,kBAAA;EAGA,YAAA;EACA,aAAA;EACA,iBAAA;ACzMA;AD2MA;EACA,WAAA;EACA,YAAA;ACzMA;AD6MA;EACA,WAAA;EACA,wCAAA;EACA,mCAAA;EACA,gBAAA;EACA,aAAA;EACA,6BAAA;EACA,sBAAA;EACA,sBAAA;AC3MA;AD6MA;EACA,mBAAA;EACA,qBAAA;EACA,WAAA;EACA,kBAAA;EACA,kBAAA;EACA,yBAAA;EACA,eAAA;AC3MA;AD6MA;EACA,mBAAA;EACA,qBAAA;AC3MA;ADiNA;EACA,aAAA;EACA,8BAAA;EACA,sBAAA;EACA,iBAAA;EACA,mBAAA;AC9MA;ADiNA;EACA,aAAA;EACA,YAAA;EACA,sBAAA;EACA,sBAAA;AC/MA;ADiNA;EACA,gBAAA;EACA,YAAA;EACA,WAAA;AC/MA;ADoNA;EACA,aAAA;ACjNA;;AAEA,sCAAsC",file:"topSign.vue",sourcesContent:['<template>\r\n <div class="sign-container" :style="setDynamicVars">\r\n <div class="content-area">\r\n <div class="canvas-container">\r\n <canvas ref="canvasRef" @mousemove="draw" @mousedown="startDrawing" @mouseup="finishDrawing" id="canvas-id"\r\n canvas-id="canvas-id"></canvas>\r\n </div>\r\n <div class="history">\r\n <div class="img-grid" @click="useHistory(0)">\r\n <el-image v-if="historyPics[0]" :src="historyPics[0] ? historyPics[0].url : \'\'" fit="scale-down"></el-image>\r\n </div>\r\n <div class="img-grid" @click="useHistory(1)">\r\n <el-image v-if="historyPics[1]" :src="historyPics[1] ? historyPics[1].url : \'\'" fit="scale-down"></el-image>\r\n </div>\r\n <div class="img-grid" @click="useHistory(2)">\r\n <el-image v-if="historyPics[2]" :src="historyPics[2] ? historyPics[2].url : \'\'" fit="scale-down"></el-image>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="actions-box">\r\n <button @click="clearCanvas" class="commn-btn">清除</button>\r\n <button @click="saveSignature" class="commn-btn">保存</button>\r\n <button @click="undo" class="commn-btn">撤销</button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport ajax from "../zjp_process/api";\r\nconst Api = {\r\n upload: (form) => {\r\n return new Promise((resolve, reject) => {\r\n ajax\r\n .getAjaxObj()\r\n .post("/file/upload", form)\r\n .then((e) => {\r\n resolve(e);\r\n });\r\n });\r\n },\r\n};\r\nexport default {\r\n data() {\r\n return {\r\n ctx: null,\r\n signatureImage: \'\',\r\n actionHeight: 0,\r\n isDrawing: false,\r\n paths: [], // 保存绘制的路径数据\r\n currentPath: [],\r\n historyPics: []\r\n }\r\n },\r\n methods: {\r\n startDrawing(event) {\r\n this.isDrawing = true;\r\n this.currentPath = []; // 创建新的路径\r\n const rect = this.$refs.canvasRef.getBoundingClientRect();\r\n // 修正按下位置相对于画布的位置\r\n const x = (event.clientX - rect.left) * (this.$refs.canvasRef.width / rect.width);\r\n const y = (event.clientY - rect.top) * (this.$refs.canvasRef.height / rect.height);\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(x, y);\r\n this.currentPath.push({ x, y });\r\n },\r\n\r\n draw(event) {\r\n if (!this.isDrawing) return;\r\n if (this.currentPath.length > 0) {\r\n const rect = this.$refs.canvasRef.getBoundingClientRect();\r\n const x = (event.clientX - rect.left) * (this.$refs.canvasRef.width / rect.width);\r\n const y = (event.clientY - rect.top) * (this.$refs.canvasRef.height / rect.height);\r\n this.ctx.lineWidth = 2;\r\n\r\n this.ctx.strokeStyle = "#000000";//线条的颜色\r\n this.ctx.lineTo(x, y);\r\n this.ctx.stroke();\r\n\r\n // 将路径数据保存到数组中\r\n this.currentPath.push({ x, y });\r\n }\r\n },\r\n undo() {\r\n this.paths.pop(); // 删除最后一条路径\r\n // 清空画布\r\n this.ctx.clearRect(0, 0, this.$refs.canvasRef.width, this.$refs.canvasRef.height);\r\n // 重新绘制除最后一条路径之外的所有路径\r\n for (let path of this.paths) {\r\n for (let i = 0; i < path.length - 1; i++) {\r\n const { x, y } = path[i];\r\n if (i === 0) {\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(x, y);\r\n } else {\r\n this.ctx.lineTo(x, y);\r\n this.ctx.stroke();\r\n }\r\n }\r\n }\r\n },\r\n finishDrawing(event) {\r\n if (this.currentPath.length > 0) {\r\n this.paths.push(this.currentPath); // 将当前路径添加到路径数组\r\n }\r\n this.isDrawing = false;\r\n },\r\n\r\n clearCanvas() {\r\n this.ctx.clearRect(0, 0, this.$refs.canvasRef.width, this.$refs.canvasRef.height);\r\n this.signatureImage = \'\';\r\n this.paths = []; // 清空路径记录\r\n this.$emit(\'saveSignature\', \'\', false)\r\n },\r\n\r\n saveSignature() {\r\n if (this.paths.length == 0) {\r\n this.$emit(\'validateFail\', \'请签字\')\r\n return\r\n }\r\n // // toDo: uni框架转成的base64无type前缀 需统一\r\n // this.signatureImage = this.$refs.canvasRef.toDataURL();\r\n // let tmpArr = JSON.parse(localStorage.getItem(\'signaturesArr\')) || []\r\n // tmpArr.unshift(this.signatureImage)\r\n // this.$set(this, \'historyPics\', tmpArr.slice(0, 3))\r\n // localStorage.setItem(\'signaturesArr\', JSON.stringify(this.historyPics))\r\n // this.$emit(\'saveSignature\', this.signatureImage, true)\r\n\r\n // toDo: uni框架转成的base64无type前缀 需统一\r\n this.signatureImage = this.$refs.canvasRef.toBlob((blob) => {\r\n this.uploadImage(blob);\r\n }, \'image/png\', 0.95);\r\n },\r\n async uploadImage(file, fileName) {\r\n this.loading = true;\r\n const formData = new FormData();\r\n formData.append("file", file, fileName || `signature-${Date.now()}.png`);\r\n const res = await Api.upload(formData);\r\n console.log(res);\r\n this.loading = false;\r\n if (!res.success) {\r\n return;\r\n }\r\n let tmpArr = JSON.parse(localStorage.getItem(\'signaturesArr\')) || []\r\n tmpArr.unshift(res.data)\r\n this.$set(this, \'historyPics\', tmpArr.slice(0, 3))\r\n localStorage.setItem(\'signaturesArr\', JSON.stringify(this.historyPics))\r\n this.$emit(\'saveSignature\', res.data, true)\r\n },\r\n useHistory(index) {\r\n if (this.historyPics[index]) {\r\n this.$confirm(`是否使用历史签字`, "操作信息提醒", {\r\n confirmButtonText: "继续",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n }).then(() => {\r\n this.$emit(\'saveSignature\', this.historyPics[index], true)\r\n })\r\n }\r\n }\r\n },\r\n computed: {\r\n setDynamicVars() {\r\n return {\r\n "--action-height": `${this.actionHeight}px`\r\n };\r\n },\r\n // hasHistory() {\r\n // if (this.historyPics && this.historyPics.length > 0) {\r\n // return true\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n // }\r\n },\r\n watch: {\r\n setDynamicVars(newVal) {\r\n let canvasContainer = document.querySelector(\'.canvas-container\');\r\n if (canvasContainer) {\r\n // 解决锯齿及模糊\r\n this.$refs.canvasRef.width = canvasContainer.offsetWidth\r\n this.$refs.canvasRef.height = canvasContainer.offsetHeight - this.actionHeight\r\n }\r\n }\r\n },\r\n mounted() {\r\n this.actionHeight = document.querySelector(\'.actions-box\').offsetHeight;\r\n this.ctx = this.$refs.canvasRef.getContext(\'2d\');\r\n if (localStorage.getItem(\'signaturesArr\')) {\r\n this.historyPics = JSON.parse(localStorage.getItem(\'signaturesArr\'))\r\n }\r\n else {\r\n this.historyPics = []\r\n }\r\n }\r\n}\r\n<\/script>\r\n\r\n\r\n<style lang="scss" scoped>\r\n.sign-container {\r\n width: 100%;\r\n height: 100%;\r\n\r\n .canvas-container {\r\n position: relative;\r\n // width: 100%;\r\n // height: calc(100% - var(--action-height));\r\n width: 540px;\r\n height: 540px;\r\n border: 1px solid;\r\n\r\n #canvas-id {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n }\r\n\r\n .actions-box {\r\n width: 100%;\r\n bottom: constant(safe-area-inset-bottom);\r\n bottom: env(safe-area-inset-bottom);\r\n background: #fff;\r\n display: flex;\r\n justify-content: space-evenly;\r\n padding: 10px 0 10px 0;\r\n padding: 10px 0 10px 0;\r\n\r\n .commn-btn {\r\n background: #409EFF;\r\n border-color: #409EFF;\r\n color: #FFF;\r\n border-radius: 4px;\r\n padding: 10px 20px;\r\n border: 1px solid #DCDFE6;\r\n font-size: 14px;\r\n\r\n &:hover {\r\n background: #66b1ff;\r\n border-color: #66b1ff;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.history {\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n padding: 0px 15px;\r\n background: #f6f6f6;\r\n\r\n\r\n .img-grid {\r\n height: 170px;\r\n width: 170px;\r\n border: 1px solid #333;\r\n background-color: #fff;\r\n\r\n .el-image {\r\n background: #fff;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n }\r\n}\r\n\r\n.content-area {\r\n display: flex;\r\n}\r\n</style>',".sign-container {\n width: 100%;\n height: 100%;\n}\n.sign-container .canvas-container {\n position: relative;\n width: 540px;\n height: 540px;\n border: 1px solid;\n}\n.sign-container .canvas-container #canvas-id {\n width: 100%;\n height: 100%;\n}\n.sign-container .actions-box {\n width: 100%;\n bottom: constant(safe-area-inset-bottom);\n bottom: env(safe-area-inset-bottom);\n background: #fff;\n display: flex;\n justify-content: space-evenly;\n padding: 10px 0 10px 0;\n padding: 10px 0 10px 0;\n}\n.sign-container .actions-box .commn-btn {\n background: #409EFF;\n border-color: #409EFF;\n color: #FFF;\n border-radius: 4px;\n padding: 10px 20px;\n border: 1px solid #DCDFE6;\n font-size: 14px;\n}\n.sign-container .actions-box .commn-btn:hover {\n background: #66b1ff;\n border-color: #66b1ff;\n}\n\n.history {\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n padding: 0px 15px;\n background: #f6f6f6;\n}\n.history .img-grid {\n height: 170px;\n width: 170px;\n border: 1px solid #333;\n background-color: #fff;\n}\n.history .img-grid .el-image {\n background: #fff;\n height: 100%;\n width: 100%;\n}\n\n.content-area {\n display: flex;\n}\n\n/*# sourceMappingURL=topSign.vue.map */"]},media:void 0})},J,"data-v-32de1c56",false,undefined,!1,k,void 0,void 0)},props:{param:Object},data(){return{commentMsg:"",targetUser:[],userTaskListData:{},outGatewayUserTaskModel:this.param.outGatewayUserTaskModel,Enum:y,signVisible:!1,digitalSignature:"",confirmPreposition:!1,confirmLoading:()=>{}}},mounted(){"obj_94014ede99b6495d8f6d5977314faa15"==this.param.ProcessInsObj.processDefId&&(this.commentMsg="同意")},computed:{hasSign(){if(this.param.taskObj.activityExtendAttributes){let e=JSON.parse(this.param.taskObj.activityExtendAttributes);return!!e.find(e=>"签字"==e.key)&&e.find(e=>"签字"==e.key)}return!1},signRequired(){return!!this.param.extendedProperties.find(e=>"signature"==e.name)}},methods:{setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},getProcessNode(e){let n={};return n.humanPerformerName=e.userTaskModelDTO.humanPerformer.name,n.id=e.id,n.loopCardinality=e.loopCardinality||e.userTaskModelDTO.loopCardinality,n.name=e.userTaskModelDTO.name,n.type=e.type,n.routeTxt=e.userTaskModelDTO.routeTxt,n.participantList=e.userTaskModelDTO.participantList,n.taskNode=this.param.taskNode,n},isOption:e=>"任意指定"==e||"固定部门"==e||"固定账户"==e||"固定单位"==e,getTreeData(e){if(this.param.nextTaskNode){if("固定部门"==e.userTaskModelDTO.humanPerformer.name)return e.userTaskModelDTO.routeTxt.departmentIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=A.部门,n});if("固定单位"==e.userTaskModelDTO.humanPerformer.name)return e.userTaskModelDTO.routeTxt.companyIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=A.主体,n})}},getRes(){return{targetUser:this.targetUser}},confirm(n,r,t){if(Array.isArray(t)&&(this.param.attachment=t),!this.commentMsg&&this.param.commentMsgRequired)return e.warning("请输入审批意见"),!1;if(this.commentMsg.length>200)return e.warning("审批意见不能超过200个字"),!1;let s={taskId:this.param.taskInstId,processInstanceId:this.param.processInstId,commentMsg:this.commentMsg||" ",comment:this.commentMsg||" ",businessData:this.param.businessData,attachment:this.param.attachment};for(let e in this.userTaskListData){let n=this.userTaskListData[e],r=this.$refs[n].$el?this.$refs[n]:this.$refs[n][0],t=r.getValue();if(t&&t.vars&&this.param.incomingConditionItemList&&this.param.incomingConditionItemList.length>0&&this.param.incomingConditionItemList.forEach(e=>{t.vars[e.itemName]||(t.vars[e.itemName]="")}),!t)return!1;let i=[];const a=this.param.nextTaskNode;i=a.setPersonnel?a.assignees||[]:(r.targetUserList||[]).map(e=>({id:e.id,name:e.name})),s.assignees=i,s.multiNodeParticipant={...s.multiNodeParticipant,...t.multiNodeParticipant},s.vars={...s.vars,...t.vars}}let i=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&(!this.param.nextTaskNode.branches||this.param.nextTaskNode.branches.length<=0),a=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=this.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType,o=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&!this.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=this.param.nextTaskNode.branches[0].nodeType;if(i||a||o)if("exclusiveGateway"==this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&1==this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length>0)s.multiNodeParticipant={...s.multiNodeParticipant,[this.param.nextTaskNode.branches[0].nodeInfoDTO.id]:this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(e=>e.id)};else{if(!Object.keys(s.multiNodeParticipant).length)return e.warning("请选择下一节点"),!1}if(s.pass=!0,Date.now(),this.param.getVars){let e=this.param.getVars();if(!1===e)return!1;s.vars={...s.vars,...e}}if(this.signRequired)return this.confirmPreposition=n,this.confirmLoading=r,void(this.signVisible=!0);r(),n?n().then(e=>{f.tis.complete(s).then(n=>{n.code==u.success?(e&&e(),this.$emit("success")):this.$emit("fail",n.msg)}).catch(()=>{this.$emit("fail","")})}).catch(()=>{this.$emit("fail","")}):f.tis.complete(s).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)}).catch(e=>{this.$emit("fail",e.response?e.response.data?e.response.data.msg||e.response.data.message:"":e.message||e.msg||"")})},confirmWithSign(){let n={taskId:this.param.taskInstId,processInstanceId:this.param.processInstId,commentMsg:this.commentMsg||" ",comment:this.commentMsg||" ",businessData:this.param.businessData,digitalSignature:{name:this.param.digitalSignature.name,url:this.param.digitalSignature.url},attachment:this.param.attachment};for(let e in this.userTaskListData){let r=this.userTaskListData[e],t=(this.$refs[r].$el?this.$refs[r]:this.$refs[r][0]).getValue();if(!t)return!1;n.multiNodeParticipant={...n.multiNodeParticipant,...t.multiNodeParticipant},n.vars={...n.vars,...t.vars}}if(this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType)if("exclusiveGateway"==this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&1==this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length>0)n.multiNodeParticipant={...n.multiNodeParticipant,[this.param.nextTaskNode.branches[0].nodeInfoDTO.id]:this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(e=>e.id)};else{if(!Object.keys(n.multiNodeParticipant).length)return e.warning("请选择下一节点"),!1}if(this.param.getVars){let e=this.param.getVars();if(!1===e)return!1;n.vars={...n.vars,...e}}n.pass=!0,this.confirmLoading(),this.confirmPreposition?this.confirmPreposition().then(e=>{f.tis.complete(n).then(n=>{n.code==u.success?(e&&e(),this.$emit("success")):this.$emit("fail",n.msg)}).catch(()=>{this.$emit("fail","")})}).catch(()=>{this.$emit("fail","")}):f.tis.complete(n).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)}).catch(e=>{this.$emit("fail",e.response?e.response.data?e.response.data.msg||e.response.data.message:"":e.message||e.msg||"")})},toSign(){this.signVisible=!0},handleSignature(e,n){this.param.digitalSignature=e,n&&(this.signVisible=!1,this.confirmWithSign())},closeSign(){this.signVisible=!1},noticeFail(n){e.warning(n)}}};var Y=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},["obj_94014ede99b6495d8f6d5977314faa15"!=e.param.ProcessInsObj.processDefId?[r("el-form-item",{attrs:{label:"快捷回复"}},[r("el-radio-group",{model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}},[r("el-radio",{attrs:{label:"同意"}},[e._v("同意")]),e._v(" "),e.param.showAsPlanned?r("el-radio",{attrs:{label:"如拟"}},[e._v("如拟")]):e._e(),e._v(" "),r("el-radio",{attrs:{label:"已阅"}},[e._v("已阅")])],1)],1),e._v(" "),e.param.showCommIdea?r("el-form-item",[r("commIdea",{ref:"commIdea",on:{change:function(n){return e.commentMsg=n}}})],1):e._e(),e._v(" "),r("el-form-item",{attrs:{label:"审批意见",rules:[{required:e.param.commentMsgRequired,message:"审批意见不能为空"}]}},[r("el-input",{staticClass:"formInput",attrs:{rows:5,maxlength:"200","show-word-limit":"",type:"textarea",resize:"none",placeholder:"请输入审批意见"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}}),e._v(" "),e.param.showCommIdea?r("div",{staticClass:"add-idea"},[r("span",{on:{click:function(n){return e.$refs.commIdea.addIdea(e.commentMsg)}}},[e._v("设置为常用意见")])]):e._e()],1)]:e._e(),e._v(" "),e._t("file"),e._v(" "),e.param.nodeLoading?[r("el-form-item",{attrs:{label:"下一节点",size:"normal"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("节点加载中,请稍后......")])])]:[e.param.nextTaskNode&&e.param.nextTaskNode.id&&"parallelGateway"!=e.param.nextTaskNode.nodeType&&"exclusiveGateway"!=e.param.nextTaskNode.nodeType?["endEvent"!=e.param.nextTaskNode.nodeType?[r("userTask",{key:e.param.nextTaskNode.id,ref:e.setItemRef(e.param.nextTaskNode.id),attrs:{personType:e.param.nextTaskNode.personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode,{REQUIRED:!(1==e.param.nextTaskNode.setPersonnel&&e.param.nextTaskNode.assignees&&e.param.nextTaskNode.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})]:[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]]:"exclusiveGateway"==e.param.nextTaskNode.nodeType&&e.param.outGatewayUserTaskModel&&e.param.outGatewayUserTaskModel.length>0?e._l(e.param.outGatewayUserTaskModel,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{personType:e.param.personType,personEntity:e.param.personEntity,processNode:Object.assign({},n,{pType:e.param.nextTaskNode.nodeType,REQUIRED:!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)})}})}):e.param.outGatewayUserTaskModel&&e.param.outGatewayUserTaskModel.length>0?e._l(e.param.outGatewayUserTaskModel,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{personType:e.param.personType,personEntity:e.param.personEntity,processNode:Object.assign({},n,{REQUIRED:!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)})}})}):"exclusiveGateway"==e.param.nextTaskNode.nodeType&&e.param.nextTaskNode.branches&&1==e.param.nextTaskNode.branches.length?["endEvent"!=e.param.nextTaskNode.nodeType?[e.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=e.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType?r("userTask",{key:e.param.nextTaskNode.branches[0].nodeInfoDTO.id,ref:e.setItemRef(e.param.nextTaskNode.branches[0].nodeInfoDTO.id),attrs:{personType:e.param.nextTaskNode.branches[0].nodeInfoDTO.personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode.branches[0].nodeInfoDTO,{REQUIRED:!(1==e.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel&&e.param.nextTaskNode.branches[0].nodeInfoDTO.assignees&&e.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}}):e.param.nextTaskNode.branches[0].nodeInfoDTO||"endEvent"==e.param.nextTaskNode.branches[0].nodeType?[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]:r("userTask",{key:e.param.nextTaskNode.branches[0].id,ref:e.setItemRef(e.param.nextTaskNode.branches[0].id),attrs:{personType:e.param.nextTaskNode.branches[0].personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode.branches[0],{REQUIRED:!(1==e.param.nextTaskNode.branches[0].setPersonnel&&e.param.nextTaskNode.branches[0].assignees&&e.param.nextTaskNode.branches[0].assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})]:[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]]:"exclusiveGateway"==e.param.nextTaskNode.nodeType&&e.param.nextTaskNode.branches&&e.param.nextTaskNode.branches.length>1?["endEvent"!=e.param.nextTaskNode.nodeType?[r("userTask",{key:e.param.nextTaskNode.id,ref:e.setItemRef(e.param.nextTaskNode.id),attrs:{personType:e.param.nextTaskNode.personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode,{REQUIRED:!(1==e.param.nextTaskNode.setPersonnel&&e.param.nextTaskNode.assignees&&e.param.nextTaskNode.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})]:[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]]:"parallelGateway"==e.param.nextTaskNode.nodeType?e._l(e.param.nextTaskNode.branches,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{personType:e.param.personType||"",personEntity:e.param.personEntity||{},processNode:Object.assign({},n,{REQUIRED:!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})}):e._e()],e._v(" "),e._t("form"),e._v(" "),r("el-dialog",{attrs:{title:"签字",visible:e.signVisible,"append-to-body":"",width:"800px","close-on-click-modal":!1},on:{"update:visible":function(n){e.signVisible=n},closed:e.closeSign}},[r("div",{staticClass:"sign-container"},[r("TopSign",{on:{saveSignature:e.handleSignature,validateFail:e.noticeFail}})],1)])],2)};Y._withStripped=!0;const Z=I({render:Y,staticRenderFns:[]},function(e){e&&e("data-v-0571f330_0",{source:'\n@import "./content.css";\n.add-idea[data-v-0571f330] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-0571f330] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n.sign-idea[data-v-0571f330] {\r\n display: flex;\nspan {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n}\n.sign-container[data-v-0571f330] {\r\n min-height: 60vh;\n}\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\complete.vue"],names:[],mappings:";AAukBA,uBAAA;AACA;EACA,aAAA;EACA,oBAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA;AACA;EACA,aAAA;AACA;IACA,cAAA;IACA,eAAA;AACA;AACA;AACA;EACA,gBAAA;AACA",file:"complete.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <template\r\n v-if="\r\n param.ProcessInsObj.processDefId !=\r\n \'obj_94014ede99b6495d8f6d5977314faa15\'\r\n "\r\n >\r\n <el-form-item label="快捷回复">\r\n <el-radio-group v-model="commentMsg">\r\n <el-radio label="同意">同意</el-radio>\r\n <el-radio label="如拟" v-if="param.showAsPlanned">如拟</el-radio>\r\n <el-radio label="已阅">已阅</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item v-if="param.showCommIdea">\r\n <commIdea ref="commIdea" @change="(e) => (commentMsg = e)" />\r\n </el-form-item>\r\n <el-form-item\r\n label="审批意见"\r\n :rules="[\r\n { required: param.commentMsgRequired, message: \'审批意见不能为空\' },\r\n ]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n type="textarea"\r\n resize="none"\r\n placeholder="请输入审批意见"\r\n class="formInput"\r\n />\r\n <div class="add-idea" v-if="param.showCommIdea">\r\n <span @click="$refs[\'commIdea\'].addIdea(commentMsg)"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n \x3c!-- <el-form-item\r\n label="审批签字"\r\n :rules="[\r\n { required: signRequired, message: \'审批签字不能为空\' },\r\n ]"\r\n v-if="signRequired"\r\n >\r\n <div class="sign-idea">\r\n <span @click="toSign">去签字</span>\r\n </div>\r\n </el-form-item> --\x3e\r\n </template>\r\n <slot name="file"></slot>\r\n \x3c!-- <el-form-item label="下一步处理节点" size="normal"> </el-form-item> --\x3e\r\n <template v-if="param.nodeLoading">\r\n <el-form-item label="下一节点" size="normal">\r\n <b style="font-size: 16px">节点加载中,请稍后......</b>\r\n </el-form-item>\r\n </template>\r\n <template v-else>\r\n <template v-if="param.nextTaskNode && param.nextTaskNode.id && param.nextTaskNode.nodeType != \'parallelGateway\' && param.nextTaskNode.nodeType != \'exclusiveGateway\'">\r\n <template v-if="param.nextTaskNode.nodeType != \'endEvent\'">\r\n <userTask\r\n :key="param.nextTaskNode.id"\r\n :personType="param.nextTaskNode.personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n \x3c!-- 复杂网关:不带branch, --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'exclusiveGateway\' && param.outGatewayUserTaskModel && param.outGatewayUserTaskModel.length > 0">\r\n <userTask\r\n v-for="item in param.outGatewayUserTaskModel"\r\n :key="item.id"\r\n :personType="param.personType"\r\n :personEntity="param.personEntity"\r\n :processNode="{ \r\n ...item,\r\n pType: param.nextTaskNode.nodeType,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }"\r\n :ref="setItemRef(item.id)"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else-if="param.outGatewayUserTaskModel && param.outGatewayUserTaskModel.length > 0">\r\n <userTask\r\n v-for="item in param.outGatewayUserTaskModel"\r\n :key="item.id"\r\n :personType="param.personType"\r\n :personEntity="param.personEntity"\r\n :processNode="{ \r\n ...item,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }"\r\n :ref="setItemRef(item.id)"\r\n >\r\n </userTask>\r\n </template>\r\n \x3c!-- 互斥网关,只有一个分支 --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'exclusiveGateway\' && param.nextTaskNode.branches && param.nextTaskNode.branches.length == 1">\r\n <template v-if="param.nextTaskNode.nodeType != \'endEvent\'">\r\n <userTask\r\n v-if="param.nextTaskNode.branches[0].nodeInfoDTO && param.nextTaskNode.branches[0].nodeInfoDTO.nodeType != \'endEvent\'"\r\n :key="param.nextTaskNode.branches[0].nodeInfoDTO.id"\r\n :personType="param.nextTaskNode.branches[0].nodeInfoDTO.personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode.branches[0].nodeInfoDTO,\r\n REQUIRED: param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && param.nextTaskNode.branches[0].nodeInfoDTO.assignees && param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.branches[0].nodeInfoDTO.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n <userTask\r\n v-else-if="!param.nextTaskNode.branches[0].nodeInfoDTO && param.nextTaskNode.branches[0].nodeType != \'endEvent\'"\r\n :key="param.nextTaskNode.branches[0].id"\r\n :personType="param.nextTaskNode.branches[0].personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode.branches[0],\r\n REQUIRED: param.nextTaskNode.branches[0].setPersonnel == true && param.nextTaskNode.branches[0].assignees && param.nextTaskNode.branches[0].assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.branches[0].id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n \x3c!-- 互斥网关,多个分支 --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'exclusiveGateway\' && param.nextTaskNode.branches && param.nextTaskNode.branches.length > 1">\r\n <template v-if="param.nextTaskNode.nodeType != \'endEvent\'">\r\n <userTask\r\n :key="param.nextTaskNode.id"\r\n :personType="param.nextTaskNode.personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n \x3c!-- 并行网关 --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'parallelGateway\'">\r\n <userTask\r\n v-for="item in param.nextTaskNode.branches"\r\n :key="item.id"\r\n :personType="param.personType || \'\'"\r\n :personEntity="param.personEntity || {}"\r\n :processNode="{ \r\n ...item,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(item.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n \r\n\r\n <slot name="form"></slot>\r\n\r\n <el-dialog title="签字" :visible.sync="signVisible" append-to-body width="800px" @closed="closeSign" :close-on-click-modal="false">\r\n <div class="sign-container">\r\n <TopSign @saveSignature="handleSignature" @validateFail="noticeFail">\r\n </TopSign>\r\n </div>\r\n </el-dialog>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport userTask from "./userTask.vue";\r\nimport commIdea from "./commIdea.vue";\r\nimport TopSign from \'../../TopSign/topSign.vue\'\r\n\r\nexport default {\r\n components: { staffTree, userTask, commIdea, TopSign },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n targetUser: [],\r\n userTaskListData: {},\r\n outGatewayUserTaskModel: this.param.outGatewayUserTaskModel,\r\n Enum: $enum,\r\n signVisible: false,\r\n digitalSignature: \'\',\r\n confirmPreposition: false, \r\n confirmLoading: () => {}\r\n };\r\n },\r\n mounted() {\r\n if (\r\n this.param.ProcessInsObj.processDefId ==\r\n "obj_94014ede99b6495d8f6d5977314faa15"\r\n ) {\r\n this.commentMsg = "同意";\r\n }\r\n },\r\n computed: {\r\n hasSign() {\r\n if(this.param.taskObj.activityExtendAttributes) {\r\n let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n if(tmpObj.find(item => item.key == \'签字\')) {\r\n return tmpObj.find(item => item.key == \'签字\')\r\n }\r\n else {\r\n return false\r\n }\r\n }\r\n else {\r\n return false\r\n }\r\n },\r\n signRequired() {\r\n const fd = this.param.extendedProperties.find(i => {\r\n return i.name == \'signature\'\r\n })\r\n return fd ? true : false\r\n // if(this.param.taskObj.activityExtendAttributes) {\r\n // let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n // if(tmpObj.find(item => item.key == \'签字\')) {\r\n // return tmpObj.find(item => item.key == \'签字\').value == \'1\'\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n }\r\n },\r\n methods: {\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getProcessNode(o) {\r\n let obj = {};\r\n obj.humanPerformerName = o.userTaskModelDTO.humanPerformer.name;\r\n obj.id = o.id;\r\n obj.loopCardinality =\r\n o.loopCardinality || o.userTaskModelDTO.loopCardinality;\r\n obj.name = o.userTaskModelDTO.name;\r\n obj.type = o.type;\r\n obj.routeTxt = o.userTaskModelDTO.routeTxt;\r\n obj.participantList = o.userTaskModelDTO.participantList;\r\n obj.taskNode = this.param.taskNode;\r\n return obj;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定账户" ||\r\n humanPerformer == "固定单位"\r\n );\r\n },\r\n\r\n getTreeData(item) {\r\n if (this.param.nextTaskNode) {\r\n if (item.userTaskModelDTO.humanPerformer.name == "固定部门") {\r\n return item.userTaskModelDTO.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.userTaskModelDTO.humanPerformer.name == "固定单位") {\r\n return item.userTaskModelDTO.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.主体;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n // 提交前的前置函数,loading函数,附件列表\r\n confirm(preposition, loading, attachment) {\r\n if (Array.isArray(attachment)) {\r\n this.param.attachment = attachment;\r\n }\r\n\r\n console.log(this.param, \'测试\', this.userTaskListData)\r\n if (!this.commentMsg && this.param.commentMsgRequired) {\r\n ElMessage.warning("请输入审批意见");\r\n return false;\r\n }\r\n if (this.commentMsg.length > 200) {\r\n ElMessage.warning("审批意见不能超过200个字");\r\n return false;\r\n }\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || "",\r\n commentMsg: this.commentMsg || " ",\r\n comment: this.commentMsg || " ",\r\n businessData: this.param.businessData,\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n console.log(o, \'o\', this.$refs[o])\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(\'上传\', refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (res && res.vars && this.param.incomingConditionItemList&& this.param.incomingConditionItemList.length > 0) {\r\n this.param.incomingConditionItemList.forEach(item => {\r\n if (!res.vars[item.itemName]) {\r\n res.vars[item.itemName] = \'\'\r\n }\r\n })\r\n }\r\n console.log(res, \'res get value\')\r\n if (!res) {\r\n return false;\r\n }\r\n let assignees = []\r\n // 已经选了人,则用返回的,不然用自己选的\r\n const nextTaskNode = this.param.nextTaskNode\r\n if (nextTaskNode.setPersonnel) {\r\n assignees = nextTaskNode.assignees || []\r\n } else {\r\n assignees = (refCom.targetUserList || []).map(i => ({\r\n id: i.id,\r\n name: i.name,\r\n }))\r\n }\r\n param.assignees = assignees\r\n\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n\r\n // 如果不是结束事件,同时multiNodeParticipant为空,则提示\r\n let isNotEndEvent1 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && (!this.param.nextTaskNode.branches || this.param.nextTaskNode.branches.length <= 0)\r\n let isNotEndEvent2 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType != \'endEvent\'\r\n let isNotEndEvent3 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && !this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeType != \'endEvent\'\r\n let isNotEndEvent = isNotEndEvent1 || isNotEndEvent2 || isNotEndEvent3\r\n if (isNotEndEvent) {\r\n // 判断是不是仅有一个"exclusiveGateway"节点,同时该节点仅有一个子节点,同时已经选择了固定的人\r\n if (this.param.nextTaskNode.nodeType == \'exclusiveGateway\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)\r\n }\r\n } else {\r\n const keyLen = Object.keys(param.multiNodeParticipant).length\r\n if (!keyLen) {\r\n ElMessage.warning(\'请选择下一节点\')\r\n return false\r\n }\r\n }\r\n }\r\n param.pass = true\r\n\r\n if (Date.now()) {\r\n console.log(param, \'end\', this.param)\r\n // return;\r\n }\r\n // param.variables = {\r\n // wf_form_variable: \'\'\r\n // }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n if(this.signRequired) {\r\n this.confirmPreposition = preposition\r\n this.confirmLoading = loading\r\n this.signVisible = true\r\n return\r\n }\r\n loading();\r\n if (param) {\r\n console.log(param, \'测试\', this.param)\r\n // return;\r\n }\r\n if (preposition) {\r\n preposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n }).catch((e) => {\r\n this.$emit("fail", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : \'\') : e.message || e.msg || \'\');\r\n });\r\n }\r\n },\r\n confirmWithSign() {\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || "",\r\n commentMsg: this.commentMsg || " ",\r\n comment: this.commentMsg || " ",\r\n businessData: this.param.businessData,\r\n digitalSignature: {\r\n name: this.param.digitalSignature.name,\r\n url: this.param.digitalSignature.url,\r\n },\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (!res) {\r\n return false;\r\n }\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n\r\n // 如果不是结束事件,同时multiNodeParticipant为空,则提示\r\n if (this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\') {\r\n // 判断是不是仅有一个"exclusiveGateway"节点,同时该节点仅有一个子节点,同时已经选择了固定的人\r\n if (this.param.nextTaskNode.nodeType == \'exclusiveGateway\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)\r\n }\r\n } else {\r\n const keyLen = Object.keys(param.multiNodeParticipant).length\r\n if (!keyLen) {\r\n ElMessage.warning(\'请选择下一节点\')\r\n return false\r\n }\r\n }\r\n }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n param.pass = true\r\n this.confirmLoading();\r\n if (this.confirmPreposition) {\r\n this.confirmPreposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n }).catch((e) => {\r\n this.$emit("fail", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : \'\') : e.message || e.msg || \'\');\r\n });\r\n }\r\n },\r\n toSign() {\r\n this.signVisible = true\r\n },\r\n handleSignature(e, needClose) {\r\n this.param.digitalSignature = e\r\n console.log(e, \'digitalSignature\')\r\n if(needClose) {\r\n this.signVisible = false\r\n this.confirmWithSign()\r\n }\r\n },\r\n closeSign() {\r\n this.signVisible = false\r\n },\r\n noticeFail(msg) {\r\n ElMessage.warning(msg)\r\n }\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n.sign-idea {\r\n display: flex;\r\n span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n }\r\n}\r\n.sign-container {\r\n min-height: 60vh;\r\n}\r\n</style>\r\n']},media:void 0})},X,"data-v-0571f330",false,undefined,!1,k,void 0,void 0);const K={components:{staffTree:O,commIdea:U},props:{param:Object},data:()=>({commentMsg:""}),methods:{getRes(){return{commentMsg:this.commentMsg}},confirm(n,r){if(!this.commentMsg)return e.warning("请输入审批意见"),!1;n&&n(),r();let t={taskId:this.param.taskInstId,processInstanceId:this.param.processInstId,commentMsg:this.commentMsg||" ",comment:this.commentMsg||" ",businessData:this.param.businessData,assignees:[],pass:!1};f.tis.complete(t).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})}}};var ee=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[e.param.showCommIdea?r("el-form-item",{attrs:{label:"常用意见"}},[r("commIdea",{ref:"commIdea",on:{change:function(n){return e.commentMsg=n}}})],1):e._e(),e._v(" "),r("el-form-item",{attrs:{label:"审批意见",rules:[{required:!0,message:"审批意见不能为空"}]}},[r("el-input",{attrs:{rows:5,type:"textarea",maxlength:"200","show-word-limit":"",resize:"none",placeholder:"请输入审批意见"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}}),e._v(" "),e.param.showCommIdea?r("div",{staticClass:"add-idea"},[r("span",{on:{click:function(n){return e.$refs.commIdea.addIdea(e.commentMsg)}}},[e._v("设置为常用意见")])]):e._e()],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};ee._withStripped=!0;const ne=I({render:ee,staticRenderFns:[]},function(e){e&&e("data-v-68e67c30_0",{source:'\n@import "./content.css";\n.add-idea[data-v-68e67c30] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-68e67c30] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\cancel.vue"],names:[],mappings:";AAkFA,uBAAA;AACA;IACA,aAAA;IACA,oBAAA;AACA;AACA;IACA,cAAA;IACA,eAAA;AACA",file:"cancel.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item label="常用意见" v-if="param.showCommIdea">\r\n <commIdea ref="commIdea" @change="(e) => (commentMsg = e)" />\r\n </el-form-item>\r\n <el-form-item\r\n label="审批意见"\r\n :rules="[{ required: true, message: \'审批意见不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n type="textarea"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n placeholder="请输入审批意见"\r\n />\r\n <div class="add-idea" v-if="param.showCommIdea">\r\n <span @click="$refs[\'commIdea\'].addIdea(commentMsg)"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport commIdea from "./commIdea.vue";\r\n\r\nexport default {\r\n components: { staffTree, commIdea },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n };\r\n },\r\n methods: {\r\n getRes() {\r\n return { commentMsg: this.commentMsg };\r\n },\r\n confirm(preposition,loading) {\r\n if (!this.commentMsg) {\r\n ElMessage.warning("请输入审批意见");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading();\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || "",\r\n commentMsg: this.commentMsg || " ",\r\n comment: this.commentMsg || " ",\r\n businessData: this.param.businessData,\r\n };\r\n\r\n param.assignees = []\r\n param.pass = false\r\n\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n</style>\r\n']},media:void 0})},K,"data-v-68e67c30",false,undefined,!1,k,void 0,void 0);const re={components:{staffTree:O},props:{param:Object},data:()=>({commentMsg:"",nodeId:"",nodesData:[]}),mounted(){this.getReturnableNodes()},methods:{getReturnableNodes(){f.repository.backNodes({taskId:this.param.taskInstId}).then(e=>{e.code==u.success&&(this.nodesData=(e.data||[]).filter(e=>!e.nodeId.includes("startEvent")))})},getRes(){return{commentMsg:this.commentMsg,nodeId:this.nodeId}},confirm(n,r){return this.nodeId?this.commentMsg?(n&&n(),r(),void f.tis.rollback(this.param.taskInstId,this.nodeId,this.commentMsg).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})):(e.warning("请输入退回原因"),!1):(e.warning("请选择退回节点"),!1)}}};var te=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"退回节点",rules:[{required:!0,message:"请选择退回节点"}]}},[r("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"退回节点"},model:{value:e.nodeId,callback:function(n){e.nodeId=n},expression:"nodeId"}},e._l(e.nodesData,function(e){return r("el-option",{key:e.nodeId,attrs:{label:e.nodeName,value:e.nodeId}})}),1)],1),e._v(" "),r("el-form-item",{attrs:{label:"退回原因",rules:[{required:!0,message:"退回原因不能为空"}]}},[r("el-input",{attrs:{rows:5,maxlength:"200","show-word-limit":"",resize:"none",type:"textarea",placeholder:"退回原因"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}})],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};te._withStripped=!0;const se=I({render:te,staticRenderFns:[]},function(e){e&&e("data-v-29b5c2d6_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\roolback.vue"],names:[],mappings:";AA8FA,uBAAA",file:"roolback.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="退回节点"\r\n :rules="[{ required: true, message: \'请选择退回节点\' }]"\r\n >\r\n <el-select v-model="nodeId" placeholder="退回节点" style="width: 100%">\r\n <el-option\r\n v-for="item in nodesData"\r\n :label="item.nodeName"\r\n :value="item.nodeId"\r\n :key="item.nodeId"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item\r\n label="退回原因"\r\n :rules="[{ required: true, message: \'退回原因不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n type="textarea"\r\n placeholder="退回原因"\r\n />\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n nodeId: "",\r\n nodesData: [],\r\n };\r\n },\r\n mounted() {\r\n this.getReturnableNodes();\r\n },\r\n methods: {\r\n getReturnableNodes() {\r\n api.repository.backNodes({\r\n taskId: this.param.taskInstId,\r\n }).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.nodesData = (res.data || []).filter(item => !item.nodeId.includes(\'startEvent\'));\r\n }\r\n });\r\n },\r\n getRes() {\r\n return { commentMsg: this.commentMsg, nodeId: this.nodeId };\r\n },\r\n confirm(preposition,loading) {\r\n if (!this.nodeId) {\r\n ElMessage.warning("请选择退回节点");\r\n return false;\r\n }\r\n if (!this.commentMsg) {\r\n ElMessage.warning("请输入退回原因");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading()\r\n api.tis\r\n .rollback(this.param.taskInstId, this.nodeId, this.commentMsg)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},re,"data-v-29b5c2d6",false,undefined,!1,k,void 0,void 0);const ie={components:{staffTree:O},props:{param:Object},data:()=>({commentMsg:"",nodeId:"",type:"",nodesData:[{type:"wf_withdraw_end",label:"撤销"},{type:"wf_withdraw_start",label:"撤回"}]}),mounted(){this.getReturnableNodes()},methods:{getReturnableNodes(){},getRes(){return{commentMsg:this.commentMsg,nodeId:this.nodeId}},confirm(n,r){if(!this.type)return e.warning("请选择操作类型"),!1;n&&n(),r(),f.tis.withdrawTask({taskId:this.param.taskInstId,withdrawType:this.type}).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})}}};var ae=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"选择操作类型",rules:[{required:!0,message:"请选择操作类型"}]}},[r("el-radio-group",{staticStyle:{width:"100%"},model:{value:e.type,callback:function(n){e.type=n},expression:"type"}},e._l(e.nodesData,function(n){return r("el-radio",{key:n.type,attrs:{label:n.type}},[e._v(e._s(n.label))])}),1)],1),e._v(" "),r("el-form-item",{attrs:{label:"操作说明"}},[r("div",[r("span",{staticStyle:{color:"red","font-weight":"600"}},[e._v("撤销")]),e._v(":撤销终止此流程\n ")]),e._v(" "),r("div",[r("span",{staticStyle:{color:"red","font-weight":"600"}},[e._v("撤回")]),e._v(":撤回到发起人重新提交,若当前流程不存在发起人节点,功能同撤销\n ")])]),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};ae._withStripped=!0;const oe=I({render:ae,staticRenderFns:[]},function(e){e&&e("data-v-d8f4105a_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\withdrawTask.vue"],names:[],mappings:";AA0GA,uBAAA",file:"withdrawTask.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="选择操作类型"\r\n :rules="[{ required: true, message: \'请选择操作类型\' }]"\r\n >\r\n \x3c!-- <el-select v-model="type" placeholder="退回节点" style="width: 100%">\r\n <el-option\r\n v-for="item in nodesData"\r\n :label="item.label"\r\n :value="item.id"\r\n :key="item.id"\r\n ></el-option>\r\n </el-select> --\x3e\r\n \x3c!-- 改成el-radio-group --\x3e\r\n <el-radio-group v-model="type" style="width: 100%">\r\n <el-radio\r\n v-for="item in nodesData"\r\n :label="item.type"\r\n :key="item.type"\r\n >{{ item.label }}</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item\r\n label="操作说明"\r\n >\r\n <div>\r\n <span style="color: red;font-weight:600;">撤销</span>:撤销终止此流程\r\n </div>\r\n <div>\r\n <span style="color: red;font-weight:600;">撤回</span>:撤回到发起人重新提交,若当前流程不存在发起人节点,功能同撤销\r\n </div>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n nodeId: "",\r\n type: "",\r\n nodesData: [\r\n {\r\n type: \'wf_withdraw_end\',\r\n label: \'撤销\',\r\n },\r\n {\r\n type: \'wf_withdraw_start\',\r\n label: \'撤回\',\r\n },\r\n ],\r\n };\r\n },\r\n mounted() {\r\n this.getReturnableNodes();\r\n },\r\n methods: {\r\n getReturnableNodes() {\r\n // api.tis.getReturnableNodes(this.param.taskInstId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) {\r\n // this.nodesData = res.data;\r\n // }\r\n // });\r\n },\r\n getRes() {\r\n return { commentMsg: this.commentMsg, nodeId: this.nodeId };\r\n },\r\n confirm(preposition,loading) {\r\n if (!this.type) {\r\n ElMessage.warning("请选择操作类型");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading()\r\n // this.param.taskInstId, this.nodeId, this.commentMsg\r\n api.tis\r\n .withdrawTask({\r\n taskId: this.param.taskInstId,\r\n withdrawType: this.type,\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},ie,"data-v-d8f4105a",false,undefined,!1,k,void 0,void 0);const le={components:{staffTree:O},props:{param:Object,isOperLoading:!1},data:()=>({reason:"",targetUser:[]}),methods:{getRes(){return{targetUser:this.targetUser}},confirm(n,r){if(!this.targetUser||0==this.targetUser.length)return e.warning("请选择抄送人"),!1;let t=this.targetUser.join(" ")||"";n&&n({userList:this.$refs.staffTree.userList}),r(),f.tis.createCCTask({processInstId:this.param.processInstId,participant:t,taskId:this.param.taskInstId,title:""}).then(e=>{e.code==u.success?this.$emit("success",!1):this.$emit("fail",e.msg)})}}};var de=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"抄送人员",rules:[{required:!0,message:"请选择抄送人员"}]}},[r("staffTree",{ref:"staffTree",attrs:{personType:e.param.personType,personEntity:e.param.personEntity,multiple:"",max:5e3,disable:e.isOperLoading},model:{value:e.targetUser,callback:function(n){e.targetUser=n},expression:"targetUser"}})],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};de._withStripped=!0;const ce=I({render:de,staticRenderFns:[]},function(e){e&&e("data-v-7e1c1b45_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\ccTask.vue"],names:[],mappings:";AAoFA,uBAAA",file:"ccTask.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="抄送人员"\r\n :rules="[{ required: true, message: \'请选择抄送人员\' }]"\r\n >\r\n <staffTree\r\n :personType="param.personType"\r\n :personEntity="param.personEntity"\r\n v-model="targetUser"\r\n multiple\r\n :max="5000"\r\n ref="staffTree"\r\n :disable = "isOperLoading"\r\n ></staffTree>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n isOperLoading: false,\r\n },\r\n data() {\r\n return {\r\n reason: "",\r\n targetUser: [],\r\n };\r\n },\r\n methods: {\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n\r\n confirm(preposition, loading) {\r\n if (!this.targetUser || this.targetUser.length == 0) {\r\n ElMessage.warning("请选择抄送人");\r\n return false;\r\n }\r\n // if (!this.reason) {\r\n // ElMessage.warning("请填写加签原因");\r\n // return false;\r\n // }\r\n // if (this.reason.length > 200) {\r\n // ElMessage.warning("加签原因不能超过200个字");\r\n // return false;\r\n // }\r\n let ids = this.targetUser.join(" ") || "";\r\n if (preposition)\r\n preposition({\r\n userList: this.$refs["staffTree"].userList,\r\n });\r\n loading();\r\n api.tis\r\n .createCCTask({\r\n processInstId: this.param.processInstId,\r\n // parentTaskInstId: this.param.taskInstId,\r\n participant: ids,\r\n taskId: this.param.taskInstId,\r\n title: "",\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success", false);\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},le,"data-v-7e1c1b45",false,undefined,!1,k,void 0,void 0);var pe=Object.freeze({__proto__:null,cancel:ne,ccTask:ce,complete:Z,counterSign:$,delegateTask:V,roolback:se,withdrawTask:oe});const me={upload:e=>new Promise((n,r)=>{f.getAjaxObj().post("/file/upload",e).then(e=>{n(e)})})};const he={name:"JyrFileUpload",inject:{elForm:{default:""}},props:{acceptType:{type:String,default:""},showFileName:{type:Boolean,default:!0},value:{type:[String,Array],default:""},locked:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1},fileMaxSize:{type:Number,default:200},hasFilename:{type:Boolean,default:!1},hasContainId:{type:Boolean,default:!1},fullFileObject:{type:Boolean,default:!1},isText:{type:Boolean,default:!1},viewCallBack:{type:Function},remark:{type:String,default:""},showFile:{type:Boolean,default:!1},limit:[String,Number]},data:()=>({index:void 0,fileList:[],fullFileList:[],loading:!1}),computed:{previewSrcList(){return this.fileList.filter(e=>this.isImage(e))},showPlus(){return!this.isDisabled&&(this.multiple||this.fileList.length<1)},showEmpty(){return this.isDisabled&&this.fileList.length<1},isDisabled(){return this.locked||this.elForm&&this.elForm.disabled}},watch:{value(){this.composeFileList()}},created(){this.composeFileList()},methods:{async selectFile(){this.$refs.file.click()},onUploadChange(e){const n=e.target.files;if(-1!=this.limit&&n.length+this.fileList.length>this.limit)return this.$message.error("最多只能选择"+this.limit+"个文件"),!1;let r=this.fullFileList.map(e=>e.originFileName);for(let e=0;e<n.length;e++){const t=n[e];if(0==t.size)return this.$message.error("文件内容为空,请重新选择"),!1;const s=1048576*this.fileMaxSize;if(t.size>s)return this.$refs.file.value=null,void this.$errorMessage(`文件大小不能超过${this.fileMaxSize}M`);if(!t)return void(this.$refs.file.value=null);const i=t.name.split(".");if(""!=this.acceptType&&this.acceptType.indexOf(i[i.length-1])<0)return this.$refs.file.value=null,void this.$errorMessage(`文件类型限制为${this.acceptType}`);let a=0,o=t.name;for(;a<r.length&&r.includes(t.name);){const e=t.name.lastIndexOf(".");if(a+=1,e>-1){o=t.name.substring(0,e)+"("+a+")"+t.name.substring(e)}else o=t.name+"("+a+")"}r.push(o),this.doUpload(t,o)}},coputedFullFileList(e){this.$emit("input",e),this.$emit("change",e)},async doUpload(e,n){this.loading=!0;const r=new FormData;r.append("file",e,n);const t=await me.upload(r);if(this.loading=!1,!t.success)return;if(this.$refs.file.value=null,!this.multiple){if(this.fullFileObject)this.$emit("input",[t.data]),this.$emit("change",[t.data]);else{const e=this.composeFilename(t.data);this.$emit("input",e),this.$emit("change",e)}return}this.index>=0?(this.fileList.splice(this.index,1,this.composeFilename(t.data)),this.fullFileList.splice(this.index,1,t.data)):(this.fileList.push(this.composeFilename(t.data)),this.fullFileList.push(t.data));const s=this.fullFileObject?this.fullFileList:this.fileList.join(",");this.coputedFullFileList(s)},composeFileList(){if(this.fullFileObject)return this.fileList=this.value&&this.value.length?this.value.map(e=>`${e.url}&${e.name}`):[],void(this.fullFileList=this.value&&this.value.length?this.value.map(e=>e):[]);this.value?this.fileList=this.value.split(",").filter(e=>e):this.fileList=[]},composeFilename(e){return this.hasFilename?`${e.url}?filename=${e.fileName}`:this.hasContainId?e.id:`${e.url}&${e.name}`},isImage(e){const n=e.split("."),r=n[n.length-1];return["png","jpg","jpeg","gif","bmp"].includes(r)},isDw(e){const n=e.split("."),r=n[n.length-1];return["dwg","dwt"].includes(r)},isPdf(e){const n=e.split("."),r=n[n.length-1];return["pdf"].includes(r)},onDelete(e){if(this.multiple){this.fileList.splice(e,1),this.fullFileList.splice(e,1);const n=this.fullFileObject?this.fullFileList:this.fileList.join(",");this.coputedFullFileList(n)}else this.$emit("input",""),this.$emit("change","")},onPreview(e){if(this.viewCallBack)return void this.viewCallBack(e,this.fileList);let n=this.fileList[e].split("."),r=n[n.length-1],t=["png","jpg","jpeg","gif"].some(function(e){return e==r}),s=null;if(this.fileList.forEach((n,r)=>{this.isImage(n)&&r<=e&&(null==s?s=0:s+=1)}),t)this.$refs.images[s].clickHandler();else{let n=`${this.fileList[e]}`,r=1;-1!==n.indexOf("https")||-1!==n.indexOf("http")?(r=-1!==n.indexOf("https")?1:0,window.open(`https://wdyl.ddzg.cn:8089/?ssl=${r}&furl=${n}`)):-1===n.indexOf("http")&&me.list([n]).then(e=>{r=-1!==e.data[0].url.indexOf("https")?1:0,window.open(`https://wdyl.ddzg.cn:8089/?ssl=${r}&furl=${e.data[0].url}`)})}},onDownload(e){const n=this.fileList[e];-1!==n.indexOf("https")||-1!==n.indexOf("http")?this.downloadFile(n,n.slice(n.lastIndexOf("&")+1)):me.list([n]).then(e=>{this.downloadFile(e.data[0].url,e.data[0].url.slice(e.data[0].url.lastIndexOf("&")+1))})},downloadFile:(e,n)=>{var r=document.createElement("a");r.download=n,r.style.display="none";var t=new Blob([e]);r.href=URL.createObjectURL(t),document.body.appendChild(r),r.click(),document.body.removeChild(r)}}};var fe=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}]},[r("ul",{staticClass:"file-wrap"},[e._l(e.fileList,function(n,t){return r("li",{key:t,staticClass:"file-item"},[e.isImage(n)?r("section",{class:[e.isText?"TextWrapper":"image-wrapper"]},[r("el-image",{ref:"images",refInFor:!0,attrs:{src:n,"preview-src-list":e.previewSrcList}}),e._v(" "),r("div",{staticClass:"action-area"},[r("span",{staticClass:"action-preview",on:{click:function(n){return e.onPreview(t)}}},[r("i",{staticClass:"el-icon-zoom-in",attrs:{title:"预览"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-upload",on:{click:function(n){return e.selectFile(t)}}},[r("i",{staticClass:"el-icon-upload2",attrs:{title:"上传"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-delete",on:{click:function(n){return e.onDelete(t)}}},[r("i",{staticClass:"el-icon-delete",attrs:{title:"删除"}})])])],1):e.isDw(n)?r("section",{staticClass:"image-wrapper"},[e.isPdf(n)?r("div",{staticClass:"el-image"},[r("img",{staticClass:"el-image__inner",attrs:{src:l,alt:""}})]):r("div",{staticClass:"el-image el-attach"},[r("img",{staticClass:"el-image__inner",attrs:{src:d,alt:""}})]),e._v(" "),r("div",{staticClass:"action-area"},[r("span",{staticClass:"action-preview",on:{click:function(n){return e.onDownload(t)}}},[r("i",{staticClass:"el-icon-download",attrs:{title:"下载"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-upload",on:{click:function(n){return e.selectFile(t)}}},[r("i",{staticClass:"el-icon-upload2",attrs:{title:"上传"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-delete",on:{click:function(n){return e.onDelete(t)}}},[r("i",{staticClass:"el-icon-delete",attrs:{title:"删除"}})])])]):n?r("section",{staticClass:"image-wrapper"},[e.isPdf(n)?r("div",{staticClass:"el-image"},[r("img",{staticClass:"el-image__inner",attrs:{src:l,alt:""}})]):r("div",{staticClass:"el-image el-attach"},[r("img",{staticClass:"el-image__inner",attrs:{src:d,alt:""}})]),e._v(" "),r("div",{staticClass:"action-area"},[r("span",{staticClass:"action-preview",on:{click:function(n){return e.onDownload(t)}}},[r("i",{staticClass:"el-icon-download",attrs:{title:"下载"}})]),e._v(" "),r("span",{staticClass:"action-preview",on:{click:function(n){return e.onPreview(t)}}},[r("i",{staticClass:"el-icon-zoom-in",attrs:{title:"预览"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-upload",on:{click:function(n){return e.selectFile(t)}}},[r("i",{staticClass:"el-icon-upload2",attrs:{title:"上传"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-delete",on:{click:function(n){return e.onDelete(t)}}},[r("i",{staticClass:"el-icon-delete",attrs:{title:"删除"}})])])]):e._e(),e._v(" "),!e.showFile&&e.showFileName?r("div",{attrs:{title:n.slice(n.lastIndexOf("&")+1)}},[r("div",{staticClass:"file_name"},[e._v("\n "+e._s(n.slice(n.lastIndexOf("&")+1))+"\n ")])]):e._e(),e._v(" "),e.showFile?r("div",{attrs:{title:n.slice(n.lastIndexOf("&")+1)}},[e._t("filename",function(){return[e.fullFileObject&&e.fullFileList[t].fileSize?r("div",{staticClass:"file_name",staticStyle:{"text-align":"center",height:"23px","line-height":"23px"}},[e._v("\n "+e._s(e.fullFileList[t].fileSize>1024?(e.fullFileList[t].fileSize/1048576).toFixed(2):(e.fullFileList[t].fileSize/1024).toFixed(2))+"\n "+e._s(e.fullFileList[t].fileSize>1024?"M":"KB")+"\n ")]):e._e(),e._v(" "),r("div",{staticClass:"file_name",staticStyle:{height:"25px","line-height":"25px"}},[e._v("\n "+e._s(n.slice(n.lastIndexOf("&")+1))+"\n ")])]},{filename:n})],2):e._e()])}),e._v(" "),e.showPlus?r("li",{staticClass:"file-item"},[r("div",{staticClass:"image-wrapper pointer",on:{click:function(n){return e.selectFile()}}},[r("i",{staticClass:"el-icon-plus"})])]):e._e(),e._v(" "),e.showEmpty?r("li",{staticClass:"empty-wrap"},[e._v("暂无数据")]):e._e()],2),e._v(" "),""!==e.remark?r("div",{staticStyle:{color:"gray"}},[e._v(e._s(e.remark))]):e._e(),e._v(" "),e.value?r("section",{staticClass:"value-wrap"}):e._e(),e._v(" "),r("input",{ref:"file",staticClass:"file-input",attrs:{accept:e.acceptType,type:"file",multiple:e.multiple},on:{change:e.onUploadChange}})])};fe._withStripped=!0;const ue=I({render:fe,staticRenderFns:[]},function(e){e&&e("data-v-1bc31644_0",{source:".file-wrap[data-v-1bc31644] {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0px;\n margin: 0 !important;\n}\n.file-wrap li[data-v-1bc31644] {\n list-style: none;\n}\n.file-wrap .file-item[data-v-1bc31644] {\n display: inline-block;\n margin: 0 8px 30px 0;\n border: 1px dashed #d9d9d9;\n width: 80px;\n height: 80px;\n box-sizing: border-box;\n border-radius: 6px;\n}\n.file-wrap .file-item .file_name[data-v-1bc31644] {\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.file-wrap .file-item .el-icon-plus[data-v-1bc31644] {\n color: #1389ff;\n font-weight: bold;\n font-size: 35px;\n}\n.file-input[data-v-1bc31644] {\n display: none;\n}\n.TextWrapper[data-v-1bc31644] {\n position: relative;\n width: 30%;\n height: 30%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.TextWrapper[data-v-1bc31644] .el-image {\n width: 100%;\n height: 100%;\n}\n.TextWrapper[data-v-1bc31644] .el-attach {\n width: 31px;\n height: 37px;\n}\n.TextWrapper[data-v-1bc31644] .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.TextWrapper[data-v-1bc31644] .action-area:hover {\n opacity: 1;\n}\n.TextWrapper[data-v-1bc31644] .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.TextWrapper[data-v-1bc31644] .action-area span + span {\n margin-left: 0.5em;\n}\n.image-wrapper[data-v-1bc31644] {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.image-wrapper[data-v-1bc31644] .el-image {\n width: 100%;\n height: 100%;\n}\n.image-wrapper[data-v-1bc31644] .el-attach {\n width: 31px;\n height: 37px;\n}\n.image-wrapper[data-v-1bc31644] .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.image-wrapper[data-v-1bc31644] .action-area:hover {\n opacity: 1;\n}\n.image-wrapper[data-v-1bc31644] .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.image-wrapper[data-v-1bc31644] .action-area span + span {\n margin-left: 0.5em;\n}\n.pointer[data-v-1bc31644] {\n cursor: pointer;\n text-decoration: none !important;\n}\n\n/*# sourceMappingURL=upload.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\JyrFileUpload\\upload.vue","upload.vue"],names:[],mappings:"AAyeA;EACA,gBAAA;EACA,aAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ACxeA;ADyeA;EACA,gBAAA;ACveA;AD0eA;EACA,qBAAA;EACA,oBAAA;EACA,0BAAA;EACA,WAAA;EACA,YAAA;EACA,sBAAA;EACA,kBAAA;ACxeA;AD0eA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ACxeA;AD2eA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ACzeA;AD8eA;EACA,aAAA;AC3eA;AD8eA;EACA,kBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;AC3eA;AD6eA;EACA,WAAA;EACA,YAAA;AC3eA;AD8eA;EACA,WAAA;EACA,YAAA;AC5eA;AD+eA;EACA,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,8BAAA;EACA,WAAA;EACA,UAAA;EACA,wBAAA;AC7eA;AD+eA;EACA,UAAA;AC7eA;ADgfA;EACA,qBAAA;EACA,eAAA;AC9eA;ADgfA;EACA,kBAAA;AC9eA;ADofA;EACA,kBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;ACjfA;ADmfA;EACA,WAAA;EACA,YAAA;ACjfA;ADofA;EACA,WAAA;EACA,YAAA;AClfA;ADqfA;EACA,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,8BAAA;EACA,WAAA;EACA,UAAA;EACA,wBAAA;ACnfA;ADqfA;EACA,UAAA;ACnfA;ADsfA;EACA,qBAAA;EACA,eAAA;ACpfA;ADsfA;EACA,kBAAA;ACpfA;AD0fA;EACA,eAAA;EACA,gCAAA;ACvfA;;AAEA,qCAAqC",file:"upload.vue",sourcesContent:['<template>\r\n <div v-loading="loading">\r\n <ul class="file-wrap">\r\n <li v-for="(filename, index) in fileList" :key="index" class="file-item">\r\n <section\r\n v-if="isImage(filename)"\r\n :class="[isText ? \'TextWrapper\' : \'image-wrapper\']"\r\n >\r\n <el-image\r\n ref="images"\r\n :src="filename"\r\n :preview-src-list="previewSrcList"\r\n />\r\n <div class="action-area">\r\n <span class="action-preview" @click="onPreview(index)">\r\n <i class="el-icon-zoom-in" title="预览" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-upload"\r\n @click="selectFile(index)"\r\n >\r\n <i class="el-icon-upload2" title="上传" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-delete"\r\n @click="onDelete(index)"\r\n >\r\n <i class="el-icon-delete" title="删除" />\r\n </span>\r\n </div>\r\n \x3c!-- <div class="file_name" v-if="showFileName">{{filename.slice(filename.lastIndexOf(\'/\') + 1)}}</div>--\x3e\r\n </section>\r\n <section v-else-if="isDw(filename)" class="image-wrapper">\r\n <div class="el-image" v-if="isPdf(filename)">\r\n <img\r\n src="@/assets/images/pdf-file.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div v-else class="el-image el-attach">\r\n <img\r\n src="@/assets/images/components/attach.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div class="action-area">\r\n <span class="action-preview" @click="onDownload(index)">\r\n <i class="el-icon-download" title="下载" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-upload"\r\n @click="selectFile(index)"\r\n >\r\n <i class="el-icon-upload2" title="上传" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-delete"\r\n @click="onDelete(index)"\r\n >\r\n <i class="el-icon-delete" title="删除" />\r\n </span>\r\n </div>\r\n </section>\r\n <section v-else-if="filename" class="image-wrapper">\r\n <div class="el-image" v-if="isPdf(filename)">\r\n <img\r\n src="@/assets/images/pdf-file.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div v-else class="el-image el-attach">\r\n <img\r\n src="@/assets/images/components/attach.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div class="action-area">\r\n <span class="action-preview" @click="onDownload(index)">\r\n <i class="el-icon-download" title="下载" />\r\n </span>\r\n <span class="action-preview" @click="onPreview(index)">\r\n <i class="el-icon-zoom-in" title="预览" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-upload"\r\n @click="selectFile(index)"\r\n >\r\n <i class="el-icon-upload2" title="上传" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-delete"\r\n @click="onDelete(index)"\r\n >\r\n <i class="el-icon-delete" title="删除" />\r\n </span>\r\n </div>\r\n </section>\r\n <div\r\n v-if="!showFile && showFileName"\r\n :title="filename.slice(filename.lastIndexOf(\'&\') + 1)"\r\n >\r\n <div class="file_name">\r\n {{ filename.slice(filename.lastIndexOf("&") + 1) }}\r\n </div>\r\n </div>\r\n <div\r\n v-if="showFile"\r\n :title="filename.slice(filename.lastIndexOf(\'&\') + 1)"\r\n >\r\n <slot name="filename" :filename="filename">\r\n <div\r\n class="file_name"\r\n v-if="fullFileObject && fullFileList[index].fileSize"\r\n style="text-align: center; height: 23px; line-height: 23px"\r\n >\r\n {{\r\n fullFileList[index].fileSize > 1024\r\n ? (fullFileList[index].fileSize / (1024 * 1024)).toFixed(2)\r\n : (fullFileList[index].fileSize / 1024).toFixed(2)\r\n }}\r\n {{ fullFileList[index].fileSize > 1024 ? "M" : "KB" }}\r\n </div>\r\n <div class="file_name" style="height: 25px; line-height: 25px">\r\n {{ filename.slice(filename.lastIndexOf("&") + 1) }}\r\n </div>\r\n </slot>\r\n </div>\r\n </li>\r\n <li v-if="showPlus" class="file-item">\r\n <div class="image-wrapper pointer" @click="selectFile()">\r\n <i class="el-icon-plus" />\r\n </div>\r\n </li>\r\n <li v-if="showEmpty" class="empty-wrap">暂无数据</li>\r\n </ul>\r\n <div v-if="remark !== \'\'" style="color: gray">{{ remark }}</div>\r\n <section v-if="value" class="value-wrap" />\r\n <input\r\n :accept="acceptType"\r\n ref="file"\r\n type="file"\r\n class="file-input"\r\n @change="onUploadChange"\r\n :multiple="multiple"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport ajax from "../zjp_process/api";\r\nconst Api = {\r\n upload: (form) => {\r\n return new Promise((resolve, reject) => {\r\n ajax\r\n .getAjaxObj()\r\n .post("/file/upload", form)\r\n .then((e) => {\r\n resolve(e);\r\n });\r\n });\r\n },\r\n};\r\nexport default {\r\n name: "JyrFileUpload",\r\n inject: {\r\n elForm: {\r\n default: "",\r\n },\r\n },\r\n props: {\r\n acceptType: {\r\n type: String,\r\n default: "",\r\n },\r\n showFileName: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n value: {\r\n type: [String, Array],\r\n default: "",\r\n },\r\n locked: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n fileMaxSize: {\r\n type: Number,\r\n default: 200,\r\n },\r\n hasFilename: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n hasContainId: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n fullFileObject: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isText: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n viewCallBack: {\r\n type: Function,\r\n },\r\n remark: {\r\n type: String,\r\n default: "",\r\n },\r\n showFile: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n limit: [String, Number],\r\n },\r\n data() {\r\n return {\r\n index: undefined,\r\n fileList: [],\r\n fullFileList: [],\r\n loading: false,\r\n };\r\n },\r\n computed: {\r\n previewSrcList() {\r\n return this.fileList.filter((v) => this.isImage(v));\r\n },\r\n showPlus() {\r\n return !this.isDisabled && (this.multiple || this.fileList.length < 1);\r\n },\r\n showEmpty() {\r\n return this.isDisabled && this.fileList.length < 1;\r\n },\r\n isDisabled() {\r\n return this.locked || (this.elForm && this.elForm.disabled);\r\n },\r\n },\r\n watch: {\r\n value() {\r\n this.composeFileList();\r\n },\r\n },\r\n created() {\r\n this.composeFileList();\r\n },\r\n methods: {\r\n async selectFile() {\r\n console.log("上传文件开始");\r\n this.$refs.file.click();\r\n },\r\n onUploadChange(event) {\r\n const fileList = event.target.files;\r\n if (\r\n this.limit != -1 &&\r\n fileList.length + this.fileList.length > this.limit\r\n ) {\r\n this.$message.error("最多只能选择" + this.limit + "个文件");\r\n return false;\r\n }\r\n console.log(fileList.length, "文件列表");\r\n let tempList = this.fullFileList.map((item) => item.originFileName);\r\n for (let i = 0; i < fileList.length; i++) {\r\n const file = fileList[i];\r\n if (file.size == 0) {\r\n this.$message.error("文件内容为空,请重新选择");\r\n return false;\r\n }\r\n const fileMaxSize = 1024 * 1024 * this.fileMaxSize;\r\n if (file.size > fileMaxSize) {\r\n this.$refs.file.value = null;\r\n this.$errorMessage(`文件大小不能超过${this.fileMaxSize}M`);\r\n return;\r\n }\r\n\r\n if (!file) {\r\n this.$refs.file.value = null;\r\n return;\r\n }\r\n const arrays = file.name.split(".");\r\n if (\r\n this.acceptType != "" &&\r\n this.acceptType.indexOf(arrays[arrays.length - 1]) < 0\r\n ) {\r\n this.$refs.file.value = null;\r\n this.$errorMessage(`文件类型限制为${this.acceptType}`);\r\n return;\r\n }\r\n let count = 0;\r\n let fileName = file.name;\r\n while (count < tempList.length && tempList.includes(file.name)) {\r\n const inx = file.name.lastIndexOf(".");\r\n count = count + 1;\r\n if (inx > -1) {\r\n const beforeName = file.name.substring(0, inx);\r\n const typeName = file.name.substring(inx);\r\n fileName = beforeName + "(" + count + ")" + typeName;\r\n } else {\r\n fileName = file.name + "(" + count + ")";\r\n }\r\n }\r\n tempList.push(fileName);\r\n console.log(file, "上传文件");\r\n this.doUpload(file, fileName);\r\n }\r\n\r\n console.log("all", fileList);\r\n },\r\n coputedFullFileList(fileData) {\r\n this.$emit("input", fileData);\r\n this.$emit("change", fileData);\r\n },\r\n async doUpload(file, fileName) {\r\n this.loading = true;\r\n const formData = new FormData();\r\n formData.append("file", file, fileName);\r\n const res = await Api.upload(formData);\r\n console.log(res);\r\n this.loading = false;\r\n if (!res.success) {\r\n return;\r\n }\r\n this.$refs.file.value = null;\r\n if (!this.multiple) {\r\n if (this.fullFileObject) {\r\n this.$emit("input", [res.data]);\r\n this.$emit("change", [res.data]);\r\n } else {\r\n const filename = this.composeFilename(res.data);\r\n this.$emit("input", filename);\r\n this.$emit("change", filename);\r\n }\r\n return;\r\n }\r\n if (this.index >= 0) {\r\n this.fileList.splice(this.index, 1, this.composeFilename(res.data));\r\n this.fullFileList.splice(this.index, 1, res.data);\r\n } else {\r\n this.fileList.push(this.composeFilename(res.data));\r\n this.fullFileList.push(res.data);\r\n }\r\n console.log("filename====", this.fileList);\r\n\r\n const fileStr = this.fullFileObject\r\n ? this.fullFileList\r\n : this.fileList.join(",");\r\n this.coputedFullFileList(fileStr);\r\n },\r\n composeFileList() {\r\n if (this.fullFileObject) {\r\n this.fileList =\r\n this.value && this.value.length\r\n ? this.value.map((item) => `${item.url}&${item.name}`)\r\n : [];\r\n this.fullFileList =\r\n this.value && this.value.length ? this.value.map((item) => item) : [];\r\n return;\r\n }\r\n if (this.value) {\r\n this.fileList = this.value.split(",").filter((v) => v);\r\n } else {\r\n this.fileList = [];\r\n }\r\n },\r\n composeFilename(data) {\r\n return this.hasFilename\r\n ? `${data.url}?filename=${data.fileName}`\r\n : this.hasContainId\r\n ? data.id\r\n : `${data.url}&${data.name}`;\r\n },\r\n isImage(filename) {\r\n const arr = filename.split(".");\r\n const extension = arr[arr.length - 1];\r\n return ["png", "jpg", "jpeg", "gif", "bmp"].includes(extension);\r\n },\r\n isDw(filename) {\r\n const arr = filename.split(".");\r\n const extension = arr[arr.length - 1];\r\n return ["dwg", "dwt"].includes(extension);\r\n },\r\n isPdf(filename) {\r\n const arr = filename.split(".");\r\n const extension = arr[arr.length - 1];\r\n return ["pdf"].includes(extension);\r\n },\r\n onDelete(index) {\r\n if (this.multiple) {\r\n this.fileList.splice(index, 1);\r\n this.fullFileList.splice(index, 1);\r\n const fileStr = this.fullFileObject\r\n ? this.fullFileList\r\n : this.fileList.join(",");\r\n this.coputedFullFileList(fileStr);\r\n } else {\r\n this.$emit("input", "");\r\n this.$emit("change", "");\r\n }\r\n },\r\n onPreview(index) {\r\n if (this.viewCallBack) {\r\n this.viewCallBack(index, this.fileList);\r\n return;\r\n }\r\n let arr = this.fileList[index].split(".");\r\n // 获取文件的后缀\r\n let suffix = arr[arr.length - 1];\r\n let imgList = ["png", "jpg", "jpeg", "gif"];\r\n let result = imgList.some(function (item) {\r\n return item == suffix;\r\n });\r\n let imgIndex = null;\r\n this.fileList.forEach((item, i) => {\r\n if (this.isImage(item) && i <= index) {\r\n if (imgIndex == null) {\r\n imgIndex = 0;\r\n } else {\r\n imgIndex = imgIndex + 1;\r\n }\r\n }\r\n });\r\n if (result) {\r\n // console.log(this.$refs.images,index)\r\n this.$refs.images[imgIndex].clickHandler();\r\n } else {\r\n let url = `${this.fileList[index]}`;\r\n let ssl = 1;\r\n if (url.indexOf("https") !== -1 || url.indexOf("http") !== -1) {\r\n ssl = url.indexOf("https") !== -1 ? 1 : 0;\r\n // window.open(`http://www.ddzg.cn:8202/#/pages/filePreview/index?file=${url}`);\r\n window.open(`https://wdyl.ddzg.cn:8089/?ssl=${ssl}&furl=${url}`);\r\n } else if (url.indexOf("http") === -1) {\r\n // 获取文件接口\r\n Api.list([url]).then((res) => {\r\n ssl = res.data[0].url.indexOf("https") !== -1 ? 1 : 0;\r\n window.open(\r\n `https://wdyl.ddzg.cn:8089/?ssl=${ssl}&furl=${res.data[0].url}`\r\n );\r\n // window.open(`http://www.ddzg.cn:8202/#/pages/filePreview/index?file=${res.data[0].url}`);\r\n });\r\n }\r\n }\r\n },\r\n onDownload(index) {\r\n const url = this.fileList[index];\r\n if (url.indexOf("https") !== -1 || url.indexOf("http") !== -1) {\r\n this.downloadFile(url, url.slice(url.lastIndexOf("&") + 1));\r\n } else {\r\n Api.list([url]).then((res) => {\r\n this.downloadFile(\r\n res.data[0].url,\r\n res.data[0].url.slice(res.data[0].url.lastIndexOf("&") + 1)\r\n );\r\n });\r\n }\r\n },\r\n downloadFile: (fileurl, filename) => {\r\n //fileurl文件地址(一般是接口返回) filename文件下载后的名字\r\n var a = document.createElement("a");\r\n a.download = filename; //下载后文件名\r\n a.style.display = "none";\r\n var blob = new Blob([fileurl]); // 字符内容转变成blob地址 二进制地址\r\n a.href = URL.createObjectURL(blob);\r\n document.body.appendChild(a);\r\n a.click(); // 触发点击\r\n document.body.removeChild(a); // 然后移除\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss" scoped>\r\n.file-wrap {\r\n margin-top: 10px;\r\n display: flex;\r\n flex-wrap: wrap;\r\n padding-left: 0px;\r\n margin: 0 !important;\r\n li {\r\n list-style: none;\r\n }\r\n\r\n .file-item {\r\n display: inline-block;\r\n margin: 0 8px 30px 0;\r\n border: 1px dashed #d9d9d9;\r\n width: 80px;\r\n height: 80px;\r\n box-sizing: border-box;\r\n border-radius: 6px;\r\n\r\n .file_name {\r\n width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .el-icon-plus {\r\n color: #1389ff;\r\n font-weight: bold;\r\n font-size: 35px;\r\n }\r\n }\r\n}\r\n\r\n.file-input {\r\n display: none;\r\n}\r\n\r\n.TextWrapper ::v-deep {\r\n position: relative;\r\n width: 30%;\r\n height: 30%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n .el-image {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .el-attach {\r\n width: 31px;\r\n height: 37px;\r\n }\r\n\r\n .action-area {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: rgba(0, 0, 0, 0.7);\r\n color: #fff;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n\r\n span {\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n & + span {\r\n margin-left: 0.5em;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.image-wrapper ::v-deep {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n .el-image {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .el-attach {\r\n width: 31px;\r\n height: 37px;\r\n }\r\n\r\n .action-area {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: rgba(0, 0, 0, 0.7);\r\n color: #fff;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n\r\n span {\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n & + span {\r\n margin-left: 0.5em;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.pointer {\r\n cursor: pointer;\r\n text-decoration: none !important;\r\n}\r\n</style>\r\n',".file-wrap {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0px;\n margin: 0 !important;\n}\n.file-wrap li {\n list-style: none;\n}\n.file-wrap .file-item {\n display: inline-block;\n margin: 0 8px 30px 0;\n border: 1px dashed #d9d9d9;\n width: 80px;\n height: 80px;\n box-sizing: border-box;\n border-radius: 6px;\n}\n.file-wrap .file-item .file_name {\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.file-wrap .file-item .el-icon-plus {\n color: #1389ff;\n font-weight: bold;\n font-size: 35px;\n}\n\n.file-input {\n display: none;\n}\n\n.TextWrapper ::v-deep {\n position: relative;\n width: 30%;\n height: 30%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.TextWrapper ::v-deep .el-image {\n width: 100%;\n height: 100%;\n}\n.TextWrapper ::v-deep .el-attach {\n width: 31px;\n height: 37px;\n}\n.TextWrapper ::v-deep .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.TextWrapper ::v-deep .action-area:hover {\n opacity: 1;\n}\n.TextWrapper ::v-deep .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.TextWrapper ::v-deep .action-area span + span {\n margin-left: 0.5em;\n}\n\n.image-wrapper ::v-deep {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.image-wrapper ::v-deep .el-image {\n width: 100%;\n height: 100%;\n}\n.image-wrapper ::v-deep .el-attach {\n width: 31px;\n height: 37px;\n}\n.image-wrapper ::v-deep .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.image-wrapper ::v-deep .action-area:hover {\n opacity: 1;\n}\n.image-wrapper ::v-deep .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.image-wrapper ::v-deep .action-area span + span {\n margin-left: 0.5em;\n}\n\n.pointer {\n cursor: pointer;\n text-decoration: none !important;\n}\n\n/*# sourceMappingURL=upload.vue.map */"]},media:void 0})},he,"data-v-1bc31644",false,undefined,!1,k,void 0,void 0);ue.install=e=>{e.component(ue.name,ue)};const ge={name:"nf-button",props:{userId:{type:String,default:""},loading:{type:Boolean,default:!1},buttonList:{type:Array,default:()=>[]},process:Object,comment:String},data:()=>({myButtonList:[],isCollapse:!0,nodeForm:{},nodeOption:{column:[{label:"节点",prop:"nodeId",type:"select",props:{label:"nodeName",value:"nodeId"},span:24,rules:[{required:!0,message:"请选择回退节点",trigger:"change"}]}]},backNodes:[]}),watch:{"process.taskId":{handler(e){e&&f.repository.backNodes({taskId:e}).then(e=>{const n=e.data;this.backNodes=n})},immediate:!0},buttonList:{handler(e){this.buttonList=e},immediate:!0,deep:!0}},methods:{getButton(e){return this.buttonList.find(n=>n.buttonKey==e)}}};var Ae=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-row",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"foot-item",style:{}},["todo"==e.process.status?[e.getButton("wf_pass")?r("el-button",{attrs:{type:"success",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("examine",!0,e.getButton("wf_pass").name)}}},[r("span",[e._v(e._s(e.getButton("wf_pass").name))])]):e._e(),e._v(" "),e.getButton("wf_reject")?r("el-button",{attrs:{type:"danger",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("examine",!1,e.getButton("wf_reject").name)}}},[r("span",[e._v(e._s(e.getButton("wf_reject").name))])]):e._e(),e._v(" "),e.userId==e.process.variables.applyUserId?r("el-button",{attrs:{size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("reminders")}}},[r("span",[e._v("催办")])]):e._e(),e._v(" "),e.getButton("wf_transfer")?r("el-button",{attrs:{type:"primary",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("user-select",{type:"transfer",checkType:"radio",name:e.getButton("wf_transfer").name})}}},[e._v(e._s(e.getButton("wf_transfer").name))]):e._e(),e._v(" "),e.getButton("wf_delegate")?r("el-button",{attrs:{type:"warning",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("user-select",{type:"delegate",checkType:"radio",name:e.getButton("wf_delegate").name})}}},[e._v("\n "+e._s(e.getButton("wf_delegate").name)+"\n ")]):e._e(),e._v(" "),e.getButton("wf_rollback")?r("el-button",{attrs:{type:"success",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("rollback",e.getButton("wf_rollback").name)}}},[e._v("\n "+e._s(e.getButton("wf_rollback").name)+"\n ")]):e._e(),e._v(" "),e.getButton("wf_terminate")?r("el-button",{attrs:{type:"danger",size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("terminate")}}},[e._v("\n "+e._s(e.getButton("wf_terminate").name)+"\n ")]):e._e(),e._v(" "),e.process.isMultiInstance&&e.getButton("wf_add_instance")?r("el-button",{attrs:{type:"primary",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("user-select",{type:"addInstance",checkType:"checkbox",name:e.getButton("wf_add_instance").name})}}},[e._v("\n "+e._s(e.getButton("wf_add_instance").name)+"\n ")]):e._e(),e._v(" "),e.getButton("wf_cctask")?r("el-button",{attrs:{size:"default",disabled:e.loading},on:{click:function(n){e.$emit("circulate",e.getButton("wf_cctask").name)}}},[r("span",[e._v(e._s(e.getButton("wf_cctask").name))])]):e._e()]:e._e(),e._v(" "),e.process.isOwner&&e.process.isReturnable&&!["recall","reject"].includes(e.process.processIsFinished)?r("el-button",{attrs:{type:"warning",size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("withdraw","撤销")}}},[e._v("\n 撤销\n ")]):e._e(),e._v(" "),e.getButton("wf_print")?r("el-button",{attrs:{type:"info",size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("print")}}},[e._v("\n "+e._s(e.getButton("wf_print").name)+"\n ")]):e._e()],2)],1)};Ae._withStripped=!0;const be=I({render:Ae,staticRenderFns:[]},function(e){e&&e("data-v-a5517ce6_0",{source:".foot-item[data-v-a5517ce6] {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\processBtns.vue","processBtns.vue"],names:[],mappings:"AAyJA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;ACxJA;;AAEA,0CAA0C",file:"processBtns.vue",sourcesContent:["<template>\r\n <div>\r\n <el-row v-loading=\"loading\" class=\"foot-item\" :style=\"{\r\n // width: isCollapse ? 'calc(100% - 71px)' : 'calc(100% - 241px)',\r\n }\">\r\n <template v-if=\"process.status == 'todo'\">\r\n \x3c!-- 暂存 --\x3e\r\n \x3c!-- <el-button type=\"primary\" :disabled=\"loading\" @click=\"$emit('draft')\">\r\n 暂存\r\n </el-button> --\x3e\r\n \x3c!-- 提交 --\x3e\r\n <el-button v-if=\"getButton('wf_pass')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', true, getButton('wf_pass').name)\">\r\n <span>{{ getButton('wf_pass').name }}</span>\r\n </el-button>\r\n \x3c!-- 取消申请 --\x3e\r\n <el-button v-if=\"getButton('wf_reject')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', false, getButton('wf_reject').name)\">\r\n <span>{{ getButton('wf_reject').name }}</span>\r\n </el-button>\r\n \x3c!-- 催办 --\x3e\r\n <el-button v-if=\"userId == process.variables.applyUserId\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('reminders')\">\r\n <span>催办</span>\r\n </el-button>\r\n \x3c!-- 转办 --\x3e\r\n <el-button v-if=\"getButton('wf_transfer')\" type=\"primary\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'transfer', checkType: 'radio', name: getButton('wf_transfer').name })\">{{ getButton('wf_transfer').name\r\n }}</el-button>\r\n \x3c!-- 委托 --\x3e\r\n <el-button v-if=\"getButton('wf_delegate')\" type=\"warning\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'delegate', checkType: 'radio', name: getButton('wf_delegate').name })\">\r\n {{ getButton('wf_delegate').name }}\r\n </el-button>\r\n \x3c!-- 指定回退 --\x3e\r\n <el-button v-if=\"getButton('wf_rollback')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('rollback', getButton('wf_rollback').name)\">\r\n {{ getButton('wf_rollback').name }}\r\n </el-button>\r\n \x3c!-- 终止 --\x3e\r\n <el-button v-if=\"getButton('wf_terminate')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('terminate')\">\r\n {{ getButton('wf_terminate').name }}\r\n </el-button>\r\n \x3c!-- 加签 --\x3e\r\n <el-button v-if=\"process.isMultiInstance && getButton('wf_add_instance')\" type=\"primary\" size=\"default\"\r\n :disabled=\"loading\" @click=\"\r\n $emit('user-select', {\r\n type: 'addInstance',\r\n checkType: 'checkbox',\r\n name: getButton('wf_add_instance').name,\r\n })\r\n \">\r\n {{ getButton('wf_add_instance').name }}\r\n </el-button>\r\n \x3c!-- 传阅 --\x3e\r\n <el-button v-if=\"getButton('wf_cctask')\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('circulate', getButton('wf_cctask').name)\">\r\n <span>{{ getButton('wf_cctask').name }}</span>\r\n </el-button>\r\n </template>\r\n \x3c!-- 撤销 --\x3e\r\n <el-button v-if=\"\r\n process.isOwner &&\r\n process.isReturnable &&\r\n !['recall', 'reject'].includes(process.processIsFinished)\r\n \" type=\"warning\" size=\"default\" :disabled=\"loading\" @click=\"$emit('withdraw', '撤销')\">\r\n 撤销\r\n </el-button>\r\n \x3c!-- 打印 --\x3e\r\n <el-button v-if=\"getButton('wf_print')\" type=\"info\" size=\"default\" :disabled=\"loading\" @click=\"$emit('print')\">\r\n {{ getButton('wf_print').name }}\r\n </el-button>\r\n </el-row>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from '../api';\r\n\r\nexport default {\r\n name: 'nf-button',\r\n props: {\r\n userId: {\r\n type: String,\r\n default: '',\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n buttonList: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n process: Object,\r\n comment: String,\r\n },\r\n data() {\r\n return {\r\n myButtonList: [],\r\n isCollapse: true,\r\n nodeForm: {},\r\n nodeOption: {\r\n column: [\r\n {\r\n label: '节点',\r\n prop: 'nodeId',\r\n type: 'select',\r\n props: {\r\n label: 'nodeName',\r\n value: 'nodeId',\r\n },\r\n span: 24,\r\n rules: [{ required: true, message: '请选择回退节点', trigger: 'change' }],\r\n },\r\n ],\r\n },\r\n backNodes: [],\r\n };\r\n },\r\n watch: {\r\n 'process.taskId': {\r\n handler(val) {\r\n if (val) {\r\n api.repository.backNodes({ taskId: val }).then(res => {\r\n const list = res.data;\r\n this.backNodes = list;\r\n // this.findObject(this.nodeOption.column, 'nodeId').dicData = list;\r\n });\r\n }\r\n },\r\n immediate: true,\r\n },\r\n buttonList: {\r\n handler(val) {\r\n this.buttonList = val;\r\n },\r\n immediate: true,\r\n deep: true,\r\n },\r\n },\r\n methods: {\r\n getButton(key) {\r\n return this.buttonList.find(b => b.buttonKey == key);\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.foot-item {\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n}\r\n</style>\r\n",".foot-item {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */"]},media:void 0})},ge,"data-v-a5517ce6",false,undefined,!1,k,void 0,void 0);const ve={name:"nf-flow",props:{flowList:{type:Array,default:()=>[]}},data:()=>({isFlag:!1,toggleText:"展开",commentMap:{assigneeComment:"变更审核人",dispatchComment:"调度",transferComment:"转办",delegateComment:"委托",rollbackComment:"驳回意见",terminateComment:"终止意见",addMultiInstanceComment:"加签",deleteMultiInstanceComment:"减签",withdrawComment:"撤销",recallComment:"撤回",deleteProcessComment:"删除流程",skipComment:"跳过",comment:"审批意见"}}),methods:{handleClick(){this.isFlag=!this.isFlag,this.toggleText=this.isFlag?"收起":"展开"}}};var ye=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-row",{attrs:{type:"flex"}},[r("el-timeline",[e._l(e.flowList,function(n,t){return[["candidate","sequenceFlow"].includes(n.historyActivityType)?e._e():r("el-timeline-item",{key:n.id,attrs:{timestamp:n.endTime||n.createTime,placement:"top"}},[r("el-card",{attrs:{shadow:"never"}},[r("p",[e._v("\n "+e._s(n.assigneeName)+" 在 ["+e._s(n.createTime)+"] 开始处理 ["+e._s("endEvent"==n.historyActivityType?"结束":n.historyActivityName||"未命名")+"] 环节\n ")]),e._v(" "),n.historyActivityDurationTime?r("p",[e._v("\n 任务历时 ["+e._s(n.historyActivityDurationTime)+"]\n ")]):e._e(),e._v(" "),n.comments&&n.comments.length>0?[e._l(n.comments.filter(function(e){return"AddComment"===e.action}),function(t,s){return r("p",{key:s},[s<1?[e.commentMap[t.type]?r("span",[e._v("\n "+e._s(e.commentMap[t.type])+": ["+e._s(t.fullMessage)+"]\n ")]):e._e(),e._v(" "),n.comments.filter(function(e){return"AddComment"===e.action}).length>1?r("span",{staticStyle:{color:"#1989fa",float:"right"},on:{click:e.handleClick}},[e._v("\n "+e._s(e.toggleText)+"\n "),r("i",{class:[e.isFlag?"el-icon-arrow-up":"el-icon-arrow-down"]}),e._v(" "),r("el-icon",[e.isFlag?r("el-icon-arrow-up"):r("el-icon-arrow-down")],1)],1):e._e(),e._v(" "),t.time?r("p",{staticStyle:{color:"gray","font-size":"12px"}},[e._v(e._s(t.time))]):e._e()]:e._e(),e._v(" "),s>0&&e.isFlag?[e.commentMap[t.type]?r("span",[e._v("\n "+e._s(e.commentMap[t.type])+": ["+e._s(t.fullMessage)+"]\n ")]):e._e(),e._v(" "),t.time?r("p",{staticStyle:{color:"gray","font-size":"12px"}},[e._v(e._s(t.time))]):e._e()]:e._e()],2)}),e._v(" "),n.attachmentsQianzi&&n.attachmentsQianzi.length>0?[r("div",{staticStyle:{display:"flex","justify-content":"space-between"}},[r("span",[e._v("签字: ")]),e._v(" "),r("div",{staticStyle:{flex:"1",margin:"-15px 0 0 4px"}},[r("jyr-file-upload",{ref:"fileUpload",refInFor:!0,attrs:{locked:"",fullFileObject:"",showFileName:""},model:{value:n.attachmentsQianzi,callback:function(r){e.$set(n,"attachmentsQianzi",r)},expression:"item.attachmentsQianzi"}})],1)])]:e._e(),e._v(" "),n.attachmentsFujian&&n.attachmentsFujian.length>0?[r("div",{staticStyle:{display:"flex","justify-content":"space-between"}},[r("span",[e._v("附件: ")]),e._v(" "),r("div",{staticStyle:{flex:"1",margin:"-15px 0 0 4px"}},[r("jyr-file-upload",{ref:"fileUpload",refInFor:!0,attrs:{locked:"",fullFileObject:"",showFileName:""},model:{value:n.attachmentsFujian,callback:function(r){e.$set(n,"attachmentsFujian",r)},expression:"item.attachmentsFujian"}})],1)])]:e._e()]:e._e(),e._v(" "),n.endTime?r("p",[e._v("结束时间: ["+e._s(n.endTime)+"]")]):e._e()],2)],1)]})],2)],1)};ye._withStripped=!0;const xe=I({render:ye,staticRenderFns:[]},function(e){e&&e("data-v-2d6a30e2_0",{source:"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",map:{version:3,sources:[],names:[],mappings:"",file:"processFlow.vue"},media:void 0})},ve,undefined,false,undefined,!1,k,void 0,void 0),Ie=e=>{var n,r=(e=>{var n=Object.prototype.toString;return e instanceof Element?"element":{"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object"}[n.call(e)]})(e);if("array"===r)n=[];else{if("object"!==r)return e;n={}}if("array"===r)for(var t=0,s=e.length;t<s;t++)n.push(Ie(e[t]));else if("object"===r)for(var i in e)n[i]=Ie(e[i]);return n};function we(e){e=Ie(e);const n={};e.forEach(e=>{n[e.historyActivityId]?n[e.historyActivityId].push(e):n[e.historyActivityId]=[e]});for(let r in n){const t=n[r];if(t.length>1){e.findLast(e=>e.historyActivityId==r).assigneeName=Array.from(new Set(t.map(e=>e.assigneeName))).join("/")}}const r=[];return e.forEach(e=>{let{assigneeName:n,createTime:t,endTime:s,comments:i}=e;/Safari/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&(t=t.replace(/-/g,"/"),s=s.replace(/-/g,"/"));const a={id:e.historyActivityId,class:s||"candidate"==e.historyActivityType?"":"nodePrimary"};let l="";if(n){if(l=`<span title='${n}'>${n}</span><br>`,t&&(l+=`<span title='${t}'>${function(e,n="YYYY-MM-DD HH:mm:ss"){return o(e).format(n)}(t,"YYYY-MM-DD HH:mm")}</span><br>`),i&&i.length>0){let e,{type:n,fullMessage:r}=i.find(e=>"AddComment"==e.action)||{};"assigneeComment"==n&&(e="变更审核人:"+r,a.class="nodeWarn"),"dispatchComment"==n&&(e="调度:"+r,a.class="nodeWarn"),"transferComment"==n&&(e="转办:"+r,a.class="nodeWarn"),"delegateComment"==n&&(e="委托:"+r,a.class="nodeWarn"),"rollbackComment"==n&&(e="驳回:"+r,a.class="nodeError"),"terminateComment"==n&&(e="终止:"+r,a.class="nodeError"),"addMultiInstanceComment"==n&&(e="加签:"+r,a.class="nodeWarn"),"deleteMultiInstanceComment"==n&&(e="减签:"+r,a.class="nodeError"),"withdrawComment"==n&&(e="撤销:"+r,a.class="nodeWarn"),"deleteProcessComment"==n&&(e="删除流程:"+r,a.class="nodeError"),"cancelProcessComment"==n&&(e="撤销流程:"+r,a.class="nodeError"),"comment"==n&&(e="审批:"+r,a.class="nodeSuccess"),e&&(l+=`<span title='${e}'>${e}</span>`)}a.tooltip=l}"sequenceFlow"==e.historyActivityType?a.class="lineWarn":a.class||"candidate"==e.historyActivityType||(a.class="nodeSuccess");const d=r.findIndex(n=>n.id==e.historyActivityId);-1!=d?r.splice(d,1,a):r.push(a)}),r}function ke(e){const n=[],r=[],t=[];return e.routeTxt&&e.routeTxt.length>0&&e.routeTxt.forEach(e=>{"user"===e.type?n.push(...e.ids.filter(e=>e&&""!==e.trim())):"post"===e.type?r.push(...e.ids):"dept"===e.type&&t.push(...e.ids)}),{intersection:"true"==e.assigneeRetain?1:0,userIds:[...new Set(n)],postIds:[...new Set(r)],deptIds:[...new Set(t)]}}var Te={name:"bpmn-look",props:{diagram:{type:String,default:"",required:!0},approvalData:{type:Array,default:()=>[]},isXml:{type:Boolean,default:!0}},data:()=>({scale:1,viewer:null,loading:!0}),mounted(){this.initViewer(),window.addEventListener("resize",this.canvasResize)},watch:{diagram:{async handler(e){let n=e;n&&this.isXml&&this.loadXml(n)},immediate:!0}},methods:{handleWheel(e){e.preventDefault();const n=.1*Math.sign(e.deltaY);if(this.scale=Math.max(.5,Math.min(this.scale-n,3)),this.viewer){this.viewer.get("canvas").zoom(this.scale)}},async getXml(e){let n={},r="";try{n=await api.repository.getXmlByProcessDefId({processDefId:e}),200==n.code&&(r=n.data)}catch(e){}return r},async initViewer(){this.viewer&&this.viewer.destroy();const e="[object Function]"==Object.prototype.toString.call(s)?s:s.default,n="[object Object]"==Object.prototype.toString.call(a)?a:a.default,r="[object Object]"==Object.prototype.toString.call(i)?i:i.default;this.viewer=new e({container:this.$refs.container,additionalModules:[n,r]}),this.viewer.on("import.done",({error:e})=>{e||(this.canvasResize(),this.addApprovalData())})},canvasResize(){if(this.viewer){this.viewer.get("canvas").zoom(1,"auto")}},setNodeColor(e){const n=this.viewer.get("canvas"),r=this.viewer.get("elementRegistry"),t=this.viewer.get("tooltips");e.forEach(e=>{if(e.id&&e.class&&n.addMarker(e.id,e.class),e.id&&e.tooltip){const n=r.get(e.id);if(n){let{x:r,y:s,type:i}=n;["bpmn:StartEvent","bpmn:EndEvent"].includes(i)?(r-=45,s+=65):["bpmn:UserTask"].includes(i)&&(r-=10,s+=90),t.add({position:{x:r,y:s},html:e.tooltip})}}})},addApprovalData(){if(!this.approvalData||0==this.approvalData.length)return;const e=we(this.approvalData);e&&e.length>0&&this.setNodeColor(e)},async loadXml(e){this.viewer||await this.initViewer();try{const{warnings:n}=await this.viewer.importXML(e);n.length&&this.$emit("warning",n)}catch(e){this.$emit("error",{message:"XML 加载失败",detail:e.message})}}},beforeDestroy(){window.removeEventListener("resize",this.canvasResize),this.viewer&&this.viewer.destroy()}};const Ce=Te;var De=function(){var e=this,n=e.$createElement;return(e._self._c||n)("div",{ref:"container",staticClass:"bpmn-look",on:{wheel:e.handleWheel}})};De._withStripped=!0;const Ne=I({render:De,staticRenderFns:[]},function(e){e&&e("data-v-0aaf0421_0",{source:"\n.bpmn-look[data-v-0aaf0421] {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\n}\n[data-v-0aaf0421] .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\n}\n[data-v-0aaf0421] .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\n}\n[data-v-0aaf0421] .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\n}\n[data-v-0aaf0421] .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\n}\n[data-v-0aaf0421] .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\n}\n[data-v-0aaf0421] .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\n}\n[data-v-0aaf0421] .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\n}\n[data-v-0aaf0421] .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\n}\n[data-v-0aaf0421] .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\n}\n[data-v-0aaf0421] .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\n}\n[data-v-0aaf0421] .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\n}\n[data-v-0aaf0421] .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\n}\n[data-v-0aaf0421] .djs-tooltip br {\r\n display: none;\n}\r\n",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\bpmnLook.vue"],names:[],mappings:";AA6LA;EACA,WAAA;EACA,aAAA;EACA,iBAAA;EACA,iiBAAA;EACA,yBAAA;EACA,kBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,4BAAA;EACA,iBAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,+BAAA;EACA,iBAAA;AACA;AAEA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,uBAAA;AACA;AAEA;EACA,cAAA;EACA,aAAA;EACA,kBAAA;AACA;AACA;EACA,aAAA;AACA",file:"bpmnLook.vue",sourcesContent:["<template>\r\n <div ref=\"container\" class=\"bpmn-look\" @wheel=\"handleWheel\"></div>\r\n</template>\r\n\r\n<script>\r\nimport BpmnViewer from 'bpmn-js/lib/Viewer';\r\nimport MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas'\r\nimport tooltips from \"diagram-js/lib/features/tooltips\";\r\nimport { handleResolveFlows } from './utils'\r\n// 导入api,在引用组件时会报错:Unknown custom element: <bpmn-look> - did you register the component correctly? For recursive components, make sure to provide the \"name\" option.\r\n// import api from \"./api\";\r\n\r\nexport default {\r\n name: 'bpmn-look',\r\n props: {\r\n diagram: {\r\n type: String,\r\n default: '',\r\n required: true\r\n },\r\n approvalData: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n isXml: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n scale: 1,\r\n viewer: null,\r\n loading: true\r\n };\r\n },\r\n mounted() {\r\n this.initViewer();\r\n window.addEventListener('resize', this.canvasResize);\r\n },\r\n watch: {\r\n diagram: {\r\n async handler(newVal) {\r\n console.log(newVal.length, 'new')\r\n let xml = newVal\r\n if (xml && this.isXml) {\r\n this.loadXml(xml);\r\n }\r\n },\r\n immediate: true,\r\n }\r\n },\r\n methods: {\r\n handleWheel(event) {\r\n // if (event.ctrlKey) {\r\n event.preventDefault();\r\n const delta = Math.sign(event.deltaY) * 0.1; // 标准化滚轮值\r\n this.scale = Math.max(0.5, Math.min(this.scale - delta, 3)); // 限制缩放范围0.5~3\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n canvas.zoom(this.scale);\r\n }\r\n // }\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async initViewer() {\r\n if (this.viewer) {\r\n this.viewer.destroy();\r\n }\r\n // 打包的问题,读取不到模块的处理\r\n const View = Object.prototype.toString.call(BpmnViewer) == '[object Function]' ? BpmnViewer : BpmnViewer.default\r\n const Tooltips = Object.prototype.toString.call(tooltips) == '[object Object]' ? tooltips : tooltips.default\r\n const MMoveCanvasModule = Object.prototype.toString.call(MoveCanvasModule) == '[object Object]' ? MoveCanvasModule : MoveCanvasModule.default\r\n console.log(MoveCanvasModule, Object.prototype.toString.call(MoveCanvasModule), 'MoveCanvasModule')\r\n\r\n\r\n this.viewer = new View({\r\n container: this.$refs.container,\r\n additionalModules: [\r\n Tooltips,\r\n MMoveCanvasModule, // 移动整个画布\r\n // {\r\n // textRenderer: ['type', new TextRenderer({ defaultSize: { fontSize: 12 } })]\r\n // }\r\n ],\r\n });\r\n // 画布居中,需要在importXml之前\r\n this.viewer.on('import.done', ({ error }) => {\r\n if (!error) {\r\n console.log(1)\r\n // 画布居中\r\n this.canvasResize()\r\n // 给画布添加审批数据\r\n this.addApprovalData()\r\n }\r\n });\r\n },\r\n canvasResize() {\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n // canvas.zoom('fit-viewport', 'auto');\r\n canvas.zoom(1, 'auto');\r\n }\r\n },\r\n // 添加节点颜色\r\n setNodeColor(nodes) {\r\n const canvas = this.viewer.get(\"canvas\");\r\n const elementRegistry = this.viewer.get(\"elementRegistry\");\r\n const tooltips = this.viewer.get(\"tooltips\");\r\n nodes.forEach((n) => {\r\n if (n.id && n.class) {\r\n canvas.addMarker(n.id, n.class);\r\n }\r\n if (n.id && n.tooltip) {\r\n const node = elementRegistry.get(n.id);\r\n if (node) {\r\n let { x, y, type } = node;\r\n if ([\"bpmn:StartEvent\", \"bpmn:EndEvent\"].includes(type)) {\r\n x = x - 45;\r\n y = y + 65;\r\n } else if ([\"bpmn:UserTask\"].includes(type)) {\r\n x = x - 10;\r\n y = y + 90;\r\n }\r\n tooltips.add({\r\n position: { x, y },\r\n html: n.tooltip,\r\n });\r\n }\r\n }\r\n });\r\n },\r\n addApprovalData() {\r\n console.log(this.approvalData, 'data')\r\n if (!this.approvalData || this.approvalData.length == 0) return;\r\n const flows = handleResolveFlows(this.approvalData)\r\n console.log(flows, 'flows')\r\n if (flows && flows.length > 0) {\r\n this.setNodeColor(flows);\r\n }\r\n },\r\n // 加载xml\r\n async loadXml(xml) {\r\n if (!this.viewer) {\r\n await this.initViewer();\r\n }\r\n try {\r\n // 尝试导入 XML\r\n console.log(xml.length)\r\n const { warnings } = await this.viewer.importXML(xml);\r\n console.log(warnings, 'warningds')\r\n if (warnings.length) {\r\n // 有警告信息时触发 warning 事件\r\n this.$emit('warning', warnings);\r\n }\r\n } catch (error) {\r\n // 导入失败时触发 error 事件\r\n this.$emit('error', {\r\n message: 'XML 加载失败',\r\n detail: error.message\r\n });\r\n console.error('XML 加载失败:', error);\r\n }\r\n }\r\n },\r\n beforeDestroy() {\r\n window.removeEventListener('resize', this.canvasResize);\r\n this.viewer && this.viewer.destroy();\r\n }\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n.bpmn-look {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\r\n}\r\n\r\n::v-deep .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\r\n}\r\n\r\n::v-deep .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\r\n}\r\n\r\n::v-deep .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\r\n}\r\n\r\n::v-deep .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\r\n}\r\n\r\n::v-deep .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\r\n}\r\n\r\n::v-deep .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\r\n}\r\n\r\n::v-deep .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\r\n}\r\n\r\n::v-deep .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\r\n}\r\n\r\n::v-deep .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n::v-deep .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\r\n}\r\n::v-deep .djs-tooltip br {\r\n display: none;\r\n}\r\n</style>"]},media:void 0})},Ce,"data-v-0aaf0421",false,undefined,!1,k,void 0,void 0);const Oe={components:{bpmnLook:Ne,processBtns:be,processFlow:xe,treeselect:r,staffTree:O,...pe,ViewFile:P,JyrFileUpload:ue},props:{taskId:{default:!1,type:String},processId:{require:!0,default:!1,type:String},userId:{require:!0,default:"",type:String},showBtns:{default:!0,type:Boolean},isView:{default:!1,type:Boolean},getVars:{type:Function},before:{type:Function},isAlis:{type:Boolean,default:!1},isAdditional:{type:Boolean,default:!1},businessData:{type:Object,default:void 0},excludeBtn:{type:String,default:""},showAsPlanned:{type:Boolean,default:!1},showCommIdea:{type:Boolean,default:!0},commentMsgRequired:{type:Boolean,default:!0},customBtn:{default:""},tabs:{default:()=>[{name:"基本信息",slot:""},{name:"流程图",slot:""},{name:"审批记录",slot:""}]},personType:{default:""},personEntity:{type:Object,default:()=>{}},isButton:{type:Boolean,default:!1}},provide(){return{isAlisInject:this.isAlis}},data:()=>({incomingConditionItemList:[],deptId:"",initProcessData:{button:[],flow:[],form:{},process:{}},currentProcess:{currentProcessOriginData:[],currentMan:[],currentFirstNode:{}},processData:{button:[],flow:[],form:{},process:{}},submitLoading:!1,flowChartVisible:!1,comment:null,dynamicMaxHeight:"400px",showMulTask:!1,mulTaskList:[],mulTaskTaskId:"",attach:[],customBtns:[],overheight:10,iframeHeight:500,mainWidth:0,absoluteTaskId:"",infoView:!1,showTopTabs:!1,buttonLoading:!1,footBtnLoading:!0,tabheight:400,aftClickBtn:"",attachRule:{required:!0,limit:0},nodeInfoVisible:!1,nodeInfoList:[],jjForm:{saveMetaAnnexCmdList:[]},targetUID:"",commentMsg:"",trackUrl:"",taskObj:{},taskCommentList:[],absoluteBtns:{inside:[],outside:[]},processStatus:"",nextTaskNode:[],activeName:"基本信息",ProcessInsObj:{},outGatewayUserTaskModel:[],dialogVisibleOperation:!1,operationLabel:"",operationCom:{},operationParam:{},taskNode:[],aftTaskNode:{},operation:pe,Enum:y,isOperLoading:!1,isOperationHidden:!1,boxLoading:!1,rules:{attach:[{required:!0,trigger:"change"}]},noReload:!1,digitalSignatureList:[]}),mounted(){window.onresize=()=>(()=>{this.$refs.mianContent&&(this.mainWidth=this.$refs.mianContent.offsetWidth)})()},watch:{activeName:function(e){1==e&&(this.activeName="基本信息")},infoView:function(){this.calculateHeight()},taskId:{handler(e){e&&(this.absoluteTaskId=e)},deep:!0,immediate:!0},processId:{handler(e){if(e){if(this.customBtns=[],this.absoluteBtns={inside:[],outside:[]},this.activeName=this.tabs.length>0?this.tabs[0].name:"",this.getProcessInfo(),this.getCurrentProcess(),Date.now())return;f.repository.queryTaskNodeList(this.processId).then(e=>{if(!this.noReload){if(this.noReload=!1,!this.absoluteTaskId&&e.data.length>1)return this.mulTaskList=e.data,void(this.showMulTask=!0);this.absoluteTaskId=e.data&&e.data.length>0?e.data[0].taskId:"",this.aftTaskNode=e.data[0]}e.code==u.success&&(this.taskNode=e.data,f.pis.getProcessStatus(this.processId,this.absoluteTaskId).then(e=>{e.code==u.success&&(this.processStatus=e.data,this.absoluteTaskId?f.repository.getUserTaskModelCmd(this.absoluteTaskId).then(e=>{e.code==u.success&&(this.taskObj=e.data,this.straightenBtns())}):this.straightenBtns())}))}),f.repository.getTrackUrl({processInstId:e,type:g.电脑端}).then(e=>{e.code==u.success&&("https:"==window.location.protocol?e.data.indexOf("http://121.40.143.183:80/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183:80/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://121.40.143.183/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://acme-aws.ddzg.cn/")>=0?this.trackUrl=e.data.replace("http://acme-aws.ddzg.cn/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://59.53.91.231:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.231:8088/","https://acme-test.ddzg.cn:2119/"):e.data.indexOf("http://59.53.91.230:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.230:8088/","https://kq.ddzg.cn:8093/"):this.trackUrl=e.data:this.trackUrl=e.data)}),f.tis.getTaskCommentList(this.processId,"").then(e=>{this.taskCommentList=e.data,this.digitalSignatureList=e.data.filter(e=>e.digitalSignature).map(e=>e.digitalSignature)}),f.pis.getProcessInstanceById(this.processId).then(e=>{this.ProcessInsObj=e.data,this.$nextTick(()=>{this.calculateHeight()})})}},immediate:!0,deep:!0},absoluteTaskId:{handler(e){},immediate:!0,deep:!0},dialogVisibleOperation:{handler(e){this.$emit("show-modal",e)}}},methods:{formatFlow:e=>(e||[]).map(e=>({...e,attachmentsFujian:(e.attachments||[]).filter(e=>"signature"!=e.type),attachmentsQianzi:(e.attachments||[]).filter(e=>"signature"==e.type)})),cancelHandlerFn(){this.dialogVisibleOperation=!1,this.submitLoading=!1},filterFlow:e=>e.filter(e=>["userTask","candidate"].includes(e.historyActivityType)),getCurrentProcess(){f.repository.queryTaskNodeList(this.processId).then(e=>{if(200==e.code){const n={};if(n.currentProcessOriginData=e.data||[],n.currentProcessOriginData.length>0){let e=n.currentProcessOriginData[0],r=(e.currentName||"").split(","),t=(e.avatar||"").split(",");r=r.map((e,n)=>({realName:e,avatar:t[n]||"",phone:"",ancestorNames:[]})),n.currentMan=r,n.currentFirstNode=e,this.currentProcess=n}}else this.currentProcess={currentProcessOriginData:[],currentMan:[],currentFirstNode:{}}}).catch(e=>{})},getProcessInfo(){this.submitLoading=!0,this.boxLoading=!0,f.tis.getTaskModelDetail(this.taskId?{processInstId:this.processId,taskId:this.taskId}:{processInstId:this.processId}).then(async e=>{if(200==e.code){this.processData={...this.initProcessData,...e.data||{}};const n=((this.processData.process||{}).variables||{}).deptId;this.deptId=n;const r=(this.processData.process||{}).taskId;this.taskObj.buttons=this.processData.button,this.absoluteTaskId=r,this.straightenBtns(),this.$nextTick(()=>{this.calculateHeight()}),this.flowChartVisible=!0,this.submitLoading=!1,this.boxLoading=!1}})},getUserDataByDeptId(){this.processList.map(async(e,n)=>{const r=ke(e);let t;try{t=await this.getNodeUser({deptId:this.deptId,intersection:r.intersection?1:0,userIds:r.userIds,postIds:r.postIds,deptIds:r.deptIds})}catch(e){}if(t.code==Enum.apiCode.success){const e=this.processList[n];e.userList=t.data,this.$set(this.processList,n,e)}})},handleDraft(){this.submitLoading=!0},handleExamine(e,n){e?this.handlePass(n):this.handleCancel(n),this.submitLoading=!0},async handlePass(e){this.operationParam.nodeLoading=!0,this.isOperationHidden=!0,this.before?this.before().then(()=>{this.showOperation(Z,e)}):this.showOperation(Z,e),this.deptId&&(await this.getNextNode(this.deptId),this.operationParam={...this.operationParam,nodeLoading:!1,incomingConditionItemList:this.incomingConditionItemList,nextTaskNode:this.nextTaskNode},this.isOperationHidden=!1)},handleCancel(e){this.showOperation(ne,e)},handleUserSelect({type:e,checkType:n,name:r}){"transfer"==e?this.handleTransfer(r):"addInstance"==e&&this.handleAddInstance(r)},handleTransfer(e){this.showOperation(V,e)},handleAddInstance(e){this.showOperation($,e)},handlePrint(){},handleRollbackTask(e){this.showOperation(se,e)},handleTerminateProcess(){},handleCirculate(e){this.showOperation(ce,e)},handleWithdrawTask(e){this.handleRevoke()},findTargetHtml(e,n,r="parentElement"){if(!e)return null;if(e.classList.contains(n))return e;let t=e[r];if(!t)return null;if("children"!=r)return this.findTargetHtml(t,n);for(let e=0;e<=t.length-1;e++)if(t[e].classList.contains(n))return t[e]},findImageIndex(e){return e?this.digitalSignatureList.findIndex(n=>n==e):-1},onCheckSure(){this.absoluteTaskId=this.mulTaskTaskId,this.mulTaskList.map(e=>{e.taskId==this.mulTaskTaskId&&(this.aftTaskNode=e)}),this.noReload=!0,this.showMulTask=!1,this.footBtnLoading=!0;let e=this.processId;this.processId="",this.processId=e},showButtonLoading(){this.buttonLoading=!0},hideButtonLoading(){this.buttonLoading=!1},calculateHeight(){let e=0;if(this.$refs.footBtnRow&&(e+=this.$refs.footBtnRow.offsetHeight),this.$refs.mianContent&&(this.mainWidth=this.$refs.mianContent.offsetWidth),this.infoView&&this.absoluteBtns.outside.length>0&&(e+=32),this.$refs.infoBoxFign){let e=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;this.tabheight=e-this.$refs.infoBoxFign.offsetTop-192}this.overheight=e+116,this.iframeHeight=this.$refs.mianContent.offsetHeight-146},getNodeList(){this.nodeInfoVisible=!0},fileNameLastof(e,n=0){if(-1==e.indexOf("http")&&(n=0),!e)return;let r="/";-1!=e.indexOf("\\")&&(r="\\");let t=e,s=t.lastIndexOf(r);return t.substr(s+1+n,t.length)},clickCustomButton(e){this.$emit("clickCustomButton",{name:e,processStatus:this.processStatus,setName:n=>{this.taskObj.buttons.map(r=>{r.label==e&&(r.label=n)}),this.straightenBtns()}})},async getNextNode(e){let n;try{n=await f.tis.simulation(this.absoluteTaskId,this.processId)}catch(e){n={}}let r=n.data||{};200!=n.code||n.data.evaluation||(this.incomingConditionItemList=[],r.branches=await this.getOutgoingProcessNode(this.absoluteTaskId,n.data.id)),r=await this.getSelectFixData(r,e),this.nextTaskNode=r},getNodeUser:async({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s})=>await f.user.getTaskAuditor({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s}),async showOperation(e,n){this.attach=[],this.operationLabel=n,this.operationParam.processInstId=this.processId,this.operationParam.taskInstId=this.absoluteTaskId,this.operationParam.nextTaskNode=this.nextTaskNode,this.operationParam.incomingConditionItemList=this.incomingConditionItemList,this.operationParam.variables=(this.processData.process||{}).variables||{},this.operationParam.extendedProperties=(this.processData.form||{}).extendedProperties||[],this.operationParam.taskObj=this.taskObj,this.operationParam.getVars=this.getVars,this.operationParam.outGatewayUserTaskModel=this.outGatewayUserTaskModel,this.operationParam.taskNode=this.getTaskNode(),this.operationParam.businessData=this.businessData,this.operationParam.showAsPlanned=this.showAsPlanned,this.operationParam.showCommIdea=this.showCommIdea,this.operationParam.commentMsgRequired=this.commentMsgRequired,this.operationParam.personType=this.personType,this.operationParam.personEntity={...this.personEntity,...this.aftClickBtn.personEntity||{}},this.operationParam.ProcessInsObj=this.ProcessInsObj,this.operationCom=e,this.dialogVisibleOperation=!0,this.$nextTick(()=>{let e=this.$refs.obRef;if(!e)return;let n=e.getBoundingClientRect().top,r=this.findTargetHtml(e,"el-dialog"),t=this.findTargetHtml(r,"el-dialog__footer","children"),s=window.innerHeight-n-n-t.clientHeight-32;this.dynamicMaxHeight=`${s}px`})},onClickOperation(){if(this.attachShow&&this.attachRule.required&&0==this.attach.length)return e.error("请上传附件");this.aftClickBtn.preposition?this.operationMain(this.aftClickBtn.preposition):this.operationMain()},operationMain(e=!1){let n;this.attachShow&&(n=[],this.attach.map(e=>{n.push({id:e.id,name:this.fileNameLastof(e.name),size:e.fileSize,format:e.fileType,url:e.url,uploadTime:e.createTime,processInstId:this.operationParam.processInstId,taskInstId:this.operationParam.taskInstId})}),n=n.sort((e,n)=>o(e.uploadTime).valueOf()>o(n.uploadTime).valueOf())),this.$refs.operationRef&&this.$refs.operationRef.confirm(e,()=>{this.isOperLoading=!0},n)},operationSuccess(n=!0){e.success("操作成功"),this.dialogVisibleOperation=!1,n&&this.$emit("Complete"),this.isOperLoading=!1},operationFail(n=""){n&&e.warning(n),this.isOperLoading=!1},async getSelectFixData(e,n){let r=JSON.parse(JSON.stringify(e));if("userTask"!=r.nodeType&&Array.isArray(r.branches))for(let e=0;e<r.branches.length;e++){let t=r.branches[e],s=t.nodeInfoDTO?t.nodeInfoDTO:t;try{s=await this.getSelectFixData(s,n)}catch(e){}t.nodeInfoDTO?t.nodeInfoDTO=s:t=s,r.branches[e]=t}else if("userTask"==r.nodeType&&!r.setPersonnel){let e,t=ke(r);try{e=await this.getNodeUser({deptId:n,intersection:t.intersection?1:0,userIds:t.userIds,postIds:t.postIds,deptIds:t.deptIds})}catch(e){}e.code==u.success&&(r.userList=e.data)}return r},async getOutgoingProcessNode(e,n){let r=await f.repository.getOutgoingProcessNode(e,n);if(r.code==u.success){if(r.data){for(let n=0;n<r.data.length;n++){let t=r.data[n];t.incomingConditionItemList&&0!==t.incomingConditionItemList.length&&(t.nodeInfoDTO.incomingConditionItemList=t.incomingConditionItemList,this.incomingConditionItemList.push(...t.incomingConditionItemList)),"userTask"!=t.nodeInfoDTO.nodeType&&(t.nodeInfoDTO.branches=await this.getOutgoingProcessNode(e,t.nodeInfoDTO.id)),"endEvent"==r.data[n].type||"固定账户"!=r.data[n].humanPerformerName&&"与流程申请人相关"!=r.data[n].humanPerformerName||await f.repository.getParticipantsOfPerformerNames(e,[r.data[n].id]).then(e=>{r.data[n].routeTxt.userNames=e.data[r.data[n].id]})}0==r.data.length&&r.data.push({id:"",incomingConditionItemList:[],type:"endEvent",name:"结束事件"})}return r.data}return[]},getColor:e=>"审核中"==e||"审批中"==e?"#6DC743":"已驳回"==e?"#F14B4C":"已撤销"==e?"#CECECE":"已完成"==e?"#6DC743":"#1389FF",handleClick(e){this.$emit("clickTab",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)))},getTaskNode(){return this.taskNode.filter?this.taskNode.filter(e=>e.nodeId==this.taskObj.id):[]},handleRevoke(){n.confirm("确定撤销吗","撤销",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{f.tis.withdrawTask(this.processData.process.processInstanceId).then(n=>{n.code==u.success&&(e.success("操作成功"),this.$emit("Complete"))})}).catch(()=>{e.info("取消操作")})},handleReminders(){n.confirm("确定催办吗","催办",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{f.tis.reminders(this.processData.process.processInstanceId).then(n=>{n.code==u.success&&(e.success("操作成功"),this.$emit("Complete"))})}).catch(n=>{e.info("取消操作")})},getButton(e){return(this.processData.button||[]).find(n=>n.buttonKey==e)},operBtn(){let e=[];const n=this.processData.process;if(!n)return e;if("todo"==n.status&&n.isMultiInstance&&this.getButton("wf_add_instance")){let n={};n.name=this.getButton("wf_add_instance").name,n.btnProps={type:"primary"},n.key="sign",n.click=()=>{this.handleUserSelect({type:"addInstance",checkType:"checkbox",name:this.getButton("wf_add_instance").name})},e.push(n)}if("todo"==n.status&&this.getButton("wf_transfer")){let n={};n.name=this.getButton("wf_transfer").name,n.key="delegate",n.click=()=>{this.handleUserSelect({type:"transfer",checkType:"radio",name:this.getButton("wf_transfer").name})},e.push(n)}if("todo"==n.status&&this.getButton("wf_delegate")){let n={};n.name=this.getButton("wf_delegate").name,n.btnProps={type:"warning"},n.key="cc2",n.click=()=>{this.handleUserSelect({type:"delegate",checkType:"radio",name:this.getButton("wf_delegate").name})},e.push(n)}if("todo"==n.status&&this.getButton("wf_terminate")){let n={};n.name=this.getButton("wf_terminate").name,n.btnProps={type:"danger"},n.key="cc3",n.click=()=>{this.handleTerminateProcess()},e.push(n)}if("todo"==n.status&&this.getButton("wf_cctask")){let n={};n.name=this.getButton("wf_cctask").name,n.btnProps={type:"primary"},n.key="cc",n.click=()=>{this.handleCirculate(this.getButton("wf_cctask").name)},e.push(n)}if("todo"==n.status&&this.userId==(n.variables||{}).applyUserId){let n={name:"催办",key:"self"};n.click=()=>{this.handleReminders()},e.push(n)}if(n.isOwner&&n.isReturnable&&!["recall","reject"].includes(n.processIsFinished)){let n={name:"撤销",btnProps:{type:"danger"},key:"self"};n.click=()=>{this.handleWithdrawTask("撤销")},e.push(n)}if("todo"==n.status&&this.getButton("wf_reject")){let n={};n.name=this.getButton("wf_reject").name,n.btnProps={type:"danger"},n.key="refuse",n.click=()=>{this.handleExamine(!1,this.getButton("wf_reject").name)},e.push(n)}if("todo"==n.status&&this.getButton("wf_pass")){let n={};n.name=this.getButton("wf_pass").name,n.btnProps={type:"primary"},n.key="complete",n.click=()=>{this.before?this.before().then(()=>{this.handleExamine(!0,this.getButton("wf_pass").name)}):this.handleExamine(!0,this.getButton("wf_pass").name)},e.push(n)}if("todo"==n.status&&this.getButton("wf_rollback")){let n={};n.name=this.getButton("wf_rollback").name,n.btnProps={type:"danger"},n.key="back",n.click=()=>{this.handleRollbackTask(this.getButton("wf_rollback").name)},e.unshift(n)}return e},straightenBtns(e=!0){let n=[];this.excludeBtn?this.operBtn().map(e=>{-1!=this.excludeBtn.indexOf(e.key)&&e.key||n.push(e)}):n=this.operBtn(),this.customBtns.length>0&&(n=[],this.customBtns.map(e=>{-1!=this.excludeBtn.indexOf(e.key)&&e.key||n.push(e)}));let r={outside:[],inside:[]};n.length>4?(r.outside=n.splice(n.length-4,n.length-1),r.inside=n):r.outside=n,e&&this.customBtn?this.customBtn({btnList:this.operBtn(),processStatus:this.processStatus,processData:this.processData,nextTaskNode:this.nextTaskNode},e=>{this.customBtns=e,this.straightenBtns(!1)},()=>{this.$emit("Complete")}):(this.absoluteBtns=r,this.$nextTick(()=>{this.calculateHeight(),this.footBtnLoading=!1,this.boxLoading=!1}))}},computed:{dynamicStyle(){return{"--dynamic-ctx-height":this.dynamicMaxHeight}},attachShow(){const e=(this.processData.form||{}).extendedProperties||[];let n,r=!1,t="";switch(this.operationLabel){case"退回":n=e.find(e=>"otherButtonAnnexList"==e.name),t=n?n.value:"",t&&(r=!0);break;case"通过":case"办理":case"处理":case"同意":n=e.find(e=>"completeButtonAnnex"==e.name),t=n?n.value:"",t&&(r=!0);break;case"拒绝":n=e.find(e=>"otherButtonAnnexList"==e.name),t=n?n.value:"";break;case"加签":n=e.find(e=>"counterSignButtonAnnex"==e.name),t=n?n.value:"",t&&(r=!0);break;case"转办":n=e.find(e=>"delegateTaskButtonAnnex"==e.name),t=n?n.value:"",t&&(r=!0)}let s="";if("string"!=typeof t&&null!=t&&t.map(e=>{-1!=e.indexOf(this.operationLabel)&&(r=!0,s=e)}),s&&(t=s),r){const e=t.split(":");this.attachRule.required="true"==e[1],this.attachRule.limit=-1==e[2]?999:e[2]}return r}}};var je=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{directives:[{name:"loading",rawName:"v-loading",value:e.boxLoading&&!e.isButton,expression:"boxLoading && !isButton"}],ref:"mianContent",staticClass:"mianContent",style:{}},[e.isButton?e._e():[r("div",{ref:"baseTabs",staticClass:"tabs"},[r("el-tabs",{staticClass:"demo-tabs",on:{"tab-click":e.handleClick},model:{value:e.activeName,callback:function(n){e.activeName=n},expression:"activeName"}},e._l(e.tabs,function(n,t){return r("el-tab-pane",{key:t,class:["pane-"+n.name],attrs:{label:n.name,name:n.slot||n.name,item:n}},["基本信息"!=n.name||n.slot?"流程图"!=n.name||n.slot?"审批记录"!=n.name||n.slot?[r("div",{style:"min-height: "+e.tabheight+"px;"},[n.slot?e._t(n.slot,null,{taskNode:e.getTaskNode(),processData:e.processData,currentProcess:e.currentProcess}):e._t("default",null,{taskNode:e.getTaskNode(),processData:e.processData,currentProcess:e.currentProcess})],2)]:["审批记录"==e.activeName&&e.processData.flow?r("processFlow",{attrs:{"flow-list":e.formatFlow(e.processData.flow)}}):r("div",{staticStyle:{height:"100px",display:"flex","align-items":"center","justify-content":"center"}},[e._v("\n 暂无数据\n ")])]:[r("div",{staticClass:"view-node-info",on:{click:e.getNodeList}},[e._v("\n 查看流程节点信息\n ")]),e._v(" "),e.trackUrl?r("iframe",{key:e.processId,staticStyle:{width:"100%",height:"100%",border:"none"},style:{height:e.iframeHeight+"px"},attrs:{src:e.trackUrl,scrolling:"no",frameborder:"0"}}):e._e(),e._v(" "),"流程图"==e.activeName&&e.processData.process&&e.processData.process.xml?r("bpmnLook",{attrs:{approvalData:e.processData.flow,diagram:e.processData.process.xml}}):r("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"center"}},[e._v("\n 暂无流程图\n ")])]:[r("div",{style:"min-height: "+e.tabheight+"px;"},[e._t("default",null,{taskNode:e.getTaskNode(),processData:e.processData,currentProcess:e.currentProcess})],2)]],2)}),1)],1)],e._v(" "),e.isAdditional&&e.absoluteBtns.outside.length>0?r("div",{ref:"footBtnRow",staticClass:"footBtnRow foot-item",style:{width:e.mainWidth+"px"}},[e._t("btn",null,null,e.processStatus)],2):e.showBtns?!e.ProcessInsObj.end&&e.absoluteBtns.outside.length>0&&"com.awspaas.user.apps.root"!=e.processStatus.appId||e.customBtns.length>0?r("div",{directives:[{name:"loading",rawName:"v-loading",value:e.footBtnLoading,expression:"footBtnLoading"}],ref:"footBtnRow",staticClass:"footBtnRow foot-item",style:{width:e.mainWidth+"px"}},[("todo"==e.processData.process.status||e.customBtns.length>0)&&e.absoluteBtns.outside.length>0?[e.absoluteBtns.inside.length>0?r("el-dropdown",{attrs:{placement:"top-start",trigger:"click"}},[r("el-button",{staticStyle:{"margin-right":"10px"},attrs:{size:"small"}},[e._v(" 更多 ")]),e._v(" "),r("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},e._l(e.absoluteBtns.inside,function(n,t){return r("el-dropdown-item",{key:n.name+t,nativeOn:{click:function(r){return function(){n.click(),e.aftClickBtn=n}.apply(null,arguments)}}},[r("el-button",{staticClass:"btn drop-btn",attrs:{type:"text",size:"mini",icon:n.icon,loading:e.buttonLoading}},[e._v("\n "+e._s(n.name)+"\n ")])],1)}),1)],1):e._e(),e._v(" "),e._l(e.absoluteBtns.outside,function(n){return r("el-button",e._b({key:n.name,attrs:{size:"small",loading:e.buttonLoading},on:{click:function(){n.click(),e.aftClickBtn=n}}},"el-button",n.btnProps,!1),[e._v("\n "+e._s(n.name)+"\n ")])})]:e._e(),e._v(" "),e._t("btnAppend")],2):e._e():r("div"),e._v(" "),r("div",{staticClass:"dialog"},[r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],staticClass:"dialog",style:e.dynamicStyle,attrs:{visible:e.dialogVisibleOperation,"append-to-body":"",width:"600px",title:e.operationLabel,"close-on-click-modal":!1,"show-close":!e.isOperLoading,"before-close":e.cancelHandlerFn,top:"6vh"},on:{"update:visible":function(n){e.dialogVisibleOperation=n}},scopedSlots:e._u([{key:"footer",fn:function(){return[r("el-button",{directives:[{name:"loading",rawName:"v-loading"}],attrs:{type:"primary",loading:e.isOperLoading,disabled:e.isOperationHidden},on:{click:e.onClickOperation}},[e._v("确 定")]),e._v(" "),r("el-button",{directives:[{name:"loading",rawName:"v-loading"}],attrs:{loading:e.isOperLoading,disabled:e.isOperationHidden},on:{click:e.cancelHandlerFn}},[e._v("取 消")])]},proxy:!0}])},[r("div",{ref:"obRef",staticClass:"operation-box"},[e.dialogVisibleOperation?r(e.operationCom,{ref:"operationRef",tag:"component",attrs:{param:e.operationParam,isOperLoading:e.isOperLoading},on:{success:e.operationSuccess,fail:e.operationFail},scopedSlots:e._u([{key:"form",fn:function(){return[e.aftClickBtn.slot?e._t(e.aftClickBtn.slot):e._e()]},proxy:!0},{key:"file",fn:function(){return[e.attachShow?r("el-form",{attrs:{"label-width":"120px","status-icon":"",rules:e.rules},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"附件",prop:e.attachRule.required?"attach":""}},[r("jyr-file-upload",{ref:"fileUpload",attrs:{multiple:e.attachRule.limit>0,limit:e.attachRule.limit,fullFileObject:"",showFileName:""},model:{value:e.attach,callback:function(n){e.attach=n},expression:"attach"}})],1)],1):e._e()]},proxy:!0}],null,!0)}):e._e()],1)]),e._v(" "),r("el-dialog",{attrs:{title:"选择处理任务",visible:e.showMulTask,"append-to-body":"","close-on-click-modal":!1,width:"500px","show-close":!1},on:{"update:visible":function(n){e.showMulTask=n}}},[r("el-form",{ref:"form",staticClass:"task",attrs:{"label-width":"100px"}},[r("el-form-item",{attrs:{label:"请选择:",prop:"content"}},[r("el-radio-group",{attrs:{size:"small"},model:{value:e.mulTaskTaskId,callback:function(n){e.mulTaskTaskId=n},expression:"mulTaskTaskId"}},e._l(e.mulTaskList,function(n){return r("el-radio",{key:n.nodeId,attrs:{label:n.taskId,border:""}},[e._v(e._s(n.nodeName))])}),1)],1)],1),e._v(" "),r("div",{staticClass:"dialog-footer"},[r("el-button",{attrs:{type:"primary"},on:{click:e.onCheckSure}},[e._v("确定")])],1)],1),e._v(" "),r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],attrs:{visible:e.nodeInfoVisible,"append-to-body":"",width:"600px",title:"流程节点信息",modal:!1,"close-on-click-modal":!1},on:{"update:visible":function(n){e.nodeInfoVisible=n}}},[r("el-table",{attrs:{data:e.filterFlow(e.processData.flow),border:""}},[r("el-table-column",{attrs:{label:"序号",type:"index",width:"120px"}}),e._v(" "),r("el-table-column",{attrs:{prop:"historyActivityName",label:"节点名称"}}),e._v(" "),r("el-table-column",{attrs:{prop:"assigneeName",label:"审批人"}})],1)],1)],1)],2)};je._withStripped=!0;const Le=I({render:je,staticRenderFns:[]},function(e){e&&e("data-v-621659f2_0",{source:'@charset "UTF-8";\n.operation-box[data-v-621659f2] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-621659f2] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-621659f2] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-621659f2] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-621659f2]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-621659f2] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-621659f2] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-621659f2] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-621659f2] {\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-621659f2] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-621659f2] {\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-621659f2] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-621659f2] {\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-621659f2]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-621659f2]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-621659f2] {\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-621659f2] {\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-621659f2] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-621659f2] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-621659f2] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-621659f2] {\n z-index: 1001;\n width: 100%;\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n.mianContent .footBtnRow .el-button[data-v-621659f2] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-621659f2] {\n width: 90%;\n}\n.dialog[data-v-621659f2] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-621659f2] .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-621659f2] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-621659f2] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-621659f2] :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-621659f2] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-621659f2] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-621659f2] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-621659f2] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-621659f2] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-621659f2] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-621659f2] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-621659f2] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-621659f2] {\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;AC8vDhB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;AD5vDA;AC8vDA;EACA,gBAAA;EACA,gCAAA;AD3vDA;AC4vDA;EACA,sBAAA;AD1vDA;AC6vDA;EACA,yBAAA;AD3vDA;AC8vDA;EACA,uBAAA;AD5vDA;AC+vDA;EACA,oBAAA;AD5vDA;ACiwDA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;AD9vDA;ACowDA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;ADjwDA;ACmwDA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;ADnwDA;ACqwDA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;ADpwDA;ACqwDA;EACA,OAAA;EACA,SAAA;ADnwDA;ACowDA;EACA,QAAA;ADlwDA;ACqwDA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;ADnwDA;ACqwDA;EACA,SAAA;EACA,OAAA;ADnwDA;AC0wDA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;ADxwDA;AC2wDA;EACA,gBAAA;EACA,kCAAA;ADxwDA;AC2wDA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;ADxwDA;AC2wDA;EACA,cAAA;ADxwDA;AC2wDA;EACA,cAAA;EACA,kBAAA;ADxwDA;AC2wDA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;ADxwDA;AC2wDA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;ADxwDA;AC2wDA;EACA,eAAA;ADxwDA;ACgxDA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;AD7wDA;ACoxDA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;ADjxDA;ACoxDA;EAaA,aAAA;EAEA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;AD9xDA;AC+xDA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;AD7xDA;ACszDA;EACA,UAAA;ADnzDA;ACszDA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;ADnzDA;ACszDA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;ADnzDA;ACszDA;EACA,aAAA;EACA,kBAAA;ADnzDA;ACszDA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ADnzDA;ACuzDA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;ADpzDA;ACwzDA;EACA,kBAAA;ADrzDA;ACuzDA;EACA,wBAAA;EACA,kBAAA;ADrzDA;ACuzDA;EACA,SAAA;EACA,WAAA;ADrzDA;ACwzDA;EACA,cAAA;EACA,eAAA;ADrzDA;ACuzDA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ADpzDA;ACszDA;EACA,eAAA;EACA,wBAAA;ADnzDA;ACszDA;EACA,cAAA;ADnzDA;ACqzDA;EACA,gBAAA;ADnzDA;ACszDA;EACA,WAAA;EACA,YAAA;ADnzDA;;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 z-index: 1001;\n width: 100%;\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\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()" :processData="processData" :currentProcess="currentProcess"></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 \x3c!-- 展示条件需要同时满足v-if --\x3e\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="formatFlow(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 :processData="processData"\r\n :currentProcess="currentProcess"\r\n ></slot>\r\n <slot v-else name="default" :taskNode="getTaskNode()" :processData="processData" :currentProcess="currentProcess"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n \x3c!-- <el-tab-pane label="流程图" name="2" style="height: 100%">\r\n </el-tab-pane> --\x3e\r\n \x3c!-- <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> --\x3e\r\n </el-tabs>\r\n </div>\r\n </template>\r\n \x3c!-- 底部按钮 --\x3e\r\n \x3c!-- <processBtns\r\n :loading="submitLoading"\r\n :button-list="processData.button"\r\n :userId="userId"\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 @circulate="handleCirculate"\r\n ></processBtns> --\x3e\r\n\r\n <div\r\n class="footBtnRow foot-item"\r\n :style="{ width: mainWidth + \'px\' }"\r\n ref="footBtnRow"\r\n v-if="isAdditional && absoluteBtns.outside.length > 0"\r\n >\r\n <slot name="btn" v-bind="processStatus"></slot>\r\n </div>\r\n <div v-else-if="!showBtns"></div>\r\n <div\r\n class="footBtnRow foot-item"\r\n ref="footBtnRow"\r\n :style="{ width: mainWidth + \'px\' }"\r\n v-else-if="\r\n (!ProcessInsObj.end &&\r\n absoluteBtns.outside.length > 0 &&\r\n processStatus.appId != \'com.awspaas.user.apps.root\') ||\r\n customBtns.length > 0\r\n "\r\n v-loading="footBtnLoading"\r\n >\r\n \x3c!-- <slot name="btn"> --\x3e\r\n <template\r\n v-if="\r\n (processData.process.status == \'todo\' || customBtns.length > 0) &&\r\n absoluteBtns.outside.length > 0\r\n "\r\n >\r\n <el-dropdown\r\n placement="top-start"\r\n trigger="click"\r\n v-if="absoluteBtns.inside.length > 0"\r\n >\r\n <el-button size="small" style="margin-right: 10px"> 更多 </el-button>\r\n <el-dropdown-menu slot="dropdown">\r\n <el-dropdown-item\r\n v-for="(item, index) in absoluteBtns.inside"\r\n :key="item.name + index"\r\n @click.native="\r\n () => {\r\n item.click();\r\n aftClickBtn = item;\r\n }\r\n "\r\n >\r\n <el-button\r\n class="btn drop-btn"\r\n type="text"\r\n size="mini"\r\n :icon="item.icon"\r\n :loading="buttonLoading"\r\n >\r\n {{ item.name }}\r\n </el-button>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-button\r\n v-for="item in absoluteBtns.outside"\r\n :key="item.name"\r\n v-bind="item.btnProps"\r\n @click="\r\n () => {\r\n item.click();\r\n aftClickBtn = item;\r\n }\r\n "\r\n size="small"\r\n :loading="buttonLoading"\r\n >\r\n {{ item.name }}\r\n </el-button>\r\n </template>\r\n \x3c!-- </slot> --\x3e\r\n <slot name="btnAppend"></slot>\r\n </div>\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 :before-close="cancelHandlerFn"\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 :disabled="isOperationHidden"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click="cancelHandlerFn"\r\n :loading="isOperLoading"\r\n :disabled="isOperationHidden"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n \x3c!-- 选择任务 --\x3e\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 \x3c!-- <el-table-column prop="type" label="类型"></el-table-column> --\x3e\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 incomingConditionItemList: [],\r\n // 流程信息\r\n deptId: \'\',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n currentProcess: {\r\n currentProcessOriginData: [],\r\n currentMan: [],\r\n currentFirstNode: {},\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 isOperationHidden: 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 // 获取当前流程节点\r\n this.getCurrentProcess()\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 formatFlow(flow) {\r\n const newFlow = (flow || []).map(item => {\r\n return {\r\n ...item,\r\n attachmentsFujian: (item.attachments || []).filter(i => i.type != \'signature\'),\r\n attachmentsQianzi: (item.attachments || []).filter(i => i.type == \'signature\'),\r\n }\r\n })\r\n return newFlow\r\n },\r\n cancelHandlerFn(){\r\n this.dialogVisibleOperation = false\r\n this.submitLoading = false\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 getCurrentProcess() {\r\n api.repository.queryTaskNodeList(this.processId).then(res => {\r\n console.log(res, \'res\')\r\n if (res.code == 200) {\r\n const currentProcessObj = {}\r\n currentProcessObj.currentProcessOriginData = res.data || []\r\n\r\n if (currentProcessObj.currentProcessOriginData.length > 0) {\r\n let currentFirstNode = currentProcessObj.currentProcessOriginData[0]\r\n let currentMan = (currentFirstNode.currentName || \'\').split(\',\')\r\n let currentManAvatar = (currentFirstNode.avatar || \'\').split(\',\')\r\n currentMan = currentMan.map((name, index) => {\r\n return {\r\n realName: name,\r\n avatar: currentManAvatar[index] || \'\',\r\n phone: \'\',\r\n ancestorNames: [],\r\n }\r\n })\r\n currentProcessObj.currentMan = currentMan\r\n currentProcessObj.currentFirstNode = currentFirstNode\r\n this.currentProcess = currentProcessObj\r\n }\r\n } else {\r\n this.currentProcess = {\r\n currentProcessOriginData: [],\r\n currentMan: [],\r\n currentFirstNode: {},\r\n }\r\n }\r\n }).catch(e => {\r\n console.error(e, \'getCurrentProcess\')\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 processInstId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInstId: 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.taskObj.buttons = this.processData.button\r\n this.absoluteTaskId = taskId\r\n this.straightenBtns();\r\n console.log(deptId, \'id\')\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\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 this.operationParam.nodeLoading = true\r\n this.isOperationHidden = true;\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 if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n this.operationParam = {\r\n ...this.operationParam,\r\n nodeLoading: false,\r\n incomingConditionItemList: this.incomingConditionItemList,\r\n nextTaskNode: this.nextTaskNode,\r\n }\r\n this.isOperationHidden = false;\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 handleCirculate(name) {\r\n console.log(\'handleCirculate\')\r\n this.showOperation(operation.ccTask, name);\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 let nextTaskNode = res1.data || {};\r\n\r\n // 复杂网关分支:\r\n if (res1.code == 200 && !res1.data.evaluation) {\r\n this.incomingConditionItemList = []\r\n nextTaskNode.branches = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n res1.data.id\r\n );\r\n }\r\n\r\n // 获取选择框选人的数据\r\n nextTaskNode = await this.getSelectFixData(nextTaskNode, deptId)\r\n console.log(nextTaskNode, \'res需要传入部门idend\')\r\n\r\n // if (nextTaskNode.id && !nextTaskNode.setPersonnel && nextTaskNode.type == "userTask") {\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.incomingConditionItemList = this.incomingConditionItemList\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.extendedProperties = (this.processData.form || {}).extendedProperties || []\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 let saveMetaAnnexCmdList\r\n if (this.attachShow) {\r\n 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 }, saveMetaAnnexCmdList);\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 getSelectFixData (nextDataO, deptId) {\r\n let nextData = JSON.parse(JSON.stringify(nextDataO))\r\n console.log(nextData, deptId, \'getSelectFixData\')\r\n if (nextData.nodeType != \'userTask\' && Array.isArray(nextData.branches)) {\r\n for (let i = 0; i < nextData.branches.length; i++) {\r\n let firstLv = nextData.branches[i]\r\n let firstLvNode = firstLv.nodeInfoDTO ? firstLv.nodeInfoDTO : firstLv;\r\n try {\r\n let firstLvNodeT = await this.getSelectFixData(firstLvNode, deptId)\r\n firstLvNode = firstLvNodeT\r\n } catch (error) {\r\n console.log(error, \'getSelectFixData error\')\r\n }\r\n if (firstLv.nodeInfoDTO) {\r\n firstLv.nodeInfoDTO = firstLvNode\r\n } else {\r\n firstLv = firstLvNode\r\n }\r\n nextData.branches[i] = firstLv\r\n }\r\n }\r\n else if (nextData.nodeType == \'userTask\' && !nextData.setPersonnel ) {\r\n let nodeUserParams = getNodeUserParams(nextData)\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 console.log(res, \'res需要传入部门id\', res.code == $enum.apiCode.success)\r\n } catch (error) {\r\n console.log(error, \'error\')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextData.userList = res.data\r\n }\r\n }\r\n return nextData\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.incomingConditionItemList && o.incomingConditionItemList.length !== 0) {\r\n o.nodeInfoDTO.incomingConditionItemList = o.incomingConditionItemList\r\n console.log(o.incomingConditionItemList, \'o.incomingConditionItemList\')\r\n this.incomingConditionItemList.push(...o.incomingConditionItemList)\r\n }\r\n if (o.nodeInfoDTO.nodeType != \'userTask\') {\r\n o.nodeInfoDTO.branches = await this.getOutgoingProcessNode(taskId, o.nodeInfoDTO.id);\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.processData.process.processInstanceId)\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 getButton(key) {\r\n return (this.processData.button || []).find(b => b.buttonKey == key);\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n\r\n const process = this.processData.process;\r\n\r\n if (!process) {\r\n return btnList\r\n }\r\n\r\n // 加签\r\n if (process.status == \'todo\' && process.isMultiInstance && this.getButton(\'wf_add_instance\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_add_instance\').name\r\n obj.btnProps = { type: "primary" };\r\n obj.key = "sign";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: \'addInstance\',\r\n checkType: \'checkbox\',\r\n name: this.getButton(\'wf_add_instance\').name,\r\n })\r\n };\r\n btnList.push(obj);\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 // 转办\r\n if (process.status == \'todo\' && this.getButton(\'wf_transfer\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_transfer\').name\r\n obj.key = "delegate";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: \'transfer\',\r\n checkType: \'radio\',\r\n name: this.getButton(\'wf_transfer\').name,\r\n })\r\n };\r\n btnList.push(obj);\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 // 委托\r\n if (process.status == \'todo\' && this.getButton(\'wf_delegate\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_delegate\').name\r\n obj.btnProps = { type: "warning" };\r\n obj.key = "cc2";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: \'delegate\',\r\n checkType: \'radio\',\r\n name: this.getButton(\'wf_delegate\').name\r\n })\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // 终止\r\n if (process.status == \'todo\' && this.getButton(\'wf_terminate\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_terminate\').name\r\n obj.btnProps = { type: "danger" };\r\n obj.key = "cc3";\r\n obj.click = () => {\r\n this.handleTerminateProcess()\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // 传阅\r\n if (process.status == \'todo\' && this.getButton(\'wf_cctask\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_cctask\').name\r\n obj.btnProps = { type: "primary" };\r\n obj.key = "cc";\r\n obj.click = () => {\r\n this.handleCirculate(this.getButton(\'wf_cctask\').name)\r\n };\r\n btnList.push(obj);\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 // 催办\r\n if (process.status == \'todo\' && this.userId == (process.variables || {}).applyUserId) {\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 // 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 // 撤销\r\n if (\r\n process.isOwner &&\r\n process.isReturnable &&\r\n ![\'recall\', \'reject\'].includes(process.processIsFinished)\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.handleWithdrawTask(\'撤销\');\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\r\n // 拒绝\r\n if (\r\n process.status == \'todo\' &&\r\n this.getButton(\'wf_reject\')\r\n ) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_reject\').name\r\n obj.btnProps = { type: "danger" };\r\n obj.key = "refuse";\r\n obj.click = () => {\r\n this.handleExamine(false, this.getButton(\'wf_reject\').name)\r\n };\r\n btnList.push(obj);\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 // 办理\r\n if (process.status == \'todo\' && this.getButton(\'wf_pass\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_pass\').name\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.handleExamine(true, this.getButton(\'wf_pass\').name)\r\n });\r\n } else {\r\n this.handleExamine(true, this.getButton(\'wf_pass\').name)\r\n }\r\n };\r\n btnList.push(obj);\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 // 退回\r\n if (\r\n process.status == \'todo\' &&\r\n this.getButton(\'wf_rollback\')\r\n ) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_rollback\').name\r\n obj.btnProps = { type: "danger" };\r\n obj.key = "back";\r\n obj.click = () => {\r\n this.handleRollbackTask(this.getButton(\'wf_rollback\').name)\r\n };\r\n // 退回可能还有种情况,就是自定义this.clickCustomButton(obj.name);\r\n\r\n btnList.unshift(obj);\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, processData: this.processData, nextTaskNode: this.nextTaskNode },\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 const extendedProperties = (this.processData.form || {}).extendedProperties || []\r\n\r\n let sign = false;\r\n let fd;\r\n let annex = "";\r\n console.log(this.operationLabel, \'operationLabel\')\r\n switch (this.operationLabel) {\r\n case "退回":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'otherButtonAnnexList\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "通过":\r\n case "办理":\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'completeButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "处理":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'completeButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "同意":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'completeButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "拒绝":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'otherButtonAnnexList\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n break;\r\n case "加签":\r\n // annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'counterSignButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "转办":\r\n // annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'delegateTaskButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\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 const annexArr = annex.split(":");\r\n this.attachRule.required = annexArr[1] == "true" ? true : false;\r\n this.attachRule.limit =\r\n annexArr[2] == -1 ? 999 : annexArr[2];\r\n }\r\n return sign;\r\n },\r\n },\r\n};\r\n<\/script>\r\n\x3c!-- <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> --\x3e\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\r\n width: 100%;\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\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// .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:void 0})},Oe,"data-v-621659f2",false,undefined,!1,k,void 0,void 0);const Ee={props:{attr:{},visible:{type:Boolean,default:!1},title:{type:String,default:"流程详情"},size:{type:String,default:"50%"}},data:()=>({}),mounted(){},methods:{}};var _e=function(){var e=this,n=e.$createElement;return(e._self._c||n)("el-drawer",e._b({attrs:{"custom-class":"zh-drawer-class","append-to-body":"",size:e.size,title:e.title,visible:e.visible},on:{"update:visible":function(n){e.visible=n}}},"el-drawer",e.attr,!1))};_e._withStripped=!0;const Pe=I({render:_e,staticRenderFns:[]},function(e){e&&e("data-v-debae0c8_0",{source:"\n\n/*# sourceMappingURL=drawer.vue.map */",map:{version:3,sources:["drawer.vue"],names:[],mappings:";;AAEA,qCAAqC",file:"drawer.vue"},media:void 0})},Ee,undefined,false,undefined,!1,k,void 0,void 0);var Be=Object.freeze({__proto__:null,default:Pe});const Me={name:"selectDept",components:{TreeSelect:r&&r.default?r.default:r},props:{deptId:{type:String,default:""},ops:{type:Array,default:()=>[]}},data:()=>({}),mounted(){},computed:{deptSelf:{set(e){},get(){return this.deptId||null}},opsSelf:{set(e){},get(){return this.ops}}},watch:{ops:{handler(e){},deep:!0}},methods:{handleChangeFee(e){this.deptSelf=e.id,this.$emit("input",e.id),this.$emit("change",{name:"project",deptSelf:e.id,projectName:e.label})},normalizer:e=>({id:e.id,label:e.label,children:e.children})}};var $e=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("tree-select",{attrs:{options:e.opsSelf,normalizer:e.normalizer,placeholder:"请选择",noOptionsText:"暂无数据",noResultsText:"暂无数据",appendToBody:"",zIndex:3e3},on:{select:e.handleChangeFee},model:{value:e.deptSelf,callback:function(n){e.deptSelf=n},expression:"deptSelf"}})],1)};$e._withStripped=!0;const Fe={components:{userTask:W,bpmnLook:Ne,selectDept:I({render:$e,staticRenderFns:[]},function(e){e&&e("data-v-57f8eef9_0",{source:"\n\n/*# sourceMappingURL=selectDept.vue.map */",map:{version:3,sources:["selectDept.vue"],names:[],mappings:";;AAEA,yCAAyC",file:"selectDept.vue"},media:void 0})},Me,"data-v-57f8eef9",false,undefined,!1,k,void 0,void 0)},props:{extraReqParams:{type:Object,default:function(){return{}}},other:{default:!0},personType:"",personEntity:{type:Object,default:()=>{}},beforeFunction:{type:Function,default:null},showFlowForecast:{default:!1,type:Boolean},flowForecastFunction:{type:Function,default:null}},data:()=>({revivalVars:{},processData:{},absoluteTaskId:"",userTaskListData:{},flag:!1,revival:!1,flowChartVisible:!1,flowForecastVisible:!1,flowForecastData:{completeTime:"",processBudgetModelList:[]},flowForecastProcessInstId:"",btnLoading:!1,processList:[],processDefId:"",processInstId:"",processDefName:"",businessId:"",trackUrl:"",processDefList:[],otherProcessList:[],callback:{},cancelCallBack:{},_multiNodeParticipant:[],_businessDeptId:"",businessCode:"",_vars:{},_appId:"",deptList:[],userInfo:{},hasDeptId:!1,deptId:"",subjectId:"",processXml:""}),provide(){return{getUserInfo:this.getUserInfo}},methods:{getUserInfo(){return{deptId:this.deptId,subjectId:this.subjectId}},handleDeptChange(e){this.deptId=e,this.getUserDataByDeptId()},complete(e){},setLoading(e){this.btnLoading=e},async getXml(e){let n={},r="";try{n=await f.repository.getXmlByProcessDefId({processDefId:e}),200==n.code&&(r=n.data)}catch(e){}return r},async viewFlowChart(){this.flowChartVisible=!0,this.processXml=await this.getXml(this.processDefId),Date.now()||f.repository.getDiagramUrl({processDefId:this.processDefId,diagramType:1,type:g.电脑端}).then(e=>{e.data.url="http://localhost:2888/saber/#/flowPreview",this.trackUrl=this.getNewUrl(e.data.url,{...e.data}),Date.now()?this.flowChartVisible=!0:e.code==u.success&&("https:"==window.location.protocol?e.data.indexOf("http://121.40.143.183:80/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183:80/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://121.40.143.183/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://acme-aws.ddzg.cn/")>=0?this.trackUrl=e.data.replace("http://acme-aws.ddzg.cn/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://59.53.91.231:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.231:8088/","https://acme-test.ddzg.cn:2119/"):e.data.indexOf("http://59.53.91.230:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.230:8088/","https://kq.ddzg.cn:8093/"):this.trackUrl=e.data:this.trackUrl=e.data,this.flowChartVisible=!0)})},isSameDomain:e=>-1!=e.indexOf(window.location.host),getNewUrl(e,n){let r="";for(let e in n)r+=`${e}=${n[e]}&`;if(!this.isSameDomain(e)){r+=`token=${localStorage.getItem("token")}&`}return r=r.slice(0,-1),`${e}?${r}`},viewFlowForecast(){this.flowForecastFunction?this.flowForecastFunction():this.forecast({appId:this._appId,title:"1"})},forecast(n){return this.btnLoading=!0,new Promise((r,t)=>{f.pis.getProcessForecast({processDefId:this.processDefId,...n}).then(n=>{this.btnLoading=!1,n.code==u.success?(n.data&&n.data.processBudgetModelList&&n.data.processBudgetModelList.length?this.flowForecastProcessInstId=n.data.processBudgetModelList[0].processInstId:(n.data.processBudgetModelList=[],this.flowForecastProcessInstId=""),this.flowForecastData=n.data,this.flowForecastVisible=!0,r(n)):e.error(n.msg)}).catch(n=>{this.btnLoading=!1,e.error("流程预测失败,请重试"),t(n)})})},flowForecastClose(){this.flowForecastProcessInstId?f.pis.deleteProcessById(this.flowForecastProcessInstId).then(e=>{e.code==u.success&&(this.flowForecastVisible=!1,this.flowForecastData={completeTime:"",processBudgetModelList:[]},this.flowForecastProcessInstId="")}):(this.flowForecastVisible=!1,this.flowForecastData={completeTime:"",processBudgetModelList:[]})},processDefChange(e){this.processDefId=e,f.repository.getFirstProcessNode(this.processDefId).then(async e=>{if(e.code==u.success){if(this.processList=e.data,this.flag=!0,await this.getNodeUserDept(),!this.deptId)return;this.getUserDataByDeptId()}})},setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},isOption:e=>"任意指定"==e||"固定部门"==e||"固定单位"==e||"固定群组"==e,createAndStart(n){return this.btnLoading=!0,new Promise((r,t)=>{f.pis.createAndStart({processDefId:this.processDefId,multiNodeParticipant:this._multiNodeParticipant,firstNodeId:this.processList&&this.processList.length>0?this.processList[0].id:"",vars:{showType:"all",subjectId:this.subjectId,deptId:this.deptId,businessType:this.businessCode,...n,...this._vars}}).then(n=>{this.btnLoading=!1,n.code==u.success?(this.flag=!1,r(n)):e.error(n.msg)}).catch(n=>{this.btnLoading=!1,e.error("流程启动失败,请重试"),t(n)})})},revivalFlow(n={},r=!1,t="流程复活"){return this.btnLoading=!0,new Promise((s,i)=>{const a={...this.revivalVars,showType:"all",subjectId:this.subjectId,deptId:this.deptId,businessType:this.businessCode,...n,...this._vars};Object.keys(a).forEach(e=>{const n=e.toLowerCase();n.includes("_")&&delete a[e],"appShow"==n&&delete a[e]}),f.pis.reactivate({reactivate:!0,processDefId:this.processDefId,processInstId:this.processInstId,isClearHistory:this.isClearHistory,multiNodeParticipant:this._multiNodeParticipant,firstNodeId:this.processList&&this.processList.length>0?this.processList[0].id:"",vars:a},"",this.businessId,t,"",r,this._multiNodeParticipant,this.extraReqParams).then(n=>{this.btnLoading=!1,n.code==u.success?(this.flag=!1,s(n)):e.error(n.msg)}).catch(n=>{this.btnLoading=!1,e.error("流程复活失败,请重试"),i(n)})})},Show(e,n="",r=!1){return this.processList=[],this.revival=r,this.processDefId=e,n&&f.repository.getProcessDefList(n,"").then(n=>{n.code==u.success&&n.data.map(n=>{n.id==e&&(this.processDefName=n.name)})}),new Promise((n,r)=>{this.cancelCallBack=r,f.repository.getFirstProcessNode(e).then(async e=>{if(e.code==u.success){if(this.processList=e.data,this.flag=!0,await this.getNodeUserDept(),!this.deptId)return;this.getUserDataByDeptId(),this.callback=n}})})},selectShow(e={appId:"",businessCode:"",businessType:"",keyWord:"",businessDeptId:"",userInfo:{},processGroupName:""}){return this.processList=[],this.otherProcessList=[],this.processDefId="",this.processDefName="",this.revival=!1,this._appId=e.appId,this._businessDeptId=e.businessDeptId,this.businessCode=e.businessCode||e.businessType,this.userInfo=e.userInfo,this.deptId=e.userInfo.deptId,this.subjectId=e.userInfo.subjectId,this.hasDeptId=!!e.userInfo.deptId,new Promise((n,r)=>{this.cancelCallBack=r,f.repository.getProcessDefListNew(e).then(r=>{r.code==u.success&&(1==r.data.length?(this.processDefList=r.data,this.processDefId=r.data[0].id,this.processDefName=r.data[0].name,f.repository.getFirstProcessNode(this.processDefId).then(async e=>{if(e.code==u.success){if(this.processList=e.data,this.flag=!0,this.callback=n,await this.getNodeUserDept(),!this.deptId)return;this.getUserDataByDeptId()}})):(this.processList=[],this.otherProcessList=[],this.processDefId="",this.processDefName="",this.processDefList=r.data,e.keyWord&&this.processDefList.map(n=>{-1==n.name.indexOf(e.keyWord)||this.processDefId||(this.processDefId=n.id,this.processDefName=n.name,this.processDefChange(n.id))}),this.flag=!0,this.callback=n))})})},handleRouteTxt(e){e.assigneeRetain},getUserDataByDeptId(){this.processList.map(async(e,n)=>{const r=ke(e);let t;try{t=await this.getNodeUser({deptId:this.deptId,intersection:r.intersection?1:0,userIds:r.userIds,postIds:r.postIds,deptIds:r.deptIds})}catch(e){}if(t.code==u.success){const e=this.processList[n];e.userList=t.data,this.$set(this.processList,n,e)}})},getNodeUser:async({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s})=>await f.user.getTaskAuditor({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s}),async getNodeUserDept(){let e={};try{e=await f.user.getSelectTree()}catch(e){}this.deptList=e.data||[]},listShow(e){return this.processList=[],this.otherProcessList=[],this.processDefId="",this.processDefName="",this.revival=!1,new Promise((n,r)=>{1==e.length?(this.processDefId=e[0].id,this.processDefName=e[0].name,this.cancelCallBack=r,f.repository.getFirstProcessNode(this.processDefId).then(e=>{e.code==u.success&&(this.processList=e.data,this.flag=!0,this.callback=n,f.repository.getAfferentParticipantNodeList(this.processDefId).then(e=>{this.otherProcessList=e.data.filter(e=>e.id!=this.processList[0].id),this.otherProcessList.map(e=>{e.REQUIRED=!1})}))})):(this.processDefList=e,this.flag=!0,this.callback=n)})},async getProcessInfo({taskId:e,processInstId:n}){let r={};try{r=await f.tis.getTaskModelDetail(e?{processInstId:n,taskId:e}:{processInstId:n})}catch(e){r={}}return r.code,r},async revivalShow({processInstId:e,businessId:n,taskId:r,deptId:t}){this.processInstId=e,this.hasDeptId=!!t;let s=await this.getProcessInfo({taskId:r,processInstId:e});if(200==s.code){this.processData={...this.initProcessData,...s.data||{}};const e=((this.processData.process||{}).variables||{}).deptId;this.deptId=e,this._businessDeptId=e,this.hasDeptId=!!e;const r=(this.processData.process||{}).taskId;return this.absoluteTaskId=r,this.revival=!0,this.businessId=n,this.subjectId=s.data.process.variables.subjectId,this.businessCode=s.data.process.variables.businessType,this.revivalVars=s.data.process.variables,this.processDefId=s.data.process.processDefinitionId,this.processDefName=s.data.process.processDefinitionName,this.processDefList=[],this.Show(s.data.process.processDefinitionId,"",!0)}},onClickOperation(){if(!this.processDefId||""==this.processDefId)return e.warning("请选择流程"),!1;let n={},r={};for(let e in this.userTaskListData){let t=this.userTaskListData[e],s=this.$refs[t][0],i=s?s.getValue():{multiNodeParticipant:[],vars:{}};if(!i)return!1;n={...n,...i.multiNodeParticipant},r={...r,...i.vars}}this._multiNodeParticipant=n,this._vars=r,this.beforeFunction?this.beforeFunction():this.callback&&this.callback(this.revival?this.revivalFlow:this.createAndStart)},onClickCancel(){this.flag=!1,this.btnLoading=!1,this.cancelCallBack&&this.cancelCallBack()}}};var Se=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-dialog",{staticClass:"flow-dialog",attrs:{visible:e.flag,width:"45%","close-on-click-modal":!1,title:e.revival?"流程复活":"创建并启动流程","append-to-body":""},on:{"update:visible":function(n){e.flag=n},closed:e.onClickCancel},scopedSlots:e._u([{key:"footer",fn:function(){return[r("el-button",{attrs:{loading:e.btnLoading,type:"primary"},on:{click:e.onClickOperation}},[e._v("确 定")]),e._v(" "),r("el-button",{attrs:{loading:e.btnLoading},on:{click:e.onClickCancel}},[e._v("取 消")])]},proxy:!0}])},[r("el-form",{staticClass:"create-form",attrs:{"label-width":"200px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"当前流程",size:"normal",rules:[{required:!0,message:"请选择流程"}]}},[e.processDefList.length>1?r("el-select",{staticStyle:{width:"65%","margin-right":"10px"},attrs:{filterable:"",clearable:"",placeholder:"请选择"},on:{change:e.processDefChange},model:{value:e.processDefId,callback:function(n){e.processDefId=n},expression:"processDefId"}},e._l(e.processDefList,function(e,n){return r("el-option",{key:e.id,attrs:{label:e.name,value:e.id,disabled:e.disabled}})}),1):r("b",{staticClass:"process-def-name"},[e._v("\n "+e._s(e.processDefName)+"\n ")]),e._v(" "),e.processDefId?r("div",{staticClass:"view-node-info",staticStyle:{"margin-right":"10px"},on:{click:e.viewFlowChart}},[e._v("\n 预览\n ")]):e._e(),e._v(" "),e.processDefId&&e.showFlowForecast?r("div",{staticClass:"view-node-info",on:{click:e.viewFlowForecast}},[e._v("\n 流程预测\n ")]):e._e()],1),e._v(" "),e.hasDeptId?e._e():r("el-form-item",{attrs:{label:"选择部门",rules:[{required:!0,message:"请选择部门"}]}},[r("selectDept",{staticClass:"dept-tree",attrs:{deptId:e.deptId,ops:e.deptList},on:{input:e.handleDeptChange}})],1),e._v(" "),e.deptId?r("div",{staticClass:"node-list"},[e.processList&&e.processList.length>0?r("el-form-item",{attrs:{label:"下一步处理节点",size:"normal"}}):e._e(),e._v(" "),e.processList.length>0?[e._l(e.processList,function(n,t){return[r("userTask",{ref:e.setItemRef(n.id),refInFor:!0,attrs:{index:t,personType:e.personType,personEntity:Object.assign({},e.personEntity,{_businessDeptId:e._businessDeptId}),processNode:Object.assign({},n,{REQUIRED:0==t}),label:"处理人",rules:[{required:0==t,message:"请选择审批人"}]},on:{complete:e.complete}}),e._v(" "),t!==e.processList.length-1?r("div",{staticClass:"user-task-split"}):e._e()]})]:e._e()],2):e._e()],1)],1),e._v(" "),r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],staticClass:"track-view",attrs:{visible:e.flowChartVisible,width:"60%","append-to-body":"",title:"流程图信息"},on:{"update:visible":function(n){e.flowChartVisible=n}}},[e.flowChartVisible&&e.processXml?r("bpmnLook",{ref:"PreviewRef",attrs:{diagram:e.processXml}}):e._e()],1),e._v(" "),r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],attrs:{visible:e.flowForecastVisible,width:"45%","append-to-body":"",title:"流程预测"},on:{"update:visible":function(n){e.flowForecastVisible=n},close:e.flowForecastClose}},[r("div",{staticStyle:{"margin-left":"20px"}},[r("div",{staticStyle:{"margin-left":"40px","margin-bottom":"20px"},domProps:{innerHTML:e._s(e.flowForecastData.completeTime)}}),e._v(" "),r("el-timeline",e._l(e.flowForecastData.processBudgetModelList,function(n,t){return r("el-timeline-item",{key:t,attrs:{icon:"el-icon-check",color:0==t?"#009800":n.color,timestamp:n.title,placement:"top"}},[r("div",[r("span",{staticStyle:{color:"#009800"}},[r("i",{staticClass:"el-icon-s-custom",staticStyle:{"margin-right":"5px"}}),e._v("\n 执行人:"+e._s(n.excutor)+"\n ")])])])}),1)],1)])],1)};Se._withStripped=!0;const Ue=I({render:Se,staticRenderFns:[]},function(e){e&&(e("data-v-725c1d48_0",{source:".flow-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.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],names:[],mappings:"AAq4BA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ACp4BA;ADw4BA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,kBAAA;ACr4BA;ADy4BA;EACA,wBAAA;EACA,kBAAA;ACt4BA;ADw4BA;EACA,SAAA;EACA,WAAA;ACt4BA;;AAEA,2CAA2C",file:"beforeCreate.vue",sourcesContent:['<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync="flag"\r\n width="45%"\r\n class="flow-dialog"\r\n :close-on-click-modal="false"\r\n :title="revival ? \'流程复活\' : \'创建并启动流程\'"\r\n append-to-body\r\n @closed="onClickCancel"\r\n >\r\n <el-form\r\n class="create-form"\r\n @submit.native.prevent\r\n label-width="200px"\r\n status-icon\r\n >\r\n <el-form-item label="当前流程" size="normal" :rules="[{ required: true, message: \'请选择流程\' }]">\r\n <el-select\r\n v-model="processDefId"\r\n v-if="processDefList.length > 1"\r\n style="width: 65%; margin-right: 10px"\r\n filterable\r\n clearable\r\n @change="processDefChange"\r\n placeholder="请选择"\r\n >\r\n <el-option\r\n v-for="(item, index) in processDefList"\r\n :key="item.id"\r\n :label="item.name"\r\n :value="item.id"\r\n :disabled="item.disabled"\r\n ></el-option>\r\n </el-select>\r\n <b class="process-def-name" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click="viewFlowChart"\r\n v-if="processDefId"\r\n class="view-node-info"\r\n style="margin-right: 10px"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click="viewFlowForecast"\r\n v-if="processDefId && showFlowForecast"\r\n class="view-node-info">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n \x3c!-- 如果没有传入部门,则需要选择部门 --\x3e\r\n <el-form-item v-if="!hasDeptId" label="选择部门" :rules="[{ required: true, message: \'请选择部门\' }]">\r\n <selectDept\r\n class="dept-tree"\r\n :deptId="deptId"\r\n :ops="deptList"\r\n @input="handleDeptChange"\r\n />\r\n </el-form-item>\r\n\r\n <div class="node-list" v-if="deptId">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="下一步处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n <template v-if="processList.length > 0">\r\n <template v-for="(item, index) in processList" >\r\n <userTask\r\n :index="index"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :processNode="{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }"\r\n label="处理人"\r\n :rules="[{ required: index == 0 ? true : false, message: \'请选择审批人\' }]"\r\n :ref="setItemRef(item.id)"\r\n @complete="complete"\r\n ></userTask>\r\n <div class="user-task-split" v-if="index !== processList.length - 1"></div>\r\n </template>\r\n </template>\r\n\r\n \x3c!-- <template v-if="otherProcessList.length > 0 && other">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="其他处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if="processList.length > 0">\r\n <userTask\r\n v-for="item in otherProcessList"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :key="item.id"\r\n :processNode="item"\r\n :noprop="true"\r\n :ref="setItemRef(item.id)"\r\n ></userTask>\r\n </template>\r\n </template> --\x3e\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading="btnLoading"\r\n type="primary"\r\n @click="onClickOperation"\r\n >确 定</el-button\r\n >\r\n <el-button :loading="btnLoading" @click="onClickCancel"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n \x3c!-- <div class="dialog"> --\x3e\r\n <el-dialog\r\n :visible.sync="flowChartVisible"\r\n width="60%"\r\n append-to-body\r\n title="流程图信息"\r\n class="track-view"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if="flowChartVisible && processXml" ref="PreviewRef" :diagram="processXml"></bpmnLook>\r\n \x3c!-- <iframe\r\n :src="trackUrl"\r\n frameborder="0"\r\n width="100%"\r\n height="100%"\r\n /> --\x3e\r\n \x3c!-- <el-image :src="trackUrl"></el-image> --\x3e\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync="flowForecastVisible"\r\n width="45%"\r\n append-to-body\r\n title="流程预测"\r\n v-dialogDrag\r\n @close="flowForecastClose"\r\n >\r\n <div style="margin-left: 20px;">\r\n <div v-html="flowForecastData.completeTime" style="margin-left: 40px;margin-bottom: 20px;"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for="(activity, index) in flowForecastData.processBudgetModelList"\r\n :key="index"\r\n icon="el-icon-check"\r\n :color="index==0 ? \'#009800\': activity.color"\r\n :timestamp="activity.title" placement="top">\r\n <div>\r\n <span style="color:#009800;">\r\n <i class="el-icon-s-custom" style="margin-right: 5px;"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n \x3c!-- </div> --\x3e\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "./api";\r\nimport * as Enum from "./enum";\r\nimport userTask from "./operation/userTask.vue";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport bpmnLook from "./bpmnLook.vue";\r\nimport selectDept from "./operation/selectDept.vue";\r\nimport { getNodeUserParams } from \'./utils\'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: \'\',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: \'\',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: "",\r\n processInstId: \'\',\r\n processDefName: "",\r\n businessId: "",\r\n trackUrl: "",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: "",\r\n businessCode: "",\r\n _vars: {},\r\n _appId: \'\',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: \'\',\r\n subjectId: \'\',\r\n processXml: \'\',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, \'val\')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, \'complete\')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, \'isxml\')\r\n let res = {}\r\n let xml = \'\'\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, \'res\')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = \'http://localhost:2888/saber/#/flowPreview\'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\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 this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = \'\'\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem(\'token\');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: \'1\',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程预测失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = "UserTaskModel";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定单位" ||\r\n humanPerformer == "固定群组"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程启动失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = "流程复活") {\r\n console.log(msg, \'流程复活\')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes(\'_\')) {\r\n delete vars[key];\r\n }\r\n if (fk == \'appShow\') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: "重新提交",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n vars,\r\n },\r\n "",\r\n this.businessId,\r\n msg,\r\n "",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程复活失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = "", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, "").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: "",\r\n businessCode: "",\r\n businessType: "",\r\n keyWord: "",\r\n businessDeptId: "",\r\n userInfo: {},\r\n processGroupName: "",\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode || info.businessType;\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log(\'======_businessDeptId\',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, \'reject\')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, \'res\')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \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 // 获取节点的人员\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 // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, \'res\')\r\n } catch (error) {\r\n console.log(error, \'error\')\r\n }\r\n console.log(res.data, \'data\')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el["id"] != this.processList[0]["id"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el["REQUIRED"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\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 this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, \'id\')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, "", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==\'\'){\r\n ElMessage.warning("请选择流程");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, \'res\')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, \'vars\')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss">\r\n.flow-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.flow-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 overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\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</style>\r\n\r\n<style lang="scss" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n',".flow-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.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]},media:void 0}),e("data-v-725c1d48_1",{source:".dept-tree[data-v-725c1d48] {\n width: 65%;\n}\n.process-def-name[data-v-725c1d48] {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n.view-node-info[data-v-725c1d48] {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n.create-form .el-form-item__label[data-v-725c1d48] {\n padding-right: 18px;\n}\n.create-form .el-form-item[data-v-725c1d48] {\n margin-bottom: 10px;\n}\n.node-list[data-v-725c1d48] {\n max-height: 300px;\n overflow-y: scroll;\n}\n.track-view .el-dialog__body[data-v-725c1d48] {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\niframe[data-v-725c1d48] {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],names:[],mappings:"AAk6BA;EACA,UAAA;ACj6BA;ADo6BA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;ACj6BA;ADm6BA;EACA,qBAAA;EACA,eAAA;EACA,cAAA;EACA,eAAA;EACA,SAAA;ACh6BA;ADo6BA;EACA,mBAAA;ACj6BA;ADm6BA;EACA,mBAAA;ACj6BA;ADo6BA;EACA,iBAAA;EACA,kBAAA;ACj6BA;ADo6BA;EACA,aAAA;EACA,uBAAA;EACA,aAAA;EACA,kBAAA;ACj6BA;ADo6BA;EACA,iBAAA;ACj6BA;;AAEA,2CAA2C",file:"beforeCreate.vue",sourcesContent:['<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync="flag"\r\n width="45%"\r\n class="flow-dialog"\r\n :close-on-click-modal="false"\r\n :title="revival ? \'流程复活\' : \'创建并启动流程\'"\r\n append-to-body\r\n @closed="onClickCancel"\r\n >\r\n <el-form\r\n class="create-form"\r\n @submit.native.prevent\r\n label-width="200px"\r\n status-icon\r\n >\r\n <el-form-item label="当前流程" size="normal" :rules="[{ required: true, message: \'请选择流程\' }]">\r\n <el-select\r\n v-model="processDefId"\r\n v-if="processDefList.length > 1"\r\n style="width: 65%; margin-right: 10px"\r\n filterable\r\n clearable\r\n @change="processDefChange"\r\n placeholder="请选择"\r\n >\r\n <el-option\r\n v-for="(item, index) in processDefList"\r\n :key="item.id"\r\n :label="item.name"\r\n :value="item.id"\r\n :disabled="item.disabled"\r\n ></el-option>\r\n </el-select>\r\n <b class="process-def-name" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click="viewFlowChart"\r\n v-if="processDefId"\r\n class="view-node-info"\r\n style="margin-right: 10px"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click="viewFlowForecast"\r\n v-if="processDefId && showFlowForecast"\r\n class="view-node-info">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n \x3c!-- 如果没有传入部门,则需要选择部门 --\x3e\r\n <el-form-item v-if="!hasDeptId" label="选择部门" :rules="[{ required: true, message: \'请选择部门\' }]">\r\n <selectDept\r\n class="dept-tree"\r\n :deptId="deptId"\r\n :ops="deptList"\r\n @input="handleDeptChange"\r\n />\r\n </el-form-item>\r\n\r\n <div class="node-list" v-if="deptId">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="下一步处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n <template v-if="processList.length > 0">\r\n <template v-for="(item, index) in processList" >\r\n <userTask\r\n :index="index"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :processNode="{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }"\r\n label="处理人"\r\n :rules="[{ required: index == 0 ? true : false, message: \'请选择审批人\' }]"\r\n :ref="setItemRef(item.id)"\r\n @complete="complete"\r\n ></userTask>\r\n <div class="user-task-split" v-if="index !== processList.length - 1"></div>\r\n </template>\r\n </template>\r\n\r\n \x3c!-- <template v-if="otherProcessList.length > 0 && other">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="其他处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if="processList.length > 0">\r\n <userTask\r\n v-for="item in otherProcessList"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :key="item.id"\r\n :processNode="item"\r\n :noprop="true"\r\n :ref="setItemRef(item.id)"\r\n ></userTask>\r\n </template>\r\n </template> --\x3e\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading="btnLoading"\r\n type="primary"\r\n @click="onClickOperation"\r\n >确 定</el-button\r\n >\r\n <el-button :loading="btnLoading" @click="onClickCancel"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n \x3c!-- <div class="dialog"> --\x3e\r\n <el-dialog\r\n :visible.sync="flowChartVisible"\r\n width="60%"\r\n append-to-body\r\n title="流程图信息"\r\n class="track-view"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if="flowChartVisible && processXml" ref="PreviewRef" :diagram="processXml"></bpmnLook>\r\n \x3c!-- <iframe\r\n :src="trackUrl"\r\n frameborder="0"\r\n width="100%"\r\n height="100%"\r\n /> --\x3e\r\n \x3c!-- <el-image :src="trackUrl"></el-image> --\x3e\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync="flowForecastVisible"\r\n width="45%"\r\n append-to-body\r\n title="流程预测"\r\n v-dialogDrag\r\n @close="flowForecastClose"\r\n >\r\n <div style="margin-left: 20px;">\r\n <div v-html="flowForecastData.completeTime" style="margin-left: 40px;margin-bottom: 20px;"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for="(activity, index) in flowForecastData.processBudgetModelList"\r\n :key="index"\r\n icon="el-icon-check"\r\n :color="index==0 ? \'#009800\': activity.color"\r\n :timestamp="activity.title" placement="top">\r\n <div>\r\n <span style="color:#009800;">\r\n <i class="el-icon-s-custom" style="margin-right: 5px;"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n \x3c!-- </div> --\x3e\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "./api";\r\nimport * as Enum from "./enum";\r\nimport userTask from "./operation/userTask.vue";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport bpmnLook from "./bpmnLook.vue";\r\nimport selectDept from "./operation/selectDept.vue";\r\nimport { getNodeUserParams } from \'./utils\'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: \'\',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: \'\',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: "",\r\n processInstId: \'\',\r\n processDefName: "",\r\n businessId: "",\r\n trackUrl: "",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: "",\r\n businessCode: "",\r\n _vars: {},\r\n _appId: \'\',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: \'\',\r\n subjectId: \'\',\r\n processXml: \'\',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, \'val\')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, \'complete\')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, \'isxml\')\r\n let res = {}\r\n let xml = \'\'\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, \'res\')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = \'http://localhost:2888/saber/#/flowPreview\'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\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 this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = \'\'\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem(\'token\');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: \'1\',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程预测失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = "UserTaskModel";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定单位" ||\r\n humanPerformer == "固定群组"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程启动失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = "流程复活") {\r\n console.log(msg, \'流程复活\')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes(\'_\')) {\r\n delete vars[key];\r\n }\r\n if (fk == \'appShow\') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: "重新提交",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n vars,\r\n },\r\n "",\r\n this.businessId,\r\n msg,\r\n "",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程复活失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = "", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, "").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: "",\r\n businessCode: "",\r\n businessType: "",\r\n keyWord: "",\r\n businessDeptId: "",\r\n userInfo: {},\r\n processGroupName: "",\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode || info.businessType;\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log(\'======_businessDeptId\',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, \'reject\')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, \'res\')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \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 // 获取节点的人员\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 // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, \'res\')\r\n } catch (error) {\r\n console.log(error, \'error\')\r\n }\r\n console.log(res.data, \'data\')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el["id"] != this.processList[0]["id"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el["REQUIRED"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\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 this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, \'id\')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, "", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==\'\'){\r\n ElMessage.warning("请选择流程");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, \'res\')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, \'vars\')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss">\r\n.flow-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.flow-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 overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\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</style>\r\n\r\n<style lang="scss" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n',".dept-tree {\n width: 65%;\n}\n\n.process-def-name {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n\n.view-node-info {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n\n.create-form .el-form-item__label {\n padding-right: 18px;\n}\n.create-form .el-form-item {\n margin-bottom: 10px;\n}\n\n.node-list {\n max-height: 300px;\n overflow-y: scroll;\n}\n\n.track-view .el-dialog__body {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\n\niframe {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]},media:void 0}))},Fe,"data-v-725c1d48",false,undefined,!1,k,void 0,void 0);const Re={components:{userTask:W},data:()=>({userTaskListData:{},flag:!1,processList:[],callbacak:{},commentMsg:"",isUserTask:!1,cancelCallBack:{}}),methods:{setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},isOption:e=>"任意指定"==e||"固定部门"==e||"固定单位"==e,Show(e){return new Promise((n,r)=>{this.cancelCallBack=r,f.repository.getFirstProcessNode(e).then(e=>{e.code==u.success&&(this.processList=e.data,this.isOption(this.processList[0].humanPerformerName)&&!this.processList[0].isHistoryRoute?(this.flag=!0,this.callbacak=n,this.isUserTask=!0):n({commentMsg:this.commentMsg||"重新发起"}))})})},onClickOperation(){if(this.commentMsg.length>200)return e.error("审批意见不能超过200个字"),!1;let n={};if(n={commentMsg:this.commentMsg||"重新发起"},this.isUserTask){let e={},r={};for(let t in this.userTaskListData){let s=this.userTaskListData[t],i=this.$refs[s][0].getValue();if(!i)return!1;e={...e,...i.multiNodeParticipant},r={...r,...i.vars},n={...n,multiNodeParticipant:e,vars:r}}}this.callbacak&&this.callbacak(n),this.flag=!1},onClickCancel(){this.flag=!1,this.cancelCallBack&&this.cancelCallBack()}}};var ze=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-dialog",{attrs:{visible:e.flag,width:"35%",title:"重新发起","append-to-body":""},on:{"update:visible":function(n){e.flag=n},close:e.onClickCancel},scopedSlots:e._u([{key:"footer",fn:function(){return[r("el-button",{directives:[{name:"loading",rawName:"v-loading"}],attrs:{type:"primary"},on:{click:e.onClickOperation}},[e._v("确 定")]),e._v(" "),r("el-button",{on:{click:e.onClickCancel}},[e._v("取 消")])]},proxy:!0}])},[r("el-form",{attrs:{"label-width":"100px","status-icon":""}},[e.isUserTask?e._l(e.processList,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{processNode:n}})}):e._e()],2)],1)],1)};ze._withStripped=!0;const Ve=I({render:ze,staticRenderFns:[]},undefined,Re,undefined,false,undefined,!1,void 0,void 0,void 0);const qe={props:{modelValue:{required:!0},props:{type:Object},placeholder:{default:"请选择",type:String},appId:{type:String,required:!0},filter:{type:Function||Object},vLabel:{type:String,default:"name"},vKey:{type:String,default:"id"},processGroupName:{type:String,default:""}},model:{prop:"value",event:"update:modelValue"},data:()=>({data:[]}),mounted(){this.getData()},methods:{getData(){let e,n="";this.appId&&(n=`dictionarySelect_${this.appId}`,e=localStorage.getItem(n)),f.repository.getProcessDefList(this.appId,this.processGroupName).then(e=>{let r=this.callback(e.data);n&&localStorage.setItem(n,JSON.stringify({data:r}))})},callback(e){let n=e;return this.filter&&(n=this.filter(n)),this.data=n,this.$emit("getData",n),1==n.length&&this.handleChange(n[0].id),n},handleChange(e){let n=this.data.find(n=>n.id==e)||{};this.$emit("change",n),this.$emit("update:modelValue",e),this.$emit("changeGetData",{data:this.data,val:e})}},components:{},computed:{formatValue(){return this.modelValue?"object"==typeof this.modelValue?this.modelValue:this.modelValue+"":this.modelValue}}};var He=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-select",{staticStyle:{width:"100%"},attrs:{"model-value":e.formatValue,filterable:"",clearable:"",bind:e.props,placeholder:e.placeholder},on:{change:function(n){return e.handleChange(n)}},scopedSlots:e._u([e.data&&e.data.length>0?{key:"default",fn:function(){return e._l(e.data,function(e,n){return r("el-option",{key:e.id,attrs:{label:e.name,value:e.id,disabled:e.disabled}})})},proxy:!0}:null],null,!0)})],1)};He._withStripped=!0;const We=I({render:He,staticRenderFns:[]},undefined,qe,undefined,false,undefined,!1,void 0,void 0,void 0);var Ge=Object.freeze({__proto__:null}),Je=Object.freeze({__proto__:null});Le.install=e=>{e.component("process",Le)};export{Je as AjaxModels,f as ProcessAPI,y as ProcessEnums,Ge as ProcessModels,We as ProcessSelect,Ue as beforeCreate,Le as default,Be as processDrawer,Ve as reactivate};
|
|
1
|
+
import{Message as e,MessageBox as n}from"element-ui";import r from"@riophae/vue-treeselect";import"@riophae/vue-treeselect/dist/vue-treeselect.css";import{departPerson as t}from"checked-pick-pc";import"checked-pick-pc/style.css";import s from"bpmn-js/lib/Viewer";import i from"diagram-js/lib/navigation/movecanvas";import a from"diagram-js/lib/features/tooltips";import o from"dayjs";import"element-ui/lib/theme-chalk/index.css";import l from"@/assets/images/pdf-file.png";import d from"@/assets/images/components/attach.png";let c;const p="/aws",m="/bladex/blade-workflow",h="/auth";var f={getAjaxObj:()=>({get:(e,n)=>{let r={url:e,param:n.params,type:"get"};return c(r)},post:(e,n)=>c({url:e,param:n,type:"post"})}),getAjax:()=>c,setAjax:e=>{c=e},common:{deptUser:e=>c({url:"/system/dept/list/dept/user",param:{subjectId:e},type:"get"}),getTaskAuditor:(e,n)=>c({url:"/auth/post/getTaskAuditor",param:{deptId:e,taskPostIds:n},type:"post"}),chexiao:e=>c({url:m+"/tis/withdrawTask",param:{processInstId:e},type:"get"}),cuiban:e=>c({url:m+"/tis/reminders",param:{processInstId:e},type:"get"})},pis:{start:e=>c({url:p+"/pis/start",param:e,type:"post"}),createAndStart:e=>c({url:m+"/pis/createAndStart",param:e,type:"post"}),cancel:(e,n)=>c({url:p+"/pis/cancel",param:{processInstId:e,processBusinessKey:n},type:"post"}),findNodeParticipantRows:e=>c({url:p+"/pis/findNodeParticipantRows",param:{processInstId:e},type:"get"}),revoke:(e,n)=>c({url:p+"/pis/revoke",param:{processInstId:e,processBusinessKey:n},type:"post"}),getProcessStatus:(e,n)=>c({url:p+"/pis/getProcessStatus",param:{processInstId:e,taskId:n||""},type:"get"}),getProcessInstanceById:e=>c({url:p+"/pis/getProcessInstanceById",param:{processInstId:e},type:"get"}),reactivate:e=>c({url:m+"/pis/reactivate",param:e,type:"post"}),getProcessInstanceByBusinessKey:e=>c({url:p+"/pis/getProcessInstanceByBusinessKey",param:{businessKey:e},type:"get"}),getProcessForecast:e=>c({url:p+"/pis/getProcessForecast",param:e,type:"post"}),deleteProcessById:e=>c({url:p+"/pis/deleteProcessById",param:{processInstId:e},type:"get"})},tis:{getTaskModelDetail:e=>c({url:m+"/tis/getTaskModelDetail",param:e,type:"get"}),query:(e,n,r,t)=>c({url:p+"/tis/query",param:{appId:e,firstRow:n*r-r,rowCount:n*r,returnVars:!0,titleLike:t,taskState:1},type:"get"}),patchSave:e=>c({url:p+"/meta/annex/patchSave",param:e,type:"post"}),queryTaskPage(e,n,r,t,s=b.待处理,i,a){let o={url:p+"/tis/queryTaskPageByCriteria",param:{appIds:e,firstRow:n,rowCount:r,isReturnVars:!0,titleLike:t,taskState:s,varQueries:i,...a},type:"post"};return c(o)},queryHiTaskPage(e,n,r,t="",s=b.待处理,i,a){let o={url:p+"/tis/queryHiTaskPageByCriteria",param:{appIds:e,firstRow:n,rowCount:r,isReturnVars:!0,titleLike:t,taskState:s,varQueries:i,...a},type:"post"};return c(o)},getTaskCommentList:(e,n)=>c({url:p+"/tis/getTaskCommentList",param:{processInstId:e,processBusinessKey:n},type:"get"}),complete:e=>c({url:m+"/tis/complete",param:e,type:"post"}),delegate:e=>c({url:p+"/tis/delegate",param:e,type:"post"}),transferTask:e=>c({url:m+"/tis/transferTask",param:e,type:"post"}),withdrawTask:e=>c({url:m+"/tis/withdrawTask",param:{processInstId:e},type:"get"}),addMultiInstance:e=>c({url:m+"/tis/addMultiInstance",param:e,type:"post"}),reject:(e,n)=>c({url:p+"/tis/reject",param:{taskInstId:e,commentMsg:n},type:"post"}),simulation:(e,n,r)=>c({url:m+"/tis/simulation",param:{taskId:e},type:"get"}),createDynamicTask:e=>c({url:p+"/tis/createDynamicTask",param:e,type:"post"}),createCCTask:e=>c({url:m+"/tis/createCCTask",param:e,type:"post"}),reminders:e=>c({url:m+"/tis/reminders",param:{processInstId:e},type:"get"}),getReturnableNodes:e=>c({url:p+"/tis/getReturnableNodes",param:{taskId:e},type:"get"}),rollback:(e,n,r)=>c({url:m+"/tis/rollback",param:{taskInstId:e,rollbackReason:r,targetActivityId:n},type:"post"})},repository:{getUserTaskModelCmd:e=>c({url:p+"/repository/getUserTaskModel",param:{taskId:e},type:"get"}),getAfferentParticipantNodeList:e=>c({url:p+"/repository/getAfferentParticipantNodeList",param:{processDefId:e},type:"get"}),getXmlByProcessDefId:e=>c({url:m+"/process/getXmlByProcessDefId",param:e,type:"get"}),backNodes:e=>c({url:m+"/process/getBackNodes",param:e,type:"get"}),getDiagramUrl:e=>c({url:m+"/repository/getDiagramUrl",param:e,type:"get"}),getTrackUrl:e=>c({url:p+"/repository/getTrackUrl",param:e,type:"get"}),getProcessDefList:(e,n)=>c({url:m+"/repository/getProcessDefList",param:{appId:e,processGroupName:n},type:"post"}),getProcessDefListNew(e){let n={url:m+"/repository/getProcessDefList",param:{...e,businessCode:e.businessCode||e.businessType},type:"post"};return c(n)},getOutgoingProcessNode:(e,n)=>c({url:m+"/tis/getOutgoingProcessNode",param:{taskId:e,processNodeId:n},type:"get"}),queryTaskNodeList:e=>c({url:m+"/repository/queryTaskNodeList",param:{processInstId:e},type:"get"}),getFirstProcessNode:e=>c({url:m+"/repository/getAllProcessNode",param:{processDefId:e},type:"get"}),getParticipantsOfPerformerNames:(e,n)=>c({url:p+"/repository/getParticipantsOfPerformerNames?taskInstId="+e,param:{taskInstId:e,userTaskDefIds:n},type:"post"})},org:{list:(e="",n="",r="")=>c({url:p+"/org/list",param:{deptId:n,companyId:r,searchKey:e},type:"get"}),findTeamMember:(e="",n="")=>c({url:p+"/org/findTeamMember",param:{teamId:n,searchKey:e},type:"get"})},user:{getTaskAuditor:e=>c({url:h+"/user/getTaskAuditor",param:e,type:"post",headers:{"X-Tag":"lwl "}}),getSelectTree:e=>c({url:h+"/dept/list/user/dept/selectTree",param:e,type:"get",headers:{"X-Tag":"lwl "}})}};const u={success:200,err:500,empty:404},g={"电脑端":"pc","移动端":"mobile"},A={"人员":1,"部门":0,"主体":-1,"群组":2},b={"待处理":1,"抄送":2,"不处理":4,"无子节点":11},v={"单一分支":"ExclusiveGatewayModel","用户任务":"UserTaskModel","用户节点":"userTask","多选节点":"InclusiveGatewayModel","结束":"endEvent","结束事件":"EndEventModel"};var y=Object.freeze({__proto__:null,AdHocType:{"阅办":0,"会签":1,"加签":2,"协同":3},DiagramType:{"缩略图":0,"原始大图":1},OperationType:{"加签":"counterSignLabel"},ProcessNodeType:v,SealBusinessSign:{"流程待办":1,"业务待办":2},SourceType:g,TaskState:b,UserType:A,apiCode:u}),x={components:{departPerson:t},unmounted(){window.clearInterval(this.searchInterval)},props:{modelValue:{type:Object|String},defaultOption:{type:Array},personType:"",personEntity:{type:Object,default:()=>{}},disable:!1,multiple:{default:!1,type:Boolean},max:{default:1,type:Number},items:{default:void 0,type:Array},processNodeObj:{default:void 0,request:!1},isAlis:{type:Boolean,default:!1}},inject:{isAlisInject:{value:"isAlisInject",default:null}},data(){return{visible:!1,treeOptions:null,selectModel:this.multiple?[]:void 0,treeSearchOptions:null,noPostOption:!1,onePostUser:!1,positionArray:[],searchTime:-1,searchParam:"",userList:[],checkedArray:[],entity:{source:"1",type:this.personType||"0",request:f.getAjaxObj(),orgType:[],codeType:[3],multiple:!0,maxMultiple:this.processNodeObj&&-1==this.processNodeObj.loopCardinality?1e3:this.max>1?this.max:1,deptCode:this.processNodeObj?this.getDeptCode(1):"",deptCodeArray:this.processNodeObj&&this.getDeptCode(0)||[],subjectName:this.processNodeObj?this.getSubjectName():""},searchInterval:window.setInterval(this.searchIntervalFunc,100)}},model:{prop:"modelValue",event:"update:modelValue"},mounted(){""!=this.personEntity&&(this.entity={...this.entity,...this.personEntity}),this.processNodeObj&&this.processNodeObj.participantList&&this.processNodeObj.participantList.length>0&&(this.processNodeObj.participantList.map(e=>{e.id=e.id}),this.userList=this.processNodeObj.participantList,this.checkedArray=this.processNodeObj.participantList.map(e=>({type:3,id:e.id,name:e.name||e.realName,subjectId:e.subjectId})),this.$emit("update:modelValue",this.userList.map(e=>e.id)),this.$emit("select",this.userList)),this.gePostUsers()},methods:{getSubjectName(){let e="";return"固定单位"==this.processNodeObj.humanPerformerName&&(e=this.processNodeObj.routeTxt.companyIds[0].name),e},gePostUsers(){if("固定角色/岗位"==this.processNodeObj.humanPerformerName){let{routeTxt:e}=this.processNodeObj,n={taskDefId:this.processNodeObj.id,postIds:[]};e.postList.map(e=>{n.postIds.push(e.postId)}),e.postList&&e.postList.length>0&&f.common.getTaskAuditor(this.personEntity._businessDeptId?this.personEntity._businessDeptId:this.processNodeObj.taskNode?this.processNodeObj.taskNode[0].vars._businessDeptId:"",[n]).then(e=>{let n=[],r=[],t=!1;e.data.map(e=>{e.posts.map(e=>{r.push(...e.users),1==e.users.length?n.push(...e.users):t=!0})}),n.length>this.entity.maxMultiple&&0!=this.entity.maxMultiple&&(t=!0),t&&(n=[]),0!=r.length?(n.length>0&&(this.onePostUser=!0,this.handleCallback(n)),this.entity.orgType=[5],this.entity.codeType=[8],e.data[0].posts.map(e=>{this.positionArray.push({...e,projectPost:!(this.personEntity._businessDeptId||this.processNodeObj.taskNode&&this.processNodeObj.taskNode[0].vars._businessDeptId),id:e.users.map(e=>e.id)})})):this.noPostOption=!0})}},getDeptCode(e){let n="";return"固定部门"==this.processNodeObj.humanPerformerName&&("1"==e&&1==this.processNodeObj.routeTxt.departmentIds.length&&(n=this.processNodeObj.routeTxt.departmentIds[0].rangeId),"0"==e&&this.processNodeObj.routeTxt.departmentIds.length>1&&(n=this.processNodeObj.routeTxt.departmentIds.map(e=>e.rangeId))),n},handleCallback(e){this.userList=e,this.checkedArray=this.userList.map(e=>({type:3,id:e.id,name:e.name||e.realName,subjectId:e.subjectId})),this.$emit("update:modelValue",this.userList.map(e=>e.id)),this.$emit("select",this.userList)},handleClose(e){this.userList.splice(e,1),this.checkedArray=this.userList.map(e=>({type:3,id:e.id,name:e.name||e.realName,subjectId:e.subjectId})),this.$emit("update:modelValue",this.userList.map(e=>e.id)),this.$emit("select",this.userList)},searchIntervalFunc(){this.searchTime>0&&(this.searchTime-=100),0==this.searchTime&&(this.searchTime=-1,!this.searchParam||this.items&&this.items.length>0?this.treeSearchOptions=null:f.org.list(this.searchParam).then(async e=>{if(e.code==u.success){let n=e.data.map(e=>(e.children=null,e.label=e.name,e.id=e.id,e.deptName=e.deptName,e.alisName=e.alisName,e));this.treeSearchOptions=n,await this.$nextTick(),this.$refs.deptTree.forest.normalizedOptions.forEach(e=>{e.isBranch=!1}),await this.$nextTick(),this.$refs.deptTree.handleLocalSearch()}}))},searchChange(e){this.searchParam=e,this.searchTime=500},onSelect(e,n){this.$emit("update:modelValue",this.selectModel),this.$emit("select",e)},onInput(n,r){this.max>0&&this.multiple&&n.length>this.max&&n.length>this.max?(this.$refs.deptTree.clear(),this.$refs.deptTree.forest.selectedNodeIds=this.selectModel,this.$refs.deptTree.select(this.selectModel),e.warning(`最多选择 ${this.max} 人`)):(this.selectModel=n,this.$emit("update:modelValue",this.selectModel))},normalizer(e){if(e.children&&!e.children.length&&delete e.children,e.leaf){let n=`${e.deptName} - ${e.label}(${e.phone})`;return(this.isAlis||this.isAlisInject)&&e.alisName&&(n+="participantList -- "+e.alisName),this.$refs.deptTree.trigger.searchQuery&&(n+=`(${this.$refs.deptTree.trigger.searchQuery})`),{id:e.id,label:n,leaf:e.leaf,phone:e.phone,deptName:e.deptName,alisName:e.alisName}}return{id:e.id,label:e.label,leaf:e.leaf,phone:e.phone,children:e.children,deptName:e.deptName,alisName:e.alisName}},async loadTreeOptions({action:e,parentNode:n,callback:r,instanceId:t}){if(e===LOAD_ROOT_OPTIONS)if(this.items){let e=this.items.map(e=>(e.children=null,e.label=e.name,e.id=e.id,e));this.$set(this,"treeOptions",e)}else f.org.list().then(e=>{if(e.code==u.success){let n=e.data.map(e=>(e.children=null,e.label=e.name,e.id=e.id,e));this.defaultOption&&(n=[...n,...this.defaultOption]),this.$set(this,"treeOptions",n)}});else if(e===LOAD_CHILDREN_OPTIONS){let e=n.id,t="";if(n.orgType==A.主体&&(t=n.id,e=""),n.orgType==A.群组)return void f.org.findTeamMember("",e).then(e=>{let t=e.data.map(e=>(e.label=e.name,e.id=e.id,e));n.children=t,r()});f.org.list("",e,t).then(e=>{if(e.code==u.success){let t=e.data.map(e=>(e.leaf||(e.children=null),e.label=e.name,e.id=e.id,e));n.children=t,r()}})}}}};function I(e,n,r,t,s,i,a,o,l,d){"boolean"!=typeof a&&(l=o,o=a,a=!1);const c="function"==typeof r?r.options:r;let p;if(e&&e.render&&(c.render=e.render,c.staticRenderFns=e.staticRenderFns,c._compiled=!0,s&&(c.functional=!0)),t&&(c._scopeId=t),i?(p=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(i)},c._ssrRegister=p):n&&(p=a?function(e){n.call(this,d(e,this.$root.$options.shadowRoot))}:function(e){n.call(this,o(e))}),p)if(c.functional){const e=c.render;c.render=function(n,r){return p.call(r),e(n,r)}}else{const e=c.beforeCreate;c.beforeCreate=e?[].concat(e,p):[p]}return r}const w="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());function k(e){return(e,n)=>function(e,n){const r=w?n.media||"default":e,t=C[r]||(C[r]={ids:new Set,styles:[]});if(!t.ids.has(e)){t.ids.add(e);let r=n.source;if(n.map&&(r+="\n/*# sourceURL="+n.map.sources[0]+" */",r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n.map))))+" */"),t.element||(t.element=document.createElement("style"),t.element.type="text/css",n.media&&t.element.setAttribute("media",n.media),void 0===T&&(T=document.head||document.getElementsByTagName("head")[0]),T.appendChild(t.element)),"styleSheet"in t.element)t.styles.push(r),t.element.styleSheet.cssText=t.styles.filter(Boolean).join("\n");else{const e=t.ids.size-1,n=document.createTextNode(r),s=t.element.childNodes;s[e]&&t.element.removeChild(s[e]),s.length?t.element.insertBefore(n,s[e]):t.element.appendChild(n)}}}(e,n)}let T;const C={};const D=x;var N=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("div",{staticClass:"user-list"},[e.processNodeObj&&"固定角色/岗位"==e.processNodeObj.humanPerformerName?[e.noPostOption?r("span",[e._v("没有可选人员,请检查配置")]):e.userList.length>=1?r("span",{staticStyle:{"margin-right":"10px"}},[e._v(e._s(e.userList.map(function(e){return e.name}).join(";")))]):e._e(),e._v(" "),e.noPostOption||e.onePostUser?e._e():r("span",{staticClass:"staff-tree-btn",on:{click:function(n){!e.disable&&(e.visible=!0)}}},[e._v("选择")])]:[e.userList.length>0?r("span",{staticStyle:{"margin-right":"10px"}},[e._v(e._s(e.userList.map(function(e){return e.name}).join(";")))]):e._e(),e._v(" "),r("span",{staticClass:"staff-tree-btn",on:{click:function(n){!e.disable&&(e.visible=!0)}}},[e._v("选择")])]],2),e._v(" "),r("departPerson",e._b({attrs:{visible:e.visible,checkedArray:e.checkedArray,positionArray:e.positionArray},on:{"update:visible":function(n){e.visible=n},callback:e.handleCallback}},"departPerson",e.entity,!1))],1)};N._withStripped=!0;const O=I({render:N,staticRenderFns:[]},function(e){e&&e("data-v-61e6d5d3_0",{source:"\n.staffTree[data-v-61e6d5d3] {\r\n line-height: initial;\n}\n.staff-tree-btn[data-v-61e6d5d3] {\r\n color: rgb(19, 137, 255);\r\n font-size: 14px;\r\n cursor: pointer;\n}\r\n",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\staff-tree.vue"],names:[],mappings:";AAkbA;EACA,oBAAA;AACA;AACA;EACA,wBAAA;EACA,eAAA;EACA,eAAA;AACA",file:"staff-tree.vue",sourcesContent:['<template>\r\n <div>\r\n <div class="user-list">\r\n <template\r\n v-if="\r\n processNodeObj && processNodeObj.humanPerformerName == \'固定角色/岗位\'\r\n "\r\n >\r\n <span v-if="noPostOption">没有可选人员,请检查配置</span>\r\n <span v-else-if="userList.length >= 1" style="margin-right: 10px">{{\r\n userList.map((item) => item.name).join(";")\r\n }}</span>\r\n <span\r\n v-if="!noPostOption && !onePostUser"\r\n @click="!disable ? (visible = true) : \'\'"\r\n class="staff-tree-btn"\r\n >选择</span\r\n >\r\n </template>\r\n <template v-else>\r\n <span v-if="userList.length > 0" style="margin-right: 10px">{{\r\n userList.map((item) => item.name).join(";")\r\n }}</span>\r\n <span @click="!disable ? (visible = true) : \'\'" class="staff-tree-btn"\r\n >选择</span\r\n >\r\n </template>\r\n </div>\r\n\r\n <departPerson\r\n :visible.sync="visible"\r\n v-bind="entity"\r\n :checkedArray="checkedArray"\r\n :positionArray="positionArray"\r\n @callback="handleCallback"\r\n ></departPerson>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "./api";\r\n// import treeselect, { LOAD_ROOT_OPTIONS, LOAD_CHILDREN_OPTIONS } from \'@riophae/vue-treeselect\';\r\n// import \'@riophae/vue-treeselect/dist/vue-treeselect.css\';\r\nimport { Message as ElMessage } from "element-ui"; //ElMessage\r\nimport * as $enum from "./enum";\r\nimport { departPerson } from "checked-pick-pc";\r\nimport "checked-pick-pc/style.css";\r\n\r\nexport default {\r\n components: { departPerson },\r\n unmounted() {\r\n window.clearInterval(this.searchInterval);\r\n },\r\n props: {\r\n modelValue: { type: Object | String },\r\n defaultOption: { type: Array },\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n disable: false,\r\n multiple: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n max: {\r\n default: 1,\r\n type: Number,\r\n },\r\n items: {\r\n default: undefined,\r\n type: Array,\r\n },\r\n processNodeObj: {\r\n default: undefined,\r\n request: false,\r\n },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n inject: {\r\n isAlisInject: { value: "isAlisInject", default: null },\r\n // getUserInfo: { value: "getUserInfo", default: {} },\r\n },\r\n data() {\r\n return {\r\n visible: false,\r\n treeOptions: null,\r\n selectModel: this.multiple ? [] : undefined,\r\n treeSearchOptions: null,\r\n noPostOption: false,\r\n onePostUser: false,\r\n positionArray: [],\r\n searchTime: -1,\r\n searchParam: "",\r\n userList: [],\r\n checkedArray: [],\r\n entity: {\r\n source: "1",\r\n type: this.personType || "0",\r\n request: api.getAjaxObj(),\r\n orgType: [],\r\n codeType: [3],\r\n multiple: true,\r\n maxMultiple:\r\n this.processNodeObj && this.processNodeObj.loopCardinality == -1\r\n ? 1000\r\n : (this.max > 1 ? this.max : 1),\r\n deptCode: this.processNodeObj ? this.getDeptCode(1) : "",\r\n deptCodeArray: this.processNodeObj ? this.getDeptCode(0) || [] : [],\r\n subjectName: this.processNodeObj ? this.getSubjectName() : "",\r\n // uuuid: this.processNodeObj?this.gePostUsers() : ""\r\n },\r\n searchInterval: window.setInterval(this.searchIntervalFunc, 100),\r\n };\r\n },\r\n model: {\r\n prop: "modelValue",\r\n event: "update:modelValue",\r\n },\r\n mounted() {\r\n if (this.personEntity != "") {\r\n this.entity = {\r\n ...this.entity,\r\n ...this.personEntity,\r\n };\r\n }\r\n if (\r\n this.processNodeObj &&\r\n this.processNodeObj.participantList &&\r\n this.processNodeObj.participantList.length > 0\r\n ) {\r\n this.processNodeObj.participantList.map((item) => {\r\n item["id"] = item["id"];\r\n });\r\n this.userList = this.processNodeObj.participantList;\r\n\r\n this.checkedArray = this.processNodeObj.participantList.map((item) => {\r\n return {\r\n type: 3,\r\n id: item.id,\r\n name: item.name || item.realName,\r\n subjectId: item.subjectId,\r\n };\r\n });\r\n this.$emit(\r\n "update:modelValue",\r\n this.userList.map((item) => item.id)\r\n );\r\n this.$emit("select", this.userList);\r\n }\r\n // console.log(this.entity.request);\r\n // this.entity.request = {\r\n // get: 222,\r\n // post: 444,\r\n // };\r\n this.gePostUsers();\r\n },\r\n methods: {\r\n getSubjectName() {\r\n let rData = "";\r\n if (this.processNodeObj.humanPerformerName == "固定单位") {\r\n rData = this.processNodeObj.routeTxt.companyIds[0]["name"];\r\n }\r\n return rData;\r\n },\r\n gePostUsers() {\r\n if (this.processNodeObj.humanPerformerName == "固定角色/岗位") {\r\n let { routeTxt } = this.processNodeObj;\r\n let taskPostIds = {\r\n taskDefId: this.processNodeObj.id,\r\n postIds: [],\r\n };\r\n routeTxt.postList.map((item) => {\r\n taskPostIds.postIds.push(item["postId"]);\r\n });\r\n if (routeTxt.postList && routeTxt.postList.length > 0) {\r\n api.common\r\n .getTaskAuditor(\r\n\t\t\t\tthis.personEntity._businessDeptId ? this.personEntity._businessDeptId : \r\n\t\t\t\t this.processNodeObj.taskNode ? this.processNodeObj.taskNode[0]["vars"]._businessDeptId : \'\',\r\n [taskPostIds]\r\n )\r\n .then((e) => {\r\n let users = [];\r\n let allUsers = [];\r\n let sign = false;\r\n e.data.map((item) => {\r\n item.posts.map((_item) => {\r\n allUsers.push(..._item["users"])\r\n if (_item["users"].length == 1) {\r\n users.push(..._item["users"]);\r\n } else {\r\n sign = true;\r\n }\r\n });\r\n });\r\n if (\r\n users.length > this.entity.maxMultiple &&\r\n this.entity.maxMultiple != 0\r\n )\r\n sign = true;\r\n\r\n if (sign) users = [];\r\n\r\n if (allUsers.length == 0) {\r\n this.noPostOption = true;\r\n return;\r\n }\r\n if (users.length > 0) {\r\n this.onePostUser = true;\r\n this.handleCallback(users);\r\n }\r\n this.entity.orgType = [5];\r\n this.entity.codeType = [8];\r\n e.data[0].posts.map((item) => {\r\n this.positionArray.push({\r\n ...item,\r\n\t\t\t\t projectPost: this.personEntity._businessDeptId || (this.processNodeObj.taskNode && this.processNodeObj.taskNode[0]["vars"]._businessDeptId) ? false : true,\r\n id: item.users.map((item) => item.id),\r\n });\r\n });\r\n });\r\n }\r\n }\r\n },\r\n getDeptCode(type) {\r\n let rData = "";\r\n if (this.processNodeObj.humanPerformerName == "固定部门") {\r\n if (\r\n type == "1" &&\r\n this.processNodeObj.routeTxt.departmentIds.length == 1\r\n ) {\r\n rData = this.processNodeObj.routeTxt.departmentIds[0]["rangeId"];\r\n }\r\n if (\r\n type == "0" &&\r\n this.processNodeObj.routeTxt.departmentIds.length > 1\r\n ) {\r\n rData = this.processNodeObj.routeTxt.departmentIds.map(\r\n (item) => item["rangeId"]\r\n );\r\n }\r\n }\r\n return rData;\r\n },\r\n handleCallback(e) {\r\n console.log("========handleCallback", e);\r\n this.userList = e;\r\n this.checkedArray = this.userList.map((item) => {\r\n return {\r\n type: 3,\r\n id: item.id,\r\n name: item.name || item.realName,\r\n subjectId: item.subjectId,\r\n };\r\n });\r\n this.$emit(\r\n "update:modelValue",\r\n this.userList.map((item) => item.id)\r\n );\r\n this.$emit("select", this.userList);\r\n },\r\n handleClose(index) {\r\n this.userList.splice(index, 1);\r\n this.checkedArray = this.userList.map((item) => {\r\n return {\r\n type: 3,\r\n id: item.id,\r\n name: item.name || item.realName,\r\n subjectId: item.subjectId,\r\n };\r\n });\r\n this.$emit(\r\n "update:modelValue",\r\n this.userList.map((item) => item.id)\r\n );\r\n this.$emit("select", this.userList);\r\n },\r\n searchIntervalFunc() {\r\n // console.log(searchTime)\r\n if (this.searchTime > 0) this.searchTime -= 100;\r\n if (this.searchTime == 0) {\r\n this.searchTime = -1;\r\n if (this.searchParam && !(this.items && this.items.length > 0))\r\n api.org.list(this.searchParam).then(async (res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n let obj = res.data.map((o) => {\r\n o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n o.deptName = o.deptName;\r\n o.alisName = o.alisName;\r\n return o;\r\n });\r\n this.treeSearchOptions = obj;\r\n await this.$nextTick();\r\n this.$refs.deptTree.forest.normalizedOptions.forEach((o) => {\r\n o.isBranch = false;\r\n });\r\n await this.$nextTick();\r\n this.$refs.deptTree.handleLocalSearch();\r\n }\r\n });\r\n else {\r\n this.treeSearchOptions = null;\r\n }\r\n }\r\n },\r\n searchChange(param) {\r\n this.searchParam = param;\r\n this.searchTime = 500;\r\n console.log(param, this.deptTree);\r\n },\r\n onSelect(node, instanceId) {\r\n this.$emit("update:modelValue", this.selectModel);\r\n this.$emit("select", node);\r\n },\r\n onInput(value, instanceId) {\r\n if (\r\n this.max > 0 &&\r\n this.multiple &&\r\n value.length > this.max &&\r\n value.length > this.max\r\n ) {\r\n this.$refs.deptTree.clear();\r\n this.$refs.deptTree.forest.selectedNodeIds = this.selectModel;\r\n this.$refs.deptTree.select(this.selectModel);\r\n console.log(this.$refs.deptTree.forest.selectedNodeIds);\r\n console.log(value);\r\n ElMessage.warning(`最多选择 ${this.max} 人`);\r\n } else {\r\n this.selectModel = value;\r\n this.$emit("update:modelValue", this.selectModel);\r\n }\r\n },\r\n normalizer(node) {\r\n if (node.children && !node.children.length) {\r\n delete node.children;\r\n }\r\n if (node.leaf) {\r\n let label = `${node.deptName} - ${node.label}(${node.phone})`;\r\n if ((this.isAlis || this.isAlisInject) && node.alisName)\r\n label += "participantList -- " + node.alisName;\r\n if (this.$refs.deptTree.trigger.searchQuery) {\r\n label += `(${this.$refs.deptTree.trigger.searchQuery})`;\r\n }\r\n return {\r\n id: node.id,\r\n label: label,\r\n leaf: node.leaf,\r\n phone: node.phone,\r\n deptName: node.deptName,\r\n alisName: node.alisName,\r\n };\r\n }\r\n return {\r\n id: node.id,\r\n label: node.label,\r\n leaf: node.leaf,\r\n phone: node.phone,\r\n children: node.children,\r\n deptName: node.deptName,\r\n alisName: node.alisName,\r\n };\r\n },\r\n async loadTreeOptions({ action, parentNode, callback, instanceId }) {\r\n if (action === LOAD_ROOT_OPTIONS) {\r\n if (this.items) {\r\n let obj = this.items.map((o) => {\r\n o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n return o;\r\n });\r\n this.$set(this, "treeOptions", obj);\r\n } else\r\n api.org.list().then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n let obj = res.data.map((o) => {\r\n o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n return o;\r\n });\r\n if (this.defaultOption) {\r\n obj = [...obj, ...this.defaultOption];\r\n }\r\n this.$set(this, "treeOptions", obj);\r\n }\r\n });\r\n } else if (action === LOAD_CHILDREN_OPTIONS) {\r\n let deptId = parentNode.id;\r\n let subjectId = "";\r\n if (parentNode.orgType == $enum.UserType.主体) {\r\n subjectId = parentNode.id;\r\n deptId = "";\r\n }\r\n if (parentNode.orgType == $enum.UserType.群组) {\r\n api.org.findTeamMember("", deptId).then((res) => {\r\n let obj = res.data.map((o) => {\r\n // o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n // o.leaf =true;\r\n return o;\r\n });\r\n parentNode.children = obj;\r\n callback();\r\n });\r\n return;\r\n }\r\n api.org.list("", deptId, subjectId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n let obj = res.data.map((o) => {\r\n if (!o.leaf) o.children = null;\r\n o.label = o.name;\r\n o.id = o.id;\r\n return o;\r\n });\r\n parentNode.children = obj;\r\n callback();\r\n }\r\n });\r\n }\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n.staffTree {\r\n line-height: initial;\r\n}\r\n.staff-tree-btn {\r\n color: rgb(19, 137, 255);\r\n font-size: 14px;\r\n cursor: pointer;\r\n}\r\n</style>\r\n']},media:void 0})},D,"data-v-61e6d5d3",false,undefined,!1,k,void 0,void 0),j=require("./assets/xiazai.png"),E=require("./assets/yulan.png");const L={props:{dataList:{}},data:()=>({dialogImageUrl:"",dialogVisible:!1,xiazai:j,yulan:E}),computed:{sortData(){return this.dataList.sort((e,n)=>o(e.uploadTime).valueOf()-o(n.uploadTime).valueOf())}},methods:{getExt(e){if(!e)return"";let n=e.lastIndexOf(".");return e.substring(n+1).toLocaleLowerCase()},isAssetTypeAnImage(e){let n=this.getExt(e);return-1!==["png","jpg","jpeg","bmp","gif","webp","psd","svg","tiff"].indexOf(n.toLowerCase())},fileNameLastof(e,n=0){if(-1==e.indexOf("http")&&(n=0),!e)return;let r="/";-1!=e.indexOf("\\")&&(r="\\");let t=e,s=t.lastIndexOf(r);return t.substr(s+1+n,t.length)},formatSize(e){if(!e)return"";var n=1024;return e<n?e+"B":e<Math.pow(n,2)?(e/n).toFixed(2)+"KB":e<Math.pow(n,3)?(e/Math.pow(n,2)).toFixed(2)+"MB":e<Math.pow(n,4)?(e/Math.pow(n,3)).toFixed(2)+"G":(e/Math.pow(n,4)).toFixed(2)+"T"},handleDownload(e){let n=e.url||e.response.data.url;n&&this.downloadFile(n,e.name)},downloadFile:(e,n)=>{var r=document.createElement("a");r.download=n,r.style.display="none";var t=new Blob([e]);r.href=URL.createObjectURL(t),document.body.appendChild(r),r.click(),document.body.removeChild(r)},getFileUrl(e){let n=e.url||e.response.data.url;return this.isAssetTypeAnImage(n)?n:"zip"==this.getExt(n)||"rar"==this.getExt(n)?require("./assets/zip.png"):"doc"==this.getExt(n)||"docx"==this.getExt(n)?require("./assets/doc.png"):"xls"==this.getExt(n)||"xlsx"==this.getExt(n)?require("./assets/xls.png"):"pdf"==this.getExt(n)?require("./assets/pdf.png"):require("./assets/qt.png")},handlePictureCardPreview(e){let n=e.url||e.response.data.url,r=n.lastIndexOf(".");"zip"==n.substring(r+1)||"rar"==n.substring(r+1)?window.open(n):n.includes("https")?window.open(`https://wdyl.ddzg.cn:8089/?ssl=1&furl=${n}`):window.open(`https://wdyl.ddzg.cn:8089/?ssl=0&furl=${n}`)}}};var _=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{staticClass:"view-file"},[r("p",{staticClass:"lable"},[e._v("查看附件")]),e._v(" "),e._l(e.sortData,function(n,t){return r("div",{staticClass:"file-info"},[r("div",{staticClass:"name"},[r("el-image",{attrs:{src:e.getFileUrl(n),fit:"fill"}}),e._v(" "),r("div",[r("span",[e._v(" "+e._s(e.fileNameLastof(n.name)))]),e._v(" "),r("b",{staticClass:"time"},[e._v(e._s(n.uploadTime)+" | "+e._s(e.formatSize(n.size)))])])],1),e._v(" "),r("div",{staticClass:"op"},[r("div",{on:{click:function(r){return e.handlePictureCardPreview(n)}}},[r("el-image",{attrs:{src:e.yulan,fit:"fill"}}),e._v("\n 预览\n ")],1),e._v(" "),r("div",{on:{click:function(r){return e.handleDownload(n)}}},[r("el-image",{attrs:{src:e.xiazai,fit:"fill"}}),e._v("\n 下载\n ")],1)])])}),e._v(" "),r("el-dialog",{attrs:{"append-to-body":""},model:{value:e.dialogVisible,callback:function(n){e.dialogVisible=n},expression:"dialogVisible"}},[r("el-image",{staticStyle:{width:"100%"},attrs:{src:e.dialogImageUrl,alt:"Preview Image"}})],1)],2)};_._withStripped=!0;const P=I({render:_,staticRenderFns:[]},function(e){e&&e("data-v-31b9e4ca_0",{source:".view-file[data-v-31b9e4ca] {\n max-height: 400px;\n overflow: auto;\n padding: 4px 11px;\n}\n.view-file .time[data-v-31b9e4ca] {\n font-weight: 400;\n}\n.view-file .lable[data-v-31b9e4ca] {\n font-size: 16px;\n margin-bottom: 30px;\n margin-top: 0;\n color: #333;\n}\n.view-file .file-info[data-v-31b9e4ca] {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.view-file .file-info .name[data-v-31b9e4ca] {\n width: 100%;\n flex: 1;\n color: #000;\n display: flex;\n align-items: flex-start;\n}\n.view-file .file-info .name .el-image[data-v-31b9e4ca] {\n flex: none;\n width: 36px;\n height: 40px;\n margin-right: 14px;\n}\n.view-file .file-info .name > div[data-v-31b9e4ca] {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n}\n.view-file .file-info .name span[data-v-31b9e4ca] {\n display: inline-block;\n text-overflow: -o-ellipsis-lastline;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.view-file .file-info .name b[data-v-31b9e4ca] {\n color: #999999;\n}\n.view-file .op[data-v-31b9e4ca] {\n display: flex;\n align-items: center;\n width: 150px;\n}\n.view-file .op > div[data-v-31b9e4ca] {\n display: flex;\n align-items: center;\n margin-left: 20px;\n cursor: pointer;\n}\n.view-file .op .el-image[data-v-31b9e4ca] {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n}\n\n/*# sourceMappingURL=view-file.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\view-file.vue","view-file.vue"],names:[],mappings:"AA8JA;EACA,iBAAA;EACA,cAAA;EACA,iBAAA;AC7JA;AD8JA;EACA,gBAAA;AC5JA;AD8JA;EACA,eAAA;EACA,mBAAA;EACA,aAAA;EACA,WAAA;AC5JA;AD8JA;EACA,aAAA;EACA,mBAAA;EACA,mBAAA;AC5JA;AD6JA;EACA,WAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;EACA,uBAAA;AC3JA;AD6JA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;AC3JA;AD6JA;EACA,aAAA;EACA,sBAAA;EACA,2BAAA;AC3JA;AD6JA;EACA,qBAAA;EACA,mCAAA;EACA,gBAAA;EACA,uBAAA;EACA,oBAAA;EACA,qBAAA;EACA,aAAA;EACA,4BAAA;AC3JA;AD6JA;EACA,cAAA;AC3JA;ADgKA;EACA,aAAA;EACA,mBAAA;EACA,YAAA;AC9JA;AD+JA;EACA,aAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;AC7JA;AD+JA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;AC7JA;;AAEA,wCAAwC",file:"view-file.vue",sourcesContent:["<template>\r\n\r\n <div class=\"view-file\">\r\n <p class=\"lable\">查看附件</p>\r\n <div class=\"file-info\" v-for=\"(item,index) in sortData\">\r\n <div class=\"name\">\r\n <el-image :src=\"getFileUrl(item)\" fit=\"fill\"></el-image>\r\n <div>\r\n <span> {{ fileNameLastof(item.name) }}</span>\r\n <b class=\"time\">{{item.uploadTime}} | {{ formatSize(item.size) }}</b>\r\n </div>\r\n </div>\r\n\r\n <div class=\"op\">\r\n <div @click=\"handlePictureCardPreview(item)\">\r\n <el-image :src=\"yulan\" fit=\"fill\"></el-image>\r\n 预览\r\n </div>\r\n <div @click=\"handleDownload(item)\">\r\n <el-image :src=\"xiazai\" fit=\"fill\"></el-image>\r\n 下载\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <el-dialog v-model=\"dialogVisible\" append-to-body>\r\n <el-image :src=\"dialogImageUrl\" alt=\"Preview Image\" style=\"width: 100%;\" ></el-image>\r\n </el-dialog>\r\n </div>\r\n\r\n\r\n</template>\r\n\r\n<script>\r\n// import yulan from '../img/yulan.png'\r\n// import xiazai from '../img/xiazai.png'\r\n// import docIcon from '@/app/img/doc.png'\r\n// import pdfIcon from '@/app/img/pdf.png'\r\n// import xlsIcon from '@/app/img/xls.png'\r\n// import imgIcon from '@/app/img/img.png'\r\n// import zipIcon from '@/app/img/zip.png'\r\n// import { UploadFile } from 'element-plus'\r\nimport dayjs from 'dayjs';\r\n\r\n\r\n// import { ref } from 'vue'\r\nconst xiazai = require('./assets/xiazai.png')\r\nconst yulan = require('./assets/yulan.png')\r\n\r\n\r\nexport default{\r\n props:{\r\n dataList:{}\r\n },\r\n data(){\r\n return{\r\n dialogImageUrl:'',\r\n dialogVisible: false,\r\n xiazai,\r\n yulan\r\n }\r\n },\r\n computed:{\r\n sortData(){\r\n return this.dataList.sort((a,b)=>{\r\n return dayjs(a.uploadTime).valueOf() - dayjs(b.uploadTime).valueOf()\r\n })\r\n }\r\n },\r\n methods:{\r\n getExt(url){\r\n if (!url) return \"\";\r\n //获取最后一个.的位置\r\n let index = url.lastIndexOf(\".\");\r\n let ext = url.substring(index + 1);\r\n return ext.toLocaleLowerCase();\r\n },\r\n isAssetTypeAnImage(url) {\r\n //获取后缀\r\n let ext = this.getExt(url);\r\n return [\r\n 'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].\r\n indexOf(ext.toLowerCase()) !== -1;\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 formatSize (size) {\r\n if (!size) return '';\r\n var num = 1024.0; //byte\r\n if (size < num) return size + 'B';\r\n if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + 'KB'; //kb\r\n if (size < Math.pow(num, 3)) return (size / Math.pow(num, 2)).toFixed(2) + 'MB'; //M\r\n if (size < Math.pow(num, 4)) return (size / Math.pow(num, 3)).toFixed(2) + 'G'; //G\r\n return (size / Math.pow(num, 4)).toFixed(2) + 'T'; //T\r\n },\r\n handleDownload(uploadFile){\r\n let url = uploadFile.url || uploadFile.response.data.url;\r\n if (url)\r\n this.downloadFile(url,uploadFile.name)\r\n },\r\n downloadFile: (fileurl, filename) => {\r\n //fileurl文件地址(一般是接口返回) filename文件下载后的名字\r\n var a = document.createElement(\"a\");\r\n a.download = filename; //下载后文件名\r\n a.style.display = \"none\";\r\n var blob = new Blob([fileurl]); // 字符内容转变成blob地址 二进制地址\r\n a.href = URL.createObjectURL(blob);\r\n document.body.appendChild(a);\r\n a.click(); // 触发点击\r\n document.body.removeChild(a); // 然后移除\r\n },\r\n getFileUrl(uploadFile){\r\n let url = uploadFile.url || uploadFile.response.data.url;\r\n\r\n if (this.isAssetTypeAnImage(url)) {\r\n return url;\r\n } else if (this.getExt(url) == \"zip\" || this.getExt(url) == \"rar\") {\r\n return require('./assets/zip.png');\r\n } else if (this.getExt(url) == \"doc\" || this.getExt(url) == \"docx\") {\r\n return require('./assets/doc.png');\r\n } else if (this.getExt(url) == \"xls\" || this.getExt(url) == \"xlsx\") {\r\n return require('./assets/xls.png');\r\n } else if (this.getExt(url) == \"pdf\") {\r\n return require('./assets/pdf.png');\r\n }\r\n return require('./assets/qt.png');\r\n },\r\n handlePictureCardPreview(uploadFile){\r\n let url = uploadFile.url || uploadFile.response.data.url;\r\n let index = url.lastIndexOf(\".\");\r\n if (url.substring(index + 1) == \"zip\" || url.substring(index + 1) == \"rar\") {\r\n window.open(url);\r\n } else {\r\n if (url.includes(\"https\"))\r\n window.open(`https://wdyl.ddzg.cn:8089/?ssl=1&furl=${url}`);\r\n else\r\n window.open(`https://wdyl.ddzg.cn:8089/?ssl=0&furl=${url}`);\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\n<\/script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\r\n .view-file{\r\n max-height: 400px;\r\n overflow: auto;\r\n padding: 4px 11px;\r\n .time{\r\n font-weight: 400;\r\n }\r\n .lable{\r\n font-size: 16px;\r\n margin-bottom: 30px;\r\n margin-top: 0;\r\n color: #333;\r\n }\r\n .file-info{\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n .name{\r\n width: 100%;\r\n flex: 1;\r\n color: #000;\r\n display: flex;\r\n align-items: flex-start;\r\n\r\n .el-image{\r\n flex: none;\r\n width: 36px;\r\n height: 40px;\r\n margin-right: 14px;\r\n }\r\n &>div{\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n }\r\n span{\r\n display: inline-block;\r\n text-overflow: -o-ellipsis-lastline;\r\n overflow: hidden;\t\t\t\t//溢出内容隐藏\r\n text-overflow: ellipsis;\t\t//文本溢出部分用省略号表示\r\n display: -webkit-box;\t\t\t//特别显示模式\r\n -webkit-line-clamp: 2;\t\t\t//行数\r\n line-clamp: 2;\r\n -webkit-box-orient: vertical;\t//盒子中内容竖直排列\r\n }\r\n b{\r\n color: #999999;\r\n // margin-top: 10px;\r\n }\r\n }\r\n }\r\n .op{\r\n display: flex;\r\n align-items: center;\r\n width: 150px;\r\n &>div{\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n cursor: pointer;\r\n }\r\n .el-image{\r\n width: 16px;\r\n height: 16px;\r\n margin-right: 8px;\r\n }\r\n }\r\n }\r\n</style>\r\n",".view-file {\n max-height: 400px;\n overflow: auto;\n padding: 4px 11px;\n}\n.view-file .time {\n font-weight: 400;\n}\n.view-file .lable {\n font-size: 16px;\n margin-bottom: 30px;\n margin-top: 0;\n color: #333;\n}\n.view-file .file-info {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.view-file .file-info .name {\n width: 100%;\n flex: 1;\n color: #000;\n display: flex;\n align-items: flex-start;\n}\n.view-file .file-info .name .el-image {\n flex: none;\n width: 36px;\n height: 40px;\n margin-right: 14px;\n}\n.view-file .file-info .name > div {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n}\n.view-file .file-info .name span {\n display: inline-block;\n text-overflow: -o-ellipsis-lastline;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.view-file .file-info .name b {\n color: #999999;\n}\n.view-file .op {\n display: flex;\n align-items: center;\n width: 150px;\n}\n.view-file .op > div {\n display: flex;\n align-items: center;\n margin-left: 20px;\n cursor: pointer;\n}\n.view-file .op .el-image {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n}\n\n/*# sourceMappingURL=view-file.vue.map */"]},media:void 0})},L,"data-v-31b9e4ca",false,undefined,!1,k,void 0,void 0);const B={components:{staffTree:O},props:{param:Object},data:()=>({reason:"",targetUser:[]}),methods:{getRes(){return{targetUser:this.targetUser}},confirm(n,r){if(!this.targetUser||0==this.targetUser.length)return e.warning("请选择审核人"),!1;if(!this.reason)return e.warning("请填写加签原因"),!1;if(this.reason.length>200)return e.warning("加签原因不能超过200个字"),!1;let t=this.targetUser.join(",")||"";n&&n(),r(),f.tis.addMultiInstance({taskId:this.param.taskInstId,assignee:t,comment:this.reason}).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})}}};var M=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"加签人员",rules:[{required:!0,message:"请选择加签人员"}]}},[r("staffTree",{attrs:{personType:e.param.personType,personEntity:e.param.personEntity,multiple:"",max:5},model:{value:e.targetUser,callback:function(n){e.targetUser=n},expression:"targetUser"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"加签原因",rules:[{required:!0,message:"加签原因不能为空"}]}},[r("el-input",{staticClass:"formInput",attrs:{rows:5,maxlength:"200","show-word-limit":"",resize:"none",type:"textarea",placeholder:"请输入加签原因(200字以内)"},model:{value:e.reason,callback:function(n){e.reason=n},expression:"reason"}})],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};M._withStripped=!0;const $=I({render:M,staticRenderFns:[]},function(e){e&&e("data-v-2b96c561_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\counterSign.vue"],names:[],mappings:";AAuFA,uBAAA",file:"counterSign.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="加签人员"\r\n :rules="[{ required: true, message: \'请选择加签人员\' }]"\r\n >\r\n <staffTree :personType="param.personType" :personEntity="param.personEntity" v-model="targetUser" multiple :max="5"></staffTree>\r\n </el-form-item>\r\n <el-form-item\r\n label="加签原因"\r\n :rules="[{ required: true, message: \'加签原因不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="reason"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n type="textarea"\r\n placeholder="请输入加签原因(200字以内)"\r\n class="formInput"\r\n />\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n reason: "",\r\n targetUser: [],\r\n };\r\n },\r\n methods: {\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n\r\n confirm(preposition,loading) {\r\n if (!this.targetUser || this.targetUser.length == 0) {\r\n ElMessage.warning("请选择审核人");\r\n return false;\r\n }\r\n if (!this.reason) {\r\n ElMessage.warning("请填写加签原因");\r\n return false;\r\n }\r\n if (this.reason.length > 200) {\r\n ElMessage.warning("加签原因不能超过200个字");\r\n return false;\r\n }\r\n let ids = this.targetUser.join(",") || "";\r\n if (preposition)preposition();\r\n loading();\r\n api.tis\r\n .addMultiInstance({\r\n // processInstId: this.param.processInstId,\r\n taskId: this.param.taskInstId,\r\n assignee: ids,\r\n // adHocType: $enum.AdHocType.加签,\r\n comment: this.reason,\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},B,"data-v-2b96c561",false,undefined,!1,k,void 0,void 0);const F={props:{showLabel:!1},data:()=>({value:"",list:[]}),mounted(){this.getList()},methods:{addIdea(e){if(!e)return this.$message({type:"error",message:"请输入意见后重试"});this.$confirm(`将”${e}”设为常用意见。`,"操作信息提醒",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}).then(()=>{f.getAjaxObj().post("/auth/user/opinion/save",{opinionName:e}).then(e=>{e.success?(this.getList(),this.$message({type:"success",message:"设置成功"})):this.$message({type:"error",message:e.msg})})})},changeFun(){this.$emit("change",this.value),this.value=""},getList(){f.getAjaxObj().get("/auth/user/opinion/my","").then(e=>{this.list=e.data})},del(e){this.$confirm("此操作将永久删除该意见, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{f.getAjaxObj().get(`/auth/user/opinion/del/${e.opinionId}`,"").then(e=>{this.getList(),this.$message({type:"success",message:"删除成功"})})}).catch(()=>{})}}};var S=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-select",{staticClass:"select",attrs:{placeholder:"选择常用意见"},on:{change:e.changeFun},model:{value:e.value,callback:function(n){e.value=n},expression:"value"}},e._l(e.list,function(n,t){return r("el-option",{key:n.opinionId,attrs:{label:n.opinionName,value:n.opinionName}},[r("el-tooltip",{attrs:{effect:"dark","visible-arrow":!0,"popper-class":"pr-option-tooltip",content:n.opinionName,placement:"right"}},[r("div",{staticClass:"option-c"},[r("span",[e._v(e._s(n.opinionName))]),e._v(" "),r("i",{staticClass:"el-icon-delete",staticStyle:{float:"right"},on:{click:function(r){return r.stopPropagation(),e.del(n)}}})])])],1)}),1)],1)};S._withStripped=!0;const U=I({render:S,staticRenderFns:[]},function(e){e&&(e("data-v-562eb279_0",{source:".pr-option-tooltip {\n max-width: 200px;\n max-height: 100px;\n overflow: auto;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\commIdea.vue","commIdea.vue"],names:[],mappings:"AAyHA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;ACxHA;;AAEA,uCAAuC",file:"commIdea.vue",sourcesContent:['<template>\r\n <div>\r\n <el-select\r\n class="select"\r\n v-model="value"\r\n @change="changeFun"\r\n placeholder="选择常用意见"\r\n >\r\n <el-option\r\n :label="item.opinionName"\r\n :value="item.opinionName"\r\n v-for="(item, index) in list"\r\n :key="item.opinionId"\r\n >\r\n <el-tooltip\r\n effect="dark"\r\n :visible-arrow="true"\r\n popper-class="pr-option-tooltip"\r\n :content="item.opinionName"\r\n placement="right"\r\n >\r\n <div class="option-c">\r\n <span>{{ item.opinionName }}</span>\r\n <i\r\n @click.stop="del(item)"\r\n style="float: right"\r\n class="el-icon-delete"\r\n ></i>\r\n </div>\r\n </el-tooltip>\r\n </el-option>\r\n </el-select>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "../api";\r\n\r\nexport default {\r\n props: {\r\n showLabel: false,\r\n },\r\n data() {\r\n return {\r\n value: "",\r\n list: [],\r\n };\r\n },\r\n mounted() {\r\n this.getList();\r\n },\r\n methods: {\r\n addIdea(commentMsg) {\r\n if (!commentMsg)\r\n return this.$message({\r\n type: "error",\r\n message: "请输入意见后重试",\r\n });\r\n\r\n this.$confirm(`将”${commentMsg}”设为常用意见。`, "操作信息提醒", {\r\n confirmButtonText: "继续",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n }).then(() => {\r\n api\r\n .getAjaxObj()\r\n .post("/auth/user/opinion/save", {\r\n opinionName: commentMsg,\r\n })\r\n .then((e) => {\r\n if (e.success) {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "设置成功",\r\n });\r\n } else {\r\n this.$message({\r\n type: "error",\r\n message: e.msg,\r\n });\r\n }\r\n });\r\n });\r\n },\r\n changeFun() {\r\n this.$emit("change", this.value);\r\n this.value = "";\r\n },\r\n getList() {\r\n api\r\n .getAjaxObj()\r\n .get("/auth/user/opinion/my", "")\r\n .then((e) => {\r\n this.list = e.data;\r\n });\r\n },\r\n del(item) {\r\n this.$confirm("此操作将永久删除该意见, 是否继续?", "提示", {\r\n confirmButtonText: "确定",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n })\r\n .then(() => {\r\n api\r\n .getAjaxObj()\r\n .get(`/auth/user/opinion/del/${item.opinionId}`, "")\r\n .then((e) => {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "删除成功",\r\n });\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n },\r\n};\r\n<\/script>\r\n<style lang="scss">\r\n.pr-option-tooltip {\r\n max-width: 200px;\r\n max-height: 100px;\r\n overflow: auto;\r\n}\r\n</style>\r\n<style lang="scss" scoped>\r\n.select {\r\n width: 100%;\r\n ::v-deep .el-input__inner {\r\n border-radius: 4px;\r\n }\r\n}\r\n.option-c {\r\n display: flex;\r\n align-items: center;\r\n span {\r\n width: 378px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n i {\r\n font-size: 20px;\r\n color: #e57c7f;\r\n }\r\n}\r\n</style>\r\n',".pr-option-tooltip {\n max-width: 200px;\n max-height: 100px;\n overflow: auto;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */"]},media:void 0}),e("data-v-562eb279_1",{source:".select[data-v-562eb279] {\n width: 100%;\n}\n.select[data-v-562eb279] .el-input__inner {\n border-radius: 4px;\n}\n.option-c[data-v-562eb279] {\n display: flex;\n align-items: center;\n}\n.option-c span[data-v-562eb279] {\n width: 378px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.option-c i[data-v-562eb279] {\n font-size: 20px;\n color: #e57c7f;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\commIdea.vue","commIdea.vue"],names:[],mappings:"AAgIA;EACA,WAAA;AC/HA;ADgIA;EACA,kBAAA;AC9HA;ADiIA;EACA,aAAA;EACA,mBAAA;AC9HA;AD+HA;EACA,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;AC7HA;AD+HA;EACA,eAAA;EACA,cAAA;AC7HA;;AAEA,uCAAuC",file:"commIdea.vue",sourcesContent:['<template>\r\n <div>\r\n <el-select\r\n class="select"\r\n v-model="value"\r\n @change="changeFun"\r\n placeholder="选择常用意见"\r\n >\r\n <el-option\r\n :label="item.opinionName"\r\n :value="item.opinionName"\r\n v-for="(item, index) in list"\r\n :key="item.opinionId"\r\n >\r\n <el-tooltip\r\n effect="dark"\r\n :visible-arrow="true"\r\n popper-class="pr-option-tooltip"\r\n :content="item.opinionName"\r\n placement="right"\r\n >\r\n <div class="option-c">\r\n <span>{{ item.opinionName }}</span>\r\n <i\r\n @click.stop="del(item)"\r\n style="float: right"\r\n class="el-icon-delete"\r\n ></i>\r\n </div>\r\n </el-tooltip>\r\n </el-option>\r\n </el-select>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "../api";\r\n\r\nexport default {\r\n props: {\r\n showLabel: false,\r\n },\r\n data() {\r\n return {\r\n value: "",\r\n list: [],\r\n };\r\n },\r\n mounted() {\r\n this.getList();\r\n },\r\n methods: {\r\n addIdea(commentMsg) {\r\n if (!commentMsg)\r\n return this.$message({\r\n type: "error",\r\n message: "请输入意见后重试",\r\n });\r\n\r\n this.$confirm(`将”${commentMsg}”设为常用意见。`, "操作信息提醒", {\r\n confirmButtonText: "继续",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n }).then(() => {\r\n api\r\n .getAjaxObj()\r\n .post("/auth/user/opinion/save", {\r\n opinionName: commentMsg,\r\n })\r\n .then((e) => {\r\n if (e.success) {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "设置成功",\r\n });\r\n } else {\r\n this.$message({\r\n type: "error",\r\n message: e.msg,\r\n });\r\n }\r\n });\r\n });\r\n },\r\n changeFun() {\r\n this.$emit("change", this.value);\r\n this.value = "";\r\n },\r\n getList() {\r\n api\r\n .getAjaxObj()\r\n .get("/auth/user/opinion/my", "")\r\n .then((e) => {\r\n this.list = e.data;\r\n });\r\n },\r\n del(item) {\r\n this.$confirm("此操作将永久删除该意见, 是否继续?", "提示", {\r\n confirmButtonText: "确定",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n })\r\n .then(() => {\r\n api\r\n .getAjaxObj()\r\n .get(`/auth/user/opinion/del/${item.opinionId}`, "")\r\n .then((e) => {\r\n this.getList();\r\n this.$message({\r\n type: "success",\r\n message: "删除成功",\r\n });\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n },\r\n};\r\n<\/script>\r\n<style lang="scss">\r\n.pr-option-tooltip {\r\n max-width: 200px;\r\n max-height: 100px;\r\n overflow: auto;\r\n}\r\n</style>\r\n<style lang="scss" scoped>\r\n.select {\r\n width: 100%;\r\n ::v-deep .el-input__inner {\r\n border-radius: 4px;\r\n }\r\n}\r\n.option-c {\r\n display: flex;\r\n align-items: center;\r\n span {\r\n width: 378px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n i {\r\n font-size: 20px;\r\n color: #e57c7f;\r\n }\r\n}\r\n</style>\r\n',".select {\n width: 100%;\n}\n.select ::v-deep .el-input__inner {\n border-radius: 4px;\n}\n\n.option-c {\n display: flex;\n align-items: center;\n}\n.option-c span {\n width: 378px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.option-c i {\n font-size: 20px;\n color: #e57c7f;\n}\n\n/*# sourceMappingURL=commIdea.vue.map */"]},media:void 0}))},F,"data-v-562eb279",false,undefined,!1,k,void 0,void 0);const R={components:{staffTree:O,commIdea:U},props:{param:Object},data:()=>({commentMsg:"",targetName:"",targetUID:"",personEntity:{}}),watch:{param:{handler(e){this.personEntity={...e.personEntity,maxMultiple:1}},immediate:!0,deep:!0}},methods:{getRes(){return{targetUID:this.targetUID,targetName:this.targetName,commentMsg:this.commentMsg}},confirm(n,r){return this.targetUID?this.commentMsg?this.commentMsg.length>200?(e.warning("审批意见不能超过200个字"),!1):(n&&n(),r(),void f.tis.transferTask({taskId:this.param.taskInstId,assignee:this.targetUID.join(" "),comment:this.commentMsg}).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})):(e.warning("请输入审批意见"),!1):(e.warning("请选择转办人"),!1)}}};var z=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"转办人",rules:[{required:!0,message:"请选择转办人"}]}},[r("staffTree",{attrs:{personType:e.param.personType,personEntity:e.personEntity},model:{value:e.targetUID,callback:function(n){e.targetUID=n},expression:"targetUID"}})],1),e._v(" "),e.param.showCommIdea?r("el-form-item",{attrs:{label:"快捷回复"}},[r("commIdea",{ref:"commIdea",on:{change:function(n){return e.commentMsg=n}}})],1):e._e(),e._v(" "),r("el-form-item",{attrs:{label:"审批意见",rules:[{required:!0,message:"审批意见不能为空"}]}},[r("el-input",{attrs:{rows:5,maxlength:"200","show-word-limit":"",resize:"none",type:"textarea",placeholder:"请输入审批意见"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}}),e._v(" "),e.param.showCommIdea?r("div",{staticClass:"add-idea"},[r("span",{on:{click:function(n){return e.$refs.commIdea.addIdea(e.commentMsg)}}},[e._v("设置为常用意见")])]):e._e()],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};z._withStripped=!0;const V=I({render:z,staticRenderFns:[]},function(e){e&&e("data-v-37b590d8_0",{source:'\n@import "./content.css";\n.add-idea[data-v-37b590d8] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-37b590d8] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\delegateTask.vue"],names:[],mappings:";AAkHA,uBAAA;AACA;EACA,aAAA;EACA,oBAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA",file:"delegateTask.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="转办人"\r\n :rules="[{ required: true, message: \'请选择转办人\' }]"\r\n >\r\n <staffTree\r\n :personType="param.personType"\r\n :personEntity="personEntity"\r\n v-model="targetUID"\r\n ></staffTree>\r\n </el-form-item>\r\n <el-form-item label="快捷回复" v-if="param.showCommIdea">\r\n <commIdea ref="commIdea" @change="(e) => (commentMsg = e)" />\r\n </el-form-item>\r\n <el-form-item\r\n label="审批意见"\r\n :rules="[{ required: true, message: \'审批意见不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n type="textarea"\r\n placeholder="请输入审批意见"\r\n />\r\n <div class="add-idea" v-if="param.showCommIdea">\r\n <span @click="$refs[\'commIdea\'].addIdea(commentMsg)"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport commIdea from "./commIdea.vue";\r\n\r\nexport default {\r\n components: { staffTree, commIdea },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n targetName: "",\r\n targetUID: "",\r\n personEntity:{}\r\n };\r\n },\r\n watch:{\r\n param:{\r\n handler(val){\r\n this.personEntity ={ ...val.personEntity, maxMultiple:1 } \r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n }\r\n },\r\n methods: {\r\n getRes() {\r\n return {\r\n targetUID: this.targetUID,\r\n targetName: this.targetName,\r\n commentMsg: this.commentMsg,\r\n };\r\n },\r\n\r\n confirm(preposition,loading) {\r\n if (!this.targetUID) {\r\n ElMessage.warning("请选择转办人");\r\n return false;\r\n }\r\n if (!this.commentMsg) {\r\n ElMessage.warning("请输入审批意见");\r\n return false;\r\n }\r\n if (this.commentMsg.length > 200) {\r\n ElMessage.warning("审批意见不能超过200个字");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading()\r\n api.tis\r\n .transferTask({\r\n taskId: this.param.taskInstId,\r\n // targetUID: this.targetUID.join(" "),\r\n assignee: this.targetUID.join(" "),\r\n // commentMsg: this.commentMsg,\r\n comment: this.commentMsg,\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n</style>\r\n']},media:void 0})},R,"data-v-37b590d8",false,undefined,!1,k,void 0,void 0);const q={name:"userTask",components:{staffTree:O},props:{index:{type:Number,default:0},processNode:{require:!0},label:"",peopleLabel:"",lv1label:"",personType:"",personEntity:{type:Object,default:()=>{}},rules:{require:!1,type:Array}},data(){return{deptList:[],Enum:y,resultList:[],radioModel:{},checkList:[],targetUserId:"",targetUserList:[],processNodeObj:this.processNode,userTaskListData:{},personnelList:[]}},computed:{checkModelList(){let e=this.processNodeObj.branches.filter(e=>this.checkList.includes(e.incomingConditionItemList[0].compareValue));return this.resultList=e||[],this.resultList}},watch:{processNode:{handler(e,n){"userTask"==e.nodeType&&e.setPersonnel&&e.assignees&&e.assignees.length>0&&(this.targetUserId=e.assignees.map(e=>e.id)),e.userList&&1==e.userList.length&&(this.targetUserId=e.userList[0].userId),this.processNodeObj=e||{}},deep:!0}},mounted(){this.processNodeObj.childNode&&1==this.processNodeObj.childNode.length&&this.processNodeObj.type==v.单一分支&&(this.radioModel=this.processNodeObj.childNode[0])},methods:{isSelect(e){if(e.incomingConditionItemList[0]){let n=e.incomingConditionItemList[0].itemName.includes("selecd");return n&&(this.checkList.includes(e.name)||this.checkList.push(e.name)),n}return!1},fixPeopleChange(e){this.complete(e,this.processNodeObj)},selectChange(e){this.targetUserList=e},complete(e,n){n.vars=e,this.resultList.every(e=>e.vars)&&(this.processNodeObj.vars=this.resultList.map(e=>e.vars),this.$emit("complete",this.processNodeObj))},setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},getTreeData(e){if(e){if("固定部门"==e.humanPerformerName)return e.routeTxt.departmentIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=this.Enum.UserType.部门,n});if("固定单位"==e.humanPerformerName)return e.routeTxt.companyIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=this.Enum.UserType.主体,n});if("固定群组"==e.humanPerformerName)return e.routeTxt.teamList.map(e=>{let n={};return n.id=e.id,n.leaf=!1,n.name=e.teamName,n.orgType=this.Enum.UserType.群组,n})}},isOption:e=>"任意指定"==e||"固定部门"==e||"固定单位"==e||"固定角色/岗位"==e||"固定群组"==e,getValue(){let n=!0,r={multiNodeParticipant:{},vars:{}};if(this.processNodeObj.type&&this.processNodeObj.type!=this.Enum.ProcessNodeType.用户任务&&this.processNodeObj.type!=v.用户节点)for(let t in this.userTaskListData){let s=this.userTaskListData[t],i=this.$refs[s];if(i=Array.isArray(i)?i[0]:i,i){let t=i.getValue();if(t){if("exclusiveGateway"==this.processNodeObj.nodeType){if(!this.radioModel||!this.radioModel.id)return this.processNodeObj.name&&e.warning(`请选择 ${this.processNodeObj.name} 下一节点`),!1;this.radioModel.incomingConditionItemList&&this.radioModel.incomingConditionItemList.length>0&&(r.vars[this.radioModel.incomingConditionItemList[0].itemName]=this.radioModel.incomingConditionItemList[0].compareValue)}else if("inclusiveGateway"==this.processNodeObj.nodeType){if(!(this.resultList&&this.resultList.length>0))return this.processNodeObj.name&&e.warning(`请选择 ${this.processNodeObj.name} `),!1;this.resultList.forEach(e=>{0!==e.incomingConditionItemList.length&&e.incomingConditionItemList.forEach(e=>{e.itemName&&(r.vars[e.itemName]=e.compareValue)})})}r.multiNodeParticipant={...r.multiNodeParticipant,...t.multiNodeParticipant},r.vars={...r.vars,...t.vars}}else n=!1}}else if("exclusiveGateway"==this.processNodeObj.nodeType)for(let e in this.userTaskListData){let t=this.userTaskListData[e],s=this.$refs[t];if(s=Array.isArray(s)?s[0]:s,s){let e=s.getValue();e?(this.radioModel&&this.radioModel.nodeInfoDTO&&this.radioModel.nodeInfoDTO.id&&this.radioModel.nodeInfoDTO.incomingConditionItemList&&this.radioModel.nodeInfoDTO.incomingConditionItemList.length>0&&(r.vars[this.radioModel.nodeInfoDTO.incomingConditionItemList[0].itemName]=this.radioModel.nodeInfoDTO.incomingConditionItemList[0].compareValue),r.multiNodeParticipant={...r.multiNodeParticipant,...e.multiNodeParticipant},r.vars={...r.vars,...e.vars}):n=!1}}else if("inclusiveGateway"==this.processNodeObj.nodeType){if(!(this.resultList&&this.resultList.length>0))return this.processNodeObj&&"inclusiveGateway"==this.processNodeObj.nodeType?e.warning("请选择下一节点"):this.processNodeObj.nodeInfoDTO.name&&e.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} `),!1;this.resultList.forEach(e=>{const t=this.userTaskListData[e.nodeInfoDTO.id];let s=this.$refs[t];if(s=Array.isArray(s)?s[0]:s,s){let t=s.getValue();t?(0!==e.nodeInfoDTO.incomingConditionItemList.length&&e.nodeInfoDTO.incomingConditionItemList.forEach(e=>{e.itemName&&(r.vars[e.itemName]=e.compareValue)}),r.multiNodeParticipant={...r.multiNodeParticipant,...t.multiNodeParticipant},r.vars={...r.vars,...t.vars}):n=!1}})}else if(this.processNodeObj.assignee&&Array.isArray(this.processNodeObj.assignee)&&this.processNodeObj.setPersonnel&&!this.isOption(this.processNodeObj.humanPerformerName)&&(!this.processNodeObj.nodeInfoDTO||this.processNodeObj.nodeInfoDTO.assignee&&Array.isArray(this.processNodeObj.nodeInfoDTO.assignee)&&this.processNodeObj.nodeInfoDTO.setPersonnel&&!this.isOption(this.processNodeObj.nodeInfoDTO.humanPerformerName)))this.processNodeObj.incomingConditionItemList&&this.processNodeObj.incomingConditionItemList.length>0&&(r.vars[this.processNodeObj.incomingConditionItemList[0].itemName]=this.processNodeObj.incomingConditionItemList[0].compareValue);else if(this.targetUserId&&this.targetUserId.length>0)r.multiNodeParticipant={},r.multiNodeParticipant[this.processNode.nodeInfoDTO?this.processNodeObj.nodeInfoDTO.id:this.processNodeObj.id]=Array.isArray(this.targetUserId)?this.targetUserId:[this.targetUserId];else if(!1!==this.processNodeObj.REQUIRED||this.processNodeObj.nodeInfoDTO&&!1!==this.processNodeObj.nodeInfoDTO.REQUIRED)return this.processNodeObj.nodeInfoDTO?this.processNodeObj.nodeInfoDTO.name&&e.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} 处理人`):this.processNodeObj.name&&e.warning(`请选择 ${this.processNodeObj.name} 处理人`),!1;return n?r:n},getLabel(e){let n="";return e.incomingConditionItemList.length>0&&(n=e.incomingConditionItemList[0].compareValue),n||e.name||"后续节点"}}};var H=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{staticClass:"user-task"},["exclusiveGateway"==e.processNodeObj.nodeType&&e.processNodeObj.branches&&e.processNodeObj.branches.length>=1?[e.processNodeObj.branches.length>1?r("el-form-item",{attrs:{label:e.processNodeObj.name||"下一节点"}},[r("el-radio-group",{staticClass:"ml-4",model:{value:e.radioModel,callback:function(n){e.radioModel=n},expression:"radioModel"}},e._l(e.processNodeObj.branches,function(n){return r("el-radio",{key:n.id,attrs:{label:n,size:"large"}},[e._v(e._s(n.name?n.name:n.nodeInfoDTO?n.nodeInfoDTO.name:""))])}),1)],1):e._e(),e._v(" "),e.radioModel.id?[e.radioModel.nodeInfoDTO&&"userTask"==e.radioModel.nodeInfoDTO.nodeType||e.radioModel.nodeInfoDTO&&"inclusiveGateway"==e.radioModel.nodeInfoDTO.nodeType?[r("userTask",{key:e.radioModel.nodeInfoDTO.id,ref:e.setItemRef(e.radioModel.nodeInfoDTO.id),attrs:{personType:e.personType,personEntity:e.personEntity,"process-node":Object.assign({},e.radioModel.nodeInfoDTO,{REQUIRED:!(1==e.radioModel.nodeInfoDTO.setPersonnel&&e.radioModel.nodeInfoDTO.assignees&&e.radioModel.nodeInfoDTO.assignees.length>0)}),rules:[{required:!0,message:"请选择处理人"}]}})]:e.radioModel.nodeInfoDTO&&"exclusiveGateway"==e.radioModel.nodeInfoDTO.nodeType?e._l(e.radioModel.nodeInfoDTO.branches,function(n){return r("userTask",{key:n.nodeInfoDTO.id,ref:e.setItemRef(n.nodeInfoDTO.id),refInFor:!0,attrs:{personType:e.personType,personEntity:e.personEntity,processNode:Object.assign({},n.nodeInfoDTO,{REQUIRED:!(1==n.nodeInfoDTO.setPersonnel&&n.nodeInfoDTO.assignees&&n.nodeInfoDTO.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})}):e._e()]:e.processNodeObj&&e.processNodeObj.branches&&1==e.processNodeObj.branches.length?e._l(e.processNodeObj.branches,function(n){return r("userTask",{key:n.nodeInfoDTO?n.nodeInfoDTO.id:n.id,ref:e.setItemRef(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),refInFor:!0,attrs:{personType:e.personType,personEntity:e.personEntity,"process-node":Object.assign({},n.nodeInfoDTO?n.nodeInfoDTO:n,{REQUIRED:!(1==n.nodeInfoDTO.setPersonnel&&n.nodeInfoDTO.assignees&&n.nodeInfoDTO.assignees.length>0)}),rules:[{required:!0,message:"请选择处理人"}]}})}):e._e()]:"inclusiveGateway"==e.processNodeObj.nodeType&&e.processNodeObj.branches&&e.processNodeObj.branches.length>0?[r("el-form-item",{attrs:{label:e.processNodeObj.name||"下一节点"}},[r("el-checkbox-group",{model:{value:e.checkList,callback:function(n){e.checkList=n},expression:"checkList"}},[e._l(e.processNodeObj.branches,function(n){return[e.isSelect(n.nodeInfoDTO?n.nodeInfoDTO:n)?r("el-checkbox",{key:"checkbox"+(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),attrs:{label:n.nodeInfoDTO?n.nodeInfoDTO.name:n.name,checked:!0,disabled:""}}):r("el-checkbox",{key:"checkbox1"+(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),attrs:{label:n.nodeInfoDTO?n.nodeInfoDTO.name:n.name}})]})],2)],1),e._v(" "),e._l(e.checkModelList,function(n){return r("userTask",{key:n.nodeInfoDTO?n.nodeInfoDTO.id:n.id,ref:e.setItemRef(n.nodeInfoDTO?n.nodeInfoDTO.id:n.id),refInFor:!0,attrs:{personType:e.personType,personEntity:e.personEntity,processNode:Object.assign({},n.nodeInfoDTO?n.nodeInfoDTO:n,{REQUIRED:n.nodeInfoDTO?!(1==n.nodeInfoDTO.setPersonnel&&n.nodeInfoDTO.assignees&&n.nodeInfoDTO.assignees.length>0):!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)})}})})]:e.processNodeObj.assignee&&e.processNodeObj.assignees&&!e.isOption(e.processNodeObj.humanPerformerName)?e._e():[r("el-form-item",{staticStyle:{"margin-bottom":"10px"},attrs:{label:e.lv1label||"节点名称"},scopedSlots:e._u([{key:"label",fn:function(n){return n.label,[r("div",{staticStyle:{"font-size":"16px"}},[e._v(e._s(e.lv1label||"节点名称"))])]}}])},[e._v(" "),r("b",{staticStyle:{"font-size":"16px"}},[e._v(e._s(e.processNodeObj.name))])]),e._v(" "),e.processNodeObj.routeTxt&&e.processNodeObj.routeTxt.length>0&&e.processNodeObj.userList&&e.processNodeObj.userList.length>0?r("el-form-item",{staticStyle:{"margin-bottom":"10px"},attrs:{label:e.peopleLabel||"所属范围"}},e._l(e.processNodeObj.routeTxt,function(n,t){return r("div",{key:n.type},[n.ids&&n.ids.length>0?r("div",[r("b",{staticClass:"include include-type",class:["include-"+n.type]},[e._v(e._s("user"==n.type?"用户":"dept"==n.type?"部门":"岗位"))]),e._v(" "),r("span",{staticClass:"include include-name"},[e._v(e._s(n.name))]),e._v(" "),t!==e.processNodeObj.routeTxt.length-1?r("div",{staticClass:"include include-assign",class:["include-assign-"+(n.assigneeRetain?"true":"false")]},[e._v(e._s("true"==e.processNodeObj.assigneeRetain?"且同时满足":"或者满足"))]):e._e()]):e._e()])}),0):e._e(),e._v(" "),r("el-form-item",{attrs:{label:e.label||"处理人",rules:e.rules||{}}},[e.processNodeObj.userList&&e.processNodeObj.userList.length>=2?r("el-select",{attrs:{multiple:-1==e.processNodeObj.loopCardinality},on:{change:e.fixPeopleChange},model:{value:e.targetUserId,callback:function(n){e.targetUserId=n},expression:"targetUserId"}},e._l(e.processNodeObj.userList,function(e,n){return r("el-option",{key:e.userId,attrs:{label:e.realName,value:e.userId}})}),1):e.processNodeObj.userList&&1==e.processNodeObj.userList.length?r("div",{staticClass:"setVal"},[e._v("\n "+e._s(e.processNodeObj.userList[0].realName)+"\n ")]):e.processNodeObj.setPersonnel&&e.processNodeObj.assignees?r("div",{staticClass:"setVal"},[e._v("\n "+e._s((e.processNodeObj.assignees||[]).map(function(e){return e.name||e.realName}).join(", "))+"\n ")]):r("staffTree",{attrs:{processNodeObj:e.processNodeObj,personType:e.personType,personEntity:e.personEntity,multiple:"",max:-1==e.processNodeObj.loopCardinality?1e3:1,items:e.getTreeData(e.processNodeObj)},on:{"update:modelValue":function(n){e.complete(n,e.processNodeObj)},select:e.selectChange},model:{value:e.targetUserId,callback:function(n){e.targetUserId=n},expression:"targetUserId"}})],1)]],2)};H._withStripped=!0;const W=I({render:H,staticRenderFns:[]},function(e){e&&e("data-v-ac30aa7a_0",{source:".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\userTask.vue","userTask.vue"],names:[],mappings:"AA8oBA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,yBAAA;EACA,uBAAA;AC7oBA;AD+oBA;EACA,YAAA;AC7oBA;AD8oBA;EACA,kBAAA;AC5oBA;AD8oBA;EACA,eAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,gBAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,iBAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,kBAAA;EACA,UAAA;EACA,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EACA,YAAA;AC5oBA;AD+oBA;EACA,mBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,WAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;AC7oBA;;AAEA,uCAAuC",file:"userTask.vue",sourcesContent:['<template>\r\n <div class="user-task">\r\n \x3c!-- <pre class="111">\r\n {{ JSON.stringify(processNodeObj, null, 2) }}\r\n </pre> --\x3e\r\n \x3c!-- 单选 --\x3e\r\n <template v-if="processNodeObj.nodeType == \'exclusiveGateway\' && processNodeObj.branches && processNodeObj.branches.length >= 1">\r\n \x3c!-- <div>进来这里</div> --\x3e\r\n <el-form-item\r\n :label="processNodeObj.name || \'下一节点\'"\r\n v-if="processNodeObj.branches.length > 1"\r\n >\r\n <el-radio-group v-model="radioModel" class="ml-4">\r\n <el-radio\r\n v-for="item in processNodeObj.branches"\r\n :key="item.id"\r\n :label="item"\r\n size="large"\r\n >{{ item.name ? item.name : (item.nodeInfoDTO ? item.nodeInfoDTO.name : \'\') }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n \x3c!-- <div>{{ \'id: \' + radioModel.id }}</div> --\x3e\r\n <template v-if="radioModel.id">\r\n \x3c!-- 直接是节点 --\x3e\r\n <template v-if="radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == \'userTask\'">\r\n <userTask\r\n :ref="setItemRef(radioModel.nodeInfoDTO.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(radioModel.nodeInfoDTO),\r\n REQUIRED: radioModel.nodeInfoDTO.setPersonnel == true && radioModel.nodeInfoDTO.assignees && radioModel.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="radioModel.nodeInfoDTO.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n \x3c!-- 多选 --\x3e\r\n <template v-else-if="radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == \'inclusiveGateway\'">\r\n <userTask\r\n :ref="setItemRef(radioModel.nodeInfoDTO.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(radioModel.nodeInfoDTO),\r\n REQUIRED: radioModel.nodeInfoDTO.setPersonnel == true && radioModel.nodeInfoDTO.assignees && radioModel.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="radioModel.nodeInfoDTO.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n \x3c!-- 单选 --\x3e\r\n <template v-else-if="radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == \'exclusiveGateway\'">\r\n <userTask\r\n v-for="item in radioModel.nodeInfoDTO.branches"\r\n :key="item.nodeInfoDTO.id"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :processNode="{ \r\n ...item.nodeInfoDTO,\r\n REQUIRED: item.nodeInfoDTO.setPersonnel == true && item.nodeInfoDTO.assignees && item.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(item.nodeInfoDTO.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template v-else-if="processNodeObj && processNodeObj.branches && processNodeObj.branches.length == 1">\r\n <userTask\r\n v-for="pitem in processNodeObj.branches"\r\n :ref="setItemRef(pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem),\r\n REQUIRED: pitem.nodeInfoDTO.setPersonnel == true && pitem.nodeInfoDTO.assignees && pitem.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n\r\n\r\n \x3c!-- <template v-if="processNodeObj.nodeType == \'exclusiveGateway\' && processNodeObj.branches && processNodeObj.branches.length == 1">\r\n <div>进来这里</div>\r\n <el-form-item\r\n :label="processNodeObj.name || \'下一节点\'"\r\n v-if="processNodeObj.branches.length > 1"\r\n >\r\n <el-radio-group v-model="radioModel" class="ml-4">\r\n <el-radio\r\n v-for="item in processNodeObj.branches"\r\n :key="item.id"\r\n :label="item"\r\n size="large"\r\n >{{ item.name }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <div>{{ \'id: \' + radioModel.id }}</div>\r\n \r\n <template v-if="processNodeObj && processNodeObj.branches && processNodeObj.branches.length > 0">\r\n <userTask\r\n v-for="pitem in processNodeObj.branches"\r\n :ref="setItemRef(pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ \r\n ...(pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem),\r\n REQUIRED: pitem.nodeInfoDTO.setPersonnel == true && pitem.nodeInfoDTO.assignees && pitem.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n :key="pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template> --\x3e\r\n \x3c!-- 多选 --\x3e\r\n <template\r\n v-else-if="\r\n processNodeObj.nodeType == \'inclusiveGateway\' &&\r\n processNodeObj.branches && processNodeObj.branches.length > 0\r\n "\r\n >\r\n <el-form-item :label="processNodeObj.name || \'下一节点\'">\r\n <el-checkbox-group v-model="checkList">\r\n <template v-for="item in processNodeObj.branches">\r\n <el-checkbox\r\n :label="item.nodeInfoDTO ? item.nodeInfoDTO.name : item.name"\r\n v-if="isSelect(item.nodeInfoDTO ? item.nodeInfoDTO : item)"\r\n :checked="true"\r\n disabled\r\n :key="\'checkbox\' + (item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)"\r\n />\r\n <el-checkbox\r\n :label="item.nodeInfoDTO ? item.nodeInfoDTO.name : item.name"\r\n v-else\r\n :key="\'checkbox1\' + (item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref="setItemRef(item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :key="item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id"\r\n v-for="item in checkModelList"\r\n :processNode="{ \r\n ...(item.nodeInfoDTO ? item.nodeInfoDTO : item),\r\n REQUIRED: item.nodeInfoDTO ? (item.nodeInfoDTO.setPersonnel == true && item.nodeInfoDTO.assignees && item.nodeInfoDTO.assignees.length > 0 ? false : true) : (item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true)\r\n }"\r\n >\r\n </userTask>\r\n </template>\r\n\r\n <template v-else-if="!processNodeObj.assignee || !processNodeObj.assignees || isOption(processNodeObj.humanPerformerName)">\r\n <el-form-item\r\n :label="lv1label || \'节点名称\'"\r\n style="margin-bottom: 10px"\r\n >\r\n <template v-slot:label="{ label }">\r\n \x3c!-- <b class="task-index">{{ (index + 1 ) }}</b> --\x3e\r\n <div style="font-size: 16px">{{ (lv1label || \'节点名称\') }}</div>\r\n </template>\r\n <b style="font-size: 16px">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item\r\n v-if="processNodeObj.routeTxt && processNodeObj.routeTxt.length > 0 && processNodeObj.userList && processNodeObj.userList.length >0"\r\n :label="peopleLabel || \'所属范围\'"\r\n style="margin-bottom: 10px"\r\n >\r\n <div v-for="(item, index) in processNodeObj.routeTxt" :key="item.type">\r\n <div v-if="item.ids && item.ids.length > 0">\r\n <b class="include include-type" :class="[\'include-\' + item.type]">{{ item.type == \'user\' ? \'用户\' : item.type == \'dept\' ? \'部门\' : \'岗位\' }}</b>\r\n <span class="include include-name">{{ item.name }}</span>\r\n <div class="include include-assign" :class="[\'include-assign-\' + (item.assigneeRetain ? \'true\' : \'false\')]" v-if="index !== processNodeObj.routeTxt.length - 1">{{ processNodeObj.assigneeRetain == \'true\' ? \'且同时满足\' : \'或者满足\' }}</div>\r\n </div>\r\n </div>\r\n </el-form-item>\r\n \x3c!-- 如果有固定的人 --\x3e\r\n <el-form-item :label="label || \'处理人\'" :rules="rules || {}">\r\n \x3c!-- 使用el-select --\x3e\r\n \x3c!-- 发起流程的时候 --\x3e\r\n <el-select v-if="processNodeObj.userList && processNodeObj.userList.length >= 2" v-model="targetUserId" :multiple="processNodeObj.loopCardinality == -1 ? true : false" @change="fixPeopleChange">\r\n <el-option\r\n v-for="(item, index) in processNodeObj.userList"\r\n :key="item.userId"\r\n :label="item.realName"\r\n :value="item.userId"\r\n ></el-option>\r\n </el-select>\r\n <div class="setVal" v-else-if="processNodeObj.userList && processNodeObj.userList.length == 1">\r\n {{ processNodeObj.userList[0].realName }}\r\n </div>\r\n \x3c!-- 审批流程的时候 --\x3e\r\n <div class="setVal" v-else-if="processNodeObj.setPersonnel && processNodeObj.assignees">\r\n {{ (processNodeObj.assignees || []).map(i => i.name || i.realName).join(\', \') }}\r\n </div>\r\n <staffTree\r\n v-else\r\n :processNodeObj="processNodeObj"\r\n v-model="targetUserId"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n @update:modelValue="\r\n (e) => {\r\n complete(e, processNodeObj);\r\n }\r\n "\r\n @select="selectChange"\r\n multiple\r\n :max="processNodeObj.loopCardinality == -1 ? 1000 : 1"\r\n :items="getTreeData(processNodeObj)"\r\n >\r\n </staffTree>\r\n </el-form-item>\r\n </template>\r\n \x3c!-- <template v-else>\r\n <el-form-item :label="lv1label || \'节点名称\'">\r\n <b style="font-size: 16px">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item :label="label || \'处理人\'">\r\n {{ \'--\' || processNodeObj.routeTxt.userNames }}\r\n </el-form-item>\r\n </template> --\x3e\r\n \x3c!-- <template v-else-if="processNodeObj.type == Enum.ProcessNodeType.单一分支">\r\n <el-form-item\r\n :label="processNodeObj.name || \'下一节点\'"\r\n v-if="processNodeObj.childNode.length > 1"\r\n >\r\n <el-radio-group v-model="radioModel" class="ml-4">\r\n <el-radio\r\n v-for="item in processNodeObj.childNode"\r\n :key="item.id"\r\n :label="item"\r\n size="large"\r\n >{{ getLabel(item) }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <template v-if="radioModel.id">\r\n <userTask\r\n :ref="setItemRef(radioModel.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :process-node="{ ...radioModel, taskNode: processNode.taskNode }"\r\n :key="radioModel.id"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template\r\n v-else-if="\r\n processNodeObj.type == Enum.ProcessNodeType.多选节点 &&\r\n processNodeObj.childNode.length > 0\r\n "\r\n >\r\n <el-form-item :label="processNodeObj.name || \'下一节点\'">\r\n <el-checkbox-group v-model="checkList">\r\n <template v-for="item in processNodeObj.childNode">\r\n <el-checkbox\r\n :label="getLabel(item)"\r\n v-if="isSelect(item)"\r\n :checked="true"\r\n disabled\r\n :key="\'checkbox\' + item.id"\r\n />\r\n <el-checkbox\r\n :label="getLabel(item)"\r\n v-else\r\n :key="\'checkbox1\' + item.id"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref="setItemRef(item.id)"\r\n :personType="personType"\r\n :personEntity="personEntity"\r\n :key="item.id"\r\n v-for="item in checkModelList"\r\n :processNode="{ ...item, taskNode: processNode.taskNode }"\r\n >\r\n </userTask>\r\n </template> --\x3e\r\n \x3c!-- <template v-else-if="processNodeObj.type == Enum.ProcessNodeType.结束事件">\r\n <el-form-item :label="lv1label || \'节点名称\'">\r\n <b style="font-size: 16px">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n </template> --\x3e\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport * as Enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\n// import userTask from "./userTask.vue"\r\nimport { Message as ElMessage } from "element-ui";\r\nimport api from "../api";\r\n\r\nexport default {\r\n name: "userTask",\r\n components: { staffTree },\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n processNode: { require: true },\r\n label: "",\r\n peopleLabel: "",\r\n lv1label: "",\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n rules: {\r\n require: false,\r\n type: Array,\r\n },\r\n },\r\n data() {\r\n return {\r\n deptList: [],\r\n Enum,\r\n resultList: [],\r\n radioModel: {},\r\n checkList: [],\r\n targetUserId: "",\r\n targetUserList: [],\r\n processNodeObj: this.processNode,\r\n userTaskListData: {},\r\n personnelList: [],\r\n };\r\n },\r\n computed: {\r\n checkModelList() {\r\n let arr = this.processNodeObj.branches.filter((o) =>\r\n {\r\n return this.checkList.includes(o.incomingConditionItemList[0].compareValue)\r\n }\r\n );\r\n\r\n this.resultList = arr || [];\r\n return this.resultList;\r\n },\r\n },\r\n watch: {\r\n processNode: {\r\n handler(newVal, oldVal) {\r\n // 如果是长度为1,固定\r\n console.log(newVal, \'processNodeObj\')\r\n if (newVal.nodeType == \'userTask\' && newVal.setPersonnel && newVal.assignees && newVal.assignees.length > 0) {\r\n this.targetUserId = newVal.assignees.map(i => i.id)\r\n }\r\n if (newVal.userList && newVal.userList.length == 1) {\r\n this.targetUserId = newVal.userList[0].userId\r\n }\r\n this.processNodeObj = newVal || {};\r\n },\r\n deep: true,\r\n }\r\n },\r\n mounted() {\r\n if (\r\n this.processNodeObj.childNode &&\r\n this.processNodeObj.childNode.length == 1 &&\r\n this.processNodeObj.type == Enum.ProcessNodeType.单一分支\r\n ) {\r\n this.radioModel = this.processNodeObj.childNode[0];\r\n }\r\n },\r\n methods: {\r\n isSelect(item) {\r\n if (item.incomingConditionItemList[0]) {\r\n let flag =\r\n item.incomingConditionItemList[0].itemName.includes("selecd");\r\n if (flag) {\r\n if (!this.checkList.includes(item.name))\r\n this.checkList.push(item.name);\r\n }\r\n return flag;\r\n }\r\n return false;\r\n },\r\n fixPeopleChange(e) {\r\n console.log(e, \'e\')\r\n this.complete(e, this.processNodeObj)\r\n },\r\n // 获取选中的人的对象\r\n selectChange (list) {\r\n console.log(list, \'list\')\r\n this.targetUserList = list;\r\n },\r\n complete(e, item) {\r\n console.log(e, item, \'e item\', this.resultList, this.resultList.every((o) => o.vars))\r\n item.vars = e;\r\n if (this.resultList.every((o) => o.vars)) {\r\n this.processNodeObj.vars = this.resultList.map((o) => o.vars);\r\n console.log(this.processNodeObj.vars, \'this.processNodeObj.vars\')\r\n this.$emit("complete", this.processNodeObj);\r\n }\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getTreeData(item) {\r\n if (item) {\r\n if (item.humanPerformerName == "固定部门") {\r\n return item.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == "固定单位") {\r\n return item.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.主体;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == "固定群组") {\r\n return item.routeTxt.teamList.map((o) => {\r\n let obj = {};\r\n obj.id = o.id;\r\n obj.leaf = false;\r\n obj.name = o.teamName;\r\n obj.orgType = this.Enum.UserType.群组;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定单位" ||\r\n humanPerformer == "固定角色/岗位" ||\r\n humanPerformer == "固定群组"\r\n );\r\n },\r\n getValue() {\r\n let flag = true;\r\n let val = { multiNodeParticipant: {}, vars: {} };\r\n if (\r\n (!this.processNodeObj.type || \r\n this.processNodeObj.type == this.Enum.ProcessNodeType.用户任务 ||\r\n this.processNodeObj.type == Enum.ProcessNodeType.用户节点)\r\n \r\n ) {\r\n\r\n /**\r\n * &&\r\n (\r\n this.processNodeObj.nodeType != \'exclusiveGateway\'\r\n ||\r\n this.processNodeObj.nodeType == \'exclusiveGateway\' && this.processNodeObj.branches.length == 0\r\n )\r\n */\r\n // exclusiveGateway 节点\r\n console.log(this.processNodeObj, \'this.processNodeObj 第一个判断\')\r\n if (this.processNodeObj.nodeType == \'exclusiveGateway\') {\r\n // 进来这里\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (this.radioModel && this.radioModel.nodeInfoDTO && this.radioModel.nodeInfoDTO.id) {\r\n if (\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList &&\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList[0].compareValue;\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n \r\n } \r\n else if (this.processNodeObj.nodeType == \'inclusiveGateway\') {\r\n // 进来这里\r\n if (this.resultList && this.resultList.length > 0) {\r\n\r\n this.resultList.forEach(rlItem => {\r\n const o = this.userTaskListData[rlItem.nodeInfoDTO.id]\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (rlItem.nodeInfoDTO.incomingConditionItemList.length !== 0) {\r\n rlItem.nodeInfoDTO.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n })\r\n\r\n } else {\r\n console.log(this.processNodeObj, \'this.processNodeObj.nodeInfoDTO 判断是否是多分支\')\r\n // 判断是否是多分支\r\n if (this.processNodeObj && this.processNodeObj.nodeType == \'inclusiveGateway\') {\r\n ElMessage.warning(`请选择下一节点`)\r\n } else {\r\n this.processNodeObj.nodeInfoDTO.name && ElMessage.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} `);\r\n }\r\n return false;\r\n }\r\n } \r\n // 新流程需要进入这里\r\n else if (!this.processNodeObj.assignee || !Array.isArray(this.processNodeObj.assignee) || !this.processNodeObj.setPersonnel || this.isOption(this.processNodeObj.humanPerformerName)\r\n || \r\n (this.processNodeObj.nodeInfoDTO && (!this.processNodeObj.nodeInfoDTO.assignee || !Array.isArray(this.processNodeObj.nodeInfoDTO.assignee) || !this.processNodeObj.nodeInfoDTO.setPersonnel || this.isOption(this.processNodeObj.nodeInfoDTO.humanPerformerName)))\r\n ) {\r\n if (this.targetUserId && this.targetUserId.length > 0) {\r\n let obj = {};\r\n val.multiNodeParticipant = {};\r\n val.multiNodeParticipant[this.processNode.nodeInfoDTO ? this.processNodeObj.nodeInfoDTO.id : this.processNodeObj.id] =\r\n Array.isArray(this.targetUserId) ? this.targetUserId : [this.targetUserId];\r\n // val.push(obj);\r\n } else if (this.processNodeObj.REQUIRED !== false || (this.processNodeObj.nodeInfoDTO && this.processNodeObj.nodeInfoDTO.REQUIRED !== false)) {\r\n if (this.processNodeObj.nodeInfoDTO) {\r\n this.processNodeObj.nodeInfoDTO.name && ElMessage.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} 处理人`);\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(`请选择 ${this.processNodeObj.name} 处理人`);\r\n }\r\n // ElMessage.warning(`请选择审批人`);\r\n return false;\r\n }\r\n } else {\r\n if (\r\n this.processNodeObj.incomingConditionItemList &&\r\n this.processNodeObj.incomingConditionItemList.length > 0\r\n ) {\r\n val.vars[\r\n this.processNodeObj.incomingConditionItemList[0].itemName\r\n ] = this.processNodeObj.incomingConditionItemList[0].compareValue;\r\n }\r\n }\r\n } else {\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (\r\n this.processNodeObj.nodeType == \'exclusiveGateway\'\r\n ) {\r\n if (this.radioModel && this.radioModel.id) {\r\n if (\r\n this.radioModel.incomingConditionItemList &&\r\n this.radioModel.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.incomingConditionItemList[0].compareValue;\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(\r\n `请选择 ${this.processNodeObj.name} 下一节点`\r\n );\r\n return false;\r\n }\r\n } else if (\r\n this.processNodeObj.nodeType == \'inclusiveGateway\'\r\n ) {\r\n if (this.resultList && this.resultList.length > 0) {\r\n this.resultList.forEach((r) => {\r\n if (r.incomingConditionItemList.length !== 0) {\r\n r.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(`请选择 ${this.processNodeObj.name} `);\r\n return false;\r\n }\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n }\r\n if (flag) return val;\r\n return flag;\r\n },\r\n getLabel(node) {\r\n let name = "";\r\n if (node.incomingConditionItemList.length > 0) {\r\n name = node.incomingConditionItemList[0].compareValue;\r\n }\r\n return name || node.name || "后续节点";\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss">\r\n.user-task {\r\n :deep(.el-form-item__label) {\r\n white-space: nowrap;\r\n text-align: right;\r\n font-size: 14px;\r\n overflow: hidden;\r\n display: block !important;\r\n text-overflow: ellipsis;\r\n }\r\n .include {\r\n padding: 6px;\r\n &-type {\r\n border-radius: 6px;\r\n }\r\n &-user {\r\n background: red;\r\n color: aliceblue;\r\n }\r\n &-dept {\r\n background: blue;\r\n color: aliceblue;\r\n }\r\n &-post {\r\n background: green;\r\n color: aliceblue;\r\n }\r\n &-assign {\r\n background: bisque;\r\n color: red;\r\n border-radius: 12px;\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n height: 18px;\r\n }\r\n }\r\n .task-index {\r\n background: #1389ff;\r\n color: white;\r\n border-radius: 12px;\r\n width: -moz-fit-content;\r\n width: 25px;\r\n height: 100%;\r\n display: inline-flex;\r\n justify-content: center;\r\n margin-right: 6px;\r\n }\r\n}\r\n</style>\r\n',".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */"]},media:void 0})},q,undefined,false,undefined,!1,k,void 0,void 0),G=e=>new Promise((n,r)=>{f.getAjaxObj().post("/file/upload",e).then(e=>{n(e)})});const J={data:()=>({ctx:null,signatureImage:"",actionHeight:0,isDrawing:!1,paths:[],currentPath:[],historyPics:[]}),methods:{startDrawing(e){this.isDrawing=!0,this.currentPath=[];const n=this.$refs.canvasRef.getBoundingClientRect(),r=(e.clientX-n.left)*(this.$refs.canvasRef.width/n.width),t=(e.clientY-n.top)*(this.$refs.canvasRef.height/n.height);this.ctx.beginPath(),this.ctx.moveTo(r,t),this.currentPath.push({x:r,y:t})},draw(e){if(this.isDrawing&&this.currentPath.length>0){const n=this.$refs.canvasRef.getBoundingClientRect(),r=(e.clientX-n.left)*(this.$refs.canvasRef.width/n.width),t=(e.clientY-n.top)*(this.$refs.canvasRef.height/n.height);this.ctx.lineWidth=2,this.ctx.strokeStyle="#000000",this.ctx.lineTo(r,t),this.ctx.stroke(),this.currentPath.push({x:r,y:t})}},undo(){this.paths.pop(),this.ctx.clearRect(0,0,this.$refs.canvasRef.width,this.$refs.canvasRef.height);for(let e of this.paths)for(let n=0;n<e.length-1;n++){const{x:r,y:t}=e[n];0===n?(this.ctx.beginPath(),this.ctx.moveTo(r,t)):(this.ctx.lineTo(r,t),this.ctx.stroke())}},finishDrawing(e){this.currentPath.length>0&&this.paths.push(this.currentPath),this.isDrawing=!1},clearCanvas(){this.ctx.clearRect(0,0,this.$refs.canvasRef.width,this.$refs.canvasRef.height),this.signatureImage="",this.paths=[],this.$emit("saveSignature","",!1)},saveSignature(){0!=this.paths.length?this.signatureImage=this.$refs.canvasRef.toBlob(e=>{this.uploadImage(e)},"image/png",.95):this.$emit("validateFail","请签字")},async uploadImage(e,n){this.loading=!0;const r=new FormData;r.append("file",e,n||`signature-${Date.now()}.png`);const t=await G(r);if(this.loading=!1,!t.success)return;let s=JSON.parse(localStorage.getItem("signaturesArr"))||[];s.unshift(t.data),this.$set(this,"historyPics",s.slice(0,3)),localStorage.setItem("signaturesArr",JSON.stringify(this.historyPics)),this.$emit("saveSignature",t.data,!0)},useHistory(e){this.historyPics[e]&&this.$confirm("是否使用历史签字","操作信息提醒",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}).then(()=>{this.$emit("saveSignature",this.historyPics[e],!0)})}},computed:{setDynamicVars(){return{"--action-height":`${this.actionHeight}px`}}},watch:{setDynamicVars(e){let n=document.querySelector(".canvas-container");n&&(this.$refs.canvasRef.width=n.offsetWidth,this.$refs.canvasRef.height=n.offsetHeight-this.actionHeight)}},mounted(){this.actionHeight=document.querySelector(".actions-box").offsetHeight,this.ctx=this.$refs.canvasRef.getContext("2d"),localStorage.getItem("signaturesArr")?this.historyPics=JSON.parse(localStorage.getItem("signaturesArr")):this.historyPics=[]}};var Q=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{staticClass:"sign-container",style:e.setDynamicVars},[r("div",{staticClass:"content-area"},[r("div",{staticClass:"canvas-container"},[r("canvas",{ref:"canvasRef",attrs:{id:"canvas-id","canvas-id":"canvas-id"},on:{mousemove:e.draw,mousedown:e.startDrawing,mouseup:e.finishDrawing}})]),e._v(" "),r("div",{staticClass:"history"},[r("div",{staticClass:"img-grid",on:{click:function(n){return e.useHistory(0)}}},[e.historyPics[0]?r("el-image",{attrs:{src:e.historyPics[0]?e.historyPics[0].url:"",fit:"scale-down"}}):e._e()],1),e._v(" "),r("div",{staticClass:"img-grid",on:{click:function(n){return e.useHistory(1)}}},[e.historyPics[1]?r("el-image",{attrs:{src:e.historyPics[1]?e.historyPics[1].url:"",fit:"scale-down"}}):e._e()],1),e._v(" "),r("div",{staticClass:"img-grid",on:{click:function(n){return e.useHistory(2)}}},[e.historyPics[2]?r("el-image",{attrs:{src:e.historyPics[2]?e.historyPics[2].url:"",fit:"scale-down"}}):e._e()],1)])]),e._v(" "),r("div",{staticClass:"actions-box"},[r("button",{staticClass:"commn-btn",on:{click:e.clearCanvas}},[e._v("清除")]),e._v(" "),r("button",{staticClass:"commn-btn",on:{click:e.saveSignature}},[e._v("保存")]),e._v(" "),r("button",{staticClass:"commn-btn",on:{click:e.undo}},[e._v("撤销")])])])};Q._withStripped=!0;const X={components:{staffTree:O,userTask:W,commIdea:U,TopSign:I({render:Q,staticRenderFns:[]},function(e){e&&e("data-v-32de1c56_0",{source:".sign-container[data-v-32de1c56] {\n width: 100%;\n height: 100%;\n}\n.sign-container .canvas-container[data-v-32de1c56] {\n position: relative;\n width: 540px;\n height: 540px;\n border: 1px solid;\n}\n.sign-container .canvas-container #canvas-id[data-v-32de1c56] {\n width: 100%;\n height: 100%;\n}\n.sign-container .actions-box[data-v-32de1c56] {\n width: 100%;\n bottom: constant(safe-area-inset-bottom);\n bottom: env(safe-area-inset-bottom);\n background: #fff;\n display: flex;\n justify-content: space-evenly;\n padding: 10px 0 10px 0;\n padding: 10px 0 10px 0;\n}\n.sign-container .actions-box .commn-btn[data-v-32de1c56] {\n background: #409EFF;\n border-color: #409EFF;\n color: #FFF;\n border-radius: 4px;\n padding: 10px 20px;\n border: 1px solid #DCDFE6;\n font-size: 14px;\n}\n.sign-container .actions-box .commn-btn[data-v-32de1c56]:hover {\n background: #66b1ff;\n border-color: #66b1ff;\n}\n.history[data-v-32de1c56] {\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n padding: 0px 15px;\n background: #f6f6f6;\n}\n.history .img-grid[data-v-32de1c56] {\n height: 170px;\n width: 170px;\n border: 1px solid #333;\n background-color: #fff;\n}\n.history .img-grid .el-image[data-v-32de1c56] {\n background: #fff;\n height: 100%;\n width: 100%;\n}\n.content-area[data-v-32de1c56] {\n display: flex;\n}\n\n/*# sourceMappingURL=topSign.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\TopSign\\topSign.vue","topSign.vue"],names:[],mappings:"AAwMA;EACA,WAAA;EACA,YAAA;ACvMA;ADyMA;EACA,kBAAA;EAGA,YAAA;EACA,aAAA;EACA,iBAAA;ACzMA;AD2MA;EACA,WAAA;EACA,YAAA;ACzMA;AD6MA;EACA,WAAA;EACA,wCAAA;EACA,mCAAA;EACA,gBAAA;EACA,aAAA;EACA,6BAAA;EACA,sBAAA;EACA,sBAAA;AC3MA;AD6MA;EACA,mBAAA;EACA,qBAAA;EACA,WAAA;EACA,kBAAA;EACA,kBAAA;EACA,yBAAA;EACA,eAAA;AC3MA;AD6MA;EACA,mBAAA;EACA,qBAAA;AC3MA;ADiNA;EACA,aAAA;EACA,8BAAA;EACA,sBAAA;EACA,iBAAA;EACA,mBAAA;AC9MA;ADiNA;EACA,aAAA;EACA,YAAA;EACA,sBAAA;EACA,sBAAA;AC/MA;ADiNA;EACA,gBAAA;EACA,YAAA;EACA,WAAA;AC/MA;ADoNA;EACA,aAAA;ACjNA;;AAEA,sCAAsC",file:"topSign.vue",sourcesContent:['<template>\r\n <div class="sign-container" :style="setDynamicVars">\r\n <div class="content-area">\r\n <div class="canvas-container">\r\n <canvas ref="canvasRef" @mousemove="draw" @mousedown="startDrawing" @mouseup="finishDrawing" id="canvas-id"\r\n canvas-id="canvas-id"></canvas>\r\n </div>\r\n <div class="history">\r\n <div class="img-grid" @click="useHistory(0)">\r\n <el-image v-if="historyPics[0]" :src="historyPics[0] ? historyPics[0].url : \'\'" fit="scale-down"></el-image>\r\n </div>\r\n <div class="img-grid" @click="useHistory(1)">\r\n <el-image v-if="historyPics[1]" :src="historyPics[1] ? historyPics[1].url : \'\'" fit="scale-down"></el-image>\r\n </div>\r\n <div class="img-grid" @click="useHistory(2)">\r\n <el-image v-if="historyPics[2]" :src="historyPics[2] ? historyPics[2].url : \'\'" fit="scale-down"></el-image>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="actions-box">\r\n <button @click="clearCanvas" class="commn-btn">清除</button>\r\n <button @click="saveSignature" class="commn-btn">保存</button>\r\n <button @click="undo" class="commn-btn">撤销</button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport ajax from "../zjp_process/api";\r\nconst Api = {\r\n upload: (form) => {\r\n return new Promise((resolve, reject) => {\r\n ajax\r\n .getAjaxObj()\r\n .post("/file/upload", form)\r\n .then((e) => {\r\n resolve(e);\r\n });\r\n });\r\n },\r\n};\r\nexport default {\r\n data() {\r\n return {\r\n ctx: null,\r\n signatureImage: \'\',\r\n actionHeight: 0,\r\n isDrawing: false,\r\n paths: [], // 保存绘制的路径数据\r\n currentPath: [],\r\n historyPics: []\r\n }\r\n },\r\n methods: {\r\n startDrawing(event) {\r\n this.isDrawing = true;\r\n this.currentPath = []; // 创建新的路径\r\n const rect = this.$refs.canvasRef.getBoundingClientRect();\r\n // 修正按下位置相对于画布的位置\r\n const x = (event.clientX - rect.left) * (this.$refs.canvasRef.width / rect.width);\r\n const y = (event.clientY - rect.top) * (this.$refs.canvasRef.height / rect.height);\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(x, y);\r\n this.currentPath.push({ x, y });\r\n },\r\n\r\n draw(event) {\r\n if (!this.isDrawing) return;\r\n if (this.currentPath.length > 0) {\r\n const rect = this.$refs.canvasRef.getBoundingClientRect();\r\n const x = (event.clientX - rect.left) * (this.$refs.canvasRef.width / rect.width);\r\n const y = (event.clientY - rect.top) * (this.$refs.canvasRef.height / rect.height);\r\n this.ctx.lineWidth = 2;\r\n\r\n this.ctx.strokeStyle = "#000000";//线条的颜色\r\n this.ctx.lineTo(x, y);\r\n this.ctx.stroke();\r\n\r\n // 将路径数据保存到数组中\r\n this.currentPath.push({ x, y });\r\n }\r\n },\r\n undo() {\r\n this.paths.pop(); // 删除最后一条路径\r\n // 清空画布\r\n this.ctx.clearRect(0, 0, this.$refs.canvasRef.width, this.$refs.canvasRef.height);\r\n // 重新绘制除最后一条路径之外的所有路径\r\n for (let path of this.paths) {\r\n for (let i = 0; i < path.length - 1; i++) {\r\n const { x, y } = path[i];\r\n if (i === 0) {\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(x, y);\r\n } else {\r\n this.ctx.lineTo(x, y);\r\n this.ctx.stroke();\r\n }\r\n }\r\n }\r\n },\r\n finishDrawing(event) {\r\n if (this.currentPath.length > 0) {\r\n this.paths.push(this.currentPath); // 将当前路径添加到路径数组\r\n }\r\n this.isDrawing = false;\r\n },\r\n\r\n clearCanvas() {\r\n this.ctx.clearRect(0, 0, this.$refs.canvasRef.width, this.$refs.canvasRef.height);\r\n this.signatureImage = \'\';\r\n this.paths = []; // 清空路径记录\r\n this.$emit(\'saveSignature\', \'\', false)\r\n },\r\n\r\n saveSignature() {\r\n if (this.paths.length == 0) {\r\n this.$emit(\'validateFail\', \'请签字\')\r\n return\r\n }\r\n // // toDo: uni框架转成的base64无type前缀 需统一\r\n // this.signatureImage = this.$refs.canvasRef.toDataURL();\r\n // let tmpArr = JSON.parse(localStorage.getItem(\'signaturesArr\')) || []\r\n // tmpArr.unshift(this.signatureImage)\r\n // this.$set(this, \'historyPics\', tmpArr.slice(0, 3))\r\n // localStorage.setItem(\'signaturesArr\', JSON.stringify(this.historyPics))\r\n // this.$emit(\'saveSignature\', this.signatureImage, true)\r\n\r\n // toDo: uni框架转成的base64无type前缀 需统一\r\n this.signatureImage = this.$refs.canvasRef.toBlob((blob) => {\r\n this.uploadImage(blob);\r\n }, \'image/png\', 0.95);\r\n },\r\n async uploadImage(file, fileName) {\r\n this.loading = true;\r\n const formData = new FormData();\r\n formData.append("file", file, fileName || `signature-${Date.now()}.png`);\r\n const res = await Api.upload(formData);\r\n console.log(res);\r\n this.loading = false;\r\n if (!res.success) {\r\n return;\r\n }\r\n let tmpArr = JSON.parse(localStorage.getItem(\'signaturesArr\')) || []\r\n tmpArr.unshift(res.data)\r\n this.$set(this, \'historyPics\', tmpArr.slice(0, 3))\r\n localStorage.setItem(\'signaturesArr\', JSON.stringify(this.historyPics))\r\n this.$emit(\'saveSignature\', res.data, true)\r\n },\r\n useHistory(index) {\r\n if (this.historyPics[index]) {\r\n this.$confirm(`是否使用历史签字`, "操作信息提醒", {\r\n confirmButtonText: "继续",\r\n cancelButtonText: "取消",\r\n type: "warning",\r\n }).then(() => {\r\n this.$emit(\'saveSignature\', this.historyPics[index], true)\r\n })\r\n }\r\n }\r\n },\r\n computed: {\r\n setDynamicVars() {\r\n return {\r\n "--action-height": `${this.actionHeight}px`\r\n };\r\n },\r\n // hasHistory() {\r\n // if (this.historyPics && this.historyPics.length > 0) {\r\n // return true\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n // }\r\n },\r\n watch: {\r\n setDynamicVars(newVal) {\r\n let canvasContainer = document.querySelector(\'.canvas-container\');\r\n if (canvasContainer) {\r\n // 解决锯齿及模糊\r\n this.$refs.canvasRef.width = canvasContainer.offsetWidth\r\n this.$refs.canvasRef.height = canvasContainer.offsetHeight - this.actionHeight\r\n }\r\n }\r\n },\r\n mounted() {\r\n this.actionHeight = document.querySelector(\'.actions-box\').offsetHeight;\r\n this.ctx = this.$refs.canvasRef.getContext(\'2d\');\r\n if (localStorage.getItem(\'signaturesArr\')) {\r\n this.historyPics = JSON.parse(localStorage.getItem(\'signaturesArr\'))\r\n }\r\n else {\r\n this.historyPics = []\r\n }\r\n }\r\n}\r\n<\/script>\r\n\r\n\r\n<style lang="scss" scoped>\r\n.sign-container {\r\n width: 100%;\r\n height: 100%;\r\n\r\n .canvas-container {\r\n position: relative;\r\n // width: 100%;\r\n // height: calc(100% - var(--action-height));\r\n width: 540px;\r\n height: 540px;\r\n border: 1px solid;\r\n\r\n #canvas-id {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n }\r\n\r\n .actions-box {\r\n width: 100%;\r\n bottom: constant(safe-area-inset-bottom);\r\n bottom: env(safe-area-inset-bottom);\r\n background: #fff;\r\n display: flex;\r\n justify-content: space-evenly;\r\n padding: 10px 0 10px 0;\r\n padding: 10px 0 10px 0;\r\n\r\n .commn-btn {\r\n background: #409EFF;\r\n border-color: #409EFF;\r\n color: #FFF;\r\n border-radius: 4px;\r\n padding: 10px 20px;\r\n border: 1px solid #DCDFE6;\r\n font-size: 14px;\r\n\r\n &:hover {\r\n background: #66b1ff;\r\n border-color: #66b1ff;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.history {\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n padding: 0px 15px;\r\n background: #f6f6f6;\r\n\r\n\r\n .img-grid {\r\n height: 170px;\r\n width: 170px;\r\n border: 1px solid #333;\r\n background-color: #fff;\r\n\r\n .el-image {\r\n background: #fff;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n }\r\n}\r\n\r\n.content-area {\r\n display: flex;\r\n}\r\n</style>',".sign-container {\n width: 100%;\n height: 100%;\n}\n.sign-container .canvas-container {\n position: relative;\n width: 540px;\n height: 540px;\n border: 1px solid;\n}\n.sign-container .canvas-container #canvas-id {\n width: 100%;\n height: 100%;\n}\n.sign-container .actions-box {\n width: 100%;\n bottom: constant(safe-area-inset-bottom);\n bottom: env(safe-area-inset-bottom);\n background: #fff;\n display: flex;\n justify-content: space-evenly;\n padding: 10px 0 10px 0;\n padding: 10px 0 10px 0;\n}\n.sign-container .actions-box .commn-btn {\n background: #409EFF;\n border-color: #409EFF;\n color: #FFF;\n border-radius: 4px;\n padding: 10px 20px;\n border: 1px solid #DCDFE6;\n font-size: 14px;\n}\n.sign-container .actions-box .commn-btn:hover {\n background: #66b1ff;\n border-color: #66b1ff;\n}\n\n.history {\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n padding: 0px 15px;\n background: #f6f6f6;\n}\n.history .img-grid {\n height: 170px;\n width: 170px;\n border: 1px solid #333;\n background-color: #fff;\n}\n.history .img-grid .el-image {\n background: #fff;\n height: 100%;\n width: 100%;\n}\n\n.content-area {\n display: flex;\n}\n\n/*# sourceMappingURL=topSign.vue.map */"]},media:void 0})},J,"data-v-32de1c56",false,undefined,!1,k,void 0,void 0)},props:{param:Object},data(){return{commentMsg:"",targetUser:[],userTaskListData:{},outGatewayUserTaskModel:this.param.outGatewayUserTaskModel,Enum:y,signVisible:!1,digitalSignature:"",confirmPreposition:!1,confirmLoading:()=>{}}},mounted(){"obj_94014ede99b6495d8f6d5977314faa15"==this.param.ProcessInsObj.processDefId&&(this.commentMsg="同意")},computed:{hasSign(){if(this.param.taskObj.activityExtendAttributes){let e=JSON.parse(this.param.taskObj.activityExtendAttributes);return!!e.find(e=>"签字"==e.key)&&e.find(e=>"签字"==e.key)}return!1},signRequired(){return!!this.param.extendedProperties.find(e=>"signature"==e.name)}},methods:{setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},getProcessNode(e){let n={};return n.humanPerformerName=e.userTaskModelDTO.humanPerformer.name,n.id=e.id,n.loopCardinality=e.loopCardinality||e.userTaskModelDTO.loopCardinality,n.name=e.userTaskModelDTO.name,n.type=e.type,n.routeTxt=e.userTaskModelDTO.routeTxt,n.participantList=e.userTaskModelDTO.participantList,n.taskNode=this.param.taskNode,n},isOption:e=>"任意指定"==e||"固定部门"==e||"固定账户"==e||"固定单位"==e,getTreeData(e){if(this.param.nextTaskNode){if("固定部门"==e.userTaskModelDTO.humanPerformer.name)return e.userTaskModelDTO.routeTxt.departmentIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=A.部门,n});if("固定单位"==e.userTaskModelDTO.humanPerformer.name)return e.userTaskModelDTO.routeTxt.companyIds.map(e=>{let n={};return n.id=e.rangeId,n.leaf=!1,n.name=e.name,n.orgType=A.主体,n})}},getRes(){return{targetUser:this.targetUser}},confirm(n,r,t){if(Array.isArray(t)&&(this.param.attachment=t),!this.commentMsg&&this.param.commentMsgRequired)return e.warning("请输入审批意见"),!1;if(this.commentMsg.length>200)return e.warning("审批意见不能超过200个字"),!1;let s={taskId:this.param.taskInstId,processInstanceId:this.param.processInstId,commentMsg:this.commentMsg||" ",comment:this.commentMsg||" ",businessData:this.param.businessData,attachment:this.param.attachment};for(let e in this.userTaskListData){let n=this.userTaskListData[e],r=this.$refs[n].$el?this.$refs[n]:this.$refs[n][0],t=r.getValue();if(t&&t.vars&&this.param.incomingConditionItemList&&this.param.incomingConditionItemList.length>0&&this.param.incomingConditionItemList.forEach(e=>{t.vars[e.itemName]||(t.vars[e.itemName]="")}),!t)return!1;let i=[];const a=this.param.nextTaskNode;i=a.setPersonnel?a.assignees||[]:(r.targetUserList||[]).map(e=>({id:e.id,name:e.name})),s.assignees=i,s.multiNodeParticipant={...s.multiNodeParticipant,...t.multiNodeParticipant},s.vars={...s.vars,...t.vars}}let i=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&(!this.param.nextTaskNode.branches||this.param.nextTaskNode.branches.length<=0),a=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=this.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType,o=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&!this.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=this.param.nextTaskNode.branches[0].nodeType;if(i||a||o)if("exclusiveGateway"==this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&1==this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length>0)s.multiNodeParticipant={...s.multiNodeParticipant,[this.param.nextTaskNode.branches[0].nodeInfoDTO.id]:this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(e=>e.id)};else{if(!Object.keys(s.multiNodeParticipant).length)return e.warning("请选择下一节点"),!1}if(s.pass=!0,Date.now(),this.param.getVars){let e=this.param.getVars();if(!1===e)return!1;s.vars={...s.vars,...e}}if(this.signRequired)return this.confirmPreposition=n,this.confirmLoading=r,void(this.signVisible=!0);r(),n?n().then(e=>{f.tis.complete(s).then(n=>{n.code==u.success?(e&&e(),this.$emit("success")):this.$emit("fail",n.msg)}).catch(()=>{this.$emit("fail","")})}).catch(()=>{this.$emit("fail","")}):f.tis.complete(s).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)}).catch(e=>{this.$emit("fail",e.response?e.response.data?e.response.data.msg||e.response.data.message:"":e.message||e.msg||"")})},confirmWithSign(){let n={taskId:this.param.taskInstId,processInstanceId:this.param.processInstId,commentMsg:this.commentMsg||" ",comment:this.commentMsg||" ",businessData:this.param.businessData,digitalSignature:{name:this.param.digitalSignature.name,url:this.param.digitalSignature.url},attachment:this.param.attachment};for(let e in this.userTaskListData){let r=this.userTaskListData[e],t=(this.$refs[r].$el?this.$refs[r]:this.$refs[r][0]).getValue();if(!t)return!1;n.multiNodeParticipant={...n.multiNodeParticipant,...t.multiNodeParticipant},n.vars={...n.vars,...t.vars}}let r=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&(!this.param.nextTaskNode.branches||this.param.nextTaskNode.branches.length<=0),t=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=this.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType,s=this.param.nextTaskNode&&"endEvent"!=this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&!this.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=this.param.nextTaskNode.branches[0].nodeType;if(r||t||s)if("exclusiveGateway"==this.param.nextTaskNode.nodeType&&this.param.nextTaskNode.branches&&1==this.param.nextTaskNode.branches.length&&this.param.nextTaskNode.branches[0].nodeInfoDTO&&1==this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees&&this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length>0)n.multiNodeParticipant={...n.multiNodeParticipant,[this.param.nextTaskNode.branches[0].nodeInfoDTO.id]:this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(e=>e.id)};else{if(!Object.keys(n.multiNodeParticipant).length)return e.warning("请选择下一节点"),!1}if(this.param.getVars){let e=this.param.getVars();if(!1===e)return!1;n.vars={...n.vars,...e}}n.pass=!0,this.confirmLoading(),this.confirmPreposition?this.confirmPreposition().then(e=>{f.tis.complete(n).then(n=>{n.code==u.success?(e&&e(),this.$emit("success")):this.$emit("fail",n.msg)}).catch(()=>{this.$emit("fail","")})}).catch(()=>{this.$emit("fail","")}):f.tis.complete(n).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)}).catch(e=>{this.$emit("fail",e.response?e.response.data?e.response.data.msg||e.response.data.message:"":e.message||e.msg||"")})},toSign(){this.signVisible=!0},handleSignature(e,n){this.param.digitalSignature=e,n&&(this.signVisible=!1,this.confirmWithSign())},closeSign(){this.signVisible=!1},noticeFail(n){e.warning(n)}}};var Y=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},["obj_94014ede99b6495d8f6d5977314faa15"!=e.param.ProcessInsObj.processDefId?[r("el-form-item",{attrs:{label:"快捷回复"}},[r("el-radio-group",{model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}},[r("el-radio",{attrs:{label:"同意"}},[e._v("同意")]),e._v(" "),e.param.showAsPlanned?r("el-radio",{attrs:{label:"如拟"}},[e._v("如拟")]):e._e(),e._v(" "),r("el-radio",{attrs:{label:"已阅"}},[e._v("已阅")])],1)],1),e._v(" "),e.param.showCommIdea?r("el-form-item",[r("commIdea",{ref:"commIdea",on:{change:function(n){return e.commentMsg=n}}})],1):e._e(),e._v(" "),r("el-form-item",{attrs:{label:"审批意见",rules:[{required:e.param.commentMsgRequired,message:"审批意见不能为空"}]}},[r("el-input",{staticClass:"formInput",attrs:{rows:5,maxlength:"200","show-word-limit":"",type:"textarea",resize:"none",placeholder:"请输入审批意见"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}}),e._v(" "),e.param.showCommIdea?r("div",{staticClass:"add-idea"},[r("span",{on:{click:function(n){return e.$refs.commIdea.addIdea(e.commentMsg)}}},[e._v("设置为常用意见")])]):e._e()],1)]:e._e(),e._v(" "),e._t("file"),e._v(" "),e.param.nodeLoading?[r("el-form-item",{attrs:{label:"下一节点",size:"normal"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("节点加载中,请稍后......")])])]:[e.param.nextTaskNode&&e.param.nextTaskNode.id&&"parallelGateway"!=e.param.nextTaskNode.nodeType&&"exclusiveGateway"!=e.param.nextTaskNode.nodeType?["endEvent"!=e.param.nextTaskNode.nodeType?[r("userTask",{key:e.param.nextTaskNode.id,ref:e.setItemRef(e.param.nextTaskNode.id),attrs:{personType:e.param.nextTaskNode.personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode,{REQUIRED:!(1==e.param.nextTaskNode.setPersonnel&&e.param.nextTaskNode.assignees&&e.param.nextTaskNode.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})]:[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]]:"exclusiveGateway"==e.param.nextTaskNode.nodeType&&e.param.outGatewayUserTaskModel&&e.param.outGatewayUserTaskModel.length>0?e._l(e.param.outGatewayUserTaskModel,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{personType:e.param.personType,personEntity:e.param.personEntity,processNode:Object.assign({},n,{pType:e.param.nextTaskNode.nodeType,REQUIRED:!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)})}})}):e.param.outGatewayUserTaskModel&&e.param.outGatewayUserTaskModel.length>0?e._l(e.param.outGatewayUserTaskModel,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{personType:e.param.personType,personEntity:e.param.personEntity,processNode:Object.assign({},n,{REQUIRED:!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)})}})}):"exclusiveGateway"==e.param.nextTaskNode.nodeType&&e.param.nextTaskNode.branches&&1==e.param.nextTaskNode.branches.length?["endEvent"!=e.param.nextTaskNode.nodeType?[e.param.nextTaskNode.branches[0].nodeInfoDTO&&"endEvent"!=e.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType?r("userTask",{key:e.param.nextTaskNode.branches[0].nodeInfoDTO.id,ref:e.setItemRef(e.param.nextTaskNode.branches[0].nodeInfoDTO.id),attrs:{personType:e.param.nextTaskNode.branches[0].nodeInfoDTO.personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode.branches[0].nodeInfoDTO,{REQUIRED:!(1==e.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel&&e.param.nextTaskNode.branches[0].nodeInfoDTO.assignees&&e.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}}):e.param.nextTaskNode.branches[0].nodeInfoDTO||"endEvent"==e.param.nextTaskNode.branches[0].nodeType?[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]:r("userTask",{key:e.param.nextTaskNode.branches[0].id,ref:e.setItemRef(e.param.nextTaskNode.branches[0].id),attrs:{personType:e.param.nextTaskNode.branches[0].personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode.branches[0],{REQUIRED:!(1==e.param.nextTaskNode.branches[0].setPersonnel&&e.param.nextTaskNode.branches[0].assignees&&e.param.nextTaskNode.branches[0].assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})]:[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]]:"exclusiveGateway"==e.param.nextTaskNode.nodeType&&e.param.nextTaskNode.branches&&e.param.nextTaskNode.branches.length>1?["endEvent"!=e.param.nextTaskNode.nodeType?[r("userTask",{key:e.param.nextTaskNode.id,ref:e.setItemRef(e.param.nextTaskNode.id),attrs:{personType:e.param.nextTaskNode.personType||"",personEntity:{},"process-node":Object.assign({},e.param.nextTaskNode,{REQUIRED:!(1==e.param.nextTaskNode.setPersonnel&&e.param.nextTaskNode.assignees&&e.param.nextTaskNode.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})]:[r("el-form-item",{attrs:{label:"下一节点名称"}},[r("b",{staticStyle:{"font-size":"16px"}},[e._v("结束事件")])])]]:"parallelGateway"==e.param.nextTaskNode.nodeType?e._l(e.param.nextTaskNode.branches,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{personType:e.param.personType||"",personEntity:e.param.personEntity||{},processNode:Object.assign({},n,{REQUIRED:!(1==n.setPersonnel&&n.assignees&&n.assignees.length>0)}),lv1label:"下一节点名称",rules:[{required:!0,message:"请选择处理人"}]}})}):e._e()],e._v(" "),e._t("form"),e._v(" "),r("el-dialog",{attrs:{title:"签字",visible:e.signVisible,"append-to-body":"",width:"800px","close-on-click-modal":!1},on:{"update:visible":function(n){e.signVisible=n},closed:e.closeSign}},[r("div",{staticClass:"sign-container"},[r("TopSign",{on:{saveSignature:e.handleSignature,validateFail:e.noticeFail}})],1)])],2)};Y._withStripped=!0;const Z=I({render:Y,staticRenderFns:[]},function(e){e&&e("data-v-51c0a88a_0",{source:'\n@import "./content.css";\n.add-idea[data-v-51c0a88a] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-51c0a88a] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n.sign-idea[data-v-51c0a88a] {\r\n display: flex;\nspan {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n}\n.sign-container[data-v-51c0a88a] {\r\n min-height: 60vh;\n}\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\complete.vue"],names:[],mappings:";AA2kBA,uBAAA;AACA;EACA,aAAA;EACA,oBAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA;AACA;EACA,aAAA;AACA;IACA,cAAA;IACA,eAAA;AACA;AACA;AACA;EACA,gBAAA;AACA",file:"complete.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <template\r\n v-if="\r\n param.ProcessInsObj.processDefId !=\r\n \'obj_94014ede99b6495d8f6d5977314faa15\'\r\n "\r\n >\r\n <el-form-item label="快捷回复">\r\n <el-radio-group v-model="commentMsg">\r\n <el-radio label="同意">同意</el-radio>\r\n <el-radio label="如拟" v-if="param.showAsPlanned">如拟</el-radio>\r\n <el-radio label="已阅">已阅</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item v-if="param.showCommIdea">\r\n <commIdea ref="commIdea" @change="(e) => (commentMsg = e)" />\r\n </el-form-item>\r\n <el-form-item\r\n label="审批意见"\r\n :rules="[\r\n { required: param.commentMsgRequired, message: \'审批意见不能为空\' },\r\n ]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n type="textarea"\r\n resize="none"\r\n placeholder="请输入审批意见"\r\n class="formInput"\r\n />\r\n <div class="add-idea" v-if="param.showCommIdea">\r\n <span @click="$refs[\'commIdea\'].addIdea(commentMsg)"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n \x3c!-- <el-form-item\r\n label="审批签字"\r\n :rules="[\r\n { required: signRequired, message: \'审批签字不能为空\' },\r\n ]"\r\n v-if="signRequired"\r\n >\r\n <div class="sign-idea">\r\n <span @click="toSign">去签字</span>\r\n </div>\r\n </el-form-item> --\x3e\r\n </template>\r\n <slot name="file"></slot>\r\n \x3c!-- <el-form-item label="下一步处理节点" size="normal"> </el-form-item> --\x3e\r\n <template v-if="param.nodeLoading">\r\n <el-form-item label="下一节点" size="normal">\r\n <b style="font-size: 16px">节点加载中,请稍后......</b>\r\n </el-form-item>\r\n </template>\r\n <template v-else>\r\n <template v-if="param.nextTaskNode && param.nextTaskNode.id && param.nextTaskNode.nodeType != \'parallelGateway\' && param.nextTaskNode.nodeType != \'exclusiveGateway\'">\r\n <template v-if="param.nextTaskNode.nodeType != \'endEvent\'">\r\n <userTask\r\n :key="param.nextTaskNode.id"\r\n :personType="param.nextTaskNode.personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n \x3c!-- 复杂网关:不带branch, --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'exclusiveGateway\' && param.outGatewayUserTaskModel && param.outGatewayUserTaskModel.length > 0">\r\n <userTask\r\n v-for="item in param.outGatewayUserTaskModel"\r\n :key="item.id"\r\n :personType="param.personType"\r\n :personEntity="param.personEntity"\r\n :processNode="{ \r\n ...item,\r\n pType: param.nextTaskNode.nodeType,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }"\r\n :ref="setItemRef(item.id)"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else-if="param.outGatewayUserTaskModel && param.outGatewayUserTaskModel.length > 0">\r\n <userTask\r\n v-for="item in param.outGatewayUserTaskModel"\r\n :key="item.id"\r\n :personType="param.personType"\r\n :personEntity="param.personEntity"\r\n :processNode="{ \r\n ...item,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }"\r\n :ref="setItemRef(item.id)"\r\n >\r\n </userTask>\r\n </template>\r\n \x3c!-- 互斥网关,只有一个分支 --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'exclusiveGateway\' && param.nextTaskNode.branches && param.nextTaskNode.branches.length == 1">\r\n <template v-if="param.nextTaskNode.nodeType != \'endEvent\'">\r\n <userTask\r\n v-if="param.nextTaskNode.branches[0].nodeInfoDTO && param.nextTaskNode.branches[0].nodeInfoDTO.nodeType != \'endEvent\'"\r\n :key="param.nextTaskNode.branches[0].nodeInfoDTO.id"\r\n :personType="param.nextTaskNode.branches[0].nodeInfoDTO.personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode.branches[0].nodeInfoDTO,\r\n REQUIRED: param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && param.nextTaskNode.branches[0].nodeInfoDTO.assignees && param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.branches[0].nodeInfoDTO.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n <userTask\r\n v-else-if="!param.nextTaskNode.branches[0].nodeInfoDTO && param.nextTaskNode.branches[0].nodeType != \'endEvent\'"\r\n :key="param.nextTaskNode.branches[0].id"\r\n :personType="param.nextTaskNode.branches[0].personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode.branches[0],\r\n REQUIRED: param.nextTaskNode.branches[0].setPersonnel == true && param.nextTaskNode.branches[0].assignees && param.nextTaskNode.branches[0].assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.branches[0].id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n \x3c!-- 互斥网关,多个分支 --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'exclusiveGateway\' && param.nextTaskNode.branches && param.nextTaskNode.branches.length > 1">\r\n <template v-if="param.nextTaskNode.nodeType != \'endEvent\'">\r\n <userTask\r\n :key="param.nextTaskNode.id"\r\n :personType="param.nextTaskNode.personType || \'\'"\r\n :personEntity="{}"\r\n :process-node="{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(param.nextTaskNode.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label="下一节点名称">\r\n <b style="font-size: 16px">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n \x3c!-- 并行网关 --\x3e\r\n <template v-else-if="param.nextTaskNode.nodeType == \'parallelGateway\'">\r\n <userTask\r\n v-for="item in param.nextTaskNode.branches"\r\n :key="item.id"\r\n :personType="param.personType || \'\'"\r\n :personEntity="param.personEntity || {}"\r\n :processNode="{ \r\n ...item,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }"\r\n lv1label="下一节点名称"\r\n :ref="setItemRef(item.id)"\r\n :rules="[{ required: true, message: \'请选择处理人\' }]"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n \r\n\r\n <slot name="form"></slot>\r\n\r\n <el-dialog title="签字" :visible.sync="signVisible" append-to-body width="800px" @closed="closeSign" :close-on-click-modal="false">\r\n <div class="sign-container">\r\n <TopSign @saveSignature="handleSignature" @validateFail="noticeFail">\r\n </TopSign>\r\n </div>\r\n </el-dialog>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport userTask from "./userTask.vue";\r\nimport commIdea from "./commIdea.vue";\r\nimport TopSign from \'../../TopSign/topSign.vue\'\r\n\r\nexport default {\r\n components: { staffTree, userTask, commIdea, TopSign },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n targetUser: [],\r\n userTaskListData: {},\r\n outGatewayUserTaskModel: this.param.outGatewayUserTaskModel,\r\n Enum: $enum,\r\n signVisible: false,\r\n digitalSignature: \'\',\r\n confirmPreposition: false, \r\n confirmLoading: () => {}\r\n };\r\n },\r\n mounted() {\r\n if (\r\n this.param.ProcessInsObj.processDefId ==\r\n "obj_94014ede99b6495d8f6d5977314faa15"\r\n ) {\r\n this.commentMsg = "同意";\r\n }\r\n },\r\n computed: {\r\n hasSign() {\r\n if(this.param.taskObj.activityExtendAttributes) {\r\n let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n if(tmpObj.find(item => item.key == \'签字\')) {\r\n return tmpObj.find(item => item.key == \'签字\')\r\n }\r\n else {\r\n return false\r\n }\r\n }\r\n else {\r\n return false\r\n }\r\n },\r\n signRequired() {\r\n const fd = this.param.extendedProperties.find(i => {\r\n return i.name == \'signature\'\r\n })\r\n return fd ? true : false\r\n // if(this.param.taskObj.activityExtendAttributes) {\r\n // let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n // if(tmpObj.find(item => item.key == \'签字\')) {\r\n // return tmpObj.find(item => item.key == \'签字\').value == \'1\'\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n }\r\n },\r\n methods: {\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getProcessNode(o) {\r\n let obj = {};\r\n obj.humanPerformerName = o.userTaskModelDTO.humanPerformer.name;\r\n obj.id = o.id;\r\n obj.loopCardinality =\r\n o.loopCardinality || o.userTaskModelDTO.loopCardinality;\r\n obj.name = o.userTaskModelDTO.name;\r\n obj.type = o.type;\r\n obj.routeTxt = o.userTaskModelDTO.routeTxt;\r\n obj.participantList = o.userTaskModelDTO.participantList;\r\n obj.taskNode = this.param.taskNode;\r\n return obj;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定账户" ||\r\n humanPerformer == "固定单位"\r\n );\r\n },\r\n\r\n getTreeData(item) {\r\n if (this.param.nextTaskNode) {\r\n if (item.userTaskModelDTO.humanPerformer.name == "固定部门") {\r\n return item.userTaskModelDTO.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.userTaskModelDTO.humanPerformer.name == "固定单位") {\r\n return item.userTaskModelDTO.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.主体;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n // 提交前的前置函数,loading函数,附件列表\r\n confirm(preposition, loading, attachment) {\r\n if (Array.isArray(attachment)) {\r\n this.param.attachment = attachment;\r\n }\r\n\r\n console.log(this.param, \'测试\', this.userTaskListData)\r\n if (!this.commentMsg && this.param.commentMsgRequired) {\r\n ElMessage.warning("请输入审批意见");\r\n return false;\r\n }\r\n if (this.commentMsg.length > 200) {\r\n ElMessage.warning("审批意见不能超过200个字");\r\n return false;\r\n }\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || "",\r\n commentMsg: this.commentMsg || " ",\r\n comment: this.commentMsg || " ",\r\n businessData: this.param.businessData,\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n console.log(o, \'o\', this.$refs[o])\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(\'上传\', refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (res && res.vars && this.param.incomingConditionItemList&& this.param.incomingConditionItemList.length > 0) {\r\n this.param.incomingConditionItemList.forEach(item => {\r\n if (!res.vars[item.itemName]) {\r\n res.vars[item.itemName] = \'\'\r\n }\r\n })\r\n }\r\n console.log(res, \'res get value\')\r\n if (!res) {\r\n return false;\r\n }\r\n let assignees = []\r\n // 已经选了人,则用返回的,不然用自己选的\r\n const nextTaskNode = this.param.nextTaskNode\r\n if (nextTaskNode.setPersonnel) {\r\n assignees = nextTaskNode.assignees || []\r\n } else {\r\n assignees = (refCom.targetUserList || []).map(i => ({\r\n id: i.id,\r\n name: i.name,\r\n }))\r\n }\r\n param.assignees = assignees\r\n\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n\r\n // 如果不是结束事件,同时multiNodeParticipant为空,则提示\r\n let isNotEndEvent1 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && (!this.param.nextTaskNode.branches || this.param.nextTaskNode.branches.length <= 0)\r\n let isNotEndEvent2 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType != \'endEvent\'\r\n let isNotEndEvent3 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && !this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeType != \'endEvent\'\r\n let isNotEndEvent = isNotEndEvent1 || isNotEndEvent2 || isNotEndEvent3\r\n if (isNotEndEvent) {\r\n // 判断是不是仅有一个"exclusiveGateway"节点,同时该节点仅有一个子节点,同时已经选择了固定的人\r\n if (this.param.nextTaskNode.nodeType == \'exclusiveGateway\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)\r\n }\r\n } else {\r\n const keyLen = Object.keys(param.multiNodeParticipant).length\r\n if (!keyLen) {\r\n ElMessage.warning(\'请选择下一节点\')\r\n return false\r\n }\r\n }\r\n }\r\n param.pass = true\r\n\r\n if (Date.now()) {\r\n console.log(param, \'end\', this.param)\r\n // return;\r\n }\r\n // param.variables = {\r\n // wf_form_variable: \'\'\r\n // }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n if(this.signRequired) {\r\n this.confirmPreposition = preposition\r\n this.confirmLoading = loading\r\n this.signVisible = true\r\n return\r\n }\r\n loading();\r\n if (param) {\r\n console.log(param, \'测试\', this.param)\r\n // return;\r\n }\r\n if (preposition) {\r\n preposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n }).catch((e) => {\r\n this.$emit("fail", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : \'\') : e.message || e.msg || \'\');\r\n });\r\n }\r\n },\r\n confirmWithSign() {\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || "",\r\n commentMsg: this.commentMsg || " ",\r\n comment: this.commentMsg || " ",\r\n businessData: this.param.businessData,\r\n digitalSignature: {\r\n name: this.param.digitalSignature.name,\r\n url: this.param.digitalSignature.url,\r\n },\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (!res) {\r\n return false;\r\n }\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n\r\n // 如果不是结束事件,同时multiNodeParticipant为空,则提示\r\n let isNotEndEvent1 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && (!this.param.nextTaskNode.branches || this.param.nextTaskNode.branches.length <= 0)\r\n let isNotEndEvent2 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.nodeType != \'endEvent\'\r\n let isNotEndEvent3 = this.param.nextTaskNode && this.param.nextTaskNode.nodeType != \'endEvent\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && !this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeType != \'endEvent\'\r\n let isNotEndEvent = isNotEndEvent1 || isNotEndEvent2 || isNotEndEvent3\r\n if (isNotEndEvent) {\r\n // 判断是不是仅有一个"exclusiveGateway"节点,同时该节点仅有一个子节点,同时已经选择了固定的人\r\n if (this.param.nextTaskNode.nodeType == \'exclusiveGateway\' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)\r\n }\r\n } else {\r\n const keyLen = Object.keys(param.multiNodeParticipant).length\r\n if (!keyLen) {\r\n ElMessage.warning(\'请选择下一节点\')\r\n return false\r\n }\r\n }\r\n }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n param.pass = true\r\n this.confirmLoading();\r\n if (this.confirmPreposition) {\r\n this.confirmPreposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit("fail", "");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n }).catch((e) => {\r\n this.$emit("fail", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : \'\') : e.message || e.msg || \'\');\r\n });\r\n }\r\n },\r\n toSign() {\r\n this.signVisible = true\r\n },\r\n handleSignature(e, needClose) {\r\n this.param.digitalSignature = e\r\n console.log(e, \'digitalSignature\')\r\n if(needClose) {\r\n this.signVisible = false\r\n this.confirmWithSign()\r\n }\r\n },\r\n closeSign() {\r\n this.signVisible = false\r\n },\r\n noticeFail(msg) {\r\n ElMessage.warning(msg)\r\n }\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n.sign-idea {\r\n display: flex;\r\n span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n }\r\n}\r\n.sign-container {\r\n min-height: 60vh;\r\n}\r\n</style>\r\n']},media:void 0})},X,"data-v-51c0a88a",false,undefined,!1,k,void 0,void 0);const K={components:{staffTree:O,commIdea:U},props:{param:Object},data:()=>({commentMsg:""}),methods:{getRes(){return{commentMsg:this.commentMsg}},confirm(n,r){if(!this.commentMsg)return e.warning("请输入审批意见"),!1;n&&n(),r();let t={taskId:this.param.taskInstId,processInstanceId:this.param.processInstId,commentMsg:this.commentMsg||" ",comment:this.commentMsg||" ",businessData:this.param.businessData,assignees:[],pass:!1};f.tis.complete(t).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})}}};var ee=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[e.param.showCommIdea?r("el-form-item",{attrs:{label:"常用意见"}},[r("commIdea",{ref:"commIdea",on:{change:function(n){return e.commentMsg=n}}})],1):e._e(),e._v(" "),r("el-form-item",{attrs:{label:"审批意见",rules:[{required:!0,message:"审批意见不能为空"}]}},[r("el-input",{attrs:{rows:5,type:"textarea",maxlength:"200","show-word-limit":"",resize:"none",placeholder:"请输入审批意见"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}}),e._v(" "),e.param.showCommIdea?r("div",{staticClass:"add-idea"},[r("span",{on:{click:function(n){return e.$refs.commIdea.addIdea(e.commentMsg)}}},[e._v("设置为常用意见")])]):e._e()],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};ee._withStripped=!0;const ne=I({render:ee,staticRenderFns:[]},function(e){e&&e("data-v-68e67c30_0",{source:'\n@import "./content.css";\n.add-idea[data-v-68e67c30] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-68e67c30] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\cancel.vue"],names:[],mappings:";AAkFA,uBAAA;AACA;IACA,aAAA;IACA,oBAAA;AACA;AACA;IACA,cAAA;IACA,eAAA;AACA",file:"cancel.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item label="常用意见" v-if="param.showCommIdea">\r\n <commIdea ref="commIdea" @change="(e) => (commentMsg = e)" />\r\n </el-form-item>\r\n <el-form-item\r\n label="审批意见"\r\n :rules="[{ required: true, message: \'审批意见不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n type="textarea"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n placeholder="请输入审批意见"\r\n />\r\n <div class="add-idea" v-if="param.showCommIdea">\r\n <span @click="$refs[\'commIdea\'].addIdea(commentMsg)"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport commIdea from "./commIdea.vue";\r\n\r\nexport default {\r\n components: { staffTree, commIdea },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n };\r\n },\r\n methods: {\r\n getRes() {\r\n return { commentMsg: this.commentMsg };\r\n },\r\n confirm(preposition,loading) {\r\n if (!this.commentMsg) {\r\n ElMessage.warning("请输入审批意见");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading();\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || "",\r\n commentMsg: this.commentMsg || " ",\r\n comment: this.commentMsg || " ",\r\n businessData: this.param.businessData,\r\n };\r\n\r\n param.assignees = []\r\n param.pass = false\r\n\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n</style>\r\n']},media:void 0})},K,"data-v-68e67c30",false,undefined,!1,k,void 0,void 0);const re={components:{staffTree:O},props:{param:Object},data:()=>({commentMsg:"",nodeId:"",nodesData:[]}),mounted(){this.getReturnableNodes()},methods:{getReturnableNodes(){f.repository.backNodes({taskId:this.param.taskInstId}).then(e=>{e.code==u.success&&(this.nodesData=(e.data||[]).filter(e=>!e.nodeId.includes("startEvent")))})},getRes(){return{commentMsg:this.commentMsg,nodeId:this.nodeId}},confirm(n,r){return this.nodeId?this.commentMsg?(n&&n(),r(),void f.tis.rollback(this.param.taskInstId,this.nodeId,this.commentMsg).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})):(e.warning("请输入退回原因"),!1):(e.warning("请选择退回节点"),!1)}}};var te=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"退回节点",rules:[{required:!0,message:"请选择退回节点"}]}},[r("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"退回节点"},model:{value:e.nodeId,callback:function(n){e.nodeId=n},expression:"nodeId"}},e._l(e.nodesData,function(e){return r("el-option",{key:e.nodeId,attrs:{label:e.nodeName,value:e.nodeId}})}),1)],1),e._v(" "),r("el-form-item",{attrs:{label:"退回原因",rules:[{required:!0,message:"退回原因不能为空"}]}},[r("el-input",{attrs:{rows:5,maxlength:"200","show-word-limit":"",resize:"none",type:"textarea",placeholder:"退回原因"},model:{value:e.commentMsg,callback:function(n){e.commentMsg=n},expression:"commentMsg"}})],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};te._withStripped=!0;const se=I({render:te,staticRenderFns:[]},function(e){e&&e("data-v-29b5c2d6_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\roolback.vue"],names:[],mappings:";AA8FA,uBAAA",file:"roolback.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="退回节点"\r\n :rules="[{ required: true, message: \'请选择退回节点\' }]"\r\n >\r\n <el-select v-model="nodeId" placeholder="退回节点" style="width: 100%">\r\n <el-option\r\n v-for="item in nodesData"\r\n :label="item.nodeName"\r\n :value="item.nodeId"\r\n :key="item.nodeId"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item\r\n label="退回原因"\r\n :rules="[{ required: true, message: \'退回原因不能为空\' }]"\r\n >\r\n <el-input\r\n v-model="commentMsg"\r\n :rows="5"\r\n maxlength="200"\r\n show-word-limit\r\n resize="none"\r\n type="textarea"\r\n placeholder="退回原因"\r\n />\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n nodeId: "",\r\n nodesData: [],\r\n };\r\n },\r\n mounted() {\r\n this.getReturnableNodes();\r\n },\r\n methods: {\r\n getReturnableNodes() {\r\n api.repository.backNodes({\r\n taskId: this.param.taskInstId,\r\n }).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.nodesData = (res.data || []).filter(item => !item.nodeId.includes(\'startEvent\'));\r\n }\r\n });\r\n },\r\n getRes() {\r\n return { commentMsg: this.commentMsg, nodeId: this.nodeId };\r\n },\r\n confirm(preposition,loading) {\r\n if (!this.nodeId) {\r\n ElMessage.warning("请选择退回节点");\r\n return false;\r\n }\r\n if (!this.commentMsg) {\r\n ElMessage.warning("请输入退回原因");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading()\r\n api.tis\r\n .rollback(this.param.taskInstId, this.nodeId, this.commentMsg)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},re,"data-v-29b5c2d6",false,undefined,!1,k,void 0,void 0);const ie={components:{staffTree:O},props:{param:Object},data:()=>({commentMsg:"",nodeId:"",type:"",nodesData:[{type:"wf_withdraw_end",label:"撤销"},{type:"wf_withdraw_start",label:"撤回"}]}),mounted(){this.getReturnableNodes()},methods:{getReturnableNodes(){},getRes(){return{commentMsg:this.commentMsg,nodeId:this.nodeId}},confirm(n,r){if(!this.type)return e.warning("请选择操作类型"),!1;n&&n(),r(),f.tis.withdrawTask({taskId:this.param.taskInstId,withdrawType:this.type}).then(e=>{e.code==u.success?this.$emit("success"):this.$emit("fail",e.msg)})}}};var ae=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"选择操作类型",rules:[{required:!0,message:"请选择操作类型"}]}},[r("el-radio-group",{staticStyle:{width:"100%"},model:{value:e.type,callback:function(n){e.type=n},expression:"type"}},e._l(e.nodesData,function(n){return r("el-radio",{key:n.type,attrs:{label:n.type}},[e._v(e._s(n.label))])}),1)],1),e._v(" "),r("el-form-item",{attrs:{label:"操作说明"}},[r("div",[r("span",{staticStyle:{color:"red","font-weight":"600"}},[e._v("撤销")]),e._v(":撤销终止此流程\n ")]),e._v(" "),r("div",[r("span",{staticStyle:{color:"red","font-weight":"600"}},[e._v("撤回")]),e._v(":撤回到发起人重新提交,若当前流程不存在发起人节点,功能同撤销\n ")])]),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};ae._withStripped=!0;const oe=I({render:ae,staticRenderFns:[]},function(e){e&&e("data-v-d8f4105a_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\withdrawTask.vue"],names:[],mappings:";AA0GA,uBAAA",file:"withdrawTask.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="选择操作类型"\r\n :rules="[{ required: true, message: \'请选择操作类型\' }]"\r\n >\r\n \x3c!-- <el-select v-model="type" placeholder="退回节点" style="width: 100%">\r\n <el-option\r\n v-for="item in nodesData"\r\n :label="item.label"\r\n :value="item.id"\r\n :key="item.id"\r\n ></el-option>\r\n </el-select> --\x3e\r\n \x3c!-- 改成el-radio-group --\x3e\r\n <el-radio-group v-model="type" style="width: 100%">\r\n <el-radio\r\n v-for="item in nodesData"\r\n :label="item.type"\r\n :key="item.type"\r\n >{{ item.label }}</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item\r\n label="操作说明"\r\n >\r\n <div>\r\n <span style="color: red;font-weight:600;">撤销</span>:撤销终止此流程\r\n </div>\r\n <div>\r\n <span style="color: red;font-weight:600;">撤回</span>:撤回到发起人重新提交,若当前流程不存在发起人节点,功能同撤销\r\n </div>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: "",\r\n nodeId: "",\r\n type: "",\r\n nodesData: [\r\n {\r\n type: \'wf_withdraw_end\',\r\n label: \'撤销\',\r\n },\r\n {\r\n type: \'wf_withdraw_start\',\r\n label: \'撤回\',\r\n },\r\n ],\r\n };\r\n },\r\n mounted() {\r\n this.getReturnableNodes();\r\n },\r\n methods: {\r\n getReturnableNodes() {\r\n // api.tis.getReturnableNodes(this.param.taskInstId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) {\r\n // this.nodesData = res.data;\r\n // }\r\n // });\r\n },\r\n getRes() {\r\n return { commentMsg: this.commentMsg, nodeId: this.nodeId };\r\n },\r\n confirm(preposition,loading) {\r\n if (!this.type) {\r\n ElMessage.warning("请选择操作类型");\r\n return false;\r\n }\r\n if (preposition)preposition();\r\n loading()\r\n // this.param.taskInstId, this.nodeId, this.commentMsg\r\n api.tis\r\n .withdrawTask({\r\n taskId: this.param.taskInstId,\r\n withdrawType: this.type,\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success");\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},ie,"data-v-d8f4105a",false,undefined,!1,k,void 0,void 0);const le={components:{staffTree:O},props:{param:Object,isOperLoading:!1},data:()=>({reason:"",targetUser:[]}),methods:{getRes(){return{targetUser:this.targetUser}},confirm(n,r){if(!this.targetUser||0==this.targetUser.length)return e.warning("请选择抄送人"),!1;let t=this.targetUser.join(" ")||"";n&&n({userList:this.$refs.staffTree.userList}),r(),f.tis.createCCTask({processInstId:this.param.processInstId,participant:t,taskId:this.param.taskInstId,title:""}).then(e=>{e.code==u.success?this.$emit("success",!1):this.$emit("fail",e.msg)})}}};var de=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-form",{attrs:{"label-width":"120px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"抄送人员",rules:[{required:!0,message:"请选择抄送人员"}]}},[r("staffTree",{ref:"staffTree",attrs:{personType:e.param.personType,personEntity:e.param.personEntity,multiple:"",max:5e3,disable:e.isOperLoading},model:{value:e.targetUser,callback:function(n){e.targetUser=n},expression:"targetUser"}})],1),e._v(" "),e._t("file"),e._v(" "),e._t("form")],2)};de._withStripped=!0;const ce=I({render:de,staticRenderFns:[]},function(e){e&&e("data-v-7e1c1b45_0",{source:'\n@import "./content.css";\r\n',map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\ccTask.vue"],names:[],mappings:";AAoFA,uBAAA",file:"ccTask.vue",sourcesContent:['<template>\r\n <el-form label-width="120px" @submit.native.prevent status-icon>\r\n <el-form-item\r\n label="抄送人员"\r\n :rules="[{ required: true, message: \'请选择抄送人员\' }]"\r\n >\r\n <staffTree\r\n :personType="param.personType"\r\n :personEntity="param.personEntity"\r\n v-model="targetUser"\r\n multiple\r\n :max="5000"\r\n ref="staffTree"\r\n :disable = "isOperLoading"\r\n ></staffTree>\r\n </el-form-item>\r\n <slot name="file"></slot>\r\n <slot name="form"></slot>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from "../enum";\r\nimport staffTree from "../staff-tree.vue";\r\nimport api from "../api";\r\nimport { Message as ElMessage } from "element-ui";\r\n\r\nexport default {\r\n components: { staffTree },\r\n props: {\r\n param: Object,\r\n isOperLoading: false,\r\n },\r\n data() {\r\n return {\r\n reason: "",\r\n targetUser: [],\r\n };\r\n },\r\n methods: {\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n\r\n confirm(preposition, loading) {\r\n if (!this.targetUser || this.targetUser.length == 0) {\r\n ElMessage.warning("请选择抄送人");\r\n return false;\r\n }\r\n // if (!this.reason) {\r\n // ElMessage.warning("请填写加签原因");\r\n // return false;\r\n // }\r\n // if (this.reason.length > 200) {\r\n // ElMessage.warning("加签原因不能超过200个字");\r\n // return false;\r\n // }\r\n let ids = this.targetUser.join(" ") || "";\r\n if (preposition)\r\n preposition({\r\n userList: this.$refs["staffTree"].userList,\r\n });\r\n loading();\r\n api.tis\r\n .createCCTask({\r\n processInstId: this.param.processInstId,\r\n // parentTaskInstId: this.param.taskInstId,\r\n participant: ids,\r\n taskId: this.param.taskInstId,\r\n title: "",\r\n })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit("success", false);\r\n } else {\r\n this.$emit("fail", res.msg);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n@import "./content.css";\r\n</style>\r\n']},media:void 0})},le,"data-v-7e1c1b45",false,undefined,!1,k,void 0,void 0);var pe=Object.freeze({__proto__:null,cancel:ne,ccTask:ce,complete:Z,counterSign:$,delegateTask:V,roolback:se,withdrawTask:oe});const me={upload:e=>new Promise((n,r)=>{f.getAjaxObj().post("/file/upload",e).then(e=>{n(e)})})};const he={name:"JyrFileUpload",inject:{elForm:{default:""}},props:{acceptType:{type:String,default:""},showFileName:{type:Boolean,default:!0},value:{type:[String,Array],default:""},locked:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1},fileMaxSize:{type:Number,default:200},hasFilename:{type:Boolean,default:!1},hasContainId:{type:Boolean,default:!1},fullFileObject:{type:Boolean,default:!1},isText:{type:Boolean,default:!1},viewCallBack:{type:Function},remark:{type:String,default:""},showFile:{type:Boolean,default:!1},limit:[String,Number]},data:()=>({index:void 0,fileList:[],fullFileList:[],loading:!1}),computed:{previewSrcList(){return this.fileList.filter(e=>this.isImage(e))},showPlus(){return!this.isDisabled&&(this.multiple||this.fileList.length<1)},showEmpty(){return this.isDisabled&&this.fileList.length<1},isDisabled(){return this.locked||this.elForm&&this.elForm.disabled}},watch:{value(){this.composeFileList()}},created(){this.composeFileList()},methods:{async selectFile(){this.$refs.file.click()},onUploadChange(e){const n=e.target.files;if(-1!=this.limit&&n.length+this.fileList.length>this.limit)return this.$message.error("最多只能选择"+this.limit+"个文件"),!1;let r=this.fullFileList.map(e=>e.originFileName);for(let e=0;e<n.length;e++){const t=n[e];if(0==t.size)return this.$message.error("文件内容为空,请重新选择"),!1;const s=1048576*this.fileMaxSize;if(t.size>s)return this.$refs.file.value=null,void this.$errorMessage(`文件大小不能超过${this.fileMaxSize}M`);if(!t)return void(this.$refs.file.value=null);const i=t.name.split(".");if(""!=this.acceptType&&this.acceptType.indexOf(i[i.length-1])<0)return this.$refs.file.value=null,void this.$errorMessage(`文件类型限制为${this.acceptType}`);let a=0,o=t.name;for(;a<r.length&&r.includes(t.name);){const e=t.name.lastIndexOf(".");if(a+=1,e>-1){o=t.name.substring(0,e)+"("+a+")"+t.name.substring(e)}else o=t.name+"("+a+")"}r.push(o),this.doUpload(t,o)}},coputedFullFileList(e){this.$emit("input",e),this.$emit("change",e)},async doUpload(e,n){this.loading=!0;const r=new FormData;r.append("file",e,n);const t=await me.upload(r);if(this.loading=!1,!t.success)return;if(this.$refs.file.value=null,!this.multiple){if(this.fullFileObject)this.$emit("input",[t.data]),this.$emit("change",[t.data]);else{const e=this.composeFilename(t.data);this.$emit("input",e),this.$emit("change",e)}return}this.index>=0?(this.fileList.splice(this.index,1,this.composeFilename(t.data)),this.fullFileList.splice(this.index,1,t.data)):(this.fileList.push(this.composeFilename(t.data)),this.fullFileList.push(t.data));const s=this.fullFileObject?this.fullFileList:this.fileList.join(",");this.coputedFullFileList(s)},composeFileList(){if(this.fullFileObject)return this.fileList=this.value&&this.value.length?this.value.map(e=>`${e.url}&${e.name}`):[],void(this.fullFileList=this.value&&this.value.length?this.value.map(e=>e):[]);this.value?this.fileList=this.value.split(",").filter(e=>e):this.fileList=[]},composeFilename(e){return this.hasFilename?`${e.url}?filename=${e.fileName}`:this.hasContainId?e.id:`${e.url}&${e.name}`},isImage(e){const n=e.split("."),r=n[n.length-1];return["png","jpg","jpeg","gif","bmp"].includes(r)},isDw(e){const n=e.split("."),r=n[n.length-1];return["dwg","dwt"].includes(r)},isPdf(e){const n=e.split("."),r=n[n.length-1];return["pdf"].includes(r)},onDelete(e){if(this.multiple){this.fileList.splice(e,1),this.fullFileList.splice(e,1);const n=this.fullFileObject?this.fullFileList:this.fileList.join(",");this.coputedFullFileList(n)}else this.$emit("input",""),this.$emit("change","")},onPreview(e){if(this.viewCallBack)return void this.viewCallBack(e,this.fileList);let n=this.fileList[e].split("."),r=n[n.length-1],t=["png","jpg","jpeg","gif"].some(function(e){return e==r}),s=null;if(this.fileList.forEach((n,r)=>{this.isImage(n)&&r<=e&&(null==s?s=0:s+=1)}),t)this.$refs.images[s].clickHandler();else{let n=`${this.fileList[e]}`,r=1;-1!==n.indexOf("https")||-1!==n.indexOf("http")?(r=-1!==n.indexOf("https")?1:0,window.open(`https://wdyl.ddzg.cn:8089/?ssl=${r}&furl=${n}`)):-1===n.indexOf("http")&&me.list([n]).then(e=>{r=-1!==e.data[0].url.indexOf("https")?1:0,window.open(`https://wdyl.ddzg.cn:8089/?ssl=${r}&furl=${e.data[0].url}`)})}},onDownload(e){const n=this.fileList[e];-1!==n.indexOf("https")||-1!==n.indexOf("http")?this.downloadFile(n,n.slice(n.lastIndexOf("&")+1)):me.list([n]).then(e=>{this.downloadFile(e.data[0].url,e.data[0].url.slice(e.data[0].url.lastIndexOf("&")+1))})},downloadFile:(e,n)=>{var r=document.createElement("a");r.download=n,r.style.display="none";var t=new Blob([e]);r.href=URL.createObjectURL(t),document.body.appendChild(r),r.click(),document.body.removeChild(r)}}};var fe=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}]},[r("ul",{staticClass:"file-wrap"},[e._l(e.fileList,function(n,t){return r("li",{key:t,staticClass:"file-item"},[e.isImage(n)?r("section",{class:[e.isText?"TextWrapper":"image-wrapper"]},[r("el-image",{ref:"images",refInFor:!0,attrs:{src:n,"preview-src-list":e.previewSrcList}}),e._v(" "),r("div",{staticClass:"action-area"},[r("span",{staticClass:"action-preview",on:{click:function(n){return e.onPreview(t)}}},[r("i",{staticClass:"el-icon-zoom-in",attrs:{title:"预览"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-upload",on:{click:function(n){return e.selectFile(t)}}},[r("i",{staticClass:"el-icon-upload2",attrs:{title:"上传"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-delete",on:{click:function(n){return e.onDelete(t)}}},[r("i",{staticClass:"el-icon-delete",attrs:{title:"删除"}})])])],1):e.isDw(n)?r("section",{staticClass:"image-wrapper"},[e.isPdf(n)?r("div",{staticClass:"el-image"},[r("img",{staticClass:"el-image__inner",attrs:{src:l,alt:""}})]):r("div",{staticClass:"el-image el-attach"},[r("img",{staticClass:"el-image__inner",attrs:{src:d,alt:""}})]),e._v(" "),r("div",{staticClass:"action-area"},[r("span",{staticClass:"action-preview",on:{click:function(n){return e.onDownload(t)}}},[r("i",{staticClass:"el-icon-download",attrs:{title:"下载"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-upload",on:{click:function(n){return e.selectFile(t)}}},[r("i",{staticClass:"el-icon-upload2",attrs:{title:"上传"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-delete",on:{click:function(n){return e.onDelete(t)}}},[r("i",{staticClass:"el-icon-delete",attrs:{title:"删除"}})])])]):n?r("section",{staticClass:"image-wrapper"},[e.isPdf(n)?r("div",{staticClass:"el-image"},[r("img",{staticClass:"el-image__inner",attrs:{src:l,alt:""}})]):r("div",{staticClass:"el-image el-attach"},[r("img",{staticClass:"el-image__inner",attrs:{src:d,alt:""}})]),e._v(" "),r("div",{staticClass:"action-area"},[r("span",{staticClass:"action-preview",on:{click:function(n){return e.onDownload(t)}}},[r("i",{staticClass:"el-icon-download",attrs:{title:"下载"}})]),e._v(" "),r("span",{staticClass:"action-preview",on:{click:function(n){return e.onPreview(t)}}},[r("i",{staticClass:"el-icon-zoom-in",attrs:{title:"预览"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-upload",on:{click:function(n){return e.selectFile(t)}}},[r("i",{staticClass:"el-icon-upload2",attrs:{title:"上传"}})]),e._v(" "),e.isDisabled?e._e():r("span",{staticClass:"action-delete",on:{click:function(n){return e.onDelete(t)}}},[r("i",{staticClass:"el-icon-delete",attrs:{title:"删除"}})])])]):e._e(),e._v(" "),!e.showFile&&e.showFileName?r("div",{attrs:{title:n.slice(n.lastIndexOf("&")+1)}},[r("div",{staticClass:"file_name"},[e._v("\n "+e._s(n.slice(n.lastIndexOf("&")+1))+"\n ")])]):e._e(),e._v(" "),e.showFile?r("div",{attrs:{title:n.slice(n.lastIndexOf("&")+1)}},[e._t("filename",function(){return[e.fullFileObject&&e.fullFileList[t].fileSize?r("div",{staticClass:"file_name",staticStyle:{"text-align":"center",height:"23px","line-height":"23px"}},[e._v("\n "+e._s(e.fullFileList[t].fileSize>1024?(e.fullFileList[t].fileSize/1048576).toFixed(2):(e.fullFileList[t].fileSize/1024).toFixed(2))+"\n "+e._s(e.fullFileList[t].fileSize>1024?"M":"KB")+"\n ")]):e._e(),e._v(" "),r("div",{staticClass:"file_name",staticStyle:{height:"25px","line-height":"25px"}},[e._v("\n "+e._s(n.slice(n.lastIndexOf("&")+1))+"\n ")])]},{filename:n})],2):e._e()])}),e._v(" "),e.showPlus?r("li",{staticClass:"file-item"},[r("div",{staticClass:"image-wrapper pointer",on:{click:function(n){return e.selectFile()}}},[r("i",{staticClass:"el-icon-plus"})])]):e._e(),e._v(" "),e.showEmpty?r("li",{staticClass:"empty-wrap"},[e._v("暂无数据")]):e._e()],2),e._v(" "),""!==e.remark?r("div",{staticStyle:{color:"gray"}},[e._v(e._s(e.remark))]):e._e(),e._v(" "),e.value?r("section",{staticClass:"value-wrap"}):e._e(),e._v(" "),r("input",{ref:"file",staticClass:"file-input",attrs:{accept:e.acceptType,type:"file",multiple:e.multiple},on:{change:e.onUploadChange}})])};fe._withStripped=!0;const ue=I({render:fe,staticRenderFns:[]},function(e){e&&e("data-v-1bc31644_0",{source:".file-wrap[data-v-1bc31644] {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0px;\n margin: 0 !important;\n}\n.file-wrap li[data-v-1bc31644] {\n list-style: none;\n}\n.file-wrap .file-item[data-v-1bc31644] {\n display: inline-block;\n margin: 0 8px 30px 0;\n border: 1px dashed #d9d9d9;\n width: 80px;\n height: 80px;\n box-sizing: border-box;\n border-radius: 6px;\n}\n.file-wrap .file-item .file_name[data-v-1bc31644] {\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.file-wrap .file-item .el-icon-plus[data-v-1bc31644] {\n color: #1389ff;\n font-weight: bold;\n font-size: 35px;\n}\n.file-input[data-v-1bc31644] {\n display: none;\n}\n.TextWrapper[data-v-1bc31644] {\n position: relative;\n width: 30%;\n height: 30%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.TextWrapper[data-v-1bc31644] .el-image {\n width: 100%;\n height: 100%;\n}\n.TextWrapper[data-v-1bc31644] .el-attach {\n width: 31px;\n height: 37px;\n}\n.TextWrapper[data-v-1bc31644] .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.TextWrapper[data-v-1bc31644] .action-area:hover {\n opacity: 1;\n}\n.TextWrapper[data-v-1bc31644] .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.TextWrapper[data-v-1bc31644] .action-area span + span {\n margin-left: 0.5em;\n}\n.image-wrapper[data-v-1bc31644] {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.image-wrapper[data-v-1bc31644] .el-image {\n width: 100%;\n height: 100%;\n}\n.image-wrapper[data-v-1bc31644] .el-attach {\n width: 31px;\n height: 37px;\n}\n.image-wrapper[data-v-1bc31644] .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.image-wrapper[data-v-1bc31644] .action-area:hover {\n opacity: 1;\n}\n.image-wrapper[data-v-1bc31644] .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.image-wrapper[data-v-1bc31644] .action-area span + span {\n margin-left: 0.5em;\n}\n.pointer[data-v-1bc31644] {\n cursor: pointer;\n text-decoration: none !important;\n}\n\n/*# sourceMappingURL=upload.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\JyrFileUpload\\upload.vue","upload.vue"],names:[],mappings:"AAyeA;EACA,gBAAA;EACA,aAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ACxeA;ADyeA;EACA,gBAAA;ACveA;AD0eA;EACA,qBAAA;EACA,oBAAA;EACA,0BAAA;EACA,WAAA;EACA,YAAA;EACA,sBAAA;EACA,kBAAA;ACxeA;AD0eA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ACxeA;AD2eA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ACzeA;AD8eA;EACA,aAAA;AC3eA;AD8eA;EACA,kBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;AC3eA;AD6eA;EACA,WAAA;EACA,YAAA;AC3eA;AD8eA;EACA,WAAA;EACA,YAAA;AC5eA;AD+eA;EACA,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,8BAAA;EACA,WAAA;EACA,UAAA;EACA,wBAAA;AC7eA;AD+eA;EACA,UAAA;AC7eA;ADgfA;EACA,qBAAA;EACA,eAAA;AC9eA;ADgfA;EACA,kBAAA;AC9eA;ADofA;EACA,kBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;ACjfA;ADmfA;EACA,WAAA;EACA,YAAA;ACjfA;ADofA;EACA,WAAA;EACA,YAAA;AClfA;ADqfA;EACA,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,8BAAA;EACA,WAAA;EACA,UAAA;EACA,wBAAA;ACnfA;ADqfA;EACA,UAAA;ACnfA;ADsfA;EACA,qBAAA;EACA,eAAA;ACpfA;ADsfA;EACA,kBAAA;ACpfA;AD0fA;EACA,eAAA;EACA,gCAAA;ACvfA;;AAEA,qCAAqC",file:"upload.vue",sourcesContent:['<template>\r\n <div v-loading="loading">\r\n <ul class="file-wrap">\r\n <li v-for="(filename, index) in fileList" :key="index" class="file-item">\r\n <section\r\n v-if="isImage(filename)"\r\n :class="[isText ? \'TextWrapper\' : \'image-wrapper\']"\r\n >\r\n <el-image\r\n ref="images"\r\n :src="filename"\r\n :preview-src-list="previewSrcList"\r\n />\r\n <div class="action-area">\r\n <span class="action-preview" @click="onPreview(index)">\r\n <i class="el-icon-zoom-in" title="预览" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-upload"\r\n @click="selectFile(index)"\r\n >\r\n <i class="el-icon-upload2" title="上传" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-delete"\r\n @click="onDelete(index)"\r\n >\r\n <i class="el-icon-delete" title="删除" />\r\n </span>\r\n </div>\r\n \x3c!-- <div class="file_name" v-if="showFileName">{{filename.slice(filename.lastIndexOf(\'/\') + 1)}}</div>--\x3e\r\n </section>\r\n <section v-else-if="isDw(filename)" class="image-wrapper">\r\n <div class="el-image" v-if="isPdf(filename)">\r\n <img\r\n src="@/assets/images/pdf-file.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div v-else class="el-image el-attach">\r\n <img\r\n src="@/assets/images/components/attach.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div class="action-area">\r\n <span class="action-preview" @click="onDownload(index)">\r\n <i class="el-icon-download" title="下载" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-upload"\r\n @click="selectFile(index)"\r\n >\r\n <i class="el-icon-upload2" title="上传" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-delete"\r\n @click="onDelete(index)"\r\n >\r\n <i class="el-icon-delete" title="删除" />\r\n </span>\r\n </div>\r\n </section>\r\n <section v-else-if="filename" class="image-wrapper">\r\n <div class="el-image" v-if="isPdf(filename)">\r\n <img\r\n src="@/assets/images/pdf-file.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div v-else class="el-image el-attach">\r\n <img\r\n src="@/assets/images/components/attach.png"\r\n class="el-image__inner"\r\n alt=""\r\n />\r\n </div>\r\n <div class="action-area">\r\n <span class="action-preview" @click="onDownload(index)">\r\n <i class="el-icon-download" title="下载" />\r\n </span>\r\n <span class="action-preview" @click="onPreview(index)">\r\n <i class="el-icon-zoom-in" title="预览" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-upload"\r\n @click="selectFile(index)"\r\n >\r\n <i class="el-icon-upload2" title="上传" />\r\n </span>\r\n <span\r\n v-if="!isDisabled"\r\n class="action-delete"\r\n @click="onDelete(index)"\r\n >\r\n <i class="el-icon-delete" title="删除" />\r\n </span>\r\n </div>\r\n </section>\r\n <div\r\n v-if="!showFile && showFileName"\r\n :title="filename.slice(filename.lastIndexOf(\'&\') + 1)"\r\n >\r\n <div class="file_name">\r\n {{ filename.slice(filename.lastIndexOf("&") + 1) }}\r\n </div>\r\n </div>\r\n <div\r\n v-if="showFile"\r\n :title="filename.slice(filename.lastIndexOf(\'&\') + 1)"\r\n >\r\n <slot name="filename" :filename="filename">\r\n <div\r\n class="file_name"\r\n v-if="fullFileObject && fullFileList[index].fileSize"\r\n style="text-align: center; height: 23px; line-height: 23px"\r\n >\r\n {{\r\n fullFileList[index].fileSize > 1024\r\n ? (fullFileList[index].fileSize / (1024 * 1024)).toFixed(2)\r\n : (fullFileList[index].fileSize / 1024).toFixed(2)\r\n }}\r\n {{ fullFileList[index].fileSize > 1024 ? "M" : "KB" }}\r\n </div>\r\n <div class="file_name" style="height: 25px; line-height: 25px">\r\n {{ filename.slice(filename.lastIndexOf("&") + 1) }}\r\n </div>\r\n </slot>\r\n </div>\r\n </li>\r\n <li v-if="showPlus" class="file-item">\r\n <div class="image-wrapper pointer" @click="selectFile()">\r\n <i class="el-icon-plus" />\r\n </div>\r\n </li>\r\n <li v-if="showEmpty" class="empty-wrap">暂无数据</li>\r\n </ul>\r\n <div v-if="remark !== \'\'" style="color: gray">{{ remark }}</div>\r\n <section v-if="value" class="value-wrap" />\r\n <input\r\n :accept="acceptType"\r\n ref="file"\r\n type="file"\r\n class="file-input"\r\n @change="onUploadChange"\r\n :multiple="multiple"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport ajax from "../zjp_process/api";\r\nconst Api = {\r\n upload: (form) => {\r\n return new Promise((resolve, reject) => {\r\n ajax\r\n .getAjaxObj()\r\n .post("/file/upload", form)\r\n .then((e) => {\r\n resolve(e);\r\n });\r\n });\r\n },\r\n};\r\nexport default {\r\n name: "JyrFileUpload",\r\n inject: {\r\n elForm: {\r\n default: "",\r\n },\r\n },\r\n props: {\r\n acceptType: {\r\n type: String,\r\n default: "",\r\n },\r\n showFileName: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n value: {\r\n type: [String, Array],\r\n default: "",\r\n },\r\n locked: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n fileMaxSize: {\r\n type: Number,\r\n default: 200,\r\n },\r\n hasFilename: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n hasContainId: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n fullFileObject: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isText: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n viewCallBack: {\r\n type: Function,\r\n },\r\n remark: {\r\n type: String,\r\n default: "",\r\n },\r\n showFile: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n limit: [String, Number],\r\n },\r\n data() {\r\n return {\r\n index: undefined,\r\n fileList: [],\r\n fullFileList: [],\r\n loading: false,\r\n };\r\n },\r\n computed: {\r\n previewSrcList() {\r\n return this.fileList.filter((v) => this.isImage(v));\r\n },\r\n showPlus() {\r\n return !this.isDisabled && (this.multiple || this.fileList.length < 1);\r\n },\r\n showEmpty() {\r\n return this.isDisabled && this.fileList.length < 1;\r\n },\r\n isDisabled() {\r\n return this.locked || (this.elForm && this.elForm.disabled);\r\n },\r\n },\r\n watch: {\r\n value() {\r\n this.composeFileList();\r\n },\r\n },\r\n created() {\r\n this.composeFileList();\r\n },\r\n methods: {\r\n async selectFile() {\r\n console.log("上传文件开始");\r\n this.$refs.file.click();\r\n },\r\n onUploadChange(event) {\r\n const fileList = event.target.files;\r\n if (\r\n this.limit != -1 &&\r\n fileList.length + this.fileList.length > this.limit\r\n ) {\r\n this.$message.error("最多只能选择" + this.limit + "个文件");\r\n return false;\r\n }\r\n console.log(fileList.length, "文件列表");\r\n let tempList = this.fullFileList.map((item) => item.originFileName);\r\n for (let i = 0; i < fileList.length; i++) {\r\n const file = fileList[i];\r\n if (file.size == 0) {\r\n this.$message.error("文件内容为空,请重新选择");\r\n return false;\r\n }\r\n const fileMaxSize = 1024 * 1024 * this.fileMaxSize;\r\n if (file.size > fileMaxSize) {\r\n this.$refs.file.value = null;\r\n this.$errorMessage(`文件大小不能超过${this.fileMaxSize}M`);\r\n return;\r\n }\r\n\r\n if (!file) {\r\n this.$refs.file.value = null;\r\n return;\r\n }\r\n const arrays = file.name.split(".");\r\n if (\r\n this.acceptType != "" &&\r\n this.acceptType.indexOf(arrays[arrays.length - 1]) < 0\r\n ) {\r\n this.$refs.file.value = null;\r\n this.$errorMessage(`文件类型限制为${this.acceptType}`);\r\n return;\r\n }\r\n let count = 0;\r\n let fileName = file.name;\r\n while (count < tempList.length && tempList.includes(file.name)) {\r\n const inx = file.name.lastIndexOf(".");\r\n count = count + 1;\r\n if (inx > -1) {\r\n const beforeName = file.name.substring(0, inx);\r\n const typeName = file.name.substring(inx);\r\n fileName = beforeName + "(" + count + ")" + typeName;\r\n } else {\r\n fileName = file.name + "(" + count + ")";\r\n }\r\n }\r\n tempList.push(fileName);\r\n console.log(file, "上传文件");\r\n this.doUpload(file, fileName);\r\n }\r\n\r\n console.log("all", fileList);\r\n },\r\n coputedFullFileList(fileData) {\r\n this.$emit("input", fileData);\r\n this.$emit("change", fileData);\r\n },\r\n async doUpload(file, fileName) {\r\n this.loading = true;\r\n const formData = new FormData();\r\n formData.append("file", file, fileName);\r\n const res = await Api.upload(formData);\r\n console.log(res);\r\n this.loading = false;\r\n if (!res.success) {\r\n return;\r\n }\r\n this.$refs.file.value = null;\r\n if (!this.multiple) {\r\n if (this.fullFileObject) {\r\n this.$emit("input", [res.data]);\r\n this.$emit("change", [res.data]);\r\n } else {\r\n const filename = this.composeFilename(res.data);\r\n this.$emit("input", filename);\r\n this.$emit("change", filename);\r\n }\r\n return;\r\n }\r\n if (this.index >= 0) {\r\n this.fileList.splice(this.index, 1, this.composeFilename(res.data));\r\n this.fullFileList.splice(this.index, 1, res.data);\r\n } else {\r\n this.fileList.push(this.composeFilename(res.data));\r\n this.fullFileList.push(res.data);\r\n }\r\n console.log("filename====", this.fileList);\r\n\r\n const fileStr = this.fullFileObject\r\n ? this.fullFileList\r\n : this.fileList.join(",");\r\n this.coputedFullFileList(fileStr);\r\n },\r\n composeFileList() {\r\n if (this.fullFileObject) {\r\n this.fileList =\r\n this.value && this.value.length\r\n ? this.value.map((item) => `${item.url}&${item.name}`)\r\n : [];\r\n this.fullFileList =\r\n this.value && this.value.length ? this.value.map((item) => item) : [];\r\n return;\r\n }\r\n if (this.value) {\r\n this.fileList = this.value.split(",").filter((v) => v);\r\n } else {\r\n this.fileList = [];\r\n }\r\n },\r\n composeFilename(data) {\r\n return this.hasFilename\r\n ? `${data.url}?filename=${data.fileName}`\r\n : this.hasContainId\r\n ? data.id\r\n : `${data.url}&${data.name}`;\r\n },\r\n isImage(filename) {\r\n const arr = filename.split(".");\r\n const extension = arr[arr.length - 1];\r\n return ["png", "jpg", "jpeg", "gif", "bmp"].includes(extension);\r\n },\r\n isDw(filename) {\r\n const arr = filename.split(".");\r\n const extension = arr[arr.length - 1];\r\n return ["dwg", "dwt"].includes(extension);\r\n },\r\n isPdf(filename) {\r\n const arr = filename.split(".");\r\n const extension = arr[arr.length - 1];\r\n return ["pdf"].includes(extension);\r\n },\r\n onDelete(index) {\r\n if (this.multiple) {\r\n this.fileList.splice(index, 1);\r\n this.fullFileList.splice(index, 1);\r\n const fileStr = this.fullFileObject\r\n ? this.fullFileList\r\n : this.fileList.join(",");\r\n this.coputedFullFileList(fileStr);\r\n } else {\r\n this.$emit("input", "");\r\n this.$emit("change", "");\r\n }\r\n },\r\n onPreview(index) {\r\n if (this.viewCallBack) {\r\n this.viewCallBack(index, this.fileList);\r\n return;\r\n }\r\n let arr = this.fileList[index].split(".");\r\n // 获取文件的后缀\r\n let suffix = arr[arr.length - 1];\r\n let imgList = ["png", "jpg", "jpeg", "gif"];\r\n let result = imgList.some(function (item) {\r\n return item == suffix;\r\n });\r\n let imgIndex = null;\r\n this.fileList.forEach((item, i) => {\r\n if (this.isImage(item) && i <= index) {\r\n if (imgIndex == null) {\r\n imgIndex = 0;\r\n } else {\r\n imgIndex = imgIndex + 1;\r\n }\r\n }\r\n });\r\n if (result) {\r\n // console.log(this.$refs.images,index)\r\n this.$refs.images[imgIndex].clickHandler();\r\n } else {\r\n let url = `${this.fileList[index]}`;\r\n let ssl = 1;\r\n if (url.indexOf("https") !== -1 || url.indexOf("http") !== -1) {\r\n ssl = url.indexOf("https") !== -1 ? 1 : 0;\r\n // window.open(`http://www.ddzg.cn:8202/#/pages/filePreview/index?file=${url}`);\r\n window.open(`https://wdyl.ddzg.cn:8089/?ssl=${ssl}&furl=${url}`);\r\n } else if (url.indexOf("http") === -1) {\r\n // 获取文件接口\r\n Api.list([url]).then((res) => {\r\n ssl = res.data[0].url.indexOf("https") !== -1 ? 1 : 0;\r\n window.open(\r\n `https://wdyl.ddzg.cn:8089/?ssl=${ssl}&furl=${res.data[0].url}`\r\n );\r\n // window.open(`http://www.ddzg.cn:8202/#/pages/filePreview/index?file=${res.data[0].url}`);\r\n });\r\n }\r\n }\r\n },\r\n onDownload(index) {\r\n const url = this.fileList[index];\r\n if (url.indexOf("https") !== -1 || url.indexOf("http") !== -1) {\r\n this.downloadFile(url, url.slice(url.lastIndexOf("&") + 1));\r\n } else {\r\n Api.list([url]).then((res) => {\r\n this.downloadFile(\r\n res.data[0].url,\r\n res.data[0].url.slice(res.data[0].url.lastIndexOf("&") + 1)\r\n );\r\n });\r\n }\r\n },\r\n downloadFile: (fileurl, filename) => {\r\n //fileurl文件地址(一般是接口返回) filename文件下载后的名字\r\n var a = document.createElement("a");\r\n a.download = filename; //下载后文件名\r\n a.style.display = "none";\r\n var blob = new Blob([fileurl]); // 字符内容转变成blob地址 二进制地址\r\n a.href = URL.createObjectURL(blob);\r\n document.body.appendChild(a);\r\n a.click(); // 触发点击\r\n document.body.removeChild(a); // 然后移除\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss" scoped>\r\n.file-wrap {\r\n margin-top: 10px;\r\n display: flex;\r\n flex-wrap: wrap;\r\n padding-left: 0px;\r\n margin: 0 !important;\r\n li {\r\n list-style: none;\r\n }\r\n\r\n .file-item {\r\n display: inline-block;\r\n margin: 0 8px 30px 0;\r\n border: 1px dashed #d9d9d9;\r\n width: 80px;\r\n height: 80px;\r\n box-sizing: border-box;\r\n border-radius: 6px;\r\n\r\n .file_name {\r\n width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .el-icon-plus {\r\n color: #1389ff;\r\n font-weight: bold;\r\n font-size: 35px;\r\n }\r\n }\r\n}\r\n\r\n.file-input {\r\n display: none;\r\n}\r\n\r\n.TextWrapper ::v-deep {\r\n position: relative;\r\n width: 30%;\r\n height: 30%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n .el-image {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .el-attach {\r\n width: 31px;\r\n height: 37px;\r\n }\r\n\r\n .action-area {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: rgba(0, 0, 0, 0.7);\r\n color: #fff;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n\r\n span {\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n & + span {\r\n margin-left: 0.5em;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.image-wrapper ::v-deep {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n .el-image {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .el-attach {\r\n width: 31px;\r\n height: 37px;\r\n }\r\n\r\n .action-area {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: rgba(0, 0, 0, 0.7);\r\n color: #fff;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n\r\n span {\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n & + span {\r\n margin-left: 0.5em;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.pointer {\r\n cursor: pointer;\r\n text-decoration: none !important;\r\n}\r\n</style>\r\n',".file-wrap {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0px;\n margin: 0 !important;\n}\n.file-wrap li {\n list-style: none;\n}\n.file-wrap .file-item {\n display: inline-block;\n margin: 0 8px 30px 0;\n border: 1px dashed #d9d9d9;\n width: 80px;\n height: 80px;\n box-sizing: border-box;\n border-radius: 6px;\n}\n.file-wrap .file-item .file_name {\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.file-wrap .file-item .el-icon-plus {\n color: #1389ff;\n font-weight: bold;\n font-size: 35px;\n}\n\n.file-input {\n display: none;\n}\n\n.TextWrapper ::v-deep {\n position: relative;\n width: 30%;\n height: 30%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.TextWrapper ::v-deep .el-image {\n width: 100%;\n height: 100%;\n}\n.TextWrapper ::v-deep .el-attach {\n width: 31px;\n height: 37px;\n}\n.TextWrapper ::v-deep .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.TextWrapper ::v-deep .action-area:hover {\n opacity: 1;\n}\n.TextWrapper ::v-deep .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.TextWrapper ::v-deep .action-area span + span {\n margin-left: 0.5em;\n}\n\n.image-wrapper ::v-deep {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.image-wrapper ::v-deep .el-image {\n width: 100%;\n height: 100%;\n}\n.image-wrapper ::v-deep .el-attach {\n width: 31px;\n height: 37px;\n}\n.image-wrapper ::v-deep .action-area {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.image-wrapper ::v-deep .action-area:hover {\n opacity: 1;\n}\n.image-wrapper ::v-deep .action-area span {\n display: inline-block;\n cursor: pointer;\n}\n.image-wrapper ::v-deep .action-area span + span {\n margin-left: 0.5em;\n}\n\n.pointer {\n cursor: pointer;\n text-decoration: none !important;\n}\n\n/*# sourceMappingURL=upload.vue.map */"]},media:void 0})},he,"data-v-1bc31644",false,undefined,!1,k,void 0,void 0);ue.install=e=>{e.component(ue.name,ue)};const ge={name:"nf-button",props:{userId:{type:String,default:""},loading:{type:Boolean,default:!1},buttonList:{type:Array,default:()=>[]},process:Object,comment:String},data:()=>({myButtonList:[],isCollapse:!0,nodeForm:{},nodeOption:{column:[{label:"节点",prop:"nodeId",type:"select",props:{label:"nodeName",value:"nodeId"},span:24,rules:[{required:!0,message:"请选择回退节点",trigger:"change"}]}]},backNodes:[]}),watch:{"process.taskId":{handler(e){e&&f.repository.backNodes({taskId:e}).then(e=>{const n=e.data;this.backNodes=n})},immediate:!0},buttonList:{handler(e){this.buttonList=e},immediate:!0,deep:!0}},methods:{getButton(e){return this.buttonList.find(n=>n.buttonKey==e)}}};var Ae=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-row",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"foot-item",style:{}},["todo"==e.process.status?[e.getButton("wf_pass")?r("el-button",{attrs:{type:"success",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("examine",!0,e.getButton("wf_pass").name)}}},[r("span",[e._v(e._s(e.getButton("wf_pass").name))])]):e._e(),e._v(" "),e.getButton("wf_reject")?r("el-button",{attrs:{type:"danger",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("examine",!1,e.getButton("wf_reject").name)}}},[r("span",[e._v(e._s(e.getButton("wf_reject").name))])]):e._e(),e._v(" "),e.userId==e.process.variables.applyUserId?r("el-button",{attrs:{size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("reminders")}}},[r("span",[e._v("催办")])]):e._e(),e._v(" "),e.getButton("wf_transfer")?r("el-button",{attrs:{type:"primary",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("user-select",{type:"transfer",checkType:"radio",name:e.getButton("wf_transfer").name})}}},[e._v(e._s(e.getButton("wf_transfer").name))]):e._e(),e._v(" "),e.getButton("wf_delegate")?r("el-button",{attrs:{type:"warning",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("user-select",{type:"delegate",checkType:"radio",name:e.getButton("wf_delegate").name})}}},[e._v("\n "+e._s(e.getButton("wf_delegate").name)+"\n ")]):e._e(),e._v(" "),e.getButton("wf_rollback")?r("el-button",{attrs:{type:"success",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("rollback",e.getButton("wf_rollback").name)}}},[e._v("\n "+e._s(e.getButton("wf_rollback").name)+"\n ")]):e._e(),e._v(" "),e.getButton("wf_terminate")?r("el-button",{attrs:{type:"danger",size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("terminate")}}},[e._v("\n "+e._s(e.getButton("wf_terminate").name)+"\n ")]):e._e(),e._v(" "),e.process.isMultiInstance&&e.getButton("wf_add_instance")?r("el-button",{attrs:{type:"primary",size:"default",disabled:e.loading},on:{click:function(n){e.$emit("user-select",{type:"addInstance",checkType:"checkbox",name:e.getButton("wf_add_instance").name})}}},[e._v("\n "+e._s(e.getButton("wf_add_instance").name)+"\n ")]):e._e(),e._v(" "),e.getButton("wf_cctask")?r("el-button",{attrs:{size:"default",disabled:e.loading},on:{click:function(n){e.$emit("circulate",e.getButton("wf_cctask").name)}}},[r("span",[e._v(e._s(e.getButton("wf_cctask").name))])]):e._e()]:e._e(),e._v(" "),e.process.isOwner&&e.process.isReturnable&&!["recall","reject"].includes(e.process.processIsFinished)?r("el-button",{attrs:{type:"warning",size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("withdraw","撤销")}}},[e._v("\n 撤销\n ")]):e._e(),e._v(" "),e.getButton("wf_print")?r("el-button",{attrs:{type:"info",size:"default",disabled:e.loading},on:{click:function(n){return e.$emit("print")}}},[e._v("\n "+e._s(e.getButton("wf_print").name)+"\n ")]):e._e()],2)],1)};Ae._withStripped=!0;const be=I({render:Ae,staticRenderFns:[]},function(e){e&&e("data-v-a5517ce6_0",{source:".foot-item[data-v-a5517ce6] {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\processBtns.vue","processBtns.vue"],names:[],mappings:"AAyJA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;ACxJA;;AAEA,0CAA0C",file:"processBtns.vue",sourcesContent:["<template>\r\n <div>\r\n <el-row v-loading=\"loading\" class=\"foot-item\" :style=\"{\r\n // width: isCollapse ? 'calc(100% - 71px)' : 'calc(100% - 241px)',\r\n }\">\r\n <template v-if=\"process.status == 'todo'\">\r\n \x3c!-- 暂存 --\x3e\r\n \x3c!-- <el-button type=\"primary\" :disabled=\"loading\" @click=\"$emit('draft')\">\r\n 暂存\r\n </el-button> --\x3e\r\n \x3c!-- 提交 --\x3e\r\n <el-button v-if=\"getButton('wf_pass')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', true, getButton('wf_pass').name)\">\r\n <span>{{ getButton('wf_pass').name }}</span>\r\n </el-button>\r\n \x3c!-- 取消申请 --\x3e\r\n <el-button v-if=\"getButton('wf_reject')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', false, getButton('wf_reject').name)\">\r\n <span>{{ getButton('wf_reject').name }}</span>\r\n </el-button>\r\n \x3c!-- 催办 --\x3e\r\n <el-button v-if=\"userId == process.variables.applyUserId\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('reminders')\">\r\n <span>催办</span>\r\n </el-button>\r\n \x3c!-- 转办 --\x3e\r\n <el-button v-if=\"getButton('wf_transfer')\" type=\"primary\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'transfer', checkType: 'radio', name: getButton('wf_transfer').name })\">{{ getButton('wf_transfer').name\r\n }}</el-button>\r\n \x3c!-- 委托 --\x3e\r\n <el-button v-if=\"getButton('wf_delegate')\" type=\"warning\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'delegate', checkType: 'radio', name: getButton('wf_delegate').name })\">\r\n {{ getButton('wf_delegate').name }}\r\n </el-button>\r\n \x3c!-- 指定回退 --\x3e\r\n <el-button v-if=\"getButton('wf_rollback')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('rollback', getButton('wf_rollback').name)\">\r\n {{ getButton('wf_rollback').name }}\r\n </el-button>\r\n \x3c!-- 终止 --\x3e\r\n <el-button v-if=\"getButton('wf_terminate')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('terminate')\">\r\n {{ getButton('wf_terminate').name }}\r\n </el-button>\r\n \x3c!-- 加签 --\x3e\r\n <el-button v-if=\"process.isMultiInstance && getButton('wf_add_instance')\" type=\"primary\" size=\"default\"\r\n :disabled=\"loading\" @click=\"\r\n $emit('user-select', {\r\n type: 'addInstance',\r\n checkType: 'checkbox',\r\n name: getButton('wf_add_instance').name,\r\n })\r\n \">\r\n {{ getButton('wf_add_instance').name }}\r\n </el-button>\r\n \x3c!-- 传阅 --\x3e\r\n <el-button v-if=\"getButton('wf_cctask')\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('circulate', getButton('wf_cctask').name)\">\r\n <span>{{ getButton('wf_cctask').name }}</span>\r\n </el-button>\r\n </template>\r\n \x3c!-- 撤销 --\x3e\r\n <el-button v-if=\"\r\n process.isOwner &&\r\n process.isReturnable &&\r\n !['recall', 'reject'].includes(process.processIsFinished)\r\n \" type=\"warning\" size=\"default\" :disabled=\"loading\" @click=\"$emit('withdraw', '撤销')\">\r\n 撤销\r\n </el-button>\r\n \x3c!-- 打印 --\x3e\r\n <el-button v-if=\"getButton('wf_print')\" type=\"info\" size=\"default\" :disabled=\"loading\" @click=\"$emit('print')\">\r\n {{ getButton('wf_print').name }}\r\n </el-button>\r\n </el-row>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from '../api';\r\n\r\nexport default {\r\n name: 'nf-button',\r\n props: {\r\n userId: {\r\n type: String,\r\n default: '',\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n buttonList: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n process: Object,\r\n comment: String,\r\n },\r\n data() {\r\n return {\r\n myButtonList: [],\r\n isCollapse: true,\r\n nodeForm: {},\r\n nodeOption: {\r\n column: [\r\n {\r\n label: '节点',\r\n prop: 'nodeId',\r\n type: 'select',\r\n props: {\r\n label: 'nodeName',\r\n value: 'nodeId',\r\n },\r\n span: 24,\r\n rules: [{ required: true, message: '请选择回退节点', trigger: 'change' }],\r\n },\r\n ],\r\n },\r\n backNodes: [],\r\n };\r\n },\r\n watch: {\r\n 'process.taskId': {\r\n handler(val) {\r\n if (val) {\r\n api.repository.backNodes({ taskId: val }).then(res => {\r\n const list = res.data;\r\n this.backNodes = list;\r\n // this.findObject(this.nodeOption.column, 'nodeId').dicData = list;\r\n });\r\n }\r\n },\r\n immediate: true,\r\n },\r\n buttonList: {\r\n handler(val) {\r\n this.buttonList = val;\r\n },\r\n immediate: true,\r\n deep: true,\r\n },\r\n },\r\n methods: {\r\n getButton(key) {\r\n return this.buttonList.find(b => b.buttonKey == key);\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.foot-item {\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n}\r\n</style>\r\n",".foot-item {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */"]},media:void 0})},ge,"data-v-a5517ce6",false,undefined,!1,k,void 0,void 0);const ve={name:"nf-flow",props:{flowList:{type:Array,default:()=>[]}},data:()=>({isFlag:!1,toggleText:"展开",commentMap:{assigneeComment:"变更审核人",dispatchComment:"调度",transferComment:"转办",delegateComment:"委托",rollbackComment:"驳回意见",terminateComment:"终止意见",addMultiInstanceComment:"加签",deleteMultiInstanceComment:"减签",withdrawComment:"撤销",recallComment:"撤回",deleteProcessComment:"删除流程",skipComment:"跳过",comment:"审批意见"}}),methods:{handleClick(){this.isFlag=!this.isFlag,this.toggleText=this.isFlag?"收起":"展开"}}};var ye=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("el-row",{attrs:{type:"flex"}},[r("el-timeline",[e._l(e.flowList,function(n,t){return[["candidate","sequenceFlow"].includes(n.historyActivityType)?e._e():r("el-timeline-item",{key:n.id,attrs:{timestamp:n.endTime||n.createTime,placement:"top"}},[r("el-card",{attrs:{shadow:"never"}},[r("p",[e._v("\n "+e._s(n.assigneeName)+" 在 ["+e._s(n.createTime)+"] 开始处理 ["+e._s("endEvent"==n.historyActivityType?"结束":n.historyActivityName||"未命名")+"] 环节\n ")]),e._v(" "),n.historyActivityDurationTime?r("p",[e._v("\n 任务历时 ["+e._s(n.historyActivityDurationTime)+"]\n ")]):e._e(),e._v(" "),n.comments&&n.comments.length>0?[e._l(n.comments.filter(function(e){return"AddComment"===e.action}),function(t,s){return r("p",{key:s},[s<1?[e.commentMap[t.type]?r("span",[e._v("\n "+e._s(e.commentMap[t.type])+": ["+e._s(t.fullMessage)+"]\n ")]):e._e(),e._v(" "),n.comments.filter(function(e){return"AddComment"===e.action}).length>1?r("span",{staticStyle:{color:"#1989fa",float:"right"},on:{click:e.handleClick}},[e._v("\n "+e._s(e.toggleText)+"\n "),r("i",{class:[e.isFlag?"el-icon-arrow-up":"el-icon-arrow-down"]}),e._v(" "),r("el-icon",[e.isFlag?r("el-icon-arrow-up"):r("el-icon-arrow-down")],1)],1):e._e(),e._v(" "),t.time?r("p",{staticStyle:{color:"gray","font-size":"12px"}},[e._v(e._s(t.time))]):e._e()]:e._e(),e._v(" "),s>0&&e.isFlag?[e.commentMap[t.type]?r("span",[e._v("\n "+e._s(e.commentMap[t.type])+": ["+e._s(t.fullMessage)+"]\n ")]):e._e(),e._v(" "),t.time?r("p",{staticStyle:{color:"gray","font-size":"12px"}},[e._v(e._s(t.time))]):e._e()]:e._e()],2)}),e._v(" "),n.attachmentsQianzi&&n.attachmentsQianzi.length>0?[r("div",{staticStyle:{display:"flex","justify-content":"space-between"}},[r("span",[e._v("签字: ")]),e._v(" "),r("div",{staticStyle:{flex:"1",margin:"-15px 0 0 4px"}},[r("jyr-file-upload",{ref:"fileUpload",refInFor:!0,attrs:{locked:"",fullFileObject:"",showFileName:""},model:{value:n.attachmentsQianzi,callback:function(r){e.$set(n,"attachmentsQianzi",r)},expression:"item.attachmentsQianzi"}})],1)])]:e._e(),e._v(" "),n.attachmentsFujian&&n.attachmentsFujian.length>0?[r("div",{staticStyle:{display:"flex","justify-content":"space-between"}},[r("span",[e._v("附件: ")]),e._v(" "),r("div",{staticStyle:{flex:"1",margin:"-15px 0 0 4px"}},[r("jyr-file-upload",{ref:"fileUpload",refInFor:!0,attrs:{locked:"",fullFileObject:"",showFileName:""},model:{value:n.attachmentsFujian,callback:function(r){e.$set(n,"attachmentsFujian",r)},expression:"item.attachmentsFujian"}})],1)])]:e._e()]:e._e(),e._v(" "),n.endTime?r("p",[e._v("结束时间: ["+e._s(n.endTime)+"]")]):e._e()],2)],1)]})],2)],1)};ye._withStripped=!0;const xe=I({render:ye,staticRenderFns:[]},function(e){e&&e("data-v-2d6a30e2_0",{source:"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",map:{version:3,sources:[],names:[],mappings:"",file:"processFlow.vue"},media:void 0})},ve,undefined,false,undefined,!1,k,void 0,void 0),Ie=e=>{var n,r=(e=>{var n=Object.prototype.toString;return e instanceof Element?"element":{"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object"}[n.call(e)]})(e);if("array"===r)n=[];else{if("object"!==r)return e;n={}}if("array"===r)for(var t=0,s=e.length;t<s;t++)n.push(Ie(e[t]));else if("object"===r)for(var i in e)n[i]=Ie(e[i]);return n};function we(e){e=Ie(e);const n={};e.forEach(e=>{n[e.historyActivityId]?n[e.historyActivityId].push(e):n[e.historyActivityId]=[e]});for(let r in n){const t=n[r];if(t.length>1){e.findLast(e=>e.historyActivityId==r).assigneeName=Array.from(new Set(t.map(e=>e.assigneeName))).join("/")}}const r=[];return e.forEach(e=>{let{assigneeName:n,createTime:t,endTime:s,comments:i}=e;/Safari/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&(t=t.replace(/-/g,"/"),s=s.replace(/-/g,"/"));const a={id:e.historyActivityId,class:s||"candidate"==e.historyActivityType?"":"nodePrimary"};let l="";if(n){if(l=`<span title='${n}'>${n}</span><br>`,t&&(l+=`<span title='${t}'>${function(e,n="YYYY-MM-DD HH:mm:ss"){return o(e).format(n)}(t,"YYYY-MM-DD HH:mm")}</span><br>`),i&&i.length>0){let e,{type:n,fullMessage:r}=i.find(e=>"AddComment"==e.action)||{};"assigneeComment"==n&&(e="变更审核人:"+r,a.class="nodeWarn"),"dispatchComment"==n&&(e="调度:"+r,a.class="nodeWarn"),"transferComment"==n&&(e="转办:"+r,a.class="nodeWarn"),"delegateComment"==n&&(e="委托:"+r,a.class="nodeWarn"),"rollbackComment"==n&&(e="驳回:"+r,a.class="nodeError"),"terminateComment"==n&&(e="终止:"+r,a.class="nodeError"),"addMultiInstanceComment"==n&&(e="加签:"+r,a.class="nodeWarn"),"deleteMultiInstanceComment"==n&&(e="减签:"+r,a.class="nodeError"),"withdrawComment"==n&&(e="撤销:"+r,a.class="nodeWarn"),"deleteProcessComment"==n&&(e="删除流程:"+r,a.class="nodeError"),"cancelProcessComment"==n&&(e="撤销流程:"+r,a.class="nodeError"),"comment"==n&&(e="审批:"+r,a.class="nodeSuccess"),e&&(l+=`<span title='${e}'>${e}</span>`)}a.tooltip=l}"sequenceFlow"==e.historyActivityType?a.class="lineWarn":a.class||"candidate"==e.historyActivityType||(a.class="nodeSuccess");const d=r.findIndex(n=>n.id==e.historyActivityId);-1!=d?r.splice(d,1,a):r.push(a)}),r}function ke(e){const n=[],r=[],t=[];return e.routeTxt&&e.routeTxt.length>0&&e.routeTxt.forEach(e=>{"user"===e.type?n.push(...e.ids.filter(e=>e&&""!==e.trim())):"post"===e.type?r.push(...e.ids):"dept"===e.type&&t.push(...e.ids)}),{intersection:"true"==e.assigneeRetain?1:0,userIds:[...new Set(n)],postIds:[...new Set(r)],deptIds:[...new Set(t)]}}var Te={name:"bpmn-look",props:{diagram:{type:String,default:"",required:!0},approvalData:{type:Array,default:()=>[]},isXml:{type:Boolean,default:!0}},data:()=>({scale:1,viewer:null,loading:!0}),mounted(){this.initViewer(),window.addEventListener("resize",this.canvasResize)},watch:{diagram:{async handler(e){let n=e;n&&this.isXml&&this.loadXml(n)},immediate:!0}},methods:{handleWheel(e){e.preventDefault();const n=.1*Math.sign(e.deltaY);if(this.scale=Math.max(.5,Math.min(this.scale-n,3)),this.viewer){this.viewer.get("canvas").zoom(this.scale)}},async getXml(e){let n={},r="";try{n=await api.repository.getXmlByProcessDefId({processDefId:e}),200==n.code&&(r=n.data)}catch(e){}return r},async initViewer(){this.viewer&&this.viewer.destroy();const e="[object Function]"==Object.prototype.toString.call(s)?s:s.default,n="[object Object]"==Object.prototype.toString.call(a)?a:a.default,r="[object Object]"==Object.prototype.toString.call(i)?i:i.default;this.viewer=new e({container:this.$refs.container,additionalModules:[n,r]}),this.viewer.on("import.done",({error:e})=>{e||(this.canvasResize(),this.addApprovalData())})},canvasResize(){if(this.viewer){this.viewer.get("canvas").zoom(1,"auto")}},setNodeColor(e){const n=this.viewer.get("canvas"),r=this.viewer.get("elementRegistry"),t=this.viewer.get("tooltips");e.forEach(e=>{if(e.id&&e.class&&n.addMarker(e.id,e.class),e.id&&e.tooltip){const n=r.get(e.id);if(n){let{x:r,y:s,type:i}=n;["bpmn:StartEvent","bpmn:EndEvent"].includes(i)?(r-=45,s+=65):["bpmn:UserTask"].includes(i)&&(r-=10,s+=90),t.add({position:{x:r,y:s},html:e.tooltip})}}})},addApprovalData(){if(!this.approvalData||0==this.approvalData.length)return;const e=we(this.approvalData);e&&e.length>0&&this.setNodeColor(e)},async loadXml(e){this.viewer||await this.initViewer();try{const{warnings:n}=await this.viewer.importXML(e);n.length&&this.$emit("warning",n)}catch(e){this.$emit("error",{message:"XML 加载失败",detail:e.message})}}},beforeDestroy(){window.removeEventListener("resize",this.canvasResize),this.viewer&&this.viewer.destroy()}};const Ce=Te;var De=function(){var e=this,n=e.$createElement;return(e._self._c||n)("div",{ref:"container",staticClass:"bpmn-look",on:{wheel:e.handleWheel}})};De._withStripped=!0;const Ne=I({render:De,staticRenderFns:[]},function(e){e&&e("data-v-0aaf0421_0",{source:"\n.bpmn-look[data-v-0aaf0421] {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\n}\n[data-v-0aaf0421] .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\n}\n[data-v-0aaf0421] .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\n}\n[data-v-0aaf0421] .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\n}\n[data-v-0aaf0421] .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\n}\n[data-v-0aaf0421] .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\n}\n[data-v-0aaf0421] .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\n}\n[data-v-0aaf0421] .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\n}\n[data-v-0aaf0421] .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\n}\n[data-v-0aaf0421] .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\n}\n[data-v-0aaf0421] .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\n}\n[data-v-0aaf0421] .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\n}\n[data-v-0aaf0421] .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\n}\n[data-v-0aaf0421] .djs-tooltip br {\r\n display: none;\n}\r\n",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\bpmnLook.vue"],names:[],mappings:";AA6LA;EACA,WAAA;EACA,aAAA;EACA,iBAAA;EACA,iiBAAA;EACA,yBAAA;EACA,kBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,4BAAA;EACA,iBAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,+BAAA;EACA,iBAAA;AACA;AAEA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,uBAAA;AACA;AAEA;EACA,cAAA;EACA,aAAA;EACA,kBAAA;AACA;AACA;EACA,aAAA;AACA",file:"bpmnLook.vue",sourcesContent:["<template>\r\n <div ref=\"container\" class=\"bpmn-look\" @wheel=\"handleWheel\"></div>\r\n</template>\r\n\r\n<script>\r\nimport BpmnViewer from 'bpmn-js/lib/Viewer';\r\nimport MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas'\r\nimport tooltips from \"diagram-js/lib/features/tooltips\";\r\nimport { handleResolveFlows } from './utils'\r\n// 导入api,在引用组件时会报错:Unknown custom element: <bpmn-look> - did you register the component correctly? For recursive components, make sure to provide the \"name\" option.\r\n// import api from \"./api\";\r\n\r\nexport default {\r\n name: 'bpmn-look',\r\n props: {\r\n diagram: {\r\n type: String,\r\n default: '',\r\n required: true\r\n },\r\n approvalData: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n isXml: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n scale: 1,\r\n viewer: null,\r\n loading: true\r\n };\r\n },\r\n mounted() {\r\n this.initViewer();\r\n window.addEventListener('resize', this.canvasResize);\r\n },\r\n watch: {\r\n diagram: {\r\n async handler(newVal) {\r\n console.log(newVal.length, 'new')\r\n let xml = newVal\r\n if (xml && this.isXml) {\r\n this.loadXml(xml);\r\n }\r\n },\r\n immediate: true,\r\n }\r\n },\r\n methods: {\r\n handleWheel(event) {\r\n // if (event.ctrlKey) {\r\n event.preventDefault();\r\n const delta = Math.sign(event.deltaY) * 0.1; // 标准化滚轮值\r\n this.scale = Math.max(0.5, Math.min(this.scale - delta, 3)); // 限制缩放范围0.5~3\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n canvas.zoom(this.scale);\r\n }\r\n // }\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async initViewer() {\r\n if (this.viewer) {\r\n this.viewer.destroy();\r\n }\r\n // 打包的问题,读取不到模块的处理\r\n const View = Object.prototype.toString.call(BpmnViewer) == '[object Function]' ? BpmnViewer : BpmnViewer.default\r\n const Tooltips = Object.prototype.toString.call(tooltips) == '[object Object]' ? tooltips : tooltips.default\r\n const MMoveCanvasModule = Object.prototype.toString.call(MoveCanvasModule) == '[object Object]' ? MoveCanvasModule : MoveCanvasModule.default\r\n console.log(MoveCanvasModule, Object.prototype.toString.call(MoveCanvasModule), 'MoveCanvasModule')\r\n\r\n\r\n this.viewer = new View({\r\n container: this.$refs.container,\r\n additionalModules: [\r\n Tooltips,\r\n MMoveCanvasModule, // 移动整个画布\r\n // {\r\n // textRenderer: ['type', new TextRenderer({ defaultSize: { fontSize: 12 } })]\r\n // }\r\n ],\r\n });\r\n // 画布居中,需要在importXml之前\r\n this.viewer.on('import.done', ({ error }) => {\r\n if (!error) {\r\n console.log(1)\r\n // 画布居中\r\n this.canvasResize()\r\n // 给画布添加审批数据\r\n this.addApprovalData()\r\n }\r\n });\r\n },\r\n canvasResize() {\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n // canvas.zoom('fit-viewport', 'auto');\r\n canvas.zoom(1, 'auto');\r\n }\r\n },\r\n // 添加节点颜色\r\n setNodeColor(nodes) {\r\n const canvas = this.viewer.get(\"canvas\");\r\n const elementRegistry = this.viewer.get(\"elementRegistry\");\r\n const tooltips = this.viewer.get(\"tooltips\");\r\n nodes.forEach((n) => {\r\n if (n.id && n.class) {\r\n canvas.addMarker(n.id, n.class);\r\n }\r\n if (n.id && n.tooltip) {\r\n const node = elementRegistry.get(n.id);\r\n if (node) {\r\n let { x, y, type } = node;\r\n if ([\"bpmn:StartEvent\", \"bpmn:EndEvent\"].includes(type)) {\r\n x = x - 45;\r\n y = y + 65;\r\n } else if ([\"bpmn:UserTask\"].includes(type)) {\r\n x = x - 10;\r\n y = y + 90;\r\n }\r\n tooltips.add({\r\n position: { x, y },\r\n html: n.tooltip,\r\n });\r\n }\r\n }\r\n });\r\n },\r\n addApprovalData() {\r\n console.log(this.approvalData, 'data')\r\n if (!this.approvalData || this.approvalData.length == 0) return;\r\n const flows = handleResolveFlows(this.approvalData)\r\n console.log(flows, 'flows')\r\n if (flows && flows.length > 0) {\r\n this.setNodeColor(flows);\r\n }\r\n },\r\n // 加载xml\r\n async loadXml(xml) {\r\n if (!this.viewer) {\r\n await this.initViewer();\r\n }\r\n try {\r\n // 尝试导入 XML\r\n console.log(xml.length)\r\n const { warnings } = await this.viewer.importXML(xml);\r\n console.log(warnings, 'warningds')\r\n if (warnings.length) {\r\n // 有警告信息时触发 warning 事件\r\n this.$emit('warning', warnings);\r\n }\r\n } catch (error) {\r\n // 导入失败时触发 error 事件\r\n this.$emit('error', {\r\n message: 'XML 加载失败',\r\n detail: error.message\r\n });\r\n console.error('XML 加载失败:', error);\r\n }\r\n }\r\n },\r\n beforeDestroy() {\r\n window.removeEventListener('resize', this.canvasResize);\r\n this.viewer && this.viewer.destroy();\r\n }\r\n};\r\n<\/script>\r\n\r\n<style scoped>\r\n.bpmn-look {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\r\n}\r\n\r\n::v-deep .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\r\n}\r\n\r\n::v-deep .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\r\n}\r\n\r\n::v-deep .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\r\n}\r\n\r\n::v-deep .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\r\n}\r\n\r\n::v-deep .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\r\n}\r\n\r\n::v-deep .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\r\n}\r\n\r\n::v-deep .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\r\n}\r\n\r\n::v-deep .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\r\n}\r\n\r\n::v-deep .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n::v-deep .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\r\n}\r\n::v-deep .djs-tooltip br {\r\n display: none;\r\n}\r\n</style>"]},media:void 0})},Ce,"data-v-0aaf0421",false,undefined,!1,k,void 0,void 0);const Oe={components:{bpmnLook:Ne,processBtns:be,processFlow:xe,treeselect:r,staffTree:O,...pe,ViewFile:P,JyrFileUpload:ue},props:{taskId:{default:!1,type:String},processId:{require:!0,default:!1,type:String},userId:{require:!0,default:"",type:String},showBtns:{default:!0,type:Boolean},isView:{default:!1,type:Boolean},getVars:{type:Function},before:{type:Function},isAlis:{type:Boolean,default:!1},isAdditional:{type:Boolean,default:!1},businessData:{type:Object,default:void 0},excludeBtn:{type:String,default:""},showAsPlanned:{type:Boolean,default:!1},showCommIdea:{type:Boolean,default:!0},commentMsgRequired:{type:Boolean,default:!0},customBtn:{default:""},tabs:{default:()=>[{name:"基本信息",slot:""},{name:"流程图",slot:""},{name:"审批记录",slot:""}]},personType:{default:""},personEntity:{type:Object,default:()=>{}},isButton:{type:Boolean,default:!1}},provide(){return{isAlisInject:this.isAlis}},data:()=>({incomingConditionItemList:[],deptId:"",initProcessData:{button:[],flow:[],form:{},process:{}},currentProcess:{currentProcessOriginData:[],currentMan:[],currentFirstNode:{}},processData:{button:[],flow:[],form:{},process:{}},submitLoading:!1,flowChartVisible:!1,comment:null,dynamicMaxHeight:"400px",showMulTask:!1,mulTaskList:[],mulTaskTaskId:"",attach:[],customBtns:[],overheight:10,iframeHeight:500,mainWidth:0,absoluteTaskId:"",infoView:!1,showTopTabs:!1,buttonLoading:!1,footBtnLoading:!0,tabheight:400,aftClickBtn:"",attachRule:{required:!0,limit:0},nodeInfoVisible:!1,nodeInfoList:[],jjForm:{saveMetaAnnexCmdList:[]},targetUID:"",commentMsg:"",trackUrl:"",taskObj:{},taskCommentList:[],absoluteBtns:{inside:[],outside:[]},processStatus:"",nextTaskNode:[],activeName:"基本信息",ProcessInsObj:{},outGatewayUserTaskModel:[],dialogVisibleOperation:!1,operationLabel:"",operationCom:{},operationParam:{},taskNode:[],aftTaskNode:{},operation:pe,Enum:y,isOperLoading:!1,isOperationHidden:!1,boxLoading:!1,rules:{attach:[{required:!0,trigger:"change"}]},noReload:!1,digitalSignatureList:[]}),mounted(){window.onresize=()=>(()=>{this.$refs.mianContent&&(this.mainWidth=this.$refs.mianContent.offsetWidth)})()},watch:{activeName:function(e){1==e&&(this.activeName="基本信息")},infoView:function(){this.calculateHeight()},taskId:{handler(e){e&&(this.absoluteTaskId=e)},deep:!0,immediate:!0},processId:{handler(e){if(e){if(this.customBtns=[],this.absoluteBtns={inside:[],outside:[]},this.activeName=this.tabs.length>0?this.tabs[0].name:"",this.getProcessInfo(),this.getCurrentProcess(),Date.now())return;f.repository.queryTaskNodeList(this.processId).then(e=>{if(!this.noReload){if(this.noReload=!1,!this.absoluteTaskId&&e.data.length>1)return this.mulTaskList=e.data,void(this.showMulTask=!0);this.absoluteTaskId=e.data&&e.data.length>0?e.data[0].taskId:"",this.aftTaskNode=e.data[0]}e.code==u.success&&(this.taskNode=e.data,f.pis.getProcessStatus(this.processId,this.absoluteTaskId).then(e=>{e.code==u.success&&(this.processStatus=e.data,this.absoluteTaskId?f.repository.getUserTaskModelCmd(this.absoluteTaskId).then(e=>{e.code==u.success&&(this.taskObj=e.data,this.straightenBtns())}):this.straightenBtns())}))}),f.repository.getTrackUrl({processInstId:e,type:g.电脑端}).then(e=>{e.code==u.success&&("https:"==window.location.protocol?e.data.indexOf("http://121.40.143.183:80/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183:80/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://121.40.143.183/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://acme-aws.ddzg.cn/")>=0?this.trackUrl=e.data.replace("http://acme-aws.ddzg.cn/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://59.53.91.231:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.231:8088/","https://acme-test.ddzg.cn:2119/"):e.data.indexOf("http://59.53.91.230:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.230:8088/","https://kq.ddzg.cn:8093/"):this.trackUrl=e.data:this.trackUrl=e.data)}),f.tis.getTaskCommentList(this.processId,"").then(e=>{this.taskCommentList=e.data,this.digitalSignatureList=e.data.filter(e=>e.digitalSignature).map(e=>e.digitalSignature)}),f.pis.getProcessInstanceById(this.processId).then(e=>{this.ProcessInsObj=e.data,this.$nextTick(()=>{this.calculateHeight()})})}},immediate:!0,deep:!0},absoluteTaskId:{handler(e){},immediate:!0,deep:!0},dialogVisibleOperation:{handler(e){this.$emit("show-modal",e)}}},methods:{formatFlow:e=>(e||[]).map(e=>({...e,attachmentsFujian:(e.attachments||[]).filter(e=>"signature"!=e.type),attachmentsQianzi:(e.attachments||[]).filter(e=>"signature"==e.type)})),cancelHandlerFn(){this.dialogVisibleOperation=!1,this.submitLoading=!1},filterFlow:e=>e.filter(e=>["userTask","candidate"].includes(e.historyActivityType)),getCurrentProcess(){f.repository.queryTaskNodeList(this.processId).then(e=>{if(200==e.code){const n={};if(n.currentProcessOriginData=e.data||[],n.currentProcessOriginData.length>0){let e=n.currentProcessOriginData[0],r=(e.currentName||"").split(","),t=(e.avatar||"").split(",");r=r.map((e,n)=>({realName:e,avatar:t[n]||"",phone:"",ancestorNames:[]})),n.currentMan=r,n.currentFirstNode=e,this.currentProcess=n}}else this.currentProcess={currentProcessOriginData:[],currentMan:[],currentFirstNode:{}}}).catch(e=>{})},getProcessInfo(){this.submitLoading=!0,this.boxLoading=!0,f.tis.getTaskModelDetail(this.taskId?{processInstId:this.processId,taskId:this.taskId}:{processInstId:this.processId}).then(async e=>{if(200==e.code){this.processData={...this.initProcessData,...e.data||{}};const n=((this.processData.process||{}).variables||{}).deptId;this.deptId=n;const r=(this.processData.process||{}).taskId;this.taskObj.buttons=this.processData.button,this.absoluteTaskId=r,this.straightenBtns(),this.$nextTick(()=>{this.calculateHeight()}),this.flowChartVisible=!0,this.submitLoading=!1,this.boxLoading=!1}})},getUserDataByDeptId(){this.processList.map(async(e,n)=>{const r=ke(e);let t;try{t=await this.getNodeUser({deptId:this.deptId,intersection:r.intersection?1:0,userIds:r.userIds,postIds:r.postIds,deptIds:r.deptIds})}catch(e){}if(t.code==Enum.apiCode.success){const e=this.processList[n];e.userList=t.data,this.$set(this.processList,n,e)}})},handleDraft(){this.submitLoading=!0},handleExamine(e,n){e?this.handlePass(n):this.handleCancel(n),this.submitLoading=!0},async handlePass(e){this.operationParam.nodeLoading=!0,this.isOperationHidden=!0,this.before?this.before().then(()=>{this.showOperation(Z,e)}):this.showOperation(Z,e),this.deptId&&(await this.getNextNode(this.deptId),this.operationParam={...this.operationParam,nodeLoading:!1,incomingConditionItemList:this.incomingConditionItemList,nextTaskNode:this.nextTaskNode},this.isOperationHidden=!1)},handleCancel(e){this.showOperation(ne,e)},handleUserSelect({type:e,checkType:n,name:r}){"transfer"==e?this.handleTransfer(r):"addInstance"==e&&this.handleAddInstance(r)},handleTransfer(e){this.showOperation(V,e)},handleAddInstance(e){this.showOperation($,e)},handlePrint(){},handleRollbackTask(e){this.showOperation(se,e)},handleTerminateProcess(){},handleCirculate(e){this.showOperation(ce,e)},handleWithdrawTask(e){this.handleRevoke()},findTargetHtml(e,n,r="parentElement"){if(!e)return null;if(e.classList.contains(n))return e;let t=e[r];if(!t)return null;if("children"!=r)return this.findTargetHtml(t,n);for(let e=0;e<=t.length-1;e++)if(t[e].classList.contains(n))return t[e]},findImageIndex(e){return e?this.digitalSignatureList.findIndex(n=>n==e):-1},onCheckSure(){this.absoluteTaskId=this.mulTaskTaskId,this.mulTaskList.map(e=>{e.taskId==this.mulTaskTaskId&&(this.aftTaskNode=e)}),this.noReload=!0,this.showMulTask=!1,this.footBtnLoading=!0;let e=this.processId;this.processId="",this.processId=e},showButtonLoading(){this.buttonLoading=!0},hideButtonLoading(){this.buttonLoading=!1},calculateHeight(){let e=0;if(this.$refs.footBtnRow&&(e+=this.$refs.footBtnRow.offsetHeight),this.$refs.mianContent&&(this.mainWidth=this.$refs.mianContent.offsetWidth),this.infoView&&this.absoluteBtns.outside.length>0&&(e+=32),this.$refs.infoBoxFign){let e=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;this.tabheight=e-this.$refs.infoBoxFign.offsetTop-192}this.overheight=e+116,this.iframeHeight=this.$refs.mianContent.offsetHeight-146},getNodeList(){this.nodeInfoVisible=!0},fileNameLastof(e,n=0){if(-1==e.indexOf("http")&&(n=0),!e)return;let r="/";-1!=e.indexOf("\\")&&(r="\\");let t=e,s=t.lastIndexOf(r);return t.substr(s+1+n,t.length)},clickCustomButton(e){this.$emit("clickCustomButton",{name:e,processStatus:this.processStatus,setName:n=>{this.taskObj.buttons.map(r=>{r.label==e&&(r.label=n)}),this.straightenBtns()}})},async getNextNode(e){let n;try{n=await f.tis.simulation(this.absoluteTaskId,this.processId)}catch(e){n={}}let r=n.data||{};200!=n.code||n.data.evaluation||(this.incomingConditionItemList=[],r.branches=await this.getOutgoingProcessNode(this.absoluteTaskId,n.data.id)),r=await this.getSelectFixData(r,e),this.nextTaskNode=r},getNodeUser:async({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s})=>await f.user.getTaskAuditor({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s}),async showOperation(e,n){this.attach=[],this.operationLabel=n,this.operationParam.processInstId=this.processId,this.operationParam.taskInstId=this.absoluteTaskId,this.operationParam.nextTaskNode=this.nextTaskNode,this.operationParam.incomingConditionItemList=this.incomingConditionItemList,this.operationParam.variables=(this.processData.process||{}).variables||{},this.operationParam.extendedProperties=(this.processData.form||{}).extendedProperties||[],this.operationParam.taskObj=this.taskObj,this.operationParam.getVars=this.getVars,this.operationParam.outGatewayUserTaskModel=this.outGatewayUserTaskModel,this.operationParam.taskNode=this.getTaskNode(),this.operationParam.businessData=this.businessData,this.operationParam.showAsPlanned=this.showAsPlanned,this.operationParam.showCommIdea=this.showCommIdea,this.operationParam.commentMsgRequired=this.commentMsgRequired,this.operationParam.personType=this.personType,this.operationParam.personEntity={...this.personEntity,...this.aftClickBtn.personEntity||{}},this.operationParam.ProcessInsObj=this.ProcessInsObj,this.operationCom=e,this.dialogVisibleOperation=!0,this.$nextTick(()=>{let e=this.$refs.obRef;if(!e)return;let n=e.getBoundingClientRect().top,r=this.findTargetHtml(e,"el-dialog"),t=this.findTargetHtml(r,"el-dialog__footer","children"),s=window.innerHeight-n-n-t.clientHeight-32;this.dynamicMaxHeight=`${s}px`})},onClickOperation(){if(this.attachShow&&this.attachRule.required&&0==this.attach.length)return e.error("请上传附件");this.aftClickBtn.preposition?this.operationMain(this.aftClickBtn.preposition):this.operationMain()},operationMain(e=!1){let n;this.attachShow&&(n=[],this.attach.map(e=>{n.push({id:e.id,name:this.fileNameLastof(e.name),size:e.fileSize,format:e.fileType,url:e.url,uploadTime:e.createTime,processInstId:this.operationParam.processInstId,taskInstId:this.operationParam.taskInstId})}),n=n.sort((e,n)=>o(e.uploadTime).valueOf()>o(n.uploadTime).valueOf())),this.$refs.operationRef&&this.$refs.operationRef.confirm(e,()=>{this.isOperLoading=!0},n)},operationSuccess(n=!0){e.success("操作成功"),this.dialogVisibleOperation=!1,n&&this.$emit("Complete"),this.isOperLoading=!1},operationFail(n=""){n&&e.warning(n),this.isOperLoading=!1},async getSelectFixData(e,n){let r=JSON.parse(JSON.stringify(e));if("userTask"!=r.nodeType&&Array.isArray(r.branches))for(let e=0;e<r.branches.length;e++){let t=r.branches[e],s=t.nodeInfoDTO?t.nodeInfoDTO:t;try{s=await this.getSelectFixData(s,n)}catch(e){}t.nodeInfoDTO?t.nodeInfoDTO=s:t=s,r.branches[e]=t}else if("userTask"==r.nodeType&&!r.setPersonnel){let e,t=ke(r);try{e=await this.getNodeUser({deptId:n,intersection:t.intersection?1:0,userIds:t.userIds,postIds:t.postIds,deptIds:t.deptIds})}catch(e){}e.code==u.success&&(r.userList=e.data)}return r},async getOutgoingProcessNode(e,n){let r=await f.repository.getOutgoingProcessNode(e,n);if(r.code==u.success){if(r.data){for(let n=0;n<r.data.length;n++){let t=r.data[n];t.incomingConditionItemList&&0!==t.incomingConditionItemList.length&&(t.nodeInfoDTO.incomingConditionItemList=t.incomingConditionItemList,this.incomingConditionItemList.push(...t.incomingConditionItemList)),"userTask"!=t.nodeInfoDTO.nodeType&&(t.nodeInfoDTO.branches=await this.getOutgoingProcessNode(e,t.nodeInfoDTO.id)),"endEvent"==r.data[n].type||"固定账户"!=r.data[n].humanPerformerName&&"与流程申请人相关"!=r.data[n].humanPerformerName||await f.repository.getParticipantsOfPerformerNames(e,[r.data[n].id]).then(e=>{r.data[n].routeTxt.userNames=e.data[r.data[n].id]})}0==r.data.length&&r.data.push({id:"",incomingConditionItemList:[],type:"endEvent",name:"结束事件"})}return r.data}return[]},getColor:e=>"审核中"==e||"审批中"==e?"#6DC743":"已驳回"==e?"#F14B4C":"已撤销"==e?"#CECECE":"已完成"==e?"#6DC743":"#1389FF",handleClick(e){this.$emit("clickTab",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)))},getTaskNode(){return this.taskNode.filter?this.taskNode.filter(e=>e.nodeId==this.taskObj.id):[]},handleRevoke(){n.confirm("确定撤销吗","撤销",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{f.tis.withdrawTask(this.processData.process.processInstanceId).then(n=>{n.code==u.success&&(e.success("操作成功"),this.$emit("Complete"))})}).catch(()=>{e.info("取消操作")})},handleReminders(){n.confirm("确定催办吗","催办",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{f.tis.reminders(this.processData.process.processInstanceId).then(n=>{n.code==u.success&&(e.success("操作成功"),this.$emit("Complete"))})}).catch(n=>{e.info("取消操作")})},getButton(e){return(this.processData.button||[]).find(n=>n.buttonKey==e)},operBtn(){let e=[];const n=this.processData.process;if(!n)return e;if("todo"==n.status&&n.isMultiInstance&&this.getButton("wf_add_instance")){let n={};n.name=this.getButton("wf_add_instance").name,n.btnProps={type:"primary"},n.key="sign",n.click=()=>{this.handleUserSelect({type:"addInstance",checkType:"checkbox",name:this.getButton("wf_add_instance").name})},e.push(n)}if("todo"==n.status&&this.getButton("wf_transfer")){let n={};n.name=this.getButton("wf_transfer").name,n.key="delegate",n.click=()=>{this.handleUserSelect({type:"transfer",checkType:"radio",name:this.getButton("wf_transfer").name})},e.push(n)}if("todo"==n.status&&this.getButton("wf_delegate")){let n={};n.name=this.getButton("wf_delegate").name,n.btnProps={type:"warning"},n.key="cc2",n.click=()=>{this.handleUserSelect({type:"delegate",checkType:"radio",name:this.getButton("wf_delegate").name})},e.push(n)}if("todo"==n.status&&this.getButton("wf_terminate")){let n={};n.name=this.getButton("wf_terminate").name,n.btnProps={type:"danger"},n.key="cc3",n.click=()=>{this.handleTerminateProcess()},e.push(n)}if("todo"==n.status&&this.getButton("wf_cctask")){let n={};n.name=this.getButton("wf_cctask").name,n.btnProps={type:"primary"},n.key="cc",n.click=()=>{this.handleCirculate(this.getButton("wf_cctask").name)},e.push(n)}if("todo"==n.status&&this.userId==(n.variables||{}).applyUserId){let n={name:"催办",key:"self"};n.click=()=>{this.handleReminders()},e.push(n)}if(n.isOwner&&n.isReturnable&&!["recall","reject"].includes(n.processIsFinished)){let n={name:"撤销",btnProps:{type:"danger"},key:"self"};n.click=()=>{this.handleWithdrawTask("撤销")},e.push(n)}if("todo"==n.status&&this.getButton("wf_reject")){let n={};n.name=this.getButton("wf_reject").name,n.btnProps={type:"danger"},n.key="refuse",n.click=()=>{this.handleExamine(!1,this.getButton("wf_reject").name)},e.push(n)}if("todo"==n.status&&this.getButton("wf_pass")){let n={};n.name=this.getButton("wf_pass").name,n.btnProps={type:"primary"},n.key="complete",n.click=()=>{this.before?this.before().then(()=>{this.handleExamine(!0,this.getButton("wf_pass").name)}):this.handleExamine(!0,this.getButton("wf_pass").name)},e.push(n)}if("todo"==n.status&&this.getButton("wf_rollback")){let n={};n.name=this.getButton("wf_rollback").name,n.btnProps={type:"danger"},n.key="back",n.click=()=>{this.handleRollbackTask(this.getButton("wf_rollback").name)},e.unshift(n)}return e},straightenBtns(e=!0){let n=[];this.excludeBtn?this.operBtn().map(e=>{-1!=this.excludeBtn.indexOf(e.key)&&e.key||n.push(e)}):n=this.operBtn(),this.customBtns.length>0&&(n=[],this.customBtns.map(e=>{-1!=this.excludeBtn.indexOf(e.key)&&e.key||n.push(e)}));let r={outside:[],inside:[]};n.length>4?(r.outside=n.splice(n.length-4,n.length-1),r.inside=n):r.outside=n,e&&this.customBtn?this.customBtn({btnList:this.operBtn(),processStatus:this.processStatus,processData:this.processData,nextTaskNode:this.nextTaskNode},e=>{this.customBtns=e,this.straightenBtns(!1)},()=>{this.$emit("Complete")}):(this.absoluteBtns=r,this.$nextTick(()=>{this.calculateHeight(),this.footBtnLoading=!1,this.boxLoading=!1}))}},computed:{dynamicStyle(){return{"--dynamic-ctx-height":this.dynamicMaxHeight}},attachShow(){const e=(this.processData.form||{}).extendedProperties||[];let n,r=!1,t="";switch(this.operationLabel){case"退回":n=e.find(e=>"otherButtonAnnexList"==e.name),t=n?n.value:"",t&&(r=!0);break;case"通过":case"办理":case"处理":case"同意":n=e.find(e=>"completeButtonAnnex"==e.name),t=n?n.value:"",t&&(r=!0);break;case"拒绝":n=e.find(e=>"otherButtonAnnexList"==e.name),t=n?n.value:"";break;case"加签":n=e.find(e=>"counterSignButtonAnnex"==e.name),t=n?n.value:"",t&&(r=!0);break;case"转办":n=e.find(e=>"delegateTaskButtonAnnex"==e.name),t=n?n.value:"",t&&(r=!0)}let s="";if("string"!=typeof t&&null!=t&&t.map(e=>{-1!=e.indexOf(this.operationLabel)&&(r=!0,s=e)}),s&&(t=s),r){const e=t.split(":");this.attachRule.required="true"==e[1],this.attachRule.limit=-1==e[2]?999:e[2]}return r}}};var je=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",{directives:[{name:"loading",rawName:"v-loading",value:e.boxLoading&&!e.isButton,expression:"boxLoading && !isButton"}],ref:"mianContent",staticClass:"mianContent",style:{}},[e.isButton?e._e():[r("div",{ref:"baseTabs",staticClass:"tabs"},[r("el-tabs",{staticClass:"demo-tabs",on:{"tab-click":e.handleClick},model:{value:e.activeName,callback:function(n){e.activeName=n},expression:"activeName"}},e._l(e.tabs,function(n,t){return r("el-tab-pane",{key:t,class:["pane-"+n.name],attrs:{label:n.name,name:n.slot||n.name,item:n}},["基本信息"!=n.name||n.slot?"流程图"!=n.name||n.slot?"审批记录"!=n.name||n.slot?[r("div",{style:"min-height: "+e.tabheight+"px;"},[n.slot?e._t(n.slot,null,{taskNode:e.getTaskNode(),processData:e.processData,currentProcess:e.currentProcess}):e._t("default",null,{taskNode:e.getTaskNode(),processData:e.processData,currentProcess:e.currentProcess})],2)]:["审批记录"==e.activeName&&e.processData.flow?r("processFlow",{attrs:{"flow-list":e.formatFlow(e.processData.flow)}}):r("div",{staticStyle:{height:"100px",display:"flex","align-items":"center","justify-content":"center"}},[e._v("\n 暂无数据\n ")])]:[r("div",{staticClass:"view-node-info",on:{click:e.getNodeList}},[e._v("\n 查看流程节点信息\n ")]),e._v(" "),e.trackUrl?r("iframe",{key:e.processId,staticStyle:{width:"100%",height:"100%",border:"none"},style:{height:e.iframeHeight+"px"},attrs:{src:e.trackUrl,scrolling:"no",frameborder:"0"}}):e._e(),e._v(" "),"流程图"==e.activeName&&e.processData.process&&e.processData.process.xml?r("bpmnLook",{attrs:{approvalData:e.processData.flow,diagram:e.processData.process.xml}}):r("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"center"}},[e._v("\n 暂无流程图\n ")])]:[r("div",{style:"min-height: "+e.tabheight+"px;"},[e._t("default",null,{taskNode:e.getTaskNode(),processData:e.processData,currentProcess:e.currentProcess})],2)]],2)}),1)],1)],e._v(" "),e.isAdditional&&e.absoluteBtns.outside.length>0?r("div",{ref:"footBtnRow",staticClass:"footBtnRow foot-item",style:{width:e.mainWidth+"px"}},[e._t("btn",null,null,e.processStatus)],2):e.showBtns?!e.ProcessInsObj.end&&e.absoluteBtns.outside.length>0&&"com.awspaas.user.apps.root"!=e.processStatus.appId||e.customBtns.length>0?r("div",{directives:[{name:"loading",rawName:"v-loading",value:e.footBtnLoading,expression:"footBtnLoading"}],ref:"footBtnRow",staticClass:"footBtnRow foot-item",style:{width:e.mainWidth+"px"}},[("todo"==e.processData.process.status||e.customBtns.length>0)&&e.absoluteBtns.outside.length>0?[e.absoluteBtns.inside.length>0?r("el-dropdown",{attrs:{placement:"top-start",trigger:"click"}},[r("el-button",{staticStyle:{"margin-right":"10px"},attrs:{size:"small"}},[e._v(" 更多 ")]),e._v(" "),r("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},e._l(e.absoluteBtns.inside,function(n,t){return r("el-dropdown-item",{key:n.name+t,nativeOn:{click:function(r){return function(){n.click(),e.aftClickBtn=n}.apply(null,arguments)}}},[r("el-button",{staticClass:"btn drop-btn",attrs:{type:"text",size:"mini",icon:n.icon,loading:e.buttonLoading}},[e._v("\n "+e._s(n.name)+"\n ")])],1)}),1)],1):e._e(),e._v(" "),e._l(e.absoluteBtns.outside,function(n){return r("el-button",e._b({key:n.name,attrs:{size:"small",loading:e.buttonLoading},on:{click:function(){n.click(),e.aftClickBtn=n}}},"el-button",n.btnProps,!1),[e._v("\n "+e._s(n.name)+"\n ")])})]:e._e(),e._v(" "),e._t("btnAppend")],2):e._e():r("div"),e._v(" "),r("div",{staticClass:"dialog"},[r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],staticClass:"dialog",style:e.dynamicStyle,attrs:{visible:e.dialogVisibleOperation,"append-to-body":"",width:"600px",title:e.operationLabel,"close-on-click-modal":!1,"show-close":!e.isOperLoading,"before-close":e.cancelHandlerFn,top:"6vh"},on:{"update:visible":function(n){e.dialogVisibleOperation=n}},scopedSlots:e._u([{key:"footer",fn:function(){return[r("el-button",{directives:[{name:"loading",rawName:"v-loading"}],attrs:{type:"primary",loading:e.isOperLoading,disabled:e.isOperationHidden},on:{click:e.onClickOperation}},[e._v("确 定")]),e._v(" "),r("el-button",{directives:[{name:"loading",rawName:"v-loading"}],attrs:{loading:e.isOperLoading,disabled:e.isOperationHidden},on:{click:e.cancelHandlerFn}},[e._v("取 消")])]},proxy:!0}])},[r("div",{ref:"obRef",staticClass:"operation-box"},[e.dialogVisibleOperation?r(e.operationCom,{ref:"operationRef",tag:"component",attrs:{param:e.operationParam,isOperLoading:e.isOperLoading},on:{success:e.operationSuccess,fail:e.operationFail},scopedSlots:e._u([{key:"form",fn:function(){return[e.aftClickBtn.slot?e._t(e.aftClickBtn.slot):e._e()]},proxy:!0},{key:"file",fn:function(){return[e.attachShow?r("el-form",{attrs:{"label-width":"120px","status-icon":"",rules:e.rules},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"附件",prop:e.attachRule.required?"attach":""}},[r("jyr-file-upload",{ref:"fileUpload",attrs:{multiple:e.attachRule.limit>0,limit:e.attachRule.limit,fullFileObject:"",showFileName:""},model:{value:e.attach,callback:function(n){e.attach=n},expression:"attach"}})],1)],1):e._e()]},proxy:!0}],null,!0)}):e._e()],1)]),e._v(" "),r("el-dialog",{attrs:{title:"选择处理任务",visible:e.showMulTask,"append-to-body":"","close-on-click-modal":!1,width:"500px","show-close":!1},on:{"update:visible":function(n){e.showMulTask=n}}},[r("el-form",{ref:"form",staticClass:"task",attrs:{"label-width":"100px"}},[r("el-form-item",{attrs:{label:"请选择:",prop:"content"}},[r("el-radio-group",{attrs:{size:"small"},model:{value:e.mulTaskTaskId,callback:function(n){e.mulTaskTaskId=n},expression:"mulTaskTaskId"}},e._l(e.mulTaskList,function(n){return r("el-radio",{key:n.nodeId,attrs:{label:n.taskId,border:""}},[e._v(e._s(n.nodeName))])}),1)],1)],1),e._v(" "),r("div",{staticClass:"dialog-footer"},[r("el-button",{attrs:{type:"primary"},on:{click:e.onCheckSure}},[e._v("确定")])],1)],1),e._v(" "),r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],attrs:{visible:e.nodeInfoVisible,"append-to-body":"",width:"600px",title:"流程节点信息",modal:!1,"close-on-click-modal":!1},on:{"update:visible":function(n){e.nodeInfoVisible=n}}},[r("el-table",{attrs:{data:e.filterFlow(e.processData.flow),border:""}},[r("el-table-column",{attrs:{label:"序号",type:"index",width:"120px"}}),e._v(" "),r("el-table-column",{attrs:{prop:"historyActivityName",label:"节点名称"}}),e._v(" "),r("el-table-column",{attrs:{prop:"assigneeName",label:"审批人"}})],1)],1)],1)],2)};je._withStripped=!0;const Ee=I({render:je,staticRenderFns:[]},function(e){e&&e("data-v-621659f2_0",{source:'@charset "UTF-8";\n.operation-box[data-v-621659f2] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-621659f2] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-621659f2] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-621659f2] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-621659f2]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-621659f2] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-621659f2] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-621659f2] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-621659f2] {\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-621659f2] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-621659f2] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-621659f2] {\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-621659f2] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-621659f2] {\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-621659f2]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-621659f2]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-621659f2] {\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-621659f2] {\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-621659f2] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-621659f2] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-621659f2] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-621659f2] {\n z-index: 1001;\n width: 100%;\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n.mianContent .footBtnRow .el-button[data-v-621659f2] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-621659f2] {\n width: 90%;\n}\n.dialog[data-v-621659f2] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-621659f2] .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-621659f2] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-621659f2] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-621659f2] :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-621659f2] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-621659f2] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-621659f2] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-621659f2] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-621659f2] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-621659f2] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-621659f2] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-621659f2] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-621659f2] {\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;AC8vDhB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;AD5vDA;AC8vDA;EACA,gBAAA;EACA,gCAAA;AD3vDA;AC4vDA;EACA,sBAAA;AD1vDA;AC6vDA;EACA,yBAAA;AD3vDA;AC8vDA;EACA,uBAAA;AD5vDA;AC+vDA;EACA,oBAAA;AD5vDA;ACiwDA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;AD9vDA;ACowDA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;ADjwDA;ACmwDA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;ADnwDA;ACqwDA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;ADpwDA;ACqwDA;EACA,OAAA;EACA,SAAA;ADnwDA;ACowDA;EACA,QAAA;ADlwDA;ACqwDA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;ADnwDA;ACqwDA;EACA,SAAA;EACA,OAAA;ADnwDA;AC0wDA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;ADxwDA;AC2wDA;EACA,gBAAA;EACA,kCAAA;ADxwDA;AC2wDA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;ADxwDA;AC2wDA;EACA,cAAA;ADxwDA;AC2wDA;EACA,cAAA;EACA,kBAAA;ADxwDA;AC2wDA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;ADxwDA;AC2wDA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;ADxwDA;AC2wDA;EACA,eAAA;ADxwDA;ACgxDA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;AD7wDA;ACoxDA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;ADjxDA;ACoxDA;EAaA,aAAA;EAEA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;AD9xDA;AC+xDA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;AD7xDA;ACszDA;EACA,UAAA;ADnzDA;ACszDA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;ADnzDA;ACszDA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;ADnzDA;ACszDA;EACA,aAAA;EACA,kBAAA;ADnzDA;ACszDA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ADnzDA;ACuzDA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;ADpzDA;ACwzDA;EACA,kBAAA;ADrzDA;ACuzDA;EACA,wBAAA;EACA,kBAAA;ADrzDA;ACuzDA;EACA,SAAA;EACA,WAAA;ADrzDA;ACwzDA;EACA,cAAA;EACA,eAAA;ADrzDA;ACuzDA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;ADpzDA;ACszDA;EACA,eAAA;EACA,wBAAA;ADnzDA;ACszDA;EACA,cAAA;ADnzDA;ACqzDA;EACA,gBAAA;ADnzDA;ACszDA;EACA,WAAA;EACA,YAAA;ADnzDA;;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 z-index: 1001;\n width: 100%;\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\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()" :processData="processData" :currentProcess="currentProcess"></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 \x3c!-- 展示条件需要同时满足v-if --\x3e\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="formatFlow(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 :processData="processData"\r\n :currentProcess="currentProcess"\r\n ></slot>\r\n <slot v-else name="default" :taskNode="getTaskNode()" :processData="processData" :currentProcess="currentProcess"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n \x3c!-- <el-tab-pane label="流程图" name="2" style="height: 100%">\r\n </el-tab-pane> --\x3e\r\n \x3c!-- <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> --\x3e\r\n </el-tabs>\r\n </div>\r\n </template>\r\n \x3c!-- 底部按钮 --\x3e\r\n \x3c!-- <processBtns\r\n :loading="submitLoading"\r\n :button-list="processData.button"\r\n :userId="userId"\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 @circulate="handleCirculate"\r\n ></processBtns> --\x3e\r\n\r\n <div\r\n class="footBtnRow foot-item"\r\n :style="{ width: mainWidth + \'px\' }"\r\n ref="footBtnRow"\r\n v-if="isAdditional && absoluteBtns.outside.length > 0"\r\n >\r\n <slot name="btn" v-bind="processStatus"></slot>\r\n </div>\r\n <div v-else-if="!showBtns"></div>\r\n <div\r\n class="footBtnRow foot-item"\r\n ref="footBtnRow"\r\n :style="{ width: mainWidth + \'px\' }"\r\n v-else-if="\r\n (!ProcessInsObj.end &&\r\n absoluteBtns.outside.length > 0 &&\r\n processStatus.appId != \'com.awspaas.user.apps.root\') ||\r\n customBtns.length > 0\r\n "\r\n v-loading="footBtnLoading"\r\n >\r\n \x3c!-- <slot name="btn"> --\x3e\r\n <template\r\n v-if="\r\n (processData.process.status == \'todo\' || customBtns.length > 0) &&\r\n absoluteBtns.outside.length > 0\r\n "\r\n >\r\n <el-dropdown\r\n placement="top-start"\r\n trigger="click"\r\n v-if="absoluteBtns.inside.length > 0"\r\n >\r\n <el-button size="small" style="margin-right: 10px"> 更多 </el-button>\r\n <el-dropdown-menu slot="dropdown">\r\n <el-dropdown-item\r\n v-for="(item, index) in absoluteBtns.inside"\r\n :key="item.name + index"\r\n @click.native="\r\n () => {\r\n item.click();\r\n aftClickBtn = item;\r\n }\r\n "\r\n >\r\n <el-button\r\n class="btn drop-btn"\r\n type="text"\r\n size="mini"\r\n :icon="item.icon"\r\n :loading="buttonLoading"\r\n >\r\n {{ item.name }}\r\n </el-button>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-button\r\n v-for="item in absoluteBtns.outside"\r\n :key="item.name"\r\n v-bind="item.btnProps"\r\n @click="\r\n () => {\r\n item.click();\r\n aftClickBtn = item;\r\n }\r\n "\r\n size="small"\r\n :loading="buttonLoading"\r\n >\r\n {{ item.name }}\r\n </el-button>\r\n </template>\r\n \x3c!-- </slot> --\x3e\r\n <slot name="btnAppend"></slot>\r\n </div>\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 :before-close="cancelHandlerFn"\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 :disabled="isOperationHidden"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click="cancelHandlerFn"\r\n :loading="isOperLoading"\r\n :disabled="isOperationHidden"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n \x3c!-- 选择任务 --\x3e\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 \x3c!-- <el-table-column prop="type" label="类型"></el-table-column> --\x3e\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 incomingConditionItemList: [],\r\n // 流程信息\r\n deptId: \'\',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n currentProcess: {\r\n currentProcessOriginData: [],\r\n currentMan: [],\r\n currentFirstNode: {},\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 isOperationHidden: 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 // 获取当前流程节点\r\n this.getCurrentProcess()\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 formatFlow(flow) {\r\n const newFlow = (flow || []).map(item => {\r\n return {\r\n ...item,\r\n attachmentsFujian: (item.attachments || []).filter(i => i.type != \'signature\'),\r\n attachmentsQianzi: (item.attachments || []).filter(i => i.type == \'signature\'),\r\n }\r\n })\r\n return newFlow\r\n },\r\n cancelHandlerFn(){\r\n this.dialogVisibleOperation = false\r\n this.submitLoading = false\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 getCurrentProcess() {\r\n api.repository.queryTaskNodeList(this.processId).then(res => {\r\n console.log(res, \'res\')\r\n if (res.code == 200) {\r\n const currentProcessObj = {}\r\n currentProcessObj.currentProcessOriginData = res.data || []\r\n\r\n if (currentProcessObj.currentProcessOriginData.length > 0) {\r\n let currentFirstNode = currentProcessObj.currentProcessOriginData[0]\r\n let currentMan = (currentFirstNode.currentName || \'\').split(\',\')\r\n let currentManAvatar = (currentFirstNode.avatar || \'\').split(\',\')\r\n currentMan = currentMan.map((name, index) => {\r\n return {\r\n realName: name,\r\n avatar: currentManAvatar[index] || \'\',\r\n phone: \'\',\r\n ancestorNames: [],\r\n }\r\n })\r\n currentProcessObj.currentMan = currentMan\r\n currentProcessObj.currentFirstNode = currentFirstNode\r\n this.currentProcess = currentProcessObj\r\n }\r\n } else {\r\n this.currentProcess = {\r\n currentProcessOriginData: [],\r\n currentMan: [],\r\n currentFirstNode: {},\r\n }\r\n }\r\n }).catch(e => {\r\n console.error(e, \'getCurrentProcess\')\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 processInstId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInstId: 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.taskObj.buttons = this.processData.button\r\n this.absoluteTaskId = taskId\r\n this.straightenBtns();\r\n console.log(deptId, \'id\')\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\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 this.operationParam.nodeLoading = true\r\n this.isOperationHidden = true;\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 if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n this.operationParam = {\r\n ...this.operationParam,\r\n nodeLoading: false,\r\n incomingConditionItemList: this.incomingConditionItemList,\r\n nextTaskNode: this.nextTaskNode,\r\n }\r\n this.isOperationHidden = false;\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 handleCirculate(name) {\r\n console.log(\'handleCirculate\')\r\n this.showOperation(operation.ccTask, name);\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 let nextTaskNode = res1.data || {};\r\n\r\n // 复杂网关分支:\r\n if (res1.code == 200 && !res1.data.evaluation) {\r\n this.incomingConditionItemList = []\r\n nextTaskNode.branches = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n res1.data.id\r\n );\r\n }\r\n\r\n // 获取选择框选人的数据\r\n nextTaskNode = await this.getSelectFixData(nextTaskNode, deptId)\r\n console.log(nextTaskNode, \'res需要传入部门idend\')\r\n\r\n // if (nextTaskNode.id && !nextTaskNode.setPersonnel && nextTaskNode.type == "userTask") {\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.incomingConditionItemList = this.incomingConditionItemList\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.extendedProperties = (this.processData.form || {}).extendedProperties || []\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 let saveMetaAnnexCmdList\r\n if (this.attachShow) {\r\n 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 }, saveMetaAnnexCmdList);\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 getSelectFixData (nextDataO, deptId) {\r\n let nextData = JSON.parse(JSON.stringify(nextDataO))\r\n console.log(nextData, deptId, \'getSelectFixData\')\r\n if (nextData.nodeType != \'userTask\' && Array.isArray(nextData.branches)) {\r\n for (let i = 0; i < nextData.branches.length; i++) {\r\n let firstLv = nextData.branches[i]\r\n let firstLvNode = firstLv.nodeInfoDTO ? firstLv.nodeInfoDTO : firstLv;\r\n try {\r\n let firstLvNodeT = await this.getSelectFixData(firstLvNode, deptId)\r\n firstLvNode = firstLvNodeT\r\n } catch (error) {\r\n console.log(error, \'getSelectFixData error\')\r\n }\r\n if (firstLv.nodeInfoDTO) {\r\n firstLv.nodeInfoDTO = firstLvNode\r\n } else {\r\n firstLv = firstLvNode\r\n }\r\n nextData.branches[i] = firstLv\r\n }\r\n }\r\n else if (nextData.nodeType == \'userTask\' && !nextData.setPersonnel ) {\r\n let nodeUserParams = getNodeUserParams(nextData)\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 console.log(res, \'res需要传入部门id\', res.code == $enum.apiCode.success)\r\n } catch (error) {\r\n console.log(error, \'error\')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextData.userList = res.data\r\n }\r\n }\r\n return nextData\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.incomingConditionItemList && o.incomingConditionItemList.length !== 0) {\r\n o.nodeInfoDTO.incomingConditionItemList = o.incomingConditionItemList\r\n console.log(o.incomingConditionItemList, \'o.incomingConditionItemList\')\r\n this.incomingConditionItemList.push(...o.incomingConditionItemList)\r\n }\r\n if (o.nodeInfoDTO.nodeType != \'userTask\') {\r\n o.nodeInfoDTO.branches = await this.getOutgoingProcessNode(taskId, o.nodeInfoDTO.id);\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.processData.process.processInstanceId)\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 getButton(key) {\r\n return (this.processData.button || []).find(b => b.buttonKey == key);\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n\r\n const process = this.processData.process;\r\n\r\n if (!process) {\r\n return btnList\r\n }\r\n\r\n // 加签\r\n if (process.status == \'todo\' && process.isMultiInstance && this.getButton(\'wf_add_instance\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_add_instance\').name\r\n obj.btnProps = { type: "primary" };\r\n obj.key = "sign";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: \'addInstance\',\r\n checkType: \'checkbox\',\r\n name: this.getButton(\'wf_add_instance\').name,\r\n })\r\n };\r\n btnList.push(obj);\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 // 转办\r\n if (process.status == \'todo\' && this.getButton(\'wf_transfer\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_transfer\').name\r\n obj.key = "delegate";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: \'transfer\',\r\n checkType: \'radio\',\r\n name: this.getButton(\'wf_transfer\').name,\r\n })\r\n };\r\n btnList.push(obj);\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 // 委托\r\n if (process.status == \'todo\' && this.getButton(\'wf_delegate\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_delegate\').name\r\n obj.btnProps = { type: "warning" };\r\n obj.key = "cc2";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: \'delegate\',\r\n checkType: \'radio\',\r\n name: this.getButton(\'wf_delegate\').name\r\n })\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // 终止\r\n if (process.status == \'todo\' && this.getButton(\'wf_terminate\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_terminate\').name\r\n obj.btnProps = { type: "danger" };\r\n obj.key = "cc3";\r\n obj.click = () => {\r\n this.handleTerminateProcess()\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // 传阅\r\n if (process.status == \'todo\' && this.getButton(\'wf_cctask\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_cctask\').name\r\n obj.btnProps = { type: "primary" };\r\n obj.key = "cc";\r\n obj.click = () => {\r\n this.handleCirculate(this.getButton(\'wf_cctask\').name)\r\n };\r\n btnList.push(obj);\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 // 催办\r\n if (process.status == \'todo\' && this.userId == (process.variables || {}).applyUserId) {\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 // 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 // 撤销\r\n if (\r\n process.isOwner &&\r\n process.isReturnable &&\r\n ![\'recall\', \'reject\'].includes(process.processIsFinished)\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.handleWithdrawTask(\'撤销\');\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\r\n // 拒绝\r\n if (\r\n process.status == \'todo\' &&\r\n this.getButton(\'wf_reject\')\r\n ) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_reject\').name\r\n obj.btnProps = { type: "danger" };\r\n obj.key = "refuse";\r\n obj.click = () => {\r\n this.handleExamine(false, this.getButton(\'wf_reject\').name)\r\n };\r\n btnList.push(obj);\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 // 办理\r\n if (process.status == \'todo\' && this.getButton(\'wf_pass\')) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_pass\').name\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.handleExamine(true, this.getButton(\'wf_pass\').name)\r\n });\r\n } else {\r\n this.handleExamine(true, this.getButton(\'wf_pass\').name)\r\n }\r\n };\r\n btnList.push(obj);\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 // 退回\r\n if (\r\n process.status == \'todo\' &&\r\n this.getButton(\'wf_rollback\')\r\n ) {\r\n let obj = {};\r\n obj.name = this.getButton(\'wf_rollback\').name\r\n obj.btnProps = { type: "danger" };\r\n obj.key = "back";\r\n obj.click = () => {\r\n this.handleRollbackTask(this.getButton(\'wf_rollback\').name)\r\n };\r\n // 退回可能还有种情况,就是自定义this.clickCustomButton(obj.name);\r\n\r\n btnList.unshift(obj);\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, processData: this.processData, nextTaskNode: this.nextTaskNode },\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 const extendedProperties = (this.processData.form || {}).extendedProperties || []\r\n\r\n let sign = false;\r\n let fd;\r\n let annex = "";\r\n console.log(this.operationLabel, \'operationLabel\')\r\n switch (this.operationLabel) {\r\n case "退回":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'otherButtonAnnexList\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "通过":\r\n case "办理":\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'completeButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "处理":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'completeButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "同意":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'completeButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "拒绝":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'otherButtonAnnexList\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n break;\r\n case "加签":\r\n // annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'counterSignButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\r\n if (annex) sign = true;\r\n break;\r\n case "转办":\r\n // annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == \'delegateTaskButtonAnnex\'\r\n })\r\n annex = fd ? fd.value : \'\'\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 const annexArr = annex.split(":");\r\n this.attachRule.required = annexArr[1] == "true" ? true : false;\r\n this.attachRule.limit =\r\n annexArr[2] == -1 ? 999 : annexArr[2];\r\n }\r\n return sign;\r\n },\r\n },\r\n};\r\n<\/script>\r\n\x3c!-- <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> --\x3e\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\r\n width: 100%;\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\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// .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:void 0})},Oe,"data-v-621659f2",false,undefined,!1,k,void 0,void 0);const Le={props:{attr:{},visible:{type:Boolean,default:!1},title:{type:String,default:"流程详情"},size:{type:String,default:"50%"}},data:()=>({}),mounted(){},methods:{}};var _e=function(){var e=this,n=e.$createElement;return(e._self._c||n)("el-drawer",e._b({attrs:{"custom-class":"zh-drawer-class","append-to-body":"",size:e.size,title:e.title,visible:e.visible},on:{"update:visible":function(n){e.visible=n}}},"el-drawer",e.attr,!1))};_e._withStripped=!0;const Pe=I({render:_e,staticRenderFns:[]},function(e){e&&e("data-v-debae0c8_0",{source:"\n\n/*# sourceMappingURL=drawer.vue.map */",map:{version:3,sources:["drawer.vue"],names:[],mappings:";;AAEA,qCAAqC",file:"drawer.vue"},media:void 0})},Le,undefined,false,undefined,!1,k,void 0,void 0);var Be=Object.freeze({__proto__:null,default:Pe});const Me={name:"selectDept",components:{TreeSelect:r&&r.default?r.default:r},props:{deptId:{type:String,default:""},ops:{type:Array,default:()=>[]}},data:()=>({}),mounted(){},computed:{deptSelf:{set(e){},get(){return this.deptId||null}},opsSelf:{set(e){},get(){return this.ops}}},watch:{ops:{handler(e){},deep:!0}},methods:{handleChangeFee(e){this.deptSelf=e.id,this.$emit("input",e.id),this.$emit("change",{name:"project",deptSelf:e.id,projectName:e.label})},normalizer:e=>({id:e.id,label:e.label,children:e.children})}};var $e=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("tree-select",{attrs:{options:e.opsSelf,normalizer:e.normalizer,placeholder:"请选择",noOptionsText:"暂无数据",noResultsText:"暂无数据",appendToBody:"",zIndex:3e3},on:{select:e.handleChangeFee},model:{value:e.deptSelf,callback:function(n){e.deptSelf=n},expression:"deptSelf"}})],1)};$e._withStripped=!0;const Fe={components:{userTask:W,bpmnLook:Ne,selectDept:I({render:$e,staticRenderFns:[]},function(e){e&&e("data-v-57f8eef9_0",{source:"\n\n/*# sourceMappingURL=selectDept.vue.map */",map:{version:3,sources:["selectDept.vue"],names:[],mappings:";;AAEA,yCAAyC",file:"selectDept.vue"},media:void 0})},Me,"data-v-57f8eef9",false,undefined,!1,k,void 0,void 0)},props:{extraReqParams:{type:Object,default:function(){return{}}},other:{default:!0},personType:"",personEntity:{type:Object,default:()=>{}},beforeFunction:{type:Function,default:null},showFlowForecast:{default:!1,type:Boolean},flowForecastFunction:{type:Function,default:null}},data:()=>({revivalVars:{},processData:{},absoluteTaskId:"",userTaskListData:{},flag:!1,revival:!1,flowChartVisible:!1,flowForecastVisible:!1,flowForecastData:{completeTime:"",processBudgetModelList:[]},flowForecastProcessInstId:"",btnLoading:!1,processList:[],processDefId:"",processInstId:"",processDefName:"",businessId:"",trackUrl:"",processDefList:[],otherProcessList:[],callback:{},cancelCallBack:{},_multiNodeParticipant:[],_businessDeptId:"",businessCode:"",_vars:{},_appId:"",deptList:[],userInfo:{},hasDeptId:!1,deptId:"",subjectId:"",processXml:""}),provide(){return{getUserInfo:this.getUserInfo}},methods:{getUserInfo(){return{deptId:this.deptId,subjectId:this.subjectId}},handleDeptChange(e){this.deptId=e,this.getUserDataByDeptId()},complete(e){},setLoading(e){this.btnLoading=e},async getXml(e){let n={},r="";try{n=await f.repository.getXmlByProcessDefId({processDefId:e}),200==n.code&&(r=n.data)}catch(e){}return r},async viewFlowChart(){this.flowChartVisible=!0,this.processXml=await this.getXml(this.processDefId),Date.now()||f.repository.getDiagramUrl({processDefId:this.processDefId,diagramType:1,type:g.电脑端}).then(e=>{e.data.url="http://localhost:2888/saber/#/flowPreview",this.trackUrl=this.getNewUrl(e.data.url,{...e.data}),Date.now()?this.flowChartVisible=!0:e.code==u.success&&("https:"==window.location.protocol?e.data.indexOf("http://121.40.143.183:80/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183:80/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://121.40.143.183/")>=0?this.trackUrl=e.data.replace("http://121.40.143.183/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://acme-aws.ddzg.cn/")>=0?this.trackUrl=e.data.replace("http://acme-aws.ddzg.cn/","https://acme-aws.ddzg.cn/"):e.data.indexOf("http://59.53.91.231:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.231:8088/","https://acme-test.ddzg.cn:2119/"):e.data.indexOf("http://59.53.91.230:8088/")>=0?this.trackUrl=e.data.replace("http://59.53.91.230:8088/","https://kq.ddzg.cn:8093/"):this.trackUrl=e.data:this.trackUrl=e.data,this.flowChartVisible=!0)})},isSameDomain:e=>-1!=e.indexOf(window.location.host),getNewUrl(e,n){let r="";for(let e in n)r+=`${e}=${n[e]}&`;if(!this.isSameDomain(e)){r+=`token=${localStorage.getItem("token")}&`}return r=r.slice(0,-1),`${e}?${r}`},viewFlowForecast(){this.flowForecastFunction?this.flowForecastFunction():this.forecast({appId:this._appId,title:"1"})},forecast(n){return this.btnLoading=!0,new Promise((r,t)=>{f.pis.getProcessForecast({processDefId:this.processDefId,...n}).then(n=>{this.btnLoading=!1,n.code==u.success?(n.data&&n.data.processBudgetModelList&&n.data.processBudgetModelList.length?this.flowForecastProcessInstId=n.data.processBudgetModelList[0].processInstId:(n.data.processBudgetModelList=[],this.flowForecastProcessInstId=""),this.flowForecastData=n.data,this.flowForecastVisible=!0,r(n)):e.error(n.msg)}).catch(n=>{this.btnLoading=!1,e.error("流程预测失败,请重试"),t(n)})})},flowForecastClose(){this.flowForecastProcessInstId?f.pis.deleteProcessById(this.flowForecastProcessInstId).then(e=>{e.code==u.success&&(this.flowForecastVisible=!1,this.flowForecastData={completeTime:"",processBudgetModelList:[]},this.flowForecastProcessInstId="")}):(this.flowForecastVisible=!1,this.flowForecastData={completeTime:"",processBudgetModelList:[]})},processDefChange(e){this.processDefId=e,f.repository.getFirstProcessNode(this.processDefId).then(async e=>{if(e.code==u.success){if(this.processList=e.data,this.flag=!0,await this.getNodeUserDept(),!this.deptId)return;this.getUserDataByDeptId()}})},setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},isOption:e=>"任意指定"==e||"固定部门"==e||"固定单位"==e||"固定群组"==e,createAndStart(n){return this.btnLoading=!0,new Promise((r,t)=>{f.pis.createAndStart({processDefId:this.processDefId,multiNodeParticipant:this._multiNodeParticipant,firstNodeId:this.processList&&this.processList.length>0?this.processList[0].id:"",vars:{showType:"all",subjectId:this.subjectId,deptId:this.deptId,businessType:this.businessCode,...n,...this._vars}}).then(n=>{this.btnLoading=!1,n.code==u.success?(this.flag=!1,r(n)):e.error(n.msg)}).catch(n=>{this.btnLoading=!1,e.error("流程启动失败,请重试"),t(n)})})},revivalFlow(n={},r=!1,t="流程复活"){return this.btnLoading=!0,new Promise((s,i)=>{const a={...this.revivalVars,showType:"all",subjectId:this.subjectId,deptId:this.deptId,businessType:this.businessCode,...n,...this._vars};Object.keys(a).forEach(e=>{const n=e.toLowerCase();n.includes("_")&&delete a[e],"appShow"==n&&delete a[e]}),f.pis.reactivate({reactivate:!0,processDefId:this.processDefId,processInstId:this.processInstId,isClearHistory:this.isClearHistory,multiNodeParticipant:this._multiNodeParticipant,firstNodeId:this.processList&&this.processList.length>0?this.processList[0].id:"",vars:a},"",this.businessId,t,"",r,this._multiNodeParticipant,this.extraReqParams).then(n=>{this.btnLoading=!1,n.code==u.success?(this.flag=!1,s(n)):e.error(n.msg)}).catch(n=>{this.btnLoading=!1,e.error("流程复活失败,请重试"),i(n)})})},Show(e,n="",r=!1){return this.processList=[],this.revival=r,this.processDefId=e,n&&f.repository.getProcessDefList(n,"").then(n=>{n.code==u.success&&n.data.map(n=>{n.id==e&&(this.processDefName=n.name)})}),new Promise((n,r)=>{this.cancelCallBack=r,f.repository.getFirstProcessNode(e).then(async e=>{if(e.code==u.success){if(this.processList=e.data,this.flag=!0,await this.getNodeUserDept(),!this.deptId)return;this.getUserDataByDeptId(),this.callback=n}})})},selectShow(e={appId:"",businessCode:"",businessType:"",keyWord:"",businessDeptId:"",userInfo:{},processGroupName:""}){return this.processList=[],this.otherProcessList=[],this.processDefId="",this.processDefName="",this.revival=!1,this._appId=e.appId,this._businessDeptId=e.businessDeptId,this.businessCode=e.businessCode||e.businessType,this.userInfo=e.userInfo,this.deptId=e.userInfo.deptId,this.subjectId=e.userInfo.subjectId,this.hasDeptId=!!e.userInfo.deptId,new Promise((n,r)=>{this.cancelCallBack=r,f.repository.getProcessDefListNew(e).then(r=>{r.code==u.success&&(1==r.data.length?(this.processDefList=r.data,this.processDefId=r.data[0].id,this.processDefName=r.data[0].name,f.repository.getFirstProcessNode(this.processDefId).then(async e=>{if(e.code==u.success){if(this.processList=e.data,this.flag=!0,this.callback=n,await this.getNodeUserDept(),!this.deptId)return;this.getUserDataByDeptId()}})):(this.processList=[],this.otherProcessList=[],this.processDefId="",this.processDefName="",this.processDefList=r.data,e.keyWord&&this.processDefList.map(n=>{-1==n.name.indexOf(e.keyWord)||this.processDefId||(this.processDefId=n.id,this.processDefName=n.name,this.processDefChange(n.id))}),this.flag=!0,this.callback=n))})})},handleRouteTxt(e){e.assigneeRetain},getUserDataByDeptId(){this.processList.map(async(e,n)=>{const r=ke(e);let t;try{t=await this.getNodeUser({deptId:this.deptId,intersection:r.intersection?1:0,userIds:r.userIds,postIds:r.postIds,deptIds:r.deptIds})}catch(e){}if(t.code==u.success){const e=this.processList[n];e.userList=t.data,this.$set(this.processList,n,e)}})},getNodeUser:async({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s})=>await f.user.getTaskAuditor({deptId:e,intersection:n,userIds:r,postIds:t,deptIds:s}),async getNodeUserDept(){let e={};try{e=await f.user.getSelectTree()}catch(e){}this.deptList=e.data||[]},listShow(e){return this.processList=[],this.otherProcessList=[],this.processDefId="",this.processDefName="",this.revival=!1,new Promise((n,r)=>{1==e.length?(this.processDefId=e[0].id,this.processDefName=e[0].name,this.cancelCallBack=r,f.repository.getFirstProcessNode(this.processDefId).then(e=>{e.code==u.success&&(this.processList=e.data,this.flag=!0,this.callback=n,f.repository.getAfferentParticipantNodeList(this.processDefId).then(e=>{this.otherProcessList=e.data.filter(e=>e.id!=this.processList[0].id),this.otherProcessList.map(e=>{e.REQUIRED=!1})}))})):(this.processDefList=e,this.flag=!0,this.callback=n)})},async getProcessInfo({taskId:e,processInstId:n}){let r={};try{r=await f.tis.getTaskModelDetail(e?{processInstId:n,taskId:e}:{processInstId:n})}catch(e){r={}}return r.code,r},async revivalShow({processInstId:e,businessId:n,taskId:r,deptId:t}){this.processInstId=e,this.hasDeptId=!!t;let s=await this.getProcessInfo({taskId:r,processInstId:e});if(200==s.code){this.processData={...this.initProcessData,...s.data||{}};const e=((this.processData.process||{}).variables||{}).deptId;this.deptId=e,this._businessDeptId=e,this.hasDeptId=!!e;const r=(this.processData.process||{}).taskId;return this.absoluteTaskId=r,this.revival=!0,this.businessId=n,this.subjectId=s.data.process.variables.subjectId,this.businessCode=s.data.process.variables.businessType,this.revivalVars=s.data.process.variables,this.processDefId=s.data.process.processDefinitionId,this.processDefName=s.data.process.processDefinitionName,this.processDefList=[],this.Show(s.data.process.processDefinitionId,"",!0)}},onClickOperation(){if(!this.processDefId||""==this.processDefId)return e.warning("请选择流程"),!1;let n={},r={};for(let e in this.userTaskListData){let t=this.userTaskListData[e],s=this.$refs[t][0],i=s?s.getValue():{multiNodeParticipant:[],vars:{}};if(!i)return!1;n={...n,...i.multiNodeParticipant},r={...r,...i.vars}}this._multiNodeParticipant=n,this._vars=r,this.beforeFunction?this.beforeFunction():this.callback&&this.callback(this.revival?this.revivalFlow:this.createAndStart)},onClickCancel(){this.flag=!1,this.btnLoading=!1,this.cancelCallBack&&this.cancelCallBack()}}};var Se=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-dialog",{staticClass:"flow-dialog",attrs:{visible:e.flag,width:"45%","close-on-click-modal":!1,title:e.revival?"流程复活":"创建并启动流程","append-to-body":""},on:{"update:visible":function(n){e.flag=n},closed:e.onClickCancel},scopedSlots:e._u([{key:"footer",fn:function(){return[r("el-button",{attrs:{loading:e.btnLoading,type:"primary"},on:{click:e.onClickOperation}},[e._v("确 定")]),e._v(" "),r("el-button",{attrs:{loading:e.btnLoading},on:{click:e.onClickCancel}},[e._v("取 消")])]},proxy:!0}])},[r("el-form",{staticClass:"create-form",attrs:{"label-width":"200px","status-icon":""},nativeOn:{submit:function(e){e.preventDefault()}}},[r("el-form-item",{attrs:{label:"当前流程",size:"normal",rules:[{required:!0,message:"请选择流程"}]}},[e.processDefList.length>1?r("el-select",{staticStyle:{width:"65%","margin-right":"10px"},attrs:{filterable:"",clearable:"",placeholder:"请选择"},on:{change:e.processDefChange},model:{value:e.processDefId,callback:function(n){e.processDefId=n},expression:"processDefId"}},e._l(e.processDefList,function(e,n){return r("el-option",{key:e.id,attrs:{label:e.name,value:e.id,disabled:e.disabled}})}),1):r("b",{staticClass:"process-def-name"},[e._v("\n "+e._s(e.processDefName)+"\n ")]),e._v(" "),e.processDefId?r("div",{staticClass:"view-node-info",staticStyle:{"margin-right":"10px"},on:{click:e.viewFlowChart}},[e._v("\n 预览\n ")]):e._e(),e._v(" "),e.processDefId&&e.showFlowForecast?r("div",{staticClass:"view-node-info",on:{click:e.viewFlowForecast}},[e._v("\n 流程预测\n ")]):e._e()],1),e._v(" "),e.hasDeptId?e._e():r("el-form-item",{attrs:{label:"选择部门",rules:[{required:!0,message:"请选择部门"}]}},[r("selectDept",{staticClass:"dept-tree",attrs:{deptId:e.deptId,ops:e.deptList},on:{input:e.handleDeptChange}})],1),e._v(" "),e.deptId?r("div",{staticClass:"node-list"},[e.processList&&e.processList.length>0?r("el-form-item",{attrs:{label:"下一步处理节点",size:"normal"}}):e._e(),e._v(" "),e.processList.length>0?[e._l(e.processList,function(n,t){return[r("userTask",{ref:e.setItemRef(n.id),refInFor:!0,attrs:{index:t,personType:e.personType,personEntity:Object.assign({},e.personEntity,{_businessDeptId:e._businessDeptId}),processNode:Object.assign({},n,{REQUIRED:0==t}),label:"处理人",rules:[{required:0==t,message:"请选择审批人"}]},on:{complete:e.complete}}),e._v(" "),t!==e.processList.length-1?r("div",{staticClass:"user-task-split"}):e._e()]})]:e._e()],2):e._e()],1)],1),e._v(" "),r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],staticClass:"track-view",attrs:{visible:e.flowChartVisible,width:"60%","append-to-body":"",title:"流程图信息"},on:{"update:visible":function(n){e.flowChartVisible=n}}},[e.flowChartVisible&&e.processXml?r("bpmnLook",{ref:"PreviewRef",attrs:{diagram:e.processXml}}):e._e()],1),e._v(" "),r("el-dialog",{directives:[{name:"dialogDrag",rawName:"v-dialogDrag"}],attrs:{visible:e.flowForecastVisible,width:"45%","append-to-body":"",title:"流程预测"},on:{"update:visible":function(n){e.flowForecastVisible=n},close:e.flowForecastClose}},[r("div",{staticStyle:{"margin-left":"20px"}},[r("div",{staticStyle:{"margin-left":"40px","margin-bottom":"20px"},domProps:{innerHTML:e._s(e.flowForecastData.completeTime)}}),e._v(" "),r("el-timeline",e._l(e.flowForecastData.processBudgetModelList,function(n,t){return r("el-timeline-item",{key:t,attrs:{icon:"el-icon-check",color:0==t?"#009800":n.color,timestamp:n.title,placement:"top"}},[r("div",[r("span",{staticStyle:{color:"#009800"}},[r("i",{staticClass:"el-icon-s-custom",staticStyle:{"margin-right":"5px"}}),e._v("\n 执行人:"+e._s(n.excutor)+"\n ")])])])}),1)],1)])],1)};Se._withStripped=!0;const Ue=I({render:Se,staticRenderFns:[]},function(e){e&&(e("data-v-725c1d48_0",{source:".flow-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.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],names:[],mappings:"AAq4BA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ACp4BA;ADw4BA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,kBAAA;ACr4BA;ADy4BA;EACA,wBAAA;EACA,kBAAA;ACt4BA;ADw4BA;EACA,SAAA;EACA,WAAA;ACt4BA;;AAEA,2CAA2C",file:"beforeCreate.vue",sourcesContent:['<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync="flag"\r\n width="45%"\r\n class="flow-dialog"\r\n :close-on-click-modal="false"\r\n :title="revival ? \'流程复活\' : \'创建并启动流程\'"\r\n append-to-body\r\n @closed="onClickCancel"\r\n >\r\n <el-form\r\n class="create-form"\r\n @submit.native.prevent\r\n label-width="200px"\r\n status-icon\r\n >\r\n <el-form-item label="当前流程" size="normal" :rules="[{ required: true, message: \'请选择流程\' }]">\r\n <el-select\r\n v-model="processDefId"\r\n v-if="processDefList.length > 1"\r\n style="width: 65%; margin-right: 10px"\r\n filterable\r\n clearable\r\n @change="processDefChange"\r\n placeholder="请选择"\r\n >\r\n <el-option\r\n v-for="(item, index) in processDefList"\r\n :key="item.id"\r\n :label="item.name"\r\n :value="item.id"\r\n :disabled="item.disabled"\r\n ></el-option>\r\n </el-select>\r\n <b class="process-def-name" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click="viewFlowChart"\r\n v-if="processDefId"\r\n class="view-node-info"\r\n style="margin-right: 10px"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click="viewFlowForecast"\r\n v-if="processDefId && showFlowForecast"\r\n class="view-node-info">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n \x3c!-- 如果没有传入部门,则需要选择部门 --\x3e\r\n <el-form-item v-if="!hasDeptId" label="选择部门" :rules="[{ required: true, message: \'请选择部门\' }]">\r\n <selectDept\r\n class="dept-tree"\r\n :deptId="deptId"\r\n :ops="deptList"\r\n @input="handleDeptChange"\r\n />\r\n </el-form-item>\r\n\r\n <div class="node-list" v-if="deptId">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="下一步处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n <template v-if="processList.length > 0">\r\n <template v-for="(item, index) in processList" >\r\n <userTask\r\n :index="index"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :processNode="{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }"\r\n label="处理人"\r\n :rules="[{ required: index == 0 ? true : false, message: \'请选择审批人\' }]"\r\n :ref="setItemRef(item.id)"\r\n @complete="complete"\r\n ></userTask>\r\n <div class="user-task-split" v-if="index !== processList.length - 1"></div>\r\n </template>\r\n </template>\r\n\r\n \x3c!-- <template v-if="otherProcessList.length > 0 && other">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="其他处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if="processList.length > 0">\r\n <userTask\r\n v-for="item in otherProcessList"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :key="item.id"\r\n :processNode="item"\r\n :noprop="true"\r\n :ref="setItemRef(item.id)"\r\n ></userTask>\r\n </template>\r\n </template> --\x3e\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading="btnLoading"\r\n type="primary"\r\n @click="onClickOperation"\r\n >确 定</el-button\r\n >\r\n <el-button :loading="btnLoading" @click="onClickCancel"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n \x3c!-- <div class="dialog"> --\x3e\r\n <el-dialog\r\n :visible.sync="flowChartVisible"\r\n width="60%"\r\n append-to-body\r\n title="流程图信息"\r\n class="track-view"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if="flowChartVisible && processXml" ref="PreviewRef" :diagram="processXml"></bpmnLook>\r\n \x3c!-- <iframe\r\n :src="trackUrl"\r\n frameborder="0"\r\n width="100%"\r\n height="100%"\r\n /> --\x3e\r\n \x3c!-- <el-image :src="trackUrl"></el-image> --\x3e\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync="flowForecastVisible"\r\n width="45%"\r\n append-to-body\r\n title="流程预测"\r\n v-dialogDrag\r\n @close="flowForecastClose"\r\n >\r\n <div style="margin-left: 20px;">\r\n <div v-html="flowForecastData.completeTime" style="margin-left: 40px;margin-bottom: 20px;"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for="(activity, index) in flowForecastData.processBudgetModelList"\r\n :key="index"\r\n icon="el-icon-check"\r\n :color="index==0 ? \'#009800\': activity.color"\r\n :timestamp="activity.title" placement="top">\r\n <div>\r\n <span style="color:#009800;">\r\n <i class="el-icon-s-custom" style="margin-right: 5px;"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n \x3c!-- </div> --\x3e\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "./api";\r\nimport * as Enum from "./enum";\r\nimport userTask from "./operation/userTask.vue";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport bpmnLook from "./bpmnLook.vue";\r\nimport selectDept from "./operation/selectDept.vue";\r\nimport { getNodeUserParams } from \'./utils\'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: \'\',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: \'\',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: "",\r\n processInstId: \'\',\r\n processDefName: "",\r\n businessId: "",\r\n trackUrl: "",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: "",\r\n businessCode: "",\r\n _vars: {},\r\n _appId: \'\',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: \'\',\r\n subjectId: \'\',\r\n processXml: \'\',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, \'val\')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, \'complete\')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, \'isxml\')\r\n let res = {}\r\n let xml = \'\'\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, \'res\')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = \'http://localhost:2888/saber/#/flowPreview\'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\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 this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = \'\'\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem(\'token\');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: \'1\',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程预测失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = "UserTaskModel";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定单位" ||\r\n humanPerformer == "固定群组"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程启动失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = "流程复活") {\r\n console.log(msg, \'流程复活\')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes(\'_\')) {\r\n delete vars[key];\r\n }\r\n if (fk == \'appShow\') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: "重新提交",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n vars,\r\n },\r\n "",\r\n this.businessId,\r\n msg,\r\n "",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程复活失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = "", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, "").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: "",\r\n businessCode: "",\r\n businessType: "",\r\n keyWord: "",\r\n businessDeptId: "",\r\n userInfo: {},\r\n processGroupName: "",\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode || info.businessType;\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log(\'======_businessDeptId\',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, \'reject\')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, \'res\')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \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 // 获取节点的人员\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 // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, \'res\')\r\n } catch (error) {\r\n console.log(error, \'error\')\r\n }\r\n console.log(res.data, \'data\')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el["id"] != this.processList[0]["id"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el["REQUIRED"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\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 this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, \'id\')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, "", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==\'\'){\r\n ElMessage.warning("请选择流程");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, \'res\')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, \'vars\')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss">\r\n.flow-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.flow-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 overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\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</style>\r\n\r\n<style lang="scss" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n',".flow-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.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]},media:void 0}),e("data-v-725c1d48_1",{source:".dept-tree[data-v-725c1d48] {\n width: 65%;\n}\n.process-def-name[data-v-725c1d48] {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n.view-node-info[data-v-725c1d48] {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n.create-form .el-form-item__label[data-v-725c1d48] {\n padding-right: 18px;\n}\n.create-form .el-form-item[data-v-725c1d48] {\n margin-bottom: 10px;\n}\n.node-list[data-v-725c1d48] {\n max-height: 300px;\n overflow-y: scroll;\n}\n.track-view .el-dialog__body[data-v-725c1d48] {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\niframe[data-v-725c1d48] {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */",map:{version:3,sources:["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],names:[],mappings:"AAk6BA;EACA,UAAA;ACj6BA;ADo6BA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;ACj6BA;ADm6BA;EACA,qBAAA;EACA,eAAA;EACA,cAAA;EACA,eAAA;EACA,SAAA;ACh6BA;ADo6BA;EACA,mBAAA;ACj6BA;ADm6BA;EACA,mBAAA;ACj6BA;ADo6BA;EACA,iBAAA;EACA,kBAAA;ACj6BA;ADo6BA;EACA,aAAA;EACA,uBAAA;EACA,aAAA;EACA,kBAAA;ACj6BA;ADo6BA;EACA,iBAAA;ACj6BA;;AAEA,2CAA2C",file:"beforeCreate.vue",sourcesContent:['<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync="flag"\r\n width="45%"\r\n class="flow-dialog"\r\n :close-on-click-modal="false"\r\n :title="revival ? \'流程复活\' : \'创建并启动流程\'"\r\n append-to-body\r\n @closed="onClickCancel"\r\n >\r\n <el-form\r\n class="create-form"\r\n @submit.native.prevent\r\n label-width="200px"\r\n status-icon\r\n >\r\n <el-form-item label="当前流程" size="normal" :rules="[{ required: true, message: \'请选择流程\' }]">\r\n <el-select\r\n v-model="processDefId"\r\n v-if="processDefList.length > 1"\r\n style="width: 65%; margin-right: 10px"\r\n filterable\r\n clearable\r\n @change="processDefChange"\r\n placeholder="请选择"\r\n >\r\n <el-option\r\n v-for="(item, index) in processDefList"\r\n :key="item.id"\r\n :label="item.name"\r\n :value="item.id"\r\n :disabled="item.disabled"\r\n ></el-option>\r\n </el-select>\r\n <b class="process-def-name" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click="viewFlowChart"\r\n v-if="processDefId"\r\n class="view-node-info"\r\n style="margin-right: 10px"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click="viewFlowForecast"\r\n v-if="processDefId && showFlowForecast"\r\n class="view-node-info">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n \x3c!-- 如果没有传入部门,则需要选择部门 --\x3e\r\n <el-form-item v-if="!hasDeptId" label="选择部门" :rules="[{ required: true, message: \'请选择部门\' }]">\r\n <selectDept\r\n class="dept-tree"\r\n :deptId="deptId"\r\n :ops="deptList"\r\n @input="handleDeptChange"\r\n />\r\n </el-form-item>\r\n\r\n <div class="node-list" v-if="deptId">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="下一步处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n <template v-if="processList.length > 0">\r\n <template v-for="(item, index) in processList" >\r\n <userTask\r\n :index="index"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :processNode="{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }"\r\n label="处理人"\r\n :rules="[{ required: index == 0 ? true : false, message: \'请选择审批人\' }]"\r\n :ref="setItemRef(item.id)"\r\n @complete="complete"\r\n ></userTask>\r\n <div class="user-task-split" v-if="index !== processList.length - 1"></div>\r\n </template>\r\n </template>\r\n\r\n \x3c!-- <template v-if="otherProcessList.length > 0 && other">\r\n <el-form-item\r\n v-if="processList && processList.length > 0"\r\n label="其他处理节点"\r\n size="normal"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if="processList.length > 0">\r\n <userTask\r\n v-for="item in otherProcessList"\r\n :personType="personType"\r\n :personEntity="{ ...personEntity, _businessDeptId }"\r\n :key="item.id"\r\n :processNode="item"\r\n :noprop="true"\r\n :ref="setItemRef(item.id)"\r\n ></userTask>\r\n </template>\r\n </template> --\x3e\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading="btnLoading"\r\n type="primary"\r\n @click="onClickOperation"\r\n >确 定</el-button\r\n >\r\n <el-button :loading="btnLoading" @click="onClickCancel"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n \x3c!-- <div class="dialog"> --\x3e\r\n <el-dialog\r\n :visible.sync="flowChartVisible"\r\n width="60%"\r\n append-to-body\r\n title="流程图信息"\r\n class="track-view"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if="flowChartVisible && processXml" ref="PreviewRef" :diagram="processXml"></bpmnLook>\r\n \x3c!-- <iframe\r\n :src="trackUrl"\r\n frameborder="0"\r\n width="100%"\r\n height="100%"\r\n /> --\x3e\r\n \x3c!-- <el-image :src="trackUrl"></el-image> --\x3e\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync="flowForecastVisible"\r\n width="45%"\r\n append-to-body\r\n title="流程预测"\r\n v-dialogDrag\r\n @close="flowForecastClose"\r\n >\r\n <div style="margin-left: 20px;">\r\n <div v-html="flowForecastData.completeTime" style="margin-left: 40px;margin-bottom: 20px;"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for="(activity, index) in flowForecastData.processBudgetModelList"\r\n :key="index"\r\n icon="el-icon-check"\r\n :color="index==0 ? \'#009800\': activity.color"\r\n :timestamp="activity.title" placement="top">\r\n <div>\r\n <span style="color:#009800;">\r\n <i class="el-icon-s-custom" style="margin-right: 5px;"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n \x3c!-- </div> --\x3e\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from "./api";\r\nimport * as Enum from "./enum";\r\nimport userTask from "./operation/userTask.vue";\r\nimport { Message as ElMessage } from "element-ui";\r\nimport bpmnLook from "./bpmnLook.vue";\r\nimport selectDept from "./operation/selectDept.vue";\r\nimport { getNodeUserParams } from \'./utils\'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: "",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: \'\',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: \'\',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: "",\r\n processInstId: \'\',\r\n processDefName: "",\r\n businessId: "",\r\n trackUrl: "",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: "",\r\n businessCode: "",\r\n _vars: {},\r\n _appId: \'\',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: \'\',\r\n subjectId: \'\',\r\n processXml: \'\',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, \'val\')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, \'complete\')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, \'isxml\')\r\n let res = {}\r\n let xml = \'\'\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, \'res\')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = \'http://localhost:2888/saber/#/flowPreview\'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\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 this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = \'\'\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem(\'token\');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: \'1\',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程预测失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = \'\'\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:\'\',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = "UserTaskModel";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = "userTask" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == "任意指定" ||\r\n humanPerformer == "固定部门" ||\r\n humanPerformer == "固定单位" ||\r\n humanPerformer == "固定群组"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程启动失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = "流程复活") {\r\n console.log(msg, \'流程复活\')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: "all",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes(\'_\')) {\r\n delete vars[key];\r\n }\r\n if (fk == \'appShow\') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: "重新提交",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : \'\',\r\n vars,\r\n },\r\n "",\r\n this.businessId,\r\n msg,\r\n "",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error("流程复活失败,请重试");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = "", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, "").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: "",\r\n businessCode: "",\r\n businessType: "",\r\n keyWord: "",\r\n businessDeptId: "",\r\n userInfo: {},\r\n processGroupName: "",\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode || info.businessType;\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log(\'======_businessDeptId\',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, \'reject\')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, \'res\')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el["id"] != this.processList[0]["id"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el["REQUIRED"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \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 // 获取节点的人员\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 // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, \'res\')\r\n } catch (error) {\r\n console.log(error, \'error\')\r\n }\r\n console.log(res.data, \'data\')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = "";\r\n this.processDefName = "";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el["id"] != this.processList[0]["id"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el["REQUIRED"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\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 this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, \'id\')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, "", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==\'\'){\r\n ElMessage.warning("请选择流程");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, \'res\')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, \'vars\')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n<\/script>\r\n\r\n<style lang="scss">\r\n.flow-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.flow-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 overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\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</style>\r\n\r\n<style lang="scss" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n',".dept-tree {\n width: 65%;\n}\n\n.process-def-name {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n\n.view-node-info {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n\n.create-form .el-form-item__label {\n padding-right: 18px;\n}\n.create-form .el-form-item {\n margin-bottom: 10px;\n}\n\n.node-list {\n max-height: 300px;\n overflow-y: scroll;\n}\n\n.track-view .el-dialog__body {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\n\niframe {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]},media:void 0}))},Fe,"data-v-725c1d48",false,undefined,!1,k,void 0,void 0);const Re={components:{userTask:W},data:()=>({userTaskListData:{},flag:!1,processList:[],callbacak:{},commentMsg:"",isUserTask:!1,cancelCallBack:{}}),methods:{setItemRef(e){return this.userTaskListData[e]="userTask"+e,this.userTaskListData[e]},isOption:e=>"任意指定"==e||"固定部门"==e||"固定单位"==e,Show(e){return new Promise((n,r)=>{this.cancelCallBack=r,f.repository.getFirstProcessNode(e).then(e=>{e.code==u.success&&(this.processList=e.data,this.isOption(this.processList[0].humanPerformerName)&&!this.processList[0].isHistoryRoute?(this.flag=!0,this.callbacak=n,this.isUserTask=!0):n({commentMsg:this.commentMsg||"重新发起"}))})})},onClickOperation(){if(this.commentMsg.length>200)return e.error("审批意见不能超过200个字"),!1;let n={};if(n={commentMsg:this.commentMsg||"重新发起"},this.isUserTask){let e={},r={};for(let t in this.userTaskListData){let s=this.userTaskListData[t],i=this.$refs[s][0].getValue();if(!i)return!1;e={...e,...i.multiNodeParticipant},r={...r,...i.vars},n={...n,multiNodeParticipant:e,vars:r}}}this.callbacak&&this.callbacak(n),this.flag=!1},onClickCancel(){this.flag=!1,this.cancelCallBack&&this.cancelCallBack()}}};var ze=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-dialog",{attrs:{visible:e.flag,width:"35%",title:"重新发起","append-to-body":""},on:{"update:visible":function(n){e.flag=n},close:e.onClickCancel},scopedSlots:e._u([{key:"footer",fn:function(){return[r("el-button",{directives:[{name:"loading",rawName:"v-loading"}],attrs:{type:"primary"},on:{click:e.onClickOperation}},[e._v("确 定")]),e._v(" "),r("el-button",{on:{click:e.onClickCancel}},[e._v("取 消")])]},proxy:!0}])},[r("el-form",{attrs:{"label-width":"100px","status-icon":""}},[e.isUserTask?e._l(e.processList,function(n){return r("userTask",{key:n.id,ref:e.setItemRef(n.id),refInFor:!0,attrs:{processNode:n}})}):e._e()],2)],1)],1)};ze._withStripped=!0;const Ve=I({render:ze,staticRenderFns:[]},undefined,Re,undefined,false,undefined,!1,void 0,void 0,void 0);const qe={props:{modelValue:{required:!0},props:{type:Object},placeholder:{default:"请选择",type:String},appId:{type:String,required:!0},filter:{type:Function||Object},vLabel:{type:String,default:"name"},vKey:{type:String,default:"id"},processGroupName:{type:String,default:""}},model:{prop:"value",event:"update:modelValue"},data:()=>({data:[]}),mounted(){this.getData()},methods:{getData(){let e,n="";this.appId&&(n=`dictionarySelect_${this.appId}`,e=localStorage.getItem(n)),f.repository.getProcessDefList(this.appId,this.processGroupName).then(e=>{let r=this.callback(e.data);n&&localStorage.setItem(n,JSON.stringify({data:r}))})},callback(e){let n=e;return this.filter&&(n=this.filter(n)),this.data=n,this.$emit("getData",n),1==n.length&&this.handleChange(n[0].id),n},handleChange(e){let n=this.data.find(n=>n.id==e)||{};this.$emit("change",n),this.$emit("update:modelValue",e),this.$emit("changeGetData",{data:this.data,val:e})}},components:{},computed:{formatValue(){return this.modelValue?"object"==typeof this.modelValue?this.modelValue:this.modelValue+"":this.modelValue}}};var He=function(){var e=this,n=e.$createElement,r=e._self._c||n;return r("div",[r("el-select",{staticStyle:{width:"100%"},attrs:{"model-value":e.formatValue,filterable:"",clearable:"",bind:e.props,placeholder:e.placeholder},on:{change:function(n){return e.handleChange(n)}},scopedSlots:e._u([e.data&&e.data.length>0?{key:"default",fn:function(){return e._l(e.data,function(e,n){return r("el-option",{key:e.id,attrs:{label:e.name,value:e.id,disabled:e.disabled}})})},proxy:!0}:null],null,!0)})],1)};He._withStripped=!0;const We=I({render:He,staticRenderFns:[]},undefined,qe,undefined,false,undefined,!1,void 0,void 0,void 0);var Ge=Object.freeze({__proto__:null}),Je=Object.freeze({__proto__:null});Ee.install=e=>{e.component("process",Ee)};export{Je as AjaxModels,f as ProcessAPI,y as ProcessEnums,Ge as ProcessModels,We as ProcessSelect,Ue as beforeCreate,Ee as default,Be as processDrawer,Ve as reactivate};
|