adtec-hnyzfc-core-package 1.6.5 → 1.6.6
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/dist/src/api/workflow/workflowInstApi.d.ts +11 -3
- package/dist/src/api/workflow/workflowInstApi.js +1 -1
- package/dist/src/components/workflow/TaskOperation.vue.d.ts +2 -2
- package/dist/src/components/workflow/TaskOperation.vue.js +1 -1
- package/dist/src/components/workflow/WorkflowTodoShell.vue.js +10 -7
- package/dist/src/hooks/createDialogHooks.js +2 -0
- package/dist/src/hooks/useWorkflowSnapshot.d.ts +3 -2
- package/dist/src/hooks/useWorkflowSnapshot.js +1 -1
- package/dist/src/hooks/workflowTodo.d.ts +8 -0
- package/dist/src/hooks/workflowTodo.js +1 -1
- package/dist/styles/element-ui.css +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { IWfProcessDefVo } from '../../interface/workflow/IWfProcessDefVo';
|
|
2
|
-
import type {
|
|
2
|
+
import type { IWfTaskVo } from '../../interface/workflow/IWfTaskVo';
|
|
3
3
|
import type { IWfTaskAskVo } from '../../interface/workflow/IWfTaskAskVo';
|
|
4
4
|
import type { IWfTaskUsersVo } from '../../interface/workflow/IWfTaskUsersVo';
|
|
5
5
|
import type { IWfReturnNodeVo } from '../../interface/workflow/IWfReturnNodeVo';
|
|
6
6
|
import type { IWfNodeLastApprovalBatchVo } from '../../interface/workflow/IWfNodeLastApprovalVo';
|
|
7
|
+
/** 手动失效:撤回/审批完成、需要拿最新流程详情时调用 */
|
|
8
|
+
export declare const invalidateProcessTaskList: (processInstId?: string) => void;
|
|
7
9
|
declare const _default: {
|
|
8
10
|
addProcessInst(WfProcessDefVo: IWfProcessDefVo): Promise<IWfProcessDefVo>;
|
|
9
11
|
/**
|
|
@@ -18,8 +20,14 @@ declare const _default: {
|
|
|
18
20
|
/**
|
|
19
21
|
* 审核当时快照(通用):按业务单号 + 工作流任务取该节点保存的快照内容。
|
|
20
22
|
* 业务单号全局唯一,bizType 可省略;用于历史查看时判定数据来源、还原当时那一版。
|
|
23
|
+
*
|
|
24
|
+
* wfTaskId 取该任务那一条;取不到(如流程启动时保存的“提交”快照没有任务ID)时按 taskDefKey
|
|
25
|
+
* 取该节点最后一次保存的快照——驳回后重新提交会产生多轮同节点快照,必须取最后一轮。
|
|
21
26
|
*/
|
|
22
|
-
snapshot(bizId: string,
|
|
27
|
+
snapshot(bizId: string, params?: string | {
|
|
28
|
+
wfTaskId?: string;
|
|
29
|
+
taskDefKey?: string;
|
|
30
|
+
}): Promise<Record<string, any>>;
|
|
23
31
|
taskComplete(task: IWfTaskAskVo): Promise<IWfTaskVo>;
|
|
24
32
|
taskTransfer(task: IWfTaskAskVo): Promise<IWfTaskVo>;
|
|
25
33
|
taskReject(task: IWfTaskAskVo): Promise<IWfTaskVo>;
|
|
@@ -32,7 +40,7 @@ declare const _default: {
|
|
|
32
40
|
addOrMinusAssignee(data: IWfTaskUsersVo): Promise<string>;
|
|
33
41
|
getTaskInst(taskId: string): Promise<IWfTaskVo>;
|
|
34
42
|
getWfTaskByBusinessId(businessId: string): Promise<IWfTaskVo>;
|
|
35
|
-
getProcessTaskList(processInstId: string): Promise<
|
|
43
|
+
getProcessTaskList(processInstId: string): Promise<any>;
|
|
36
44
|
getWfProcessInstByBusinessId(businessId: string): Promise<IWfTaskVo>;
|
|
37
45
|
getReviewDetail(taskId: string): Promise<IWfTaskVo>;
|
|
38
46
|
/** 获取指定节点最后一轮审批人及审批意见(支持多节点,不限制流程是否结束) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import e from"../../utils/request.js";import"../../utils/AxiosConfig.js";import"axios";import"../../utils/uuid.js";import"uuid";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/behaviorContext.js";import"../../utils/dateTime.js";import"element-plus";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"vue";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";const s="/api/workflow/task",i="/api/workflow/workbench/",p=5e3,a=new Map,C=t=>{t?a.delete(t):a.clear()},P={addProcessInst(t){return e.post("/api/workflow/procinstance/start",t)},processWithdrawalVerification(t){return e.post(i+"processWithdrawalVerification",t)},processWithdrawalPreview(t){return e.post(i+"processWithdrawalPreview",t)},processWithdrawal(t){return e.post(i+"processWithdrawal",t)},snapshot(t,r){const o=typeof r=="string"?{wfTaskId:r}:r||{};return e.get("/api/business/workflow/compensation/snapshot",{bizId:t,wfTaskId:o.wfTaskId,taskDefKey:o.taskDefKey})},taskComplete(t){return e.post(s+"/taskComplete",t)},taskTransfer(t){return e.post(s+"/taskTransfer",t)},taskReject(t){return e.post(s+"/taskReject",t)},findReturnTaskList(t,r=!1){return e.post(s+"/findReturnTaskList",{taskId:t,ignoreBackNodes:r})},taskReturn(t){return e.post(s+"/taskReturn",t)},getTaskCandidate(t){return e.post(s+"/getTaskCandidate",{taskId:t})},getTaskCandidateList(t){return e.post(s+"/getTaskCandidateList",{taskId:t})},setAssignee(t){return e.post(s+"/setAssignee",t)},setAssigneeList(t){return e.post(s+"/setAssigneeList",t)},addOrMinusAssignee(t){return e.post(s+"/addOrMinusAssignee",t)},getTaskInst(t){return e.post(s+"/getTaskInst",{taskId:t})},getWfTaskByBusinessId(t){return e.post(s+"/getWfTaskByBusinessId",{businessId:t})},getProcessTaskList(t){const r=a.get(t);if(r&&Date.now()-r.time<p)return r.promise;const o=e.get("/api/workflow/workbench/process/"+t).catch(n=>{throw a.delete(t),n});return a.set(t,{time:Date.now(),promise:o}),o},getWfProcessInstByBusinessId(t){return e.get(s+"/getUserTaskInfo",{businessId:t})},getReviewDetail(t){return e.get(s+"/reviewDetail",{taskId:t})},getLastNodeApprovalByBusinessId(t,r){const o={businessId:t,nodeCodes:Array.isArray(r)?r:[r]};return e.post(s+"/lastNodeApproval",o)}};export{P as default,C as invalidateProcessTaskList};
|
|
@@ -37,7 +37,7 @@ declare const __VLS_component: import("vue").DefineComponent<globalThis.ExtractP
|
|
|
37
37
|
};
|
|
38
38
|
/**
|
|
39
39
|
* 流程信息回调:由业务侧注入(如通过总线打开工作流子应用的流程详情抽屉);
|
|
40
|
-
*
|
|
40
|
+
* 不注入时走核心包统一入口 showProcessView(组件型节点由目标子应用只读渲染业务组件 + 当时快照)。
|
|
41
41
|
*/
|
|
42
42
|
onProcessDetail: {
|
|
43
43
|
type: FunctionConstructor;
|
|
@@ -89,7 +89,7 @@ declare const __VLS_component: import("vue").DefineComponent<globalThis.ExtractP
|
|
|
89
89
|
};
|
|
90
90
|
/**
|
|
91
91
|
* 流程信息回调:由业务侧注入(如通过总线打开工作流子应用的流程详情抽屉);
|
|
92
|
-
*
|
|
92
|
+
* 不注入时走核心包统一入口 showProcessView(组件型节点由目标子应用只读渲染业务组件 + 当时快照)。
|
|
93
93
|
*/
|
|
94
94
|
onProcessDetail: {
|
|
95
95
|
type: FunctionConstructor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineComponent as Y,ref as v,useModel as Z,computed as _,onMounted as ee,watch as te,resolveComponent as
|
|
1
|
+
import{defineComponent as Y,ref as v,useModel as Z,computed as _,onMounted as ee,watch as te,resolveComponent as $,openBlock as l,createElementBlock as P,createVNode as ae,withCtx as u,renderSlot as V,createBlock as f,createTextVNode as m,toDisplayString as k,createCommentVNode as d,unref as oe,Fragment as re,mergeModels as W}from"vue";import D from"../../api/workflow/workflowInstApi.js";import ne from"./components/SelectAssigneeDialog.vue.js";import{_ as ie}from"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import se from"./components/CheckDialog.vue.js";import{runWorkflowComplete as le}from"../../hooks/workflowCompleteRunner.js";import q from"../../utils/FrameworkUtils.js";import{userInfoStore as w}from"../../stores/userInfoStore.js";import{frontendBus as L}from"../../utils/frontendBus.js";import{showProcessView as ue,showTodoDialog as de}from"../../hooks/workflowTodo.js";import{_ as fe}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/request.js";import"../../utils/AxiosConfig.js";import"axios";import"../../utils/uuid.js";import"uuid";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/behaviorContext.js";import"../../utils/dateTime.js";import"element-plus";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"../business/comp.userForm.vue.js";import"@vueuse/core";import"../../api/DeptInfoApi.js";import"../../api/EmployeeInfoApi.js";import"../../hooks/useResetRefHooks.js";import"../../config/vxeSelectColumn.js";import"../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"xlsx-js-style";import"../../api/SysUserApi.js";import"../bpmntree/components/UserSelector/UserTag.vue.js";import"../upload/CustomElUpload.vue.js";import"@element-plus/icons-vue";import"../../hooks/useFileView.js";import"../../api/DocumentApi.js";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/uploadAccept.js";import"../../utils/buildUploadHeaders.js";import"pinia";import"../../utils/userSessionStorage.js";import"../../hooks/usePermissionHooks.js";import"vue-router";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../../utils/routeMetaParams.js";import"../../hooks/useOpenNewMenu.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const me=Y({__name:"TaskOperation",props:W({taskId:{type:String,required:!1},showProcessBtn:{type:Boolean,required:!1,default:!1},params:{type:Object,required:!1},taskInfo:{type:Object,required:!1},showOperationsBtn:{type:Boolean,required:!1,default:!0},showCurWorkBth:{type:Boolean,required:!1,default:!0},onProcessDetail:{type:Function,required:!1},renderDialog:{type:Function,required:!1}},{butLoading:{type:Boolean,default:!1},butLoadingModifiers:{}}),emits:W(["success"],["update:butLoading"]),setup(o,{expose:E,emit:A}){const N=w(),b=v(null),n=o,i=Z(o,"butLoading"),R=A,e=v({taskId:"",comment:""}),O=n.renderDialog,g=(t,a,r,x,c,X)=>{if(!O){console.warn("[TaskOperation] 未注入 renderDialog,无法打开操作弹窗(请通过 props 传入 useDialogHooks 的 render)");return}O(t,a,r,x,c,X)},U=async()=>{if(typeof n.onProcessDetail=="function"){n.onProcessDetail(e.value);return}await ue(e.value)},T=_(()=>e.value?.operations==="assignee"),S=v(""),y=v(),K=v([{source:"edit"}]),j=async()=>{await de(v(e.value),K)},p=async t=>{if(t&&(S.value=t),!e.value)return;y.value={...e.value};let a=!1;if(t==="complete"&&n.params?.beforeCompleteFunction)try{const r=await n.params?.beforeCompleteFunction({taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:"同意。",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey});if(r===!1)return;r?.readonly&&(a=!0),e.value={...e.value,...r}}catch{return}if(t==="addMulti"||t==="minusMulti")g(ie,{taskId:e.value.taskId,dialogType:t,renderDialog:g,onSuccess:I,onWorkflowSuccess:C},{title:t==="addMulti"?"加签":"减签",size:"400px"},"dialog");else if(t==="assignee")M(e.value.taskId);else{if(e.value.variables,t==="complete"&&e.value.firstSubmitNode&&n.params?.ignoreConfirm){await H();return}g(se,{taskVo:e.value,dialogType:t,taskOperate:n?.params,commentReadonly:a,renderDialog:g,onOpenAssignee:M,onSuccess:I,onWorkflowSuccess:C},{title:z(t),size:"480px",closeOnClickModal:!1},"dialog")}},z=t=>{switch(t){case"complete":return"流程审批";case"refuse":return"终止审批";case"back":return"驳回审批";case"transfer":return"转办审批";default:return"流程审批"}},H=async()=>{if(!e.value||!w().getUserInfo.userCode)return;y.value={...e.value};const t={taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:e.value.comment??"",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey,variables:e.value.variables};try{if(i.value=!0,n.params?.completeFunction){const a=await n.params?.completeFunction(t);a&&a?.taskId?e.value=a:e.value=await D.getTaskInst(e.value.taskId)}else e.value=await D.taskComplete(t)}catch(a){q.messageError(a);return}finally{i.value=!1}try{await h({actionType:"complete",taskVo:e.value,askVo:t})}catch{}},M=t=>{y.value={...e.value},g(ne,{taskId:t,onSuccess:I,onWorkflowSuccess:C},{title:"指定执行人",size:"450px"},"dialog")},I=t=>{t&&(e.value=t),L.emit("todoRefresh"),L.emit("homePageRefresh"),R("success")},h=async(t,a)=>{const r={...t,actionType:t.actionType||S.value,originTask:t.originTask??y.value,taskVo:t.taskVo??e.value};await le(n.params,r),a?.refresh!==!1&&I(t.taskVo)},C=t=>h({...t,originTask:t.originTask??y.value},{refresh:!1}),F=(t,a)=>t?t.classList?.contains(a)?t:F(t.parentElement,a):null,G=()=>{const t=F(b.value,"todo-dialog-class");return t?console.log("找到满足条件的元素:",t):console.log("未找到满足条件的元素"),t};ee(()=>{G(),B()});const s=v(!1),J=async()=>{s.value=!0},Q=()=>{s.value=!1},B=async()=>{if(n.taskInfo)e.value=n.taskInfo,e.value.finishTime&&console.log("该待办已完成!");else if(n.taskId)try{J(),e.value=await D.getTaskInst(n.taskId),e.value.finishTime&&console.log("该待办已完成!")}catch(t){q.messageError(t)}finally{Q()}};return E({reload:()=>{B()}}),te(()=>n.taskId,B),(t,a)=>{const r=$("el-button"),x=$("el-flex");return l(),P("div",{ref_key:"taskFlexRef",ref:b,class:"task-operation"},[ae(x,{align:"center",justify:"flex-end"},{default:u(()=>[V(t.$slots,"left",{},void 0,!0),o.params?.cancelBtnText!==""?(l(),f(r,{key:0,loading:i.value||s.value,onClick:o.params?.cancelFunction},{default:u(()=>[m(k(o.params?.cancelBtnText??"取消"),1)]),_:1},8,["loading","onClick"])):d("v-if",!0),o.showProcessBtn&&e.value?.procInsId?(l(),f(r,{key:1,type:"info",loading:i.value||s.value,onClick:U},{default:u(()=>[...a[7]||(a[7]=[m(" 流程信息 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),!T.value&&e.value?.taskId&&o.showCurWorkBth&&!o.showOperationsBtn?(l(),f(r,{key:2,loading:i.value||s.value,type:"warning",disabled:e.value?.taskId&&(!e.value?.operations||oe(N).getUserInfo.userCode!==e.value?.assigneeId),onClick:j},{default:u(()=>[m(k(e.value.taskName),1)]),_:1},8,["loading","disabled"])):d("v-if",!0),T.value?(l(),f(r,{key:3,type:"primary",loading:i.value||s.value,onClick:a[0]||(a[0]=c=>p("assignee"))},{default:u(()=>[...a[8]||(a[8]=[m("指定执行人 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),!T.value&&e.value?.taskId&&e.value?.operations&&o.showOperationsBtn?(l(),P(re,{key:4},[o.params?.saveBtnText?(l(),f(r,{key:0,loading:i.value||s.value,type:"primary",onClick:o.params?.saveFunction},{default:u(()=>[m(k(o.params?.saveBtnText),1)]),_:1},8,["loading","onClick"])):d("v-if",!0),e.value?.operations.indexOf("addMulti")>-1?(l(),f(r,{key:1,type:"warning",loading:i.value||s.value,onClick:a[1]||(a[1]=c=>p("addMulti"))},{default:u(()=>[...a[9]||(a[9]=[m("加签 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("minusMulti")>-1?(l(),f(r,{key:2,type:"danger",loading:i.value||s.value,onClick:a[2]||(a[2]=c=>p("minusMulti"))},{default:u(()=>[...a[10]||(a[10]=[m("减签 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("refuse")>-1&&o.params?.refuseBtnText!==""?(l(),f(r,{key:3,loading:i.value||s.value,type:"danger",onClick:a[3]||(a[3]=c=>p("refuse"))},{default:u(()=>[m(k(o.params?.refuseBtnText??"终止"),1)]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("transfer")>-1&&o.params?.transferBtnText!==""?(l(),f(r,{key:4,loading:i.value||s.value,type:"warning",onClick:a[4]||(a[4]=c=>p("transfer"))},{default:u(()=>[m(k(o.params?.transferBtnText??"转办"),1)]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("back")>-1&&o.params?.backBtnText!==""?(l(),f(r,{key:5,loading:i.value||s.value,type:"danger",onClick:a[5]||(a[5]=c=>p("back"))},{default:u(()=>[m(k(o.params?.backBtnText??"驳回"),1)]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("complete")>-1&&o.params?.completeBtnText!==""?(l(),f(r,{key:6,loading:i.value||s.value,type:"primary",onClick:a[6]||(a[6]=c=>p("complete"))},{default:u(()=>[m(k(o.params?.completeBtnText??"同意"),1)]),_:1},8,["loading"])):d("v-if",!0)],64)):d("v-if",!0),V(t.$slots,"right",{},void 0,!0)]),_:3})],512)}}}),kt=fe(me,[["__scopeId","data-v-a84c5805"]]);export{kt as default};
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import{defineComponent as et,useModel as tt,ref as $,computed as w,resolveComponent as I,resolveDirective as st,openBlock as n,createElementBlock as r,createCommentVNode as l,withDirectives as ot,unref as C,createVNode as x,withCtx as S,createTextVNode as T,toDisplayString as d,createElementVNode as i,normalizeStyle as ge,normalizeClass as M,Fragment as k,renderList as B,createBlock as K,renderSlot as nt,resolveDynamicComponent as at,mergeProps as rt,mergeModels as Ie,nextTick as lt}from"vue";import{ElMessageBox as it,ElMessage as ct}from"element-plus";import A from"../../api/workflow/workflowInstApi.js";import dt from"../../api/DocumentApi.js";import ut from"../../hooks/useFileView.js";import pt from"../../hooks/useDictHooks.js";import Te from"../../utils/FrameworkUtils.js";import ft from"../../hooks/useWorkflowSnapshot.js";import{parseDateTime as ee,formatDateTime as te}from"../../utils/dateTime.js";import{formatStayDuration as se,resolveTimeoutMeta as kt}from"../../utils/flowTimeout.js";import{userInfoStore as O}from"../../stores/userInfoStore.js";import mt from"./TaskOperation.vue.js";import{_ as vt}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/request.js";import"../../utils/AxiosConfig.js";import"axios";import"../../utils/uuid.js";import"uuid";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/behaviorContext.js";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"../../api/SysDictCacheApi.js";import"../../stores/dictStore.js";import"pinia";import"../../utils/userSessionStorage.js";import"xlsx-js-style";import"./components/SelectAssigneeDialog.vue.js";import"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import"../business/comp.userForm.vue.js";import"@vueuse/core";import"../../api/DeptInfoApi.js";import"../../api/EmployeeInfoApi.js";import"../../hooks/useResetRefHooks.js";import"../../config/vxeSelectColumn.js";import"../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"../../api/SysUserApi.js";import"./components/CheckDialog.vue.js";import"../bpmntree/components/UserSelector/UserTag.vue.js";import"../upload/CustomElUpload.vue.js";import"@element-plus/icons-vue";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/uploadAccept.js";import"../../utils/buildUploadHeaders.js";import"../../hooks/workflowCompleteRunner.js";import"../../hooks/workflowTodo.js";import"../../hooks/usePermissionHooks.js";import"vue-router";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../../utils/routeMetaParams.js";import"../../hooks/useOpenNewMenu.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const wt={class:"workflow-todo-shell"},yt={class:"workflow-todo-shell__body dialog-content-fill"},_t={key:0,class:"workflow-todo-shell__source"},ht={class:"workflow-todo-shell__source-hint"},gt={class:"wf-wait__icon"},It={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},Tt={class:"wf-wait__main"},bt={class:"wf-wait__title"},Ct={class:"wf-wait__sub"},xt={key:0,class:"wf-wait__opinion"},Nt={key:1,class:"wf-wait__files"},Dt=["onClick"],Et={key:0},St={key:1,class:"wf-progress-scroll"},Bt={class:"wf-progress-steps"},Kt={class:"wf-progress-step__icon-wrap"},Lt={class:"wf-progress-step__icon"},$t={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},Mt={key:4},At={class:"wf-progress-step__name"},Ot={class:"wf-progress-step__name-text"},Ft={class:"wf-progress-step__name-label"},Vt={key:0,class:"wf-progress-step__occurrence"},jt={key:0,class:"workflow-todo-shell__record-occurrence"},Ut={key:1,class:"workflow-todo-shell__record-type"},Pt={key:0,class:"workflow-todo-shell__record-user"},Wt={class:"workflow-todo-shell__record-person__name"},Rt={key:0,class:"workflow-todo-shell__comment"},zt={key:0,class:"workflow-todo-shell__record-files"},Ht=["onClick"],Qt={class:"workflow-todo-shell__record-person__name"},Gt={key:0,class:"workflow-todo-shell__comment"},Yt={key:1,class:"workflow-todo-shell__record-files"},qt=["onClick"],Jt={class:"workflow-todo-shell__record-person__name"},Xt={key:0,class:"workflow-todo-shell__footer"},be="__end__",Zt=et({__name:"WorkflowTodoShell",props:Ie({taskId:{},taskInfo:{default:void 0},readonly:{type:Boolean,default:!1},contentComponent:{default:void 0},contentProps:{default:()=>({})},renderDialog:{type:Function,default:void 0},showFooter:{type:Boolean,default:!0},withdrawEnabled:{type:Boolean,default:!1}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:Ie(["cancel","success"],["update:loading"]),setup(N,{expose:Ce,emit:xe}){const u=N,F=xe,L=tt(N,"loading"),v=$(),h=$(),P=$(),W=$(!1),{getDictTypeData:Ne}=pt(["SysFlowTimeout"]),De=e=>[...e].sort((t,s)=>(t.createTime||"").localeCompare(s.createTime||"")),R=w(()=>De([...h.value?.hisTasks||[],...h.value?.activeTasks||[]])),z=$({}),H=ut().fileView,Q=e=>{const t=(e.split(".").pop()||"").toLowerCase();return".jpg,.jpeg,.png,.gif,.bmp".includes(t)?"adtec-image":t==="pdf"?"adtec-pdf":t==="doc"||t==="docx"?"adtec-word":t==="xls"||t==="xlsx"?"adtec-excel":t==="ppt"||t==="pptx"?"adtec-ppt":"adtec-text"},D=e=>e?z.value[e]||[]:[],Ee=async()=>{var t;const e=Array.from(new Set(R.value.map(s=>s.taskId).filter(s=>!!s)));if(e.length)try{const s=await dt.getUpLoadFilesByBussinessIds(e),o={};for(const c of s)c.businessId&&(o[t=c.businessId]||(o[t]=[])).push(c);z.value=o}catch{z.value={}}},G=w(()=>{const e=new Map;for(const t of R.value){const s=ye(t),o=e.get(s);o?o.tasks.push(t):e.set(s,{taskName:t.taskName,taskDefKey:t.taskDefKey,parentExecutionId:t.parentExecutionId,tasks:[t],approvalType:t.approvalType})}return Array.from(e.values())}),j=w(()=>v.value?.procEndTime?!0:!!(h.value&&!(h.value.activeTasks||[]).length&&(h.value.hisTasks||[]).length)),Se=e=>/^#[0-9a-fA-F]{6}$/.test(e)?`${e}1f`:"var(--el-color-primary-light-9)",oe={ok:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)"},ne={ok:"var(--el-color-success-light-9)",warning:"var(--el-color-warning-light-9)",danger:"var(--el-color-danger-light-9)"},Be=e=>e==="danger"?"danger":e==="warning"?"warning":"ok",ae=e=>e==="danger"?"close":e==="warning"?"back":"check",Ke=e=>!e||e.startsWith("已")?e:`已${e}`,Y=w(()=>String(v.value?.finishedResult||"")==="terminate"||String(v.value?.processStatus||"")==="terminated"),q=w(()=>R.value.find(e=>!!u.taskId&&e.taskId===u.taskId)),re=e=>!!e?.assigneeId&&e.assigneeId===O().getUserInfo.userCode,Le=w(()=>{const e=O().getUserInfo.userCode;if(!e)return!1;const t=q.value;return t?.taskLocalVars?.firstTask?re(t):!t&&u.taskInfo?.startUserId===e}),$e=e=>{const t=(e?.commentList||[]).find(s=>String(s.type)!=="8");return String(t?.fullMessage||"").trim()},Me=e=>{if(!e?.finishTime)return;const t=!!e.taskLocalVars?.firstTask,s=t?{label:"已提交",type:"success"}:fe[String((e.commentList||[]).find(V=>String(V.type)!=="8")?.type||"")]||{label:"已办",type:"success"},o=Be(s.type),c=!!e.assigneeId&&e.assigneeId===O().getUserInfo.userCode,y=ee(e.createTime||"")?.getTime()??0,m=ee(e.finishTime||"")?.getTime()??0,g=y&&m?Math.max(m-y,0):0,_=Ke(s.label);return{level:o,icon:ae(o),color:oe[o],weakColor:ne[o],title:`${c?"我的处理":e.assigneeName||"审批"}:${_}`,sub:[te(e.finishTime),g?`耗时 ${se(g)}`:""].filter(Boolean).join(" · "),opinion:t?"":$e(e),filesTaskId:t?"":e.taskId||"",ctText:e.taskName||"",ctLabel:"",ctKind:"node"}},le=()=>{const e=v.value,t=Y.value?"danger":"ok",s=Y.value?"流程已终止":"流程已办结",o=te(e?.procEndTime);return{level:t,icon:ae(t),color:oe[t],weakColor:ne[t],title:s,sub:o?`${o} ${Y.value?"已终止":"完成归档"}`:s,opinion:"",filesTaskId:"",ctText:"",ctLabel:"",ctKind:""}},ie=()=>{const e=h.value?.activeTasks||[],t=e.map(_=>ee(_.createTime||"")).filter(_=>!!_).sort((_,V)=>_.getTime()-V.getTime())[0];if(!t)return;const s=e[0],o=Array.from(new Set(e.map(_=>_.assigneeName).filter(_=>!!_))),c=s?.approvalType||"",y=c==="joint"||c==="all"?" · ":" / ",m=Math.max(Date.now()-t.getTime(),0),g=kt(Ne("SysFlowTimeout"),m);return{title:`当前等待:${s?.taskName||v.value?.taskName||"当前节点"} · ${o.length?o.join(y):"待分配"}`,sub:`已停留 ${se(m)}`,opinion:"",filesTaskId:"",ctText:se(m),ctLabel:g.level==="danger"?"超时风险":"等待中",ctKind:"stay",color:g.color||"var(--el-color-primary)",level:g.level,weakColor:Se(g.color),icon:"clock"}},p=w(()=>{const e=q.value;return Le.value?j.value?le():ie():e?.finishTime&&!e.taskLocalVars?.firstTask&&re(e)?Me(e):j.value?le():ie()}),Ae=w(()=>{const e=[...G.value],t=new Set(e.map(o=>ce(o)));for(const o of h.value?.futureTasks||[]){const c=`${o.taskDefKey||o.taskName}-`;t.has(c)||e.push({taskName:o.taskName,taskDefKey:o.taskDefKey,tasks:[],assigneeNames:o.assigneeNames,approvalType:o.approvalType})}e.push({taskName:"结束",taskDefKey:be,tasks:[],isEnd:!0});const s=new Map;for(const o of e){const c=o.taskDefKey||o.taskName||"";c&&(o.occurrence=(s.get(c)||0)+1,s.set(c,o.occurrence))}return e}),ce=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,Oe={single:"或签",joint:"会签",all:"会签"},de=e=>Oe[e.approvalType||e.tasks[0]?.approvalType||""]||"",Fe=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Ve=w(()=>{const e=q.value;if(!e?.finishTime)return;const t=O().getUserInfo.userCode;if(!(!t||e.assigneeId!==t))return e}),ue=e=>{const t=O().getUserInfo.userCode;if(!t)return"";const s=e.tasks.filter(c=>!!c.finishTime&&c.assigneeId===t);if(!s.length)return"";const o=Ve.value?.taskId;return o&&s.some(c=>c.taskId===o)?"entry":"other"},pe=e=>{const t=(e.assigneeNames||"").split(",").map(s=>s.trim()).filter(Boolean);return t.length?t:["待处理"]},fe={1:{label:"同意",type:"success"},2:{label:"退回",type:"warning"},3:{label:"驳回",type:"warning"},4:{label:"委派",type:"warning"},5:{label:"转办",type:"warning"},6:{label:"终止",type:"danger"},7:{label:"撤回",type:"info"},8:{label:"催办",type:"info"}},je=e=>te(e.finishTime||e.createTime),Ue={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},Pe=e=>Ue[e]||"",E=e=>{if(e.isEnd)return j.value?{label:"已结束",type:"success",hollow:!0}:{label:"等待",type:"info",hollow:!0};if(!e.tasks.length)return{label:"等待",type:"info",hollow:!0};const t=e.tasks;if(t.some(c=>!c.finishTime))return{label:"进行中",type:"primary",hollow:!0};let s="已办",o="success";if(t.some(c=>c.taskLocalVars?.firstTask))s="提交";else{const c=[...t].sort((m,g)=>(g.finishTime||"").localeCompare(m.finishTime||""))[0]?.commentList?.[0],y=fe[c?.type||""];s=y?.label||"已办",o=y?.type||"success"}return{label:s,type:o,hollow:!0}},ke=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${je(e)}`:t},We=e=>e.tasks.length?e.tasks.map(ke).join(" / "):pe(e).join(" / "),J=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),me=w(()=>{const e=new Map,t=[];for(const s of G.value){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const c=s.tasks.some(m=>!m.finishTime)?"process":E(s).type,y=e.get(o);if(y!==void 0){const m=t[y];m.occurrence=(m.occurrence||1)+1,m.parentExecutionId=s.parentExecutionId,m.status=c;continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,parentExecutionId:s.parentExecutionId,status:c,occurrence:1})}for(const s of h.value?.futureTasks||[]){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const c=e.get(o);if(c!==void 0){t[c].status="wait";continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:be,status:j.value?"success":"wait"}),t}),ve=e=>{const t=O().getUserInfo.userCode;return!t||!e?!1:!!(e.assigneeId===t||e.candidate&&e.candidate.split(",").map(o=>o.trim()).filter(Boolean).includes(t))},Re=w(()=>ve(v.value)?!0:(h.value?.activeTasks||[]).some(e=>ve(e))),X=w(()=>u.readonly||!!v.value?.finishTime||!!v.value?.procEndTime||W.value&&!(h.value?.activeTasks||[]).length||!Re.value),Z=$(!1),{snapshot:we,dataSourceMeta:U,refresh:ze}=ft(()=>String(u.taskInfo?.businessId||v.value?.businessId||""),{wfTaskId:()=>u.taskId,taskDefKey:()=>String(u.taskInfo?.taskDefKey||v.value?.taskDefKey||""),readonly:()=>X.value}),He=w(()=>X.value&&!!u.taskId&&(u.withdrawEnabled===!0||u.taskInfo?.withdrawEnabled===!0)),Qe=async()=>{const e=u.taskInfo||v.value;if(!e?.taskId)return;const t={taskId:e.taskId,taskDefKey:e.taskDefKey,taskName:e.taskName,taskTitle:e.taskTitle,procInsId:e.procInsId,procDefId:e.procDefId,procDefKey:e.procDefKey,businessId:e.businessId};Z.value=!0;try{await A.processWithdrawalVerification(t);let s="";try{const o=await A.processWithdrawalPreview(t);s=String(o?.targetTaskName||"")}catch(o){console.warn("撤回预览失败",o)}await it.confirm(`确认撤回「${e.taskTitle||e.taskName||"该申请单"}」?`+(s?`撤回后流程将回到「${s}」,需要重新提交。`:"撤回后需要重新提交。"),"撤回确认",{type:"warning",confirmButtonText:"确认撤回",cancelButtonText:"取消"}),await A.processWithdrawal(t),ct.success("撤回成功"),F("success",e),F("cancel")}catch(s){if(s==="cancel"||s==="close")return;Te.messageError(s)}finally{Z.value=!1}},Ge=w(()=>P.value?.taskOption),Ye=w(()=>{const e=Ge.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),F("cancel")},workflowComplete:async(...t)=>{await e?.workflowComplete?.(...t)}}}),ye=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,_e=async(e,t=!1)=>{const s=u.taskInfo&&u.taskInfo.procInsId==null&&u.taskInfo.processInstanceId!=null?{...u.taskInfo,procInsId:u.taskInfo.processInstanceId}:u.taskInfo;if(!(!u.taskId&&!s?.procInsId))try{L.value=!0,W.value=!1,v.value=e?{...v.value,...e}:t&&u.taskId?await A.getTaskInst(u.taskId):s||await A.getTaskInst(u.taskId),v.value?.procInsId&&(h.value=await A.getProcessTaskList(v.value.procInsId)),W.value=!0,await ze(),await Ee(),await lt(),await P.value?.resetQuery?.()}catch(o){Te.messageError(o)}finally{L.value=!1}},qe=async e=>{F("success",e),await _e(e,!0)};return Ce({resetQuery:async()=>{await _e()}}),(e,t)=>{const s=I("el-tag"),o=I("el-icons"),c=I("el-title"),y=I("el-empty"),m=I("el-tag-display"),g=I("el-flex"),_=I("el-timeline-item"),V=I("el-timeline"),he=I("el-button"),Je=I("operation-auth"),Xe=st("loading");return n(),r("div",wt,[l(`
|
|
1
|
+
import{defineComponent as tt,useModel as st,ref as S,computed as w,onMounted as ot,onBeforeUnmount as nt,resolveComponent as T,resolveDirective as at,openBlock as n,createElementBlock as r,createCommentVNode as l,createBlock as b,Teleport as rt,unref as C,toDisplayString as d,withDirectives as lt,normalizeStyle as Ie,normalizeClass as O,createElementVNode as c,Fragment as k,renderList as B,createVNode as K,createTextVNode as x,renderSlot as it,resolveDynamicComponent as ct,mergeProps as dt,withCtx as $,mergeModels as Te,nextTick as ut}from"vue";import{ElMessageBox as pt,ElMessage as ft}from"element-plus";import j from"../../api/workflow/workflowInstApi.js";import kt from"../../api/DocumentApi.js";import mt from"../../hooks/useFileView.js";import vt from"../../hooks/useDictHooks.js";import be from"../../utils/FrameworkUtils.js";import wt from"../../hooks/useWorkflowSnapshot.js";import{parseDateTime as ee,formatDateTime as te}from"../../utils/dateTime.js";import{formatStayDuration as se,resolveTimeoutMeta as yt}from"../../utils/flowTimeout.js";import{userInfoStore as F}from"../../stores/userInfoStore.js";import _t from"./TaskOperation.vue.js";import{_ as ht}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/request.js";import"../../utils/AxiosConfig.js";import"axios";import"../../utils/uuid.js";import"uuid";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/behaviorContext.js";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"../../api/SysDictCacheApi.js";import"../../stores/dictStore.js";import"pinia";import"../../utils/userSessionStorage.js";import"xlsx-js-style";import"./components/SelectAssigneeDialog.vue.js";import"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import"../business/comp.userForm.vue.js";import"@vueuse/core";import"../../api/DeptInfoApi.js";import"../../api/EmployeeInfoApi.js";import"../../hooks/useResetRefHooks.js";import"../../config/vxeSelectColumn.js";import"../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"../../api/SysUserApi.js";import"./components/CheckDialog.vue.js";import"../bpmntree/components/UserSelector/UserTag.vue.js";import"../upload/CustomElUpload.vue.js";import"@element-plus/icons-vue";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/uploadAccept.js";import"../../utils/buildUploadHeaders.js";import"../../hooks/workflowCompleteRunner.js";import"../../hooks/workflowTodo.js";import"../../hooks/usePermissionHooks.js";import"vue-router";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../../utils/routeMetaParams.js";import"../../hooks/useOpenNewMenu.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const gt={key:0,class:"workflow-todo-shell__source-label"},It={class:"workflow-todo-shell__body dialog-content-fill"},Tt={key:0,class:"workflow-todo-shell__source-fallback"},bt={class:"wf-wait__icon"},Ct={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},xt={class:"wf-wait__main"},Et={class:"wf-wait__title"},Nt={class:"wf-wait__sub"},Dt={key:0,class:"wf-wait__opinion"},St={key:1,class:"wf-wait__files"},Bt=["onClick"],Kt={key:0},Lt={key:1,class:"wf-progress-scroll"},Mt={class:"wf-progress-steps"},$t={class:"wf-progress-step__icon-wrap"},At={class:"wf-progress-step__icon"},Ot={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},jt={key:4},Ft={class:"wf-progress-step__name"},Vt={class:"wf-progress-step__name-text"},Ut={class:"wf-progress-step__name-label"},Pt={key:0,class:"wf-progress-step__occurrence"},Wt={key:0,class:"workflow-todo-shell__record-occurrence"},Rt={key:1,class:"workflow-todo-shell__record-type"},zt={key:0,class:"workflow-todo-shell__record-user"},Ht={class:"workflow-todo-shell__record-person__name"},Qt={key:0,class:"workflow-todo-shell__comment"},qt={key:0,class:"workflow-todo-shell__record-files"},Gt=["onClick"],Yt={class:"workflow-todo-shell__record-person__name"},Jt={key:0,class:"workflow-todo-shell__comment"},Xt={key:1,class:"workflow-todo-shell__record-files"},Zt=["onClick"],es={class:"workflow-todo-shell__record-person__name"},ts={key:1,class:"workflow-todo-shell__footer"},Ce="__end__",ss=tt({__name:"WorkflowTodoShell",props:Te({taskId:{},taskInfo:{default:void 0},readonly:{type:Boolean,default:!1},contentComponent:{default:void 0},contentProps:{default:()=>({})},renderDialog:{type:Function,default:void 0},showFooter:{type:Boolean,default:!0},withdrawEnabled:{type:Boolean,default:!1}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:Te(["cancel","success"],["update:loading"]),setup(E,{expose:xe,emit:Ee}){const u=E,V=Ee,L=st(E,"loading"),v=S(),_=S(),W=S(),R=S(!1),{getDictTypeData:Ne}=vt(["SysFlowTimeout"]),De=e=>[...e].sort((t,s)=>(t.createTime||"").localeCompare(s.createTime||"")),z=w(()=>De([..._.value?.hisTasks||[],..._.value?.activeTasks||[]])),H=S({}),Q=mt().fileView,q=e=>{const t=(e.split(".").pop()||"").toLowerCase();return".jpg,.jpeg,.png,.gif,.bmp".includes(t)?"adtec-image":t==="pdf"?"adtec-pdf":t==="doc"||t==="docx"?"adtec-word":t==="xls"||t==="xlsx"?"adtec-excel":t==="ppt"||t==="pptx"?"adtec-ppt":"adtec-text"},N=e=>e?H.value[e]||[]:[],Se=async()=>{var t;const e=Array.from(new Set(z.value.map(s=>s.taskId).filter(s=>!!s)));if(e.length)try{const s=await kt.getUpLoadFilesByBussinessIds(e),o={};for(const i of s)i.businessId&&(o[t=i.businessId]||(o[t]=[])).push(i);H.value=o}catch{H.value={}}},G=w(()=>{const e=new Map;for(const t of z.value){const s=he(t),o=e.get(s);o?o.tasks.push(t):e.set(s,{taskName:t.taskName,taskDefKey:t.taskDefKey,parentExecutionId:t.parentExecutionId,tasks:[t],approvalType:t.approvalType})}return Array.from(e.values())}),U=w(()=>v.value?.procEndTime?!0:!!(_.value&&!(_.value.activeTasks||[]).length&&(_.value.hisTasks||[]).length)),Be=e=>/^#[0-9a-fA-F]{6}$/.test(e)?`${e}1f`:"var(--el-color-primary-light-9)",oe={ok:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)"},ne={ok:"var(--el-color-success-light-9)",warning:"var(--el-color-warning-light-9)",danger:"var(--el-color-danger-light-9)"},Ke=e=>e==="danger"?"danger":e==="warning"?"warning":"ok",ae=e=>e==="danger"?"close":e==="warning"?"back":"check",Le=e=>!e||e.startsWith("已")?e:`已${e}`,Y=w(()=>String(v.value?.finishedResult||"")==="terminate"||String(v.value?.processStatus||"")==="terminated"),J=w(()=>z.value.find(e=>!!u.taskId&&e.taskId===u.taskId)),re=e=>!!e?.assigneeId&&e.assigneeId===F().getUserInfo.userCode,Me=w(()=>{const e=F().getUserInfo.userCode;if(!e)return!1;const t=J.value;return t?.taskLocalVars?.firstTask?re(t):!t&&u.taskInfo?.startUserId===e}),$e=e=>{const t=(e?.commentList||[]).find(s=>String(s.type)!=="8");return String(t?.fullMessage||"").trim()},Ae=e=>{if(!e?.finishTime)return;const t=!!e.taskLocalVars?.firstTask,s=t?{label:"已提交",type:"success"}:fe[String((e.commentList||[]).find(A=>String(A.type)!=="8")?.type||"")]||{label:"已办",type:"success"},o=Ke(s.type),i=!!e.assigneeId&&e.assigneeId===F().getUserInfo.userCode,h=ee(e.createTime||"")?.getTime()??0,m=ee(e.finishTime||"")?.getTime()??0,g=h&&m?Math.max(m-h,0):0,y=Le(s.label);return{level:o,icon:ae(o),color:oe[o],weakColor:ne[o],title:`${i?"我的处理":e.assigneeName||"审批"}:${y}`,sub:[te(e.finishTime),g?`耗时 ${se(g)}`:""].filter(Boolean).join(" · "),opinion:t?"":$e(e),filesTaskId:t?"":e.taskId||"",ctText:e.taskName||"",ctLabel:"",ctKind:"node"}},le=()=>{const e=v.value,t=Y.value?"danger":"ok",s=Y.value?"流程已终止":"流程已办结",o=te(e?.procEndTime);return{level:t,icon:ae(t),color:oe[t],weakColor:ne[t],title:s,sub:o?`${o} ${Y.value?"已终止":"完成归档"}`:s,opinion:"",filesTaskId:"",ctText:"",ctLabel:"",ctKind:""}},ie=()=>{const e=_.value?.activeTasks||[],t=e.map(y=>ee(y.createTime||"")).filter(y=>!!y).sort((y,A)=>y.getTime()-A.getTime())[0];if(!t)return;const s=e[0],o=Array.from(new Set(e.map(y=>y.assigneeName).filter(y=>!!y))),i=s?.approvalType||"",h=i==="joint"||i==="all"?" · ":" / ",m=Math.max(Date.now()-t.getTime(),0),g=yt(Ne("SysFlowTimeout"),m);return{title:`当前等待:${s?.taskName||v.value?.taskName||"当前节点"} · ${o.length?o.join(h):"待分配"}`,sub:`已停留 ${se(m)}`,opinion:"",filesTaskId:"",ctText:se(m),ctLabel:g.level==="danger"?"超时风险":"等待中",ctKind:"stay",color:g.color||"var(--el-color-primary)",level:g.level,weakColor:Be(g.color),icon:"clock"}},p=w(()=>{const e=J.value;return Me.value?U.value?le():ie():e?.finishTime&&!e.taskLocalVars?.firstTask&&re(e)?Ae(e):U.value?le():ie()}),Oe=w(()=>{const e=[...G.value],t=new Set(e.map(o=>ce(o)));for(const o of _.value?.futureTasks||[]){const i=`${o.taskDefKey||o.taskName}-`;t.has(i)||e.push({taskName:o.taskName,taskDefKey:o.taskDefKey,tasks:[],assigneeNames:o.assigneeNames,approvalType:o.approvalType})}e.push({taskName:"结束",taskDefKey:Ce,tasks:[],isEnd:!0});const s=new Map;for(const o of e){const i=o.taskDefKey||o.taskName||"";i&&(o.occurrence=(s.get(i)||0)+1,s.set(i,o.occurrence))}return e}),ce=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,je={single:"或签",joint:"会签",all:"会签"},de=e=>je[e.approvalType||e.tasks[0]?.approvalType||""]||"",Fe=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Ve=w(()=>{const e=J.value;if(!e?.finishTime)return;const t=F().getUserInfo.userCode;if(!(!t||e.assigneeId!==t))return e}),ue=e=>{const t=F().getUserInfo.userCode;if(!t)return"";const s=e.tasks.filter(i=>!!i.finishTime&&i.assigneeId===t);if(!s.length)return"";const o=Ve.value?.taskId;return o&&s.some(i=>i.taskId===o)?"entry":"other"},pe=e=>{const t=(e.assigneeNames||"").split(",").map(s=>s.trim()).filter(Boolean);return t.length?t:["待处理"]},fe={1:{label:"同意",type:"success"},2:{label:"退回",type:"warning"},3:{label:"驳回",type:"warning"},4:{label:"委派",type:"warning"},5:{label:"转办",type:"warning"},6:{label:"终止",type:"danger"},7:{label:"撤回",type:"info"},8:{label:"催办",type:"info"}},Ue=e=>te(e.finishTime||e.createTime),Pe={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},We=e=>Pe[e]||"",D=e=>{if(e.isEnd)return U.value?{label:"已结束",type:"success",hollow:!0}:{label:"等待",type:"info",hollow:!0};if(!e.tasks.length)return{label:"等待",type:"info",hollow:!0};const t=e.tasks;if(t.some(i=>!i.finishTime))return{label:"进行中",type:"primary",hollow:!0};let s="已办",o="success";if(t.some(i=>i.taskLocalVars?.firstTask))s="提交";else{const i=[...t].sort((m,g)=>(g.finishTime||"").localeCompare(m.finishTime||""))[0]?.commentList?.[0],h=fe[i?.type||""];s=h?.label||"已办",o=h?.type||"success"}return{label:s,type:o,hollow:!0}},ke=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${Ue(e)}`:t},Re=e=>e.tasks.length?e.tasks.map(ke).join(" / "):pe(e).join(" / "),X=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),me=w(()=>{const e=new Map,t=[];for(const s of G.value){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const i=s.tasks.some(m=>!m.finishTime)?"process":D(s).type,h=e.get(o);if(h!==void 0){const m=t[h];m.occurrence=(m.occurrence||1)+1,m.parentExecutionId=s.parentExecutionId,m.status=i;continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,parentExecutionId:s.parentExecutionId,status:i,occurrence:1})}for(const s of _.value?.futureTasks||[]){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const i=e.get(o);if(i!==void 0){t[i].status="wait";continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:Ce,status:U.value?"success":"wait"}),t}),ve=e=>{const t=F().getUserInfo.userCode;return!t||!e?!1:!!(e.assigneeId===t||e.candidate&&e.candidate.split(",").map(o=>o.trim()).filter(Boolean).includes(t))},ze=w(()=>ve(v.value)?!0:(_.value?.activeTasks||[]).some(e=>ve(e))),we=w(()=>u.readonly||!!v.value?.finishTime||!!v.value?.procEndTime||R.value&&!(_.value?.activeTasks||[]).length||!ze.value),Z=S(!1),ye=S(null),M=S(null);ot(()=>{const t=ye.value?.closest(".el-drawer, .el-dialog")?.querySelector(".dialog-hooks-header")??null;if(!t){M.value=null;return}const s=t.querySelector(".dialog-hooks-header-title"),o=document.createElement("span");o.style.display="contents",s?s.insertAdjacentElement("afterend",o):t.appendChild(o),M.value=o}),nt(()=>{const e=M.value;M.value=null,e?.remove()});const{snapshot:_e,dataSourceMeta:P,refresh:He}=wt(()=>String(u.taskInfo?.businessId||v.value?.businessId||""),{wfTaskId:()=>u.taskId,taskDefKey:()=>String(u.taskInfo?.taskDefKey||v.value?.taskDefKey||"")}),Qe=w(()=>we.value&&!!u.taskId&&(u.withdrawEnabled===!0||u.taskInfo?.withdrawEnabled===!0)),qe=async()=>{const e=u.taskInfo||v.value;if(!e?.taskId)return;const t={taskId:e.taskId,taskDefKey:e.taskDefKey,taskName:e.taskName,taskTitle:e.taskTitle,procInsId:e.procInsId,procDefId:e.procDefId,procDefKey:e.procDefKey,businessId:e.businessId};Z.value=!0;try{await j.processWithdrawalVerification(t);let s="";try{const o=await j.processWithdrawalPreview(t);s=String(o?.targetTaskName||"")}catch(o){console.warn("撤回预览失败",o)}await pt.confirm(`确认撤回「${e.taskTitle||e.taskName||"该申请单"}」?`+(s?`撤回后流程将回到「${s}」,需要重新提交。`:"撤回后需要重新提交。"),"撤回确认",{type:"warning",confirmButtonText:"确认撤回",cancelButtonText:"取消"}),await j.processWithdrawal(t),ft.success("撤回成功"),V("success",e),V("cancel")}catch(s){if(s==="cancel"||s==="close")return;be.messageError(s)}finally{Z.value=!1}},Ge=w(()=>W.value?.taskOption),Ye=w(()=>{const e=Ge.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),V("cancel")},workflowComplete:async(...t)=>{await e?.workflowComplete?.(...t)}}}),he=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,ge=async(e,t=!1)=>{const s=u.taskInfo&&u.taskInfo.procInsId==null&&u.taskInfo.processInstanceId!=null?{...u.taskInfo,procInsId:u.taskInfo.processInstanceId}:u.taskInfo;if(!(!u.taskId&&!s?.procInsId))try{L.value=!0,R.value=!1,v.value=e?{...v.value,...e}:t&&u.taskId?await j.getTaskInst(u.taskId):s||await j.getTaskInst(u.taskId),v.value?.procInsId&&(_.value=await j.getProcessTaskList(v.value.procInsId)),R.value=!0,await He(),await Se(),await ut(),await W.value?.resetQuery?.()}catch(o){be.messageError(o)}finally{L.value=!1}},Je=async e=>{V("success",e),await ge(e,!0)};return xe({resetQuery:async()=>{await ge()}}),(e,t)=>{const s=T("el-icons"),o=T("el-title"),i=T("el-empty"),h=T("el-tag-display"),m=T("el-flex"),g=T("el-timeline-item"),y=T("el-timeline"),A=T("el-button"),Xe=T("operation-auth"),Ze=at("loading");return n(),r("div",{ref_key:"shellEl",ref:ye,class:"workflow-todo-shell"},[l(`
|
|
2
2
|
内容区撑满剩余空间统一使用 dialog-content-fill(flex/height 由核心工具类提供),
|
|
3
3
|
滚动仅保留在本内容区,底部操作栏固定不随内容滚动。
|
|
4
|
-
`),
|
|
4
|
+
`),l(`
|
|
5
|
+
快照标记:Teleport 进「本抽屉」的标题栏(标题文字右侧),不修改 createDialogHooks;
|
|
6
|
+
headerEl 由壳子在挂载时从自身所在抽屉里解析,多弹窗并存也不会串。
|
|
7
|
+
`),M.value?(n(),b(rt,{key:0,to:M.value},[C(P)?(n(),r("span",gt,d(C(P).label),1)):l("v-if",!0)],8,["to"])):l("v-if",!0),lt((n(),r("div",It,[l(" 兜底:没有标题栏(非自定义 header 的弹窗)时,在内容区顶部显示 "),!M.value&&C(P)?(n(),r("div",Tt,d(C(P).label),1)):l("v-if",!0),l(`
|
|
5
8
|
数据来源标记(通用层统一判定,业务内容组件无需实现):
|
|
6
|
-
|
|
9
|
+
命中快照时展示「快照 · 时间」;没有快照(展示业务当前数据)时不展示,避免噪音,
|
|
7
10
|
放在内容区首行右对齐,紧贴标题栏,不随内容滚动位置变化而离开视线。
|
|
8
|
-
`),
|
|
11
|
+
`),l(`
|
|
9
12
|
当前等待:参考 flowpilot 设计的时长梯度状态条。
|
|
10
13
|
颜色与浅色底纹按 SysFlowTimeout 字典命中区间(正常 / 预警 / 超时)渲染,
|
|
11
14
|
流程已结束(含终止)时不展示。
|
|
12
|
-
`),p.value?(n(),r("div",{key:1,class:
|
|
15
|
+
`),p.value?(n(),r("div",{key:1,class:O(["wf-wait",p.value.level?`is-${p.value.level}`:""]),style:Ie({"--wf-wait-color":p.value.color,"--wf-wait-weak":p.value.weakColor})},[c("span",bt,[l(" 进行中:时钟 "),p.value.icon==="clock"?(n(),r("svg",Ct,[...t[3]||(t[3]=[c("circle",{cx:"12",cy:"12",r:"9"},null,-1),c("path",{d:"M12 8v4l3 3"},null,-1)])])):p.value.icon==="check"?(n(),r(k,{key:1},[l(" 已办结:对勾 "),t[4]||(t[4]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M20 6L9 17l-5-5"})],-1))],2112)):p.value.icon==="back"?(n(),r(k,{key:2},[l(" 驳回:回退箭头 "),t[5]||(t[5]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"})],-1))],2112)):(n(),r(k,{key:3},[l(" 已终止:叉 "),t[6]||(t[6]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.6","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M18 6L6 18"}),c("path",{d:"M6 6l12 12"})],-1))],2112))]),c("div",xt,[c("div",Et,d(p.value.title),1),c("div",Nt,d(p.value.sub),1),l(" 结束态:把该次审批的意见一并带出来,避免去审批记录里翻 "),p.value.opinion?(n(),r("div",Dt," 审核意见:"+d(p.value.opinion),1)):l("v-if",!0),l(" 该次审批的附件:与审批记录里的附件同样支持点击预览 "),p.value.filesTaskId&&N(p.value.filesTaskId).length?(n(),r("div",St,[(n(!0),r(k,null,B(N(p.value.filesTaskId),a=>(n(),r("span",{key:a.id,class:"wf-wait__file",onClick:f=>C(Q)(a.id)},[K(s,{"model-value":q(a.name)},null,8,["model-value"]),x(d(a.name),1)],8,Bt))),128))])):l("v-if",!0)]),p.value.ctText?(n(),r("div",{key:0,class:O(["wf-wait__ct",`is-${p.value.ctKind}`])},[c("b",null,d(p.value.ctText),1),p.value.ctLabel?(n(),r("span",Kt,d(p.value.ctLabel),1)):l("v-if",!0)],2)):l("v-if",!0)],6)):l("v-if",!0),K(o,{level:"1",title:"流程进度",style:{"border-bottom":"var(--border)"}}),c("div",null,[me.value.length?(n(),r("div",Lt,[c("div",Mt,[(n(!0),r(k,null,B(me.value,(a,f)=>(n(),r("div",{key:he(a),class:O(["wf-progress-step",{done:a.status==="success",current:a.status==="process",rejected:a.status==="warning",stopped:a.status==="error"||a.status==="danger"}])},[c("div",$t,[c("div",At,[l(" 同意/提交:对勾 "),a.status==="success"?(n(),r("svg",Ot,[...t[7]||(t[7]=[c("path",{d:"M20 6L9 17l-5-5"},null,-1)])])):a.status==="warning"?(n(),r(k,{key:1},[l(" 驳回:回退箭头 "),t[8]||(t[8]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"})],-1))],2112)):a.status==="danger"||a.status==="error"?(n(),r(k,{key:2},[l(" 终止:叉 "),t[9]||(t[9]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M18 6L6 18"}),c("path",{d:"M6 6l12 12"})],-1))],2112)):a.status==="info"?(n(),r(k,{key:3},[l(" 撤回:撤销箭头 "),t[10]||(t[10]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"})],-1))],2112)):(n(),r("span",jt,d(f+1),1))])]),c("div",Ft,[c("span",Vt,[c("span",Ut,d(a.taskName||"未命名节点"),1),a.occurrence&&a.occurrence>1?(n(),r("sup",Pt,d(a.occurrence),1)):l("v-if",!0)])])],2))),128))])])):(n(),b(i,{key:0,description:"暂无流程进度","image-size":48}))]),l(`
|
|
13
16
|
业务审核内容:完全由业务内容组件/插槽决定(含它自己的标题、分区、网格),
|
|
14
17
|
通用抽屉不再注入任何标题,业务页面给什么就展示什么。
|
|
15
|
-
`),
|
|
18
|
+
`),it(e.$slots,"content",{task:v.value,process:_.value,snapshot:C(_e)},()=>[E.contentComponent?(n(),b(ct(E.contentComponent),dt({key:0,ref_key:"contentRef",ref:W},E.contentProps,{snapshot:C(_e),loading:L.value,"onUpdate:loading":t[0]||(t[0]=a=>L.value=a)}),null,16,["snapshot","loading"])):l("v-if",!0)],!0),K(o,{level:"1",title:"审批记录",style:{"border-bottom":"var(--border)"}}),c("div",null,[G.value.length?(n(),b(y,{key:1,class:"workflow-todo-shell__timeline"},{default:$(()=>[(n(!0),r(k,null,B(Oe.value,a=>(n(),b(g,{key:ce(a),type:D(a).type,hollow:D(a).hollow,class:O({"is-active":D(a).type==="primary"}),style:Ie({"--el-timeline-node-color":We(D(a).type)})},{default:$(()=>[K(m,{align:"center",justify:"space-between",class:O(["workflow-todo-shell__record-title",`is-${D(a).type}`])},{default:$(()=>[c("span",null,[x(d(a.taskName||"未命名节点")+" ",1),(a.occurrence||0)>1?(n(),r("span",Wt,d(a.occurrence),1)):l("v-if",!0),de(a)?(n(),r("span",Rt,d(de(a)),1)):l("v-if",!0),l(" 我办理过的节点:标注「我的操作」,颜色跟随该节点的审批结论 "),ue(a)?(n(),r("span",{key:2,class:O(["workflow-todo-shell__record-mine",`is-${ue(a)}`])}," 我的操作 ",2)):l("v-if",!0)]),K(h,{type:D(a).type,size:"small"},{default:$(()=>[x(d(D(a).label),1)]),_:2},1032,["type"])]),_:2},1032,["class"]),Fe(a)?(n(),r("div",zt,[c("span",Ht,d(Re(a)),1),X(a)||a.tasks.some(f=>N(f.taskId).length)?(n(),r("div",Qt,[X(a)?(n(),r(k,{key:0},[x(d(X(a)),1)],64)):l("v-if",!0),(n(!0),r(k,null,B(a.tasks,f=>(n(),r(k,{key:f.taskId},[N(f.taskId).length?(n(),r("div",qt,[(n(!0),r(k,null,B(N(f.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:et=>C(Q)(I.id)},[K(s,{"model-value":q(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,Gt))),128))])):l("v-if",!0)],64))),128))])):l("v-if",!0)])):a.tasks.length?(n(!0),r(k,{key:1},B(a.tasks,f=>(n(),r("div",{key:f.taskId,class:"workflow-todo-shell__record-user"},[c("span",Yt,d(ke(f)),1),f.comment||N(f.taskId).length?(n(),r("div",Jt,[f.comment?(n(),r(k,{key:0},[x(d(f.comment),1)],64)):l("v-if",!0),N(f.taskId).length?(n(),r("div",Xt,[(n(!0),r(k,null,B(N(f.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:et=>C(Q)(I.id)},[K(s,{"model-value":q(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,Zt))),128))])):l("v-if",!0)])):l("v-if",!0)]))),128)):a.isEnd?l("v-if",!0):(n(),r(k,{key:2},[l(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(k,null,B(pe(a),f=>(n(),r("div",{key:f,class:"workflow-todo-shell__record-user"},[c("span",es,d(f),1)]))),128))],64))]),_:2},1032,["type","hollow","class","style"]))),128))]),_:1})):(n(),b(i,{key:0,description:"暂无审批记录","image-size":48}))])])),[[Ze,L.value]]),E.showFooter?(n(),r("div",ts,[l(`
|
|
16
19
|
已办节点的只读查看:节点开了撤回(后端按节点下发 withdrawEnabled)时,
|
|
17
20
|
在「取消」旁边给出撤回入口——校验、预览、二次确认、执行都在组件内完成,
|
|
18
21
|
成功后通知调用方刷新列表并关闭查看。
|
|
19
|
-
`),
|
|
22
|
+
`),Qe.value?(n(),b(Xe,{key:0,"oper-code":"system:workflow:processWithdrawal"},{default:$(()=>[K(A,{type:"warning",loading:Z.value,onClick:qe},{default:$(()=>[...t[11]||(t[11]=[x("撤回",-1)])]),_:1},8,["loading"])]),_:1})):l("v-if",!0),we.value?(n(),b(A,{key:1,onClick:t[1]||(t[1]=a=>V("cancel"))},{default:$(()=>[...t[12]||(t[12]=[x("取消",-1)])]),_:1})):(n(),b(_t,{key:2,"task-id":E.taskId,params:Ye.value,"render-dialog":E.renderDialog,"show-process-btn":!1,"but-loading":L.value,"onUpdate:butLoading":t[2]||(t[2]=a=>L.value=a),onSuccess:Je},null,8,["task-id","params","render-dialog","but-loading"]))])):l("v-if",!0)],512)}}}),ko=ht(ss,[["__scopeId","data-v-23cc8ab2"]]);export{ko as default};
|
|
@@ -13,13 +13,14 @@ export interface UseWorkflowSnapshotOptions {
|
|
|
13
13
|
wfTaskId?: string | (() => string | undefined);
|
|
14
14
|
/** 节点标识:任务ID取不到时按节点匹配兜底 */
|
|
15
15
|
taskDefKey?: string | (() => string | undefined);
|
|
16
|
-
/**
|
|
16
|
+
/** 是否历史查看(只读):保留给后续按来源做差异化展示用;当前标记只在命中快照时展示 */
|
|
17
17
|
readonly?: () => boolean;
|
|
18
18
|
}
|
|
19
19
|
export interface WorkflowSnapshotSource {
|
|
20
20
|
type: 'info' | 'warning';
|
|
21
21
|
label: string;
|
|
22
|
-
|
|
22
|
+
/** 说明文字(可选):当前不展示,保留字段供后续按需使用 */
|
|
23
|
+
hint?: string;
|
|
23
24
|
}
|
|
24
25
|
/** 快照内容可能是对象(引擎任务局部变量)或 JSON 文本(业务接口返回),统一解析为对象 */
|
|
25
26
|
export declare const parseWorkflowSnapshot: (value: any) => Record<string, any> | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ref as i}from"vue";import m from"../api/workflow/workflowInstApi.js";import"../utils/request.js";import"../utils/AxiosConfig.js";import"axios";import"../utils/uuid.js";import"uuid";import"../utils/encrypt.js";import"jsencrypt";import"../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../utils/behaviorContext.js";import"../utils/dateTime.js";import"element-plus";import"../utils/frontendBus.js";import"../utils/globalLoading.js";import"../utils/workflowTaskContext.js";import"../config/GlobalLoadingConfig.js";const y=t=>{if(!t)return null;if(typeof t=="string")try{return JSON.parse(t)}catch{return null}return typeof t=="object"?t:null};function
|
|
1
|
+
import{ref as i}from"vue";import m from"../api/workflow/workflowInstApi.js";import"../utils/request.js";import"../utils/AxiosConfig.js";import"axios";import"../utils/uuid.js";import"uuid";import"../utils/encrypt.js";import"jsencrypt";import"../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../utils/behaviorContext.js";import"../utils/dateTime.js";import"element-plus";import"../utils/frontendBus.js";import"../utils/globalLoading.js";import"../utils/workflowTaskContext.js";import"../config/GlobalLoadingConfig.js";const y=t=>{if(!t)return null;if(typeof t=="string")try{return JSON.parse(t)}catch{return null}return typeof t=="object"?t:null};function $(t,p={}){const o=i(null),a=i(!1),f=i(null),l=i(!1),h=()=>typeof t=="function"?t():typeof t=="string"?t:t.value,c=r=>String((typeof r=="function"?r():r)||"");return{snapshot:o,isSnapshot:a,dataSourceMeta:f,loading:l,refresh:async()=>{const r=String(h()||""),e=c(p.wfTaskId),k=c(p.taskDefKey);l.value=!0;try{if(o.value=null,a.value=!1,r||e)try{const n=await m.snapshot(r,{wfTaskId:e,taskDefKey:k}),s=y(n?.snapshot);s&&(o.value=s)}catch(n){console.warn("查询审核当时快照失败",n)}if(!o.value&&e)try{const n=await m.getTaskInst(e),s=y(n?.taskLocalVars?.bizSnapshot);s&&(o.value=s)}catch{}a.value=!!o.value;const u=String(o.value?.snapshotTime||"");f.value=a.value?{type:"info",label:u?`快照 · ${u}`:"快照"}:null}finally{l.value=!1}}}}export{$ as default,y as parseWorkflowSnapshot};
|
|
@@ -10,3 +10,11 @@ import { type IWfTaskVo } from '../interface/workflow/IWfTaskVo';
|
|
|
10
10
|
* 刷新浏览器后由目标子应用 App 恢复;组件弹窗写 workflow_todo_pending 兜底。
|
|
11
11
|
*/
|
|
12
12
|
export declare function showTodoDialog(taskVo: Ref<IWfTaskVo>, params?: any, comptShow?: Ref<boolean>): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* 流程查看(只读):与「待办处理 / 审批查看」共用同一套抽屉入口。
|
|
15
|
+
*
|
|
16
|
+
* 节点配了业务办理界面(nodeTag 形如 `YZFC:/src/views/xx.vue`)时,由目标子应用按 nodeTag
|
|
17
|
+
* 只读渲染同一个业务内容组件(同时带该节点“当时那一版”快照);菜单型节点打开对应菜单页面。
|
|
18
|
+
* 业务页面只需把流程信息({@link IWfTaskVo})交给它,不必自己拼参数、也不必关心跨应用事件。
|
|
19
|
+
*/
|
|
20
|
+
export declare function showProcessView(taskVo: Ref<IWfTaskVo> | IWfTaskVo): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{nextTick as
|
|
1
|
+
import{isRef as I,ref as y,nextTick as T}from"vue";import{frontendBus as c}from"../utils/frontendBus.js";import{ElMessage as a}from"element-plus";import{userInfoStore as g}from"../stores/userInfoStore.js";import O from"./usePermissionHooks.js";import x from"./useOpenNewMenu.js";import{handleTree as U}from"../utils/tree.js";import b from"../utils/request.js";import h from"../utils/commonUtils.js";import{setWorkflowTaskContext as w}from"../utils/workflowTaskContext.js";import"pinia";import"../utils/userSessionStorage.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"vue-router";import"../stores/permissionStore.js";import"../utils/behaviorTrack.js";import"axios";import"../utils/uuid.js";import"uuid";import"../utils/behaviorContext.js";import"../utils/encrypt.js";import"jsencrypt";import"../utils/dateTime.js";import"../utils/operationAuth.js";import"../utils/routeMetaParams.js";import"../utils/FrameworkUtils.js";import"xlsx-js-style";import"../utils/AxiosConfig.js";import"../utils/globalLoading.js";import"../config/GlobalLoadingConfig.js";import"./useDeleteConfirmHooks.js";import"./useBehaviorAction.js";async function S(e,r,i){const{openMenu:f}=O();if(!e.value||!e.value.nodeTag){a.error("未设置待办处理界面!");return}const n=e.value.nodeTag,m=n.indexOf(":")>-1?n.split(":")[1]||"":n,l=n.indexOf(":")>-1?n.split(":")[0]:"",v=l==="system"||n.indexOf(":")===-1,t=Object.entries(e.value).map(([o,p])=>({code:o,value:p}));if(r?.value&&Array.isArray(r.value)&&r.value.length>0){for(const o of r.value)if(o&&typeof o=="object")for(const p in o)t.push({code:p,value:o[p]||""})}if(w(t),n.indexOf("/")>-1){v?r&&i?(i.value=!1,r.value.params=null,await T(async()=>{i.value=!0,r.value.params=r})):a.error("未设置待办处理界面!"):(sessionStorage.setItem("workflow_todo_pending",JSON.stringify({time:Date.now(),params:t})),c.emit(l.toUpperCase()+"WorkflowTodoHandleBus",t));return}let s=g().getUserInfo.menuList.find(o=>o.code===m);if(s||(await B(),s=g().getUserInfo.menuList.find(o=>o.code===m)),!s){a.error("未找到该菜单");return}if(v){sessionStorage.setItem("workflow_todo_"+m,JSON.stringify(t)),w(t,[s.id,s.code].filter(Boolean).map(String)),await f(s,t),c.emit(m+"_message",t);return}const u=String(e.value.businessId||e.value.applyId||e.value.procInsId||e.value.taskId||""),d=m+h.jsonToUrlQuery({businessId:u});sessionStorage.setItem("workflow_todo_"+d,JSON.stringify(t)),t.push({code:"menuCode",value:d}),w(t,[s.id,s.code,d,s.code+u].filter(Boolean).map(String));try{const{handleView:o}=x(m,void 0);await o(u,e.value.taskName,{businessId:u})}catch(o){console.error("[workflowTodo] 打开待办处理页面失败",o),a.error("打开待办处理页面失败:"+(o?.message||o));return}setTimeout(()=>{c.emit(l.toUpperCase()+"WorkflowTodoHandleBus",t)},1e3)}async function me(e){const r=(I(e)?e.value:e)||{},i=Object.fromEntries(Object.entries(r).filter(([,f])=>f!=null));if(!i.nodeTag){a.error("未设置流程查看界面!");return}await S(y(i),y([{code:"source",value:"view"}]))}async function B(){try{const e=g(),r=await b.get("/api/system/login/getUserPermission/web"),i=e.getUserInfo;e.setUserInfo({...r,menuTreeList:U(r.menuList,"id","parentId"),userBaseInfo:i.userBaseInfo,passwordExpired:i.passwordExpired,isComplete:i.isComplete})}catch(e){console.warn("刷新用户权限失败",e)}}export{me as showProcessView,S as showTodoDialog};
|