adtec-hnyzfc-core-package 1.6.0 → 1.6.2

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.
@@ -0,0 +1 @@
1
+ import{defineComponent as q,ref as k,useModel as z,computed as w,resolveComponent as d,resolveDirective as H,openBlock as p,createBlock as v,withCtx as c,withDirectives as L,createVNode as h,createElementVNode as $,toDisplayString as x,createElementBlock as G,Fragment as J,renderList as K,createCommentVNode as N,mergeModels as U}from"vue";import A from"../src/api/workflow/workflowInstApi.js";import{ElMessage as i}from"element-plus";import{userInfoStore as R}from"../src/stores/userInfoStore.js";import X from"../src/components/business/comp.userForm.vue.js";import Y from"../src/api/SysUserApi.js";import C from"../src/utils/FrameworkUtils.js";const re=q({__name:"AddOrMinusMultiDialog",props:U({taskId:{},dialogType:{},renderDialog:{type:Function},onWorkflowSuccess:{type:Function}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:U(["success"],["update:loading"]),setup(M,{expose:T,emit:B}){const s=M,S=B,I=R(),a=k({assignee:[]}),f=z(M,"loading"),u=w(()=>s.dialogType??""),r=k([]),_=k([]),V=w(()=>_.value.map(e=>e.userName||e.loginName||"")),E=w(()=>{const e=I.getUserInfo,n=e?.topDeptId||e?.mdmDeptId;return n?[n]:[]}),b=s.renderDialog,F=(e,n,l,o,t,m)=>{if(!b){console.warn("[AddOrMinusMultiDialog] 未注入 renderDialog,无法打开选人弹窗(请通过 props 传入 useDialogHooks 的 render)");return}b(e,n,l,o,t,m)},D=()=>{F(X,{multiple:!0,selectedUserCodes:[...r.value,..._.value.map(e=>e.loginName).filter(Boolean)],defalutQueryParam:{deptIds:E.value},onSuccess:async e=>{const n=Array.isArray(e)?e:e?[e]:[];if(!n.length){i.warning("请选择审批人员");return}const l=[];for(const o of n){const t=o?.code;if(!t||a.value.candidate?.some(y=>y.loginName===t))continue;try{await Y.addNBUserInfo([t])}catch{l.push(o.name||t);continue}const m={id:o.id,loginName:t,userName:o.name,deptName:o.deptName};a.value.candidate||(a.value.candidate=[]),a.value.candidate.push(m),a.value.assignee?.push(t),_.value.push(m)}l.length&&i.error(`以下人员不在用户表中且补建失败:${l.join("、")}`)}},{title:"选择新增审批人",width:"900px",top:"8vh",style:{height:"72vh"}},"dialog")},O=async()=>{if(!(!s.taskId||!s.dialogType))try{if(a.value={assignee:[]},_.value=[],f.value=!0,a.value={...await A.getTaskCandidate(s.taskId),assignee:[]},r.value=a.value.candidate?.map(e=>e.loginName)||[],s.dialogType==="minusMulti"&&r.value.length<=1){i.warning("至少需保留一名审核人,当前仅剩一名审核人,无法减签");return}a.value.assignee=[...r.value]}catch(e){C.messageError(e)}finally{f.value=!1}},P=e=>u.value==="addMulti"?r.value.includes(e):u.value==="minusMulti"?I.getUserInfo.userCode===e:!1;return T({resetQuery:O,confirm:async()=>{if(a.value.candidate?.length==0){i.warning("请指定执行人!");return}if(u.value==="addMulti"){if(a.value.assignee.length==0){i.warning("请指定执行人!");return}if(a.value.assignee.length<=r.value.length){i.warning("加签必须选择非原审批人!");return}}else if(u.value==="minusMulti"){if(a.value.assignee.length<1){i.warning("至少需保留一名审核人");return}if(a.value.assignee.length>=r.value.length){i.warning("减签必须取消选中原审批人!");return}}try{f.value=!0,a.value.type=u.value,await A.addOrMinusAssignee(a.value),await s.onWorkflowSuccess?.({actionType:u.value,previousAssignees:[...r.value]}),i.success("操作成功"),S("success")}catch(e){throw C.messageError(e),e}finally{f.value=!1}}}),(e,n)=>{const l=d("el-form-item"),o=d("el-checkbox"),t=d("el-checkbox-group"),m=d("el-icons"),y=d("el-input"),j=d("el-form"),Q=d("el-flex"),W=H("loading");return p(),v(Q,{vertical:!0,height:"100%"},{default:c(()=>[L((p(),v(j,{labelPosition:"top",size:"default",style:{width:"100%"}},{default:c(()=>[h(l,{label:"任务名"},{default:c(()=>[$("span",null,x(a.value?.taskName)+"("+x(a.value?.procName)+")",1)]),_:1}),h(l,{label:"审批人",required:!0},{default:c(()=>[a.value?.candidate&&a.value?.candidate.length>0?(p(),v(t,{key:0,modelValue:a.value.assignee,"onUpdate:modelValue":n[0]||(n[0]=g=>a.value.assignee=g)},{default:c(()=>[(p(!0),G(J,null,K(a.value?.candidate,g=>(p(),v(o,{disabled:P(g.loginName),key:g.loginName,label:g.userName,value:g.loginName},null,8,["disabled","label","value"]))),128))]),_:1},8,["modelValue"])):N("v-if",!0)]),_:1}),N(" 加签选人:与转办/产品经理同一套主数据选人,默认本部门 "),u.value==="addMulti"?(p(),v(l,{key:0,label:"新增审批人"},{default:c(()=>[h(y,{"model-value":V.value.join("、"),readonly:"",placeholder:"请选择新增审批人",onClick:D},{append:c(()=>[h(m,{"model-value":"adtec-adduser",tip:"选择新增审批人",style:{cursor:"pointer"},onClick:D})]),_:1},8,["model-value"])]),_:1})):N("v-if",!0)]),_:1})),[[W,f.value]])]),_:1})}}});export{re as _};
@@ -1 +1 @@
1
- import{defineComponent as Q,ref as g,useModel as X,computed as Y,onMounted as Z,watch as _,resolveComponent as F,openBlock as s,createElementBlock as $,createVNode as ee,withCtx as u,renderSlot as P,createBlock as m,createTextVNode as f,toDisplayString as v,createCommentVNode as d,unref as te,Fragment as ae,mergeModels as q}from"vue";import B from"../../api/workflow/workflowInstApi.js";import oe from"./components/SelectAssigneeDialog.vue.js";import{_ as re}from"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-SYw6MXOl.js";import ne from"./components/CheckDialog.vue.js";import L from"../../utils/FrameworkUtils.js";import{userInfoStore as y}from"../../stores/userInfoStore.js";import{frontendBus as h}from"../../utils/frontendBus.js";import{showTodoDialog as ie}from"../../hooks/workflowTodo.js";import{_ as le}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 se=Q({__name:"TaskOperation",props:q({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:q(["success"],["update:butLoading"]),setup(o,{expose:A,emit:E}){const N=y(),T=g(null),n=o,i=X(o,"butLoading"),b=E,e=g({taskId:"",comment:""}),D=n.renderDialog,k=(t,a,r,w,p,J)=>{if(!D){console.warn("[TaskOperation] 未注入 renderDialog,无法打开操作弹窗(请通过 props 传入 useDialogHooks 的 render)");return}D(t,a,r,w,p,J)},R=()=>{typeof n.onProcessDetail=="function"&&n.onProcessDetail(e.value)},I=Y(()=>e.value?.operations==="assignee"),O=g(""),U=g([{source:"edit"}]),K=async()=>{await ie(g(e.value),U)},c=async t=>{if(t&&(O.value=t),!e.value)return;let a=!1;if(t==="complete"&&n.params?.beforeCompleteFunction)try{const r=await n.params?.beforeCompleteFunction({taskId:e.value.taskId,userId:y().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")k(re,{taskId:e.value.taskId,dialogType:t,renderDialog:k,onSuccess: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 j();return}k(ne,{taskVo:e.value,dialogType:t,taskOperate:n?.params,commentReadonly:a,renderDialog:k,onOpenAssignee:M,onSuccess:C},{title:V(t),size:"480px",closeOnClickModal:!1},"dialog")}},V=t=>{switch(t){case"complete":return"流程审批";case"refuse":return"终止审批";case"back":return"驳回审批";case"transfer":return"转办审批";default:return"流程审批"}},j=async()=>{if(!(!e.value||!y().getUserInfo.userCode))try{i.value=!0;const t={taskId:e.value.taskId,userId:y().getUserInfo.userCode,comment:e.value.comment??"",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey,variables:e.value.variables};if(n.params?.completeFunction){const a=await n.params?.completeFunction(t);a&&a?.taskId?e.value=a:e.value=await B.getTaskInst(e.value.taskId)}else e.value=await B.taskComplete(t);C(e.value)}catch(t){L.messageError(t)}finally{i.value=!1}},z=()=>{n.params?.workflowComplete(),b("success")},M=t=>{k(oe,{taskId:t,onSuccess:z},{title:"指定执行人",size:"450px"},"dialog")},C=t=>{t&&(e.value=t),n.params?.workflowComplete(e.value,O.value),h.emit("todoRefresh"),h.emit("homePageRefresh"),b("success")},S=(t,a)=>t?t.classList?.contains(a)?t:S(t.parentElement,a):null,W=()=>{const t=S(T.value,"todo-dialog-class");return t?console.log("找到满足条件的元素:",t):console.log("未找到满足条件的元素"),t};Z(()=>{W(),x()});const l=g(!1),H=async()=>{l.value=!0},G=()=>{l.value=!1},x=async()=>{if(n.taskInfo)e.value=n.taskInfo,e.value.finishTime&&console.log("该待办已完成!");else if(n.taskId)try{H(),e.value=await B.getTaskInst(n.taskId),e.value.finishTime&&console.log("该待办已完成!")}catch(t){L.messageError(t)}finally{G()}};return A({reload:()=>{x()}}),_(()=>n.taskId,x),(t,a)=>{const r=F("el-button"),w=F("el-flex");return s(),$("div",{ref_key:"taskFlexRef",ref:T,class:"task-operation"},[ee(w,{align:"center",justify:"flex-end"},{default:u(()=>[P(t.$slots,"left",{},void 0,!0),o.params?.cancelBtnText!==""?(s(),m(r,{key:0,loading:i.value||l.value,onClick:o.params?.cancelFunction},{default:u(()=>[f(v(o.params?.cancelBtnText??"取消"),1)]),_:1},8,["loading","onClick"])):d("v-if",!0),o.showProcessBtn&&e.value?.procInsId?(s(),m(r,{key:1,type:"info",loading:i.value||l.value,onClick:R},{default:u(()=>[...a[7]||(a[7]=[f(" 流程信息 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),!I.value&&e.value?.taskId&&o.showCurWorkBth&&!o.showOperationsBtn?(s(),m(r,{key:2,loading:i.value||l.value,type:"warning",disabled:e.value?.taskId&&(!e.value?.operations||te(N).getUserInfo.userCode!==e.value?.assigneeId),onClick:K},{default:u(()=>[f(v(e.value.taskName),1)]),_:1},8,["loading","disabled"])):d("v-if",!0),I.value?(s(),m(r,{key:3,type:"primary",loading:i.value||l.value,onClick:a[0]||(a[0]=p=>c("assignee"))},{default:u(()=>[...a[8]||(a[8]=[f("指定执行人 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),!I.value&&e.value?.taskId&&e.value?.operations&&o.showOperationsBtn?(s(),$(ae,{key:4},[o.params?.saveBtnText?(s(),m(r,{key:0,loading:i.value||l.value,type:"primary",onClick:o.params?.saveFunction},{default:u(()=>[f(v(o.params?.saveBtnText),1)]),_:1},8,["loading","onClick"])):d("v-if",!0),e.value?.operations.indexOf("addMulti")>-1?(s(),m(r,{key:1,type:"warning",loading:i.value||l.value,onClick:a[1]||(a[1]=p=>c("addMulti"))},{default:u(()=>[...a[9]||(a[9]=[f("加签 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("minusMulti")>-1?(s(),m(r,{key:2,type:"danger",loading:i.value||l.value,onClick:a[2]||(a[2]=p=>c("minusMulti"))},{default:u(()=>[...a[10]||(a[10]=[f("减签 ",-1)])]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("refuse")>-1&&o.params?.refuseBtnText!==""?(s(),m(r,{key:3,loading:i.value||l.value,type:"danger",onClick:a[3]||(a[3]=p=>c("refuse"))},{default:u(()=>[f(v(o.params?.refuseBtnText??"终止"),1)]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("transfer")>-1&&o.params?.transferBtnText!==""?(s(),m(r,{key:4,loading:i.value||l.value,type:"warning",onClick:a[4]||(a[4]=p=>c("transfer"))},{default:u(()=>[f(v(o.params?.transferBtnText??"转办"),1)]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("back")>-1&&o.params?.backBtnText!==""?(s(),m(r,{key:5,loading:i.value||l.value,type:"danger",onClick:a[5]||(a[5]=p=>c("back"))},{default:u(()=>[f(v(o.params?.backBtnText??"驳回"),1)]),_:1},8,["loading"])):d("v-if",!0),e.value?.operations.indexOf("complete")>-1&&o.params?.completeBtnText!==""?(s(),m(r,{key:6,loading:i.value||l.value,type:"primary",onClick:a[6]||(a[6]=p=>c("complete"))},{default:u(()=>[f(v(o.params?.completeBtnText??"同意"),1)]),_:1},8,["loading"])):d("v-if",!0)],64)):d("v-if",!0),P(t.$slots,"right",{},void 0,!0)]),_:3})],512)}}}),mt=le(se,[["__scopeId","data-v-dac4939f"]]);export{mt as default};
1
+ import{defineComponent as Y,ref as v,useModel as Z,computed as _,onMounted as ee,watch as te,resolveComponent as h,openBlock as l,createElementBlock as P,createVNode as ae,withCtx as u,renderSlot as W,createBlock as f,createTextVNode as m,toDisplayString as k,createCommentVNode as d,unref as oe,Fragment as re,mergeModels as q}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 V from"../../utils/FrameworkUtils.js";import{userInfoStore as T}from"../../stores/userInfoStore.js";import{frontendBus as L}from"../../utils/frontendBus.js";import{showTodoDialog as ue}from"../../hooks/workflowTodo.js";import{_ as de}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 fe=Y({__name:"TaskOperation",props:q({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:q(["success"],["update:butLoading"]),setup(o,{expose:E,emit:A}){const N=T(),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=()=>{typeof n.onProcessDetail=="function"&&n.onProcessDetail(e.value)},w=_(()=>e.value?.operations==="assignee"),S=v(""),y=v(),K=v([{source:"edit"}]),j=async()=>{await ue(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:T().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||!T().getUserInfo.userCode)return;y.value={...e.value};const t={taskId:e.value.taskId,userId:T().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){V.messageError(a);return}finally{i.value=!1}try{await F({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")},F=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=>F({...t,originTask:t.originTask??y.value},{refresh:!1}),$=(t,a)=>t?t.classList?.contains(a)?t:$(t.parentElement,a):null,G=()=>{const t=$(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){V.messageError(t)}finally{Q()}};return E({reload:()=>{B()}}),te(()=>n.taskId,B),(t,a)=>{const r=h("el-button"),x=h("el-flex");return l(),P("div",{ref_key:"taskFlexRef",ref:b,class:"task-operation"},[ae(x,{align:"center",justify:"flex-end"},{default:u(()=>[W(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),!w.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),w.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),!w.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),W(t.$slots,"right",{},void 0,!0)]),_:3})],512)}}}),vt=de(fe,[["__scopeId","data-v-50169462"]]);export{vt as default};
@@ -1,7 +1,7 @@
1
- import{defineComponent as Ie,useModel as Te,ref as E,computed as y,resolveComponent as h,resolveDirective as xe,openBlock as n,createElementBlock as r,createCommentVNode as d,withDirectives as Ce,createVNode as D,createElementVNode as i,createBlock as x,Fragment as p,renderList as C,normalizeClass as J,toDisplayString as u,renderSlot as be,resolveDynamicComponent as Ne,mergeProps as De,withCtx as K,normalizeStyle as Ee,createTextVNode as b,unref as X,mergeModels as Z,nextTick as Ke}from"vue";import V from"../../api/workflow/workflowInstApi.js";import Ae from"../../api/DocumentApi.js";import Be from"../../hooks/useFileView.js";import Le from"../../utils/FrameworkUtils.js";import{formatDateTime as Me}from"../../utils/dateTime.js";import{userInfoStore as Se}from"../../stores/userInfoStore.js";import Pe from"./TaskOperation.vue.js";import{_ as $e}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"element-plus";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"xlsx-js-style";import"pinia";import"../../utils/userSessionStorage.js";import"./components/SelectAssigneeDialog.vue.js";import"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-SYw6MXOl.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/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 Ve={class:"workflow-todo-shell"},je={class:"workflow-todo-shell__body dialog-content-fill"},Fe={key:1,class:"wf-progress-scroll"},Oe={class:"wf-progress-steps"},Ue={class:"wf-progress-step__icon-wrap"},ze={class:"wf-progress-step__icon"},Re={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},Qe={key:4},Ge={class:"wf-progress-step__name"},We={class:"wf-progress-step__name-text"},Ye={class:"wf-progress-step__name-label"},qe={key:0,class:"wf-progress-step__occurrence"},He={key:0,class:"workflow-todo-shell__record-occurrence"},Je={key:1,class:"workflow-todo-shell__record-type"},Xe={key:0,class:"workflow-todo-shell__record-user"},Ze={class:"workflow-todo-shell__record-person__name"},et={key:0,class:"workflow-todo-shell__comment"},tt={key:0,class:"workflow-todo-shell__record-files"},st=["onClick"],ot={class:"workflow-todo-shell__record-person__name"},nt={key:0,class:"workflow-todo-shell__comment"},at={key:1,class:"workflow-todo-shell__record-files"},rt=["onClick"],lt={class:"workflow-todo-shell__record-person__name"},it={key:0,class:"workflow-todo-shell__footer"},ee="__end__",ct=Ie({__name:"WorkflowTodoShell",props:Z({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}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:Z(["cancel","success"],["update:loading"]),setup(w,{expose:te,emit:se}){const f=w,A=se,g=Te(w,"loading"),v=E(),m=E(),B=E(),L=E(!1),oe=e=>[...e].sort((t,o)=>(t.createTime||"").localeCompare(o.createTime||"")),j=y(()=>oe([...m.value?.hisTasks||[],...m.value?.activeTasks||[]])),M=E({}),F=Be().fileView,O=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?M.value[e]||[]:[],ne=async()=>{var t;const e=Array.from(new Set(j.value.map(o=>o.taskId).filter(o=>!!o)));if(e.length)try{const o=await Ae.getUpLoadFilesByBussinessIds(e),a={};for(const l of o)l.businessId&&(a[t=l.businessId]||(a[t]=[])).push(l);M.value=a}catch{M.value={}}},S=y(()=>{const e=new Map;for(const t of j.value){const o=q(t),a=e.get(o);a?a.tasks.push(t):e.set(o,{taskName:t.taskName,taskDefKey:t.taskDefKey,parentExecutionId:t.parentExecutionId,tasks:[t],approvalType:t.approvalType})}return Array.from(e.values())}),U=y(()=>v.value?.procEndTime?!0:!!(m.value&&!(m.value.activeTasks||[]).length&&(m.value.hisTasks||[]).length)),ae=y(()=>{const e=[...S.value],t=new Set(e.map(a=>z(a)));for(const a of m.value?.futureTasks||[]){const l=`${a.taskDefKey||a.taskName}-`;t.has(l)||e.push({taskName:a.taskName,taskDefKey:a.taskDefKey,tasks:[],assigneeNames:a.assigneeNames,approvalType:a.approvalType})}e.push({taskName:"结束",taskDefKey:ee,tasks:[],isEnd:!0});const o=new Map;for(const a of e){const l=a.taskDefKey||a.taskName||"";l&&(a.occurrence=(o.get(l)||0)+1,o.set(l,a.occurrence))}return e}),z=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,re={single:"或签",joint:"会签",all:"会签"},R=e=>re[e.approvalType||e.tasks[0]?.approvalType||""]||"",le=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Q=e=>{const t=(e.assigneeNames||"").split(",").map(o=>o.trim()).filter(Boolean);return t.length?t:["待处理"]},ie={1:{label:"同意",type:"success"},2:{label:"驳回",type:"warning"},3:{label:"终止",type:"danger"},4:{label:"委派",type:"warning"},5:{label:"转办",type:"warning"},6:{label:"终止",type:"danger"},7:{label:"撤回",type:"info"}},ce=e=>Me(e.finishTime||e.createTime),de={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},pe=e=>de[e]||"",I=e=>{if(e.isEnd)return U.value?{label:"已结束",type:"success",hollow:!1}:{label:"等待",type:"info",hollow:!1};if(!e.tasks.length)return{label:"等待",type:"info",hollow:!1};const t=e.tasks;if(t.some(l=>!l.finishTime))return{label:"进行中",type:"primary",hollow:!1};let o="已办",a="success";if(t.some(l=>l.taskLocalVars?.firstTask))o="提交";else{const l=[...t].sort((k,$)=>($.finishTime||"").localeCompare(k.finishTime||""))[0]?.commentList?.[0],T=ie[l?.type||""];o=T?.label||"已办",a=T?.type||"success"}return{label:o,type:a,hollow:!1}},G=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${ce(e)}`:t},ue=e=>e.tasks.length?e.tasks.map(G).join(" / "):Q(e).join(" / "),P=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),W=y(()=>{const e=new Map,t=[];for(const o of S.value){const a=o.taskDefKey||o.taskName||"";if(!a)continue;const l=o.tasks.some(k=>!k.finishTime)?"process":I(o).type,T=e.get(a);if(T!==void 0){const k=t[T];k.occurrence=(k.occurrence||1)+1,k.parentExecutionId=o.parentExecutionId,k.status=l;continue}e.set(a,t.length),t.push({taskName:o.taskName,taskDefKey:o.taskDefKey,parentExecutionId:o.parentExecutionId,status:l,occurrence:1})}for(const o of m.value?.futureTasks||[]){const a=o.taskDefKey||o.taskName||"";if(!a)continue;const l=e.get(a);if(l!==void 0){t[l].status="wait";continue}e.set(a,t.length),t.push({taskName:o.taskName,taskDefKey:o.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:ee,status:U.value?"success":"wait"}),t}),Y=e=>{const t=Se().getUserInfo.userCode;return!t||!e?!1:!!(e.assigneeId===t||e.candidate&&e.candidate.split(",").map(a=>a.trim()).filter(Boolean).includes(t))},fe=y(()=>Y(v.value)?!0:(m.value?.activeTasks||[]).some(e=>Y(e))),me=y(()=>f.readonly||!!v.value?.finishTime||!!v.value?.procEndTime||L.value&&!(m.value?.activeTasks||[]).length||!fe.value),ke=y(()=>B.value?.taskOption),ve=y(()=>{const e=ke.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),A("cancel")},workflowComplete:(...t)=>{e?.workflowComplete?.(...t)}}}),q=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,H=async(e,t=!1)=>{const o=f.taskInfo&&f.taskInfo.procInsId==null&&f.taskInfo.processInstanceId!=null?{...f.taskInfo,procInsId:f.taskInfo.processInstanceId}:f.taskInfo;if(!(!f.taskId&&!o?.procInsId))try{g.value=!0,L.value=!1,v.value=e?{...v.value,...e}:t&&f.taskId?await V.getTaskInst(f.taskId):o||await V.getTaskInst(f.taskId),v.value?.procInsId&&(m.value=await V.getProcessTaskList(v.value.procInsId)),L.value=!0,await ne(),await Ke(),await B.value?.resetQuery?.()}catch(a){Le.messageError(a)}finally{g.value=!1}},_e=async e=>{A("success",e),await H(e,!0)};return te({resetQuery:async()=>{await H()}}),(e,t)=>{const o=h("el-title"),a=h("el-empty"),l=h("el-tag-display"),T=h("el-flex"),k=h("el-icons"),$=h("el-timeline-item"),ye=h("el-timeline"),we=h("el-button"),he=xe("loading");return n(),r("div",Ve,[d(`
1
+ import{defineComponent as Ie,useModel as Te,ref as E,computed as _,resolveComponent as h,resolveDirective as xe,openBlock as n,createElementBlock as r,createCommentVNode as d,withDirectives as be,createVNode as D,createElementVNode as i,createBlock as x,Fragment as p,renderList as b,normalizeClass as J,toDisplayString as u,renderSlot as Ce,resolveDynamicComponent as Ne,mergeProps as De,withCtx as K,normalizeStyle as Ee,createTextVNode as C,unref as X,mergeModels as Z,nextTick as Ke}from"vue";import V from"../../api/workflow/workflowInstApi.js";import Ae from"../../api/DocumentApi.js";import Be from"../../hooks/useFileView.js";import Le from"../../utils/FrameworkUtils.js";import{formatDateTime as Me}from"../../utils/dateTime.js";import{userInfoStore as Se}from"../../stores/userInfoStore.js";import Pe from"./TaskOperation.vue.js";import{_ as $e}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"element-plus";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"xlsx-js-style";import"pinia";import"../../utils/userSessionStorage.js";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 Ve={class:"workflow-todo-shell"},je={class:"workflow-todo-shell__body dialog-content-fill"},Fe={key:1,class:"wf-progress-scroll"},Oe={class:"wf-progress-steps"},Ue={class:"wf-progress-step__icon-wrap"},ze={class:"wf-progress-step__icon"},Re={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},Qe={key:4},Ge={class:"wf-progress-step__name"},We={class:"wf-progress-step__name-text"},Ye={class:"wf-progress-step__name-label"},qe={key:0,class:"wf-progress-step__occurrence"},He={key:0,class:"workflow-todo-shell__record-occurrence"},Je={key:1,class:"workflow-todo-shell__record-type"},Xe={key:0,class:"workflow-todo-shell__record-user"},Ze={class:"workflow-todo-shell__record-person__name"},et={key:0,class:"workflow-todo-shell__comment"},tt={key:0,class:"workflow-todo-shell__record-files"},st=["onClick"],ot={class:"workflow-todo-shell__record-person__name"},nt={key:0,class:"workflow-todo-shell__comment"},at={key:1,class:"workflow-todo-shell__record-files"},rt=["onClick"],lt={class:"workflow-todo-shell__record-person__name"},it={key:0,class:"workflow-todo-shell__footer"},ee="__end__",ct=Ie({__name:"WorkflowTodoShell",props:Z({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}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:Z(["cancel","success"],["update:loading"]),setup(w,{expose:te,emit:se}){const f=w,A=se,g=Te(w,"loading"),v=E(),m=E(),B=E(),L=E(!1),oe=e=>[...e].sort((t,o)=>(t.createTime||"").localeCompare(o.createTime||"")),j=_(()=>oe([...m.value?.hisTasks||[],...m.value?.activeTasks||[]])),M=E({}),F=Be().fileView,O=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?M.value[e]||[]:[],ne=async()=>{var t;const e=Array.from(new Set(j.value.map(o=>o.taskId).filter(o=>!!o)));if(e.length)try{const o=await Ae.getUpLoadFilesByBussinessIds(e),a={};for(const l of o)l.businessId&&(a[t=l.businessId]||(a[t]=[])).push(l);M.value=a}catch{M.value={}}},S=_(()=>{const e=new Map;for(const t of j.value){const o=q(t),a=e.get(o);a?a.tasks.push(t):e.set(o,{taskName:t.taskName,taskDefKey:t.taskDefKey,parentExecutionId:t.parentExecutionId,tasks:[t],approvalType:t.approvalType})}return Array.from(e.values())}),U=_(()=>v.value?.procEndTime?!0:!!(m.value&&!(m.value.activeTasks||[]).length&&(m.value.hisTasks||[]).length)),ae=_(()=>{const e=[...S.value],t=new Set(e.map(a=>z(a)));for(const a of m.value?.futureTasks||[]){const l=`${a.taskDefKey||a.taskName}-`;t.has(l)||e.push({taskName:a.taskName,taskDefKey:a.taskDefKey,tasks:[],assigneeNames:a.assigneeNames,approvalType:a.approvalType})}e.push({taskName:"结束",taskDefKey:ee,tasks:[],isEnd:!0});const o=new Map;for(const a of e){const l=a.taskDefKey||a.taskName||"";l&&(a.occurrence=(o.get(l)||0)+1,o.set(l,a.occurrence))}return e}),z=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,re={single:"或签",joint:"会签",all:"会签"},R=e=>re[e.approvalType||e.tasks[0]?.approvalType||""]||"",le=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Q=e=>{const t=(e.assigneeNames||"").split(",").map(o=>o.trim()).filter(Boolean);return t.length?t:["待处理"]},ie={1:{label:"同意",type:"success"},2:{label:"驳回",type:"warning"},3:{label:"终止",type:"danger"},4:{label:"委派",type:"warning"},5:{label:"转办",type:"warning"},6:{label:"终止",type:"danger"},7:{label:"撤回",type:"info"},8:{label:"催办",type:"info"}},ce=e=>Me(e.finishTime||e.createTime),de={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},pe=e=>de[e]||"",I=e=>{if(e.isEnd)return U.value?{label:"已结束",type:"success",hollow:!1}:{label:"等待",type:"info",hollow:!1};if(!e.tasks.length)return{label:"等待",type:"info",hollow:!1};const t=e.tasks;if(t.some(l=>!l.finishTime))return{label:"进行中",type:"primary",hollow:!1};let o="已办",a="success";if(t.some(l=>l.taskLocalVars?.firstTask))o="提交";else{const l=[...t].sort((k,$)=>($.finishTime||"").localeCompare(k.finishTime||""))[0]?.commentList?.[0],T=ie[l?.type||""];o=T?.label||"已办",a=T?.type||"success"}return{label:o,type:a,hollow:!1}},G=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${ce(e)}`:t},ue=e=>e.tasks.length?e.tasks.map(G).join(" / "):Q(e).join(" / "),P=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),W=_(()=>{const e=new Map,t=[];for(const o of S.value){const a=o.taskDefKey||o.taskName||"";if(!a)continue;const l=o.tasks.some(k=>!k.finishTime)?"process":I(o).type,T=e.get(a);if(T!==void 0){const k=t[T];k.occurrence=(k.occurrence||1)+1,k.parentExecutionId=o.parentExecutionId,k.status=l;continue}e.set(a,t.length),t.push({taskName:o.taskName,taskDefKey:o.taskDefKey,parentExecutionId:o.parentExecutionId,status:l,occurrence:1})}for(const o of m.value?.futureTasks||[]){const a=o.taskDefKey||o.taskName||"";if(!a)continue;const l=e.get(a);if(l!==void 0){t[l].status="wait";continue}e.set(a,t.length),t.push({taskName:o.taskName,taskDefKey:o.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:ee,status:U.value?"success":"wait"}),t}),Y=e=>{const t=Se().getUserInfo.userCode;return!t||!e?!1:!!(e.assigneeId===t||e.candidate&&e.candidate.split(",").map(a=>a.trim()).filter(Boolean).includes(t))},fe=_(()=>Y(v.value)?!0:(m.value?.activeTasks||[]).some(e=>Y(e))),me=_(()=>f.readonly||!!v.value?.finishTime||!!v.value?.procEndTime||L.value&&!(m.value?.activeTasks||[]).length||!fe.value),ke=_(()=>B.value?.taskOption),ve=_(()=>{const e=ke.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),A("cancel")},workflowComplete:async(...t)=>{await e?.workflowComplete?.(...t)}}}),q=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,H=async(e,t=!1)=>{const o=f.taskInfo&&f.taskInfo.procInsId==null&&f.taskInfo.processInstanceId!=null?{...f.taskInfo,procInsId:f.taskInfo.processInstanceId}:f.taskInfo;if(!(!f.taskId&&!o?.procInsId))try{g.value=!0,L.value=!1,v.value=e?{...v.value,...e}:t&&f.taskId?await V.getTaskInst(f.taskId):o||await V.getTaskInst(f.taskId),v.value?.procInsId&&(m.value=await V.getProcessTaskList(v.value.procInsId)),L.value=!0,await ne(),await Ke(),await B.value?.resetQuery?.()}catch(a){Le.messageError(a)}finally{g.value=!1}},ye=async e=>{A("success",e),await H(e,!0)};return te({resetQuery:async()=>{await H()}}),(e,t)=>{const o=h("el-title"),a=h("el-empty"),l=h("el-tag-display"),T=h("el-flex"),k=h("el-icons"),$=h("el-timeline-item"),_e=h("el-timeline"),we=h("el-button"),he=xe("loading");return n(),r("div",Ve,[d(`
2
2
  内容区撑满剩余空间统一使用 dialog-content-fill(flex/height 由核心工具类提供),
3
3
  滚动仅保留在本内容区,底部操作栏固定不随内容滚动。
4
- `),Ce((n(),r("div",je,[D(o,{level:"1",title:"流程进度",style:{"border-bottom":"var(--border)"}}),i("div",null,[W.value.length?(n(),r("div",Fe,[i("div",Oe,[(n(!0),r(p,null,C(W.value,(s,c)=>(n(),r("div",{key:q(s),class:J(["wf-progress-step",{done:s.status==="success",current:s.status==="process",rejected:s.status==="warning",stopped:s.status==="error"||s.status==="danger"}])},[i("div",Ue,[i("div",ze,[d(" 同意/提交:对勾 "),s.status==="success"?(n(),r("svg",Re,[...t[3]||(t[3]=[i("path",{d:"M20 6L9 17l-5-5"},null,-1)])])):s.status==="warning"?(n(),r(p,{key:1},[d(" 驳回:回退箭头 "),t[4]||(t[4]=i("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[i("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)):s.status==="danger"||s.status==="error"?(n(),r(p,{key:2},[d(" 终止:叉 "),t[5]||(t[5]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},[i("path",{d:"M18 6L6 18"}),i("path",{d:"M6 6l12 12"})],-1))],2112)):s.status==="info"?(n(),r(p,{key:3},[d(" 撤回:撤销箭头 "),t[6]||(t[6]=i("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[i("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",Qe,u(c+1),1))])]),i("div",Ge,[i("span",We,[i("span",Ye,u(s.taskName||"未命名节点"),1),s.occurrence&&s.occurrence>1?(n(),r("sup",qe,u(s.occurrence),1)):d("v-if",!0)])])],2))),128))])])):(n(),x(a,{key:0,description:"暂无流程进度","image-size":48}))]),d(`
4
+ `),be((n(),r("div",je,[D(o,{level:"1",title:"流程进度",style:{"border-bottom":"var(--border)"}}),i("div",null,[W.value.length?(n(),r("div",Fe,[i("div",Oe,[(n(!0),r(p,null,b(W.value,(s,c)=>(n(),r("div",{key:q(s),class:J(["wf-progress-step",{done:s.status==="success",current:s.status==="process",rejected:s.status==="warning",stopped:s.status==="error"||s.status==="danger"}])},[i("div",Ue,[i("div",ze,[d(" 同意/提交:对勾 "),s.status==="success"?(n(),r("svg",Re,[...t[3]||(t[3]=[i("path",{d:"M20 6L9 17l-5-5"},null,-1)])])):s.status==="warning"?(n(),r(p,{key:1},[d(" 驳回:回退箭头 "),t[4]||(t[4]=i("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[i("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)):s.status==="danger"||s.status==="error"?(n(),r(p,{key:2},[d(" 终止:叉 "),t[5]||(t[5]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},[i("path",{d:"M18 6L6 18"}),i("path",{d:"M6 6l12 12"})],-1))],2112)):s.status==="info"?(n(),r(p,{key:3},[d(" 撤回:撤销箭头 "),t[6]||(t[6]=i("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[i("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",Qe,u(c+1),1))])]),i("div",Ge,[i("span",We,[i("span",Ye,u(s.taskName||"未命名节点"),1),s.occurrence&&s.occurrence>1?(n(),r("sup",qe,u(s.occurrence),1)):d("v-if",!0)])])],2))),128))])])):(n(),x(a,{key:0,description:"暂无流程进度","image-size":48}))]),d(`
5
5
  业务审核内容:完全由业务内容组件/插槽决定(含它自己的标题、分区、网格),
6
6
  通用抽屉不再注入任何标题,业务页面给什么就展示什么。
7
- `),be(e.$slots,"content",{task:v.value,process:m.value},()=>[w.contentComponent?(n(),x(Ne(w.contentComponent),De({key:0,ref_key:"contentRef",ref:B},w.contentProps,{loading:g.value,"onUpdate:loading":t[0]||(t[0]=s=>g.value=s)}),null,16,["loading"])):d("v-if",!0)],!0),D(o,{level:"1",title:"审批记录",style:{"border-bottom":"var(--border)"}}),i("div",null,[S.value.length?(n(),x(ye,{key:1,class:"workflow-todo-shell__timeline"},{default:K(()=>[(n(!0),r(p,null,C(ae.value,s=>(n(),x($,{key:z(s),type:I(s).type,hollow:I(s).hollow,style:Ee({"--el-timeline-node-color":pe(I(s).type)})},{default:K(()=>[D(T,{align:"center",justify:"space-between",class:J(["workflow-todo-shell__record-title",`is-${I(s).type}`])},{default:K(()=>[i("span",null,[b(u(s.taskName||"未命名节点")+" ",1),(s.occurrence||0)>1?(n(),r("span",He,u(s.occurrence),1)):d("v-if",!0),R(s)?(n(),r("span",Je,u(R(s)),1)):d("v-if",!0)]),D(l,{type:I(s).type,size:"small"},{default:K(()=>[b(u(I(s).label),1)]),_:2},1032,["type"])]),_:2},1032,["class"]),le(s)?(n(),r("div",Xe,[i("span",Ze,u(ue(s)),1),P(s)||s.tasks.some(c=>N(c.taskId).length)?(n(),r("div",et,[P(s)?(n(),r(p,{key:0},[b(u(P(s)),1)],64)):d("v-if",!0),(n(!0),r(p,null,C(s.tasks,c=>(n(),r(p,{key:c.taskId},[N(c.taskId).length?(n(),r("div",tt,[(n(!0),r(p,null,C(N(c.taskId),_=>(n(),r("span",{key:_.id,class:"workflow-todo-shell__record-file",onClick:ge=>X(F)(_.id)},[D(k,{"model-value":O(_.name)},null,8,["model-value"]),b(u(_.name),1)],8,st))),128))])):d("v-if",!0)],64))),128))])):d("v-if",!0)])):s.tasks.length?(n(!0),r(p,{key:1},C(s.tasks,c=>(n(),r("div",{key:c.taskId,class:"workflow-todo-shell__record-user"},[i("span",ot,u(G(c)),1),c.comment||N(c.taskId).length?(n(),r("div",nt,[c.comment?(n(),r(p,{key:0},[b(u(c.comment),1)],64)):d("v-if",!0),N(c.taskId).length?(n(),r("div",at,[(n(!0),r(p,null,C(N(c.taskId),_=>(n(),r("span",{key:_.id,class:"workflow-todo-shell__record-file",onClick:ge=>X(F)(_.id)},[D(k,{"model-value":O(_.name)},null,8,["model-value"]),b(u(_.name),1)],8,rt))),128))])):d("v-if",!0)])):d("v-if",!0)]))),128)):s.isEnd?d("v-if",!0):(n(),r(p,{key:2},[d(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(p,null,C(Q(s),c=>(n(),r("div",{key:c,class:"workflow-todo-shell__record-user"},[i("span",lt,u(c),1)]))),128))],64))]),_:2},1032,["type","hollow","style"]))),128))]),_:1})):(n(),x(a,{key:0,description:"暂无审批记录","image-size":48}))])])),[[he,g.value]]),w.showFooter?(n(),r("div",it,[me.value?(n(),x(we,{key:0,onClick:t[1]||(t[1]=s=>A("cancel"))},{default:K(()=>[...t[7]||(t[7]=[b("取消",-1)])]),_:1})):(n(),x(Pe,{key:1,"task-id":w.taskId,params:ve.value,"render-dialog":w.renderDialog,"show-process-btn":!1,"but-loading":g.value,"onUpdate:butLoading":t[2]||(t[2]=s=>g.value=s),onSuccess:_e},null,8,["task-id","params","render-dialog","but-loading"]))])):d("v-if",!0)])}}}),fs=$e(ct,[["__scopeId","data-v-2dd4e6d0"]]);export{fs as default};
7
+ `),Ce(e.$slots,"content",{task:v.value,process:m.value},()=>[w.contentComponent?(n(),x(Ne(w.contentComponent),De({key:0,ref_key:"contentRef",ref:B},w.contentProps,{loading:g.value,"onUpdate:loading":t[0]||(t[0]=s=>g.value=s)}),null,16,["loading"])):d("v-if",!0)],!0),D(o,{level:"1",title:"审批记录",style:{"border-bottom":"var(--border)"}}),i("div",null,[S.value.length?(n(),x(_e,{key:1,class:"workflow-todo-shell__timeline"},{default:K(()=>[(n(!0),r(p,null,b(ae.value,s=>(n(),x($,{key:z(s),type:I(s).type,hollow:I(s).hollow,style:Ee({"--el-timeline-node-color":pe(I(s).type)})},{default:K(()=>[D(T,{align:"center",justify:"space-between",class:J(["workflow-todo-shell__record-title",`is-${I(s).type}`])},{default:K(()=>[i("span",null,[C(u(s.taskName||"未命名节点")+" ",1),(s.occurrence||0)>1?(n(),r("span",He,u(s.occurrence),1)):d("v-if",!0),R(s)?(n(),r("span",Je,u(R(s)),1)):d("v-if",!0)]),D(l,{type:I(s).type,size:"small"},{default:K(()=>[C(u(I(s).label),1)]),_:2},1032,["type"])]),_:2},1032,["class"]),le(s)?(n(),r("div",Xe,[i("span",Ze,u(ue(s)),1),P(s)||s.tasks.some(c=>N(c.taskId).length)?(n(),r("div",et,[P(s)?(n(),r(p,{key:0},[C(u(P(s)),1)],64)):d("v-if",!0),(n(!0),r(p,null,b(s.tasks,c=>(n(),r(p,{key:c.taskId},[N(c.taskId).length?(n(),r("div",tt,[(n(!0),r(p,null,b(N(c.taskId),y=>(n(),r("span",{key:y.id,class:"workflow-todo-shell__record-file",onClick:ge=>X(F)(y.id)},[D(k,{"model-value":O(y.name)},null,8,["model-value"]),C(u(y.name),1)],8,st))),128))])):d("v-if",!0)],64))),128))])):d("v-if",!0)])):s.tasks.length?(n(!0),r(p,{key:1},b(s.tasks,c=>(n(),r("div",{key:c.taskId,class:"workflow-todo-shell__record-user"},[i("span",ot,u(G(c)),1),c.comment||N(c.taskId).length?(n(),r("div",nt,[c.comment?(n(),r(p,{key:0},[C(u(c.comment),1)],64)):d("v-if",!0),N(c.taskId).length?(n(),r("div",at,[(n(!0),r(p,null,b(N(c.taskId),y=>(n(),r("span",{key:y.id,class:"workflow-todo-shell__record-file",onClick:ge=>X(F)(y.id)},[D(k,{"model-value":O(y.name)},null,8,["model-value"]),C(u(y.name),1)],8,rt))),128))])):d("v-if",!0)])):d("v-if",!0)]))),128)):s.isEnd?d("v-if",!0):(n(),r(p,{key:2},[d(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(p,null,b(Q(s),c=>(n(),r("div",{key:c,class:"workflow-todo-shell__record-user"},[i("span",lt,u(c),1)]))),128))],64))]),_:2},1032,["type","hollow","style"]))),128))]),_:1})):(n(),x(a,{key:0,description:"暂无审批记录","image-size":48}))])])),[[he,g.value]]),w.showFooter?(n(),r("div",it,[me.value?(n(),x(we,{key:0,onClick:t[1]||(t[1]=s=>A("cancel"))},{default:K(()=>[...t[7]||(t[7]=[C("取消",-1)])]),_:1})):(n(),x(Pe,{key:1,"task-id":w.taskId,params:ve.value,"render-dialog":w.renderDialog,"show-process-btn":!1,"but-loading":g.value,"onUpdate:butLoading":t[2]||(t[2]=s=>g.value=s),onSuccess:ye},null,8,["task-id","params","render-dialog","but-loading"]))])):d("v-if",!0)])}}}),ms=$e(ct,[["__scopeId","data-v-2a1c2021"]]);export{ms as default};
@@ -1,3 +1,4 @@
1
+ import type { WorkflowCompleteContext } from "../../../hooks/workflowCompleteRunner";
1
2
  type __VLS_Props = {
2
3
  /** 任务 id */
3
4
  taskId?: string;
@@ -8,6 +9,12 @@ type __VLS_Props = {
8
9
  * 便于核心包组件脱离具体工程独立使用。
9
10
  */
10
11
  renderDialog?: (...args: any[]) => any;
12
+ /**
13
+ * 引擎动作成功后的业务同步回调(由 TaskOperation 注入):
14
+ * 统一组件会 await 它,失败时抛出——本弹窗因此不会 emit success、不会被关闭,
15
+ * 错误提示与撤回由核心包统一处理。未注入时保持原行为(仅 emit success)。
16
+ */
17
+ onWorkflowSuccess?: (ctx: WorkflowCompleteContext) => Promise<void> | void;
11
18
  };
12
19
  type __VLS_PublicProps = __VLS_Props & {
13
20
  "loading"?: boolean;
@@ -1 +1 @@
1
- import{_ as o}from"../../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-SYw6MXOl.js";import"vue";import"../../../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";import"../../../stores/userInfoStore.js";import"pinia";import"../../../utils/userSessionStorage.js";import"../../business/comp.userForm.vue.js";import"@vueuse/core";import"../../../api/DeptInfoApi.js";import"../../../api/EmployeeInfoApi.js";import"../../../hooks/useResetRefHooks.js";import"../../../utils/FrameworkUtils.js";import"xlsx-js-style";import"../../../config/vxeSelectColumn.js";import"../../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"../../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../../api/SysUserApi.js";export{o as default};
1
+ import{_ as o}from"../../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import"vue";import"../../../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";import"../../../stores/userInfoStore.js";import"pinia";import"../../../utils/userSessionStorage.js";import"../../business/comp.userForm.vue.js";import"@vueuse/core";import"../../../api/DeptInfoApi.js";import"../../../api/EmployeeInfoApi.js";import"../../../hooks/useResetRefHooks.js";import"../../../utils/FrameworkUtils.js";import"xlsx-js-style";import"../../../config/vxeSelectColumn.js";import"../../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"../../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../../api/SysUserApi.js";export{o as default};
@@ -1,5 +1,6 @@
1
1
  import type { IWfTaskVo } from "../../../interface/workflow/IWfTaskVo";
2
2
  import type { ITaskOperate } from "../../../hooks/userWorkflowHooks";
3
+ import type { WorkflowCompleteContext } from "../../../hooks/workflowCompleteRunner";
3
4
  type __VLS_Props = {
4
5
  /** 任务对象(useDialogHooks 打开时传入) */
5
6
  taskVo?: IWfTaskVo;
@@ -14,6 +15,12 @@ type __VLS_Props = {
14
15
  * 便于核心包组件脱离具体工程独立使用。
15
16
  */
16
17
  renderDialog?: (...args: any[]) => any;
18
+ /**
19
+ * 引擎动作成功后的业务同步回调(由 TaskOperation 注入):
20
+ * 统一组件会 await 它,失败时抛出——本弹窗因此不会 emit success、不会被关闭,
21
+ * 错误提示与撤回由核心包统一处理。未注入时保持原行为(仅 emit success)。
22
+ */
23
+ onWorkflowSuccess?: (ctx: WorkflowCompleteContext) => Promise<void> | void;
17
24
  };
18
25
  type __VLS_PublicProps = __VLS_Props & {
19
26
  "loading"?: boolean;
@@ -1 +1 @@
1
- import{defineComponent as te,useModel as ae,ref as y,computed as V,resolveComponent as d,resolveDirective as le,withDirectives as re,openBlock as n,createBlock as f,withCtx as o,createVNode as i,createCommentVNode as U,createElementBlock as F,Fragment as N,renderList as T,normalizeClass as oe,createElementVNode as S,toDisplayString as M,mergeModels as R}from"vue";import se from"../../bpmntree/components/UserSelector/UserTag.vue.js";import p from"../../../api/workflow/workflowInstApi.js";import{ElMessage as c}from"element-plus";import ne from"../../business/comp.userForm.vue.js";import ie from"../../upload/CustomElUpload.vue.js";import{userInfoStore as I}from"../../../stores/userInfoStore.js";import j from"../../../api/DocumentApi.js";import D from"../../../utils/FrameworkUtils.js";import ue from"../../../api/SysUserApi.js";import{_ as ce}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"../../../utils/frontendBus.js";import"../../../utils/globalLoading.js";import"../../../utils/workflowTaskContext.js";import"../../../config/GlobalLoadingConfig.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"@element-plus/icons-vue";import"../../../hooks/useFileView.js";import"../../../hooks/useDeleteConfirmHooks.js";import"../../../hooks/useBehaviorAction.js";import"../../../utils/uploadAccept.js";import"../../../utils/buildUploadHeaders.js";import"pinia";import"../../../utils/userSessionStorage.js";const me={style:{"font-size":"16px"}},de=te({__name:"CheckDialog",props:R({taskVo:{},dialogType:{},taskOperate:{},commentReadonly:{type:Boolean},renderDialog:{type:Function}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:R(["success","openAssignee"],["update:loading"]),setup(A,{expose:L,emit:z}){const s=A,O=z,b=ae(A,"loading"),h=y(""),r=V(()=>s.dialogType??""),e=y({taskId:"",comment:""}),_=y([]),m=y({}),v=y([]),k=y(""),E=y(!1),K=V(()=>e.value?.variables?.persons?.length>0),P=async()=>{const t=s.taskVo;if(t){E.value=!!s.commentReadonly,b.value=!0,e.value={...t},e.value.comment=t.comment??"";try{_.value=await j.getBusinessDocuments("workflow",t.taskId)}catch(a){c.error(a.msg),_.value=[]}if(r.value==="complete")h.value="审批意见",e.value.comment=e.value.comment?e.value.comment:"同意。";else if(r.value==="refuse")h.value="终止原因";else if(r.value==="back"){h.value="驳回原因",k.value="",v.value=[];try{v.value=await p.findReturnTaskList(e.value.taskId),v.value.length==1&&(k.value=v.value[0].taskKey)}catch(a){v.value=[],D.messageError(a)}}else r.value==="transfer"&&(h.value="转办原因",e.value.comment="",m.value={});b.value=!1}},Q=V(()=>{const t=I().getUserInfo,a=t?.topDeptId||t?.mdmDeptId;return a?[a]:[]}),B=s.renderDialog,H=(t,a,u,g,x,w)=>{if(!B){console.warn("[CheckDialog] 未注入 renderDialog,无法打开选人弹窗(请通过 props 传入 useDialogHooks 的 render)");return}B(t,a,u,g,x,w)},q=()=>{H(ne,{multiple:!1,selectedUserCodes:m.value.loginName?[m.value.loginName]:[],defalutQueryParam:{deptIds:Q.value},onSuccess:t=>{const u=(Array.isArray(t)?t:t?[t]:[])[0];u?.code&&(m.value={id:u.id,userName:u.name,loginName:u.code},W(u.code))}},{title:"选择转办人",width:"900px",top:"8vh",style:{height:"72vh"}},"dialog")},W=async t=>{try{await ue.addNBUserInfo([t])}catch(a){m.value={},D.messageError(a)}},$=I().getUserInfo.userCode;return L({resetQuery:P,confirm:async()=>{if(!(!e.value||!$))try{if(b.value=!0,_.value.length>0){const t=_.value.map(a=>a.id);if(t.length>0)try{await j.fileStatusConfirmation(t)}catch(a){D.messageError(a);return}}if(r.value==="complete"){if(!e.value.comment){c.warning("请填写审批意见!");return}if(K.value&&!e.value.variables.nextChecker?.length){c.warning("请选择下一步审核人!");return}const t={taskId:e.value.taskId,userId:I().getUserInfo.userCode,comment:e.value.comment,procInsId:e.value.procInsId,procDefKey:e.value.procDefKey,variables:e.value.variables};if(s.taskOperate?.completeFunction){const a=await s.taskOperate.completeFunction(t);a&&a?.taskId?e.value=a:e.value=await p.getTaskInst(e.value.taskId)}else e.value=await p.taskComplete(t);if(e.value.operations&&e.value.operations?.indexOf("assignee")>-1){O("openAssignee",e.value.taskId);return}}else if(r.value==="refuse"){if(!e.value.comment){c.warning("请填写终止原因!");return}const t={taskId:e.value.taskId,userId:I().getUserInfo.userCode,comment:e.value.comment,stopWorkflow:!0};s.taskOperate?.refuseFunction?(await s.taskOperate.refuseFunction(t),e.value=await p.getTaskInst(e.value.taskId)):e.value=await p.taskReject(t),c.success("中止成功")}else if(r.value==="back"){if(!e.value.comment){c.warning("请填写驳回原因!");return}if(!k.value){c.warning("请指定回退节点!");return}const t={taskId:e.value.taskId,userId:I().getUserInfo.userCode,comment:e.value.comment,targetKey:k.value,isFirstActivity:v.value.find(a=>a.taskKey===k.value)?.isFirstActivity};s.taskOperate?.backFunction?(await s.taskOperate.backFunction(t),e.value=await p.getTaskInst(e.value.taskId)):e.value=await p.taskReturn(t),c.success("回退成功")}else if(r.value==="transfer"){if(!e.value.comment){c.warning("请填写转办原因!");return}if(!m.value.loginName){c.warning("请选择转办人!");return}const t={taskId:e.value.taskId,userId:I().getUserInfo.userCode,comment:I().getUserInfo.userName+"-》"+m.value.userName+":"+e.value.comment,assignee:m.value.loginName};s.taskOperate?.transferFunction?(await s.taskOperate.transferFunction(t),e.value=await p.getTaskInst(e.value.taskId)):e.value=await p.taskTransfer(t)}O("success",e.value)}catch(t){D.messageError(t)}finally{b.value=!1}}}),(t,a)=>{const u=d("el-input"),g=d("el-form-item"),x=d("el-icons"),w=d("el-flex"),G=d("el-space"),J=d("el-card"),X=d("el-option"),Y=d("el-select"),Z=d("el-form"),ee=le("loading");return re((n(),f(w,{vertical:!0,justify:"center",height:"100%"},{default:o(()=>[i(Z,{"label-width":"80px",style:{width:"100%"}},{default:o(()=>[i(g,{label:h.value,required:r.value!=="complete"},{default:o(()=>[i(u,{readonly:E.value,disabled:e.value?.finishTime,modelValue:e.value.comment,"onUpdate:modelValue":a[0]||(a[0]=l=>e.value.comment=l),style:{width:"100%"},maxlength:255,rows:3,resize:!1,type:"textarea",placeholder:"请填入意见"},null,8,["readonly","disabled","modelValue"])]),_:1},8,["label","required"]),r.value==="transfer"?(n(),f(g,{key:0,required:r.value==="transfer",label:"转办人"},{default:o(()=>[i(u,{"model-value":m.value.userName,readonly:"",placeholder:"请选择转办人",onClick:q},{append:o(()=>[i(x,{"model-value":"adtec-adduser",tip:"选择转办人",style:{cursor:"pointer"},onClick:q})]),_:1},8,["model-value"])]),_:1},8,["required"])):U("v-if",!0),r.value==="back"&&v.value.length>1?(n(),f(g,{key:1,label:"回退节点",required:!0},{default:o(()=>[i(w,{vertical:!0,justify:"space-around"},{default:o(()=>[(n(!0),F(N,null,T(v.value,l=>(n(),f(J,{shadow:"never",style:{width:"100%","margin-bottom":"10px"},class:oe(l.taskKey==k.value?"selected-card":""),key:l.taskKey,onClick:C=>k.value=l.taskKey??""},{default:o(()=>[i(w,{justify:"space-between"},{default:o(()=>[S("span",me,M(l.taskName),1),S("span",null,"完成于:"+M(l.endTime),1)]),_:2},1024),i(w,null,{default:o(()=>[i(G,null,{default:o(()=>[(n(!0),F(N,null,T(l.users,C=>(n(),f(se,{type:"primary",closable:!1,key:C.id,"user-id":C.id,username:C.userName},null,8,["user-id","username"]))),128))]),_:2},1024)]),_:2},1024)]),_:2},1032,["class","onClick"]))),128))]),_:1})]),_:1})):U("v-if",!0),K.value?(n(),f(g,{key:2,label:"下一步审核人",required:""},{default:o(()=>[i(Y,{modelValue:e.value.variables.nextChecker,"onUpdate:modelValue":a[1]||(a[1]=l=>e.value.variables.nextChecker=l),disabled:e.value.variables.persons?.length===1,multiple:"",placeholder:"请选择下一步审核人"},{default:o(()=>[(n(!0),F(N,null,T(e.value.variables.persons,l=>(n(),f(X,{key:l.code,label:l.name,value:l.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"])]),_:1})):U("v-if",!0),r.value!=="transfer"?(n(),f(g,{key:3,label:"附件",style:{"margin-bottom":"0"}})):U("v-if",!0)]),_:1}),i(ie,{limit:5,style:{width:"100%"},"is-edit":!0,"business-id":e.value.taskId,business:"workflow","upload-files-list":_.value,"onUpdate:uploadFilesList":a[2]||(a[2]=l=>_.value=l)},null,8,["business-id","upload-files-list"])]),_:1})),[[ee,b.value]])}}}),lt=ce(de,[["__scopeId","data-v-4e86bdba"]]);export{lt as default};
1
+ import{defineComponent as ae,useModel as le,ref as y,computed as F,resolveComponent as d,resolveDirective as re,withDirectives as oe,openBlock as n,createBlock as f,withCtx as s,createVNode as i,createCommentVNode as D,createElementBlock as N,Fragment as T,renderList as A,normalizeClass as se,createElementVNode as M,toDisplayString as R,mergeModels as j}from"vue";import ne from"../../bpmntree/components/UserSelector/UserTag.vue.js";import p from"../../../api/workflow/workflowInstApi.js";import{ElMessage as c}from"element-plus";import ie from"../../business/comp.userForm.vue.js";import ue from"../../upload/CustomElUpload.vue.js";import{userInfoStore as w}from"../../../stores/userInfoStore.js";import L from"../../../api/DocumentApi.js";import x from"../../../utils/FrameworkUtils.js";import ce from"../../../api/SysUserApi.js";import{_ as me}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"../../../utils/frontendBus.js";import"../../../utils/globalLoading.js";import"../../../utils/workflowTaskContext.js";import"../../../config/GlobalLoadingConfig.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"@element-plus/icons-vue";import"../../../hooks/useFileView.js";import"../../../hooks/useDeleteConfirmHooks.js";import"../../../hooks/useBehaviorAction.js";import"../../../utils/uploadAccept.js";import"../../../utils/buildUploadHeaders.js";import"pinia";import"../../../utils/userSessionStorage.js";const de={style:{"font-size":"16px"}},pe=ae({__name:"CheckDialog",props:j({taskVo:{},dialogType:{},taskOperate:{},commentReadonly:{type:Boolean},renderDialog:{type:Function},onWorkflowSuccess:{type:Function}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:j(["success","openAssignee"],["update:loading"]),setup(O,{expose:z,emit:P}){const o=O,B=P,h=le(O,"loading"),b=y(""),r=F(()=>o.dialogType??""),e=y({taskId:"",comment:""}),I=y([]),m=y({}),v=y([]),k=y(""),E=y(!1),K=F(()=>e.value?.variables?.persons?.length>0),W=async()=>{const t=o.taskVo;if(t){E.value=!!o.commentReadonly,h.value=!0,e.value={...t},e.value.comment=t.comment??"";try{I.value=await L.getBusinessDocuments("workflow",t.taskId)}catch(a){c.error(a.msg),I.value=[]}if(r.value==="complete")b.value="审批意见",e.value.comment=e.value.comment?e.value.comment:"同意。";else if(r.value==="refuse")b.value="终止原因";else if(r.value==="back"){b.value="驳回原因",k.value="",v.value=[];try{v.value=await p.findReturnTaskList(e.value.taskId),v.value.length==1&&(k.value=v.value[0].taskKey)}catch(a){v.value=[],x.messageError(a)}}else r.value==="transfer"&&(b.value="转办原因",e.value.comment="",m.value={});h.value=!1}},Q=F(()=>{const t=w().getUserInfo,a=t?.topDeptId||t?.mdmDeptId;return a?[a]:[]}),S=o.renderDialog,H=(t,a,u,g,V,_)=>{if(!S){console.warn("[CheckDialog] 未注入 renderDialog,无法打开选人弹窗(请通过 props 传入 useDialogHooks 的 render)");return}S(t,a,u,g,V,_)},q=()=>{H(ie,{multiple:!1,selectedUserCodes:m.value.loginName?[m.value.loginName]:[],defalutQueryParam:{deptIds:Q.value},onSuccess:t=>{const u=(Array.isArray(t)?t:t?[t]:[])[0];u?.code&&(m.value={id:u.id,userName:u.name,loginName:u.code},$(u.code))}},{title:"选择转办人",width:"900px",top:"8vh",style:{height:"72vh"}},"dialog")},$=async t=>{try{await ce.addNBUserInfo([t])}catch(a){m.value={},x.messageError(a)}},G=w().getUserInfo.userCode,C=async t=>{await o.onWorkflowSuccess?.({actionType:r.value,taskVo:e.value,askVo:t})};return z({resetQuery:W,confirm:async()=>{if(!(!e.value||!G))try{if(h.value=!0,I.value.length>0){const t=I.value.map(a=>a.id);if(t.length>0)try{await L.fileStatusConfirmation(t)}catch(a){x.messageError(a);return}}if(r.value==="complete"){if(!e.value.comment){c.warning("请填写审批意见!");return}if(K.value&&!e.value.variables.nextChecker?.length){c.warning("请选择下一步审核人!");return}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};if(o.taskOperate?.completeFunction){const a=await o.taskOperate.completeFunction(t);a&&a?.taskId?e.value=a:e.value=await p.getTaskInst(e.value.taskId)}else e.value=await p.taskComplete(t);if(await C(t),e.value.operations&&e.value.operations?.indexOf("assignee")>-1){B("openAssignee",e.value.taskId);return}}else if(r.value==="refuse"){if(!e.value.comment){c.warning("请填写终止原因!");return}const t={taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:e.value.comment,stopWorkflow:!0};o.taskOperate?.refuseFunction?(await o.taskOperate.refuseFunction(t),e.value=await p.getTaskInst(e.value.taskId)):e.value=await p.taskReject(t),await C(t),c.success("中止成功")}else if(r.value==="back"){if(!e.value.comment){c.warning("请填写驳回原因!");return}if(!k.value){c.warning("请指定回退节点!");return}const t={taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:e.value.comment,targetKey:k.value,isFirstActivity:v.value.find(a=>a.taskKey===k.value)?.isFirstActivity};o.taskOperate?.backFunction?(await o.taskOperate.backFunction(t),e.value=await p.getTaskInst(e.value.taskId)):e.value=await p.taskReturn(t),await C(t),c.success("回退成功")}else if(r.value==="transfer"){if(!e.value.comment){c.warning("请填写转办原因!");return}if(!m.value.loginName){c.warning("请选择转办人!");return}const t={taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:w().getUserInfo.userName+"-》"+m.value.userName+":"+e.value.comment,assignee:m.value.loginName};o.taskOperate?.transferFunction?(await o.taskOperate.transferFunction(t),e.value=await p.getTaskInst(e.value.taskId)):e.value=await p.taskTransfer(t),await C(t)}B("success",e.value)}catch(t){throw x.messageError(t),t}finally{h.value=!1}}}),(t,a)=>{const u=d("el-input"),g=d("el-form-item"),V=d("el-icons"),_=d("el-flex"),J=d("el-space"),X=d("el-card"),Y=d("el-option"),Z=d("el-select"),ee=d("el-form"),te=re("loading");return oe((n(),f(_,{vertical:!0,justify:"center",height:"100%"},{default:s(()=>[i(ee,{"label-width":"80px",style:{width:"100%"}},{default:s(()=>[i(g,{label:b.value,required:r.value!=="complete"},{default:s(()=>[i(u,{readonly:E.value,disabled:e.value?.finishTime,modelValue:e.value.comment,"onUpdate:modelValue":a[0]||(a[0]=l=>e.value.comment=l),style:{width:"100%"},maxlength:255,rows:3,resize:!1,type:"textarea",placeholder:"请填入意见"},null,8,["readonly","disabled","modelValue"])]),_:1},8,["label","required"]),r.value==="transfer"?(n(),f(g,{key:0,required:r.value==="transfer",label:"转办人"},{default:s(()=>[i(u,{"model-value":m.value.userName,readonly:"",placeholder:"请选择转办人",onClick:q},{append:s(()=>[i(V,{"model-value":"adtec-adduser",tip:"选择转办人",style:{cursor:"pointer"},onClick:q})]),_:1},8,["model-value"])]),_:1},8,["required"])):D("v-if",!0),r.value==="back"&&v.value.length>1?(n(),f(g,{key:1,label:"回退节点",required:!0},{default:s(()=>[i(_,{vertical:!0,justify:"space-around"},{default:s(()=>[(n(!0),N(T,null,A(v.value,l=>(n(),f(X,{shadow:"never",style:{width:"100%","margin-bottom":"10px"},class:se(l.taskKey==k.value?"selected-card":""),key:l.taskKey,onClick:U=>k.value=l.taskKey??""},{default:s(()=>[i(_,{justify:"space-between"},{default:s(()=>[M("span",de,R(l.taskName),1),M("span",null,"完成于:"+R(l.endTime),1)]),_:2},1024),i(_,null,{default:s(()=>[i(J,null,{default:s(()=>[(n(!0),N(T,null,A(l.users,U=>(n(),f(ne,{type:"primary",closable:!1,key:U.id,"user-id":U.id,username:U.userName},null,8,["user-id","username"]))),128))]),_:2},1024)]),_:2},1024)]),_:2},1032,["class","onClick"]))),128))]),_:1})]),_:1})):D("v-if",!0),K.value?(n(),f(g,{key:2,label:"下一步审核人",required:""},{default:s(()=>[i(Z,{modelValue:e.value.variables.nextChecker,"onUpdate:modelValue":a[1]||(a[1]=l=>e.value.variables.nextChecker=l),disabled:e.value.variables.persons?.length===1,multiple:"",placeholder:"请选择下一步审核人"},{default:s(()=>[(n(!0),N(T,null,A(e.value.variables.persons,l=>(n(),f(Y,{key:l.code,label:l.name,value:l.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"])]),_:1})):D("v-if",!0),r.value!=="transfer"?(n(),f(g,{key:3,label:"附件",style:{"margin-bottom":"0"}})):D("v-if",!0)]),_:1}),i(ue,{limit:5,style:{width:"100%"},"is-edit":!0,"business-id":e.value.taskId,business:"workflow","upload-files-list":I.value,"onUpdate:uploadFilesList":a[2]||(a[2]=l=>I.value=l)},null,8,["business-id","upload-files-list"])]),_:1})),[[te,h.value]])}}}),rt=me(pe,[["__scopeId","data-v-fd5ebf4a"]]);export{rt as default};
@@ -1,6 +1,13 @@
1
+ import type { WorkflowCompleteContext } from "../../../hooks/workflowCompleteRunner";
1
2
  type __VLS_Props = {
2
3
  /** 任务 id(useDialogHooks 打开时传入) */
3
4
  taskId?: string;
5
+ /**
6
+ * 引擎动作成功后的业务同步回调(由 TaskOperation 注入):
7
+ * 统一组件会 await 它,失败时抛出——本弹窗因此不会 emit success、不会被关闭,
8
+ * 错误提示与撤回由核心包统一处理。未注入时保持原行为(仅 emit success)。
9
+ */
10
+ onWorkflowSuccess?: (ctx: WorkflowCompleteContext) => Promise<void> | void;
4
11
  };
5
12
  type __VLS_PublicProps = __VLS_Props & {
6
13
  "loading"?: boolean;
@@ -1 +1 @@
1
- import{defineComponent as M,ref as L,useModel as S,resolveComponent as r,resolveDirective as Q,withDirectives as q,openBlock as o,createBlock as n,withCtx as s,createElementBlock as f,Fragment as g,renderList as _,createVNode as v,createElementVNode as z,toDisplayString as k,createCommentVNode as h,mergeModels as y}from"vue";import x from"../../../api/workflow/workflowInstApi.js";import{ElMessage as c}from"element-plus";import w from"../../../utils/FrameworkUtils.js";import{_ as F}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"../../../utils/frontendBus.js";import"../../../utils/globalLoading.js";import"../../../utils/workflowTaskContext.js";import"../../../config/GlobalLoadingConfig.js";import"xlsx-js-style";const P=M({__name:"SelectAssigneeDialog",props:y({taskId:{}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:y(["success"],["update:loading"]),setup(m,{expose:b,emit:N}){const u=m,V=N,l=L([]),a=S(m,"loading");return b({resetQuery:async()=>{if(u.taskId)try{l.value=[{assignee:[]}],a.value=!0;const e=await x.getTaskCandidateList(u.taskId);if(e?.length>0){for(let d of e)d.assignee=[];l.value=e}else c.warning("无候选人数据")}catch(e){w.messageError(e)}finally{a.value=!1}},confirm:async()=>{for(let e of l.value)if(e.candidate?.length==0||e.assignee.length==0){c.warning("请指定执行人!");return}try{a.value=!0,await x.setAssigneeList(l.value),c.success("操作成功"),V("success","")}catch(e){w.messageError(e)}finally{a.value=!1}}}),(e,d)=>{const p=r("el-form-item"),C=r("el-checkbox"),D=r("el-checkbox-group"),E=r("el-divider"),I=r("el-form"),U=r("el-flex"),A=Q("loading");return q((o(),n(U,{vertical:!0,height:"100%"},{default:s(()=>[(o(!0),f(g,null,_(l.value,(t,B)=>(o(),n(I,{labelPosition:"top",size:"default",style:{width:"100%"}},{default:s(()=>[v(p,{label:"任务名"},{default:s(()=>[z("span",null,k(t?.taskName)+"("+k(t?.procName)+")",1)]),_:2},1024),v(p,{label:"候选人",required:!0},{default:s(()=>[t?.candidate&&t?.candidate.length>0?(o(),n(D,{key:0,modelValue:t.assignee,"onUpdate:modelValue":i=>t.assignee=i},{default:s(()=>[(o(!0),f(g,null,_(t?.candidate,i=>(o(),n(C,{style:{width:"80px"},key:i.loginName,label:i.userName,value:i.loginName},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):h("v-if",!0)]),_:2},1024),B!=l.value?.length-1?(o(),n(E,{key:0})):h("v-if",!0)]),_:2},1024))),256))]),_:1})),[[A,a.value]])}}}),ue=F(P,[["__scopeId","data-v-767c3fdf"]]);export{ue as default};
1
+ import{defineComponent as B,ref as M,useModel as L,resolveComponent as r,resolveDirective as F,withDirectives as Q,openBlock as o,createBlock as i,withCtx as s,createElementBlock as f,Fragment as g,renderList as _,createVNode as v,createElementVNode as T,toDisplayString as k,createCommentVNode as h,mergeModels as y}from"vue";import w from"../../../api/workflow/workflowInstApi.js";import{ElMessage as m}from"element-plus";import x from"../../../utils/FrameworkUtils.js";import{_ as W}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"../../../utils/frontendBus.js";import"../../../utils/globalLoading.js";import"../../../utils/workflowTaskContext.js";import"../../../config/GlobalLoadingConfig.js";import"xlsx-js-style";const q=B({__name:"SelectAssigneeDialog",props:y({taskId:{},onWorkflowSuccess:{type:Function}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:y(["success"],["update:loading"]),setup(u,{expose:b,emit:N}){const c=u,V=N,l=M([]),a=L(u,"loading");return b({resetQuery:async()=>{if(c.taskId)try{l.value=[{assignee:[]}],a.value=!0;const e=await w.getTaskCandidateList(c.taskId);if(e?.length>0){for(let p of e)p.assignee=[];l.value=e}else m.warning("无候选人数据")}catch(e){x.messageError(e)}finally{a.value=!1}},confirm:async()=>{for(let e of l.value)if(e.candidate?.length==0||e.assignee.length==0){m.warning("请指定执行人!");return}try{a.value=!0,await w.setAssigneeList(l.value),await c.onWorkflowSuccess?.({actionType:"assignee"}),m.success("操作成功"),V("success","")}catch(e){throw x.messageError(e),e}finally{a.value=!1}}}),(e,p)=>{const d=r("el-form-item"),C=r("el-checkbox"),D=r("el-checkbox-group"),E=r("el-divider"),I=r("el-form"),S=r("el-flex"),U=F("loading");return Q((o(),i(S,{vertical:!0,height:"100%"},{default:s(()=>[(o(!0),f(g,null,_(l.value,(t,A)=>(o(),i(I,{labelPosition:"top",size:"default",style:{width:"100%"}},{default:s(()=>[v(d,{label:"任务名"},{default:s(()=>[T("span",null,k(t?.taskName)+"("+k(t?.procName)+")",1)]),_:2},1024),v(d,{label:"候选人",required:!0},{default:s(()=>[t?.candidate&&t?.candidate.length>0?(o(),i(D,{key:0,modelValue:t.assignee,"onUpdate:modelValue":n=>t.assignee=n},{default:s(()=>[(o(!0),f(g,null,_(t?.candidate,n=>(o(),i(C,{style:{width:"80px"},key:n.loginName,label:n.userName,value:n.loginName},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):h("v-if",!0)]),_:2},1024),A!=l.value?.length-1?(o(),i(E,{key:0})):h("v-if",!0)]),_:2},1024))),256))]),_:1})),[[U,a.value]])}}}),ue=W(q,[["__scopeId","data-v-25a3c4bf"]]);export{ue as default};
@@ -6,9 +6,10 @@
6
6
  * columns: [ checkboxColumn, ...其它列 ] // 多选
7
7
  * columns: [ radioColumn, ...其它列 ] // 单选
8
8
  *
9
- * 需要扩展时用展开符覆盖/追加:
9
+ * 需要扩展时只覆盖页面级属性(如左侧固定、字段名),不要手写宽度/对齐——
10
+ * 选择列的宽度与对齐统一由本文件维护:
10
11
  * { ...checkboxColumn, fixed: 'left', field: 'checkbox' }
11
- * { ...radioColumn, width: 48, fixed: 'left' }
12
+ * { ...radioColumn, fixed: 'left' }
12
13
  *
13
14
  * 说明:vxe-grid 的复选框/单选框列是列配置对象(非 Vue 组件),
14
15
  * 与 vxeDragRule.dragHandleColumn 同一套「公共列常量」惯例。
@@ -1,4 +1,4 @@
1
- import{computed as $,ref as x,unref as w,createApp as so,nextTick as no,h as d}from"vue";import co,{ElDrawer as ho,ElDialog as go,ElButton as q}from"element-plus";import V from"../stores/storeConfig.js";/* empty css */import*as P from"@element-plus/icons-vue";import"../config/ElementPlusConfig.js";import{installVxeGrid as uo}from"../config/VxeTableConfig.js";import po from"element-plus/es/locale/lang/zh-cn";import bo from"./useListenerHooks.js";import{permissionStore as mo}from"../stores/permissionStore.js";import fo from"../components/icon/ElIcons.vue.js";import _o from"../components/ElDialogBody/ElDialogBody.vue.js";import ko from"crypto-js/enc-base64";import yo from"crypto-js/enc-utf8";import{frontendBus as A}from"../utils/frontendBus.js";import{GLOBAL_LOADING_EVENT as W,notifyDialogLoadingScope as vo}from"../utils/globalLoading.js";import xo from"./useBehaviorAction.js";import"pinia";import"pinia-plugin-store";import"../utils/patchWujiePopperCoordinates.js";import"vxe-table";import"@vxe-ui/core";import"@vxe-ui/plugin-export-xlsx";import"exceljs";import"vxe-table/es/style.css";import"vxe-table/es/locale/lang/zh-CN";import"../components/vxeReplace/index.js";import"../components/tooltip/index.js";import"../components/tooltip/src/tooltip.js";import"../../chunks/VxeButton.vue_vue_type_script_setup_true_lang-s_mYx9TA.js";import"../../chunks/VxeInput.vue_vue_type_script_setup_true_lang-v9AqGSoL.js";import"../../chunks/VxeSelect.vue_vue_type_script_setup_true_lang-DcVggycZ.js";import"../../chunks/VxeCheckbox.vue_vue_type_script_setup_true_lang-Ccr5YD1x.js";import"../../chunks/VxeModal.vue_vue_type_script_setup_true_lang-B4gh7jFR.js";import"../../chunks/VxeLoading.vue_vue_type_script_setup_true_lang-B253kD5t.js";import"../../chunks/VxePager.vue_vue_type_script_setup_true_lang-DpOa3T96.js";import"../../chunks/VxeForm.vue_vue_type_script_setup_true_lang-DXNZ8Qzg.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"../stores/userInfoStore.js";import"../utils/userSessionStorage.js";import"@vueuse/core";import"../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";const wo={},Eo="subAppModalOverlay",E="adtec-subapp-modal-open";let U=0;const b=[],y=new Map;let S=!1;const C=new WeakMap,So=()=>{for(let o=b.length-1;o>=0;o--)if(b[o].open.value)return b[o]},j=o=>{if(!o?.id)return;if(o.phase==="start"){const t=So();if(!t)return;y.set(o.id,t),t.requestLoadingIds.add(o.id),t.requestLoading.value=!0;return}const e=y.get(o.id);e&&(y.delete(o.id),e.requestLoadingIds.delete(o.id),e.requestLoading.value=e.requestLoadingIds.size>0)},Lo=o=>{b.push(o),!S&&(A.on(W,j),S=!0)},Io=o=>{const e=b.indexOf(o);e>-1&&b.splice(e,1),o.requestLoadingIds.forEach(t=>y.delete(t)),o.requestLoadingIds.clear(),o.requestLoading.value=!1,!(b.length>0||!S)&&(A.off(W,j),S=!1,y.clear())},Oo=o=>{const e=wo||{};return o.applicationModule||e.VITE_APPLICATION_MODULE||e.VITE_APP_MODULE||String(o.router.currentRoute.value.meta.applicationModule||"")},z=(o,e,t)=>{if(typeof window>"u"||!window.__POWERED_BY_WUJIE__)return;const r=Oo(o);if(!r||(t&&!e.overlayId&&(e.overlayId=`${r}-${Date.now()}-${++U}`),!e.overlayId))return;const s={applicationModule:r,overlayId:e.overlayId,open:t};A.emit(Eo,s),t||(e.overlayId=void 0)},N=(o,e)=>{e&&!o.overlayId&&(o.overlayId=`dialog-${Date.now()}-${++U}`),o.overlayId&&vo({id:o.overlayId,open:e})};function Co(){const e="dialog-hooks-styles",t=document.getElementById(e);if(t&&(t.textContent||"").includes("/* dialog-hooks v24 */"))return;t?.remove();const r=document.createElement("style");r.id=e,r.type="text/css",r.innerHTML=`
1
+ import{computed as P,ref as x,unref as w,createApp as so,nextTick as no,h as d}from"vue";import co,{ElDrawer as ho,ElDialog as go,ElButton as z}from"element-plus";import W from"../stores/storeConfig.js";/* empty css */import*as N from"@element-plus/icons-vue";import"../config/ElementPlusConfig.js";import{installVxeGrid as uo}from"../config/VxeTableConfig.js";import po from"element-plus/es/locale/lang/zh-cn";import bo from"./useListenerHooks.js";import{permissionStore as mo}from"../stores/permissionStore.js";import fo from"../components/icon/ElIcons.vue.js";import _o from"../components/ElDialogBody/ElDialogBody.vue.js";import ko from"crypto-js/enc-base64";import yo from"crypto-js/enc-utf8";import{frontendBus as T}from"../utils/frontendBus.js";import{GLOBAL_LOADING_EVENT as U,notifyDialogLoadingScope as vo}from"../utils/globalLoading.js";import xo from"./useBehaviorAction.js";import"pinia";import"pinia-plugin-store";import"../utils/patchWujiePopperCoordinates.js";import"vxe-table";import"@vxe-ui/core";import"@vxe-ui/plugin-export-xlsx";import"exceljs";import"vxe-table/es/style.css";import"vxe-table/es/locale/lang/zh-CN";import"../components/vxeReplace/index.js";import"../components/tooltip/index.js";import"../components/tooltip/src/tooltip.js";import"../../chunks/VxeButton.vue_vue_type_script_setup_true_lang-s_mYx9TA.js";import"../../chunks/VxeInput.vue_vue_type_script_setup_true_lang-v9AqGSoL.js";import"../../chunks/VxeSelect.vue_vue_type_script_setup_true_lang-DcVggycZ.js";import"../../chunks/VxeCheckbox.vue_vue_type_script_setup_true_lang-Ccr5YD1x.js";import"../../chunks/VxeModal.vue_vue_type_script_setup_true_lang-B4gh7jFR.js";import"../../chunks/VxeLoading.vue_vue_type_script_setup_true_lang-B253kD5t.js";import"../../chunks/VxePager.vue_vue_type_script_setup_true_lang-DpOa3T96.js";import"../../chunks/VxeForm.vue_vue_type_script_setup_true_lang-DXNZ8Qzg.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"../stores/userInfoStore.js";import"../utils/userSessionStorage.js";import"@vueuse/core";import"../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";const wo={},Eo="subAppModalOverlay",E="adtec-subapp-modal-open";let j=0;const b=[],v=new Map;let S=!1;const C=new WeakMap,So=()=>{for(let o=b.length-1;o>=0;o--)if(b[o].open.value)return b[o]},F=o=>{if(!o?.id)return;if(o.phase==="start"){const t=So();if(!t)return;v.set(o.id,t),t.requestLoadingIds.add(o.id),t.requestLoading.value=!0;return}const e=v.get(o.id);e&&(v.delete(o.id),e.requestLoadingIds.delete(o.id),e.requestLoading.value=e.requestLoadingIds.size>0)},Lo=o=>{b.push(o),!S&&(T.on(U,F),S=!0)},Io=o=>{const e=b.indexOf(o);e>-1&&b.splice(e,1),o.requestLoadingIds.forEach(t=>v.delete(t)),o.requestLoadingIds.clear(),o.requestLoading.value=!1,!(b.length>0||!S)&&(T.off(U,F),S=!1,v.clear())},Oo=o=>{const e=wo||{};return o.applicationModule||e.VITE_APPLICATION_MODULE||e.VITE_APP_MODULE||String(o.router.currentRoute.value.meta.applicationModule||"")},R=(o,e,t)=>{if(typeof window>"u"||!window.__POWERED_BY_WUJIE__)return;const r=Oo(o);if(!r||(t&&!e.overlayId&&(e.overlayId=`${r}-${Date.now()}-${++j}`),!e.overlayId))return;const i={applicationModule:r,overlayId:e.overlayId,open:t};T.emit(Eo,i),t||(e.overlayId=void 0)},H=(o,e)=>{e&&!o.overlayId&&(o.overlayId=`dialog-${Date.now()}-${++j}`),o.overlayId&&vo({id:o.overlayId,open:e})};function Co(){const e="dialog-hooks-styles",t=document.getElementById(e);if(t&&(t.textContent||"").includes("/* dialog-hooks v24 */"))return;t?.remove();const r=document.createElement("style");r.id=e,r.type="text/css",r.innerHTML=`
2
2
  /* dialog-hooks v24 */
3
3
  /* 抽屉组件 - 无滚动条样式 */
4
4
  .dialog-hooks-no-scroll.el-drawer .el-drawer__body {
@@ -284,4 +284,4 @@ import{computed as $,ref as x,unref as w,createApp as so,nextTick as no,h as d}f
284
284
  background: transparent !important;
285
285
  background-color: transparent !important;
286
286
  }
287
- `,document.head.appendChild(r)}const Do=8;function F(o){const e=[];return o.querySelectorAll(".el-dialog-body__content").forEach(t=>e.push(t)),o.querySelectorAll(".el-drawer__body, .el-dialog__body").forEach(t=>{t.querySelector(".el-dialog-body__content")||e.push(t)}),e}function G(o){const e=[o];return o.querySelectorAll("*").forEach(t=>{(t.scrollHeight>t.clientHeight+1||t.scrollWidth>t.clientWidth+1)&&e.push(t)}),e}const R=new WeakSet;function Ao(o){F(o).forEach(e=>{G(e).forEach(t=>{R.has(t)||(R.add(t),Mo(t))})})}function Mo(o){let e;const t=()=>{o.classList.add("is-scrolling"),e&&window.clearTimeout(e),e=window.setTimeout(()=>o.classList.remove("is-scrolling"),600)};o.addEventListener("scroll",t,{passive:!0}),o.addEventListener("mouseenter",t),o.addEventListener("mouseleave",()=>{e&&window.clearTimeout(e),o.classList.remove("is-scrolling")})}function D(o){F(o).forEach(e=>{const t=C.get(e);if(!e.isConnected){t?.observer.disconnect(),C.delete(e);return}const r=G(e);if(H(e,r),typeof ResizeObserver>"u")return;let s=t;if(!s){const h={observer:new ResizeObserver(()=>H(e,h.targets)),targets:new Set};s=h,C.set(e,h)}const _=new Set(r);s.targets.forEach(h=>{_.has(h)||s.observer.unobserve(h)}),_.forEach(h=>{s.targets.has(h)||s.observer.observe(h)}),s.targets=_})}function H(o,e){let t=0;e.forEach(r=>{t=Math.max(t,r.offsetWidth-r.clientWidth)}),o.style.setProperty("--dialog-hooks-scrollbar",`${Math.min(Do,Math.max(0,t))}px`)}function To(o,e,t){return o===!1?{enabled:!1,scroll:t,class:void 0,contentClass:void 0}:o===!0||o===void 0?{enabled:o===!0?!0:e,scroll:t,class:void 0,contentClass:void 0}:{enabled:o.enabled??e,scroll:o.scroll??t,class:o.class,contentClass:o.contentClass}}function Bo(o,e){if(e)return e;try{const t=o.router.currentRoute.value.meta?.sysMenuData?.icon;if(t)return t}catch{}try{const t=sessionStorage.getItem("permissionStore");if(t){const r=JSON.parse(ko.parse(t).toString(yo));if(r?.activeMenuInfo?.icon)return r.activeMenuInfo.icon}}catch{}try{return mo(V).getActiveMenuInfo?.icon||""}catch{return""}}function Ae(o){return function(t){const r=[],s=()=>r[r.length-1],_=i=>{const a=w(i?.data),k=w(i?.row),v=w(i?.formData),p=i?.id??i?.taskId??i?.selectedId??a?.id??k?.id??v?.id;return p==null||p===""?"":String(p)},h=(i,a,k,v="drawer",p,X=!0)=>{Co();const{icon:Z,hideConfirm:L,hideFooter:oo,dialogBody:eo,...c}=k||{},f=To(eo,o.defaultDialogBody??!0,X),to=`${v}|${typeof i=="string"?i:i?.__name||i?.name||""}|${c.title||""}|${_(a)}`,M=x(!1),T=x(!1),l={open:x(!0),loading:$(()=>M.value||T.value),manualLoading:M,requestLoading:T,requestLoadingIds:new Set,childInstance:x(),app:null,div:null,closing:!1,renderKey:to,actionName:c.title||"确认"},lo=Object.fromEntries(Object.entries(a||{}).map(([n,u])=>[n,w(u)])),ro={...c,class:["dialog-hooks-host",...f.enabled?["dialog-hooks-body-contained"]:[],...f.scroll?[]:["dialog-hooks-no-scroll"],"dialog-hooks-scroll-auto",...Array.isArray(c.class)?c.class:c.class?[c.class]:[]]},ao=c.onClosed,I=typeof c.title=="string"&&c.title,B=I?Bo(o,Z):"",io=()=>d("div",{class:"dialog-hooks-header"},[B?d("div",{class:"dialog-hooks-header-icon"},[d(fo,{modelValue:B})]):null,d("div",{class:"dialog-hooks-header-title"},[c.title]),l.loading.value&&!L?null:d("button",{type:"button",class:"dialog-hooks-header-close",onClick:()=>m(l)},[d(P.Close)])]),g=so(()=>d(v==="drawer"?ho:go,{...ro,modelValue:l.open.value,showClose:I?!1:c.showClose??!0,onClosed(){N(l,!1),z(o,l,!1),Io(l),ao?.();const n=r.indexOf(l);n>-1&&r.splice(n,1),l.app?.unmount(),l.div?.parentNode&&l.div.parentNode.removeChild(l.div),l.app=null,l.div=null},onClose(){m(l)}},{...I?{header:io}:{},default:()=>{const n=d(i,{...lo,loading:l.loading.value,"onUpdate:loading":u=>{l.manualLoading.value=u},ref:l.childInstance});return f.enabled?d(_o,{scroll:f.scroll,class:f.class,contentClass:f.contentClass},{default:()=>n}):n},...oo?{}:{footer:()=>{if(p&&p.length){const n=p.map(u=>typeof u=="function"?u():u);return d("div",{className:"dialog-footer"},n)}return d("div",{className:"dialog-footer"},[d(q,{onClick:()=>m(l),loading:!L&&l.loading.value},"取 消"),L?null:d(q,{type:"primary",onClick:()=>Y(l),loading:l.loading.value},"确 认")])}}}));o.plugins?.forEach(n=>g.use(n)),g.use(co,{locale:po}),g.use(V),g.use(o.router);for(const[n,u]of Object.entries(P))g.component(n,u);uo(g),o.setupApp?.(g);const O=document.createElement("div");return document.body.appendChild(O),l.app=g,l.div=O,r.push(l),Lo(l),N(l,!0),z(o,l,!0),g.mount(O),no(()=>{Ao(document.body),D(document.body),l.childInstance.value?.resetQuery?.(),setTimeout(()=>{D(document.body),window.dispatchEvent(new Event("resize"))},350),setTimeout(()=>D(document.body),1200)}),bo(),{cancel:()=>m(l)}},Y=async i=>{const a=i||s();if(!a)return;const{runBehaviorAction:k}=xo();await k({code:`dialog:${a.renderKey}:confirm`,name:a.actionName||"确认",actionType:"SUBMIT"},async()=>{try{a.manualLoading.value=!0,await a.childInstance.value?.confirm?.(),t&&m(a)}finally{a.manualLoading.value=!1}})},m=i=>{const a=i||s();!a||!a.open.value||(a.closing=!0,a.open.value=!1)},K=i=>{const a=s();a&&(a.manualLoading.value=i)},J=()=>s()?.loading.value??!1,Q=$(()=>s()?.childInstance.value);return{render:h,cancel:m,setLoading:K,getLoading:J,instance:Q}}}export{Ae as createDialogHooks,Ae as default};
287
+ `,document.head.appendChild(r)}const Do=8;function G(o){const e=[];return o.querySelectorAll(".el-dialog-body__content").forEach(t=>e.push(t)),o.querySelectorAll(".el-drawer__body, .el-dialog__body").forEach(t=>{t.querySelector(".el-dialog-body__content")||e.push(t)}),e}function M(o){const e=[o];return o.querySelectorAll("*").forEach(t=>{(t.scrollHeight>t.clientHeight+1||t.scrollWidth>t.clientWidth+1)&&e.push(t)}),e}const V=new WeakSet;function Ao(o){G(o).forEach(e=>{M(e).forEach(t=>{V.has(t)||(V.add(t),Mo(t))})})}function Mo(o){let e;const t=()=>{o.classList.add("is-scrolling"),e&&window.clearTimeout(e),e=window.setTimeout(()=>o.classList.remove("is-scrolling"),600)};o.addEventListener("scroll",t,{passive:!0}),o.addEventListener("mouseenter",t),o.addEventListener("mouseleave",()=>{e&&window.clearTimeout(e),o.classList.remove("is-scrolling")})}function D(o){G(o).forEach(e=>{const t=C.get(e);if(!e.isConnected){t?.observer.disconnect(),t?.mutationObserver?.disconnect(),C.delete(e);return}const r=M(e);if(A(e,r),typeof ResizeObserver>"u")return;let i=t;if(!i){const h={observer:new ResizeObserver(()=>A(e,h.targets)),targets:new Set};i=h,C.set(e,h)}const _=new Set(r);i.targets.forEach(h=>{_.has(h)||i.observer.unobserve(h)}),_.forEach(h=>{i.targets.has(h)||i.observer.observe(h)}),i.targets=_,typeof MutationObserver<"u"&&!i.mutationObserver&&(i.mutationObserver=new MutationObserver(()=>{e.isConnected&&A(e,M(e))}),i.mutationObserver.observe(e,{childList:!0,subtree:!0,characterData:!0}))})}function A(o,e){let t=0;e.forEach(r=>{t=Math.max(t,r.offsetWidth-r.clientWidth)}),o.style.setProperty("--dialog-hooks-scrollbar",`${Math.min(Do,Math.max(0,t))}px`)}function To(o,e,t){return o===!1?{enabled:!1,scroll:t,class:void 0,contentClass:void 0}:o===!0||o===void 0?{enabled:o===!0?!0:e,scroll:t,class:void 0,contentClass:void 0}:{enabled:o.enabled??e,scroll:o.scroll??t,class:o.class,contentClass:o.contentClass}}function Bo(o,e){if(e)return e;try{const t=o.router.currentRoute.value.meta?.sysMenuData?.icon;if(t)return t}catch{}try{const t=sessionStorage.getItem("permissionStore");if(t){const r=JSON.parse(ko.parse(t).toString(yo));if(r?.activeMenuInfo?.icon)return r.activeMenuInfo.icon}}catch{}try{return mo(W).getActiveMenuInfo?.icon||""}catch{return""}}function Ae(o){return function(t){const r=[],i=()=>r[r.length-1],_=s=>{const a=w(s?.data),k=w(s?.row),y=w(s?.formData),p=s?.id??s?.taskId??s?.selectedId??a?.id??k?.id??y?.id;return p==null||p===""?"":String(p)},h=(s,a,k,y="drawer",p,X=!0)=>{Co();const{icon:Z,hideConfirm:L,hideFooter:oo,dialogBody:eo,...c}=k||{},f=To(eo,o.defaultDialogBody??!0,X),to=`${y}|${typeof s=="string"?s:s?.__name||s?.name||""}|${c.title||""}|${_(a)}`,B=x(!1),$=x(!1),l={open:x(!0),loading:P(()=>B.value||$.value),manualLoading:B,requestLoading:$,requestLoadingIds:new Set,childInstance:x(),app:null,div:null,closing:!1,renderKey:to,actionName:c.title||"确认"},lo=Object.fromEntries(Object.entries(a||{}).map(([n,u])=>[n,w(u)])),ro={...c,class:["dialog-hooks-host",...f.enabled?["dialog-hooks-body-contained"]:[],...f.scroll?[]:["dialog-hooks-no-scroll"],"dialog-hooks-scroll-auto",...Array.isArray(c.class)?c.class:c.class?[c.class]:[]]},ao=c.onClosed,I=typeof c.title=="string"&&c.title,q=I?Bo(o,Z):"",io=()=>d("div",{class:"dialog-hooks-header"},[q?d("div",{class:"dialog-hooks-header-icon"},[d(fo,{modelValue:q})]):null,d("div",{class:"dialog-hooks-header-title"},[c.title]),l.loading.value&&!L?null:d("button",{type:"button",class:"dialog-hooks-header-close",onClick:()=>m(l)},[d(N.Close)])]),g=so(()=>d(y==="drawer"?ho:go,{...ro,modelValue:l.open.value,showClose:I?!1:c.showClose??!0,onClosed(){H(l,!1),R(o,l,!1),Io(l),ao?.();const n=r.indexOf(l);n>-1&&r.splice(n,1),l.app?.unmount(),l.div?.parentNode&&l.div.parentNode.removeChild(l.div),l.app=null,l.div=null},onClose(){m(l)}},{...I?{header:io}:{},default:()=>{const n=d(s,{...lo,loading:l.loading.value,"onUpdate:loading":u=>{l.manualLoading.value=u},ref:l.childInstance});return f.enabled?d(_o,{scroll:f.scroll,class:f.class,contentClass:f.contentClass},{default:()=>n}):n},...oo?{}:{footer:()=>{if(p&&p.length){const n=p.map(u=>typeof u=="function"?u():u);return d("div",{className:"dialog-footer"},n)}return d("div",{className:"dialog-footer"},[d(z,{onClick:()=>m(l),loading:!L&&l.loading.value},"取 消"),L?null:d(z,{type:"primary",onClick:()=>Y(l),loading:l.loading.value},"确 认")])}}}));o.plugins?.forEach(n=>g.use(n)),g.use(co,{locale:po}),g.use(W),g.use(o.router);for(const[n,u]of Object.entries(N))g.component(n,u);uo(g),o.setupApp?.(g);const O=document.createElement("div");return document.body.appendChild(O),l.app=g,l.div=O,r.push(l),Lo(l),H(l,!0),R(o,l,!0),g.mount(O),no(()=>{Ao(document.body),D(document.body),l.childInstance.value?.resetQuery?.(),setTimeout(()=>{D(document.body),window.dispatchEvent(new Event("resize"))},350),setTimeout(()=>D(document.body),1200)}),bo(),{cancel:()=>m(l)}},Y=async s=>{const a=s||i();if(!a)return;const{runBehaviorAction:k}=xo();await k({code:`dialog:${a.renderKey}:confirm`,name:a.actionName||"确认",actionType:"SUBMIT"},async()=>{try{a.manualLoading.value=!0,await a.childInstance.value?.confirm?.(),t&&m(a)}catch{}finally{a.manualLoading.value=!1}})},m=s=>{const a=s||i();!a||!a.open.value||(a.closing=!0,a.open.value=!1)},K=s=>{const a=i();a&&(a.manualLoading.value=s)},J=()=>i()?.loading.value??!1,Q=P(()=>i()?.childInstance.value);return{render:h,cancel:m,setLoading:K,getLoading:J,instance:Q}}}export{Ae as createDialogHooks,Ae as default};
@@ -1,5 +1,6 @@
1
1
  import type { Ref } from 'vue';
2
2
  import type { IWfTaskAskVo } from '../interface/workflow/IWfTaskAskVo';
3
+ import type { IWfTaskVo } from '../interface/workflow/IWfTaskVo';
3
4
  /**
4
5
  * 创建人:xux
5
6
  * 说明: 组件工作流支持
@@ -31,14 +32,62 @@ export interface WorkflowParams {
31
32
  taskName: string;
32
33
  [key: string]: any;
33
34
  }
35
+ /**
36
+ * 工作流办理动作类型:TaskOperation 统一在成功回调里回传,业务侧据此同步自己的业务状态。
37
+ * 与工作流按钮一一对应:complete 同意、refuse 终止、back 驳回、transfer 转办、
38
+ * addMulti 加签、minusMulti 减签、assignee 指定执行人。
39
+ */
40
+ export type WorkflowActionType = 'complete' | 'refuse' | 'back' | 'transfer' | 'addMulti' | 'minusMulti' | 'assignee';
41
+ /**
42
+ * 成功回调的补充上下文:
43
+ * - askVo:本次提交给工作流引擎的参数(撤回、留痕时需要);
44
+ * - originTask:本次动作发生前的工作流任务快照(节点、审批人),用于定位撤回目标节点。
45
+ */
46
+ export interface WorkflowCompleteExtra {
47
+ askVo?: IWfTaskAskVo;
48
+ originTask?: IWfTaskVo;
49
+ }
50
+ /**
51
+ * 业务同步失败的载荷,与成功回调相同的上下文 + 原始异常。
52
+ */
53
+ export interface WorkflowCompleteErrorPayload extends WorkflowCompleteExtra {
54
+ actionType: WorkflowActionType;
55
+ taskVo?: IWfTaskVo;
56
+ originTask?: IWfTaskVo;
57
+ previousAssignees?: string[];
58
+ error: any;
59
+ }
34
60
  export interface ITaskOperate {
35
61
  /**
36
- * 流程操作成功后的回调(组件自己已调用工作流的推进/驳回/终止接口):
37
- * 业务侧在这里做自己的后续逻辑。
38
- * @param taskVo 操作后的任务对象
39
- * @param actionType 本次操作类型:complete / refuse / back / transfer
62
+ * 工作流动作成功后的业务同步回调(组件自己已调用工作流的推进/驳回/终止/转办/加减签接口):
63
+ * 业务侧在这里同步自己的业务数据。
64
+ *
65
+ * 统一组件会 await 本回调,失败按 {@link ITaskOperate.onCompleteError} 或默认撤回策略处理,
66
+ * 不会先提示成功、也不会先关闭弹窗。
67
+ *
68
+ * @param taskVo 动作完成后的任务对象(引擎返回值,可能是下一个节点)
69
+ * @param actionType 本次动作类型:complete / refuse / back / transfer / addMulti / minusMulti / assignee
70
+ * @param extra 本次动作的补充上下文(askVo、originTask)
71
+ */
72
+ workflowComplete: (taskVo?: IWfTaskVo, actionType?: WorkflowActionType, extra?: WorkflowCompleteExtra) => any;
73
+ /**
74
+ * 业务同步失败时的统一处理钩子(可选)。
75
+ * 提供后完全由业务处理(可在其中调用核心包的 revertWorkflowAction 做撤回);
76
+ * 不提供时核心包按 revertOnCompleteError 决定是否自动撤回并提示。
40
77
  */
41
- workflowComplete: (...args: any[]) => any;
78
+ onCompleteError?: (payload: WorkflowCompleteErrorPayload) => any;
79
+ /**
80
+ * 业务同步失败时是否自动尝试撤回本次工作流动作。
81
+ *
82
+ * - 不传(默认):只有会改写业务单据的动作(同意/终止/驳回)才尝试撤回;
83
+ * 转办、加签、减签、指定执行人只是流程内部流转、不改业务数据,失败只提示不撤回;
84
+ * - 传 true:任何动作失败都尝试撤回;
85
+ * - 传 false:只提示失败,完全不撤回。
86
+ *
87
+ * 撤回是“尽力而为”:同意到最后一个节点(流程实例已结束)、终止(实例已停止)在引擎侧
88
+ * 没有可回退的目标节点,只会提示原因,实际补偿仍需后端幂等同步处理。
89
+ */
90
+ revertOnCompleteError?: boolean;
42
91
  /**
43
92
  * 取消按钮文本
44
93
  */
@@ -113,7 +162,9 @@ export interface ITaskOperate {
113
162
  * 2. 驳回(回退到历史节点)/ 转办只流转工作流、不改业务状态,默认展示:未提供回调时由 CheckDialog
114
163
  * 直连工作流引擎(taskReturn / taskTransfer)处理,与安徽中烟保持一致,无需额外的业务接口;
115
164
  * 3. approve / reject / back / transfer 完成后返回 undefined,统一组件会重新拉取当前任务;
116
- * 4. 审批必须经业务接口同步业务状态,不要直接调工作流引擎的 taskComplete / taskReject
165
+ * 4. 审批必须经业务接口同步业务状态,不要直接调工作流引擎的 taskComplete / taskReject
166
+ * 5. workflowComplete 由统一组件 await:业务同步失败时走 onCompleteError(未提供则核心包
167
+ * 尽力撤回本次工作流动作并提示),避免“流程成功、业务数据没落库”且用户看不到失败。
117
168
  */
118
169
  export interface ApprovalOperateOptions {
119
170
  /** 同意:调业务后端审批接口 */
@@ -130,7 +181,11 @@ export interface ApprovalOperateOptions {
130
181
  */
131
182
  beforeApprove?: (vo: IWfTaskAskVo) => Promise<unknown> | unknown;
132
183
  /** 流程办理完成后的业务刷新逻辑 */
133
- onComplete?: (...args: any[]) => any;
184
+ onComplete?: ITaskOperate['workflowComplete'];
185
+ /** 业务同步失败时的统一处理钩子(不提供时核心包按 revertOnCompleteError 自动撤回) */
186
+ onCompleteError?: ITaskOperate['onCompleteError'];
187
+ /** 业务同步失败时是否自动撤回本次工作流动作,默认 true */
188
+ revertOnCompleteError?: boolean;
134
189
  /** 取消按钮回调(默认无) */
135
190
  onCancel?: (...args: any[]) => any;
136
191
  /** 按钮文案覆盖,传空串表示隐藏该按钮 */
@@ -1 +1 @@
1
- function o(e){const n=e.buttonText??{},c={cancelBtnText:n.cancel??"取消",saveBtnText:"",completeBtnText:n.complete??"同意",refuseBtnText:e.reject?n.refuse??"终止":"",backBtnText:n.back??"驳回",transferBtnText:n.transfer??"转办",workflowComplete:e.onComplete??(async()=>{}),cancelFunction:e.onCancel??(async()=>{}),completeFunction:async t=>{await e.approve(t)}};if(e.reject){const t=e.reject;c.refuseFunction=async r=>{await t(r)}}if(e.back){const t=e.back;c.backFunction=async r=>{await t(r)}}if(e.transfer){const t=e.transfer;c.transferFunction=async r=>{await t(r)}}if(e.beforeApprove){const t=e.beforeApprove;c.beforeCompleteFunction=async r=>{const a=await t(r);return a===!1?!1:a&&typeof a=="object"?a:void 0}}return c}function f(e){return{cancelBtnText:"",saveBtnText:"",completeBtnText:"",refuseBtnText:"",backBtnText:"",transferBtnText:"",workflowComplete:e?.onComplete??(async()=>{}),cancelFunction:async()=>{}}}function u(e,n){return{taskOption:e,initByWorkflow:n}}export{o as createApprovalOperate,f as createWorkflowEntryOperate,u as useWorkflowHooks};
1
+ function o(e){const r=e.buttonText??{},c={cancelBtnText:r.cancel??"取消",saveBtnText:"",completeBtnText:r.complete??"同意",refuseBtnText:e.reject?r.refuse??"终止":"",backBtnText:r.back??"驳回",transferBtnText:r.transfer??"转办",workflowComplete:e.onComplete??(async()=>{}),onCompleteError:e.onCompleteError,revertOnCompleteError:e.revertOnCompleteError,cancelFunction:e.onCancel??(async()=>{}),completeFunction:async t=>{await e.approve(t)}};if(e.reject){const t=e.reject;c.refuseFunction=async n=>{await t(n)}}if(e.back){const t=e.back;c.backFunction=async n=>{await t(n)}}if(e.transfer){const t=e.transfer;c.transferFunction=async n=>{await t(n)}}if(e.beforeApprove){const t=e.beforeApprove;c.beforeCompleteFunction=async n=>{const a=await t(n);return a===!1?!1:a&&typeof a=="object"?a:void 0}}return c}function f(e){return{cancelBtnText:"",saveBtnText:"",completeBtnText:"",refuseBtnText:"",backBtnText:"",transferBtnText:"",workflowComplete:e?.onComplete??(async()=>{}),cancelFunction:async()=>{}}}function l(e,r){return{taskOption:e,initByWorkflow:r}}export{o as createApprovalOperate,f as createWorkflowEntryOperate,l as useWorkflowHooks};
@@ -0,0 +1,51 @@
1
+ import type { IWfTaskAskVo } from '../interface/workflow/IWfTaskAskVo';
2
+ import type { IWfTaskVo } from '../interface/workflow/IWfTaskVo';
3
+ import type { ITaskOperate, WorkflowActionType } from './userWorkflowHooks';
4
+ /** 本次业务同步的上下文 */
5
+ export interface WorkflowCompleteContext {
6
+ /** 本次工作流动作类型 */
7
+ actionType: WorkflowActionType;
8
+ /** 动作完成后的工作流任务(引擎返回值,可能是下一个节点) */
9
+ taskVo?: IWfTaskVo;
10
+ /** 动作发生前的工作流任务快照(节点、审批人),撤回时用于定位目标节点 */
11
+ originTask?: IWfTaskVo;
12
+ /** 本次提交给工作流引擎的参数,撤回时用于还原(如转办人) */
13
+ askVo?: IWfTaskAskVo;
14
+ /** 加减签等动作操作前的审批人工号快照(撤回时按差集反向处理) */
15
+ previousAssignees?: string[];
16
+ }
17
+ /** 业务同步失败时传给 onCompleteError 的载荷 */
18
+ export interface WorkflowCompleteErrorPayload extends WorkflowCompleteContext {
19
+ /** 业务同步抛出的原始异常 */
20
+ error: any;
21
+ }
22
+ /** 撤回结果 */
23
+ export interface WorkflowRevertResult {
24
+ /** 是否已成功撤回 */
25
+ reverted: boolean;
26
+ /** 未撤回(或不支持撤回)时的原因,便于提示与排查 */
27
+ reason?: string;
28
+ }
29
+ /**
30
+ * 尽力撤回本次工作流动作。
31
+ *
32
+ * 各动作的支持情况:
33
+ * - `complete`:流程未结束且当前活动任务仍属于本人时可回退,否则返回原因;
34
+ * - `transfer`:可转回原审批人;
35
+ * - `addMulti` / `minusMulti`:提供操作前审批人快照时可反向加减签;
36
+ * - `assignee`:提供操作前审批人快照时可还原;
37
+ * - `back` / `refuse`:引擎侧已回退/已终止,不自动撤回,返回原因走人工或后端补偿。
38
+ */
39
+ export declare function revertWorkflowAction(ctx: WorkflowCompleteContext): Promise<WorkflowRevertResult>;
40
+ /**
41
+ * 统一执行“工作流成功后”的业务同步。
42
+ *
43
+ * 业务侧两种用法:
44
+ * - 由 CheckDialog / AddOrMinusMultiDialog 在引擎动作成功后、`emit('success')` 之前 await 本方法,
45
+ * 这样业务失败时弹窗保持打开、不会误提示成功;
46
+ * - 业务自定义函数(completeFunction 等)内部已同步业务状态时,本方法只是兜底与错误兜底。
47
+ *
48
+ * 失败时抛出原始异常:上层据此保持弹窗/不刷新,并由 {@link ITaskOperate.onCompleteError}
49
+ * 或默认撤回策略完成提示与补救。
50
+ */
51
+ export declare function runWorkflowComplete(operate: ITaskOperate | undefined, ctx: WorkflowCompleteContext): Promise<void>;
@@ -0,0 +1 @@
1
+ import{ElMessage as i}from"element-plus";import o from"../api/workflow/workflowInstApi.js";import{userInfoStore as l}from"../stores/userInfoStore.js";import{frontendBus as f}from"../utils/frontendBus.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"../utils/globalLoading.js";import"vue";import"../utils/workflowTaskContext.js";import"../config/GlobalLoadingConfig.js";import"pinia";import"../utils/userSessionStorage.js";const c="业务数据处理失败,系统自动撤回本次审批",m=["complete","refuse","back"],p=()=>l().getUserInfo?.userCode||"",k=e=>String(e?.msg||e?.message||e||"业务数据处理失败"),d=e=>k(e?.response?.data??e),g=async e=>((await o.getTaskCandidate(e))?.candidate||[]).map(s=>s?.loginName).filter(s=>!!s),v=async e=>{const r=e.askVo?.procInsId||e.originTask?.procInsId||e.taskVo?.procInsId;if(r)return(await o.getProcessTaskList(r))?.activeTasks||[];const s=e.originTask?.businessId||e.taskVo?.businessId;if(!s)return[];const t=await o.getWfTaskByBusinessId(s);return t?.procEndTime||!t?.taskId?[]:[t]},I=async e=>{const r=e.originTask?.taskDefKey||e.taskVo?.taskDefKey;if(!r)return{reverted:!1,reason:"缺少本次审批的节点标识"};const s=p(),t=await v(e);if(!t.length)return{reverted:!1,reason:"流程已结束,无法回退"};const a=t.find(u=>u.assigneeId&&u.assigneeId===s),n=a||t[0];return n?.taskId?!a&&n.assigneeId&&s?{reverted:!1,reason:`流程已流转给 ${n.assigneeName||n.assigneeId}`}:(await o.taskReturn({taskId:n.taskId,userId:s,targetKey:r,comment:c}),{reverted:!0}):{reverted:!1,reason:"当前没有可回退的活动任务"}},w=async e=>{const r=e.taskVo?.taskId||e.originTask?.taskId,s=e.askVo?.userId;return r?s?(await o.taskTransfer({taskId:r,userId:s,assignee:s,comment:c}),{reverted:!0}):{reverted:!1,reason:"缺少原审批人信息"}:{reverted:!1,reason:"缺少工作流任务标识"}},T=async e=>{const r=e.taskVo?.taskId||e.originTask?.taskId,s=e.previousAssignees||[];if(!r)return{reverted:!1,reason:"缺少工作流任务标识"};if(!s.length)return{reverted:!1,reason:"未记录操作前的审批人"};const t=await g(r),a=e.actionType==="addMulti"?t.filter(n=>!s.includes(n)):s.filter(n=>!t.includes(n));return a.length?(await o.addOrMinusAssignee({taskId:r,assignee:a,type:e.actionType==="addMulti"?"minusMulti":"addMulti"}),{reverted:!0}):{reverted:!1,reason:"未识别到需要还原的审批人"}},y=async e=>{const r=e.taskVo?.taskId||e.originTask?.taskId,s=e.previousAssignees||[];return r?s.length?(await o.setAssigneeList([{taskId:r,assignee:s,type:"assignee"}]),{reverted:!0}):{reverted:!1,reason:"未记录操作前的审批人"}:{reverted:!1,reason:"缺少工作流任务标识"}};async function C(e){try{switch(e.actionType){case"complete":return await I(e);case"transfer":return await w(e);case"addMulti":case"minusMulti":return await T(e);case"assignee":return await y(e);case"refuse":return{reverted:!1,reason:"流程已终止,无法自动撤回"};case"back":return{reverted:!1,reason:"流程已回退,无法自动撤回"};default:return{reverted:!1,reason:"该动作不支持自动撤回"}}}catch(r){return{reverted:!1,reason:d(r)}}}const E=async e=>{const r=d(e.error),s=await C(e);if(s.reverted){f.emit("todoRefresh"),f.emit("homePageRefresh"),i.warning(`业务数据处理失败:${r};已自动撤回本次审批,请关闭后重新办理`);return}i.warning(`业务数据处理失败:${r};自动撤回未执行(${s.reason||"未知原因"}),请刷新后联系管理员处理`)};async function G(e,r){const s=e?.workflowComplete,t={askVo:r.askVo,originTask:r.originTask};try{typeof s=="function"&&await s(r.taskVo,r.actionType,t)}catch(a){const n={...r,error:a};throw typeof e?.onCompleteError=="function"?await e.onCompleteError(n):e?.revertOnCompleteError===!0||e?.revertOnCompleteError!==!1&&m.includes(r.actionType)?await E(n):i.warning(`业务数据处理失败:${d(a)}`),a}}export{C as revertWorkflowAction,G as runWorkflowComplete};
@@ -27,6 +27,15 @@ export interface IWfTaskQueryVo {
27
27
  params?: {
28
28
  [key: string]: any;
29
29
  };
30
+ /**
31
+ * 是否按流程实例分页(已办列表“按流程收纳”:true 时一单一行,
32
+ * 分页与总数都按流程实例统计,同一单的多个节点不会被分页切开)
33
+ */
34
+ groupByInstance?: boolean;
35
+ /**
36
+ * 流程实例ID(已办按实例收纳后,展开某行时取该实例下我的节点明细)
37
+ */
38
+ procInstId?: string;
30
39
  current: number;
31
40
  size: number;
32
41
  }