adtec-hnyzfc-core-package 1.6.7 → 1.6.9

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.
@@ -116,6 +116,7 @@ declare const _default: import("vue").DefineComponent<globalThis.ExtractPropType
116
116
  confirm: (autoDelete?: boolean) => Promise<void>;
117
117
  hasFiles: () => boolean;
118
118
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
119
+ change: (...args: any[]) => void;
119
120
  success: (...args: any[]) => void;
120
121
  "update:loading": (value: boolean | undefined) => void;
121
122
  "update:uploadFilesList": (value: ISysUploadFiles[]) => void;
@@ -231,6 +232,7 @@ declare const _default: import("vue").DefineComponent<globalThis.ExtractPropType
231
232
  type: globalThis.PropType<boolean>;
232
233
  };
233
234
  }>> & Readonly<{
235
+ onChange?: ((...args: any[]) => any) | undefined;
234
236
  onSuccess?: ((...args: any[]) => any) | undefined;
235
237
  "onUpdate:loading"?: ((value: boolean | undefined) => any) | undefined;
236
238
  "onUpdate:uploadFilesList"?: ((value: ISysUploadFiles[]) => any) | undefined;
@@ -1 +1 @@
1
- import{defineComponent as me,ref as _,computed as k,useModel as H,resolveComponent as h,resolveDirective as pe,openBlock as y,createElementBlock as C,normalizeClass as fe,Fragment as ve,renderList as ge,createVNode as p,withCtx as f,createElementVNode as U,unref as J,toDisplayString as E,withDirectives as ye,createBlock as A,createTextVNode as N,createCommentVNode as W,normalizeStyle as he,withModifiers as we,mergeModels as q}from"vue";import{UploadFilled as xe}from"@element-plus/icons-vue";import{ElMessage as c,ElMessageBox as _e}from"element-plus";import Ce from"../../hooks/useFileView.js";import b from"../../api/DocumentApi.js";import F from"../../utils/FrameworkUtils.js";import{confirmDelete as Fe}from"../../hooks/useDeleteConfirmHooks.js";import{userInfoStore as Be}from"../../stores/userInfoStore.js";import{getAcceptString as ke}from"../../utils/uploadAccept.js";import{buildUploadHeaders as Ue}from"../../utils/buildUploadHeaders.js";import{_ as Ee}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../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"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"xlsx-js-style";import"../../hooks/useBehaviorAction.js";import"pinia";import"../../utils/userSessionStorage.js";const be={key:0},Se=["onClick"],Me={key:1,style:{"text-align":"center",color:"var(--el-disabled-text-color)"}},Ie={class:"el-upload__tip"},De=me({__name:"CustomElUpload",props:q({limit:{type:Number,default:1},vertical:{type:Boolean,default:!1},accept:{type:String,default:""},business:{type:String,default:"default"},businessId:{type:String,default:"default"},isEdit:{type:Boolean,default:!0},association:{type:Boolean,default:!1},size:{type:Number,default:50},itemWidth:{type:String,default:"100%"},isConfirmDelete:{type:Boolean,default:!1},overwrite:{type:Boolean,default:!0},autoUpload:{type:Boolean,default:!0},showOptMessage:{type:Boolean,default:!0},showLoading:{type:Boolean,default:!0},watermarkCode:{type:String,default:()=>{}},readonlyFileIds:{type:Array,default:()=>[]},fileOwnerAccounts:{type:Array,default:()=>[]},uploadCreateBy:{type:String,default:""}},{uploadFilesList:{default:[]},uploadFilesListModifiers:{},loading:{type:Boolean},loadingModifiers:{}}),emits:q(["success"],["update:uploadFilesList","update:loading"]),setup(d,{expose:K,emit:Q}){const{fileView:R}=Ce(),$=Q,X=Be(),v=_(),m=_([]),w=_(""),S=_([]),o=d,O=k(()=>"/api/doc/uploadFile/"+o.business+"/"+o.businessId+"/"+o.association+(o.watermarkCode?"?watermarkCode="+o.watermarkCode:"")),Y=k(()=>Ue(O.value)),n=H(d,"uploadFilesList"),Z=e=>{w.value=e},ee=()=>{w.value=""},M=k(()=>ke(o.accept)),V=e=>{const t=e.split(".").pop()+"";return".jpg,.jpeg,.png,.gif,.bmp,.JPG,.JPEG,.PBG,.GIF,.BMP".includes(t)?"adtec-image":"txt".includes(t)?"adtec-text":"pdf".includes(t)?"adtec-pdf":"doc,docx".includes(t)?"adtec-word":"xls,xlsx".includes(t)?"adtec-excel":"ppt,pptx".includes(t)?"adtec-ppt":"adtec-text"},te=async e=>{const t=o.uploadCreateBy?.trim(),l=e.id!=null?String(e.id):"";if(!t||!l)return e;try{await b.updateFilesCreateBy([l],t),e.createBy=t}catch(a){F.messageError(a)}return e},ae=async(e,t,l)=>{if(e.code==="0"){const a=await te(e.data);n.value.push(a)}else c.error(e.msg),v.value?.handleRemove(t);for(let a=r.value.length-1;a>=0;a--)r.value[a]===t.name&&r.value.splice(a,1);e.code==="0"&&(o.showOptMessage&&c.success("上传成功"),$("success",{files:n.value,deleteFiles:m.value})),r.value.length===0&&(g.value=!1,G(e.code==="0"?void 0:new Error(e.msg||"上传失败")))},g=H(d,"loading"),r=_([]);let I,D;const j=k(()=>S.value.some(e=>e.status!=="success"&&e.status!=="fail")),le=()=>n.value.length>0||j.value,G=e=>{r.value.length>0||(e?D?.(e):I?.(),I=void 0,D=void 0)},L=async e=>{if(n.value.find(i=>i.name===e.name))return c.warning(e.name+",文件已存在"),!1;if(e.size>o.size*1024*1024)return c.warning("文件大小不能超过"+o.size+"MB"),!1;const l=M.value?.split(",").map(i=>i.slice(1).toLowerCase()),a=e.name.split(".").pop()?.toLowerCase();return l&&!l.includes(a??"")?(c.error(`文件 ${e.name} 格式不支持,仅允许 ${M.value}!`),setTimeout(()=>{v.value?.clearFiles(["ready"])},1),!1):(r.value.includes(e.name)||r.value.push(e.name),!0)},B=e=>{const t=e?.id!=null?String(e.id):"";return!!t&&o.readonlyFileIds.includes(t)},oe=e=>{if(B(e))return!1;if(!e?.createBy?.trim())return!0;const t=o.fileOwnerAccounts?.map(l=>l.trim()).filter(Boolean)??[];return t.length>0?t.includes(e.createBy.trim()):X.getUserInfo.userCode===e.createBy},se=async e=>{if(B(e)){c.warning("该附件非您上传,无法预览或删除");return}if(e.name===w.value){if(e.createBy&&!oe(e)){c.warning("您没有权限删除此文件!");return}if(o.isConfirmDelete)v.value?.handleRemove(e);else if(!await Fe({message:"删除不可恢复!您确定删除此附件?",title:"提示",request:()=>v.value?.handleRemove(e),successMessage:!1}))return}else P(e)},ne=(e,t)=>{S.value=t},ie=async(e,t)=>{if(o.limit===1&&o.overwrite&&n.value.length>=1){const l=[...n.value],a=l[0];if(!o.isConfirmDelete){if(!await _e.confirm("只允许上传一个附件,是否点击确定覆盖原有附件?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}))return;try{g.value=!0,await b.delSysUploadFile(a.id).catch(u=>{F.messageError(u)})}catch(u){F.messageError(u);return}finally{g.value=!1}}n.value=[],v.value?.clearFiles(),e.length>0?await L(e[0])?(o.isConfirmDelete&&l.forEach(u=>{m.value.some(x=>x.id===u.id)||m.value.push(u)}),v.value?.handleStart(e[0]),o.autoUpload&&v.value?.submit()):n.value.push(...l):l.forEach(i=>{m.value.some(u=>u.id===i.id)||m.value.push(i)})}else c.warning(`最多上传${o.limit}个文件,上传文件数量已达到限制`)},re=(e,t,l)=>{c.error("上传失败");for(let a=r.value.length-1;a>=0;a--)r.value[a]===t.name&&r.value.splice(a,1);r.value.length===0&&(g.value=!1,G(e))},P=async e=>{const t=n.value.find(l=>l.name===e.name);if(t){if(B(t)){c.warning("该附件非您上传,无法预览或删除");return}R(t.id)}},T=async(e,t=!0)=>{const l=n.value.find(a=>a.name===e.name);if(!(!l||B(l)))try{o.isConfirmDelete?m.value.push(l):await b.delSysUploadFile(l.id),n.value.splice(n.value.indexOf(l),1)}catch(a){F.messageError(a)}},ue=(e,t)=>{g.value=!0};return K({remove:T,confirm:async(e=!0)=>{try{if(g.value=!0,o.isConfirmDelete&&m.value.length>0&&e&&(await b.delSysUploadFiles(m.value.map(t=>t.id)),m.value=[]),!o.autoUpload)if(j.value){const t=S.value.filter(a=>a.status!=="success"&&a.status!=="fail");for(const a of t)if(!a.raw||!await L(a.raw))throw new Error("待上传文件校验失败");const l=new Promise((a,i)=>{I=a,D=i});v.value?.submit(),await l}else o.showOptMessage&&c.success("操作成功"),$("success",{files:n.value,deleteFiles:m.value});g.value=!1}catch(t){throw F.messageError(t),g.value=!1,t}},hasFiles:le}),(e,t)=>{const l=h("el-icons"),a=h("el-tooltip"),i=h("el-icon"),u=h("el-text"),x=h("el-flex"),ce=h("el-upload"),de=pe("loading");return d.isEdit?ye((y(),A(ce,{key:1,ref_key:"ref_upload",ref:v,"file-list":n.value,onSuccess:ae,onRemove:T,onPreview:P,"auto-upload":d.autoUpload,onChange:ne,onError:re,onExceed:ie,onProgress:ue,"before-upload":L,drag:"",accept:M.value,action:O.value,multiple:"",limit:d.limit,headers:Y.value},{file:f(({file:s})=>[p(x,{class:"file-class",onMousemove:z=>Z(s.name),onMouseout:ee,onClick:z=>P(s),height:"20px",width:d.itemWidth},{default:f(()=>[p(x,{align:"center",justify:"flex-start",style:{overflow:"hidden"}},{default:f(()=>[p(a,{class:"box-item",content:s.name,placement:"top"},{default:f(()=>[p(u,{truncated:"",style:{cursor:"pointer"}},{default:f(()=>[p(l,{"model-value":V(s.name),style:{"margin-right":"5px"}},null,8,["model-value"]),N(" "+E(s.name),1)]),_:2},1024)]),_:2},1032,["content"])]),_:2},1024),p(x,{align:"center",justify:"flex-end",width:"50px"},{default:f(()=>[!s?.businessId&&s.percentage!==100?(y(),A(u,{key:0},{default:f(()=>[N(E(s.percentage)+"% ",1)]),_:2},1024)):W("v-if",!0),s?.businessId||s.percentage===100?(y(),A(l,{key:1,onClick:we(z=>se(s),["prevent","stop"]),"model-value":s.name===w.value?"adtec-close":"adtec-success",style:he([{color:"var(--el-color-success)","font-size":"14px"},{color:s.name===w.value?"var(--el-color-danger)":"var(--el-color-success)"}])},null,8,["onClick","model-value","style"])):W("v-if",!0)]),_:2},1024)]),_:2},1032,["onMousemove","onClick","width"])]),default:f(()=>[p(i,{class:"el-icon--upload"},{default:f(()=>[p(J(xe))]),_:1}),t[0]||(t[0]=U("div",{class:"el-upload__text"},[N("拖动文件或"),U("em",null,"点击上传")],-1)),U("div",Ie,"最大上传文件大小"+E(d.size)+"MB",1)]),_:1},8,["file-list","auto-upload","accept","action","limit","headers"])),[[de,d.showLoading&&g.value]]):(y(),C("div",be,[n.value?.length?(y(),C("div",{key:0,class:fe(["readonly-file-list",{"is-vertical":d.vertical}])},[(y(!0),C(ve,null,ge(n.value,s=>(y(),C("div",{key:s.id,class:"file-item"},[p(l,{"model-value":V(s.name),style:{"margin-right":"5px"}},null,8,["model-value"]),p(a,{content:s.name,placement:"top"},{default:f(()=>[U("span",{class:"link-name",onClick:z=>J(R)(s.id)},E(s.name),9,Se)]),_:2},1032,["content"])]))),128))],2)):(y(),C("div",Me,"暂无附件"))]))}}}),dt=Ee(De,[["__scopeId","data-v-dcbcaba7"]]);export{dt as default};
1
+ import{defineComponent as pe,ref as C,computed as E,useModel as J,resolveComponent as h,resolveDirective as fe,openBlock as y,createElementBlock as F,normalizeClass as ve,Fragment as ge,renderList as ye,createVNode as p,withCtx as f,createElementVNode as S,unref as W,toDisplayString as b,withDirectives as he,createBlock as R,createTextVNode as $,createCommentVNode as q,normalizeStyle as we,withModifiers as xe,mergeModels as K}from"vue";import{UploadFilled as _e}from"@element-plus/icons-vue";import{ElMessage as c,ElMessageBox as Ce}from"element-plus";import Fe from"../../hooks/useFileView.js";import M from"../../api/DocumentApi.js";import B from"../../utils/FrameworkUtils.js";import{confirmDelete as Be}from"../../hooks/useDeleteConfirmHooks.js";import{userInfoStore as ke}from"../../stores/userInfoStore.js";import{getAcceptString as Ue}from"../../utils/uploadAccept.js";import{buildUploadHeaders as Ee}from"../../utils/buildUploadHeaders.js";import{_ as Se}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../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"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"xlsx-js-style";import"../../hooks/useBehaviorAction.js";import"pinia";import"../../utils/userSessionStorage.js";const be={key:0},Me=["onClick"],Ie={key:1,style:{"text-align":"center",color:"var(--el-disabled-text-color)"}},Le={class:"el-upload__tip"},De=pe({__name:"CustomElUpload",props:K({limit:{type:Number,default:1},vertical:{type:Boolean,default:!1},accept:{type:String,default:""},business:{type:String,default:"default"},businessId:{type:String,default:"default"},isEdit:{type:Boolean,default:!0},association:{type:Boolean,default:!1},size:{type:Number,default:50},itemWidth:{type:String,default:"100%"},isConfirmDelete:{type:Boolean,default:!1},overwrite:{type:Boolean,default:!0},autoUpload:{type:Boolean,default:!0},showOptMessage:{type:Boolean,default:!0},showLoading:{type:Boolean,default:!0},watermarkCode:{type:String,default:()=>{}},readonlyFileIds:{type:Array,default:()=>[]},fileOwnerAccounts:{type:Array,default:()=>[]},uploadCreateBy:{type:String,default:""}},{uploadFilesList:{default:[]},uploadFilesListModifiers:{},loading:{type:Boolean},loadingModifiers:{}}),emits:K(["success","change"],["update:uploadFilesList","update:loading"]),setup(d,{expose:Q,emit:X}){const{fileView:O}=Fe(),I=X,Y=ke(),v=C(),m=C([]),w=C(""),x=C([]),k=e=>{x.value=e,I("change",e)},o=d,V=E(()=>"/api/doc/uploadFile/"+o.business+"/"+o.businessId+"/"+o.association+(o.watermarkCode?"?watermarkCode="+o.watermarkCode:"")),Z=E(()=>Ee(V.value)),n=J(d,"uploadFilesList"),ee=e=>{w.value=e},te=()=>{w.value=""},L=E(()=>Ue(o.accept)),j=e=>{const t=e.split(".").pop()+"";return".jpg,.jpeg,.png,.gif,.bmp,.JPG,.JPEG,.PBG,.GIF,.BMP".includes(t)?"adtec-image":"txt".includes(t)?"adtec-text":"pdf".includes(t)?"adtec-pdf":"doc,docx".includes(t)?"adtec-word":"xls,xlsx".includes(t)?"adtec-excel":"ppt,pptx".includes(t)?"adtec-ppt":"adtec-text"},ae=async e=>{const t=o.uploadCreateBy?.trim(),l=e.id!=null?String(e.id):"";if(!t||!l)return e;try{await M.updateFilesCreateBy([l],t),e.createBy=t}catch(a){B.messageError(a)}return e},le=async(e,t,l)=>{if(e.code==="0"){const a=await ae(e.data);n.value.push(a)}else c.error(e.msg),v.value?.handleRemove(t);for(let a=r.value.length-1;a>=0;a--)r.value[a]===t.name&&r.value.splice(a,1);e.code==="0"&&(o.showOptMessage&&c.success("上传成功"),I("success",{files:n.value,deleteFiles:m.value})),r.value.length===0&&(g.value=!1,T(e.code==="0"?void 0:new Error(e.msg||"上传失败")))},g=J(d,"loading"),r=C([]);let D,P;const G=E(()=>x.value.some(e=>e.status!=="success"&&e.status!=="fail")),oe=()=>n.value.length>0||G.value,T=e=>{r.value.length>0||(e?P?.(e):D?.(),D=void 0,P=void 0)},z=async e=>{if(n.value.find(i=>i.name===e.name))return c.warning(e.name+",文件已存在"),!1;if(e.size>o.size*1024*1024)return c.warning("文件大小不能超过"+o.size+"MB"),!1;const l=L.value?.split(",").map(i=>i.slice(1).toLowerCase()),a=e.name.split(".").pop()?.toLowerCase();return l&&!l.includes(a??"")?(c.error(`文件 ${e.name} 格式不支持,仅允许 ${L.value}!`),setTimeout(()=>{v.value?.clearFiles(["ready"]),k(x.value.filter(i=>i.status!=="ready"))},1),!1):(r.value.includes(e.name)||r.value.push(e.name),!0)},U=e=>{const t=e?.id!=null?String(e.id):"";return!!t&&o.readonlyFileIds.includes(t)},se=e=>{if(U(e))return!1;if(!e?.createBy?.trim())return!0;const t=o.fileOwnerAccounts?.map(l=>l.trim()).filter(Boolean)??[];return t.length>0?t.includes(e.createBy.trim()):Y.getUserInfo.userCode===e.createBy},ne=async e=>{if(U(e)){c.warning("该附件非您上传,无法预览或删除");return}if(e.name===w.value){if(e.createBy&&!se(e)){c.warning("您没有权限删除此文件!");return}if(o.isConfirmDelete)v.value?.handleRemove(e);else if(!await Be({message:"删除不可恢复!您确定删除此附件?",title:"提示",request:()=>v.value?.handleRemove(e),successMessage:!1}))return}else A(e)},ie=(e,t)=>{k(t)},re=async(e,t)=>{if(o.limit===1&&o.overwrite&&n.value.length>=1){const l=[...n.value],a=l[0];if(!o.isConfirmDelete){if(!await Ce.confirm("只允许上传一个附件,是否点击确定覆盖原有附件?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}))return;try{g.value=!0,await M.delSysUploadFile(a.id).catch(u=>{B.messageError(u)})}catch(u){B.messageError(u);return}finally{g.value=!1}}n.value=[],v.value?.clearFiles(),k([]),e.length>0?await z(e[0])?(o.isConfirmDelete&&l.forEach(u=>{m.value.some(_=>_.id===u.id)||m.value.push(u)}),v.value?.handleStart(e[0]),o.autoUpload&&v.value?.submit()):n.value.push(...l):l.forEach(i=>{m.value.some(u=>u.id===i.id)||m.value.push(i)})}else c.warning(`最多上传${o.limit}个文件,上传文件数量已达到限制`)},ue=(e,t,l)=>{c.error("上传失败");for(let a=r.value.length-1;a>=0;a--)r.value[a]===t.name&&r.value.splice(a,1);r.value.length===0&&(g.value=!1,T(e))},A=async e=>{const t=n.value.find(l=>l.name===e.name);if(t){if(U(t)){c.warning("该附件非您上传,无法预览或删除");return}O(t.id)}},H=async(e,t=!0)=>{k(x.value.filter(a=>a.uid!==e.uid));const l=n.value.find(a=>a.name===e.name);if(!(!l||U(l)))try{o.isConfirmDelete?m.value.push(l):await M.delSysUploadFile(l.id),n.value.splice(n.value.indexOf(l),1)}catch(a){B.messageError(a)}},ce=(e,t)=>{g.value=!0};return Q({remove:H,confirm:async(e=!0)=>{try{if(g.value=!0,o.isConfirmDelete&&m.value.length>0&&e&&(await M.delSysUploadFiles(m.value.map(t=>t.id)),m.value=[]),!o.autoUpload)if(G.value){const t=x.value.filter(a=>a.status!=="success"&&a.status!=="fail");for(const a of t)if(!a.raw||!await z(a.raw))throw new Error("待上传文件校验失败");const l=new Promise((a,i)=>{D=a,P=i});v.value?.submit(),await l}else o.showOptMessage&&c.success("操作成功"),I("success",{files:n.value,deleteFiles:m.value});g.value=!1}catch(t){throw B.messageError(t),g.value=!1,t}},hasFiles:oe}),(e,t)=>{const l=h("el-icons"),a=h("el-tooltip"),i=h("el-icon"),u=h("el-text"),_=h("el-flex"),de=h("el-upload"),me=fe("loading");return d.isEdit?he((y(),R(de,{key:1,ref_key:"ref_upload",ref:v,"file-list":n.value,onSuccess:le,onRemove:H,onPreview:A,"auto-upload":d.autoUpload,onChange:ie,onError:ue,onExceed:re,onProgress:ce,"before-upload":z,drag:"",accept:L.value,action:V.value,multiple:"",limit:d.limit,headers:Z.value},{file:f(({file:s})=>[p(_,{class:"file-class",onMousemove:N=>ee(s.name),onMouseout:te,onClick:N=>A(s),height:"20px",width:d.itemWidth},{default:f(()=>[p(_,{align:"center",justify:"flex-start",style:{overflow:"hidden"}},{default:f(()=>[p(a,{class:"box-item",content:s.name,placement:"top"},{default:f(()=>[p(u,{truncated:"",style:{cursor:"pointer"}},{default:f(()=>[p(l,{"model-value":j(s.name),style:{"margin-right":"5px"}},null,8,["model-value"]),$(" "+b(s.name),1)]),_:2},1024)]),_:2},1032,["content"])]),_:2},1024),p(_,{align:"center",justify:"flex-end",width:"50px"},{default:f(()=>[!s?.businessId&&s.percentage!==100?(y(),R(u,{key:0},{default:f(()=>[$(b(s.percentage)+"% ",1)]),_:2},1024)):q("v-if",!0),s?.businessId||s.percentage===100?(y(),R(l,{key:1,onClick:xe(N=>ne(s),["prevent","stop"]),"model-value":s.name===w.value?"adtec-close":"adtec-success",style:we([{color:"var(--el-color-success)","font-size":"14px"},{color:s.name===w.value?"var(--el-color-danger)":"var(--el-color-success)"}])},null,8,["onClick","model-value","style"])):q("v-if",!0)]),_:2},1024)]),_:2},1032,["onMousemove","onClick","width"])]),default:f(()=>[p(i,{class:"el-icon--upload"},{default:f(()=>[p(W(_e))]),_:1}),t[0]||(t[0]=S("div",{class:"el-upload__text"},[$("拖动文件或"),S("em",null,"点击上传")],-1)),S("div",Le,"最大上传文件大小"+b(d.size)+"MB",1)]),_:1},8,["file-list","auto-upload","accept","action","limit","headers"])),[[me,d.showLoading&&g.value]]):(y(),F("div",be,[n.value?.length?(y(),F("div",{key:0,class:ve(["readonly-file-list",{"is-vertical":d.vertical}])},[(y(!0),F(ge,null,ye(n.value,s=>(y(),F("div",{key:s.id,class:"file-item"},[p(l,{"model-value":j(s.name),style:{"margin-right":"5px"}},null,8,["model-value"]),p(a,{content:s.name,placement:"top"},{default:f(()=>[S("span",{class:"link-name",onClick:N=>W(O)(s.id)},b(s.name),9,Me)]),_:2},1032,["content"])]))),128))],2)):(y(),F("div",Ie,"暂无附件"))]))}}}),mt=Se(De,[["__scopeId","data-v-dbd35e1f"]]);export{mt as default};
@@ -1,10 +1,10 @@
1
- import{defineComponent as tt,useModel as st,ref as S,computed as w,onMounted as ot,onBeforeUnmount as nt,resolveComponent as T,resolveDirective as at,openBlock as n,createElementBlock as r,createCommentVNode as l,createBlock as b,Teleport as rt,unref as C,toDisplayString as d,withDirectives as lt,normalizeStyle as Ie,normalizeClass as O,createElementVNode as c,Fragment as k,renderList as B,createVNode as K,createTextVNode as x,renderSlot as it,resolveDynamicComponent as ct,mergeProps as dt,withCtx as $,mergeModels as Te,nextTick as ut}from"vue";import{ElMessageBox as pt,ElMessage as ft}from"element-plus";import j from"../../api/workflow/workflowInstApi.js";import kt from"../../api/DocumentApi.js";import mt from"../../hooks/useFileView.js";import vt from"../../hooks/useDictHooks.js";import be from"../../utils/FrameworkUtils.js";import wt from"../../hooks/useWorkflowSnapshot.js";import{parseDateTime as ee,formatDateTime as te}from"../../utils/dateTime.js";import{formatStayDuration as se,resolveTimeoutMeta as yt}from"../../utils/flowTimeout.js";import{userInfoStore as F}from"../../stores/userInfoStore.js";import _t from"./TaskOperation.vue.js";import{_ as ht}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/request.js";import"../../utils/AxiosConfig.js";import"axios";import"../../utils/uuid.js";import"uuid";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/behaviorContext.js";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"../../api/SysDictCacheApi.js";import"../../stores/dictStore.js";import"pinia";import"../../utils/userSessionStorage.js";import"xlsx-js-style";import"./components/SelectAssigneeDialog.vue.js";import"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import"../business/comp.userForm.vue.js";import"@vueuse/core";import"../../api/DeptInfoApi.js";import"../../api/EmployeeInfoApi.js";import"../../hooks/useResetRefHooks.js";import"../../config/vxeSelectColumn.js";import"../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"../../api/SysUserApi.js";import"./components/CheckDialog.vue.js";import"../bpmntree/components/UserSelector/UserTag.vue.js";import"../upload/CustomElUpload.vue.js";import"@element-plus/icons-vue";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/uploadAccept.js";import"../../utils/buildUploadHeaders.js";import"../../hooks/workflowCompleteRunner.js";import"../../hooks/workflowTodo.js";import"../../hooks/usePermissionHooks.js";import"vue-router";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../../utils/routeMetaParams.js";import"../../hooks/useOpenNewMenu.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const gt={key:0,class:"workflow-todo-shell__source-label"},It={class:"workflow-todo-shell__body dialog-content-fill"},Tt={key:0,class:"workflow-todo-shell__source-fallback"},bt={class:"wf-wait__icon"},Ct={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},xt={class:"wf-wait__main"},Et={class:"wf-wait__title"},Nt={class:"wf-wait__sub"},Dt={key:0,class:"wf-wait__opinion"},St={key:1,class:"wf-wait__files"},Bt=["onClick"],Kt={key:0},Lt={key:1,class:"wf-progress-scroll"},Mt={class:"wf-progress-steps"},$t={class:"wf-progress-step__icon-wrap"},At={class:"wf-progress-step__icon"},Ot={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},jt={key:4},Ft={class:"wf-progress-step__name"},Vt={class:"wf-progress-step__name-text"},Ut={class:"wf-progress-step__name-label"},Pt={key:0,class:"wf-progress-step__occurrence"},Wt={key:0,class:"workflow-todo-shell__record-occurrence"},Rt={key:1,class:"workflow-todo-shell__record-type"},zt={key:0,class:"workflow-todo-shell__record-user"},Ht={class:"workflow-todo-shell__record-person__name"},Qt={key:0,class:"workflow-todo-shell__comment"},qt={key:0,class:"workflow-todo-shell__record-files"},Gt=["onClick"],Yt={class:"workflow-todo-shell__record-person__name"},Jt={key:0,class:"workflow-todo-shell__comment"},Xt={key:1,class:"workflow-todo-shell__record-files"},Zt=["onClick"],es={class:"workflow-todo-shell__record-person__name"},ts={key:1,class:"workflow-todo-shell__footer"},Ce="__end__",ss=tt({__name:"WorkflowTodoShell",props:Te({taskId:{},taskInfo:{default:void 0},readonly:{type:Boolean,default:!1},contentComponent:{default:void 0},contentProps:{default:()=>({})},renderDialog:{type:Function,default:void 0},showFooter:{type:Boolean,default:!0},withdrawEnabled:{type:Boolean,default:!1}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:Te(["cancel","success"],["update:loading"]),setup(E,{expose:xe,emit:Ee}){const u=E,V=Ee,L=st(E,"loading"),v=S(),_=S(),W=S(),R=S(!1),{getDictTypeData:Ne}=vt(["SysFlowTimeout"]),De=e=>[...e].sort((t,s)=>(t.createTime||"").localeCompare(s.createTime||"")),z=w(()=>De([..._.value?.hisTasks||[],..._.value?.activeTasks||[]])),H=S({}),Q=mt().fileView,q=e=>{const t=(e.split(".").pop()||"").toLowerCase();return".jpg,.jpeg,.png,.gif,.bmp".includes(t)?"adtec-image":t==="pdf"?"adtec-pdf":t==="doc"||t==="docx"?"adtec-word":t==="xls"||t==="xlsx"?"adtec-excel":t==="ppt"||t==="pptx"?"adtec-ppt":"adtec-text"},N=e=>e?H.value[e]||[]:[],Se=async()=>{var t;const e=Array.from(new Set(z.value.map(s=>s.taskId).filter(s=>!!s)));if(e.length)try{const s=await kt.getUpLoadFilesByBussinessIds(e),o={};for(const i of s)i.businessId&&(o[t=i.businessId]||(o[t]=[])).push(i);H.value=o}catch{H.value={}}},G=w(()=>{const e=new Map;for(const t of z.value){const s=he(t),o=e.get(s);o?o.tasks.push(t):e.set(s,{taskName:t.taskName,taskDefKey:t.taskDefKey,parentExecutionId:t.parentExecutionId,tasks:[t],approvalType:t.approvalType})}return Array.from(e.values())}),U=w(()=>v.value?.procEndTime?!0:!!(_.value&&!(_.value.activeTasks||[]).length&&(_.value.hisTasks||[]).length)),Be=e=>/^#[0-9a-fA-F]{6}$/.test(e)?`${e}1f`:"var(--el-color-primary-light-9)",oe={ok:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)"},ne={ok:"var(--el-color-success-light-9)",warning:"var(--el-color-warning-light-9)",danger:"var(--el-color-danger-light-9)"},Ke=e=>e==="danger"?"danger":e==="warning"?"warning":"ok",ae=e=>e==="danger"?"close":e==="warning"?"back":"check",Le=e=>!e||e.startsWith("已")?e:`已${e}`,Y=w(()=>String(v.value?.finishedResult||"")==="terminate"||String(v.value?.processStatus||"")==="terminated"),J=w(()=>z.value.find(e=>!!u.taskId&&e.taskId===u.taskId)),re=e=>!!e?.assigneeId&&e.assigneeId===F().getUserInfo.userCode,Me=w(()=>{const e=F().getUserInfo.userCode;if(!e)return!1;const t=J.value;return t?.taskLocalVars?.firstTask?re(t):!t&&u.taskInfo?.startUserId===e}),$e=e=>{const t=(e?.commentList||[]).find(s=>String(s.type)!=="8");return String(t?.fullMessage||"").trim()},Ae=e=>{if(!e?.finishTime)return;const t=!!e.taskLocalVars?.firstTask,s=t?{label:"已提交",type:"success"}:fe[String((e.commentList||[]).find(A=>String(A.type)!=="8")?.type||"")]||{label:"已办",type:"success"},o=Ke(s.type),i=!!e.assigneeId&&e.assigneeId===F().getUserInfo.userCode,h=ee(e.createTime||"")?.getTime()??0,m=ee(e.finishTime||"")?.getTime()??0,g=h&&m?Math.max(m-h,0):0,y=Le(s.label);return{level:o,icon:ae(o),color:oe[o],weakColor:ne[o],title:`${i?"我的处理":e.assigneeName||"审批"}:${y}`,sub:[te(e.finishTime),g?`耗时 ${se(g)}`:""].filter(Boolean).join(" · "),opinion:t?"":$e(e),filesTaskId:t?"":e.taskId||"",ctText:e.taskName||"",ctLabel:"",ctKind:"node"}},le=()=>{const e=v.value,t=Y.value?"danger":"ok",s=Y.value?"流程已终止":"流程已办结",o=te(e?.procEndTime);return{level:t,icon:ae(t),color:oe[t],weakColor:ne[t],title:s,sub:o?`${o} ${Y.value?"已终止":"完成归档"}`:s,opinion:"",filesTaskId:"",ctText:"",ctLabel:"",ctKind:""}},ie=()=>{const e=_.value?.activeTasks||[],t=e.map(y=>ee(y.createTime||"")).filter(y=>!!y).sort((y,A)=>y.getTime()-A.getTime())[0];if(!t)return;const s=e[0],o=Array.from(new Set(e.map(y=>y.assigneeName).filter(y=>!!y))),i=s?.approvalType||"",h=i==="joint"||i==="all"?" · ":" / ",m=Math.max(Date.now()-t.getTime(),0),g=yt(Ne("SysFlowTimeout"),m);return{title:`当前等待:${s?.taskName||v.value?.taskName||"当前节点"} · ${o.length?o.join(h):"待分配"}`,sub:`已停留 ${se(m)}`,opinion:"",filesTaskId:"",ctText:se(m),ctLabel:g.level==="danger"?"超时风险":"等待中",ctKind:"stay",color:g.color||"var(--el-color-primary)",level:g.level,weakColor:Be(g.color),icon:"clock"}},p=w(()=>{const e=J.value;return Me.value?U.value?le():ie():e?.finishTime&&!e.taskLocalVars?.firstTask&&re(e)?Ae(e):U.value?le():ie()}),Oe=w(()=>{const e=[...G.value],t=new Set(e.map(o=>ce(o)));for(const o of _.value?.futureTasks||[]){const i=`${o.taskDefKey||o.taskName}-`;t.has(i)||e.push({taskName:o.taskName,taskDefKey:o.taskDefKey,tasks:[],assigneeNames:o.assigneeNames,approvalType:o.approvalType})}e.push({taskName:"结束",taskDefKey:Ce,tasks:[],isEnd:!0});const s=new Map;for(const o of e){const i=o.taskDefKey||o.taskName||"";i&&(o.occurrence=(s.get(i)||0)+1,s.set(i,o.occurrence))}return e}),ce=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,je={single:"或签",joint:"会签",all:"会签"},de=e=>je[e.approvalType||e.tasks[0]?.approvalType||""]||"",Fe=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Ve=w(()=>{const e=J.value;if(!e?.finishTime)return;const t=F().getUserInfo.userCode;if(!(!t||e.assigneeId!==t))return e}),ue=e=>{const t=F().getUserInfo.userCode;if(!t)return"";const s=e.tasks.filter(i=>!!i.finishTime&&i.assigneeId===t);if(!s.length)return"";const o=Ve.value?.taskId;return o&&s.some(i=>i.taskId===o)?"entry":"other"},pe=e=>{const t=(e.assigneeNames||"").split(",").map(s=>s.trim()).filter(Boolean);return t.length?t:["待处理"]},fe={1:{label:"同意",type:"success"},2:{label:"退回",type:"warning"},3:{label:"驳回",type:"warning"},4:{label:"委派",type:"warning"},5:{label:"转办",type:"warning"},6:{label:"终止",type:"danger"},7:{label:"撤回",type:"info"},8:{label:"催办",type:"info"}},Ue=e=>te(e.finishTime||e.createTime),Pe={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},We=e=>Pe[e]||"",D=e=>{if(e.isEnd)return U.value?{label:"已结束",type:"success",hollow:!0}:{label:"等待",type:"info",hollow:!0};if(!e.tasks.length)return{label:"等待",type:"info",hollow:!0};const t=e.tasks;if(t.some(i=>!i.finishTime))return{label:"进行中",type:"primary",hollow:!0};let s="已办",o="success";if(t.some(i=>i.taskLocalVars?.firstTask))s="提交";else{const i=[...t].sort((m,g)=>(g.finishTime||"").localeCompare(m.finishTime||""))[0]?.commentList?.[0],h=fe[i?.type||""];s=h?.label||"已办",o=h?.type||"success"}return{label:s,type:o,hollow:!0}},ke=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${Ue(e)}`:t},Re=e=>e.tasks.length?e.tasks.map(ke).join(" / "):pe(e).join(" / "),X=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),me=w(()=>{const e=new Map,t=[];for(const s of G.value){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const i=s.tasks.some(m=>!m.finishTime)?"process":D(s).type,h=e.get(o);if(h!==void 0){const m=t[h];m.occurrence=(m.occurrence||1)+1,m.parentExecutionId=s.parentExecutionId,m.status=i;continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,parentExecutionId:s.parentExecutionId,status:i,occurrence:1})}for(const s of _.value?.futureTasks||[]){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const i=e.get(o);if(i!==void 0){t[i].status="wait";continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:Ce,status:U.value?"success":"wait"}),t}),ve=e=>{const t=F().getUserInfo.userCode;return!t||!e?!1:!!(e.assigneeId===t||e.candidate&&e.candidate.split(",").map(o=>o.trim()).filter(Boolean).includes(t))},ze=w(()=>ve(v.value)?!0:(_.value?.activeTasks||[]).some(e=>ve(e))),we=w(()=>u.readonly||!!v.value?.finishTime||!!v.value?.procEndTime||R.value&&!(_.value?.activeTasks||[]).length||!ze.value),Z=S(!1),ye=S(null),M=S(null);ot(()=>{const t=ye.value?.closest(".el-drawer, .el-dialog")?.querySelector(".dialog-hooks-header")??null;if(!t){M.value=null;return}const s=t.querySelector(".dialog-hooks-header-title"),o=document.createElement("span");o.style.display="contents",s?s.insertAdjacentElement("afterend",o):t.appendChild(o),M.value=o}),nt(()=>{const e=M.value;M.value=null,e?.remove()});const{snapshot:_e,dataSourceMeta:P,refresh:He}=wt(()=>String(u.taskInfo?.businessId||v.value?.businessId||""),{wfTaskId:()=>u.taskId,taskDefKey:()=>String(u.taskInfo?.taskDefKey||v.value?.taskDefKey||"")}),Qe=w(()=>we.value&&!!u.taskId&&(u.withdrawEnabled===!0||u.taskInfo?.withdrawEnabled===!0)),qe=async()=>{const e=u.taskInfo||v.value;if(!e?.taskId)return;const t={taskId:e.taskId,taskDefKey:e.taskDefKey,taskName:e.taskName,taskTitle:e.taskTitle,procInsId:e.procInsId,procDefId:e.procDefId,procDefKey:e.procDefKey,businessId:e.businessId};Z.value=!0;try{await j.processWithdrawalVerification(t);let s="";try{const o=await j.processWithdrawalPreview(t);s=String(o?.targetTaskName||"")}catch(o){console.warn("撤回预览失败",o)}await pt.confirm(`确认撤回「${e.taskTitle||e.taskName||"该申请单"}」?`+(s?`撤回后流程将回到「${s}」,需要重新提交。`:"撤回后需要重新提交。"),"撤回确认",{type:"warning",confirmButtonText:"确认撤回",cancelButtonText:"取消"}),await j.processWithdrawal(t),ft.success("撤回成功"),V("success",e),V("cancel")}catch(s){if(s==="cancel"||s==="close")return;be.messageError(s)}finally{Z.value=!1}},Ge=w(()=>W.value?.taskOption),Ye=w(()=>{const e=Ge.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),V("cancel")},workflowComplete:async(...t)=>{await e?.workflowComplete?.(...t)}}}),he=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,ge=async(e,t=!1)=>{const s=u.taskInfo&&u.taskInfo.procInsId==null&&u.taskInfo.processInstanceId!=null?{...u.taskInfo,procInsId:u.taskInfo.processInstanceId}:u.taskInfo;if(!(!u.taskId&&!s?.procInsId))try{L.value=!0,R.value=!1,v.value=e?{...v.value,...e}:t&&u.taskId?await j.getTaskInst(u.taskId):s||await j.getTaskInst(u.taskId),v.value?.procInsId&&(_.value=await j.getProcessTaskList(v.value.procInsId)),R.value=!0,await He(),await Se(),await ut(),await W.value?.resetQuery?.()}catch(o){be.messageError(o)}finally{L.value=!1}},Je=async e=>{V("success",e),await ge(e,!0)};return xe({resetQuery:async()=>{await ge()}}),(e,t)=>{const s=T("el-icons"),o=T("el-title"),i=T("el-empty"),h=T("el-tag-display"),m=T("el-flex"),g=T("el-timeline-item"),y=T("el-timeline"),A=T("el-button"),Xe=T("operation-auth"),Ze=at("loading");return n(),r("div",{ref_key:"shellEl",ref:ye,class:"workflow-todo-shell"},[l(`
1
+ import{defineComponent as st,useModel as ot,ref as S,computed as w,onMounted as nt,onBeforeUnmount as at,resolveComponent as T,resolveDirective as rt,openBlock as n,createElementBlock as r,createCommentVNode as l,createBlock as b,Teleport as lt,unref as C,toDisplayString as d,withDirectives as it,normalizeStyle as Ie,normalizeClass as O,createElementVNode as c,Fragment as k,renderList as B,createVNode as K,createTextVNode as x,renderSlot as ct,resolveDynamicComponent as dt,mergeProps as ut,withCtx as $,mergeModels as Te,nextTick as pt}from"vue";import{ElMessageBox as ft,ElMessage as kt}from"element-plus";import j from"../../api/workflow/workflowInstApi.js";import mt from"../../api/DocumentApi.js";import vt from"../../hooks/useFileView.js";import wt from"../../hooks/useDictHooks.js";import be from"../../utils/FrameworkUtils.js";import yt from"../../hooks/useWorkflowSnapshot.js";import{parseDateTime as te,formatDateTime as se}from"../../utils/dateTime.js";import{formatStayDuration as oe,resolveTimeoutMeta as _t}from"../../utils/flowTimeout.js";import{userInfoStore as F}from"../../stores/userInfoStore.js";import ht from"./TaskOperation.vue.js";import{_ as gt}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/request.js";import"../../utils/AxiosConfig.js";import"axios";import"../../utils/uuid.js";import"uuid";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/behaviorContext.js";import"../../utils/frontendBus.js";import"../../utils/globalLoading.js";import"../../utils/workflowTaskContext.js";import"../../config/GlobalLoadingConfig.js";import"../../api/SysDictCacheApi.js";import"../../stores/dictStore.js";import"pinia";import"../../utils/userSessionStorage.js";import"xlsx-js-style";import"./components/SelectAssigneeDialog.vue.js";import"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import"../business/comp.userForm.vue.js";import"@vueuse/core";import"../../api/DeptInfoApi.js";import"../../api/EmployeeInfoApi.js";import"../../hooks/useResetRefHooks.js";import"../../config/vxeSelectColumn.js";import"../../../chunks/ElTagDisplay.vue_vue_type_script_setup_true_lang-DQXuYsW_.js";/* empty css */import"../../api/SysUserApi.js";import"./components/CheckDialog.vue.js";import"../bpmntree/components/UserSelector/UserTag.vue.js";import"../upload/CustomElUpload.vue.js";import"@element-plus/icons-vue";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/uploadAccept.js";import"../../utils/buildUploadHeaders.js";import"../../hooks/workflowCompleteRunner.js";import"../../hooks/workflowTodo.js";import"../../hooks/usePermissionHooks.js";import"vue-router";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../../utils/routeMetaParams.js";import"../../hooks/useOpenNewMenu.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const It={key:0,class:"workflow-todo-shell__source-label"},Tt={class:"workflow-todo-shell__body dialog-content-fill"},bt={key:0,class:"workflow-todo-shell__source-fallback"},Ct={class:"wf-wait__icon"},xt={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},Et={class:"wf-wait__main"},Nt={class:"wf-wait__title"},Dt={class:"wf-wait__sub"},St={key:0,class:"wf-wait__opinion"},Bt={key:1,class:"wf-wait__files"},Kt=["onClick"],Lt={key:0},Mt={key:1,class:"wf-progress-scroll"},$t={class:"wf-progress-steps"},At={class:"wf-progress-step__icon-wrap"},Ot={class:"wf-progress-step__icon"},jt={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},Ft={key:4},Vt={class:"wf-progress-step__name"},Ut={class:"wf-progress-step__name-text"},Pt={class:"wf-progress-step__name-label"},Wt={key:0,class:"wf-progress-step__occurrence"},Rt={key:0,class:"workflow-todo-shell__record-occurrence"},zt={key:1,class:"workflow-todo-shell__record-type"},Ht={key:0,class:"workflow-todo-shell__record-user"},Qt={class:"workflow-todo-shell__record-person__name"},qt={key:0,class:"workflow-todo-shell__comment"},Gt={key:0,class:"workflow-todo-shell__record-files"},Yt=["onClick"],Jt={class:"workflow-todo-shell__record-person__name"},Xt={key:0,class:"workflow-todo-shell__comment"},Zt={key:1,class:"workflow-todo-shell__record-files"},es=["onClick"],ts={class:"workflow-todo-shell__record-person__name"},ss={key:1,class:"workflow-todo-shell__footer"},Ce="__end__",os=st({__name:"WorkflowTodoShell",props:Te({taskId:{},taskInfo:{default:void 0},readonly:{type:Boolean,default:!1},contentComponent:{default:void 0},contentProps:{default:()=>({})},renderDialog:{type:Function,default:void 0},showFooter:{type:Boolean,default:!0},withdrawEnabled:{type:Boolean,default:!1}},{loading:{type:Boolean,default:!1},loadingModifiers:{}}),emits:Te(["cancel","success"],["update:loading"]),setup(E,{expose:xe,emit:Ee}){const u=E,V=Ee,L=ot(E,"loading"),v=S(),_=S(),R=S(),z=S(!1),{getDictTypeData:Ne}=wt(["SysFlowTimeout"]),De=e=>[...e].sort((t,s)=>(t.createTime||"").localeCompare(s.createTime||"")),H=w(()=>De([..._.value?.hisTasks||[],..._.value?.activeTasks||[]])),Q=S({}),q=vt().fileView,G=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?Q.value[e]||[]:[],Se=async()=>{var t;const e=Array.from(new Set(H.value.map(s=>s.taskId).filter(s=>!!s)));if(e.length)try{const s=await mt.getUpLoadFilesByBussinessIds(e),o={};for(const i of s)i.businessId&&(o[t=i.businessId]||(o[t]=[])).push(i);Q.value=o}catch{Q.value={}}},Y=w(()=>{const e=new Map;for(const t of H.value){const s=he(t),o=e.get(s);o?o.tasks.push(t):e.set(s,{taskName:t.taskName,taskDefKey:t.taskDefKey,parentExecutionId:t.parentExecutionId,tasks:[t],approvalType:t.approvalType})}return Array.from(e.values())}),U=w(()=>v.value?.procEndTime?!0:!!(_.value&&!(_.value.activeTasks||[]).length&&(_.value.hisTasks||[]).length)),Be=e=>/^#[0-9a-fA-F]{6}$/.test(e)?`${e}1f`:"var(--el-color-primary-light-9)",ne={ok:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)"},ae={ok:"var(--el-color-success-light-9)",warning:"var(--el-color-warning-light-9)",danger:"var(--el-color-danger-light-9)"},Ke=e=>e==="danger"?"danger":e==="warning"?"warning":"ok",re=e=>e==="danger"?"close":e==="warning"?"back":"check",Le=e=>!e||e.startsWith("已")?e:`已${e}`,J=w(()=>String(v.value?.finishedResult||"")==="terminate"||String(v.value?.processStatus||"")==="terminated"),X=w(()=>H.value.find(e=>!!u.taskId&&e.taskId===u.taskId)),le=e=>!!e?.assigneeId&&e.assigneeId===F().getUserInfo.userCode,Me=w(()=>{const e=F().getUserInfo.userCode;if(!e)return!1;const t=X.value;return t?.taskLocalVars?.firstTask?le(t):!t&&u.taskInfo?.startUserId===e}),$e=e=>{const t=(e?.commentList||[]).find(s=>String(s.type)!=="8");return String(t?.fullMessage||"").trim()},Ae=e=>{if(!e?.finishTime)return;const t=!!e.taskLocalVars?.firstTask,s=t?{label:"已提交",type:"success"}:ke[String((e.commentList||[]).find(A=>String(A.type)!=="8")?.type||"")]||{label:"已办",type:"success"},o=Ke(s.type),i=!!e.assigneeId&&e.assigneeId===F().getUserInfo.userCode,h=te(e.createTime||"")?.getTime()??0,m=te(e.finishTime||"")?.getTime()??0,g=h&&m?Math.max(m-h,0):0,y=Le(s.label);return{level:o,icon:re(o),color:ne[o],weakColor:ae[o],title:`${i?"我的处理":e.assigneeName||"审批"}:${y}`,sub:[se(e.finishTime),g?`耗时 ${oe(g)}`:""].filter(Boolean).join(" · "),opinion:t?"":$e(e),filesTaskId:t?"":e.taskId||"",ctText:e.taskName||"",ctLabel:"",ctKind:"node"}},ie=()=>{const e=v.value,t=J.value?"danger":"ok",s=J.value?"流程已终止":"流程已办结",o=se(e?.procEndTime);return{level:t,icon:re(t),color:ne[t],weakColor:ae[t],title:s,sub:o?`${o} ${J.value?"已终止":"完成归档"}`:s,opinion:"",filesTaskId:"",ctText:"",ctLabel:"",ctKind:""}},ce=()=>{const e=_.value?.activeTasks||[],t=e.map(y=>te(y.createTime||"")).filter(y=>!!y).sort((y,A)=>y.getTime()-A.getTime())[0];if(!t)return;const s=e[0],o=Array.from(new Set(e.map(y=>y.assigneeName).filter(y=>!!y))),i=s?.approvalType||"",h=i==="joint"||i==="all"?" · ":" / ",m=Math.max(Date.now()-t.getTime(),0),g=_t(Ne("SysFlowTimeout"),m);return{title:`当前等待:${s?.taskName||v.value?.taskName||"当前节点"} · ${o.length?o.join(h):"待分配"}`,sub:`已停留 ${oe(m)}`,opinion:"",filesTaskId:"",ctText:oe(m),ctLabel:g.level==="danger"?"超时风险":"等待中",ctKind:"stay",color:g.color||"var(--el-color-primary)",level:g.level,weakColor:Be(g.color),icon:"clock"}},p=w(()=>{const e=X.value;return Me.value?U.value?ie():ce():e?.finishTime&&!e.taskLocalVars?.firstTask&&le(e)?Ae(e):U.value?ie():ce()}),Oe=w(()=>{const e=[...Y.value],t=new Set(e.map(o=>de(o)));for(const o of _.value?.futureTasks||[]){const i=`${o.taskDefKey||o.taskName}-`;t.has(i)||e.push({taskName:o.taskName,taskDefKey:o.taskDefKey,tasks:[],assigneeNames:o.assigneeNames,approvalType:o.approvalType})}e.push({taskName:"结束",taskDefKey:Ce,tasks:[],isEnd:!0});const s=new Map;for(const o of e){const i=o.taskDefKey||o.taskName||"";i&&(o.occurrence=(s.get(i)||0)+1,s.set(i,o.occurrence))}return e}),de=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,je={single:"或签",joint:"会签",all:"会签"},ue=e=>je[e.approvalType||e.tasks[0]?.approvalType||""]||"",Fe=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Ve=w(()=>{const e=X.value;if(!e?.finishTime)return;const t=F().getUserInfo.userCode;if(!(!t||e.assigneeId!==t))return e}),pe=e=>{const t=F().getUserInfo.userCode;if(!t)return"";const s=e.tasks.filter(i=>!!i.finishTime&&i.assigneeId===t);if(!s.length)return"";const o=Ve.value?.taskId;return o&&s.some(i=>i.taskId===o)?"entry":"other"},fe=e=>{const t=(e.assigneeNames||"").split(",").map(s=>s.trim()).filter(Boolean);return t.length?t:["待处理"]},ke={1:{label:"同意",type:"success"},2:{label:"退回",type:"warning"},3:{label:"驳回",type:"warning"},4:{label:"委派",type:"warning"},5:{label:"转办",type:"warning"},6:{label:"终止",type:"danger"},7:{label:"撤回",type:"info"},8:{label:"催办",type:"info"}},Ue=e=>se(e.finishTime||e.createTime),Pe={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},We=e=>Pe[e]||"",D=e=>{if(e.isEnd)return U.value?{label:"已结束",type:"success",hollow:!0}:{label:"等待",type:"info",hollow:!0};if(!e.tasks.length)return{label:"等待",type:"info",hollow:!0};const t=e.tasks;if(t.some(i=>!i.finishTime))return{label:"进行中",type:"primary",hollow:!0};let s="已办",o="success";if(t.some(i=>i.taskLocalVars?.firstTask))s="提交";else{const i=[...t].sort((m,g)=>(g.finishTime||"").localeCompare(m.finishTime||""))[0]?.commentList?.[0],h=ke[i?.type||""];s=h?.label||"已办",o=h?.type||"success"}return{label:s,type:o,hollow:!0}},me=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${Ue(e)}`:t},Re=e=>e.tasks.length?e.tasks.map(me).join(" / "):fe(e).join(" / "),Z=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),ve=w(()=>{const e=new Map,t=[];for(const s of Y.value){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const i=s.tasks.some(m=>!m.finishTime)?"process":D(s).type,h=e.get(o);if(h!==void 0){const m=t[h];m.occurrence=(m.occurrence||1)+1,m.parentExecutionId=s.parentExecutionId,m.status=i;continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,parentExecutionId:s.parentExecutionId,status:i,occurrence:1})}for(const s of _.value?.futureTasks||[]){const o=s.taskDefKey||s.taskName||"";if(!o)continue;const i=e.get(o);if(i!==void 0){t[i].status="wait";continue}e.set(o,t.length),t.push({taskName:s.taskName,taskDefKey:s.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:Ce,status:U.value?"success":"wait"}),t}),we=e=>{const t=F().getUserInfo.userCode;return!t||!e?!1:!!(e.assigneeId===t||e.candidate&&e.candidate.split(",").map(o=>o.trim()).filter(Boolean).includes(t))},ze=w(()=>we(v.value)?!0:(_.value?.activeTasks||[]).some(e=>we(e))),P=w(()=>u.readonly||!!v.value?.finishTime||!!v.value?.procEndTime||z.value&&!(_.value?.activeTasks||[]).length||!ze.value),ee=S(!1),ye=S(null),M=S(null);nt(()=>{const t=ye.value?.closest(".el-drawer, .el-dialog")?.querySelector(".dialog-hooks-header")??null;if(!t){M.value=null;return}const s=t.querySelector(".dialog-hooks-header-title"),o=document.createElement("span");o.style.display="contents",s?s.insertAdjacentElement("afterend",o):t.appendChild(o),M.value=o}),at(()=>{const e=M.value;M.value=null,e?.remove()});const He=w(()=>P.value),{snapshot:_e,dataSourceMeta:W,refresh:Qe}=yt(()=>String(u.taskInfo?.businessId||v.value?.businessId||""),{wfTaskId:()=>u.taskId,taskDefKey:()=>String(u.taskInfo?.taskDefKey||v.value?.taskDefKey||""),readonly:()=>P.value,enabled:()=>He.value}),qe=w(()=>P.value&&!!u.taskId&&(u.withdrawEnabled===!0||u.taskInfo?.withdrawEnabled===!0)),Ge=async()=>{const e=u.taskInfo||v.value;if(!e?.taskId)return;const t={taskId:e.taskId,taskDefKey:e.taskDefKey,taskName:e.taskName,taskTitle:e.taskTitle,procInsId:e.procInsId,procDefId:e.procDefId,procDefKey:e.procDefKey,businessId:e.businessId};ee.value=!0;try{await j.processWithdrawalVerification(t);let s="";try{const o=await j.processWithdrawalPreview(t);s=String(o?.targetTaskName||"")}catch(o){console.warn("撤回预览失败",o)}await ft.confirm(`确认撤回「${e.taskTitle||e.taskName||"该申请单"}」?`+(s?`撤回后流程将回到「${s}」,需要重新提交。`:"撤回后需要重新提交。"),"撤回确认",{type:"warning",confirmButtonText:"确认撤回",cancelButtonText:"取消"}),await j.processWithdrawal(t),kt.success("撤回成功"),V("success",e),V("cancel")}catch(s){if(s==="cancel"||s==="close")return;be.messageError(s)}finally{ee.value=!1}},Ye=w(()=>R.value?.taskOption),Je=w(()=>{const e=Ye.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),V("cancel")},workflowComplete:async(...t)=>{await e?.workflowComplete?.(...t)}}}),he=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,ge=async(e,t=!1)=>{const s=u.taskInfo&&u.taskInfo.procInsId==null&&u.taskInfo.processInstanceId!=null?{...u.taskInfo,procInsId:u.taskInfo.processInstanceId}:u.taskInfo;if(!(!u.taskId&&!s?.procInsId))try{L.value=!0,z.value=!1,v.value=e?{...v.value,...e}:t&&u.taskId?await j.getTaskInst(u.taskId):s||await j.getTaskInst(u.taskId),v.value?.procInsId&&(_.value=await j.getProcessTaskList(v.value.procInsId)),z.value=!0,await Qe(),await Se(),await pt(),await R.value?.resetQuery?.()}catch(o){be.messageError(o)}finally{L.value=!1}},Xe=async e=>{V("success",e),await ge(e,!0)};return xe({resetQuery:async()=>{await ge()}}),(e,t)=>{const s=T("el-icons"),o=T("el-title"),i=T("el-empty"),h=T("el-tag-display"),m=T("el-flex"),g=T("el-timeline-item"),y=T("el-timeline"),A=T("el-button"),Ze=T("operation-auth"),et=rt("loading");return n(),r("div",{ref_key:"shellEl",ref:ye,class:"workflow-todo-shell"},[l(`
2
2
  内容区撑满剩余空间统一使用 dialog-content-fill(flex/height 由核心工具类提供),
3
3
  滚动仅保留在本内容区,底部操作栏固定不随内容滚动。
4
4
  `),l(`
5
5
  快照标记:Teleport 进「本抽屉」的标题栏(标题文字右侧),不修改 createDialogHooks;
6
6
  headerEl 由壳子在挂载时从自身所在抽屉里解析,多弹窗并存也不会串。
7
- `),M.value?(n(),b(rt,{key:0,to:M.value},[C(P)?(n(),r("span",gt,d(C(P).label),1)):l("v-if",!0)],8,["to"])):l("v-if",!0),lt((n(),r("div",It,[l(" 兜底:没有标题栏(非自定义 header 的弹窗)时,在内容区顶部显示 "),!M.value&&C(P)?(n(),r("div",Tt,d(C(P).label),1)):l("v-if",!0),l(`
7
+ `),M.value?(n(),b(lt,{key:0,to:M.value},[C(W)?(n(),r("span",It,d(C(W).label),1)):l("v-if",!0)],8,["to"])):l("v-if",!0),it((n(),r("div",Tt,[l(" 兜底:没有标题栏(非自定义 header 的弹窗)时,在内容区顶部显示 "),!M.value&&C(W)?(n(),r("div",bt,d(C(W).label),1)):l("v-if",!0),l(`
8
8
  数据来源标记(通用层统一判定,业务内容组件无需实现):
9
9
  命中快照时展示「快照 · 时间」;没有快照(展示业务当前数据)时不展示,避免噪音,
10
10
  放在内容区首行右对齐,紧贴标题栏,不随内容滚动位置变化而离开视线。
@@ -12,11 +12,11 @@ import{defineComponent as tt,useModel as st,ref as S,computed as w,onMounted as
12
12
  当前等待:参考 flowpilot 设计的时长梯度状态条。
13
13
  颜色与浅色底纹按 SysFlowTimeout 字典命中区间(正常 / 预警 / 超时)渲染,
14
14
  流程已结束(含终止)时不展示。
15
- `),p.value?(n(),r("div",{key:1,class:O(["wf-wait",p.value.level?`is-${p.value.level}`:""]),style:Ie({"--wf-wait-color":p.value.color,"--wf-wait-weak":p.value.weakColor})},[c("span",bt,[l(" 进行中:时钟 "),p.value.icon==="clock"?(n(),r("svg",Ct,[...t[3]||(t[3]=[c("circle",{cx:"12",cy:"12",r:"9"},null,-1),c("path",{d:"M12 8v4l3 3"},null,-1)])])):p.value.icon==="check"?(n(),r(k,{key:1},[l(" 已办结:对勾 "),t[4]||(t[4]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M20 6L9 17l-5-5"})],-1))],2112)):p.value.icon==="back"?(n(),r(k,{key:2},[l(" 驳回:回退箭头 "),t[5]||(t[5]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"})],-1))],2112)):(n(),r(k,{key:3},[l(" 已终止:叉 "),t[6]||(t[6]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.6","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M18 6L6 18"}),c("path",{d:"M6 6l12 12"})],-1))],2112))]),c("div",xt,[c("div",Et,d(p.value.title),1),c("div",Nt,d(p.value.sub),1),l(" 结束态:把该次审批的意见一并带出来,避免去审批记录里翻 "),p.value.opinion?(n(),r("div",Dt," 审核意见:"+d(p.value.opinion),1)):l("v-if",!0),l(" 该次审批的附件:与审批记录里的附件同样支持点击预览 "),p.value.filesTaskId&&N(p.value.filesTaskId).length?(n(),r("div",St,[(n(!0),r(k,null,B(N(p.value.filesTaskId),a=>(n(),r("span",{key:a.id,class:"wf-wait__file",onClick:f=>C(Q)(a.id)},[K(s,{"model-value":q(a.name)},null,8,["model-value"]),x(d(a.name),1)],8,Bt))),128))])):l("v-if",!0)]),p.value.ctText?(n(),r("div",{key:0,class:O(["wf-wait__ct",`is-${p.value.ctKind}`])},[c("b",null,d(p.value.ctText),1),p.value.ctLabel?(n(),r("span",Kt,d(p.value.ctLabel),1)):l("v-if",!0)],2)):l("v-if",!0)],6)):l("v-if",!0),K(o,{level:"1",title:"流程进度",style:{"border-bottom":"var(--border)"}}),c("div",null,[me.value.length?(n(),r("div",Lt,[c("div",Mt,[(n(!0),r(k,null,B(me.value,(a,f)=>(n(),r("div",{key:he(a),class:O(["wf-progress-step",{done:a.status==="success",current:a.status==="process",rejected:a.status==="warning",stopped:a.status==="error"||a.status==="danger"}])},[c("div",$t,[c("div",At,[l(" 同意/提交:对勾 "),a.status==="success"?(n(),r("svg",Ot,[...t[7]||(t[7]=[c("path",{d:"M20 6L9 17l-5-5"},null,-1)])])):a.status==="warning"?(n(),r(k,{key:1},[l(" 驳回:回退箭头 "),t[8]||(t[8]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"})],-1))],2112)):a.status==="danger"||a.status==="error"?(n(),r(k,{key:2},[l(" 终止:叉 "),t[9]||(t[9]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M18 6L6 18"}),c("path",{d:"M6 6l12 12"})],-1))],2112)):a.status==="info"?(n(),r(k,{key:3},[l(" 撤回:撤销箭头 "),t[10]||(t[10]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"})],-1))],2112)):(n(),r("span",jt,d(f+1),1))])]),c("div",Ft,[c("span",Vt,[c("span",Ut,d(a.taskName||"未命名节点"),1),a.occurrence&&a.occurrence>1?(n(),r("sup",Pt,d(a.occurrence),1)):l("v-if",!0)])])],2))),128))])])):(n(),b(i,{key:0,description:"暂无流程进度","image-size":48}))]),l(`
15
+ `),p.value?(n(),r("div",{key:1,class:O(["wf-wait",p.value.level?`is-${p.value.level}`:""]),style:Ie({"--wf-wait-color":p.value.color,"--wf-wait-weak":p.value.weakColor})},[c("span",Ct,[l(" 进行中:时钟 "),p.value.icon==="clock"?(n(),r("svg",xt,[...t[3]||(t[3]=[c("circle",{cx:"12",cy:"12",r:"9"},null,-1),c("path",{d:"M12 8v4l3 3"},null,-1)])])):p.value.icon==="check"?(n(),r(k,{key:1},[l(" 已办结:对勾 "),t[4]||(t[4]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M20 6L9 17l-5-5"})],-1))],2112)):p.value.icon==="back"?(n(),r(k,{key:2},[l(" 驳回:回退箭头 "),t[5]||(t[5]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"})],-1))],2112)):(n(),r(k,{key:3},[l(" 已终止:叉 "),t[6]||(t[6]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.6","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M18 6L6 18"}),c("path",{d:"M6 6l12 12"})],-1))],2112))]),c("div",Et,[c("div",Nt,d(p.value.title),1),c("div",Dt,d(p.value.sub),1),l(" 结束态:把该次审批的意见一并带出来,避免去审批记录里翻 "),p.value.opinion?(n(),r("div",St," 审核意见:"+d(p.value.opinion),1)):l("v-if",!0),l(" 该次审批的附件:与审批记录里的附件同样支持点击预览 "),p.value.filesTaskId&&N(p.value.filesTaskId).length?(n(),r("div",Bt,[(n(!0),r(k,null,B(N(p.value.filesTaskId),a=>(n(),r("span",{key:a.id,class:"wf-wait__file",onClick:f=>C(q)(a.id)},[K(s,{"model-value":G(a.name)},null,8,["model-value"]),x(d(a.name),1)],8,Kt))),128))])):l("v-if",!0)]),p.value.ctText?(n(),r("div",{key:0,class:O(["wf-wait__ct",`is-${p.value.ctKind}`])},[c("b",null,d(p.value.ctText),1),p.value.ctLabel?(n(),r("span",Lt,d(p.value.ctLabel),1)):l("v-if",!0)],2)):l("v-if",!0)],6)):l("v-if",!0),K(o,{level:"1",title:"流程进度",style:{"border-bottom":"var(--border)"}}),c("div",null,[ve.value.length?(n(),r("div",Mt,[c("div",$t,[(n(!0),r(k,null,B(ve.value,(a,f)=>(n(),r("div",{key:he(a),class:O(["wf-progress-step",{done:a.status==="success",current:a.status==="process",rejected:a.status==="warning",stopped:a.status==="error"||a.status==="danger"}])},[c("div",At,[c("div",Ot,[l(" 同意/提交:对勾 "),a.status==="success"?(n(),r("svg",jt,[...t[7]||(t[7]=[c("path",{d:"M20 6L9 17l-5-5"},null,-1)])])):a.status==="warning"?(n(),r(k,{key:1},[l(" 驳回:回退箭头 "),t[8]||(t[8]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"})],-1))],2112)):a.status==="danger"||a.status==="error"?(n(),r(k,{key:2},[l(" 终止:叉 "),t[9]||(t[9]=c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},[c("path",{d:"M18 6L6 18"}),c("path",{d:"M6 6l12 12"})],-1))],2112)):a.status==="info"?(n(),r(k,{key:3},[l(" 撤回:撤销箭头 "),t[10]||(t[10]=c("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[c("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"})],-1))],2112)):(n(),r("span",Ft,d(f+1),1))])]),c("div",Vt,[c("span",Ut,[c("span",Pt,d(a.taskName||"未命名节点"),1),a.occurrence&&a.occurrence>1?(n(),r("sup",Wt,d(a.occurrence),1)):l("v-if",!0)])])],2))),128))])])):(n(),b(i,{key:0,description:"暂无流程进度","image-size":48}))]),l(`
16
16
  业务审核内容:完全由业务内容组件/插槽决定(含它自己的标题、分区、网格),
17
17
  通用抽屉不再注入任何标题,业务页面给什么就展示什么。
18
- `),it(e.$slots,"content",{task:v.value,process:_.value,snapshot:C(_e)},()=>[E.contentComponent?(n(),b(ct(E.contentComponent),dt({key:0,ref_key:"contentRef",ref:W},E.contentProps,{snapshot:C(_e),loading:L.value,"onUpdate:loading":t[0]||(t[0]=a=>L.value=a)}),null,16,["snapshot","loading"])):l("v-if",!0)],!0),K(o,{level:"1",title:"审批记录",style:{"border-bottom":"var(--border)"}}),c("div",null,[G.value.length?(n(),b(y,{key:1,class:"workflow-todo-shell__timeline"},{default:$(()=>[(n(!0),r(k,null,B(Oe.value,a=>(n(),b(g,{key:ce(a),type:D(a).type,hollow:D(a).hollow,class:O({"is-active":D(a).type==="primary"}),style:Ie({"--el-timeline-node-color":We(D(a).type)})},{default:$(()=>[K(m,{align:"center",justify:"space-between",class:O(["workflow-todo-shell__record-title",`is-${D(a).type}`])},{default:$(()=>[c("span",null,[x(d(a.taskName||"未命名节点")+" ",1),(a.occurrence||0)>1?(n(),r("span",Wt,d(a.occurrence),1)):l("v-if",!0),de(a)?(n(),r("span",Rt,d(de(a)),1)):l("v-if",!0),l(" 我办理过的节点:标注「我的操作」,颜色跟随该节点的审批结论 "),ue(a)?(n(),r("span",{key:2,class:O(["workflow-todo-shell__record-mine",`is-${ue(a)}`])}," 我的操作 ",2)):l("v-if",!0)]),K(h,{type:D(a).type,size:"small"},{default:$(()=>[x(d(D(a).label),1)]),_:2},1032,["type"])]),_:2},1032,["class"]),Fe(a)?(n(),r("div",zt,[c("span",Ht,d(Re(a)),1),X(a)||a.tasks.some(f=>N(f.taskId).length)?(n(),r("div",Qt,[X(a)?(n(),r(k,{key:0},[x(d(X(a)),1)],64)):l("v-if",!0),(n(!0),r(k,null,B(a.tasks,f=>(n(),r(k,{key:f.taskId},[N(f.taskId).length?(n(),r("div",qt,[(n(!0),r(k,null,B(N(f.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:et=>C(Q)(I.id)},[K(s,{"model-value":q(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,Gt))),128))])):l("v-if",!0)],64))),128))])):l("v-if",!0)])):a.tasks.length?(n(!0),r(k,{key:1},B(a.tasks,f=>(n(),r("div",{key:f.taskId,class:"workflow-todo-shell__record-user"},[c("span",Yt,d(ke(f)),1),f.comment||N(f.taskId).length?(n(),r("div",Jt,[f.comment?(n(),r(k,{key:0},[x(d(f.comment),1)],64)):l("v-if",!0),N(f.taskId).length?(n(),r("div",Xt,[(n(!0),r(k,null,B(N(f.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:et=>C(Q)(I.id)},[K(s,{"model-value":q(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,Zt))),128))])):l("v-if",!0)])):l("v-if",!0)]))),128)):a.isEnd?l("v-if",!0):(n(),r(k,{key:2},[l(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(k,null,B(pe(a),f=>(n(),r("div",{key:f,class:"workflow-todo-shell__record-user"},[c("span",es,d(f),1)]))),128))],64))]),_:2},1032,["type","hollow","class","style"]))),128))]),_:1})):(n(),b(i,{key:0,description:"暂无审批记录","image-size":48}))])])),[[Ze,L.value]]),E.showFooter?(n(),r("div",ts,[l(`
18
+ `),ct(e.$slots,"content",{task:v.value,process:_.value,snapshot:C(_e)},()=>[E.contentComponent?(n(),b(dt(E.contentComponent),ut({key:0,ref_key:"contentRef",ref:R},E.contentProps,{snapshot:C(_e),loading:L.value,"onUpdate:loading":t[0]||(t[0]=a=>L.value=a)}),null,16,["snapshot","loading"])):l("v-if",!0)],!0),K(o,{level:"1",title:"审批记录",style:{"border-bottom":"var(--border)"}}),c("div",null,[Y.value.length?(n(),b(y,{key:1,class:"workflow-todo-shell__timeline"},{default:$(()=>[(n(!0),r(k,null,B(Oe.value,a=>(n(),b(g,{key:de(a),type:D(a).type,hollow:D(a).hollow,class:O({"is-active":D(a).type==="primary"}),style:Ie({"--el-timeline-node-color":We(D(a).type)})},{default:$(()=>[K(m,{align:"center",justify:"space-between",class:O(["workflow-todo-shell__record-title",`is-${D(a).type}`])},{default:$(()=>[c("span",null,[x(d(a.taskName||"未命名节点")+" ",1),(a.occurrence||0)>1?(n(),r("span",Rt,d(a.occurrence),1)):l("v-if",!0),ue(a)?(n(),r("span",zt,d(ue(a)),1)):l("v-if",!0),l(" 我办理过的节点:标注「我的操作」,颜色跟随该节点的审批结论 "),pe(a)?(n(),r("span",{key:2,class:O(["workflow-todo-shell__record-mine",`is-${pe(a)}`])}," 我的操作 ",2)):l("v-if",!0)]),K(h,{type:D(a).type,size:"small"},{default:$(()=>[x(d(D(a).label),1)]),_:2},1032,["type"])]),_:2},1032,["class"]),Fe(a)?(n(),r("div",Ht,[c("span",Qt,d(Re(a)),1),Z(a)||a.tasks.some(f=>N(f.taskId).length)?(n(),r("div",qt,[Z(a)?(n(),r(k,{key:0},[x(d(Z(a)),1)],64)):l("v-if",!0),(n(!0),r(k,null,B(a.tasks,f=>(n(),r(k,{key:f.taskId},[N(f.taskId).length?(n(),r("div",Gt,[(n(!0),r(k,null,B(N(f.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:tt=>C(q)(I.id)},[K(s,{"model-value":G(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,Yt))),128))])):l("v-if",!0)],64))),128))])):l("v-if",!0)])):a.tasks.length?(n(!0),r(k,{key:1},B(a.tasks,f=>(n(),r("div",{key:f.taskId,class:"workflow-todo-shell__record-user"},[c("span",Jt,d(me(f)),1),f.comment||N(f.taskId).length?(n(),r("div",Xt,[f.comment?(n(),r(k,{key:0},[x(d(f.comment),1)],64)):l("v-if",!0),N(f.taskId).length?(n(),r("div",Zt,[(n(!0),r(k,null,B(N(f.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:tt=>C(q)(I.id)},[K(s,{"model-value":G(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,es))),128))])):l("v-if",!0)])):l("v-if",!0)]))),128)):a.isEnd?l("v-if",!0):(n(),r(k,{key:2},[l(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(k,null,B(fe(a),f=>(n(),r("div",{key:f,class:"workflow-todo-shell__record-user"},[c("span",ts,d(f),1)]))),128))],64))]),_:2},1032,["type","hollow","class","style"]))),128))]),_:1})):(n(),b(i,{key:0,description:"暂无审批记录","image-size":48}))])])),[[et,L.value]]),E.showFooter?(n(),r("div",ss,[l(`
19
19
  已办节点的只读查看:节点开了撤回(后端按节点下发 withdrawEnabled)时,
20
20
  在「取消」旁边给出撤回入口——校验、预览、二次确认、执行都在组件内完成,
21
21
  成功后通知调用方刷新列表并关闭查看。
22
- `),Qe.value?(n(),b(Xe,{key:0,"oper-code":"system:workflow:processWithdrawal"},{default:$(()=>[K(A,{type:"warning",loading:Z.value,onClick:qe},{default:$(()=>[...t[11]||(t[11]=[x("撤回",-1)])]),_:1},8,["loading"])]),_:1})):l("v-if",!0),we.value?(n(),b(A,{key:1,onClick:t[1]||(t[1]=a=>V("cancel"))},{default:$(()=>[...t[12]||(t[12]=[x("取消",-1)])]),_:1})):(n(),b(_t,{key:2,"task-id":E.taskId,params:Ye.value,"render-dialog":E.renderDialog,"show-process-btn":!1,"but-loading":L.value,"onUpdate:butLoading":t[2]||(t[2]=a=>L.value=a),onSuccess:Je},null,8,["task-id","params","render-dialog","but-loading"]))])):l("v-if",!0)],512)}}}),ko=ht(ss,[["__scopeId","data-v-1bd05043"]]);export{ko as default};
22
+ `),qe.value?(n(),b(Ze,{key:0,"oper-code":"system:workflow:processWithdrawal"},{default:$(()=>[K(A,{type:"warning",loading:ee.value,onClick:Ge},{default:$(()=>[...t[11]||(t[11]=[x("撤回",-1)])]),_:1},8,["loading"])]),_:1})):l("v-if",!0),P.value?(n(),b(A,{key:1,onClick:t[1]||(t[1]=a=>V("cancel"))},{default:$(()=>[...t[12]||(t[12]=[x("取消",-1)])]),_:1})):(n(),b(ht,{key:2,"task-id":E.taskId,params:Je.value,"render-dialog":E.renderDialog,"show-process-btn":!1,"but-loading":L.value,"onUpdate:butLoading":t[2]||(t[2]=a=>L.value=a),onSuccess:Xe},null,8,["task-id","params","render-dialog","but-loading"]))])):l("v-if",!0)],512)}}}),mo=gt(os,[["__scopeId","data-v-1e09a2d9"]]);export{mo as default};
@@ -1,4 +1,4 @@
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={},So="subAppModalOverlay",S="adtec-subapp-modal-open";let j=0;const b=[],v=new Map;let E=!1;const C=new WeakMap,Eo=()=>{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=Eo();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),!E&&(T.on(U,F),E=!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||!E)&&(T.off(U,F),E=!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 a={applicationModule:r,overlayId:e.overlayId,open:t};T.emit(So,a),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=`
1
+ import{computed as P,ref as x,unref as w,createApp as co,nextTick as ho,h as d}from"vue";import go,{ElDrawer as uo,ElDialog as po,ElButton as z}from"element-plus";import F from"../stores/storeConfig.js";/* empty css */import*as N from"@element-plus/icons-vue";import"../config/ElementPlusConfig.js";import{installVxeGrid as bo}from"../config/VxeTableConfig.js";import mo from"element-plus/es/locale/lang/zh-cn";import fo from"./useListenerHooks.js";import{permissionStore as _o}from"../stores/permissionStore.js";import ko from"../components/icon/ElIcons.vue.js";import yo from"../components/ElDialogBody/ElDialogBody.vue.js";import vo from"crypto-js/enc-base64";import xo from"crypto-js/enc-utf8";import{frontendBus as T}from"../utils/frontendBus.js";import{GLOBAL_LOADING_EVENT as U,notifyDialogLoadingScope as wo}from"../utils/globalLoading.js";import So 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 Eo={},Lo="subAppModalOverlay",S="adtec-subapp-modal-open";let j=0;const b=[],v=new Map;let E=!1;const C=new WeakMap,Io=()=>{for(let o=b.length-1;o>=0;o--)if(b[o].open.value)return b[o]},G=o=>{if(!o?.id)return;if(o.phase==="start"){const t=Io();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)},Oo=o=>{b.push(o),!E&&(T.on(U,G),E=!0)},Co=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||!E)&&(T.off(U,G),E=!1,v.clear())},Do=o=>{const e=Eo||{};return o.applicationModule||e.VITE_APPLICATION_MODULE||e.VITE_APP_MODULE||String(o.router.currentRoute.value.meta.applicationModule||"")},W=(o,e,t)=>{if(typeof window>"u"||!window.__POWERED_BY_WUJIE__)return;const l=Do(o);if(!l||(t&&!e.overlayId&&(e.overlayId=`${l}-${Date.now()}-${++j}`),!e.overlayId))return;const a={applicationModule:l,overlayId:e.overlayId,open:t};T.emit(Lo,a),t||(e.overlayId=void 0)},R=(o,e)=>{e&&!o.overlayId&&(o.overlayId=`dialog-${Date.now()}-${++j}`),o.overlayId&&wo({id:o.overlayId,open:e})};function Ao(){const e="dialog-hooks-styles",t=document.getElementById(e);if(t&&(t.textContent||"").includes("/* dialog-hooks v24 */"))return;t?.remove();const l=document.createElement("style");l.id=e,l.type="text/css",l.innerHTML=`
2
2
  /* dialog-hooks v24 */
3
3
  /* 抽屉组件 - 无滚动条样式 */
4
4
  .dialog-hooks-no-scroll.el-drawer .el-drawer__body {
@@ -286,4 +286,4 @@ import{computed as P,ref as x,unref as w,createApp as so,nextTick as no,h as d}f
286
286
  background: transparent !important;
287
287
  background-color: transparent !important;
288
288
  }
289
- `,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=>{const r=t.scrollHeight>t.clientHeight+1||t.scrollWidth>t.clientWidth+1,a=t.offsetWidth-t.clientWidth>0;(r||a)&&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 a=t;if(!a){const h={observer:new ResizeObserver(()=>A(e,h.targets)),targets:new Set};a=h,C.set(e,h)}const _=new Set(r);a.targets.forEach(h=>{_.has(h)||a.observer.unobserve(h)}),_.forEach(h=>{a.targets.has(h)||a.observer.observe(h)}),a.targets=_,typeof MutationObserver<"u"&&!a.mutationObserver&&(a.mutationObserver=new MutationObserver(()=>{e.isConnected&&A(e,M(e))}),a.mutationObserver.observe(e,{childList:!0,subtree:!0,characterData:!0}))})}function To(o){return o.closest("[class*='vxe'], [class*='umo']")!==null}function A(o,e){let t=0;e.forEach(r=>{r!==o&&To(r)||(t=Math.max(t,r.offsetWidth-r.clientWidth))}),o.style.setProperty("--dialog-hooks-scrollbar",`${Math.min(Do,Math.max(0,t))}px`)}function Bo(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 $o(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 Me(o){return function(t){const r=[],a=()=>r[r.length-1],_=s=>{const i=w(s?.data),k=w(s?.row),y=w(s?.formData),p=s?.id??s?.taskId??s?.selectedId??i?.id??k?.id??y?.id;return p==null||p===""?"":String(p)},h=(s,i,k,y="drawer",p,X=!0)=>{Co();const{icon:Z,hideConfirm:L,hideFooter:oo,dialogBody:eo,...c}=k||{},f=Bo(eo,o.defaultDialogBody??!0,X),to=`${y}|${typeof s=="string"?s:s?.__name||s?.name||""}|${c.title||""}|${_(i)}`,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(i||{}).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?$o(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 i=s||a();if(!i)return;const{runBehaviorAction:k}=xo();await k({code:`dialog:${i.renderKey}:confirm`,name:i.actionName||"确认",actionType:"SUBMIT"},async()=>{try{i.manualLoading.value=!0,await i.childInstance.value?.confirm?.(),t&&m(i)}catch{}finally{i.manualLoading.value=!1}})},m=s=>{const i=s||a();!i||!i.open.value||(i.closing=!0,i.open.value=!1)},K=s=>{const i=a();i&&(i.manualLoading.value=s)},J=()=>a()?.loading.value??!1,Q=P(()=>a()?.childInstance.value);return{render:h,cancel:m,setLoading:K,getLoading:J,instance:Q}}}export{Me as createDialogHooks,Me as default};
289
+ `,document.head.appendChild(l)}const Mo=8;function Y(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=>{if(t.clientWidth<=0&&t.clientHeight<=0)return;const l=t.scrollHeight>t.clientHeight+1||t.scrollWidth>t.clientWidth+1,a=t.offsetWidth-t.clientWidth>0&&K(t)>0;(l||a)&&e.push(t)}),e}function H(o){return o==="auto"||o==="scroll"||o==="overlay"}function K(o){const e=getComputedStyle(o);if(!H(e.overflowX)&&!H(e.overflowY))return 0;const t=(parseFloat(e.borderLeftWidth)||0)+(parseFloat(e.borderRightWidth)||0);return Math.max(0,o.offsetWidth-o.clientWidth-t)}const V=new WeakSet;function To(o){Y(o).forEach(e=>{M(e).forEach(t=>{V.has(t)||(V.add(t),Bo(t))})})}function Bo(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){Y(o).forEach(e=>{const t=C.get(e);if(!e.isConnected){t?.observer.disconnect(),t?.mutationObserver?.disconnect(),C.delete(e);return}const l=M(e);if(A(e,l),typeof ResizeObserver>"u")return;let a=t;if(!a){const h={observer:new ResizeObserver(()=>A(e,h.targets)),targets:new Set};a=h,C.set(e,h)}const _=new Set(l);a.targets.forEach(h=>{_.has(h)||a.observer.unobserve(h)}),_.forEach(h=>{a.targets.has(h)||a.observer.observe(h)}),a.targets=_,typeof MutationObserver<"u"&&!a.mutationObserver&&(a.mutationObserver=new MutationObserver(()=>{e.isConnected&&A(e,M(e))}),a.mutationObserver.observe(e,{childList:!0,subtree:!0,characterData:!0}))})}function $o(o){return o.closest("[class*='vxe'], [class*='umo']")!==null}function A(o,e){let t=0;for(const l of e)l!==o&&$o(l)||(t=Math.max(t,K(l)));o.style.setProperty("--dialog-hooks-scrollbar",`${Math.min(Mo,Math.max(0,t))}px`)}function qo(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 Po(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 l=JSON.parse(vo.parse(t).toString(xo));if(l?.activeMenuInfo?.icon)return l.activeMenuInfo.icon}}catch{}try{return _o(F).getActiveMenuInfo?.icon||""}catch{return""}}function Be(o){return function(t){const l=[],a=()=>l[l.length-1],_=s=>{const i=w(s?.data),k=w(s?.row),y=w(s?.formData),p=s?.id??s?.taskId??s?.selectedId??i?.id??k?.id??y?.id;return p==null||p===""?"":String(p)},h=(s,i,k,y="drawer",p,oo=!0)=>{Ao();const{icon:eo,hideConfirm:L,hideFooter:to,dialogBody:ro,...c}=k||{},f=qo(ro,o.defaultDialogBody??!0,oo),lo=`${y}|${typeof s=="string"?s:s?.__name||s?.name||""}|${c.title||""}|${_(i)}`,B=x(!1),$=x(!1),r={open:x(!0),loading:P(()=>B.value||$.value),manualLoading:B,requestLoading:$,requestLoadingIds:new Set,childInstance:x(),app:null,div:null,closing:!1,renderKey:lo,actionName:c.title||"确认"},ao=Object.fromEntries(Object.entries(i||{}).map(([n,u])=>[n,w(u)])),io={...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]:[]]},so=c.onClosed,I=typeof c.title=="string"&&c.title,q=I?Po(o,eo):"",no=()=>d("div",{class:"dialog-hooks-header"},[q?d("div",{class:"dialog-hooks-header-icon"},[d(ko,{modelValue:q})]):null,d("div",{class:"dialog-hooks-header-title"},[c.title]),r.loading.value&&!L?null:d("button",{type:"button",class:"dialog-hooks-header-close",onClick:()=>m(r)},[d(N.Close)])]),g=co(()=>d(y==="drawer"?uo:po,{...io,modelValue:r.open.value,showClose:I?!1:c.showClose??!0,onClosed(){R(r,!1),W(o,r,!1),Co(r),so?.();const n=l.indexOf(r);n>-1&&l.splice(n,1),r.app?.unmount(),r.div?.parentNode&&r.div.parentNode.removeChild(r.div),r.app=null,r.div=null},onClose(){m(r)}},{...I?{header:no}:{},default:()=>{const n=d(s,{...ao,loading:r.loading.value,"onUpdate:loading":u=>{r.manualLoading.value=u},ref:r.childInstance});return f.enabled?d(yo,{scroll:f.scroll,class:f.class,contentClass:f.contentClass},{default:()=>n}):n},...to?{}:{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(r),loading:!L&&r.loading.value},"取 消"),L?null:d(z,{type:"primary",onClick:()=>J(r),loading:r.loading.value},"确 认")])}}}));o.plugins?.forEach(n=>g.use(n)),g.use(go,{locale:mo}),g.use(F),g.use(o.router);for(const[n,u]of Object.entries(N))g.component(n,u);bo(g),o.setupApp?.(g);const O=document.createElement("div");return document.body.appendChild(O),r.app=g,r.div=O,l.push(r),Oo(r),R(r,!0),W(o,r,!0),g.mount(O),ho(()=>{To(document.body),D(document.body),r.childInstance.value?.resetQuery?.(),setTimeout(()=>{D(document.body),window.dispatchEvent(new Event("resize"))},350),setTimeout(()=>D(document.body),1200)}),fo(),{cancel:()=>m(r)}},J=async s=>{const i=s||a();if(!i)return;const{runBehaviorAction:k}=So();await k({code:`dialog:${i.renderKey}:confirm`,name:i.actionName||"确认",actionType:"SUBMIT"},async()=>{try{i.manualLoading.value=!0,await i.childInstance.value?.confirm?.(),t&&m(i)}catch{}finally{i.manualLoading.value=!1}})},m=s=>{const i=s||a();!i||!i.open.value||(i.closing=!0,i.open.value=!1)},X=s=>{const i=a();i&&(i.manualLoading.value=s)},Q=()=>a()?.loading.value??!1,Z=P(()=>a()?.childInstance.value);return{render:h,cancel:m,setLoading:X,getLoading:Q,instance:Z}}}export{Be as createDialogHooks,Be as default};
@@ -2,8 +2,9 @@ import { type Ref } from 'vue';
2
2
  /**
3
3
  * 审核当时快照(业务展示用):
4
4
  *
5
- * <p>通用层只负责“取哪一版数据”:先取引擎任务局部变量 {@code bizSnapshot}(业务提交时随任务存的当时快照),
6
- * 取不到再按 {@code bizId + wfTaskId} 查通用业务快照表兜底;两处都没有就返回 null,
5
+ * <p>通用层只负责“取哪一版数据”:先按 {@code bizId + wfTaskId} 查通用业务快照表(任务ID取不到时按
6
+ * {@code taskDefKey} 取该节点最近一次)——读取时后端统一补附件 {@code available} 与 {@code <字段>Name};
7
+ * 查不到再兜底取引擎任务局部变量 {@code bizSnapshot}(业务提交时随任务存的当时快照),两处都没有就返回 null,
7
8
  * 由业务页面决定怎么展示(此时页面通常直接展示业务当前数据)。
8
9
  *
9
10
  * <p>展示(字段、布局、字典翻译)完全由业务页面负责——本 hook 不渲染任何内容。
@@ -15,6 +16,15 @@ export interface UseWorkflowSnapshotOptions {
15
16
  taskDefKey?: string | (() => string | undefined);
16
17
  /** 是否历史查看(只读):保留给后续按来源做差异化展示用;当前标记只在命中快照时展示 */
17
18
  readonly?: () => boolean;
19
+ /**
20
+ * 是否允许取快照(默认允许)。
21
+ *
22
+ * <p>只有历史查看(已办详情、流程查看、流程事项管理“查看当时数据”)才取“当时那一版”;
23
+ * 待办(当前任务仍在办)传 false:不发请求、直接按“没有快照”处理,由业务页面展示当前数据。
24
+ * 撤回会把已办结的任务还原成待办且任务ID沿用,此时任务上残留的上一轮快照不代表当前数据,
25
+ * 待办若照旧命中快照,会出现“显示旧数据”“业务组件按命中快照判成只读、改不动”等问题。
26
+ */
27
+ enabled?: () => boolean;
18
28
  }
19
29
  export interface WorkflowSnapshotSource {
20
30
  type: 'info' | 'warning';
@@ -1 +1 @@
1
- import{ref as i}from"vue";import m from"../api/workflow/workflowInstApi.js";import"../utils/request.js";import"../utils/AxiosConfig.js";import"axios";import"../utils/uuid.js";import"uuid";import"../utils/encrypt.js";import"jsencrypt";import"../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../utils/behaviorContext.js";import"../utils/dateTime.js";import"element-plus";import"../utils/frontendBus.js";import"../utils/globalLoading.js";import"../utils/workflowTaskContext.js";import"../config/GlobalLoadingConfig.js";const y=t=>{if(!t)return null;if(typeof t=="string")try{return JSON.parse(t)}catch{return null}return typeof t=="object"?t:null};function $(t,p={}){const o=i(null),a=i(!1),f=i(null),l=i(!1),h=()=>typeof t=="function"?t():typeof t=="string"?t:t.value,c=r=>String((typeof r=="function"?r():r)||"");return{snapshot:o,isSnapshot:a,dataSourceMeta:f,loading:l,refresh:async()=>{const r=String(h()||""),e=c(p.wfTaskId),k=c(p.taskDefKey);l.value=!0;try{if(o.value=null,a.value=!1,r||e)try{const n=await m.snapshot(r,{wfTaskId:e,taskDefKey:k}),s=y(n?.snapshot);s&&(o.value=s)}catch(n){console.warn("查询审核当时快照失败",n)}if(!o.value&&e)try{const n=await m.getTaskInst(e),s=y(n?.taskLocalVars?.bizSnapshot);s&&(o.value=s)}catch{}a.value=!!o.value;const u=String(o.value?.snapshotTime||"");f.value=a.value?{type:"info",label:u?`快照 · ${u}`:"快照"}:null}finally{l.value=!1}}}}export{$ as default,y as parseWorkflowSnapshot};
1
+ import{ref as p}from"vue";import m from"../api/workflow/workflowInstApi.js";import"../utils/request.js";import"../utils/AxiosConfig.js";import"axios";import"../utils/uuid.js";import"uuid";import"../utils/encrypt.js";import"jsencrypt";import"../utils/behaviorTrack.js";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../utils/behaviorContext.js";import"../utils/dateTime.js";import"element-plus";import"../utils/frontendBus.js";import"../utils/globalLoading.js";import"../utils/workflowTaskContext.js";import"../config/GlobalLoadingConfig.js";const y=t=>{if(!t)return null;if(typeof t=="string")try{return JSON.parse(t)}catch{return null}return typeof t=="object"?t:null};function V(t,s={}){const o=p(null),e=p(!1),f=p(null),l=p(!1),h=()=>typeof t=="function"?t():typeof t=="string"?t:t.value,u=r=>String((typeof r=="function"?r():r)||"");return{snapshot:o,isSnapshot:e,dataSourceMeta:f,loading:l,refresh:async()=>{const r=String(h()||""),i=u(s.wfTaskId),v=u(s.taskDefKey);if(s.enabled&&!s.enabled()){o.value=null,e.value=!1,f.value=null,l.value=!1;return}l.value=!0;try{if(o.value=null,e.value=!1,r||i)try{const a=await m.snapshot(r,{wfTaskId:i,taskDefKey:v}),n=y(a?.snapshot);n&&(o.value=n)}catch(a){console.warn("查询审核当时快照失败",a)}if(!o.value&&i)try{const a=await m.getTaskInst(i),n=y(a?.taskLocalVars?.bizSnapshot);n&&(o.value=n)}catch{}e.value=!!o.value;const c=String(o.value?.snapshotTime||"");f.value=e.value?{type:"info",label:c?`快照 · ${c}`:"快照"}:null}finally{l.value=!1}}}}export{V as default,y as parseWorkflowSnapshot};
@@ -1 +1 @@
1
- function n(e){if(e==="images")return".jpg,.jpeg,.png,.gif,.bmp";if(e==="document")return".txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx";if(e==="txt")return".txt";if(e==="pdf")return".pdf";if(e==="word")return".doc,.docx";if(e==="excel")return".xls,.xlsx";if(e==="ppt")return".ppt,.pptx";if(e==="xml")return".xml";if(e==="ocr")return".pdf,.jpg,.jpeg,.png,.bmp,.tif,.tiff,.webp"}function o(e){const t=n(e);return t?t.split(",").map(r=>r.slice(1).toLowerCase()):null}const p=["images","document","txt","pdf","word","excel","ppt","xml","ocr"],f=new Set(p.flatMap(e=>o(e)??[]));function i(e){const t=e.replace(/^\./,"").toLowerCase();return f.has(t)}function s(e){const t=e.type?.replace(/^\./,"");return t?t.toLowerCase():(e.name.split(".").pop()??"").toLowerCase()}export{n as getAcceptString,o as getAcceptSuffixes,s as getFileSuffix,i as isPreviewableSuffix};
1
+ function n(e){if(e==="images")return".jpg,.jpeg,.png,.gif,.bmp";if(e==="document")return".txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx";if(e==="txt")return".txt";if(e==="pdf")return".pdf";if(e==="word")return".doc,.docx";if(e==="excel")return".xls,.xlsx";if(e==="ppt")return".ppt,.pptx";if(e==="xml")return".docx,.xml";if(e==="ocr")return".pdf,.jpg,.jpeg,.png,.bmp,.tif,.tiff,.webp"}function o(e){const t=n(e);return t?t.split(",").map(r=>r.slice(1).toLowerCase()):null}const p=["images","document","txt","pdf","word","excel","ppt","xml","ocr"],f=new Set(p.flatMap(e=>o(e)??[]));function i(e){const t=e.replace(/^\./,"").toLowerCase();return f.has(t)}function s(e){const t=e.type?.replace(/^\./,"");return t?t.toLowerCase():(e.name.split(".").pop()??"").toLowerCase()}export{n as getAcceptString,o as getAcceptSuffixes,s as getFileSuffix,i as isPreviewableSuffix};