adtec-hnyzfc-core-package 1.7.7 → 1.8.0

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,235 @@
1
+ {
2
+ "name": "adtec-hnyzfc-core-package",
3
+ "version": "1.8.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=20.19.0"
8
+ },
9
+ "main": "./dist/src/packages/index.js",
10
+ "module": "./dist/src/packages/index.js",
11
+ "types": "./dist/src/packages/index.d.ts",
12
+ "files": [
13
+ "dist",
14
+ "README.md",
15
+ "README.en.md"
16
+ ],
17
+ "sideEffects": [
18
+ "**/*.css",
19
+ "./dist/src/config/ElementPlusConfig.js"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/src/packages/index.d.ts",
24
+ "import": "./dist/src/packages/index.js"
25
+ },
26
+ "./vite/umoIntegration": {
27
+ "types": "./dist/vite/umoIntegration.d.ts",
28
+ "import": "./dist/vite/umoIntegration.js"
29
+ },
30
+ "./prebuilt/*": "./dist/prebuilt/*",
31
+ "./src/components/vxeReplace": null,
32
+ "./src/components/vxeReplace/*": null,
33
+ "./src/components/VxeExportDialog": null,
34
+ "./src/components/VxeExportDialog/*": null,
35
+ "./src/components/vxeGrid": null,
36
+ "./src/components/vxeGrid/*": null,
37
+ "./src/components/ElGridExportDialog": {
38
+ "types": "./dist/src/components/ElGridExportDialog/index.d.ts",
39
+ "import": "./dist/src/components/ElGridExportDialog/index.js"
40
+ },
41
+ "./src/config/VxeTableConfig": null,
42
+ "./src/config/VxeTableConfig.ts": null,
43
+ "./src/config/vxeSelectColumn": null,
44
+ "./src/config/vxeSelectColumn.ts": null,
45
+ "./src/config/vxeDragRule": null,
46
+ "./src/config/vxeDragRule.ts": null,
47
+ "./src/interface/IVxeTable": null,
48
+ "./src/interface/IVxeTable.ts": null,
49
+ "./style.css": "./dist/styles/element-ui.css",
50
+ "./src/css/elementUI/index.scss": "./dist/styles/element-ui.css",
51
+ "./src/assets/style/index.less": "./dist/styles/core.css",
52
+ "./src/*.vue": {
53
+ "types": "./dist/src/*.vue.d.ts",
54
+ "import": "./dist/src/*.vue.js"
55
+ },
56
+ "./src/*.ts": {
57
+ "types": "./dist/src/*.d.ts",
58
+ "import": "./dist/src/*.js"
59
+ },
60
+ "./src/*": {
61
+ "types": "./dist/src/*.d.ts",
62
+ "import": "./dist/src/*.js"
63
+ },
64
+ "./prebuilt/umo-editor": {
65
+ "types": "./dist/prebuilt/umo-editor/umo-editor.d.ts",
66
+ "import": "./dist/prebuilt/umo-editor/umo-editor.js"
67
+ },
68
+ "./vite/sharedRuntime": {
69
+ "types": "./dist/vite/sharedRuntime.d.ts",
70
+ "import": "./dist/vite/sharedRuntime.js",
71
+ "default": "./dist/vite/sharedRuntime.js"
72
+ }
73
+ },
74
+ "scripts": {
75
+ "build:vite-integration": "node scripts/build-vite-integration.mjs",
76
+ "prepack": "npm run build && npm run verify:package",
77
+ "build": "node scripts/build-package.mjs",
78
+ "dev:watch": "CORE_PACKAGE_WATCH=1 node scripts/build-package.mjs",
79
+ "build-only": "npm run build",
80
+ "type-check": "vue-tsc --build",
81
+ "verify:package": "node scripts/verify-package.mjs",
82
+ "lint": "eslint . --fix",
83
+ "format": "prettier --write src/",
84
+ "build:shared": "node scripts/build-shared.mjs"
85
+ },
86
+ "dependencies": {
87
+ "@element-plus/icons-vue": "^2.3.1",
88
+ "@eslint/object-schema": "3.0.2",
89
+ "@floating-ui/dom": "1.7.5",
90
+ "@tool-belt/type-predicates": "1.4.1",
91
+ "@types/echarts": "^5.0.0",
92
+ "@vueuse/components": "^13.0.0",
93
+ "@vueuse/core": "^13.0.0",
94
+ "@vxe-ui/core": "^4.4.19",
95
+ "@vxe-ui/plugin-export-xlsx": "4.5.4",
96
+ "axios": "^1.7.7",
97
+ "crypto-js": "^4.2.0",
98
+ "cropperjs": "^2.1.1",
99
+ "dom-to-image-more": "3.7.2",
100
+ "echarts": "^5.6.0",
101
+ "es-drager": "1.2.11",
102
+ "exceljs": "4.4.0",
103
+ "fast-glob": "3.3.3",
104
+ "fflate": "^0.3.8",
105
+ "file-saver": "2.0.5",
106
+ "hotkeys-js": "4.0.2",
107
+ "jsbarcode": "3.12.3",
108
+ "jsencrypt": "^3.3.2",
109
+ "linq-to-ts": "^1.3.0",
110
+ "lowlight": "3.3.0",
111
+ "nzh": "1.0.14",
112
+ "pinia": "^2.3.0",
113
+ "pinia-plugin-store": "^2.2.9",
114
+ "pretty-bytes": "7.1.0",
115
+ "pure-svg-code": "1.0.6",
116
+ "scss": "^0.2.4",
117
+ "scss-loader": "^0.0.1",
118
+ "smooth-signature": "1.0.15",
119
+ "socket.io-client": "^2.3.1",
120
+ "ts-md5": "^1.3.1",
121
+ "uuid": "^11.0.3",
122
+ "vue-demi": "^0.14.10",
123
+ "vue-focus-lock": "^3.0.0",
124
+ "vue-router": "^4.5.0",
125
+ "vxe-table": "4.20.11",
126
+ "wujie-vue3": "^1.0.24",
127
+ "xlsx-js-style": "^1.2.0",
128
+ "tdesign-vue-next": "1.18.2",
129
+ "yjs": "13.6.29",
130
+ "y-protocols": "1.0.6",
131
+ "y-prosemirror": "1.0.6",
132
+ "vue-i18n": "11.2.8",
133
+ "@tiptap/core": "3.20.0",
134
+ "@tiptap/extension-bold": "3.20.0",
135
+ "@tiptap/extension-code-block": "3.20.0",
136
+ "@tiptap/extension-code-block-lowlight": "3.20.0",
137
+ "@tiptap/extension-collaboration": "3.20.0",
138
+ "@tiptap/extension-details": "3.20.0",
139
+ "@tiptap/extension-document": "3.20.0",
140
+ "@tiptap/extension-drag-handle": "3.20.0",
141
+ "@tiptap/extension-drag-handle-vue-3": "3.20.0",
142
+ "@tiptap/extension-horizontal-rule": "3.20.0",
143
+ "@tiptap/extension-image": "3.20.0",
144
+ "@tiptap/extension-invisible-characters": "3.20.0",
145
+ "@tiptap/extension-link": "3.20.0",
146
+ "@tiptap/extension-list": "3.20.0",
147
+ "@tiptap/extension-mathematics": "3.20.0",
148
+ "@tiptap/extension-mention": "3.20.0",
149
+ "@tiptap/extension-node-range": "3.20.0",
150
+ "@tiptap/extension-subscript": "3.20.0",
151
+ "@tiptap/extension-superscript": "3.20.0",
152
+ "@tiptap/extension-table": "3.20.0",
153
+ "@tiptap/extension-table-of-contents": "3.20.0",
154
+ "@tiptap/extension-text-align": "3.20.0",
155
+ "@tiptap/extension-text-style": "3.20.0",
156
+ "@tiptap/extension-typography": "3.20.0",
157
+ "@tiptap/extension-unique-id": "3.20.0",
158
+ "@tiptap/extensions": "3.20.0",
159
+ "@tiptap/pm": "3.20.0",
160
+ "@tiptap/starter-kit": "3.20.0",
161
+ "@tiptap/suggestion": "3.20.0",
162
+ "@tiptap/vue-3": "3.20.0",
163
+ "@tiptap/y-tiptap": "3.0.9"
164
+ },
165
+ "peerDependencies": {
166
+ "@tiptap/extension-collaboration": "3.20.0",
167
+ "@tiptap/y-tiptap": "3.0.2",
168
+ "element-plus": "^2.14.4",
169
+ "vue": "^3.5.41",
170
+ "y-prosemirror": "1.2.15",
171
+ "y-protocols": "1.0.6",
172
+ "yjs": "13.6.29"
173
+ },
174
+ "devDependencies": {
175
+ "@types/crypto-js": "^4.2.2",
176
+ "@types/node": "^22.10.2",
177
+ "@vitejs/plugin-vue": "^5.2.1",
178
+ "@vitejs/plugin-vue-jsx": "^4.1.1",
179
+ "@vue-macros/reactivity-transform": "3.1.2",
180
+ "@vue/eslint-config-prettier": "^10.1.0",
181
+ "@vue/eslint-config-typescript": "^14.1.3",
182
+ "@vue/tsconfig": "^0.7.0",
183
+ "element-plus": "2.14.4",
184
+ "esbuild": "^0.25.12",
185
+ "eslint": "^9.14.0",
186
+ "eslint-plugin-vue": "^9.30.0",
187
+ "less": "^4.2.0",
188
+ "npm-run-all2": "^7.0.2",
189
+ "prettier": "^3.3.3",
190
+ "sass-embedded": "^1.83.1",
191
+ "typescript": "~5.6.3",
192
+ "unplugin-auto-import": "^21.0.0",
193
+ "unplugin-vue-components": "^32.1.0",
194
+ "vite": "^6.0.5",
195
+ "vue": "^3.5.41",
196
+ "vue-tsc": "^2.1.10"
197
+ },
198
+ "description": "湖南烟支辅材项目 Vue 3 前端核心依赖包。",
199
+ "author": "",
200
+ "license": "ISC",
201
+ "pnpm": {
202
+ "overrides": {
203
+ "@tiptap/core": "3.20.0",
204
+ "@tiptap/extension-bold": "3.20.0",
205
+ "@tiptap/extension-code-block": "3.20.0",
206
+ "@tiptap/extension-code-block-lowlight": "3.20.0",
207
+ "@tiptap/extension-collaboration": "3.20.0",
208
+ "@tiptap/extension-details": "3.20.0",
209
+ "@tiptap/extension-document": "3.20.0",
210
+ "@tiptap/extension-drag-handle": "3.20.0",
211
+ "@tiptap/extension-drag-handle-vue-3": "3.20.0",
212
+ "@tiptap/extension-horizontal-rule": "3.20.0",
213
+ "@tiptap/extension-image": "3.20.0",
214
+ "@tiptap/extension-invisible-characters": "3.20.0",
215
+ "@tiptap/extension-link": "3.20.0",
216
+ "@tiptap/extension-list": "3.20.0",
217
+ "@tiptap/extension-mathematics": "3.20.0",
218
+ "@tiptap/extension-mention": "3.20.0",
219
+ "@tiptap/extension-node-range": "3.20.0",
220
+ "@tiptap/extension-subscript": "3.20.0",
221
+ "@tiptap/extension-superscript": "3.20.0",
222
+ "@tiptap/extension-table": "3.20.0",
223
+ "@tiptap/extension-table-of-contents": "3.20.0",
224
+ "@tiptap/extension-text-align": "3.20.0",
225
+ "@tiptap/extension-text-style": "3.20.0",
226
+ "@tiptap/extension-typography": "3.20.0",
227
+ "@tiptap/extension-unique-id": "3.20.0",
228
+ "@tiptap/extensions": "3.20.0",
229
+ "@tiptap/pm": "3.20.0",
230
+ "@tiptap/starter-kit": "3.20.0",
231
+ "@tiptap/suggestion": "3.20.0",
232
+ "@tiptap/vue-3": "3.20.0"
233
+ }
234
+ }
235
+ }
@@ -1 +1 @@
1
- import{defineComponent as H,computed as a,isVNode as p,h as n,resolveComponent as c,resolveDynamicComponent as N,cloneVNode as J}from"vue";import K from"../../hooks/useBehaviorAction.js";import Y from"../../hooks/useOperationAuth.js";import{_ as $}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/behaviorTrack.js";import"axios";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/uuid.js";import"uuid";import"../../utils/behaviorContext.js";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/dateTime.js";import"vue-router";import"../../stores/permissionStore.js";import"pinia";import"../../utils/frontendBus.js";import"../../utils/operationAuth.js";import"../../stores/userInfoStore.js";import"../../utils/userSessionStorage.js";const T={primary:"var(--el-color-primary)",success:"var(--el-color-success)",info:"var(--el-color-info)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",error:"var(--el-color-danger)"},j=H({name:"OperationAuth",props:{operCode:{type:[String,Array],required:!0},menuCode:String,noConfig:Boolean,loadType:String,icon:String,remark:String,alias:String,color:String,displayMode:{type:String,default:"button"}},setup(r,{slots:i}){const{getOperation:L}=Y(),{runBehaviorAction:V}=K(),z=a(()=>Array.isArray(r.operCode)?r.operCode:[r.operCode]),m=a(()=>L(z.value,r.menuCode)),x=a(()=>!!m.value),I=a(()=>{const e=r.remark??m.value?.remark;if(!e)return{alias:"",color:""};try{const t=JSON.parse(e);return{alias:t?.aliases?.alias1||t?.aliases?.alias||"",color:t?.color||t?.icon?.color||t?.text?.color||""}}catch{return{alias:"",color:""}}}),s=a(()=>(r.icon??m.value?.icon??"").trim()),C=a(()=>r.alias||I.value.alias||m.value?.name||""),S=a(()=>m.value?.code||z.value[0]||""),f=a(()=>C.value||S.value||"未命名操作"),y=a(()=>({"data-behavior-operation-code":S.value,"data-behavior-operation-name":f.value,"data-behavior-scope":"manual","data-track-code":S.value,"data-track-name":f.value})),b=a(()=>r.color||I.value.color||""),v=a(()=>b.value.trim().toLowerCase()),u=a(()=>v.value!==""&&v.value in T),h=a(()=>{if(u.value)return v.value==="error"?"danger":v.value}),g=a(()=>{if(u.value)return;const e=b.value.trim();if(e)return{color:T[v.value]||e}}),B=a(()=>r.loadType??m.value?.loadType??""),k=a(()=>String(B.value??"")),P=a(()=>{const e=i.default?.()[0];if(!e||!p(e))return!1;const t=e.type||{},l=String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"");return/^elicon/i.test(l)?!0:/^elbutton$/i.test(l)&&!!e.props?.icon}),w=a(()=>{const e=i.default?.()[0];if(!e||!p(e))return!1;const t=e.type||{};return String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"").toLowerCase()==="elbutton"&&k.value==="20"}),_=a(()=>r.displayMode==="menuItem"?"menuItem":r.noConfig?"slot":w.value||P.value?"icon":k.value==="10"?"text":k.value==="20"?"icon":k.value==="30"?"iconText":"slot"),M=a(()=>i.default?.()[0]?.props?.onClick),A=a(()=>{const e=i.default?.()[0];return p(e)&&e.props?.["data-behavior-scope"]==="manual"}),O=e=>{const t=M.value;return Array.isArray(t)?t.reduce((o,l)=>typeof l=="function"?l(...e):o,void 0):typeof t=="function"?t(...e):void 0},d=(...e)=>A.value?O(e):V({code:S.value,name:f.value,actionType:"CLICK"},()=>O(e)),Z=e=>{if(e.type==="button")return!0;const t=e.type,o=String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"").toLowerCase();return o==="elbutton"||o==="eliconbtn"||o==="eliconsearch"},E=e=>{const t=e.type;return String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"").toLowerCase()==="eliconbtn"},W=e=>u.value||!E(e)?{}:{neutral:!0},R=()=>(i.default?.()||[]).map(t=>{if(!p(t)||!Z(t))return t;const o=J(t,{...y.value,...A.value?{}:{onClick:d},type:u.value?h.value:void 0,...W(t),style:b.value.trim()?g.value:void 0});return!A.value&&o.props&&(o.props.onClick=d),o});return()=>{if(!x.value)return null;if(_.value==="icon"){const e=i.default?.()[0],t=p(e)?e.props||{}:{};if(w.value){const o={...t};delete o.modelValue,delete o.tip,delete o.elementType,delete o.neutral,delete o.icon;const l=s.value||"adtec-tips",q=n(c("el-icon"),{},()=>l.startsWith("adtec-")?n("svg",{class:"icon","aria-hidden":"true"},[n("use",{href:"#"+l})]):n(N(l))),D=n(c("el-button"),{...o,...y.value,type:u.value?h.value:void 0,title:f.value,"aria-label":f.value,style:[o.style,g.value],onClick:d},{icon:()=>q});return n(c("el-tooltip"),{content:f.value,placement:"top"},{default:()=>D})}return n(c("el-icon-btn"),{...t,...y.value,modelValue:s.value||t.modelValue||"adtec-tips",tip:C.value||t.tip,type:u.value?h.value:void 0,neutral:!u.value,style:g.value,onClick:d})}if(_.value==="text"){const e=i.default?.()[0],o={...p(e)?e.props||{}:{}};return delete o.modelValue,delete o.tip,delete o.icon,n(c("el-button"),{...o,...y.value,type:u.value?h.value:void 0,size:P.value?"small":o.size,style:[o.style,g.value],onClick:d},()=>C.value)}if(_.value==="iconText"){const e=i.default?.()[0],t=p(e)?e.props||{}:{},o=s.value?n(c("el-icon"),{},()=>s.value.startsWith("adtec-")?n("svg",{class:"icon","aria-hidden":"true"},[n("use",{href:"#"+s.value})]):n(N(s.value))):void 0;return n(c("el-button"),{...t,...y.value,type:h.value,style:[t.style,g.value],onClick:d},[o,n("span",{},C.value)])}if(_.value==="menuItem"){const e=s.value,t=v.value?{color:T[v.value]||b.value.trim()}:void 0;return n("span",{...y.value,class:"operation-auth-menu-item",style:t,onClick:d},[e?n(c("el-icon"),{},()=>e.startsWith("adtec-")?n("svg",{class:"icon","aria-hidden":"true"},[n("use",{href:"#"+e})]):n(N(e))):void 0,n("span",{},C.value)])}return R()}}}),ye=$(j,[["__scopeId","data-v-6a3579c4"]]);export{ye as default};
1
+ import{defineComponent as H,computed as a,isVNode as p,h as n,resolveComponent as c,resolveDynamicComponent as A,cloneVNode as J}from"vue";import K from"../../hooks/useBehaviorAction.js";import Y from"../../hooks/useOperationAuth.js";import{_ as $}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../utils/behaviorTrack.js";import"axios";import"crypto-js/enc-base64";import"crypto-js/enc-utf8";import"../../utils/uuid.js";import"uuid";import"../../utils/behaviorContext.js";import"../../utils/encrypt.js";import"jsencrypt";import"../../utils/dateTime.js";import"vue-router";import"../../stores/permissionStore.js";import"pinia";import"../../utils/frontendBus.js";import"../../utils/operationAuth.js";import"../../stores/userInfoStore.js";import"../../utils/userSessionStorage.js";const N={primary:"var(--el-color-primary)",success:"var(--el-color-success)",info:"var(--el-color-info)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",error:"var(--el-color-danger)"},j=H({name:"OperationAuth",props:{operCode:{type:[String,Array],required:!0},menuCode:String,noConfig:Boolean,loadType:String,icon:String,remark:String,alias:String,color:String,displayMode:{type:String,default:"button"}},setup(l,{slots:i}){const{getOperation:B}=Y(),{runBehaviorAction:L}=K(),T=a(()=>Array.isArray(l.operCode)?l.operCode:[l.operCode]),m=a(()=>B(T.value,l.menuCode)),V=a(()=>!!m.value),z=a(()=>{const e=l.remark??m.value?.remark;if(!e)return{alias:"",color:""};try{const t=JSON.parse(e);return{alias:t?.aliases?.alias1||t?.aliases?.alias||"",color:t?.color||t?.icon?.color||t?.text?.color||""}}catch{return{alias:"",color:""}}}),s=a(()=>(l.icon??m.value?.icon??"").trim()),C=a(()=>l.alias||z.value.alias||m.value?.name||""),S=a(()=>m.value?.code||T.value[0]||""),f=a(()=>C.value||S.value||"未命名操作"),y=a(()=>({"data-behavior-operation-code":S.value,"data-behavior-operation-name":f.value,"data-behavior-scope":"manual","data-track-code":S.value,"data-track-name":f.value})),b=a(()=>l.color||z.value.color||""),v=a(()=>b.value.trim().toLowerCase()),u=a(()=>v.value!==""&&v.value in N),h=a(()=>{if(u.value)return v.value==="error"?"danger":v.value}),g=a(()=>{if(u.value)return;const e=b.value.trim();if(e)return{color:N[v.value]||e}}),x=a(()=>l.loadType??m.value?.loadType??""),k=a(()=>String(x.value??"")),I=a(()=>{const e=i.default?.()[0];if(!e||!p(e))return!1;const t=e.type||{},r=String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"");return/^elicon/i.test(r)?!0:/^elbutton$/i.test(r)&&!!e.props?.icon}),P=a(()=>{const e=i.default?.()[0];if(!e||!p(e))return!1;const t=e.type||{};return String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"").toLowerCase()==="elbutton"&&k.value==="20"}),_=a(()=>l.displayMode==="menuItem"?"menuItem":l.noConfig?"slot":P.value||I.value?"icon":k.value==="10"?"text":k.value==="20"?"icon":k.value==="30"?"iconText":"slot"),M=()=>i.default?.()[0]?.props?.onClick,w=()=>{const e=i.default?.()[0];return p(e)&&e.props?.["data-behavior-scope"]==="manual"},O=e=>{const t=M();return Array.isArray(t)?t.reduce((o,r)=>typeof r=="function"?r(...e):o,void 0):typeof t=="function"?t(...e):void 0},d=(...e)=>w()?O(e):L({code:S.value,name:f.value,actionType:"CLICK"},()=>O(e)),Z=e=>{if(e.type==="button")return!0;const t=e.type,o=String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"").toLowerCase();return o==="elbutton"||o==="eliconbtn"||o==="eliconsearch"},E=e=>{const t=e.type;return String(t?.name||t?.__name||"").replace(/[^a-zA-Z]/g,"").toLowerCase()==="eliconbtn"},W=e=>u.value||!E(e)?{}:{neutral:!0},R=()=>(i.default?.()||[]).map(t=>{if(!p(t)||!Z(t))return t;const o=w(),r=J(t,{...y.value,...o?{}:{onClick:d},type:u.value?h.value:void 0,...W(t),style:b.value.trim()?g.value:void 0});return!o&&r.props&&(r.props.onClick=d),r});return()=>{if(!V.value)return null;if(_.value==="icon"){const e=i.default?.()[0],t=p(e)?e.props||{}:{};if(P.value){const o={...t};delete o.modelValue,delete o.tip,delete o.elementType,delete o.neutral,delete o.icon;const r=s.value||"adtec-tips",q=n(c("el-icon"),{},()=>r.startsWith("adtec-")?n("svg",{class:"icon","aria-hidden":"true"},[n("use",{href:"#"+r})]):n(A(r))),D=n(c("el-button"),{...o,...y.value,type:u.value?h.value:void 0,title:f.value,"aria-label":f.value,style:[o.style,g.value],onClick:d},{icon:()=>q});return n(c("el-tooltip"),{content:f.value,placement:"top"},{default:()=>D})}return n(c("el-icon-btn"),{...t,...y.value,modelValue:s.value||t.modelValue||"adtec-tips",tip:C.value||t.tip,type:u.value?h.value:void 0,neutral:!u.value,style:g.value,onClick:d})}if(_.value==="text"){const e=i.default?.()[0],o={...p(e)?e.props||{}:{}};return delete o.modelValue,delete o.tip,delete o.icon,n(c("el-button"),{...o,...y.value,type:u.value?h.value:void 0,size:I.value?"small":o.size,style:[o.style,g.value],onClick:d},()=>C.value)}if(_.value==="iconText"){const e=i.default?.()[0],t=p(e)?e.props||{}:{},o=s.value?n(c("el-icon"),{},()=>s.value.startsWith("adtec-")?n("svg",{class:"icon","aria-hidden":"true"},[n("use",{href:"#"+s.value})]):n(A(s.value))):void 0;return n(c("el-button"),{...t,...y.value,type:h.value,style:[t.style,g.value],onClick:d},[o,n("span",{},C.value)])}if(_.value==="menuItem"){const e=s.value,t=v.value?{color:N[v.value]||b.value.trim()}:void 0;return n("span",{...y.value,class:"operation-auth-menu-item",style:t,onClick:d},[e?n(c("el-icon"),{},()=>e.startsWith("adtec-")?n("svg",{class:"icon","aria-hidden":"true"},[n("use",{href:"#"+e})]):n(A(e))):void 0,n("span",{},C.value)])}return R()}}}),ye=$(j,[["__scopeId","data-v-652290b3"]]);export{ye as default};
@@ -0,0 +1,45 @@
1
+ import type { ISysMenuInfoVo } from '../../interface/ISysMenuInfoVo';
2
+ /** 子应用额外的业务总线监听(待办、流程详情、组件消息等),由各子应用提供 */
3
+ export interface ISubAppBusListener {
4
+ event: string;
5
+ handler: (...args: any[]) => void;
6
+ }
7
+ type __VLS_Props = {
8
+ /** 应用模块码:WORKFLOW / BASIC / YZFC */
9
+ applicationModule: string;
10
+ /** 菜单组件映射(各子应用的 import.meta.glob 结果,按 /src/... 路径索引) */
11
+ modules: Record<string, () => Promise<any>>;
12
+ /** 默认页路由名(工作流子应用是 default,业务/基础数据是 defaultIndex) */
13
+ defaultRouteName?: string;
14
+ /** 业务总线监听(会被统一注册/解绑) */
15
+ busListeners?: ISubAppBusListener[];
16
+ /** 外壳挂载后(注册完总线)的额外初始化,如恢复待办抽屉 */
17
+ onShellMounted?: () => void;
18
+ /** 外壳卸载时的额外清理 */
19
+ onShellUnmounted?: () => void;
20
+ /** wujie 环境下预热默认页(各子应用动态 import 自己的默认页) */
21
+ preloadDefaultView?: () => void;
22
+ };
23
+ declare var __VLS_1: {};
24
+ type __VLS_Slots = {} & {
25
+ popup?: (props: typeof __VLS_1) => any;
26
+ };
27
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {
28
+ openMenu: (menuData: ISysMenuInfoVo & {
29
+ path?: string;
30
+ }, params?: unknown) => Promise<void>;
31
+ notifyPageReady: (menuCode?: string | symbol | null) => void;
32
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
33
+ defaultRouteName: string;
34
+ busListeners: ISubAppBusListener[];
35
+ onShellMounted: () => void;
36
+ onShellUnmounted: () => void;
37
+ preloadDefaultView: () => void;
38
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
39
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
40
+ export default _default;
41
+ type __VLS_WithSlots<T, S> = T & {
42
+ new (): {
43
+ $slots: S;
44
+ };
45
+ };
@@ -0,0 +1 @@
1
+ import{defineComponent as Q,ref as M,computed as S,onMounted as z,onUnmounted as J,resolveComponent as K,resolveDirective as Y,withDirectives as $,openBlock as y,createElementBlock as X,renderSlot as Z,createElementVNode as D,createVNode as j,withCtx as F,Transition as ee,createBlock as I,KeepAlive as oe,resolveDynamicComponent as te,unref as R,createCommentVNode as ne,h as b,nextTick as N}from"vue";import{useRoute as ae,useRouter as ie}from"vue-router";import{frontendBus as p}from"../../utils/frontendBus.js";import{wujieLifecycleBus as r}from"../../utils/wujieLifecycleBus.js";import{useGlobalLoading as ue}from"../../utils/globalLoading.js";import re from"../../hooks/useListenerHooks.js";import{menuParamsToRouteQuery as se}from"../../utils/routeMetaParams.js";import{patchWujiePopperCoordinates as le}from"../../utils/patchWujiePopperCoordinates.js";import{_ as de}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";const ce={class:"app-root"},pe={class:"subapp-main"},fe=Q({__name:"SubAppShell",props:{applicationModule:{},modules:{},defaultRouteName:{default:"defaultIndex"},busListeners:{default:()=>[]},onShellMounted:{type:Function,default:void 0},onShellUnmounted:{type:Function,default:void 0},preloadDefaultView:{type:Function,default:void 0}},setup(P,{expose:A}){const o=P,a=ae(),d=ie();re({},o.applicationModule);const u=M([]),k=S(()=>u.value),L=new Map,f=typeof window<"u"&&!!window.__POWERED_BY_WUJIE__,{loading:T}=ue(()=>a.name),q=S(()=>!f&&T.value),W=()=>sessionStorage.getItem("embedMode")==="1",m=M(f),s=M(null);let l=null,h=0;const v=e=>{r.emit(o.applicationModule+"PageReadyBus",e??a.name)},B=()=>{typeof window>"u"||window.dispatchEvent(new Event("resize"))},V=()=>{l&&clearTimeout(l),l=setTimeout(()=>{const e=++h;requestAnimationFrame(()=>{requestAnimationFrame(async()=>{e===h&&(m.value=!1,s.value=null,await N(),le(!0),B(),requestAnimationFrame(()=>{e===h&&(v(a.name),l=null,requestAnimationFrame(()=>{B()}))}))})})},0)},g=()=>{a.name===o.defaultRouteName&&m.value||m.value&&!s.value||s.value&&a.name!==s.value||V()},O=(e,t)=>{if(!e)return null;const i=t;let n=L.get(i);return n||(n={name:i,__isPageWrapper:!0,mounted(){g()},activated(){g()},render(){return b("div",{className:W()?"vaf-page-wrapper vaf-page-wrapper--embed":"vaf-page-wrapper"},e)}},L.set(i,n)),b(n)},_=async(e,t)=>{const i=o.modules[String(e.path||"")];if(!i)return;const n=d.getRoutes().find(w=>w.name===e.code);n?n.meta={...n.meta,sysMenuData:e,applicationModule:e.applicationModule}:d.addRoute({name:e.code,path:"/"+e.code,meta:{sysMenuData:e,applicationModule:e.applicationModule},component:async()=>{const w=await i();return w.default.__name=e.code,b(w.default)}});const c=se(t);try{await d.push({name:e.code,...c?{query:c}:{}})}catch{}u.value.includes(e.code)||u.value.push(e.code),await N(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{g(),f||v(e.code)})})},U=(e,t)=>{e?.applicationModule===o.applicationModule&&(s.value=e.code,_(e,t))},H=async()=>{try{await d.push({name:o.defaultRouteName}).catch(()=>{}),u.value.includes(o.defaultRouteName)||u.value.push(o.defaultRouteName)}finally{m.value||v(o.defaultRouteName)}},C=()=>{const e=window.location.hash;if(e&&e.startsWith("#/src/")){const t=e.slice(1);_({code:"hash-"+t.replace(/[^\w]+/g,"-"),path:t})}},E=()=>{C()},x=e=>{if(e?.applicationModule===o.applicationModule){const t=u.value.indexOf(e.code);t>=0&&u.value.splice(t,1)}},G=d.beforeEach((e,t)=>{e.name!==t.name&&(h++,s.value=e.name),sessionStorage.setItem("activationRouteCode",e.name)});return z(()=>{window.hasOwnProperty("pdfjsLib")||Object.defineProperty(window,"pdfjsLib",{get:()=>window.parent?.pdfjsLib,set:e=>{window.parent.pdfjsLib=e},enumerable:!0,configurable:!0}),r.off(o.applicationModule+"RouterChangeBus"),r.off(o.applicationModule+"defaultIndexBus"),r.on(o.applicationModule+"RouterChangeBus",U),r.on(o.applicationModule+"defaultIndexBus",H),p.on("wujie-router-close",x),o.busListeners.forEach(({event:e,handler:t})=>{p.off(e,t),p.on(e,t)}),o.onShellMounted?.(),f&&o.preloadDefaultView?.(),window.addEventListener("hashchange",E),C()}),J(()=>{G(),l&&clearTimeout(l),r.off(o.applicationModule+"RouterChangeBus"),r.off(o.applicationModule+"defaultIndexBus"),p.off("wujie-router-close",x),o.busListeners.forEach(({event:e,handler:t})=>{p.off(e,t)}),o.onShellUnmounted?.(),window.removeEventListener("hashchange",E)}),A({openMenu:_,notifyPageReady:v}),(e,t)=>{const i=K("router-view"),n=Y("loading");return $((y(),X("div",ce,[Z(e.$slots,"popup",{},void 0,!0),D("div",pe,[j(i,null,{default:F(({Component:c})=>[j(ee,{name:"page-open",mode:"out-in"},{default:F(()=>[(y(),I(oe,{include:k.value},[c?(y(),I(te(O(c,R(a).name)),{name:R(a).name,key:R(a).name},null,8,["name"])):ne("v-if",!0)],1032,["include"]))]),_:2},1024)]),_:1})])])),[[n,q.value]])}}}),be=de(fe,[["__scopeId","data-v-e2dfea0d"]]);export{be as default};
@@ -1 +1 @@
1
- import{defineComponent as Y,ref as v,useModel as Z,computed as _,onMounted as ee,watch as te,resolveComponent as $,openBlock as l,createElementBlock as P,createVNode as oe,withCtx as u,renderSlot as V,createBlock as p,createTextVNode as d,toDisplayString as k,createCommentVNode as m,unref as ae,Fragment as re,mergeModels as W}from"vue";import D from"../../api/workflow/workflowInstApi.js";import ie from"./components/SelectAssigneeDialog.vue.js";import{_ as ne}from"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import se from"./components/CheckDialog.vue.js";import{runWorkflowComplete as le}from"../../hooks/workflowCompleteRunner.js";import q from"../../utils/FrameworkUtils.js";import{userInfoStore as w}from"../../stores/userInfoStore.js";import{frontendBus as L}from"../../utils/frontendBus.js";import{showProcessView as ue,showTodoDialog as me}from"../../hooks/workflowTodo.js";import{_ as pe}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../../chunks/request-ea_7oxLz.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"../../hooks/useFileOpen.js";import"../../utils/fileDownload.js";import"../../api/DocumentApi.js";import"../../utils/officePreviewUtil.js";import"../../utils/uploadAccept.js";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/buildUploadHeaders.js";import"pinia";import"../../utils/userSessionStorage.js";import"../../../chunks/ElTextarea-CRk-I9iq.js";import"../../hooks/createDialogHooks.js";import"../../stores/storeConfig.js";import"pinia-plugin-store";import"../../config/ElementPlusConfig.js";import"../../utils/patchWujiePopperCoordinates.js";import"../../config/VxeTableConfig.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"../vxeReplace/index.js";import"../tooltip/index.js";import"../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"element-plus/es/locale/lang/zh-cn";import"../../hooks/useListenerHooks.js";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../icon/ElIcons.vue.js";import"../ElDialogBody/ElDialogBody.vue.js";import"../../hooks/usePermissionHooks.js";import"vue-router";import"../../utils/routeMetaParams.js";import"../../hooks/useOpenNewMenu.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const de=Y({__name:"TaskOperation",props:W({taskId:{type:String,required:!1},showProcessBtn:{type:Boolean,required:!1,default:!1},params:{type:Object,required:!1},taskInfo:{type:Object,required:!1},showOperationsBtn:{type:Boolean,required:!1,default:!0},showCurWorkBth:{type:Boolean,required:!1,default:!0},onProcessDetail:{type:Function,required:!1},renderDialog:{type:Function,required:!1}},{butLoading:{type:Boolean,default:!1},butLoadingModifiers:{}}),emits:W(["success"],["update:butLoading"]),setup(a,{expose:E,emit:A}){const N=w(),b=v(null),i=a,n=Z(a,"butLoading"),R=A,e=v({taskId:"",comment:""}),O=i.renderDialog,g=(t,o,r,x,f,X)=>{if(!O){console.warn("[TaskOperation] 未注入 renderDialog,无法打开操作弹窗(请通过 props 传入 useDialogHooks 的 render)");return}O(t,o,r,x,f,X)},U=async()=>{if(typeof i.onProcessDetail=="function"){i.onProcessDetail(e.value);return}await ue(e.value)},T=_(()=>e.value?.operations==="assignee"),S=v(""),y=v(),K=v([{source:"edit"}]),j=async()=>{await me(v(e.value),K)},c=async t=>{if(t&&(S.value=t),!e.value)return;y.value={...e.value};let o=!1;if(t==="complete"&&i.params?.beforeCompleteFunction)try{const r=await i.params?.beforeCompleteFunction({taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:"同意。",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey});if(r===!1)return;r?.readonly&&(o=!0),e.value={...e.value,...r}}catch{return}if(t==="addMulti"||t==="minusMulti")g(ne,{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&&i.params?.ignoreConfirm){await H();return}g(se,{taskVo:e.value,dialogType:t,taskOperate:i?.params,commentReadonly:o,renderDialog:g,onOpenAssignee:M,onSuccess:I,onWorkflowSuccess:C},{title:z(t),size:"480px",closeOnClickModal:!1},"dialog")}},z=t=>{switch(t){case"complete":return"流程审批";case"refuse":return"终止审批";case"back":return"驳回审批";case"transfer":return"转办审批";default:return"流程审批"}},H=async()=>{if(!e.value||!w().getUserInfo.userCode)return;y.value={...e.value};const t={taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:e.value.comment??"",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey,variables:e.value.variables};try{if(n.value=!0,i.params?.completeFunction){const o=await i.params?.completeFunction(t);o&&o?.taskId?e.value=o:e.value=await D.getTaskInst(e.value.taskId)}else e.value=await D.taskComplete(t)}catch(o){q.messageError(o);return}finally{n.value=!1}try{await h({actionType:"complete",taskVo:e.value,askVo:t})}catch{}},M=t=>{y.value={...e.value},g(ie,{taskId:t,onSuccess:I,onWorkflowSuccess:C},{title:"指定执行人",size:"450px"},"dialog")},I=t=>{t&&(e.value=t),L.emit("todoRefresh"),L.emit("homePageRefresh"),R("success")},h=async(t,o)=>{const r={...t,actionType:t.actionType||S.value,originTask:t.originTask??y.value,taskVo:t.taskVo??e.value};await le(i.params,r),o?.refresh!==!1&&I(t.taskVo)},C=t=>h({...t,originTask:t.originTask??y.value},{refresh:!1}),F=(t,o)=>t?t.classList?.contains(o)?t:F(t.parentElement,o):null,G=()=>{const t=F(b.value,"todo-dialog-class");return t?console.log("找到满足条件的元素:",t):console.log("未找到满足条件的元素"),t};ee(()=>{G(),B()});const s=v(!1),J=async()=>{s.value=!0},Q=()=>{s.value=!1},B=async()=>{if(i.taskInfo)e.value=i.taskInfo,e.value.finishTime&&console.log("该待办已完成!");else if(i.taskId)try{J(),e.value=await D.getTaskInst(i.taskId),e.value.finishTime&&console.log("该待办已完成!")}catch(t){q.messageError(t)}finally{Q()}};return E({reload:()=>{B()}}),te(()=>i.taskId,B),(t,o)=>{const r=$("el-button"),x=$("el-flex");return l(),P("div",{ref_key:"taskFlexRef",ref:b,class:"task-operation"},[oe(x,{align:"center",justify:"flex-end"},{default:u(()=>[V(t.$slots,"left",{},void 0,!0),a.params?.cancelBtnText!==""?(l(),p(r,{key:0,loading:n.value||s.value,onClick:a.params?.cancelFunction},{default:u(()=>[d(k(a.params?.cancelBtnText??"取消"),1)]),_:1},8,["loading","onClick"])):m("v-if",!0),a.showProcessBtn&&e.value?.procInsId?(l(),p(r,{key:1,type:"info",loading:n.value||s.value,onClick:U},{default:u(()=>[...o[7]||(o[7]=[d(" 流程信息 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),!T.value&&e.value?.taskId&&a.showCurWorkBth&&!a.showOperationsBtn?(l(),p(r,{key:2,loading:n.value||s.value,type:"warning",disabled:e.value?.taskId&&(!e.value?.operations||ae(N).getUserInfo.userCode!==e.value?.assigneeId),onClick:j},{default:u(()=>[d(k(e.value.taskName),1)]),_:1},8,["loading","disabled"])):m("v-if",!0),T.value?(l(),p(r,{key:3,type:"primary",loading:n.value||s.value,onClick:o[0]||(o[0]=f=>c("assignee"))},{default:u(()=>[...o[8]||(o[8]=[d("指定执行人 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),!T.value&&e.value?.taskId&&e.value?.operations&&a.showOperationsBtn?(l(),P(re,{key:4},[a.params?.saveBtnText?(l(),p(r,{key:0,loading:n.value||s.value,type:"primary",onClick:a.params?.saveFunction},{default:u(()=>[d(k(a.params?.saveBtnText),1)]),_:1},8,["loading","onClick"])):m("v-if",!0),e.value?.operations.indexOf("addMulti")>-1?(l(),p(r,{key:1,type:"warning",loading:n.value||s.value,onClick:o[1]||(o[1]=f=>c("addMulti"))},{default:u(()=>[...o[9]||(o[9]=[d("加签 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("minusMulti")>-1?(l(),p(r,{key:2,type:"danger",loading:n.value||s.value,onClick:o[2]||(o[2]=f=>c("minusMulti"))},{default:u(()=>[...o[10]||(o[10]=[d("减签 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("refuse")>-1&&a.params?.refuseBtnText!==""?(l(),p(r,{key:3,loading:n.value||s.value,type:"danger",onClick:o[3]||(o[3]=f=>c("refuse"))},{default:u(()=>[d(k(a.params?.refuseBtnText??"终止"),1)]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("transfer")>-1&&a.params?.transferBtnText!==""?(l(),p(r,{key:4,loading:n.value||s.value,type:"warning",onClick:o[4]||(o[4]=f=>c("transfer"))},{default:u(()=>[d(k(a.params?.transferBtnText??"转办"),1)]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("back")>-1&&a.params?.backBtnText!==""?(l(),p(r,{key:5,loading:n.value||s.value,type:"danger",onClick:o[5]||(o[5]=f=>c("back"))},{default:u(()=>[d(k(a.params?.backBtnText??"驳回"),1)]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("complete")>-1&&a.params?.completeBtnText!==""?(l(),p(r,{key:6,loading:n.value||s.value,type:"primary",onClick:o[6]||(o[6]=f=>c("complete"))},{default:u(()=>[d(k(a.params?.completeBtnText??"同意"),1)]),_:1},8,["loading"])):m("v-if",!0)],64)):m("v-if",!0),V(t.$slots,"right",{},void 0,!0)]),_:3})],512)}}}),Ht=pe(de,[["__scopeId","data-v-a84c5805"]]);export{Ht as default};
1
+ import{defineComponent as Y,ref as v,useModel as Z,computed as _,onMounted as ee,watch as te,resolveComponent as $,openBlock as l,createElementBlock as P,createVNode as oe,withCtx as u,renderSlot as V,createBlock as p,createTextVNode as d,toDisplayString as k,createCommentVNode as m,unref as ae,Fragment as re,mergeModels as W}from"vue";import D from"../../api/workflow/workflowInstApi.js";import ie from"./components/SelectAssigneeDialog.vue.js";import{_ as ne}from"../../../chunks/AddOrMinusMultiDialog.vue_vue_type_script_setup_true_lang-BWVDdb4B.js";import se from"./components/CheckDialog.vue.js";import{runWorkflowComplete as le}from"../../hooks/workflowCompleteRunner.js";import q from"../../utils/FrameworkUtils.js";import{userInfoStore as w}from"../../stores/userInfoStore.js";import{frontendBus as L}from"../../utils/frontendBus.js";import{showProcessView as ue,showTodoDialog as me}from"../../hooks/workflowTodo.js";import{_ as pe}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../../chunks/request-ea_7oxLz.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"../../hooks/useFileOpen.js";import"../../utils/fileDownload.js";import"../../api/DocumentApi.js";import"../../utils/officePreviewUtil.js";import"../../utils/uploadAccept.js";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/buildUploadHeaders.js";import"pinia";import"../../utils/userSessionStorage.js";import"../../../chunks/ElTextarea-CRk-I9iq.js";import"../../hooks/createDialogHooks.js";import"../../stores/storeConfig.js";import"pinia-plugin-store";import"../../config/ElementPlusConfig.js";import"../../utils/patchWujiePopperCoordinates.js";import"../../config/VxeTableConfig.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"../vxeReplace/index.js";import"../tooltip/index.js";import"../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"element-plus/es/locale/lang/zh-cn";import"../../hooks/useListenerHooks.js";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../icon/ElIcons.vue.js";import"../ElDialogBody/ElDialogBody.vue.js";import"vue-router";import"../../hooks/useMenuNavigate.js";import"../../hooks/usePermissionHooks.js";import"../../utils/routeMetaParams.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const de=Y({__name:"TaskOperation",props:W({taskId:{type:String,required:!1},showProcessBtn:{type:Boolean,required:!1,default:!1},params:{type:Object,required:!1},taskInfo:{type:Object,required:!1},showOperationsBtn:{type:Boolean,required:!1,default:!0},showCurWorkBth:{type:Boolean,required:!1,default:!0},onProcessDetail:{type:Function,required:!1},renderDialog:{type:Function,required:!1}},{butLoading:{type:Boolean,default:!1},butLoadingModifiers:{}}),emits:W(["success"],["update:butLoading"]),setup(a,{expose:E,emit:A}){const N=w(),b=v(null),i=a,n=Z(a,"butLoading"),R=A,e=v({taskId:"",comment:""}),O=i.renderDialog,g=(t,o,r,x,f,X)=>{if(!O){console.warn("[TaskOperation] 未注入 renderDialog,无法打开操作弹窗(请通过 props 传入 useDialogHooks 的 render)");return}O(t,o,r,x,f,X)},U=async()=>{if(typeof i.onProcessDetail=="function"){i.onProcessDetail(e.value);return}await ue(e.value)},T=_(()=>e.value?.operations==="assignee"),S=v(""),y=v(),K=v([]),j=async()=>{await me(v(e.value),K)},c=async t=>{if(t&&(S.value=t),!e.value)return;y.value={...e.value};let o=!1;if(t==="complete"&&i.params?.beforeCompleteFunction)try{const r=await i.params?.beforeCompleteFunction({taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:"同意。",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey});if(r===!1)return;r?.readonly&&(o=!0),e.value={...e.value,...r}}catch{return}if(t==="addMulti"||t==="minusMulti")g(ne,{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&&i.params?.ignoreConfirm){await H();return}g(se,{taskVo:e.value,dialogType:t,taskOperate:i?.params,commentReadonly:o,renderDialog:g,onOpenAssignee:M,onSuccess:I,onWorkflowSuccess:C},{title:z(t),size:"480px",closeOnClickModal:!1},"dialog")}},z=t=>{switch(t){case"complete":return"流程审批";case"refuse":return"终止审批";case"back":return"驳回审批";case"transfer":return"转办审批";default:return"流程审批"}},H=async()=>{if(!e.value||!w().getUserInfo.userCode)return;y.value={...e.value};const t={taskId:e.value.taskId,userId:w().getUserInfo.userCode,comment:e.value.comment??"",procInsId:e.value.procInsId,procDefKey:e.value.procDefKey,variables:e.value.variables};try{if(n.value=!0,i.params?.completeFunction){const o=await i.params?.completeFunction(t);o&&o?.taskId?e.value=o:e.value=await D.getTaskInst(e.value.taskId)}else e.value=await D.taskComplete(t)}catch(o){q.messageError(o);return}finally{n.value=!1}try{await h({actionType:"complete",taskVo:e.value,askVo:t})}catch{}},M=t=>{y.value={...e.value},g(ie,{taskId:t,onSuccess:I,onWorkflowSuccess:C},{title:"指定执行人",size:"450px"},"dialog")},I=t=>{t&&(e.value=t),L.emit("todoRefresh"),L.emit("homePageRefresh"),R("success")},h=async(t,o)=>{const r={...t,actionType:t.actionType||S.value,originTask:t.originTask??y.value,taskVo:t.taskVo??e.value};await le(i.params,r),o?.refresh!==!1&&I(t.taskVo)},C=t=>h({...t,originTask:t.originTask??y.value},{refresh:!1}),F=(t,o)=>t?t.classList?.contains(o)?t:F(t.parentElement,o):null,G=()=>{const t=F(b.value,"todo-dialog-class");return t?console.log("找到满足条件的元素:",t):console.log("未找到满足条件的元素"),t};ee(()=>{G(),B()});const s=v(!1),J=async()=>{s.value=!0},Q=()=>{s.value=!1},B=async()=>{if(i.taskInfo)e.value=i.taskInfo,e.value.finishTime&&console.log("该待办已完成!");else if(i.taskId)try{J(),e.value=await D.getTaskInst(i.taskId),e.value.finishTime&&console.log("该待办已完成!")}catch(t){q.messageError(t)}finally{Q()}};return E({reload:()=>{B()}}),te(()=>i.taskId,B),(t,o)=>{const r=$("el-button"),x=$("el-flex");return l(),P("div",{ref_key:"taskFlexRef",ref:b,class:"task-operation"},[oe(x,{align:"center",justify:"flex-end"},{default:u(()=>[V(t.$slots,"left",{},void 0,!0),a.params?.cancelBtnText!==""?(l(),p(r,{key:0,loading:n.value||s.value,onClick:a.params?.cancelFunction},{default:u(()=>[d(k(a.params?.cancelBtnText??"取消"),1)]),_:1},8,["loading","onClick"])):m("v-if",!0),a.showProcessBtn&&e.value?.procInsId?(l(),p(r,{key:1,type:"info",loading:n.value||s.value,onClick:U},{default:u(()=>[...o[7]||(o[7]=[d(" 流程信息 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),!T.value&&e.value?.taskId&&a.showCurWorkBth&&!a.showOperationsBtn?(l(),p(r,{key:2,loading:n.value||s.value,type:"warning",disabled:e.value?.taskId&&(!e.value?.operations||ae(N).getUserInfo.userCode!==e.value?.assigneeId),onClick:j},{default:u(()=>[d(k(e.value.taskName),1)]),_:1},8,["loading","disabled"])):m("v-if",!0),T.value?(l(),p(r,{key:3,type:"primary",loading:n.value||s.value,onClick:o[0]||(o[0]=f=>c("assignee"))},{default:u(()=>[...o[8]||(o[8]=[d("指定执行人 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),!T.value&&e.value?.taskId&&e.value?.operations&&a.showOperationsBtn?(l(),P(re,{key:4},[a.params?.saveBtnText?(l(),p(r,{key:0,loading:n.value||s.value,type:"primary",onClick:a.params?.saveFunction},{default:u(()=>[d(k(a.params?.saveBtnText),1)]),_:1},8,["loading","onClick"])):m("v-if",!0),e.value?.operations.indexOf("addMulti")>-1?(l(),p(r,{key:1,type:"warning",loading:n.value||s.value,onClick:o[1]||(o[1]=f=>c("addMulti"))},{default:u(()=>[...o[9]||(o[9]=[d("加签 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("minusMulti")>-1?(l(),p(r,{key:2,type:"danger",loading:n.value||s.value,onClick:o[2]||(o[2]=f=>c("minusMulti"))},{default:u(()=>[...o[10]||(o[10]=[d("减签 ",-1)])]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("refuse")>-1&&a.params?.refuseBtnText!==""?(l(),p(r,{key:3,loading:n.value||s.value,type:"danger",onClick:o[3]||(o[3]=f=>c("refuse"))},{default:u(()=>[d(k(a.params?.refuseBtnText??"终止"),1)]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("transfer")>-1&&a.params?.transferBtnText!==""?(l(),p(r,{key:4,loading:n.value||s.value,type:"warning",onClick:o[4]||(o[4]=f=>c("transfer"))},{default:u(()=>[d(k(a.params?.transferBtnText??"转办"),1)]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("back")>-1&&a.params?.backBtnText!==""?(l(),p(r,{key:5,loading:n.value||s.value,type:"danger",onClick:o[5]||(o[5]=f=>c("back"))},{default:u(()=>[d(k(a.params?.backBtnText??"驳回"),1)]),_:1},8,["loading"])):m("v-if",!0),e.value?.operations.indexOf("complete")>-1&&a.params?.completeBtnText!==""?(l(),p(r,{key:6,loading:n.value||s.value,type:"primary",onClick:o[6]||(o[6]=f=>c("complete"))},{default:u(()=>[d(k(a.params?.completeBtnText??"同意"),1)]),_:1},8,["loading"])):m("v-if",!0)],64)):m("v-if",!0),V(t.$slots,"right",{},void 0,!0)]),_:3})],512)}}}),Ht=pe(de,[["__scopeId","data-v-edd75c34"]]);export{Ht as default};
@@ -1,9 +1,11 @@
1
1
  import { type Component } from 'vue';
2
- import type { IWfProcessInstVo, IWfTaskVo } from '../../interface/workflow/IWfTaskVo';
2
+ import type { IWfTaskVo } from '../../interface/workflow/IWfTaskVo';
3
3
  type __VLS_Props = {
4
4
  taskId: string;
5
5
  taskInfo?: IWfTaskVo;
6
6
  readonly?: boolean;
7
+ /** 入口显式声明"看的是当时那一版"(流程事项管理 / 任务快照 / 审批查看):只读 + 取快照 */
8
+ asHistory?: boolean;
7
9
  contentComponent?: Component;
8
10
  contentProps?: Record<string, unknown>;
9
11
  renderDialog?: (...args: any[]) => any;
@@ -16,8 +18,9 @@ type __VLS_PublicProps = __VLS_Props & {
16
18
  };
17
19
  declare var __VLS_17: {
18
20
  task: IWfTaskVo | undefined;
19
- process: IWfProcessInstVo | undefined;
21
+ process: import("../../interface/workflow/IWfTaskVo").IWfProcessInstVo | undefined;
20
22
  snapshot: Record<string, any> | null;
23
+ mode: import("../../hooks/useWorkflowTaskView").WorkflowTaskMode;
21
24
  };
22
25
  type __VLS_Slots = {} & {
23
26
  content?: (props: typeof __VLS_17) => any;
@@ -37,6 +40,7 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_PublicProps,
37
40
  readonly: boolean;
38
41
  renderDialog: (...args: any[]) => any;
39
42
  withdrawEnabled: boolean;
43
+ asHistory: boolean;
40
44
  taskInfo: IWfTaskVo;
41
45
  contentComponent: Component;
42
46
  contentProps: Record<string, unknown>;
@@ -1,10 +1,10 @@
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 m,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 mt}from"element-plus";import j from"../../api/workflow/workflowInstApi.js";import kt 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"../../../chunks/request-ea_7oxLz.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/useFileOpen.js";import"../../utils/fileDownload.js";import"../../utils/officePreviewUtil.js";import"../../utils/uploadAccept.js";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/buildUploadHeaders.js";import"../../../chunks/ElTextarea-CRk-I9iq.js";import"../../hooks/createDialogHooks.js";import"../../stores/storeConfig.js";import"pinia-plugin-store";import"../../config/ElementPlusConfig.js";import"../../utils/patchWujiePopperCoordinates.js";import"../../config/VxeTableConfig.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"../vxeReplace/index.js";import"../tooltip/index.js";import"../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"element-plus/es/locale/lang/zh-cn";import"../../hooks/useListenerHooks.js";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../icon/ElIcons.vue.js";import"../ElDialogBody/ElDialogBody.vue.js";import"../../hooks/workflowCompleteRunner.js";import"../../hooks/workflowTodo.js";import"../../hooks/usePermissionHooks.js";import"vue-router";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 kt.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"}:me[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,k=te(e.finishTime||"")?.getTime()??0,g=h&&k?Math.max(k-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"?" · ":" / ",k=Math.max(Date.now()-t.getTime(),0),g=_t(Ne("SysFlowTimeout"),k);return{title:`当前等待:${s?.taskName||v.value?.taskName||"当前节点"} · ${o.length?o.join(h):"待分配"}`,sub:`已停留 ${oe(k)}`,opinion:"",filesTaskId:"",ctText:oe(k),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:["待处理"]},me={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((k,g)=>(g.finishTime||"").localeCompare(k.finishTime||""))[0]?.commentList?.[0],h=me[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(" / "):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(k=>!k.finishTime)?"process":D(s).type,h=e.get(o);if(h!==void 0){const k=t[h];k.occurrence=(k.occurrence||1)+1,k.parentExecutionId=s.parentExecutionId,k.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),mt.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"),k=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(`
1
+ import{defineComponent as st,useModel as nt,ref as A,computed as w,onMounted as at,onBeforeUnmount as rt,watch as lt,resolveComponent as b,resolveDirective as it,openBlock as n,createElementBlock as r,createCommentVNode as l,createBlock as C,Teleport as ct,unref as v,toDisplayString as d,withDirectives as dt,normalizeStyle as Ie,normalizeClass as O,createElementVNode as c,Fragment as m,renderList as S,createVNode as B,createTextVNode as x,renderSlot as ut,resolveDynamicComponent as pt,mergeProps as mt,withCtx as M,mergeModels as be,nextTick as ft}from"vue";import{ElMessageBox as kt,ElMessage as vt}from"element-plus";import te from"../../api/workflow/workflowInstApi.js";import wt from"../../api/DocumentApi.js";import yt from"../../hooks/useFileView.js";import _t from"../../hooks/useDictHooks.js";import Ce from"../../utils/FrameworkUtils.js";import ht from"../../hooks/useWorkflowSnapshot.js";import{parseDateTime as oe,formatDateTime as se}from"../../utils/dateTime.js";import{formatStayDuration as ne,resolveTimeoutMeta as gt}from"../../utils/flowTimeout.js";import{userInfoStore as j}from"../../stores/userInfoStore.js";import Tt from"./TaskOperation.vue.js";import It from"../../hooks/useWorkflowTaskView.js";import{_ as bt}from"../../../chunks/_plugin-vue_export-helper-DlAUqK2U.js";import"../../../chunks/request-ea_7oxLz.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/useFileOpen.js";import"../../utils/fileDownload.js";import"../../utils/officePreviewUtil.js";import"../../utils/uploadAccept.js";import"../../hooks/useDeleteConfirmHooks.js";import"../../hooks/useBehaviorAction.js";import"../../utils/buildUploadHeaders.js";import"../../../chunks/ElTextarea-CRk-I9iq.js";import"../../hooks/createDialogHooks.js";import"../../stores/storeConfig.js";import"pinia-plugin-store";import"../../config/ElementPlusConfig.js";import"../../utils/patchWujiePopperCoordinates.js";import"../../config/VxeTableConfig.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"../vxeReplace/index.js";import"../tooltip/index.js";import"../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"element-plus/es/locale/lang/zh-cn";import"../../hooks/useListenerHooks.js";import"../../stores/permissionStore.js";import"../../utils/operationAuth.js";import"../icon/ElIcons.vue.js";import"../ElDialogBody/ElDialogBody.vue.js";import"../../hooks/workflowCompleteRunner.js";import"../../hooks/workflowTodo.js";import"vue-router";import"../../hooks/useMenuNavigate.js";import"../../hooks/usePermissionHooks.js";import"../../utils/routeMetaParams.js";import"../../utils/commonUtils.js";import"../../utils/tree.js";const Ct={key:0,class:"workflow-todo-shell__source-label"},xt={class:"workflow-todo-shell__body dialog-content-fill"},Nt={key:0,class:"workflow-todo-shell__source-fallback"},Et={class:"wf-wait__icon"},Dt={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},St={class:"wf-wait__main"},Bt={class:"wf-wait__title"},Kt={class:"wf-wait__sub"},Lt={key:0,class:"wf-wait__opinion"},Mt={key:1,class:"wf-wait__files"},$t=["onClick"],At={key:0},Ot={key:1,class:"wf-progress-scroll"},Vt={class:"wf-progress-steps"},jt={class:"wf-progress-step__icon-wrap"},Ft={class:"wf-progress-step__icon"},Pt={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},Ut={key:4},Wt={class:"wf-progress-step__name"},Rt={class:"wf-progress-step__name-text"},Ht={class:"wf-progress-step__name-label"},zt={key:0,class:"wf-progress-step__occurrence"},Qt={key:0,class:"workflow-todo-shell__record-occurrence"},qt={key:1,class:"workflow-todo-shell__record-type"},Gt={key:0,class:"workflow-todo-shell__record-user"},Yt={class:"workflow-todo-shell__record-person__name"},Jt={key:0,class:"workflow-todo-shell__comment"},Xt={key:0,class:"workflow-todo-shell__record-files"},Zt=["onClick"],eo={class:"workflow-todo-shell__record-person__name"},to={key:0,class:"workflow-todo-shell__comment"},oo={key:1,class:"workflow-todo-shell__record-files"},so=["onClick"],no={class:"workflow-todo-shell__record-person__name"},ao={key:1,class:"workflow-todo-shell__footer"},xe="__end__",ro=st({__name:"WorkflowTodoShell",props:be({taskId:{},taskInfo:{default:void 0},readonly:{type:Boolean,default:!1},asHistory:{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:be(["cancel","success"],["update:loading"]),setup(N,{expose:Ne,emit:Ee}){const f=N,V=Ee,K=nt(N,"loading"),H=A(),ae=It({taskId:()=>String(f.taskId||f.taskInfo?.taskId||""),taskInfo:()=>f.taskInfo,asHistory:()=>f.asHistory===!0||f.readonly===!0}),{task:_,processInfo:T,processLoaded:De,mode:F,readonly:P}=ae,{getDictTypeData:Se}=_t(["SysFlowTimeout"]),Be=e=>[...e].sort((t,o)=>(t.createTime||"").localeCompare(o.createTime||"")),z=w(()=>Be([...T.value?.hisTasks||[],...T.value?.activeTasks||[]])),Q=A({}),q=yt().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"},E=e=>e?Q.value[e]||[]:[],Ke=async()=>{var t;const e=Array.from(new Set(z.value.map(o=>o.taskId).filter(o=>!!o)));if(e.length)try{const o=await wt.getUpLoadFilesByBussinessIds(e),s={};for(const i of o)i.businessId&&(s[t=i.businessId]||(s[t]=[])).push(i);Q.value=s}catch{Q.value={}}},Y=w(()=>{const e=new Map;for(const t of z.value){const o=ge(t),s=e.get(o);s?s.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=w(()=>_.value?.procEndTime?!0:!!(T.value&&!(T.value.activeTasks||[]).length&&(T.value.hisTasks||[]).length)),Le=e=>/^#[0-9a-fA-F]{6}$/.test(e)?`${e}1f`:"var(--el-color-primary-light-9)",re={ok:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)"},le={ok:"var(--el-color-success-light-9)",warning:"var(--el-color-warning-light-9)",danger:"var(--el-color-danger-light-9)"},Me=e=>e==="danger"?"danger":e==="warning"?"warning":"ok",ie=e=>e==="danger"?"close":e==="warning"?"back":"check",$e=e=>!e||e.startsWith("已")?e:`已${e}`,J=w(()=>String(_.value?.finishedResult||"")==="terminate"||String(_.value?.processStatus||"")==="terminated"),X=w(()=>z.value.find(e=>!!f.taskId&&e.taskId===f.taskId)),ce=e=>!!e?.assigneeId&&e.assigneeId===j().getUserInfo.userCode,Ae=w(()=>{const e=j().getUserInfo.userCode;if(!e)return!1;const t=X.value;return t?.taskLocalVars?.firstTask?ce(t):!t&&f.taskInfo?.startUserId===e}),Oe=e=>{const t=(e?.commentList||[]).find(o=>String(o.type)!=="8");return String(t?.fullMessage||"").trim()},Ve=e=>{if(!e?.finishTime)return;const t=!!e.taskLocalVars?.firstTask,o=t?{label:"已提交",type:"success"}:ve[String((e.commentList||[]).find($=>String($.type)!=="8")?.type||"")]||{label:"已办",type:"success"},s=Me(o.type),i=!!e.assigneeId&&e.assigneeId===j().getUserInfo.userCode,h=oe(e.createTime||"")?.getTime()??0,k=oe(e.finishTime||"")?.getTime()??0,g=h&&k?Math.max(k-h,0):0,y=$e(o.label);return{level:s,icon:ie(s),color:re[s],weakColor:le[s],title:`${i?"我的处理":e.assigneeName||"审批"}:${y}`,sub:[se(e.finishTime),g?`耗时 ${ne(g)}`:""].filter(Boolean).join(" · "),opinion:t?"":Oe(e),filesTaskId:t?"":e.taskId||"",ctText:e.taskName||"",ctLabel:"",ctKind:"node"}},de=()=>{const e=_.value,t=J.value?"danger":"ok",o=J.value?"流程已终止":"流程已办结",s=se(e?.procEndTime);return{level:t,icon:ie(t),color:re[t],weakColor:le[t],title:o,sub:s?`${s} ${J.value?"已终止":"完成归档"}`:o,opinion:"",filesTaskId:"",ctText:"",ctLabel:"",ctKind:""}},ue=()=>{const e=T.value?.activeTasks||[],t=e.map(y=>oe(y.createTime||"")).filter(y=>!!y).sort((y,$)=>y.getTime()-$.getTime())[0];if(!t)return;const o=e[0],s=Array.from(new Set(e.map(y=>y.assigneeName).filter(y=>!!y))),i=o?.approvalType||"",h=i==="joint"||i==="all"?" · ":" / ",k=Math.max(Date.now()-t.getTime(),0),g=gt(Se("SysFlowTimeout"),k);return{title:`当前等待:${o?.taskName||_.value?.taskName||"当前节点"} · ${s.length?s.join(h):"待分配"}`,sub:`已停留 ${ne(k)}`,opinion:"",filesTaskId:"",ctText:ne(k),ctLabel:g.level==="danger"?"超时风险":"等待中",ctKind:"stay",color:g.color||"var(--el-color-primary)",level:g.level,weakColor:Le(g.color),icon:"clock"}},u=w(()=>{const e=X.value;return Ae.value?U.value?de():ue():e?.finishTime&&!e.taskLocalVars?.firstTask&&ce(e)?Ve(e):U.value?de():ue()}),je=w(()=>{const e=[...Y.value],t=new Set(e.map(s=>pe(s)));for(const s of T.value?.futureTasks||[]){const i=`${s.taskDefKey||s.taskName}-`;t.has(i)||e.push({taskName:s.taskName,taskDefKey:s.taskDefKey,tasks:[],assigneeNames:s.assigneeNames,approvalType:s.approvalType})}e.push({taskName:"结束",taskDefKey:xe,tasks:[],isEnd:!0});const o=new Map;for(const s of e){const i=s.taskDefKey||s.taskName||"";i&&(s.occurrence=(o.get(i)||0)+1,o.set(i,s.occurrence))}return e}),pe=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,Fe={single:"或签",joint:"会签",all:"会签"},me=e=>Fe[e.approvalType||e.tasks[0]?.approvalType||""]||"",Pe=e=>(e.approvalType||e.tasks[0]?.approvalType||"")==="single",Ue=w(()=>{const e=X.value;if(!e?.finishTime)return;const t=j().getUserInfo.userCode;if(!(!t||e.assigneeId!==t))return e}),fe=e=>{const t=j().getUserInfo.userCode;if(!t)return"";const o=e.tasks.filter(i=>!!i.finishTime&&i.assigneeId===t);if(!o.length)return"";const s=Ue.value?.taskId;return s&&o.some(i=>i.taskId===s)?"entry":"other"},ke=e=>{const t=(e.assigneeNames||"").split(",").map(o=>o.trim()).filter(Boolean);return t.length?t:["待处理"]},ve={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"}},We=e=>se(e.finishTime||e.createTime),Re={success:"var(--el-color-success)",warning:"var(--el-color-warning)",danger:"var(--el-color-danger)",primary:"var(--el-color-primary)"},He=e=>Re[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 o="已办",s="success";if(t.some(i=>i.taskLocalVars?.firstTask))o="提交";else{const i=[...t].sort((k,g)=>(g.finishTime||"").localeCompare(k.finishTime||""))[0]?.commentList?.[0],h=ve[i?.type||""];o=h?.label||"已办",s=h?.type||"success"}return{label:o,type:s,hollow:!0}},we=e=>{const t=e.assigneeName||e.startUserName||"待处理";return e.finishTime?`${t} · ${We(e)}`:t},ze=e=>e.tasks.length?e.tasks.map(we).join(" / "):ke(e).join(" / "),Z=e=>e.tasks.map(t=>t.comment).filter(Boolean).join(" / "),ye=w(()=>{const e=new Map,t=[];for(const o of Y.value){const s=o.taskDefKey||o.taskName||"";if(!s)continue;const i=o.tasks.some(k=>!k.finishTime)?"process":D(o).type,h=e.get(s);if(h!==void 0){const k=t[h];k.occurrence=(k.occurrence||1)+1,k.parentExecutionId=o.parentExecutionId,k.status=i;continue}e.set(s,t.length),t.push({taskName:o.taskName,taskDefKey:o.taskDefKey,parentExecutionId:o.parentExecutionId,status:i,occurrence:1})}for(const o of T.value?.futureTasks||[]){const s=o.taskDefKey||o.taskName||"";if(!s)continue;const i=e.get(s);if(i!==void 0){t[i].status="wait";continue}e.set(s,t.length),t.push({taskName:o.taskName,taskDefKey:o.taskDefKey,status:"wait"})}return t.push({taskName:"结束",taskDefKey:xe,status:U.value?"success":"wait"}),t}),ee=A(!1),_e=A(null),L=A(null),W=A(null);at(()=>{const t=_e.value?.closest(".el-drawer, .el-dialog")?.querySelector(".dialog-hooks-header")??null;if(!t){L.value=null;return}const o=t.querySelector(".dialog-hooks-header-title");W.value=o;const s=document.createElement("span");s.style.display="contents",o?o.insertAdjacentElement("afterend",s):t.appendChild(s),L.value=s}),rt(()=>{const e=L.value;L.value=null,W.value=null,e?.remove()}),lt([F,()=>_.value?.taskName,W],()=>{const e=W.value;if(!e||e.children.length)return;const t=F.value==="view"?"流程详情":String(_.value?.taskName||"")||"流程详情";e.textContent!==t&&(e.textContent=t)},{immediate:!0});const Qe=w(()=>P.value),{snapshot:he,dataSourceMeta:R,refresh:qe}=ht(()=>String(f.taskInfo?.businessId||_.value?.businessId||""),{wfTaskId:()=>f.taskId,taskDefKey:()=>String(f.taskInfo?.taskDefKey||_.value?.taskDefKey||""),readonly:()=>P.value,enabled:()=>Qe.value}),Ge=w(()=>P.value&&!!f.taskId&&(f.withdrawEnabled===!0||f.taskInfo?.withdrawEnabled===!0)),Ye=async()=>{const e=f.taskInfo||_.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 te.processWithdrawalVerification(t);let o="";try{const s=await te.processWithdrawalPreview(t);o=String(s?.targetTaskName||"")}catch(s){console.warn("撤回预览失败",s)}await kt.confirm(`确认撤回「${e.taskTitle||e.taskName||"该申请单"}」?`+(o?`撤回后流程将回到「${o}」,需要重新提交。`:"撤回后需要重新提交。"),"撤回确认",{type:"warning",confirmButtonText:"确认撤回",cancelButtonText:"取消"}),await te.processWithdrawal(t),vt.success("撤回成功"),V("success",e),V("cancel")}catch(o){if(o==="cancel"||o==="close")return;Ce.messageError(o)}finally{ee.value=!1}},Je=w(()=>H.value?.taskOption),Xe=w(()=>{const e=Je.value;return{...e||{},cancelFunction:(...t)=>{e?.cancelFunction?.(...t),V("cancel")},workflowComplete:async(...t)=>{await e?.workflowComplete?.(...t)}}}),ge=e=>`${e.taskDefKey||e.taskName}-${e.parentExecutionId||""}`,Te=async e=>{if(!(!f.taskId&&!f.taskInfo?.procInsId))try{K.value=!0,De.value=!1,await ae.load(e),await qe(),await Ke(),await ft(),await H.value?.resetQuery?.()}catch(t){Ce.messageError(t)}finally{K.value=!1}},Ze=async e=>{V("success",e),await Te(e)};return Ne({resetQuery:async()=>{await Te()}}),(e,t)=>{const o=b("el-icons"),s=b("el-title"),i=b("el-empty"),h=b("el-tag-display"),k=b("el-flex"),g=b("el-timeline-item"),y=b("el-timeline"),$=b("el-button"),et=b("operation-auth"),tt=it("loading");return n(),r("div",{ref_key:"shellEl",ref:_e,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(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(`
7
+ `),L.value?(n(),C(ct,{key:0,to:L.value},[v(R)?(n(),r("span",Ct,d(v(R).label),1)):l("v-if",!0)],8,["to"])):l("v-if",!0),dt((n(),r("div",xt,[l(" 兜底:没有标题栏(非自定义 header 的弹窗)时,在内容区顶部显示 "),!L.value&&v(R)?(n(),r("div",Nt,d(v(R).label),1)):l("v-if",!0),l(`
8
8
  数据来源标记(通用层统一判定,业务内容组件无需实现):
9
9
  命中快照时展示「快照 · 时间」;没有快照(展示业务当前数据)时不展示,避免噪音,
10
10
  放在内容区首行右对齐,紧贴标题栏,不随内容滚动位置变化而离开视线。
@@ -12,11 +12,11 @@ import{defineComponent as st,useModel as ot,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",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(m,{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(m,{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(m,{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(m,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(m,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(m,{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(m,{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(m,{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(`
15
+ `),u.value?(n(),r("div",{key:1,class:O(["wf-wait",u.value.level?`is-${u.value.level}`:""]),style:Ie({"--wf-wait-color":u.value.color,"--wf-wait-weak":u.value.weakColor})},[c("span",Et,[l(" 进行中:时钟 "),u.value.icon==="clock"?(n(),r("svg",Dt,[...t[3]||(t[3]=[c("circle",{cx:"12",cy:"12",r:"9"},null,-1),c("path",{d:"M12 8v4l3 3"},null,-1)])])):u.value.icon==="check"?(n(),r(m,{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)):u.value.icon==="back"?(n(),r(m,{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(m,{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",St,[c("div",Bt,d(u.value.title),1),c("div",Kt,d(u.value.sub),1),l(" 结束态:把该次审批的意见一并带出来,避免去审批记录里翻 "),u.value.opinion?(n(),r("div",Lt," 审核意见:"+d(u.value.opinion),1)):l("v-if",!0),l(" 该次审批的附件:与审批记录里的附件同样支持点击预览 "),u.value.filesTaskId&&E(u.value.filesTaskId).length?(n(),r("div",Mt,[(n(!0),r(m,null,S(E(u.value.filesTaskId),a=>(n(),r("span",{key:a.id,class:"wf-wait__file",onClick:p=>v(q)(a.id)},[B(o,{"model-value":G(a.name)},null,8,["model-value"]),x(d(a.name),1)],8,$t))),128))])):l("v-if",!0)]),u.value.ctText?(n(),r("div",{key:0,class:O(["wf-wait__ct",`is-${u.value.ctKind}`])},[c("b",null,d(u.value.ctText),1),u.value.ctLabel?(n(),r("span",At,d(u.value.ctLabel),1)):l("v-if",!0)],2)):l("v-if",!0)],6)):l("v-if",!0),B(s,{level:"1",title:"流程进度",style:{"border-bottom":"var(--border)"}}),c("div",null,[ye.value.length?(n(),r("div",Ot,[c("div",Vt,[(n(!0),r(m,null,S(ye.value,(a,p)=>(n(),r("div",{key:ge(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",jt,[c("div",Ft,[l(" 同意/提交:对勾 "),a.status==="success"?(n(),r("svg",Pt,[...t[7]||(t[7]=[c("path",{d:"M20 6L9 17l-5-5"},null,-1)])])):a.status==="warning"?(n(),r(m,{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(m,{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(m,{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",Ut,d(p+1),1))])]),c("div",Wt,[c("span",Rt,[c("span",Ht,d(a.taskName||"未命名节点"),1),a.occurrence&&a.occurrence>1?(n(),r("sup",zt,d(a.occurrence),1)):l("v-if",!0)])])],2))),128))])])):(n(),C(i,{key:0,description:"暂无流程进度","image-size":48}))]),l(`
16
16
  业务审核内容:完全由业务内容组件/插槽决定(含它自己的标题、分区、网格),
17
17
  通用抽屉不再注入任何标题,业务页面给什么就展示什么。
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(m,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(k,{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(m,{key:0},[x(d(Z(a)),1)],64)):l("v-if",!0),(n(!0),r(m,null,B(a.tasks,f=>(n(),r(m,{key:f.taskId},[N(f.taskId).length?(n(),r("div",Gt,[(n(!0),r(m,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(m,{key:1},B(a.tasks,f=>(n(),r("div",{key:f.taskId,class:"workflow-todo-shell__record-user"},[c("span",Jt,d(ke(f)),1),f.comment||N(f.taskId).length?(n(),r("div",Xt,[f.comment?(n(),r(m,{key:0},[x(d(f.comment),1)],64)):l("v-if",!0),N(f.taskId).length?(n(),r("div",Zt,[(n(!0),r(m,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(m,{key:2},[l(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(m,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(`
18
+ `),ut(e.$slots,"content",{task:v(_),process:v(T),snapshot:v(he),mode:v(F)},()=>[N.contentComponent?(n(),C(pt(N.contentComponent),mt({key:0,ref_key:"contentRef",ref:H},N.contentProps,{task:v(_),mode:v(F),snapshot:v(he),loading:K.value,"onUpdate:loading":t[0]||(t[0]=a=>K.value=a)}),null,16,["task","mode","snapshot","loading"])):l("v-if",!0)],!0),B(s,{level:"1",title:"审批记录",style:{"border-bottom":"var(--border)"}}),c("div",null,[Y.value.length?(n(),C(y,{key:1,class:"workflow-todo-shell__timeline"},{default:M(()=>[(n(!0),r(m,null,S(je.value,a=>(n(),C(g,{key:pe(a),type:D(a).type,hollow:D(a).hollow,class:O({"is-active":D(a).type==="primary"}),style:Ie({"--el-timeline-node-color":He(D(a).type)})},{default:M(()=>[B(k,{align:"center",justify:"space-between",class:O(["workflow-todo-shell__record-title",`is-${D(a).type}`])},{default:M(()=>[c("span",null,[x(d(a.taskName||"未命名节点")+" ",1),(a.occurrence||0)>1?(n(),r("span",Qt,d(a.occurrence),1)):l("v-if",!0),me(a)?(n(),r("span",qt,d(me(a)),1)):l("v-if",!0),l(" 我办理过的节点:标注「我的操作」,颜色跟随该节点的审批结论 "),fe(a)?(n(),r("span",{key:2,class:O(["workflow-todo-shell__record-mine",`is-${fe(a)}`])}," 我的操作 ",2)):l("v-if",!0)]),B(h,{type:D(a).type,size:"small"},{default:M(()=>[x(d(D(a).label),1)]),_:2},1032,["type"])]),_:2},1032,["class"]),Pe(a)?(n(),r("div",Gt,[c("span",Yt,d(ze(a)),1),Z(a)||a.tasks.some(p=>E(p.taskId).length)?(n(),r("div",Jt,[Z(a)?(n(),r(m,{key:0},[x(d(Z(a)),1)],64)):l("v-if",!0),(n(!0),r(m,null,S(a.tasks,p=>(n(),r(m,{key:p.taskId},[E(p.taskId).length?(n(),r("div",Xt,[(n(!0),r(m,null,S(E(p.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:ot=>v(q)(I.id)},[B(o,{"model-value":G(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,Zt))),128))])):l("v-if",!0)],64))),128))])):l("v-if",!0)])):a.tasks.length?(n(!0),r(m,{key:1},S(a.tasks,p=>(n(),r("div",{key:p.taskId,class:"workflow-todo-shell__record-user"},[c("span",eo,d(we(p)),1),p.comment||E(p.taskId).length?(n(),r("div",to,[p.comment?(n(),r(m,{key:0},[x(d(p.comment),1)],64)):l("v-if",!0),E(p.taskId).length?(n(),r("div",oo,[(n(!0),r(m,null,S(E(p.taskId),I=>(n(),r("span",{key:I.id,class:"workflow-todo-shell__record-file",onClick:ot=>v(q)(I.id)},[B(o,{"model-value":G(I.name)},null,8,["model-value"]),x(d(I.name),1)],8,so))),128))])):l("v-if",!0)])):l("v-if",!0)]))),128)):a.isEnd?l("v-if",!0):(n(),r(m,{key:2},[l(" 结束节点只有节点名与状态,不展示审签人 "),(n(!0),r(m,null,S(ke(a),p=>(n(),r("div",{key:p,class:"workflow-todo-shell__record-user"},[c("span",no,d(p),1)]))),128))],64))]),_:2},1032,["type","hollow","class","style"]))),128))]),_:1})):(n(),C(i,{key:0,description:"暂无审批记录","image-size":48}))])])),[[tt,K.value]]),N.showFooter?(n(),r("div",ao,[l(`
19
19
  已办节点的只读查看:节点开了撤回(后端按节点下发 withdrawEnabled)时,
20
20
  在「取消」旁边给出撤回入口——校验、预览、二次确认、执行都在组件内完成,
21
21
  成功后通知调用方刷新列表并关闭查看。
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)}}}),zo=gt(os,[["__scopeId","data-v-1e09a2d9"]]);export{zo as default};
22
+ `),Ge.value?(n(),C(et,{key:0,"oper-code":"system:workflow:processWithdrawal"},{default:M(()=>[B($,{type:"warning",loading:ee.value,onClick:Ye},{default:M(()=>[...t[11]||(t[11]=[x("撤回",-1)])]),_:1},8,["loading"])]),_:1})):l("v-if",!0),v(P)?(n(),C($,{key:1,onClick:t[1]||(t[1]=a=>V("cancel"))},{default:M(()=>[...t[12]||(t[12]=[x("取消",-1)])]),_:1})):(n(),C(Tt,{key:2,"task-id":N.taskId,params:Xe.value,"render-dialog":N.renderDialog,"show-process-btn":!1,"but-loading":K.value,"onUpdate:butLoading":t[2]||(t[2]=a=>K.value=a),onSuccess:Ze},null,8,["task-id","params","render-dialog","but-loading"]))])):l("v-if",!0)],512)}}}),Gs=bt(ro,[["__scopeId","data-v-b2e7d452"]]);export{Gs as default};