@robot-admin/naive-ui-components 0.22.1 → 0.23.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.
- package/CHANGELOG.md +10 -0
- package/README.md +7 -5
- package/README_EN.md +7 -5
- package/dist/C_ActionBar.d.cts +2 -1
- package/dist/C_ActionBar.d.ts +2 -1
- package/dist/C_AntV2.cjs +3 -3
- package/dist/C_AntV2.js +3 -3
- package/dist/C_BatchResult.cjs +1 -0
- package/dist/C_BatchResult.css +32 -0
- package/dist/C_BatchResult.d.cts +2 -0
- package/dist/C_BatchResult.d.ts +2 -0
- package/dist/C_BatchResult.js +1 -0
- package/dist/C_BatchResult2.cjs +1 -0
- package/dist/C_BatchResult2.js +1 -0
- package/dist/C_Breadcrumb.d.cts +2 -2
- package/dist/C_Breadcrumb.d.ts +1 -1
- package/dist/C_Cascade.d.cts +1 -1
- package/dist/C_Cascade.d.ts +1 -1
- package/dist/C_Chat.d.cts +1 -1
- package/dist/C_Chat.d.ts +1 -1
- package/dist/C_City.d.cts +1 -1
- package/dist/C_City.d.ts +1 -1
- package/dist/C_Code.d.cts +1 -1
- package/dist/C_Code.d.ts +1 -1
- package/dist/C_ContextMenu.d.cts +1 -1
- package/dist/C_ContextMenu.d.ts +1 -1
- package/dist/C_DataPicker.cjs +1 -0
- package/dist/C_DataPicker.css +54 -0
- package/dist/C_DataPicker.d.cts +2 -0
- package/dist/C_DataPicker.d.ts +5 -0
- package/dist/C_DataPicker.js +1 -0
- package/dist/C_DataPicker2.cjs +1 -0
- package/dist/C_DataPicker2.js +1 -0
- package/dist/C_Date.d.cts +1 -1
- package/dist/C_Date.d.ts +1 -1
- package/dist/C_Density.cjs +1 -0
- package/dist/C_Density.css +1 -0
- package/dist/C_Density.d.cts +3 -0
- package/dist/C_Density.d.ts +3 -0
- package/dist/C_Density.js +1 -0
- package/dist/C_Density2.cjs +1 -0
- package/dist/C_Density2.js +1 -0
- package/dist/C_Editor.d.cts +1 -1
- package/dist/C_Editor.d.ts +1 -1
- package/dist/C_ErrorSummary.cjs +1 -0
- package/dist/C_ErrorSummary.css +29 -0
- package/dist/C_ErrorSummary.d.cts +3 -0
- package/dist/C_ErrorSummary.d.ts +3 -0
- package/dist/C_ErrorSummary.js +1 -0
- package/dist/C_ErrorSummary2.cjs +1 -0
- package/dist/C_ErrorSummary2.js +1 -0
- package/dist/C_Form.base.css +150 -148
- package/dist/C_Form.css +151 -253
- package/dist/C_Form.d.cts +1 -1
- package/dist/C_Form.d.ts +19 -2
- package/dist/C_FormModal.css +1 -2
- package/dist/C_FormModal.d.cts +1 -1
- package/dist/C_FormModal.d.ts +17 -2
- package/dist/C_FormSearch.cjs +1 -1
- package/dist/C_FormSearch.css +124 -52
- package/dist/C_FormSearch.d.cts +3 -3
- package/dist/C_FormSearch.d.ts +5 -4
- package/dist/C_FormSearch.js +1 -1
- package/dist/C_FormulaEditor.d.cts +1 -1
- package/dist/C_FormulaEditor.d.ts +1 -1
- package/dist/C_Guide.d.cts +1 -1
- package/dist/C_Guide.d.ts +1 -1
- package/dist/C_Icon.d.cts +1 -1
- package/dist/C_Icon.d.ts +1 -1
- package/dist/C_Language.d.cts +1 -1
- package/dist/C_Language.d.ts +1 -1
- package/dist/C_Loading.d.cts +1 -1
- package/dist/C_Loading.d.ts +1 -1
- package/dist/C_Login.d.cts +1 -1
- package/dist/C_Login.d.ts +1 -1
- package/dist/C_Markdown.d.cts +1 -1
- package/dist/C_Markdown.d.ts +1 -1
- package/dist/C_Menu.d.cts +2 -2
- package/dist/C_Menu.d.ts +1 -1
- package/dist/C_OrgChart.d.cts +1 -1
- package/dist/C_OrgChart.d.ts +1 -1
- package/dist/C_Progress.d.cts +1 -1
- package/dist/C_Progress.d.ts +1 -1
- package/dist/C_SectionNav.cjs +1 -0
- package/dist/C_SectionNav.css +46 -0
- package/dist/C_SectionNav.d.cts +2 -0
- package/dist/C_SectionNav.d.ts +2 -0
- package/dist/C_SectionNav.js +1 -0
- package/dist/C_SectionNav2.cjs +1 -0
- package/dist/C_SectionNav2.js +1 -0
- package/dist/C_Skeleton.d.cts +1 -1
- package/dist/C_Skeleton.d.ts +1 -1
- package/dist/C_Steps.d.cts +1 -1
- package/dist/C_Steps.d.ts +1 -1
- package/dist/C_Table.base.css +258 -256
- package/dist/C_Table.cjs +1 -1
- package/dist/C_Table.css +109 -1283
- package/dist/C_Table.d.cts +2 -1
- package/dist/C_Table.d.ts +9 -8
- package/dist/C_Table.js +1 -1
- package/dist/C_Table2.cjs +3 -0
- package/dist/C_Table2.js +3 -0
- package/dist/C_Tabs.cjs +1 -1
- package/dist/C_Tabs.d.cts +1 -1
- package/dist/C_Tabs.d.ts +1 -1
- package/dist/C_Tabs.js +1 -1
- package/dist/C_TagsView.d.cts +1 -1
- package/dist/C_Theme.d.cts +1 -1
- package/dist/C_Theme.d.ts +1 -1
- package/dist/C_Timeline.d.cts +1 -1
- package/dist/C_Timeline.d.ts +1 -1
- package/dist/C_Transfer.d.cts +1 -1
- package/dist/C_Transfer.d.ts +1 -1
- package/dist/C_Tree.d.cts +1 -1
- package/dist/C_Tree.d.ts +9 -8
- package/dist/C_Upload.d.cts +1 -1
- package/dist/C_Upload.d.ts +1 -1
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/Card.cjs +1 -1
- package/dist/Card.js +1 -1
- package/dist/Steps.cjs +1 -1
- package/dist/Steps.js +1 -1
- package/dist/Tabs.cjs +1 -1
- package/dist/Tabs.js +1 -1
- package/dist/batchPatch.cjs +1 -0
- package/dist/batchPatch.d.cts +26 -0
- package/dist/batchPatch.d.ts +26 -0
- package/dist/batchPatch.js +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.d.cts +4 -1
- package/dist/config.d.ts +6 -2
- package/dist/config.js +1 -1
- package/dist/config2.d.ts +1 -1
- package/dist/constants.d.cts +3 -3
- package/dist/constants.d.ts +3 -3
- package/dist/constants2.d.cts +402 -173
- package/dist/constants2.d.ts +402 -173
- package/dist/constants3.d.cts +4 -4
- package/dist/constants3.d.ts +4 -4
- package/dist/constants4.d.cts +173 -402
- package/dist/constants4.d.ts +173 -402
- package/dist/constants5.d.cts +2 -2
- package/dist/constants5.d.ts +2 -2
- package/dist/contracts.d.ts +24 -0
- package/dist/data.cjs +1 -1
- package/dist/data.d.cts +5 -108
- package/dist/data.d.ts +5 -108
- package/dist/data.js +1 -1
- package/dist/data2.cjs +1 -1
- package/dist/data2.d.cts +108 -0
- package/dist/data2.d.ts +108 -0
- package/dist/data2.js +1 -1
- package/dist/data3.cjs +1 -0
- package/dist/data3.js +1 -0
- package/dist/dateRange.d.cts +108 -13
- package/dist/dateRange.d.ts +110 -14
- package/dist/density.d.ts +15 -0
- package/dist/dictionary.cjs +1 -0
- package/dist/dictionary.d.cts +38 -0
- package/dist/dictionary.d.ts +38 -0
- package/dist/dictionary.js +1 -0
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +63 -52
- package/dist/index.d.ts +71 -57
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +5 -5
- package/dist/index.vue.d.ts +5 -5
- package/dist/index10.vue.d.cts +37 -80
- package/dist/index10.vue.d.ts +77 -53
- package/dist/index11.vue.d.cts +77 -53
- package/dist/index11.vue.d.ts +1117 -45
- package/dist/index12.vue.d.cts +1117 -45
- package/dist/index12.vue.d.ts +17 -128
- package/dist/index13.vue.d.cts +17 -128
- package/dist/index13.vue.d.ts +57 -53
- package/dist/index14.vue.d.cts +57 -53
- package/dist/index14.vue.d.ts +16 -25
- package/dist/index15.vue.d.cts +16 -25
- package/dist/index15.vue.d.ts +52 -12
- package/dist/index16.vue.d.cts +52 -12
- package/dist/index16.vue.d.ts +13 -129
- package/dist/index17.vue.d.cts +13 -129
- package/dist/index17.vue.d.ts +123 -74
- package/dist/index18.vue.d.cts +123 -74
- package/dist/index18.vue.d.ts +48 -71
- package/dist/index19.vue.d.cts +40 -91
- package/dist/index19.vue.d.ts +36 -96
- package/dist/index2.vue.d.cts +2 -2
- package/dist/index2.vue.d.ts +2 -2
- package/dist/index20.vue.d.cts +38 -47
- package/dist/index20.vue.d.ts +13 -48
- package/dist/index21.vue.d.cts +12 -96
- package/dist/index21.vue.d.ts +25 -95
- package/dist/index22.vue.d.cts +20 -32
- package/dist/index22.vue.d.ts +75 -37
- package/dist/index23.vue.d.cts +77 -13
- package/dist/index23.vue.d.ts +71 -13
- package/dist/index24.vue.d.cts +1 -1
- package/dist/index25.vue.d.cts +116 -90
- package/dist/index25.vue.d.ts +116 -90
- package/dist/index26.vue.d.cts +94 -59
- package/dist/index26.vue.d.ts +94 -59
- package/dist/index27.vue.d.cts +75 -0
- package/dist/index27.vue.d.ts +75 -0
- package/dist/index28.vue.d.cts +103 -0
- package/dist/index28.vue.d.ts +103 -0
- package/dist/index29.vue.d.cts +105 -0
- package/dist/index29.vue.d.ts +105 -0
- package/dist/index3.vue.d.cts +5 -5
- package/dist/index3.vue.d.ts +5 -5
- package/dist/index30.vue.d.cts +28 -0
- package/dist/index30.vue.d.ts +28 -0
- package/dist/index4.vue.d.cts +19 -128
- package/dist/index4.vue.d.ts +17 -34
- package/dist/index5.vue.d.cts +127 -35
- package/dist/index5.vue.d.ts +30 -19
- package/dist/index6.vue.d.cts +30 -19
- package/dist/index6.vue.d.ts +22 -118
- package/dist/index7.vue.d.cts +22 -118
- package/dist/index7.vue.d.ts +112 -18
- package/dist/index8.vue.d.cts +112 -18
- package/dist/index8.vue.d.ts +24 -35
- package/dist/index9.vue.d.cts +24 -35
- package/dist/index9.vue.d.ts +37 -80
- package/dist/mapUtils.d.cts +4 -4
- package/dist/mapUtils.d.ts +4 -4
- package/dist/numberCodec.cjs +1 -0
- package/dist/numberCodec.d.cts +25 -0
- package/dist/numberCodec.d.ts +25 -0
- package/dist/numberCodec.js +1 -0
- package/dist/observer.cjs +1 -0
- package/dist/observer.js +1 -0
- package/dist/presets.d.cts +3 -66
- package/dist/presets.d.ts +3 -66
- package/dist/resolver.cjs +1 -1
- package/dist/resolver.d.cts +1 -1
- package/dist/resolver.d.ts +1 -1
- package/dist/resolver.js +1 -1
- package/dist/serializeSearch.cjs +1 -0
- package/dist/serializeSearch.js +1 -0
- package/dist/style.css +547 -308
- package/dist/types.d.cts +60 -103
- package/dist/types.d.ts +62 -52
- package/dist/types2.d.cts +104 -51
- package/dist/types2.d.ts +56 -0
- package/dist/types3.d.cts +56 -0
- package/dist/useCollapsePanel.d.cts +6 -6
- package/dist/useCollapsePanel.d.ts +6 -6
- package/dist/useComponentLocale.cjs +1 -1
- package/dist/useComponentLocale.js +1 -1
- package/dist/useCropperCore.d.cts +13 -13
- package/dist/useCropperCore.d.ts +13 -13
- package/dist/useDataResource.cjs +1 -0
- package/dist/useDataResource.js +1 -0
- package/dist/useDictionary.cjs +1 -0
- package/dist/useDictionary.js +1 -0
- package/dist/useDynamicFormState.d.cts +960 -10
- package/dist/useDynamicFormState.d.ts +951 -11
- package/dist/useEdgeInteraction.d.cts +3 -3
- package/dist/useEdgeInteraction.d.ts +3 -3
- package/dist/useFormArray.cjs +1 -0
- package/dist/useFormArray.d.cts +69 -0
- package/dist/useFormArray.d.ts +69 -0
- package/dist/useFormArray.js +1 -0
- package/dist/useFormConfig.d.cts +14 -0
- package/dist/useFormConfig.d.ts +17 -38
- package/dist/useGridWidth.cjs +1 -0
- package/dist/useGridWidth.js +1 -0
- package/dist/useInfiniteScroll.d.cts +3 -3
- package/dist/useInfiniteScroll.d.ts +3 -3
- package/dist/useQRCode.d.cts +5 -5
- package/dist/useQRCode.d.ts +5 -5
- package/dist/useSignatureHistory.d.cts +7 -7
- package/dist/useSignatureHistory.d.ts +7 -7
- package/dist/useSplitResize.d.cts +9 -9
- package/dist/useSplitResize.d.ts +9 -9
- package/dist/useTableGlobalConfig.cjs +1 -0
- package/dist/useTableGlobalConfig.js +1 -0
- package/dist/useTableQuery.cjs +1 -3
- package/dist/useTableQuery.js +1 -3
- package/dist/useWorkflowValidation.d.cts +5 -5
- package/dist/useWorkflowValidation.d.ts +5 -5
- package/dist/validation.cjs +1 -0
- package/dist/validation.d.cts +18 -0
- package/dist/validation.d.ts +18 -0
- package/dist/validation.js +1 -0
- package/dist/verification.d.cts +4 -4
- package/dist/verification.d.ts +5 -5
- package/dist/workflows.cjs +1 -0
- package/dist/workflows.d.cts +2 -0
- package/dist/workflows.d.ts +2 -0
- package/dist/workflows.js +1 -0
- package/docs/components.en.md +13 -1
- package/docs/components.md +13 -1
- package/docs/guides/batch-results.md +47 -0
- package/docs/guides/data-picker.md +65 -0
- package/docs/guides/data-workflows.md +123 -0
- package/docs/guides/form-density.en.md +39 -0
- package/docs/guides/form-density.md +39 -0
- package/docs/guides/search-workflows.md +164 -0
- package/package.json +21 -1
- package/dist/C_FormSearch2.cjs +0 -1
- package/dist/C_FormSearch2.js +0 -1
- package/dist/useTableQuery.d.cts +0 -1957
- package/dist/useTableQuery.d.ts +0 -1946
package/dist/C_Tree.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
import "./types.js";
|
|
1
2
|
import "./presets.js";
|
|
2
3
|
import "./useEdgeInteraction.js";
|
|
3
4
|
import "./public.js";
|
|
4
|
-
import "./
|
|
5
|
-
import
|
|
5
|
+
import "./index5.vue.js";
|
|
6
|
+
import "./useFormConfig.js";
|
|
7
|
+
import { t as ComponentDensity } from "./density.js";
|
|
6
8
|
import "./config2.js";
|
|
7
9
|
import "./verification.js";
|
|
8
|
-
import "./useDraggableLayout.js";
|
|
9
|
-
import "./useDynamicFormState.js";
|
|
10
10
|
import "./index11.vue.js";
|
|
11
|
-
import "./
|
|
12
|
-
import "./
|
|
11
|
+
import "./useDraggableLayout.js";
|
|
12
|
+
import { A as TreeNativeProps, C as IconConfig, D as TreeExpose, E as TreeEmits, F as TreeSlots, I as TreeUpdateMeta, M as TreeOption, N as TreeProps, O as TreeKey, P as TreeRenderContext, S as DropInfo, T as StatusType, _ as useTreeOperations, b as ActionConfig, j as TreeNodeData, k as TreeMode, v as presetConfigs, w as StatusConfig, x as ButtonType, y as _default } from "./useDynamicFormState.js";
|
|
13
13
|
import "./mapUtils.js";
|
|
14
|
-
import "./
|
|
15
|
-
import { C as TreeNodeData, D as TreeSlots, E as TreeRenderContext, O as TreeUpdateMeta, S as TreeNativeProps, T as TreeProps, _ as StatusType, b as TreeKey, d as _default, f as ActionConfig, g as StatusConfig, h as IconConfig, l as useTreeOperations, m as DropInfo, p as ButtonType, u as presetConfigs, v as TreeEmits, w as TreeOption, x as TreeMode, y as TreeExpose } from "./useTableQuery.js";
|
|
14
|
+
import "./dateRange.js";
|
|
16
15
|
import "./constants5.js";
|
|
17
16
|
import "./useWorkflowValidation.js";
|
|
17
|
+
import "./index23.vue.js";
|
|
18
18
|
import "./index24.vue.js";
|
|
19
|
+
import "./index25.vue.js";
|
|
19
20
|
export { type ActionConfig, type ButtonType, _default as C_Tree, type ComponentDensity, type DropInfo, type IconConfig, type StatusConfig, type StatusType, type TreeEmits, type TreeExpose, type TreeKey, type TreeMode, type TreeNativeProps, type TreeNodeData, type TreeOption, type TreeProps, type TreeRenderContext, type TreeSlots, type TreeUpdateMeta, presetConfigs as treePresetConfigs, useTreeOperations };
|
package/dist/C_Upload.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as UploadFileStatus, a as useFileHash, b as UploadedChunksQueryFn, c as _default, d as InstantCheckFn, f as MergeChunksFn, g as UploadFileItem, h as UploadExpose, i as useChunkUpload, l as ChunkProgress, m as UploadEmits, n as getFileIcon, o as useDragDrop, p as UploadChunk, r as useUploadQueue, s as useUploadCore, t as formatFileSize, u as CustomUploadRequest, v as UploadProps, y as UploadRequestOptions } from "./
|
|
1
|
+
import { _ as UploadFileStatus, a as useFileHash, b as UploadedChunksQueryFn, c as _default, d as InstantCheckFn, f as MergeChunksFn, g as UploadFileItem, h as UploadExpose, i as useChunkUpload, l as ChunkProgress, m as UploadEmits, n as getFileIcon, o as useDragDrop, p as UploadChunk, r as useUploadQueue, s as useUploadCore, t as formatFileSize, u as CustomUploadRequest, v as UploadProps, y as UploadRequestOptions } from "./constants2.cjs";
|
|
2
2
|
export { _default as C_Upload, type ChunkProgress, type CustomUploadRequest, type InstantCheckFn, type MergeChunksFn, type UploadChunk, type UploadEmits, type UploadExpose, type UploadFileItem, type UploadFileStatus, type UploadProps, type UploadRequestOptions, type UploadedChunksQueryFn, formatFileSize, getFileIcon, useChunkUpload, useDragDrop, useFileHash, useUploadCore, useUploadQueue };
|
package/dist/C_Upload.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as UploadFileStatus, a as useFileHash, b as UploadedChunksQueryFn, c as _default, d as InstantCheckFn, f as MergeChunksFn, g as UploadFileItem, h as UploadExpose, i as useChunkUpload, l as ChunkProgress, m as UploadEmits, n as getFileIcon, o as useDragDrop, p as UploadChunk, r as useUploadQueue, s as useUploadCore, t as formatFileSize, u as CustomUploadRequest, v as UploadProps, y as UploadRequestOptions } from "./
|
|
1
|
+
import { _ as UploadFileStatus, a as useFileHash, b as UploadedChunksQueryFn, c as _default, d as InstantCheckFn, f as MergeChunksFn, g as UploadFileItem, h as UploadExpose, i as useChunkUpload, l as ChunkProgress, m as UploadEmits, n as getFileIcon, o as useDragDrop, p as UploadChunk, r as useUploadQueue, s as useUploadCore, t as formatFileSize, u as CustomUploadRequest, v as UploadProps, y as UploadRequestOptions } from "./constants2.js";
|
|
2
2
|
export { _default as C_Upload, type ChunkProgress, type CustomUploadRequest, type InstantCheckFn, type MergeChunksFn, type UploadChunk, type UploadEmits, type UploadExpose, type UploadFileItem, type UploadFileStatus, type UploadProps, type UploadRequestOptions, type UploadedChunksQueryFn, formatFileSize, getFileIcon, useChunkUpload, useDragDrop, useFileHash, useUploadCore, useUploadQueue };
|
package/dist/C_WorkFlow2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./feedback.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`),r=require(`./data.cjs`);let i=require(`vue`),a=require(`naive-ui`),o=require(`@vue-flow/core`);const s=[{type:`approval`,label:`审批人`,icon:`mdi:account-check`,iconClass:`approval-icon`},{type:`copy`,label:`抄送人`,icon:`mdi:email-outline`,iconClass:`copy-icon`},{type:`condition`,label:`条件分支`,icon:`mdi:source-branch`,iconClass:`condition-icon`}],c=[{value:`any`,label:`或签`,desc:`任意一人同意即可通过`},{value:`all`,label:`会签`,desc:`所有人都同意才能通过`},{value:`sequence`,label:`顺序审批`,desc:`按选择顺序依次审批`}],l=[{label:`申请金额`,value:`amount`},{label:`申请人部门`,value:`department`},{label:`申请类型`,value:`type`},{label:`紧急程度`,value:`priority`}],u=[{label:`等于`,value:`equals`},{label:`大于`,value:`greater_than`},{label:`小于`,value:`less_than`},{label:`包含`,value:`contains`},{label:`不等于`,value:`not_equals`}],d={start:`发起人`,approval:`审批人`,copy:`抄送人`,condition:`条件分支`},f={approval:`审批人设置`,copy:`抄送人设置`,condition:`条件分支设置`},p={approvers:`审批人`,conditions:`条件配置`,connection:`节点连接`,nodeId:`节点标识`,edgeId:`连线标识`,start:`开始节点`,cycle:`循环策略`,copyUsers:`抄送人`},m={required:`必填`,invalid:`结构错误`,incomplete:`不完整`,warning:`警告`,error:`错误`},h={id:`start-1`,type:`start`,position:{x:150,y:100},data:{title:`发起人`,status:`active`,initiators:[]}},g=e=>{let t=Array.from(e.trim()).slice(0,2).join(``).toUpperCase()||`?`,n=`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 80 80"><rect width="80" height="80" rx="40" fill="hsl(${Array.from(e).reduce((e,t)=>(e*31+(t.codePointAt(0)??0))%360,210)} 55% 46%)"/><text x="40" y="48" text-anchor="middle" font-family="sans-serif" font-size="28" fill="white">${t.replace(/[&<>"']/g,e=>({"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`})[e])}</text></svg>`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(n)}`};let _=0;const v=e=>typeof crypto<`u`&&`randomUUID`in crypto?`${e}-${crypto.randomUUID()}`:`${e}-${Date.now()}-${++_}`,y=()=>v(`condition`),b=(e,t)=>`edge-${e}-${t}`,x=()=>({id:y(),name:``,field:``,operator:`equals`,value:``}),S=new Set([`equals`,`not_equals`,`greater_than`,`less_than`,`contains`]);function C(e){if(!e||typeof e!=`object`)return!1;let t=e;return[t.id,t.name,t.field,t.value].every(e=>typeof e==`string`&&e.trim().length>0)&&S.has(t.operator)}const w={key:0,class:`max-h-60vh overflow-y-auto`},T={class:`config-section`},E={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},D={class:`border rounded-lg p-3 mb-4 max-h-50 overflow-y-auto`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},O={key:0,class:`rounded-lg p-4 mb-4 border`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},k={class:`mb-2 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},A={class:`flex flex-wrap gap-3`},j={class:`flex items-center gap-2`},M={class:`font-medium text-sm`},N={class:`text-xs px-1.5 py-0.5 rounded`,style:{color:`var(--n-text-color-3)`,background:`var(--n-color-embedded)`}},P={key:0,class:`mt-4`},F={class:`flex flex-col gap-1`},I={class:`text-sm`},L={class:`text-xs`,style:{color:`var(--n-text-color-3)`}},R={class:`max-h-60vh overflow-y-auto`},z={class:`config-section`},B={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},V={class:`space-y-3`},H={class:`flex items-center gap-3 flex-nowrap min-h-10 p-2`},U=(0,i.defineComponent)({__name:`NodeConfigModal`,props:{show:{type:Boolean,default:!1},currentNode:{default:null},users:{default:()=>[]},departments:{default:()=>[]}},emits:[`update:show`,`save`,`cancel`],setup(n,{emit:o}){let s=n,d=o,p=e.t(),m=(0,i.ref)(``),h=(0,i.ref)([]),_=(0,i.ref)([]),v=(0,i.ref)(`any`),y=(0,i.ref)(!1),b=(0,i.ref)([]),S=(0,i.computed)({get:()=>s.show,set:e=>d(`update:show`,e)}),U=(0,i.computed)(()=>s.currentNode?.type===`start`?`发起人设置`:f[s.currentNode?.type]||`节点设置`),ee=(0,i.computed)(()=>{let e=[],t=new Map;return s.departments?.forEach(e=>{t.has(e.id)||t.set(e.id,{key:`dept-${e.id}`,label:`${e.name} ${e.manager?`(负责人: ${e.manager})`:``}`,children:[],isLeaf:!1,disabled:!0})}),(s.users?.filter(e=>!m.value||e.name.includes(m.value)||e.department.includes(m.value))||[]).forEach(e=>{let n=s.departments?.find(t=>t.name===e.department);n&&t.has(n.id)&&t.get(n.id).children.push({key:e.id,label:`${e.name}${e.role?`(${e.role})`:``}`,isLeaf:!0,user:e})}),t.forEach(t=>{t.children.length>0&&e.push(t)}),e}),W=(0,i.computed)(()=>s.users?.filter(e=>h.value.includes(e.id))||[]),G=(0,i.computed)(()=>s.users?.filter(e=>_.value.includes(e.id))||[]),K=(0,i.computed)(()=>s.users?.filter(e=>h.value.includes(e.id))||[]),q=e=>{h.value=e.filter(e=>!e.startsWith(`dept-`))},J=e=>{_.value=e.filter(e=>!e.startsWith(`dept-`))},Y=e=>{h.value=h.value.filter(t=>t!==e)},X=e=>{_.value=_.value.filter(t=>t!==e)},Z=e=>{h.value=h.value.filter(t=>t!==e)},te=()=>b.value.push(x()),ne=e=>b.value.splice(e,1),re=e=>{let{initiators:t}=e.data;h.value=t?t.map(e=>e.id):[]},ie=e=>{h.value=(e.data.approvers||[]).map(e=>e.id),v.value=e.data.approvalMode||`any`},ae=e=>{_.value=(e.data.copyUsers||[]).map(e=>e.id)},oe=e=>{b.value=r.t(e.data.conditions||[])},se=async()=>{if(h.value.length===0)return p.error(`请选择发起人`),!1;let e=K.value;return d(`save`,{initiators:e}),p.success(`已设置 ${e.length} 个发起人`),!0},ce=async()=>{if(h.value.length===0)return p.error(`请至少选择一个审批人`),!1;let e=W.value;return d(`save`,{approvers:e,approvalMode:v.value}),p.success(`已设置 ${e.length} 个审批人`),!0},le=async()=>{let e=G.value;return d(`save`,{copyUsers:e}),p.success(`已设置 ${e.length} 个抄送人`),!0},ue=async()=>b.value.length===0?(p.error(`请至少添加一个条件分支`),!1):b.value.some(e=>!C(e))?(p.error(`请完善所有条件配置`),!1):(d(`save`,{conditions:r.t(b.value)}),p.success(`已设置 ${b.value.length} 个条件分支`),!0),de=async()=>{if(!s.currentNode)return!1;y.value=!0;try{let e={start:se,approval:ce,copy:le,condition:ue}[s.currentNode.type];return e?await e():!1}catch(e){return p.error(`保存配置失败`,e),!1}finally{y.value=!1}},fe=()=>{d(`cancel`)};(0,i.watch)(()=>s.currentNode,e=>{if(e)switch(m.value=``,e.type){case`start`:re(e);break;case`approval`:ie(e);break;case`copy`:ae(e);break;case`condition`:oe(e);break}},{immediate:!0});let pe=(0,i.computed)(()=>[`start`,`approval`,`copy`].includes(s.currentNode?.type||``)),Q=(0,i.computed)(()=>{let e=s.currentNode?.type;return e===`start`?{icon:`mdi:account-star`,title:`选择发起人`,checkedKeys:h.value,onSelect:q,selectedUsers:K.value,selectedLabel:`已选择发起人`,tagType:`primary`,onRemove:Z}:e===`approval`?{icon:`mdi:account-check`,title:`选择审批人`,checkedKeys:h.value,onSelect:q,selectedUsers:W.value,selectedLabel:`已选择审批人`,tagType:`info`,onRemove:Y}:e===`copy`?{icon:`mdi:email-outline`,title:`选择抄送人`,checkedKeys:_.value,onSelect:J,selectedUsers:G.value,selectedLabel:`已选择抄送人`,tagType:`success`,onRemove:X}:{icon:``,title:``,checkedKeys:[],onSelect:()=>{},selectedUsers:[],selectedLabel:``,tagType:`default`,onRemove:()=>{}}});return(e,n)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NModal),{show:S.value,"onUpdate:show":n[2]||=e=>S.value=e,style:{width:`900px`},"mask-closable":!1,preset:`dialog`,title:U.value,"positive-text":`确定`,"negative-text":`取消`,loading:y.value,onPositiveClick:de,onNegativeClick:fe},{default:(0,i.withCtx)(()=>[(0,i.createCommentVNode)(` 公共选择面板 `),pe.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,w,[(0,i.createElementVNode)(`div`,T,[(0,i.createElementVNode)(`h4`,E,[Q.value.icon?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(t.t),{key:0,name:Q.value.icon,size:16},null,8,[`name`])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createTextVNode)(` `+(0,i.toDisplayString)(Q.value.title),1)]),(0,i.createVNode)((0,i.unref)(a.NInput),{value:m.value,"onUpdate:value":n[0]||=e=>m.value=e,placeholder:`搜索用户姓名或部门`,clearable:``,class:`mb-4`},{prefix:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:magnify`,size:16})]),_:1},8,[`value`]),(0,i.createElementVNode)(`div`,D,[(0,i.createVNode)((0,i.unref)(a.NTree),{data:ee.value,"checked-keys":Q.value.checkedKeys,selectable:!1,checkable:``,cascade:``,"virtual-scroll":!0,style:{"max-height":`300px`},"onUpdate:checkedKeys":Q.value.onSelect},null,8,[`data`,`checked-keys`,`onUpdate:checkedKeys`])]),Q.value.selectedUsers.length>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,O,[(0,i.createElementVNode)(`h5`,k,(0,i.toDisplayString)(Q.value.selectedLabel)+` (`+(0,i.toDisplayString)(Q.value.selectedUsers.length)+`) `,1),(0,i.createElementVNode)(`div`,A,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(Q.value.selectedUsers,e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NTag),{key:e.id,closable:``,type:Q.value.tagType,onClose:t=>Q.value.onRemove(e.id)},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,j,[(0,i.createVNode)((0,i.unref)(a.NAvatar),{src:e.avatar,"fallback-src":(0,i.unref)(g)(e.name),size:`small`},null,8,[`src`,`fallback-src`]),(0,i.createElementVNode)(`span`,M,(0,i.toDisplayString)(e.name),1),(0,i.createElementVNode)(`span`,N,(0,i.toDisplayString)(e.department),1)])]),_:2},1032,[`type`,`onClose`]))),128))])])):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createCommentVNode)(` 审批节点时附带审批模式 `),s.currentNode?.type===`approval`?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,P,[n[3]||=(0,i.createElementVNode)(`h5`,{class:`mb-3 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},` 审批模式 `,-1),(0,i.createVNode)((0,i.unref)(a.NRadioGroup),{value:v.value,"onUpdate:value":n[1]||=e=>v.value=e},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NSpace),{vertical:``},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(c),e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NRadio),{key:e.value,value:e.value},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,F,[(0,i.createElementVNode)(`strong`,I,(0,i.toDisplayString)(e.label),1),(0,i.createElementVNode)(`span`,L,(0,i.toDisplayString)(e.desc),1)])]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`value`])])):(0,i.createCommentVNode)(`v-if`,!0)])):s.currentNode?.type===`condition`?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 条件节点配置 `),(0,i.createElementVNode)(`div`,R,[(0,i.createElementVNode)(`div`,z,[(0,i.createElementVNode)(`h4`,B,[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:source-branch`,size:16}),n[4]||=(0,i.createTextVNode)(` 条件分支设置 `,-1)]),(0,i.createElementVNode)(`div`,V,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(b.value,(e,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`condition-item`},[(0,i.createVNode)((0,i.unref)(a.NCard),{size:`small`,class:`border border-gray-200 hover:border-gray-300 transition-colors`},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,H,[(0,i.createVNode)((0,i.unref)(a.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`分支名称`,style:{width:`150px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),(0,i.createVNode)((0,i.unref)(a.NSelect),{value:e.field,"onUpdate:value":t=>e.field=t,placeholder:`选择字段`,options:(0,i.unref)(l),style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),(0,i.createVNode)((0,i.unref)(a.NSelect),{value:e.operator,"onUpdate:value":t=>e.operator=t,placeholder:`操作符`,options:(0,i.unref)(u),style:{width:`100px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),(0,i.createVNode)((0,i.unref)(a.NInput),{value:e.value,"onUpdate:value":t=>e.value=t,placeholder:`值`,style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),(0,i.createVNode)((0,i.unref)(a.NButton),{quaternary:``,type:`error`,onClick:e=>ne(n),class:`flex-shrink-0 ml-auto`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:delete`,size:16})]),_:1},8,[`onClick`])])]),_:2},1024)]))),128)),(0,i.createVNode)((0,i.unref)(a.NButton),{dashed:``,block:``,onClick:te,class:`w-full`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:plus`,size:16})]),default:(0,i.withCtx)(()=>[n[5]||=(0,i.createTextVNode)(` 添加条件 `,-1)]),_:1})])])])],2112)):(0,i.createCommentVNode)(`v-if`,!0)]),_:1},8,[`show`,`title`,`loading`]))}});var ee=n.t(U,[[`__scopeId`,`data-v-e1ac2c54`]]);const W=[`id`,`type`,`position`,`data`,`selected`,`dragging`,`connectable`,`selectable`,`deletable`,`dragHandle`,`width`,`height`,`parentNode`,`zIndex`,`extent`,`expandParent`],G=[`id`,`source`,`target`,`sourceHandle`,`targetHandle`,`type`,`animated`,`hidden`,`deletable`,`selectable`,`data`,`style`,`label`,`labelStyle`,`labelShowBg`,`labelBgStyle`,`labelBgPadding`,`labelBgBorderRadius`,`markerStart`,`markerEnd`];function K(e){return new Map(e.map(e=>[e.id,new Set(Object.keys(e))]))}function q(e,t,n){return Object.fromEntries(t.filter(e=>n?.has(String(e))).map(t=>[t,e[t]]))}function J(e,t){return r.t({...q(e,W,t),id:e.id,type:e.type,position:{x:e.position.x,y:e.position.y},data:e.data})}function Y(e,t){return r.t({...q(e,G,t),id:e.id,source:e.source,target:e.target})}function X(e,t){let n=new Set(e.map(e=>e.id));for(let e of t.keys())n.has(e)||t.delete(e)}const Z={class:`start-node`},te={class:`node-content`},ne={class:`node-info`},re={class:`node-text`},ie={key:0,class:`initiator-name`},ae={key:1,class:`placeholder-text`},oe=(0,i.defineComponent)({__name:`StartNode`,props:{id:{},data:{}},setup(e){let n=e,r=(0,i.inject)(`showAddMenu`),a=(0,i.computed)(()=>{let{initiators:e}=n.data;return!e||!Array.isArray(e)||e.length===0?``:e.map(e=>e?.name||`未知用户`).join(`、`)}),o=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)};return(n,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Z,[(0,i.createCommentVNode)(` 主要内容区域 `),(0,i.createElementVNode)(`div`,te,[r[0]||=(0,i.createElementVNode)(`div`,{class:`node-icon`},`🚀`,-1),(0,i.createElementVNode)(`div`,ne,[(0,i.createElementVNode)(`div`,re,(0,i.toDisplayString)(e.data.title),1),a.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ie,(0,i.toDisplayString)(a.value),1)):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ae,`点击设置发起人`))])]),(0,i.createCommentVNode)(` 添加节点按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:o,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:plus`,size:16})])]))}});var se=n.t(oe,[[`__scopeId`,`data-v-6fb2df95`]]);const ce={class:`approval-node`},le={class:`node-card`},ue={class:`node-header`},de={class:`node-icon`},fe={class:`node-title`},pe={key:0,class:`node-badge`},Q={key:1,class:`approval-mode-badge`},me={class:`node-content`},he={key:0,class:`approvers-list`},ge={class:`approver-info`},_e={class:`approver-avatar`},ve={class:`approver-details`},ye={class:`approver-name`},be={class:`approver-dept`},xe={class:`approver-role`},Se={key:0,class:`more-count`},Ce={key:1,class:`placeholder`},we=(0,i.defineComponent)({__name:`ApprovalNode`,props:{id:{},data:{}},setup(e){let n=e,r=(0,i.inject)(`showAddMenu`),o=(0,i.inject)(`deleteNode`),s=(0,i.computed)(()=>n.data.approvers??[]),c=(0,i.computed)(()=>s.value.length),l=(0,i.computed)(()=>s.value.slice(0,3)),u=(0,i.computed)(()=>Math.max(0,c.value-3)),d=e=>({any:`或签`,all:`会签`,sequence:`顺序`})[e]||``,f=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},p=e=>{e.stopPropagation(),o&&o(n.id)};return(n,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ce,[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`status-indicator`,e.data.status])},null,2),(0,i.createCommentVNode)(` 删除按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`delete-btn`,onClick:p,title:`删除节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:close`,size:12})]),(0,i.createElementVNode)(`div`,le,[(0,i.createElementVNode)(`div`,ue,[(0,i.createElementVNode)(`div`,de,[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:account`,size:12,color:`white`})]),(0,i.createElementVNode)(`span`,fe,(0,i.toDisplayString)(e.data.title),1),c.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,pe,(0,i.toDisplayString)(c.value),1)):(0,i.createCommentVNode)(`v-if`,!0),e.data.approvalMode?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Q,(0,i.toDisplayString)(d(e.data.approvalMode)),1)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,me,[c.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,he,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(l.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`approver-tag`},[(0,i.createElementVNode)(`div`,ge,[(0,i.createElementVNode)(`div`,_e,[(0,i.createVNode)((0,i.unref)(a.NAvatar),{src:e.avatar,"fallback-src":(0,i.unref)(g)(e.name),size:`small`},null,8,[`src`,`fallback-src`])]),(0,i.createElementVNode)(`div`,ve,[(0,i.createElementVNode)(`span`,ye,(0,i.toDisplayString)(e.name),1),(0,i.createElementVNode)(`span`,be,(0,i.toDisplayString)(e.department),1),(0,i.createElementVNode)(`span`,xe,(0,i.toDisplayString)(e.role),1)])])]))),128)),u.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Se,`+`+(0,i.toDisplayString)(u.value),1)):(0,i.createCommentVNode)(`v-if`,!0)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ce,[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:account-plus`,size:24,color:`#9ca3af`}),r[0]||=(0,i.createElementVNode)(`span`,null,`请设置审批人`,-1)]))])]),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:f,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:plus`,size:16})])]))}});var Te=n.t(we,[[`__scopeId`,`data-v-e6968a42`]]);const Ee={class:`copy-node`},De={class:`node-card`},Oe={class:`node-header`},ke={class:`node-title`},Ae={key:0,class:`node-badge`},je={class:`node-content`},Me={key:0,class:`copy-users-list`},Ne={key:0,class:`more-count`},Pe={key:1,class:`placeholder`},Fe=(0,i.defineComponent)({__name:`CopyNode`,props:{id:{},data:{}},setup(e){let n=e,r=(0,i.inject)(`showAddMenu`),a=(0,i.inject)(`deleteNode`),o=(0,i.computed)(()=>n.data.copyUsers??[]),s=(0,i.computed)(()=>o.value.length),c=(0,i.computed)(()=>o.value.slice(0,3)),l=(0,i.computed)(()=>Math.max(0,s.value-3)),u=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},d=e=>{e.stopPropagation(),a&&a(n.id)};return(n,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ee,[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`status-indicator`,e.data.status])},null,2),(0,i.createCommentVNode)(` 删除按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`delete-btn`,onClick:d,title:`删除节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:close`,size:12})]),(0,i.createElementVNode)(`div`,De,[(0,i.createElementVNode)(`div`,Oe,[r[0]||=(0,i.createElementVNode)(`div`,{class:`node-icon`},`📋`,-1),(0,i.createElementVNode)(`span`,ke,(0,i.toDisplayString)(e.data.title),1),s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ae,(0,i.toDisplayString)(s.value),1)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,je,[s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Me,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`copy-user-tag`},(0,i.toDisplayString)(e.name),1))),128)),l.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ne,`+`+(0,i.toDisplayString)(l.value),1)):(0,i.createCommentVNode)(`v-if`,!0)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Pe,`请设置抄送人`))])]),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:u,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:plus`,size:16})])]))}});var Ie=n.t(Fe,[[`__scopeId`,`data-v-010e7ec8`]]);const Le={class:`condition-node`},Re={class:`node-card`},ze={class:`node-header`},Be={class:`node-title`},Ve={key:0,class:`node-badge`},He={class:`node-content`},Ue={key:0,class:`conditions-list`},We={key:0,class:`more-count`},Ge={key:1,class:`placeholder`},Ke=(0,i.defineComponent)({__name:`ConditionNode`,props:{id:{},data:{}},setup(e){let n=e,r=(0,i.inject)(`showAddMenu`),a=(0,i.inject)(`deleteNode`),o=(0,i.computed)(()=>n.data.conditions??[]),s=(0,i.computed)(()=>o.value.length),c=(0,i.computed)(()=>o.value.slice(0,2)),l=(0,i.computed)(()=>Math.max(0,s.value-2)),u=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},d=e=>{e.stopPropagation(),a&&a(n.id)};return(n,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Le,[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`status-indicator`,e.data.status])},null,2),(0,i.createCommentVNode)(` 删除按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`delete-btn`,onClick:d,title:`删除节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:close`,size:12})]),(0,i.createElementVNode)(`div`,Re,[(0,i.createElementVNode)(`div`,ze,[r[0]||=(0,i.createElementVNode)(`div`,{class:`node-icon`},`🔀`,-1),(0,i.createElementVNode)(`span`,Be,(0,i.toDisplayString)(e.data.title),1),s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ve,(0,i.toDisplayString)(s.value),1)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,He,[s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ue,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`condition-tag`},[r[1]||=(0,i.createElementVNode)(`span`,{class:`condition-icon`},`→`,-1),(0,i.createElementVNode)(`span`,null,(0,i.toDisplayString)(e.name||`条件`+(c.value.indexOf(e)+1)),1)]))),128)),l.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,We,`+`+(0,i.toDisplayString)(l.value),1)):(0,i.createCommentVNode)(`v-if`,!0)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ge,`请设置分支条件`))])]),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:u,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:plus`,size:16})])]))}});var qe=n.t(Ke,[[`__scopeId`,`data-v-5ede8782`]]);const Je={start:(0,i.markRaw)(se),approval:(0,i.markRaw)(Te),copy:(0,i.markRaw)(Ie),condition:(0,i.markRaw)(qe)};function Ye(t,n,a){let o=e.t(),s=(0,i.ref)(r.t(t.modelValue?.nodes??[h])),c=(0,i.ref)(r.t(t.modelValue?.edges??[])),l=K(s.value),u=K(c.value),f=(0,i.ref)(t.modelValue?r.t(t.modelValue.config):{version:`1.0`,createdAt:new Date().toISOString()}),p=(0,i.ref)(!1),m=(0,i.ref)({x:0,y:0}),g=(0,i.ref)(!1),_=(0,i.ref)(null),y=(0,i.ref)(null),x=new Set,S=!1,C=(e,t)=>{let n=setTimeout(()=>{x.delete(n),S||e()},t);x.add(n)},w=(0,i.computed)(()=>Je),T=(0,i.computed)(()=>{let e={totalNodes:s.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0};return s.value.forEach(t=>{t.type===`approval`?e.approvalNodes++:t.type===`copy`?e.copyNodes++:t.type===`condition`&&e.conditionNodes++}),e}),E=()=>(X(s.value,l),X(c.value,u),{nodes:s.value.map(e=>J(e,l.get(e.id))),edges:c.value.map(e=>Y(e,u.get(e.id))),...f.value!==void 0&&{config:r.t(f.value)}}),D=()=>{let e=E();n(`update:modelValue`,e),n(`change`,e)},O=!1,k=0,A=()=>{if(S||t.readonly||O)return;O=!0;let e=k;(0,i.nextTick)(()=>{O=!1,!(S||t.readonly||e!==k)&&D()})},j=e=>{e.some(e=>e.type===`remove`)&&A()},M=(e,t)=>{let n={id:b(e,t),source:e,target:t,animated:!0,type:`default`};return u.set(n.id,new Set(Object.keys(n))),n},N=(e,t)=>s.value.some(t=>t.id===e.source)&&s.value.some(t=>t.id===e.target)&&!c.value.some(n=>n.id!==t&&n.source===e.source&&n.target===e.target),P=e=>{t.readonly||!N(e)||(c.value=[...c.value,M(e.source,e.target)],A())},F=({edge:e,connection:n})=>{t.readonly||!c.value.some(t=>t.id===e.id)||!N(n,e.id)||(c.value=c.value.map(t=>t.id===e.id?{...t,source:n.source,target:n.target}:t),A())},I=(e=60,t=400)=>{(0,i.nextTick)(()=>{S||C(()=>{a.value?.fitView?.({padding:e,duration:t})},100)})},L=(e,n)=>{t.readonly||(m.value={x:typeof e.x==`number`?e.x:0,y:typeof e.y==`number`?e.y:0},y.value=n||null,p.value=!0)},R=()=>{p.value=!1},z=e=>{if(t.readonly)return;let n=s.value.findIndex(t=>t.id===e);if(n===-1)return;if(s.value[n].type===`start`){o.warning(`不能删除开始节点`);return}let r=c.value.filter(t=>t.target===e),i=c.value.filter(t=>t.source===e);s.value.splice(n,1),c.value=c.value.filter(t=>t.source!==e&&t.target!==e),r.forEach(e=>{i.forEach(t=>{c.value.push(M(e.source,t.target))})}),s.value.forEach((e,t)=>{t>=n&&(e.position.y-=180)}),D(),o.success(`节点已删除`),I()};(0,i.provide)(`showAddMenu`,L),(0,i.provide)(`deleteNode`,z);let B=()=>{let e=s.value.length-1,t=s.value[e];if(y.value){let n=s.value.findIndex(e=>e.id===y.value);n!==-1&&(e=n,t=s.value[e])}return{targetNodeIndex:e,targetNode:t}},V=(e,t)=>{let n={id:v(e),position:{x:t?.position.x??150,y:(t?.position.y??130)+180}},r={title:d[e],status:`pending`};switch(e){case`start`:return{...n,type:e,data:{...r,status:`active`}};case`approval`:return{...n,type:e,data:{...r,approvers:[],approvalMode:`any`}};case`copy`:return{...n,type:e,data:{...r,copyUsers:[]}};case`condition`:return{...n,type:e,data:{...r,conditions:[]}}}},H=(e,t)=>{let n=c.value.filter(t=>t.source===e.id);c.value=c.value.filter(t=>t.source!==e.id),c.value.push(M(e.id,t.id)),n.forEach(e=>{c.value.push(M(t.id,e.target))})};return(0,i.watch)(()=>t.modelValue,e=>{if(!e)return;let t=E(),n=e.nodes??[],i=e.edges??[];r.a(n,t.nodes)&&r.a(i,t.edges)&&r.a(e.config,f.value)||(k+=1,l=K(n),u=K(i),s.value=r.t(n),c.value=r.t(i),f.value=r.t(e.config))},{deep:!0}),(0,i.onMounted)(()=>{S=!1,(0,i.nextTick)(()=>{S||C(()=>{a.value?.fitView?.({padding:80,includeHiddenNodes:!1,minZoom:.8,maxZoom:1.2,duration:600})},300)})}),(0,i.onBeforeUnmount)(()=>{S=!0,x.forEach(e=>clearTimeout(e)),x.clear()}),{nodes:s,edges:c,showAddMenu:p,menuPosition:m,showNodeConfig:g,currentNode:_,nodeTypes:w,workflowStats:T,commitCanvasChange:A,handleCanvasChanges:j,connectNodes:P,updateConnection:F,addNode:e=>{if(!t.readonly)try{let{targetNodeIndex:t,targetNode:n}=B(),r=V(e,n);l.set(r.id,new Set(Object.keys(r))),s.value.splice(t+1,0,r);for(let e=t+2;e<s.value.length;e++)s.value[e].position.y+=180;n&&H(n,r),p.value=!1,y.value=null,D(),I()}catch(e){o.error(`添加节点失败,请重试`,e)}},onNodeClick:e=>{let r=s.value.find(t=>t.id===e.node.id);r&&(t.readonly||(_.value=r,g.value=!0),n(`node-click`,J(r,l.get(r.id))))},closeAddMenu:R,handleConfigSave:e=>{if(t.readonly||!_.value)return;let n=s.value.findIndex(e=>e.id===_.value.id);if(n!==-1){let t=J(s.value[n],l.get(_.value.id));Object.assign(t.data,r.t(e)),s.value.splice(n,1,t),_.value=t}D(),g.value=!1,o.success(`节点配置已保存`)},resetNodes:()=>{t.readonly||(s.value=r.t([h]),c.value=[],l=K(s.value),u.clear(),D(),I(80,600),o.success(`画布已清空`))},getCurrentWorkflowData:E,fitView:()=>{let e=a.value;if(!e?.fitView){o.warning(`画布未准备就绪,请稍后重试`);return}(0,i.nextTick)(()=>{S||a.value!==e||e.fitView({padding:50,includeHiddenNodes:!1,minZoom:.5,maxZoom:1.5,duration:800})}),o.success(`已适应窗口大小`)},deleteNode:z}}function $(e,t,n){return{nodeId:e?.id??``,nodeName:e?.data.title??`流程结构`,field:t,message:n,type:`invalid`,severity:`high`}}function Xe(e){let t=new Set,n=new Set;for(let r of e.keys()){if(t.has(r))continue;let i=[{id:r,offset:0}];for(t.add(r),n.add(r);i.length;){let r=i[i.length-1],a=e.get(r.id);if(r.offset>=a.length){n.delete(r.id),i.pop();continue}let o=a[r.offset++];if(n.has(o))return o;t.has(o)||(t.add(o),n.add(o),i.push({id:o,offset:0}))}}}function Ze(e,t){let n=new Map;return e.forEach(e=>{e.id?.trim()?n.has(e.id)?t.push($(e,`nodeId`,`节点 id「${e.id}」重复,请使用唯一标识`)):n.set(e.id,e):t.push($(e,`nodeId`,`节点 id 不能为空`))}),n}function Qe(e,t,n){let r=new Map([...e.keys()].map(e=>[e,[]])),i=new Set;return t.forEach(t=>{let a=e.get(t.source),o=e.get(t.target);if((!t.id?.trim()||i.has(t.id))&&n.push($(a??o,`edgeId`,`连线 id 不能为空或重复`)),i.add(t.id),!a||!o){let e=[!a&&t.source,!o&&t.target].filter(e=>e!==!1).map(e=>e||`空标识`);n.push($(a??o,`connection`,`连线「${t.id}」指向不存在的节点:${e.join(`、`)}`));return}r.get(a.id).push(o.id)}),r}function $e(e,t,n,r){let i=new Set([e.id]),a=[e.id];for(let e=0;e<a.length;e++)n.get(a[e])?.forEach(e=>{i.has(e)||(i.add(e),a.push(e))});t.forEach(e=>{i.has(e.id)||r.push($(e,`connection`,`此节点无法从开始节点到达,请检查连线方向与流程连接`))})}function et(e,t,n={}){let r=[],i=Ze(e,r),a=e.filter(e=>e.type===`start`);a.length!==1&&r.push($(a[0],`start`,`流程必须包含且仅包含一个开始节点,当前为 ${a.length} 个`));let o=Qe(i,t,r);if(a.length===1&&i.has(a[0].id)&&$e(a[0],i,o,r),n.allowCycles===!1){let e=Xe(o);e!==void 0&&r.push($(i.get(e),`cycle`,`当前审批流程不允许循环,请移除回指连线或由业务启用循环策略`))}return r}function tt(t,n,r,a){let o=e.t(),s=(0,i.ref)([]),c=(0,i.ref)(!1),l,u=()=>{let e=typeof a?.allowCycles==`function`?a.allowCycles():a?.allowCycles,r=et(t.value,n.value,{allowCycles:e});return t.value.forEach(e=>{if(e.type===`approval`&&(`approvers`in e.data&&Array.isArray(e.data.approvers)?e.data.approvers:[]).length===0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`approvers`,message:`审批节点必须设置至少一个审批人,否则流程无法正常运行`,type:`required`}),e.type===`condition`){let t=`conditions`in e.data&&Array.isArray(e.data.conditions)?e.data.conditions:[];if(t.length===0)r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`条件分支节点必须配置至少一个分支条件,否则无法进行条件判断`,type:`required`});else{let n=t.filter(e=>!C(e));n.length>0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`有 ${n.length} 个条件分支配置不完整,请完善所有必填字段`,type:`incomplete`})}}}),r};return(0,i.onBeforeUnmount)(()=>{l&&clearTimeout(l)}),{validationErrors:s,showValidationErrors:c,validateWorkflow:u,validateCurrentWorkflow:()=>{let e=u();s.value=e,e.length===0?(o.success(`流程结构和节点配置验证通过;执行规则由业务后端校验`),c.value=!1):(o.error(`发现 ${e.length} 个问题,请查看详细错误`),c.value=!0,a?.onValidateError?.(e))},jumpToErrorNode:e=>{let n=t.value.find(t=>t.id===e);!n||!r.value||(r.value.setCenter(n.position.x,n.position.y,{zoom:1.2,duration:800}),l&&clearTimeout(l),l=setTimeout(()=>{l=void 0,t.value.includes(n)&&(a?.onShowNodeConfig?.(n),c.value=!1)},900),o.info(`已定位到节点:${n.data.title}`))},getFieldDisplayName:e=>p[e]||e,getErrorTypeText:e=>m[e]||e,resetValidation:()=>{l&&clearTimeout(l),l=void 0,s.value=[],c.value=!1}}}const nt={start:{label:`发起人`,icon:`mdi:play-circle`,colorClass:`start`},approval:{label:`审批节点`,icon:`mdi:account-check`,colorClass:`approval`},copy:{label:`抄送节点`,icon:`mdi:email-outline`,colorClass:`copy`},condition:{label:`条件分支`,icon:`mdi:source-branch`,colorClass:`condition`}},rt={any:`或签(任一审批人通过即可)`,all:`会签(所有审批人必须通过)`,sequence:`顺序审批(按顺序依次审批)`},it={equals:`等于`,not_equals:`不等于`,greater_than:`大于`,less_than:`小于`,contains:`包含`};function at(e,t){let n=(0,i.ref)(!1),r=(0,i.ref)([]),a=(0,i.ref)({totalNodes:0,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:0}),o=e=>{let t=e.initiators||[];return t.length>0?[{type:`users`,label:`发起人`,users:t}]:[{type:`text`,label:`发起人`,value:`所有人`}]},s=e=>{let t=e.approvalMode||`any`,n=e.approvers||[],r=[{type:`mode`,label:`审批方式`,value:rt[t]||t,modeKey:t}];return n.length>0?r.push({type:`users`,label:`审批人`,users:n}):r.push({type:`warning`,label:`审批人`,value:`未设置`}),r},c=e=>{let t=e.copyUsers||[];return t.length>0?[{type:`users`,label:`抄送人`,users:t}]:[{type:`text`,label:`抄送人`,value:`未设置`}]},l=e=>{let t=e.conditions||[];return t.length===0?[{type:`warning`,label:`条件分支`,value:`未配置`}]:t.map((e,t)=>{let n=it[e.operator]||e.operator;return{type:`text`,label:`分支 ${t+1}`,value:`${e.name||`未命名`} — ${e.field||`?`} ${n} ${e.value||`?`}`}})},u=e=>{switch(e.type){case`start`:return o(e.data);case`approval`:return s(e.data);case`copy`:return c(e.data);case`condition`:return l(e.data)}},d=()=>{let n=new Map;e.value.forEach(e=>n.set(e.id,e));let r=new Map,i=new Map;e.value.forEach(e=>{r.set(e.id,[]),i.set(e.id,0)}),t.value.forEach(e=>{r.get(e.source)?.push(e.target),i.set(e.target,(i.get(e.target)||0)+1)});let a=[];i.forEach((e,t)=>{e===0&&a.push(t)});let o=[],s=new Set;for(;a.length>0;){let e=a.shift();if(s.has(e))continue;s.add(e);let t=n.get(e);t&&o.push(t);let c=r.get(e)||[];for(let e of c){let t=(i.get(e)||1)-1;i.set(e,t),t<=0&&!s.has(e)&&a.push(e)}}return e.value.forEach(e=>{s.has(e.id)||o.push(e)}),o},f=()=>d().map((e,t)=>{let n=nt[e.type||`start`]||nt.start;return{order:t+1,node:e,nodeTypeLabel:n.label,icon:n.icon,colorClass:n.colorClass,details:u(e)}}),p=()=>{let n={totalNodes:e.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:t.value.length};return e.value.forEach(e=>{e.type===`approval`?n.approvalNodes++:e.type===`copy`?n.copyNodes++:e.type===`condition`&&n.conditionNodes++}),n};return{showPreview:n,previewSteps:r,previewStats:a,openPreview:()=>{r.value=f(),a.value=p(),n.value=!0},closePreview:()=>{n.value=!1}}}const ot={class:`approval-workflow-container`},st={class:`floating-toolbar`},ct={class:`add-menu-content`},lt=[`onClick`],ut={class:`menu-text`},dt={key:0,class:`validation-success`},ft={class:`success-icon`},pt={key:1,class:`validation-errors`},mt={class:`error-summary`},ht={class:`error-icon`},gt={class:`error-list`},_t={class:`error-header`},vt={class:`error-number`},yt={class:`error-info`},bt={class:`error-node`},xt={class:`error-field`},St={class:`error-message`},Ct={class:`error-actions`},wt={class:`validation-footer`},Tt={class:`preview-stats`},Et={class:`stat-item`},Dt={class:`stat-value`},Ot={class:`stat-item approval`},kt={class:`stat-value`},At={class:`stat-item copy`},jt={class:`stat-value`},Mt={class:`stat-item condition`},Nt={class:`stat-value`},Pt={class:`stat-item edge`},Ft={class:`stat-value`},It={class:`preview-timeline`},Lt={class:`step-connector`},Rt={class:`step-dot`},zt={key:0,class:`step-line`},Bt={class:`step-content`},Vt={class:`step-header`},Ht={class:`step-order`},Ut={class:`step-type-badge`},Wt={class:`step-title`},Gt={key:0,class:`step-details`},Kt={class:`detail-label`},qt={class:`warning-text`},Jt={key:0,class:`preview-empty`},Yt={class:`preview-footer`},Xt=(0,i.defineComponent)({name:`C_WorkFlow`,__name:`index`,props:{users:{default:()=>[]},roles:{default:()=>[]},departments:{default:()=>[]},modelValue:{},readonly:{type:Boolean,default:!1},allowCycles:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`update:modelValue`,`change`,`node-click`,`edge-click`,`save`,`validate-error`],setup(n,{expose:r,emit:c}){let l=n,u=c,d=e.t(),f=(0,i.ref)(),{nodes:p,edges:m,showAddMenu:h,menuPosition:g,showNodeConfig:_,currentNode:v,nodeTypes:y,workflowStats:b,commitCanvasChange:x,handleCanvasChanges:S,connectNodes:C,updateConnection:w,addNode:T,onNodeClick:E,closeAddMenu:D,handleConfigSave:O,resetNodes:k,getCurrentWorkflowData:A,fitView:j,deleteNode:M}=Ye(l,u,f),{validationErrors:N,showValidationErrors:P,validateWorkflow:F,validateCurrentWorkflow:I,jumpToErrorNode:L,getFieldDisplayName:R,getErrorTypeText:z,resetValidation:B}=tt(p,m,f,{allowCycles:()=>l.allowCycles,onShowNodeConfig:e=>{l.readonly||(v.value=e,_.value=!0)},onValidateError:e=>u(`validate-error`,e)}),{showPreview:V,previewSteps:H,previewStats:U,openPreview:W,closePreview:G}=at(p,m),K=()=>{if(l.readonly)return;let e=F();if(N.value=e,e.length>0){d.error(`工作流验证失败: ${e[0].message}`),P.value=!0,u(`validate-error`,e);return}u(`save`,A()),d.success(`工作流保存成功`)},q=()=>{W()},J=()=>{G(),K()},Y=()=>{l.readonly||(k(),B())};return r({validateWorkflow:F,getCurrentWorkflowData:A,saveWorkflow:K,previewWorkflow:q,deleteNode:M,stats:b}),(e,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ot,[(0,i.createCommentVNode)(` 浮动工具栏 `),(0,i.createElementVNode)(`div`,st,[(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,type:`primary`,disabled:n.readonly,onClick:K},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:content-save`,size:16})]),default:(0,i.withCtx)(()=>[r[7]||=(0,i.createTextVNode)(` 保存 `,-1)]),_:1},8,[`disabled`]),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,onClick:q},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:eye`,size:16})]),default:(0,i.withCtx)(()=>[r[8]||=(0,i.createTextVNode)(` 预览 `,-1)]),_:1}),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,onClick:(0,i.unref)(I),title:`检查工作流配置是否正确`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:check-circle`,size:16})]),default:(0,i.withCtx)(()=>[r[9]||=(0,i.createTextVNode)(` 验证流程 `,-1)]),_:1},8,[`onClick`]),r[10]||=(0,i.createElementVNode)(`div`,{class:`toolbar-divider`},null,-1),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,onClick:(0,i.unref)(j),title:`适应窗口`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:fit-to-screen`,size:16})]),_:1},8,[`onClick`]),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,type:`error`,disabled:n.readonly,onClick:Y,title:`清空画布`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:delete-sweep`,size:16})]),_:1},8,[`disabled`])]),(0,i.createCommentVNode)(` Vue Flow 画布 `),(0,i.createVNode)((0,i.unref)(o.VueFlow),{ref_key:`vueFlowRef`,ref:f,nodes:(0,i.unref)(p),"onUpdate:nodes":r[0]||=e=>(0,i.isRef)(p)?p.value=e:null,edges:(0,i.unref)(m),"onUpdate:edges":r[1]||=e=>(0,i.isRef)(m)?m.value=e:null,"node-types":(0,i.unref)(y),class:`workflow-canvas`,"default-viewport":{zoom:1,x:0,y:0},"min-zoom":.5,"max-zoom":2,"fit-view-on-init":!0,"nodes-draggable":!n.readonly,"nodes-connectable":!n.readonly,"edges-updatable":!n.readonly,"delete-key-code":n.readonly?null:void 0,"elements-selectable":!0,onNodeClick:(0,i.unref)(E),onNodeDragStop:(0,i.unref)(x),onNodesChange:(0,i.unref)(S),onEdgesChange:(0,i.unref)(S),onConnect:(0,i.unref)(C),onEdgeUpdate:(0,i.unref)(w),onPaneClick:(0,i.unref)(D)},null,8,[`nodes`,`edges`,`node-types`,`nodes-draggable`,`nodes-connectable`,`edges-updatable`,`delete-key-code`,`onNodeClick`,`onNodeDragStop`,`onNodesChange`,`onEdgesChange`,`onConnect`,`onEdgeUpdate`,`onPaneClick`]),(0,i.createCommentVNode)(` 节点添加菜单 `),((0,i.openBlock)(),(0,i.createBlock)(i.Teleport,{to:`body`},[(0,i.withDirectives)((0,i.createElementVNode)(`div`,{class:`add-node-menu`,style:(0,i.normalizeStyle)({left:(0,i.unref)(g).x+`px`,top:(0,i.unref)(g).y+`px`})},[(0,i.createElementVNode)(`div`,ct,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(s),e=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{key:e.type,type:`button`,class:`add-menu-item`,onClick:t=>(0,i.unref)(T)(e.type)},[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`menu-icon`,e.iconClass])},[(0,i.createVNode)((0,i.unref)(t.t),{name:e.icon,size:16},null,8,[`name`])],2),(0,i.createElementVNode)(`span`,ut,(0,i.toDisplayString)(e.label),1)],8,lt))),128))])],4),[[i.vShow,(0,i.unref)(h)]])])),(0,i.createCommentVNode)(` 节点配置弹窗 - 拆分到独立组件 `),(0,i.createVNode)(ee,{show:(0,i.unref)(_),"onUpdate:show":r[2]||=e=>(0,i.isRef)(_)?_.value=e:null,"current-node":(0,i.unref)(v),users:n.users,departments:n.departments,onSave:(0,i.unref)(O),onCancel:r[3]||=e=>_.value=!1},null,8,[`show`,`current-node`,`users`,`departments`,`onSave`]),(0,i.createCommentVNode)(` 验证错误日志抽屉 `),(0,i.createVNode)((0,i.unref)(a.NDrawer),{show:(0,i.unref)(P),"onUpdate:show":r[5]||=e=>(0,i.isRef)(P)?P.value=e:null,width:450,placement:`right`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NDrawerContent),{title:`流程验证结果`,closable:``},{footer:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,wt,[(0,i.createVNode)((0,i.unref)(a.NButton),{onClick:r[4]||=e=>P.value=!1},{default:(0,i.withCtx)(()=>[...r[16]||=[(0,i.createTextVNode)(`关闭`,-1)]]),_:1}),(0,i.createVNode)((0,i.unref)(a.NButton),{type:`primary`,onClick:(0,i.unref)(I)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:refresh`,size:16})]),default:(0,i.withCtx)(()=>[r[17]||=(0,i.createTextVNode)(` 重新验证 `,-1)]),_:1},8,[`onClick`])])]),default:(0,i.withCtx)(()=>[(0,i.unref)(N).length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,dt,[(0,i.createElementVNode)(`div`,ft,[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:check-circle`,size:32,color:`#52c41a`})]),r[11]||=(0,i.createElementVNode)(`h3`,null,`验证通过`,-1),r[12]||=(0,i.createElementVNode)(`p`,null,`流程结构和节点配置验证通过;审批执行、权限与业务规则由后端校验。`,-1)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,pt,[(0,i.createElementVNode)(`div`,mt,[(0,i.createElementVNode)(`div`,ht,[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:alert-circle`,size:24,color:`#ff4d4f`})]),(0,i.createElementVNode)(`h3`,null,`发现 `+(0,i.toDisplayString)((0,i.unref)(N).length)+` 个问题`,1),r[13]||=(0,i.createElementVNode)(`p`,null,`请修复以下问题后重新验证:`,-1)]),(0,i.createElementVNode)(`div`,gt,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(N),(e,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:`${e.nodeId}-${e.field}-${n}`,class:`error-item`},[(0,i.createElementVNode)(`div`,_t,[(0,i.createElementVNode)(`span`,vt,(0,i.toDisplayString)(n+1),1),(0,i.createElementVNode)(`div`,yt,[(0,i.createElementVNode)(`strong`,bt,(0,i.toDisplayString)(e.nodeName),1),(0,i.createElementVNode)(`span`,xt,(0,i.toDisplayString)((0,i.unref)(R)(e.field)),1)]),(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`error-type`,e.type])},(0,i.toDisplayString)((0,i.unref)(z)(e.type)),3)]),(0,i.createElementVNode)(`div`,St,(0,i.toDisplayString)(e.message),1),(0,i.createElementVNode)(`div`,Ct,[(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,type:`primary`,disabled:!e.nodeId,onClick:t=>(0,i.unref)(L)(e.nodeId)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:target`,size:16})]),default:(0,i.withCtx)(()=>[r[14]||=(0,i.createTextVNode)(` 定位节点 `,-1)]),_:1},8,[`disabled`,`onClick`])])]))),128))]),r[15]||=(0,i.createElementVNode)(`div`,{class:`validation-tips`},[(0,i.createElementVNode)(`h4`,null,`💡 常见问题解决方案:`),(0,i.createElementVNode)(`ul`,null,[(0,i.createElementVNode)(`li`,null,[(0,i.createElementVNode)(`strong`,null,`审批人未设置:`),(0,i.createTextVNode)(`点击审批节点,在弹窗中选择审批人员 `)]),(0,i.createElementVNode)(`li`,null,[(0,i.createElementVNode)(`strong`,null,`条件分支未配置:`),(0,i.createTextVNode)(`点击条件节点,添加至少一个条件分支 `)]),(0,i.createElementVNode)(`li`,null,[(0,i.createElementVNode)(`strong`,null,`节点连接断开:`),(0,i.createTextVNode)(` 检查节点之间的连线是否正确 `)])])],-1)]))]),_:1})]),_:1},8,[`show`]),(0,i.createCommentVNode)(` 流程预览抽屉 `),(0,i.createVNode)((0,i.unref)(a.NDrawer),{show:(0,i.unref)(V),"onUpdate:show":r[6]||=e=>(0,i.isRef)(V)?V.value=e:null,width:520,placement:`right`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NDrawerContent),{title:`流程预览`,closable:``},{footer:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,Yt,[(0,i.createVNode)((0,i.unref)(a.NButton),{onClick:(0,i.unref)(G)},{default:(0,i.withCtx)(()=>[...r[24]||=[(0,i.createTextVNode)(`关闭`,-1)]]),_:1},8,[`onClick`]),(0,i.createVNode)((0,i.unref)(a.NButton),{type:`primary`,onClick:J},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:content-save`,size:16})]),default:(0,i.withCtx)(()=>[r[25]||=(0,i.createTextVNode)(` 确认并保存 `,-1)]),_:1})])]),default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,Tt,[(0,i.createElementVNode)(`div`,Et,[(0,i.createElementVNode)(`span`,Dt,(0,i.toDisplayString)((0,i.unref)(U).totalNodes),1),r[18]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`总节点`,-1)]),(0,i.createElementVNode)(`div`,Ot,[(0,i.createElementVNode)(`span`,kt,(0,i.toDisplayString)((0,i.unref)(U).approvalNodes),1),r[19]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`审批`,-1)]),(0,i.createElementVNode)(`div`,At,[(0,i.createElementVNode)(`span`,jt,(0,i.toDisplayString)((0,i.unref)(U).copyNodes),1),r[20]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`抄送`,-1)]),(0,i.createElementVNode)(`div`,Mt,[(0,i.createElementVNode)(`span`,Nt,(0,i.toDisplayString)((0,i.unref)(U).conditionNodes),1),r[21]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`条件`,-1)]),(0,i.createElementVNode)(`div`,Pt,[(0,i.createElementVNode)(`span`,Ft,(0,i.toDisplayString)((0,i.unref)(U).totalEdges),1),r[22]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`连线`,-1)])]),(0,i.createElementVNode)(`div`,It,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(H),(e,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.node.id,class:(0,i.normalizeClass)([`preview-step`,e.colorClass])},[(0,i.createCommentVNode)(` 时间线连接线 `),(0,i.createElementVNode)(`div`,Lt,[(0,i.createElementVNode)(`div`,Rt,[(0,i.createVNode)((0,i.unref)(t.t),{name:e.icon,size:16},null,8,[`name`])]),n<(0,i.unref)(H).length-1?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,zt)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createCommentVNode)(` 步骤内容 `),(0,i.createElementVNode)(`div`,Bt,[(0,i.createElementVNode)(`div`,Vt,[(0,i.createElementVNode)(`span`,Ht,`步骤 `+(0,i.toDisplayString)(e.order),1),(0,i.createElementVNode)(`span`,Ut,(0,i.toDisplayString)(e.nodeTypeLabel),1)]),(0,i.createElementVNode)(`div`,Wt,(0,i.toDisplayString)(e.node.data.title),1),e.details.length>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Gt,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.details,(e,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:n,class:(0,i.normalizeClass)([`step-detail-item`,{"is-warning":e.type===`warning`}])},[(0,i.createElementVNode)(`span`,Kt,(0,i.toDisplayString)(e.label)+`:`,1),(0,i.createCommentVNode)(` 审批方式 badge `),e.type===`mode`?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,{key:0,class:(0,i.normalizeClass)([`mode-badge`,e.modeKey])},(0,i.toDisplayString)(e.value),3)):e.type===`users`?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 人员 tags `),((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.users,e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NTag),{key:e.name,size:`small`,bordered:!1,round:``,class:`user-tag`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:account`,size:12})]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)(e.name),1)]),_:2},1024))),128))],64)):e.type===`warning`?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:2},[(0,i.createCommentVNode)(` 警告文案 `),(0,i.createElementVNode)(`span`,qt,` ⚠️ `+(0,i.toDisplayString)(e.value),1)],2112)):((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:3},[(0,i.createCommentVNode)(` 普通文本 `),(0,i.createElementVNode)(`span`,null,(0,i.toDisplayString)(e.value),1)],2112))],2))),128))])):(0,i.createCommentVNode)(`v-if`,!0)])],2))),128))]),(0,i.unref)(H).length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Jt,[(0,i.createVNode)((0,i.unref)(t.t),{name:`mdi:file-document-outline`,size:48,color:`#d1d5db`}),r[23]||=(0,i.createElementVNode)(`p`,null,`暂无流程节点`,-1)])):(0,i.createCommentVNode)(`v-if`,!0)]),_:1})]),_:1},8,[`show`])]))}});var Zt=n.t(Xt,[[`__scopeId`,`data-v-0ce70378`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Zt}});
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./data2.cjs`),t=require(`./feedback.cjs`),n=require(`./C_Icon2.cjs`),r=require(`./export-helper.cjs`);let i=require(`vue`),a=require(`naive-ui`),o=require(`@vue-flow/core`);const s=[{type:`approval`,label:`审批人`,icon:`mdi:account-check`,iconClass:`approval-icon`},{type:`copy`,label:`抄送人`,icon:`mdi:email-outline`,iconClass:`copy-icon`},{type:`condition`,label:`条件分支`,icon:`mdi:source-branch`,iconClass:`condition-icon`}],c=[{value:`any`,label:`或签`,desc:`任意一人同意即可通过`},{value:`all`,label:`会签`,desc:`所有人都同意才能通过`},{value:`sequence`,label:`顺序审批`,desc:`按选择顺序依次审批`}],l=[{label:`申请金额`,value:`amount`},{label:`申请人部门`,value:`department`},{label:`申请类型`,value:`type`},{label:`紧急程度`,value:`priority`}],u=[{label:`等于`,value:`equals`},{label:`大于`,value:`greater_than`},{label:`小于`,value:`less_than`},{label:`包含`,value:`contains`},{label:`不等于`,value:`not_equals`}],d={start:`发起人`,approval:`审批人`,copy:`抄送人`,condition:`条件分支`},f={approval:`审批人设置`,copy:`抄送人设置`,condition:`条件分支设置`},p={approvers:`审批人`,conditions:`条件配置`,connection:`节点连接`,nodeId:`节点标识`,edgeId:`连线标识`,start:`开始节点`,cycle:`循环策略`,copyUsers:`抄送人`},m={required:`必填`,invalid:`结构错误`,incomplete:`不完整`,warning:`警告`,error:`错误`},h={id:`start-1`,type:`start`,position:{x:150,y:100},data:{title:`发起人`,status:`active`,initiators:[]}},g=e=>{let t=Array.from(e.trim()).slice(0,2).join(``).toUpperCase()||`?`,n=`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 80 80"><rect width="80" height="80" rx="40" fill="hsl(${Array.from(e).reduce((e,t)=>(e*31+(t.codePointAt(0)??0))%360,210)} 55% 46%)"/><text x="40" y="48" text-anchor="middle" font-family="sans-serif" font-size="28" fill="white">${t.replace(/[&<>"']/g,e=>({"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`})[e])}</text></svg>`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(n)}`};let _=0;const v=e=>typeof crypto<`u`&&`randomUUID`in crypto?`${e}-${crypto.randomUUID()}`:`${e}-${Date.now()}-${++_}`,y=()=>v(`condition`),b=(e,t)=>`edge-${e}-${t}`,x=()=>({id:y(),name:``,field:``,operator:`equals`,value:``}),S=new Set([`equals`,`not_equals`,`greater_than`,`less_than`,`contains`]);function C(e){if(!e||typeof e!=`object`)return!1;let t=e;return[t.id,t.name,t.field,t.value].every(e=>typeof e==`string`&&e.trim().length>0)&&S.has(t.operator)}const w={key:0,class:`max-h-60vh overflow-y-auto`},T={class:`config-section`},E={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},D={class:`border rounded-lg p-3 mb-4 max-h-50 overflow-y-auto`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},O={key:0,class:`rounded-lg p-4 mb-4 border`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},k={class:`mb-2 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},A={class:`flex flex-wrap gap-3`},j={class:`flex items-center gap-2`},M={class:`font-medium text-sm`},N={class:`text-xs px-1.5 py-0.5 rounded`,style:{color:`var(--n-text-color-3)`,background:`var(--n-color-embedded)`}},P={key:0,class:`mt-4`},F={class:`flex flex-col gap-1`},I={class:`text-sm`},L={class:`text-xs`,style:{color:`var(--n-text-color-3)`}},R={class:`max-h-60vh overflow-y-auto`},z={class:`config-section`},B={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},V={class:`space-y-3`},H={class:`flex items-center gap-3 flex-nowrap min-h-10 p-2`},U=(0,i.defineComponent)({__name:`NodeConfigModal`,props:{show:{type:Boolean,default:!1},currentNode:{default:null},users:{default:()=>[]},departments:{default:()=>[]}},emits:[`update:show`,`save`,`cancel`],setup(r,{emit:o}){let s=r,d=o,p=t.t(),m=(0,i.ref)(``),h=(0,i.ref)([]),_=(0,i.ref)([]),v=(0,i.ref)(`any`),y=(0,i.ref)(!1),b=(0,i.ref)([]),S=(0,i.computed)({get:()=>s.show,set:e=>d(`update:show`,e)}),U=(0,i.computed)(()=>s.currentNode?.type===`start`?`发起人设置`:f[s.currentNode?.type]||`节点设置`),ee=(0,i.computed)(()=>{let e=[],t=new Map;return s.departments?.forEach(e=>{t.has(e.id)||t.set(e.id,{key:`dept-${e.id}`,label:`${e.name} ${e.manager?`(负责人: ${e.manager})`:``}`,children:[],isLeaf:!1,disabled:!0})}),(s.users?.filter(e=>!m.value||e.name.includes(m.value)||e.department.includes(m.value))||[]).forEach(e=>{let n=s.departments?.find(t=>t.name===e.department);n&&t.has(n.id)&&t.get(n.id).children.push({key:e.id,label:`${e.name}${e.role?`(${e.role})`:``}`,isLeaf:!0,user:e})}),t.forEach(t=>{t.children.length>0&&e.push(t)}),e}),W=(0,i.computed)(()=>s.users?.filter(e=>h.value.includes(e.id))||[]),G=(0,i.computed)(()=>s.users?.filter(e=>_.value.includes(e.id))||[]),K=(0,i.computed)(()=>s.users?.filter(e=>h.value.includes(e.id))||[]),q=e=>{h.value=e.filter(e=>!e.startsWith(`dept-`))},J=e=>{_.value=e.filter(e=>!e.startsWith(`dept-`))},Y=e=>{h.value=h.value.filter(t=>t!==e)},X=e=>{_.value=_.value.filter(t=>t!==e)},Z=e=>{h.value=h.value.filter(t=>t!==e)},te=()=>b.value.push(x()),ne=e=>b.value.splice(e,1),re=e=>{let{initiators:t}=e.data;h.value=t?t.map(e=>e.id):[]},ie=e=>{h.value=(e.data.approvers||[]).map(e=>e.id),v.value=e.data.approvalMode||`any`},ae=e=>{_.value=(e.data.copyUsers||[]).map(e=>e.id)},oe=t=>{b.value=e.t(t.data.conditions||[])},se=async()=>{if(h.value.length===0)return p.error(`请选择发起人`),!1;let e=K.value;return d(`save`,{initiators:e}),p.success(`已设置 ${e.length} 个发起人`),!0},ce=async()=>{if(h.value.length===0)return p.error(`请至少选择一个审批人`),!1;let e=W.value;return d(`save`,{approvers:e,approvalMode:v.value}),p.success(`已设置 ${e.length} 个审批人`),!0},le=async()=>{let e=G.value;return d(`save`,{copyUsers:e}),p.success(`已设置 ${e.length} 个抄送人`),!0},ue=async()=>b.value.length===0?(p.error(`请至少添加一个条件分支`),!1):b.value.some(e=>!C(e))?(p.error(`请完善所有条件配置`),!1):(d(`save`,{conditions:e.t(b.value)}),p.success(`已设置 ${b.value.length} 个条件分支`),!0),de=async()=>{if(!s.currentNode)return!1;y.value=!0;try{let e={start:se,approval:ce,copy:le,condition:ue}[s.currentNode.type];return e?await e():!1}catch(e){return p.error(`保存配置失败`,e),!1}finally{y.value=!1}},fe=()=>{d(`cancel`)};(0,i.watch)(()=>s.currentNode,e=>{if(e)switch(m.value=``,e.type){case`start`:re(e);break;case`approval`:ie(e);break;case`copy`:ae(e);break;case`condition`:oe(e);break}},{immediate:!0});let pe=(0,i.computed)(()=>[`start`,`approval`,`copy`].includes(s.currentNode?.type||``)),Q=(0,i.computed)(()=>{let e=s.currentNode?.type;return e===`start`?{icon:`mdi:account-star`,title:`选择发起人`,checkedKeys:h.value,onSelect:q,selectedUsers:K.value,selectedLabel:`已选择发起人`,tagType:`primary`,onRemove:Z}:e===`approval`?{icon:`mdi:account-check`,title:`选择审批人`,checkedKeys:h.value,onSelect:q,selectedUsers:W.value,selectedLabel:`已选择审批人`,tagType:`info`,onRemove:Y}:e===`copy`?{icon:`mdi:email-outline`,title:`选择抄送人`,checkedKeys:_.value,onSelect:J,selectedUsers:G.value,selectedLabel:`已选择抄送人`,tagType:`success`,onRemove:X}:{icon:``,title:``,checkedKeys:[],onSelect:()=>{},selectedUsers:[],selectedLabel:``,tagType:`default`,onRemove:()=>{}}});return(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NModal),{show:S.value,"onUpdate:show":t[2]||=e=>S.value=e,style:{width:`900px`},"mask-closable":!1,preset:`dialog`,title:U.value,"positive-text":`确定`,"negative-text":`取消`,loading:y.value,onPositiveClick:de,onNegativeClick:fe},{default:(0,i.withCtx)(()=>[(0,i.createCommentVNode)(` 公共选择面板 `),pe.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,w,[(0,i.createElementVNode)(`div`,T,[(0,i.createElementVNode)(`h4`,E,[Q.value.icon?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(n.t),{key:0,name:Q.value.icon,size:16},null,8,[`name`])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createTextVNode)(` `+(0,i.toDisplayString)(Q.value.title),1)]),(0,i.createVNode)((0,i.unref)(a.NInput),{value:m.value,"onUpdate:value":t[0]||=e=>m.value=e,placeholder:`搜索用户姓名或部门`,clearable:``,class:`mb-4`},{prefix:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:magnify`,size:16})]),_:1},8,[`value`]),(0,i.createElementVNode)(`div`,D,[(0,i.createVNode)((0,i.unref)(a.NTree),{data:ee.value,"checked-keys":Q.value.checkedKeys,selectable:!1,checkable:``,cascade:``,"virtual-scroll":!0,style:{"max-height":`300px`},"onUpdate:checkedKeys":Q.value.onSelect},null,8,[`data`,`checked-keys`,`onUpdate:checkedKeys`])]),Q.value.selectedUsers.length>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,O,[(0,i.createElementVNode)(`h5`,k,(0,i.toDisplayString)(Q.value.selectedLabel)+` (`+(0,i.toDisplayString)(Q.value.selectedUsers.length)+`) `,1),(0,i.createElementVNode)(`div`,A,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(Q.value.selectedUsers,e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NTag),{key:e.id,closable:``,type:Q.value.tagType,onClose:t=>Q.value.onRemove(e.id)},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,j,[(0,i.createVNode)((0,i.unref)(a.NAvatar),{src:e.avatar,"fallback-src":(0,i.unref)(g)(e.name),size:`small`},null,8,[`src`,`fallback-src`]),(0,i.createElementVNode)(`span`,M,(0,i.toDisplayString)(e.name),1),(0,i.createElementVNode)(`span`,N,(0,i.toDisplayString)(e.department),1)])]),_:2},1032,[`type`,`onClose`]))),128))])])):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createCommentVNode)(` 审批节点时附带审批模式 `),s.currentNode?.type===`approval`?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,P,[t[3]||=(0,i.createElementVNode)(`h5`,{class:`mb-3 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},` 审批模式 `,-1),(0,i.createVNode)((0,i.unref)(a.NRadioGroup),{value:v.value,"onUpdate:value":t[1]||=e=>v.value=e},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NSpace),{vertical:``},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(c),e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NRadio),{key:e.value,value:e.value},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,F,[(0,i.createElementVNode)(`strong`,I,(0,i.toDisplayString)(e.label),1),(0,i.createElementVNode)(`span`,L,(0,i.toDisplayString)(e.desc),1)])]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`value`])])):(0,i.createCommentVNode)(`v-if`,!0)])):s.currentNode?.type===`condition`?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 条件节点配置 `),(0,i.createElementVNode)(`div`,R,[(0,i.createElementVNode)(`div`,z,[(0,i.createElementVNode)(`h4`,B,[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:source-branch`,size:16}),t[4]||=(0,i.createTextVNode)(` 条件分支设置 `,-1)]),(0,i.createElementVNode)(`div`,V,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(b.value,(e,t)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`condition-item`},[(0,i.createVNode)((0,i.unref)(a.NCard),{size:`small`,class:`border border-gray-200 hover:border-gray-300 transition-colors`},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,H,[(0,i.createVNode)((0,i.unref)(a.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`分支名称`,style:{width:`150px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),(0,i.createVNode)((0,i.unref)(a.NSelect),{value:e.field,"onUpdate:value":t=>e.field=t,placeholder:`选择字段`,options:(0,i.unref)(l),style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),(0,i.createVNode)((0,i.unref)(a.NSelect),{value:e.operator,"onUpdate:value":t=>e.operator=t,placeholder:`操作符`,options:(0,i.unref)(u),style:{width:`100px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),(0,i.createVNode)((0,i.unref)(a.NInput),{value:e.value,"onUpdate:value":t=>e.value=t,placeholder:`值`,style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),(0,i.createVNode)((0,i.unref)(a.NButton),{quaternary:``,type:`error`,onClick:e=>ne(t),class:`flex-shrink-0 ml-auto`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:delete`,size:16})]),_:1},8,[`onClick`])])]),_:2},1024)]))),128)),(0,i.createVNode)((0,i.unref)(a.NButton),{dashed:``,block:``,onClick:te,class:`w-full`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:plus`,size:16})]),default:(0,i.withCtx)(()=>[t[5]||=(0,i.createTextVNode)(` 添加条件 `,-1)]),_:1})])])])],2112)):(0,i.createCommentVNode)(`v-if`,!0)]),_:1},8,[`show`,`title`,`loading`]))}});var ee=r.t(U,[[`__scopeId`,`data-v-e1ac2c54`]]);const W=[`id`,`type`,`position`,`data`,`selected`,`dragging`,`connectable`,`selectable`,`deletable`,`dragHandle`,`width`,`height`,`parentNode`,`zIndex`,`extent`,`expandParent`],G=[`id`,`source`,`target`,`sourceHandle`,`targetHandle`,`type`,`animated`,`hidden`,`deletable`,`selectable`,`data`,`style`,`label`,`labelStyle`,`labelShowBg`,`labelBgStyle`,`labelBgPadding`,`labelBgBorderRadius`,`markerStart`,`markerEnd`];function K(e){return new Map(e.map(e=>[e.id,new Set(Object.keys(e))]))}function q(e,t,n){return Object.fromEntries(t.filter(e=>n?.has(String(e))).map(t=>[t,e[t]]))}function J(t,n){return e.t({...q(t,W,n),id:t.id,type:t.type,position:{x:t.position.x,y:t.position.y},data:t.data})}function Y(t,n){return e.t({...q(t,G,n),id:t.id,source:t.source,target:t.target})}function X(e,t){let n=new Set(e.map(e=>e.id));for(let e of t.keys())n.has(e)||t.delete(e)}const Z={class:`start-node`},te={class:`node-content`},ne={class:`node-info`},re={class:`node-text`},ie={key:0,class:`initiator-name`},ae={key:1,class:`placeholder-text`},oe=(0,i.defineComponent)({__name:`StartNode`,props:{id:{},data:{}},setup(e){let t=e,r=(0,i.inject)(`showAddMenu`),a=(0,i.computed)(()=>{let{initiators:e}=t.data;return!e||!Array.isArray(e)||e.length===0?``:e.map(e=>e?.name||`未知用户`).join(`、`)}),o=e=>{e.stopPropagation();let n=e.currentTarget.getBoundingClientRect();r&&r({x:n.left+n.width/2,y:n.bottom+10},t.id)};return(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Z,[(0,i.createCommentVNode)(` 主要内容区域 `),(0,i.createElementVNode)(`div`,te,[r[0]||=(0,i.createElementVNode)(`div`,{class:`node-icon`},`🚀`,-1),(0,i.createElementVNode)(`div`,ne,[(0,i.createElementVNode)(`div`,re,(0,i.toDisplayString)(e.data.title),1),a.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ie,(0,i.toDisplayString)(a.value),1)):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ae,`点击设置发起人`))])]),(0,i.createCommentVNode)(` 添加节点按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:o,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:plus`,size:16})])]))}});var se=r.t(oe,[[`__scopeId`,`data-v-6fb2df95`]]);const ce={class:`approval-node`},le={class:`node-card`},ue={class:`node-header`},de={class:`node-icon`},fe={class:`node-title`},pe={key:0,class:`node-badge`},Q={key:1,class:`approval-mode-badge`},me={class:`node-content`},he={key:0,class:`approvers-list`},ge={class:`approver-info`},_e={class:`approver-avatar`},ve={class:`approver-details`},ye={class:`approver-name`},be={class:`approver-dept`},xe={class:`approver-role`},Se={key:0,class:`more-count`},Ce={key:1,class:`placeholder`},we=(0,i.defineComponent)({__name:`ApprovalNode`,props:{id:{},data:{}},setup(e){let t=e,r=(0,i.inject)(`showAddMenu`),o=(0,i.inject)(`deleteNode`),s=(0,i.computed)(()=>t.data.approvers??[]),c=(0,i.computed)(()=>s.value.length),l=(0,i.computed)(()=>s.value.slice(0,3)),u=(0,i.computed)(()=>Math.max(0,c.value-3)),d=e=>({any:`或签`,all:`会签`,sequence:`顺序`})[e]||``,f=e=>{e.stopPropagation();let n=e.currentTarget.getBoundingClientRect();r&&r({x:n.left+n.width/2,y:n.bottom+10},t.id)},p=e=>{e.stopPropagation(),o&&o(t.id)};return(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ce,[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`status-indicator`,e.data.status])},null,2),(0,i.createCommentVNode)(` 删除按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`delete-btn`,onClick:p,title:`删除节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:close`,size:12})]),(0,i.createElementVNode)(`div`,le,[(0,i.createElementVNode)(`div`,ue,[(0,i.createElementVNode)(`div`,de,[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:account`,size:12,color:`white`})]),(0,i.createElementVNode)(`span`,fe,(0,i.toDisplayString)(e.data.title),1),c.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,pe,(0,i.toDisplayString)(c.value),1)):(0,i.createCommentVNode)(`v-if`,!0),e.data.approvalMode?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Q,(0,i.toDisplayString)(d(e.data.approvalMode)),1)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,me,[c.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,he,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(l.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`approver-tag`},[(0,i.createElementVNode)(`div`,ge,[(0,i.createElementVNode)(`div`,_e,[(0,i.createVNode)((0,i.unref)(a.NAvatar),{src:e.avatar,"fallback-src":(0,i.unref)(g)(e.name),size:`small`},null,8,[`src`,`fallback-src`])]),(0,i.createElementVNode)(`div`,ve,[(0,i.createElementVNode)(`span`,ye,(0,i.toDisplayString)(e.name),1),(0,i.createElementVNode)(`span`,be,(0,i.toDisplayString)(e.department),1),(0,i.createElementVNode)(`span`,xe,(0,i.toDisplayString)(e.role),1)])])]))),128)),u.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Se,`+`+(0,i.toDisplayString)(u.value),1)):(0,i.createCommentVNode)(`v-if`,!0)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ce,[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:account-plus`,size:24,color:`#9ca3af`}),r[0]||=(0,i.createElementVNode)(`span`,null,`请设置审批人`,-1)]))])]),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:f,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:plus`,size:16})])]))}});var Te=r.t(we,[[`__scopeId`,`data-v-e6968a42`]]);const Ee={class:`copy-node`},De={class:`node-card`},Oe={class:`node-header`},ke={class:`node-title`},Ae={key:0,class:`node-badge`},je={class:`node-content`},Me={key:0,class:`copy-users-list`},Ne={key:0,class:`more-count`},Pe={key:1,class:`placeholder`},Fe=(0,i.defineComponent)({__name:`CopyNode`,props:{id:{},data:{}},setup(e){let t=e,r=(0,i.inject)(`showAddMenu`),a=(0,i.inject)(`deleteNode`),o=(0,i.computed)(()=>t.data.copyUsers??[]),s=(0,i.computed)(()=>o.value.length),c=(0,i.computed)(()=>o.value.slice(0,3)),l=(0,i.computed)(()=>Math.max(0,s.value-3)),u=e=>{e.stopPropagation();let n=e.currentTarget.getBoundingClientRect();r&&r({x:n.left+n.width/2,y:n.bottom+10},t.id)},d=e=>{e.stopPropagation(),a&&a(t.id)};return(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ee,[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`status-indicator`,e.data.status])},null,2),(0,i.createCommentVNode)(` 删除按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`delete-btn`,onClick:d,title:`删除节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:close`,size:12})]),(0,i.createElementVNode)(`div`,De,[(0,i.createElementVNode)(`div`,Oe,[r[0]||=(0,i.createElementVNode)(`div`,{class:`node-icon`},`📋`,-1),(0,i.createElementVNode)(`span`,ke,(0,i.toDisplayString)(e.data.title),1),s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ae,(0,i.toDisplayString)(s.value),1)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,je,[s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Me,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`copy-user-tag`},(0,i.toDisplayString)(e.name),1))),128)),l.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ne,`+`+(0,i.toDisplayString)(l.value),1)):(0,i.createCommentVNode)(`v-if`,!0)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Pe,`请设置抄送人`))])]),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:u,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:plus`,size:16})])]))}});var Ie=r.t(Fe,[[`__scopeId`,`data-v-010e7ec8`]]);const Le={class:`condition-node`},Re={class:`node-card`},ze={class:`node-header`},Be={class:`node-title`},Ve={key:0,class:`node-badge`},He={class:`node-content`},Ue={key:0,class:`conditions-list`},We={key:0,class:`more-count`},Ge={key:1,class:`placeholder`},Ke=(0,i.defineComponent)({__name:`ConditionNode`,props:{id:{},data:{}},setup(e){let t=e,r=(0,i.inject)(`showAddMenu`),a=(0,i.inject)(`deleteNode`),o=(0,i.computed)(()=>t.data.conditions??[]),s=(0,i.computed)(()=>o.value.length),c=(0,i.computed)(()=>o.value.slice(0,2)),l=(0,i.computed)(()=>Math.max(0,s.value-2)),u=e=>{e.stopPropagation();let n=e.currentTarget.getBoundingClientRect();r&&r({x:n.left+n.width/2,y:n.bottom+10},t.id)},d=e=>{e.stopPropagation(),a&&a(t.id)};return(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Le,[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`status-indicator`,e.data.status])},null,2),(0,i.createCommentVNode)(` 删除按钮 `),(0,i.createElementVNode)(`button`,{type:`button`,class:`delete-btn`,onClick:d,title:`删除节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:close`,size:12})]),(0,i.createElementVNode)(`div`,Re,[(0,i.createElementVNode)(`div`,ze,[r[0]||=(0,i.createElementVNode)(`div`,{class:`node-icon`},`🔀`,-1),(0,i.createElementVNode)(`span`,Be,(0,i.toDisplayString)(e.data.title),1),s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ve,(0,i.toDisplayString)(s.value),1)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,He,[s.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ue,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`condition-tag`},[r[1]||=(0,i.createElementVNode)(`span`,{class:`condition-icon`},`→`,-1),(0,i.createElementVNode)(`span`,null,(0,i.toDisplayString)(e.name||`条件`+(c.value.indexOf(e)+1)),1)]))),128)),l.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,We,`+`+(0,i.toDisplayString)(l.value),1)):(0,i.createCommentVNode)(`v-if`,!0)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ge,`请设置分支条件`))])]),(0,i.createElementVNode)(`button`,{type:`button`,class:`add-node-btn`,onClick:u,title:`添加下一个节点`},[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:plus`,size:16})])]))}});var qe=r.t(Ke,[[`__scopeId`,`data-v-5ede8782`]]);const Je={start:(0,i.markRaw)(se),approval:(0,i.markRaw)(Te),copy:(0,i.markRaw)(Ie),condition:(0,i.markRaw)(qe)};function Ye(n,r,a){let o=t.t(),s=(0,i.ref)(e.t(n.modelValue?.nodes??[h])),c=(0,i.ref)(e.t(n.modelValue?.edges??[])),l=K(s.value),u=K(c.value),f=(0,i.ref)(n.modelValue?e.t(n.modelValue.config):{version:`1.0`,createdAt:new Date().toISOString()}),p=(0,i.ref)(!1),m=(0,i.ref)({x:0,y:0}),g=(0,i.ref)(!1),_=(0,i.ref)(null),y=(0,i.ref)(null),x=new Set,S=!1,C=(e,t)=>{let n=setTimeout(()=>{x.delete(n),S||e()},t);x.add(n)},w=(0,i.computed)(()=>Je),T=(0,i.computed)(()=>{let e={totalNodes:s.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0};return s.value.forEach(t=>{t.type===`approval`?e.approvalNodes++:t.type===`copy`?e.copyNodes++:t.type===`condition`&&e.conditionNodes++}),e}),E=()=>(X(s.value,l),X(c.value,u),{nodes:s.value.map(e=>J(e,l.get(e.id))),edges:c.value.map(e=>Y(e,u.get(e.id))),...f.value!==void 0&&{config:e.t(f.value)}}),D=()=>{let e=E();r(`update:modelValue`,e),r(`change`,e)},O=!1,k=0,A=()=>{if(S||n.readonly||O)return;O=!0;let e=k;(0,i.nextTick)(()=>{O=!1,!(S||n.readonly||e!==k)&&D()})},j=e=>{e.some(e=>e.type===`remove`)&&A()},M=(e,t)=>{let n={id:b(e,t),source:e,target:t,animated:!0,type:`default`};return u.set(n.id,new Set(Object.keys(n))),n},N=(e,t)=>s.value.some(t=>t.id===e.source)&&s.value.some(t=>t.id===e.target)&&!c.value.some(n=>n.id!==t&&n.source===e.source&&n.target===e.target),P=e=>{n.readonly||!N(e)||(c.value=[...c.value,M(e.source,e.target)],A())},F=({edge:e,connection:t})=>{n.readonly||!c.value.some(t=>t.id===e.id)||!N(t,e.id)||(c.value=c.value.map(n=>n.id===e.id?{...n,source:t.source,target:t.target}:n),A())},I=(e=60,t=400)=>{(0,i.nextTick)(()=>{S||C(()=>{a.value?.fitView?.({padding:e,duration:t})},100)})},L=(e,t)=>{n.readonly||(m.value={x:typeof e.x==`number`?e.x:0,y:typeof e.y==`number`?e.y:0},y.value=t||null,p.value=!0)},R=()=>{p.value=!1},z=e=>{if(n.readonly)return;let t=s.value.findIndex(t=>t.id===e);if(t===-1)return;if(s.value[t].type===`start`){o.warning(`不能删除开始节点`);return}let r=c.value.filter(t=>t.target===e),i=c.value.filter(t=>t.source===e);s.value.splice(t,1),c.value=c.value.filter(t=>t.source!==e&&t.target!==e),r.forEach(e=>{i.forEach(t=>{c.value.push(M(e.source,t.target))})}),s.value.forEach((e,n)=>{n>=t&&(e.position.y-=180)}),D(),o.success(`节点已删除`),I()};(0,i.provide)(`showAddMenu`,L),(0,i.provide)(`deleteNode`,z);let B=()=>{let e=s.value.length-1,t=s.value[e];if(y.value){let n=s.value.findIndex(e=>e.id===y.value);n!==-1&&(e=n,t=s.value[e])}return{targetNodeIndex:e,targetNode:t}},V=(e,t)=>{let n={id:v(e),position:{x:t?.position.x??150,y:(t?.position.y??130)+180}},r={title:d[e],status:`pending`};switch(e){case`start`:return{...n,type:e,data:{...r,status:`active`}};case`approval`:return{...n,type:e,data:{...r,approvers:[],approvalMode:`any`}};case`copy`:return{...n,type:e,data:{...r,copyUsers:[]}};case`condition`:return{...n,type:e,data:{...r,conditions:[]}}}},H=(e,t)=>{let n=c.value.filter(t=>t.source===e.id);c.value=c.value.filter(t=>t.source!==e.id),c.value.push(M(e.id,t.id)),n.forEach(e=>{c.value.push(M(t.id,e.target))})};return(0,i.watch)(()=>n.modelValue,t=>{if(!t)return;let n=E(),r=t.nodes??[],i=t.edges??[];e.a(r,n.nodes)&&e.a(i,n.edges)&&e.a(t.config,f.value)||(k+=1,l=K(r),u=K(i),s.value=e.t(r),c.value=e.t(i),f.value=e.t(t.config))},{deep:!0}),(0,i.onMounted)(()=>{S=!1,(0,i.nextTick)(()=>{S||C(()=>{a.value?.fitView?.({padding:80,includeHiddenNodes:!1,minZoom:.8,maxZoom:1.2,duration:600})},300)})}),(0,i.onBeforeUnmount)(()=>{S=!0,x.forEach(e=>clearTimeout(e)),x.clear()}),{nodes:s,edges:c,showAddMenu:p,menuPosition:m,showNodeConfig:g,currentNode:_,nodeTypes:w,workflowStats:T,commitCanvasChange:A,handleCanvasChanges:j,connectNodes:P,updateConnection:F,addNode:e=>{if(!n.readonly)try{let{targetNodeIndex:t,targetNode:n}=B(),r=V(e,n);l.set(r.id,new Set(Object.keys(r))),s.value.splice(t+1,0,r);for(let e=t+2;e<s.value.length;e++)s.value[e].position.y+=180;n&&H(n,r),p.value=!1,y.value=null,D(),I()}catch(e){o.error(`添加节点失败,请重试`,e)}},onNodeClick:e=>{let t=s.value.find(t=>t.id===e.node.id);t&&(n.readonly||(_.value=t,g.value=!0),r(`node-click`,J(t,l.get(t.id))))},closeAddMenu:R,handleConfigSave:t=>{if(n.readonly||!_.value)return;let r=s.value.findIndex(e=>e.id===_.value.id);if(r!==-1){let n=J(s.value[r],l.get(_.value.id));Object.assign(n.data,e.t(t)),s.value.splice(r,1,n),_.value=n}D(),g.value=!1,o.success(`节点配置已保存`)},resetNodes:()=>{n.readonly||(s.value=e.t([h]),c.value=[],l=K(s.value),u.clear(),D(),I(80,600),o.success(`画布已清空`))},getCurrentWorkflowData:E,fitView:()=>{let e=a.value;if(!e?.fitView){o.warning(`画布未准备就绪,请稍后重试`);return}(0,i.nextTick)(()=>{S||a.value!==e||e.fitView({padding:50,includeHiddenNodes:!1,minZoom:.5,maxZoom:1.5,duration:800})}),o.success(`已适应窗口大小`)},deleteNode:z}}function $(e,t,n){return{nodeId:e?.id??``,nodeName:e?.data.title??`流程结构`,field:t,message:n,type:`invalid`,severity:`high`}}function Xe(e){let t=new Set,n=new Set;for(let r of e.keys()){if(t.has(r))continue;let i=[{id:r,offset:0}];for(t.add(r),n.add(r);i.length;){let r=i[i.length-1],a=e.get(r.id);if(r.offset>=a.length){n.delete(r.id),i.pop();continue}let o=a[r.offset++];if(n.has(o))return o;t.has(o)||(t.add(o),n.add(o),i.push({id:o,offset:0}))}}}function Ze(e,t){let n=new Map;return e.forEach(e=>{e.id?.trim()?n.has(e.id)?t.push($(e,`nodeId`,`节点 id「${e.id}」重复,请使用唯一标识`)):n.set(e.id,e):t.push($(e,`nodeId`,`节点 id 不能为空`))}),n}function Qe(e,t,n){let r=new Map([...e.keys()].map(e=>[e,[]])),i=new Set;return t.forEach(t=>{let a=e.get(t.source),o=e.get(t.target);if((!t.id?.trim()||i.has(t.id))&&n.push($(a??o,`edgeId`,`连线 id 不能为空或重复`)),i.add(t.id),!a||!o){let e=[!a&&t.source,!o&&t.target].filter(e=>e!==!1).map(e=>e||`空标识`);n.push($(a??o,`connection`,`连线「${t.id}」指向不存在的节点:${e.join(`、`)}`));return}r.get(a.id).push(o.id)}),r}function $e(e,t,n,r){let i=new Set([e.id]),a=[e.id];for(let e=0;e<a.length;e++)n.get(a[e])?.forEach(e=>{i.has(e)||(i.add(e),a.push(e))});t.forEach(e=>{i.has(e.id)||r.push($(e,`connection`,`此节点无法从开始节点到达,请检查连线方向与流程连接`))})}function et(e,t,n={}){let r=[],i=Ze(e,r),a=e.filter(e=>e.type===`start`);a.length!==1&&r.push($(a[0],`start`,`流程必须包含且仅包含一个开始节点,当前为 ${a.length} 个`));let o=Qe(i,t,r);if(a.length===1&&i.has(a[0].id)&&$e(a[0],i,o,r),n.allowCycles===!1){let e=Xe(o);e!==void 0&&r.push($(i.get(e),`cycle`,`当前审批流程不允许循环,请移除回指连线或由业务启用循环策略`))}return r}function tt(e,n,r,a){let o=t.t(),s=(0,i.ref)([]),c=(0,i.ref)(!1),l,u=()=>{let t=typeof a?.allowCycles==`function`?a.allowCycles():a?.allowCycles,r=et(e.value,n.value,{allowCycles:t});return e.value.forEach(e=>{if(e.type===`approval`&&(`approvers`in e.data&&Array.isArray(e.data.approvers)?e.data.approvers:[]).length===0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`approvers`,message:`审批节点必须设置至少一个审批人,否则流程无法正常运行`,type:`required`}),e.type===`condition`){let t=`conditions`in e.data&&Array.isArray(e.data.conditions)?e.data.conditions:[];if(t.length===0)r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`条件分支节点必须配置至少一个分支条件,否则无法进行条件判断`,type:`required`});else{let n=t.filter(e=>!C(e));n.length>0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`有 ${n.length} 个条件分支配置不完整,请完善所有必填字段`,type:`incomplete`})}}}),r};return(0,i.onBeforeUnmount)(()=>{l&&clearTimeout(l)}),{validationErrors:s,showValidationErrors:c,validateWorkflow:u,validateCurrentWorkflow:()=>{let e=u();s.value=e,e.length===0?(o.success(`流程结构和节点配置验证通过;执行规则由业务后端校验`),c.value=!1):(o.error(`发现 ${e.length} 个问题,请查看详细错误`),c.value=!0,a?.onValidateError?.(e))},jumpToErrorNode:t=>{let n=e.value.find(e=>e.id===t);!n||!r.value||(r.value.setCenter(n.position.x,n.position.y,{zoom:1.2,duration:800}),l&&clearTimeout(l),l=setTimeout(()=>{l=void 0,e.value.includes(n)&&(a?.onShowNodeConfig?.(n),c.value=!1)},900),o.info(`已定位到节点:${n.data.title}`))},getFieldDisplayName:e=>p[e]||e,getErrorTypeText:e=>m[e]||e,resetValidation:()=>{l&&clearTimeout(l),l=void 0,s.value=[],c.value=!1}}}const nt={start:{label:`发起人`,icon:`mdi:play-circle`,colorClass:`start`},approval:{label:`审批节点`,icon:`mdi:account-check`,colorClass:`approval`},copy:{label:`抄送节点`,icon:`mdi:email-outline`,colorClass:`copy`},condition:{label:`条件分支`,icon:`mdi:source-branch`,colorClass:`condition`}},rt={any:`或签(任一审批人通过即可)`,all:`会签(所有审批人必须通过)`,sequence:`顺序审批(按顺序依次审批)`},it={equals:`等于`,not_equals:`不等于`,greater_than:`大于`,less_than:`小于`,contains:`包含`};function at(e,t){let n=(0,i.ref)(!1),r=(0,i.ref)([]),a=(0,i.ref)({totalNodes:0,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:0}),o=e=>{let t=e.initiators||[];return t.length>0?[{type:`users`,label:`发起人`,users:t}]:[{type:`text`,label:`发起人`,value:`所有人`}]},s=e=>{let t=e.approvalMode||`any`,n=e.approvers||[],r=[{type:`mode`,label:`审批方式`,value:rt[t]||t,modeKey:t}];return n.length>0?r.push({type:`users`,label:`审批人`,users:n}):r.push({type:`warning`,label:`审批人`,value:`未设置`}),r},c=e=>{let t=e.copyUsers||[];return t.length>0?[{type:`users`,label:`抄送人`,users:t}]:[{type:`text`,label:`抄送人`,value:`未设置`}]},l=e=>{let t=e.conditions||[];return t.length===0?[{type:`warning`,label:`条件分支`,value:`未配置`}]:t.map((e,t)=>{let n=it[e.operator]||e.operator;return{type:`text`,label:`分支 ${t+1}`,value:`${e.name||`未命名`} — ${e.field||`?`} ${n} ${e.value||`?`}`}})},u=e=>{switch(e.type){case`start`:return o(e.data);case`approval`:return s(e.data);case`copy`:return c(e.data);case`condition`:return l(e.data)}},d=()=>{let n=new Map;e.value.forEach(e=>n.set(e.id,e));let r=new Map,i=new Map;e.value.forEach(e=>{r.set(e.id,[]),i.set(e.id,0)}),t.value.forEach(e=>{r.get(e.source)?.push(e.target),i.set(e.target,(i.get(e.target)||0)+1)});let a=[];i.forEach((e,t)=>{e===0&&a.push(t)});let o=[],s=new Set;for(;a.length>0;){let e=a.shift();if(s.has(e))continue;s.add(e);let t=n.get(e);t&&o.push(t);let c=r.get(e)||[];for(let e of c){let t=(i.get(e)||1)-1;i.set(e,t),t<=0&&!s.has(e)&&a.push(e)}}return e.value.forEach(e=>{s.has(e.id)||o.push(e)}),o},f=()=>d().map((e,t)=>{let n=nt[e.type||`start`]||nt.start;return{order:t+1,node:e,nodeTypeLabel:n.label,icon:n.icon,colorClass:n.colorClass,details:u(e)}}),p=()=>{let n={totalNodes:e.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:t.value.length};return e.value.forEach(e=>{e.type===`approval`?n.approvalNodes++:e.type===`copy`?n.copyNodes++:e.type===`condition`&&n.conditionNodes++}),n};return{showPreview:n,previewSteps:r,previewStats:a,openPreview:()=>{r.value=f(),a.value=p(),n.value=!0},closePreview:()=>{n.value=!1}}}const ot={class:`approval-workflow-container`},st={class:`floating-toolbar`},ct={class:`add-menu-content`},lt=[`onClick`],ut={class:`menu-text`},dt={key:0,class:`validation-success`},ft={class:`success-icon`},pt={key:1,class:`validation-errors`},mt={class:`error-summary`},ht={class:`error-icon`},gt={class:`error-list`},_t={class:`error-header`},vt={class:`error-number`},yt={class:`error-info`},bt={class:`error-node`},xt={class:`error-field`},St={class:`error-message`},Ct={class:`error-actions`},wt={class:`validation-footer`},Tt={class:`preview-stats`},Et={class:`stat-item`},Dt={class:`stat-value`},Ot={class:`stat-item approval`},kt={class:`stat-value`},At={class:`stat-item copy`},jt={class:`stat-value`},Mt={class:`stat-item condition`},Nt={class:`stat-value`},Pt={class:`stat-item edge`},Ft={class:`stat-value`},It={class:`preview-timeline`},Lt={class:`step-connector`},Rt={class:`step-dot`},zt={key:0,class:`step-line`},Bt={class:`step-content`},Vt={class:`step-header`},Ht={class:`step-order`},Ut={class:`step-type-badge`},Wt={class:`step-title`},Gt={key:0,class:`step-details`},Kt={class:`detail-label`},qt={class:`warning-text`},Jt={key:0,class:`preview-empty`},Yt={class:`preview-footer`},Xt=(0,i.defineComponent)({name:`C_WorkFlow`,__name:`index`,props:{users:{default:()=>[]},roles:{default:()=>[]},departments:{default:()=>[]},modelValue:{},readonly:{type:Boolean,default:!1},allowCycles:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`update:modelValue`,`change`,`node-click`,`edge-click`,`save`,`validate-error`],setup(e,{expose:r,emit:c}){let l=e,u=c,d=t.t(),f=(0,i.ref)(),{nodes:p,edges:m,showAddMenu:h,menuPosition:g,showNodeConfig:_,currentNode:v,nodeTypes:y,workflowStats:b,commitCanvasChange:x,handleCanvasChanges:S,connectNodes:C,updateConnection:w,addNode:T,onNodeClick:E,closeAddMenu:D,handleConfigSave:O,resetNodes:k,getCurrentWorkflowData:A,fitView:j,deleteNode:M}=Ye(l,u,f),{validationErrors:N,showValidationErrors:P,validateWorkflow:F,validateCurrentWorkflow:I,jumpToErrorNode:L,getFieldDisplayName:R,getErrorTypeText:z,resetValidation:B}=tt(p,m,f,{allowCycles:()=>l.allowCycles,onShowNodeConfig:e=>{l.readonly||(v.value=e,_.value=!0)},onValidateError:e=>u(`validate-error`,e)}),{showPreview:V,previewSteps:H,previewStats:U,openPreview:W,closePreview:G}=at(p,m),K=()=>{if(l.readonly)return;let e=F();if(N.value=e,e.length>0){d.error(`工作流验证失败: ${e[0].message}`),P.value=!0,u(`validate-error`,e);return}u(`save`,A()),d.success(`工作流保存成功`)},q=()=>{W()},J=()=>{G(),K()},Y=()=>{l.readonly||(k(),B())};return r({validateWorkflow:F,getCurrentWorkflowData:A,saveWorkflow:K,previewWorkflow:q,deleteNode:M,stats:b}),(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ot,[(0,i.createCommentVNode)(` 浮动工具栏 `),(0,i.createElementVNode)(`div`,st,[(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,type:`primary`,disabled:e.readonly,onClick:K},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:content-save`,size:16})]),default:(0,i.withCtx)(()=>[r[7]||=(0,i.createTextVNode)(` 保存 `,-1)]),_:1},8,[`disabled`]),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,onClick:q},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:eye`,size:16})]),default:(0,i.withCtx)(()=>[r[8]||=(0,i.createTextVNode)(` 预览 `,-1)]),_:1}),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,onClick:(0,i.unref)(I),title:`检查工作流配置是否正确`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:check-circle`,size:16})]),default:(0,i.withCtx)(()=>[r[9]||=(0,i.createTextVNode)(` 验证流程 `,-1)]),_:1},8,[`onClick`]),r[10]||=(0,i.createElementVNode)(`div`,{class:`toolbar-divider`},null,-1),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,onClick:(0,i.unref)(j),title:`适应窗口`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:fit-to-screen`,size:16})]),_:1},8,[`onClick`]),(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,type:`error`,disabled:e.readonly,onClick:Y,title:`清空画布`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:delete-sweep`,size:16})]),_:1},8,[`disabled`])]),(0,i.createCommentVNode)(` Vue Flow 画布 `),(0,i.createVNode)((0,i.unref)(o.VueFlow),{ref_key:`vueFlowRef`,ref:f,nodes:(0,i.unref)(p),"onUpdate:nodes":r[0]||=e=>(0,i.isRef)(p)?p.value=e:null,edges:(0,i.unref)(m),"onUpdate:edges":r[1]||=e=>(0,i.isRef)(m)?m.value=e:null,"node-types":(0,i.unref)(y),class:`workflow-canvas`,"default-viewport":{zoom:1,x:0,y:0},"min-zoom":.5,"max-zoom":2,"fit-view-on-init":!0,"nodes-draggable":!e.readonly,"nodes-connectable":!e.readonly,"edges-updatable":!e.readonly,"delete-key-code":e.readonly?null:void 0,"elements-selectable":!0,onNodeClick:(0,i.unref)(E),onNodeDragStop:(0,i.unref)(x),onNodesChange:(0,i.unref)(S),onEdgesChange:(0,i.unref)(S),onConnect:(0,i.unref)(C),onEdgeUpdate:(0,i.unref)(w),onPaneClick:(0,i.unref)(D)},null,8,[`nodes`,`edges`,`node-types`,`nodes-draggable`,`nodes-connectable`,`edges-updatable`,`delete-key-code`,`onNodeClick`,`onNodeDragStop`,`onNodesChange`,`onEdgesChange`,`onConnect`,`onEdgeUpdate`,`onPaneClick`]),(0,i.createCommentVNode)(` 节点添加菜单 `),((0,i.openBlock)(),(0,i.createBlock)(i.Teleport,{to:`body`},[(0,i.withDirectives)((0,i.createElementVNode)(`div`,{class:`add-node-menu`,style:(0,i.normalizeStyle)({left:(0,i.unref)(g).x+`px`,top:(0,i.unref)(g).y+`px`})},[(0,i.createElementVNode)(`div`,ct,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(s),e=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{key:e.type,type:`button`,class:`add-menu-item`,onClick:t=>(0,i.unref)(T)(e.type)},[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`menu-icon`,e.iconClass])},[(0,i.createVNode)((0,i.unref)(n.t),{name:e.icon,size:16},null,8,[`name`])],2),(0,i.createElementVNode)(`span`,ut,(0,i.toDisplayString)(e.label),1)],8,lt))),128))])],4),[[i.vShow,(0,i.unref)(h)]])])),(0,i.createCommentVNode)(` 节点配置弹窗 - 拆分到独立组件 `),(0,i.createVNode)(ee,{show:(0,i.unref)(_),"onUpdate:show":r[2]||=e=>(0,i.isRef)(_)?_.value=e:null,"current-node":(0,i.unref)(v),users:e.users,departments:e.departments,onSave:(0,i.unref)(O),onCancel:r[3]||=e=>_.value=!1},null,8,[`show`,`current-node`,`users`,`departments`,`onSave`]),(0,i.createCommentVNode)(` 验证错误日志抽屉 `),(0,i.createVNode)((0,i.unref)(a.NDrawer),{show:(0,i.unref)(P),"onUpdate:show":r[5]||=e=>(0,i.isRef)(P)?P.value=e:null,width:450,placement:`right`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NDrawerContent),{title:`流程验证结果`,closable:``},{footer:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,wt,[(0,i.createVNode)((0,i.unref)(a.NButton),{onClick:r[4]||=e=>P.value=!1},{default:(0,i.withCtx)(()=>[...r[16]||=[(0,i.createTextVNode)(`关闭`,-1)]]),_:1}),(0,i.createVNode)((0,i.unref)(a.NButton),{type:`primary`,onClick:(0,i.unref)(I)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:refresh`,size:16})]),default:(0,i.withCtx)(()=>[r[17]||=(0,i.createTextVNode)(` 重新验证 `,-1)]),_:1},8,[`onClick`])])]),default:(0,i.withCtx)(()=>[(0,i.unref)(N).length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,dt,[(0,i.createElementVNode)(`div`,ft,[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:check-circle`,size:32,color:`#52c41a`})]),r[11]||=(0,i.createElementVNode)(`h3`,null,`验证通过`,-1),r[12]||=(0,i.createElementVNode)(`p`,null,`流程结构和节点配置验证通过;审批执行、权限与业务规则由后端校验。`,-1)])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,pt,[(0,i.createElementVNode)(`div`,mt,[(0,i.createElementVNode)(`div`,ht,[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:alert-circle`,size:24,color:`#ff4d4f`})]),(0,i.createElementVNode)(`h3`,null,`发现 `+(0,i.toDisplayString)((0,i.unref)(N).length)+` 个问题`,1),r[13]||=(0,i.createElementVNode)(`p`,null,`请修复以下问题后重新验证:`,-1)]),(0,i.createElementVNode)(`div`,gt,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(N),(e,t)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:`${e.nodeId}-${e.field}-${t}`,class:`error-item`},[(0,i.createElementVNode)(`div`,_t,[(0,i.createElementVNode)(`span`,vt,(0,i.toDisplayString)(t+1),1),(0,i.createElementVNode)(`div`,yt,[(0,i.createElementVNode)(`strong`,bt,(0,i.toDisplayString)(e.nodeName),1),(0,i.createElementVNode)(`span`,xt,(0,i.toDisplayString)((0,i.unref)(R)(e.field)),1)]),(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`error-type`,e.type])},(0,i.toDisplayString)((0,i.unref)(z)(e.type)),3)]),(0,i.createElementVNode)(`div`,St,(0,i.toDisplayString)(e.message),1),(0,i.createElementVNode)(`div`,Ct,[(0,i.createVNode)((0,i.unref)(a.NButton),{size:`small`,type:`primary`,disabled:!e.nodeId,onClick:t=>(0,i.unref)(L)(e.nodeId)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:target`,size:16})]),default:(0,i.withCtx)(()=>[r[14]||=(0,i.createTextVNode)(` 定位节点 `,-1)]),_:1},8,[`disabled`,`onClick`])])]))),128))]),r[15]||=(0,i.createElementVNode)(`div`,{class:`validation-tips`},[(0,i.createElementVNode)(`h4`,null,`💡 常见问题解决方案:`),(0,i.createElementVNode)(`ul`,null,[(0,i.createElementVNode)(`li`,null,[(0,i.createElementVNode)(`strong`,null,`审批人未设置:`),(0,i.createTextVNode)(`点击审批节点,在弹窗中选择审批人员 `)]),(0,i.createElementVNode)(`li`,null,[(0,i.createElementVNode)(`strong`,null,`条件分支未配置:`),(0,i.createTextVNode)(`点击条件节点,添加至少一个条件分支 `)]),(0,i.createElementVNode)(`li`,null,[(0,i.createElementVNode)(`strong`,null,`节点连接断开:`),(0,i.createTextVNode)(` 检查节点之间的连线是否正确 `)])])],-1)]))]),_:1})]),_:1},8,[`show`]),(0,i.createCommentVNode)(` 流程预览抽屉 `),(0,i.createVNode)((0,i.unref)(a.NDrawer),{show:(0,i.unref)(V),"onUpdate:show":r[6]||=e=>(0,i.isRef)(V)?V.value=e:null,width:520,placement:`right`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NDrawerContent),{title:`流程预览`,closable:``},{footer:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,Yt,[(0,i.createVNode)((0,i.unref)(a.NButton),{onClick:(0,i.unref)(G)},{default:(0,i.withCtx)(()=>[...r[24]||=[(0,i.createTextVNode)(`关闭`,-1)]]),_:1},8,[`onClick`]),(0,i.createVNode)((0,i.unref)(a.NButton),{type:`primary`,onClick:J},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:content-save`,size:16})]),default:(0,i.withCtx)(()=>[r[25]||=(0,i.createTextVNode)(` 确认并保存 `,-1)]),_:1})])]),default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,Tt,[(0,i.createElementVNode)(`div`,Et,[(0,i.createElementVNode)(`span`,Dt,(0,i.toDisplayString)((0,i.unref)(U).totalNodes),1),r[18]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`总节点`,-1)]),(0,i.createElementVNode)(`div`,Ot,[(0,i.createElementVNode)(`span`,kt,(0,i.toDisplayString)((0,i.unref)(U).approvalNodes),1),r[19]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`审批`,-1)]),(0,i.createElementVNode)(`div`,At,[(0,i.createElementVNode)(`span`,jt,(0,i.toDisplayString)((0,i.unref)(U).copyNodes),1),r[20]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`抄送`,-1)]),(0,i.createElementVNode)(`div`,Mt,[(0,i.createElementVNode)(`span`,Nt,(0,i.toDisplayString)((0,i.unref)(U).conditionNodes),1),r[21]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`条件`,-1)]),(0,i.createElementVNode)(`div`,Pt,[(0,i.createElementVNode)(`span`,Ft,(0,i.toDisplayString)((0,i.unref)(U).totalEdges),1),r[22]||=(0,i.createElementVNode)(`span`,{class:`stat-label`},`连线`,-1)])]),(0,i.createElementVNode)(`div`,It,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(H),(e,t)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.node.id,class:(0,i.normalizeClass)([`preview-step`,e.colorClass])},[(0,i.createCommentVNode)(` 时间线连接线 `),(0,i.createElementVNode)(`div`,Lt,[(0,i.createElementVNode)(`div`,Rt,[(0,i.createVNode)((0,i.unref)(n.t),{name:e.icon,size:16},null,8,[`name`])]),t<(0,i.unref)(H).length-1?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,zt)):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createCommentVNode)(` 步骤内容 `),(0,i.createElementVNode)(`div`,Bt,[(0,i.createElementVNode)(`div`,Vt,[(0,i.createElementVNode)(`span`,Ht,`步骤 `+(0,i.toDisplayString)(e.order),1),(0,i.createElementVNode)(`span`,Ut,(0,i.toDisplayString)(e.nodeTypeLabel),1)]),(0,i.createElementVNode)(`div`,Wt,(0,i.toDisplayString)(e.node.data.title),1),e.details.length>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Gt,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.details,(e,t)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:t,class:(0,i.normalizeClass)([`step-detail-item`,{"is-warning":e.type===`warning`}])},[(0,i.createElementVNode)(`span`,Kt,(0,i.toDisplayString)(e.label)+`:`,1),(0,i.createCommentVNode)(` 审批方式 badge `),e.type===`mode`?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,{key:0,class:(0,i.normalizeClass)([`mode-badge`,e.modeKey])},(0,i.toDisplayString)(e.value),3)):e.type===`users`?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 人员 tags `),((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.users,e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NTag),{key:e.name,size:`small`,bordered:!1,round:``,class:`user-tag`},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:account`,size:12})]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)(e.name),1)]),_:2},1024))),128))],64)):e.type===`warning`?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:2},[(0,i.createCommentVNode)(` 警告文案 `),(0,i.createElementVNode)(`span`,qt,` ⚠️ `+(0,i.toDisplayString)(e.value),1)],2112)):((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:3},[(0,i.createCommentVNode)(` 普通文本 `),(0,i.createElementVNode)(`span`,null,(0,i.toDisplayString)(e.value),1)],2112))],2))),128))])):(0,i.createCommentVNode)(`v-if`,!0)])],2))),128))]),(0,i.unref)(H).length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Jt,[(0,i.createVNode)((0,i.unref)(n.t),{name:`mdi:file-document-outline`,size:48,color:`#d1d5db`}),r[23]||=(0,i.createElementVNode)(`p`,null,`暂无流程节点`,-1)])):(0,i.createCommentVNode)(`v-if`,!0)]),_:1})]),_:1},8,[`show`])]))}});var Zt=r.t(Xt,[[`__scopeId`,`data-v-0ce70378`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Zt}});
|
package/dist/C_WorkFlow2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./feedback.js";import{t}from"./C_Icon2.js";import{t as n}from"./export-helper.js";import{a as r,t as i}from"./data.js";import{Fragment as a,Teleport as o,computed as s,createBlock as c,createCommentVNode as l,createElementBlock as u,createElementVNode as d,createTextVNode as f,createVNode as p,defineComponent as m,inject as h,isRef as g,markRaw as _,nextTick as v,normalizeClass as y,normalizeStyle as b,onBeforeUnmount as x,onMounted as ee,openBlock as S,provide as C,ref as w,renderList as T,toDisplayString as E,unref as D,vShow as O,watch as k,withCtx as A,withDirectives as j}from"vue";import{NAvatar as M,NButton as N,NCard as P,NDrawer as F,NDrawerContent as I,NInput as L,NModal as R,NRadio as z,NRadioGroup as te,NSelect as B,NSpace as ne,NTag as re,NTree as ie}from"naive-ui";import{VueFlow as ae}from"@vue-flow/core";const oe=[{type:`approval`,label:`审批人`,icon:`mdi:account-check`,iconClass:`approval-icon`},{type:`copy`,label:`抄送人`,icon:`mdi:email-outline`,iconClass:`copy-icon`},{type:`condition`,label:`条件分支`,icon:`mdi:source-branch`,iconClass:`condition-icon`}],se=[{value:`any`,label:`或签`,desc:`任意一人同意即可通过`},{value:`all`,label:`会签`,desc:`所有人都同意才能通过`},{value:`sequence`,label:`顺序审批`,desc:`按选择顺序依次审批`}],ce=[{label:`申请金额`,value:`amount`},{label:`申请人部门`,value:`department`},{label:`申请类型`,value:`type`},{label:`紧急程度`,value:`priority`}],le=[{label:`等于`,value:`equals`},{label:`大于`,value:`greater_than`},{label:`小于`,value:`less_than`},{label:`包含`,value:`contains`},{label:`不等于`,value:`not_equals`}],V={start:`发起人`,approval:`审批人`,copy:`抄送人`,condition:`条件分支`},ue={approval:`审批人设置`,copy:`抄送人设置`,condition:`条件分支设置`},de={approvers:`审批人`,conditions:`条件配置`,connection:`节点连接`,nodeId:`节点标识`,edgeId:`连线标识`,start:`开始节点`,cycle:`循环策略`,copyUsers:`抄送人`},H={required:`必填`,invalid:`结构错误`,incomplete:`不完整`,warning:`警告`,error:`错误`},U={id:`start-1`,type:`start`,position:{x:150,y:100},data:{title:`发起人`,status:`active`,initiators:[]}},W=e=>{let t=Array.from(e.trim()).slice(0,2).join(``).toUpperCase()||`?`,n=`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 80 80"><rect width="80" height="80" rx="40" fill="hsl(${Array.from(e).reduce((e,t)=>(e*31+(t.codePointAt(0)??0))%360,210)} 55% 46%)"/><text x="40" y="48" text-anchor="middle" font-family="sans-serif" font-size="28" fill="white">${t.replace(/[&<>"']/g,e=>({"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`})[e])}</text></svg>`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(n)}`};let G=0;const K=e=>typeof crypto<`u`&&`randomUUID`in crypto?`${e}-${crypto.randomUUID()}`:`${e}-${Date.now()}-${++G}`,fe=()=>K(`condition`),pe=(e,t)=>`edge-${e}-${t}`,me=()=>({id:fe(),name:``,field:``,operator:`equals`,value:``}),q=new Set([`equals`,`not_equals`,`greater_than`,`less_than`,`contains`]);function J(e){if(!e||typeof e!=`object`)return!1;let t=e;return[t.id,t.name,t.field,t.value].every(e=>typeof e==`string`&&e.trim().length>0)&&q.has(t.operator)}const Y={key:0,class:`max-h-60vh overflow-y-auto`},he={class:`config-section`},ge={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},X={class:`border rounded-lg p-3 mb-4 max-h-50 overflow-y-auto`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},_e={key:0,class:`rounded-lg p-4 mb-4 border`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},ve={class:`mb-2 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},ye={class:`flex flex-wrap gap-3`},be={class:`flex items-center gap-2`},xe={class:`font-medium text-sm`},Se={class:`text-xs px-1.5 py-0.5 rounded`,style:{color:`var(--n-text-color-3)`,background:`var(--n-color-embedded)`}},Ce={key:0,class:`mt-4`},we={class:`flex flex-col gap-1`},Te={class:`text-sm`},Ee={class:`text-xs`,style:{color:`var(--n-text-color-3)`}},De={class:`max-h-60vh overflow-y-auto`},Oe={class:`config-section`},ke={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},Ae={class:`space-y-3`},je={class:`flex items-center gap-3 flex-nowrap min-h-10 p-2`};var Me=n(m({__name:`NodeConfigModal`,props:{show:{type:Boolean,default:!1},currentNode:{default:null},users:{default:()=>[]},departments:{default:()=>[]}},emits:[`update:show`,`save`,`cancel`],setup(n,{emit:r}){let o=n,m=r,h=e(),g=w(``),_=w([]),v=w([]),y=w(`any`),b=w(!1),x=w([]),ee=s({get:()=>o.show,set:e=>m(`update:show`,e)}),C=s(()=>o.currentNode?.type===`start`?`发起人设置`:ue[o.currentNode?.type]||`节点设置`),O=s(()=>{let e=[],t=new Map;return o.departments?.forEach(e=>{t.has(e.id)||t.set(e.id,{key:`dept-${e.id}`,label:`${e.name} ${e.manager?`(负责人: ${e.manager})`:``}`,children:[],isLeaf:!1,disabled:!0})}),(o.users?.filter(e=>!g.value||e.name.includes(g.value)||e.department.includes(g.value))||[]).forEach(e=>{let n=o.departments?.find(t=>t.name===e.department);n&&t.has(n.id)&&t.get(n.id).children.push({key:e.id,label:`${e.name}${e.role?`(${e.role})`:``}`,isLeaf:!0,user:e})}),t.forEach(t=>{t.children.length>0&&e.push(t)}),e}),j=s(()=>o.users?.filter(e=>_.value.includes(e.id))||[]),F=s(()=>o.users?.filter(e=>v.value.includes(e.id))||[]),I=s(()=>o.users?.filter(e=>_.value.includes(e.id))||[]),ae=e=>{_.value=e.filter(e=>!e.startsWith(`dept-`))},oe=e=>{v.value=e.filter(e=>!e.startsWith(`dept-`))},V=e=>{_.value=_.value.filter(t=>t!==e)},de=e=>{v.value=v.value.filter(t=>t!==e)},H=e=>{_.value=_.value.filter(t=>t!==e)},U=()=>x.value.push(me()),G=e=>x.value.splice(e,1),K=e=>{let{initiators:t}=e.data;_.value=t?t.map(e=>e.id):[]},fe=e=>{_.value=(e.data.approvers||[]).map(e=>e.id),y.value=e.data.approvalMode||`any`},pe=e=>{v.value=(e.data.copyUsers||[]).map(e=>e.id)},q=e=>{x.value=i(e.data.conditions||[])},Me=async()=>{if(_.value.length===0)return h.error(`请选择发起人`),!1;let e=I.value;return m(`save`,{initiators:e}),h.success(`已设置 ${e.length} 个发起人`),!0},Ne=async()=>{if(_.value.length===0)return h.error(`请至少选择一个审批人`),!1;let e=j.value;return m(`save`,{approvers:e,approvalMode:y.value}),h.success(`已设置 ${e.length} 个审批人`),!0},Pe=async()=>{let e=F.value;return m(`save`,{copyUsers:e}),h.success(`已设置 ${e.length} 个抄送人`),!0},Z=async()=>x.value.length===0?(h.error(`请至少添加一个条件分支`),!1):x.value.some(e=>!J(e))?(h.error(`请完善所有条件配置`),!1):(m(`save`,{conditions:i(x.value)}),h.success(`已设置 ${x.value.length} 个条件分支`),!0),Fe=async()=>{if(!o.currentNode)return!1;b.value=!0;try{let e={start:Me,approval:Ne,copy:Pe,condition:Z}[o.currentNode.type];return e?await e():!1}catch(e){return h.error(`保存配置失败`,e),!1}finally{b.value=!1}},Ie=()=>{m(`cancel`)};k(()=>o.currentNode,e=>{if(e)switch(g.value=``,e.type){case`start`:K(e);break;case`approval`:fe(e);break;case`copy`:pe(e);break;case`condition`:q(e);break}},{immediate:!0});let Le=s(()=>[`start`,`approval`,`copy`].includes(o.currentNode?.type||``)),Q=s(()=>{let e=o.currentNode?.type;return e===`start`?{icon:`mdi:account-star`,title:`选择发起人`,checkedKeys:_.value,onSelect:ae,selectedUsers:I.value,selectedLabel:`已选择发起人`,tagType:`primary`,onRemove:H}:e===`approval`?{icon:`mdi:account-check`,title:`选择审批人`,checkedKeys:_.value,onSelect:ae,selectedUsers:j.value,selectedLabel:`已选择审批人`,tagType:`info`,onRemove:V}:e===`copy`?{icon:`mdi:email-outline`,title:`选择抄送人`,checkedKeys:v.value,onSelect:oe,selectedUsers:F.value,selectedLabel:`已选择抄送人`,tagType:`success`,onRemove:de}:{icon:``,title:``,checkedKeys:[],onSelect:()=>{},selectedUsers:[],selectedLabel:``,tagType:`default`,onRemove:()=>{}}});return(e,n)=>(S(),c(D(R),{show:ee.value,"onUpdate:show":n[2]||=e=>ee.value=e,style:{width:`900px`},"mask-closable":!1,preset:`dialog`,title:C.value,"positive-text":`确定`,"negative-text":`取消`,loading:b.value,onPositiveClick:Fe,onNegativeClick:Ie},{default:A(()=>[l(` 公共选择面板 `),Le.value?(S(),u(`div`,Y,[d(`div`,he,[d(`h4`,ge,[Q.value.icon?(S(),c(D(t),{key:0,name:Q.value.icon,size:16},null,8,[`name`])):l(`v-if`,!0),f(` `+E(Q.value.title),1)]),p(D(L),{value:g.value,"onUpdate:value":n[0]||=e=>g.value=e,placeholder:`搜索用户姓名或部门`,clearable:``,class:`mb-4`},{prefix:A(()=>[p(D(t),{name:`mdi:magnify`,size:16})]),_:1},8,[`value`]),d(`div`,X,[p(D(ie),{data:O.value,"checked-keys":Q.value.checkedKeys,selectable:!1,checkable:``,cascade:``,"virtual-scroll":!0,style:{"max-height":`300px`},"onUpdate:checkedKeys":Q.value.onSelect},null,8,[`data`,`checked-keys`,`onUpdate:checkedKeys`])]),Q.value.selectedUsers.length>0?(S(),u(`div`,_e,[d(`h5`,ve,E(Q.value.selectedLabel)+` (`+E(Q.value.selectedUsers.length)+`) `,1),d(`div`,ye,[(S(!0),u(a,null,T(Q.value.selectedUsers,e=>(S(),c(D(re),{key:e.id,closable:``,type:Q.value.tagType,onClose:t=>Q.value.onRemove(e.id)},{default:A(()=>[d(`div`,be,[p(D(M),{src:e.avatar,"fallback-src":D(W)(e.name),size:`small`},null,8,[`src`,`fallback-src`]),d(`span`,xe,E(e.name),1),d(`span`,Se,E(e.department),1)])]),_:2},1032,[`type`,`onClose`]))),128))])])):l(`v-if`,!0)]),l(` 审批节点时附带审批模式 `),o.currentNode?.type===`approval`?(S(),u(`div`,Ce,[n[3]||=d(`h5`,{class:`mb-3 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},` 审批模式 `,-1),p(D(te),{value:y.value,"onUpdate:value":n[1]||=e=>y.value=e},{default:A(()=>[p(D(ne),{vertical:``},{default:A(()=>[(S(!0),u(a,null,T(D(se),e=>(S(),c(D(z),{key:e.value,value:e.value},{default:A(()=>[d(`div`,we,[d(`strong`,Te,E(e.label),1),d(`span`,Ee,E(e.desc),1)])]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`value`])])):l(`v-if`,!0)])):o.currentNode?.type===`condition`?(S(),u(a,{key:1},[l(` 条件节点配置 `),d(`div`,De,[d(`div`,Oe,[d(`h4`,ke,[p(D(t),{name:`mdi:source-branch`,size:16}),n[4]||=f(` 条件分支设置 `,-1)]),d(`div`,Ae,[(S(!0),u(a,null,T(x.value,(e,n)=>(S(),u(`div`,{key:e.id,class:`condition-item`},[p(D(P),{size:`small`,class:`border border-gray-200 hover:border-gray-300 transition-colors`},{default:A(()=>[d(`div`,je,[p(D(L),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`分支名称`,style:{width:`150px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),p(D(B),{value:e.field,"onUpdate:value":t=>e.field=t,placeholder:`选择字段`,options:D(ce),style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),p(D(B),{value:e.operator,"onUpdate:value":t=>e.operator=t,placeholder:`操作符`,options:D(le),style:{width:`100px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),p(D(L),{value:e.value,"onUpdate:value":t=>e.value=t,placeholder:`值`,style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),p(D(N),{quaternary:``,type:`error`,onClick:e=>G(n),class:`flex-shrink-0 ml-auto`},{icon:A(()=>[p(D(t),{name:`mdi:delete`,size:16})]),_:1},8,[`onClick`])])]),_:2},1024)]))),128)),p(D(N),{dashed:``,block:``,onClick:U,class:`w-full`},{icon:A(()=>[p(D(t),{name:`mdi:plus`,size:16})]),default:A(()=>[n[5]||=f(` 添加条件 `,-1)]),_:1})])])])],2112)):l(`v-if`,!0)]),_:1},8,[`show`,`title`,`loading`]))}}),[[`__scopeId`,`data-v-e1ac2c54`]]);const Ne=[`id`,`type`,`position`,`data`,`selected`,`dragging`,`connectable`,`selectable`,`deletable`,`dragHandle`,`width`,`height`,`parentNode`,`zIndex`,`extent`,`expandParent`],Pe=[`id`,`source`,`target`,`sourceHandle`,`targetHandle`,`type`,`animated`,`hidden`,`deletable`,`selectable`,`data`,`style`,`label`,`labelStyle`,`labelShowBg`,`labelBgStyle`,`labelBgPadding`,`labelBgBorderRadius`,`markerStart`,`markerEnd`];function Z(e){return new Map(e.map(e=>[e.id,new Set(Object.keys(e))]))}function Fe(e,t,n){return Object.fromEntries(t.filter(e=>n?.has(String(e))).map(t=>[t,e[t]]))}function Ie(e,t){return i({...Fe(e,Ne,t),id:e.id,type:e.type,position:{x:e.position.x,y:e.position.y},data:e.data})}function Le(e,t){return i({...Fe(e,Pe,t),id:e.id,source:e.source,target:e.target})}function Q(e,t){let n=new Set(e.map(e=>e.id));for(let e of t.keys())n.has(e)||t.delete(e)}const Re={class:`start-node`},ze={class:`node-content`},Be={class:`node-info`},Ve={class:`node-text`},He={key:0,class:`initiator-name`},Ue={key:1,class:`placeholder-text`};var We=n(m({__name:`StartNode`,props:{id:{},data:{}},setup(e){let n=e,r=h(`showAddMenu`),i=s(()=>{let{initiators:e}=n.data;return!e||!Array.isArray(e)||e.length===0?``:e.map(e=>e?.name||`未知用户`).join(`、`)}),a=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)};return(n,r)=>(S(),u(`div`,Re,[l(` 主要内容区域 `),d(`div`,ze,[r[0]||=d(`div`,{class:`node-icon`},`🚀`,-1),d(`div`,Be,[d(`div`,Ve,E(e.data.title),1),i.value?(S(),u(`div`,He,E(i.value),1)):(S(),u(`div`,Ue,`点击设置发起人`))])]),l(` 添加节点按钮 `),d(`button`,{type:`button`,class:`add-node-btn`,onClick:a,title:`添加下一个节点`},[p(D(t),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-6fb2df95`]]);const Ge={class:`approval-node`},Ke={class:`node-card`},qe={class:`node-header`},Je={class:`node-icon`},Ye={class:`node-title`},Xe={key:0,class:`node-badge`},Ze={key:1,class:`approval-mode-badge`},Qe={class:`node-content`},$e={key:0,class:`approvers-list`},et={class:`approver-info`},tt={class:`approver-avatar`},nt={class:`approver-details`},rt={class:`approver-name`},it={class:`approver-dept`},at={class:`approver-role`},ot={key:0,class:`more-count`},st={key:1,class:`placeholder`};var ct=n(m({__name:`ApprovalNode`,props:{id:{},data:{}},setup(e){let n=e,r=h(`showAddMenu`),i=h(`deleteNode`),o=s(()=>n.data.approvers??[]),c=s(()=>o.value.length),f=s(()=>o.value.slice(0,3)),m=s(()=>Math.max(0,c.value-3)),g=e=>({any:`或签`,all:`会签`,sequence:`顺序`})[e]||``,_=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},v=e=>{e.stopPropagation(),i&&i(n.id)};return(n,r)=>(S(),u(`div`,Ge,[d(`div`,{class:y([`status-indicator`,e.data.status])},null,2),l(` 删除按钮 `),d(`button`,{type:`button`,class:`delete-btn`,onClick:v,title:`删除节点`},[p(D(t),{name:`mdi:close`,size:12})]),d(`div`,Ke,[d(`div`,qe,[d(`div`,Je,[p(D(t),{name:`mdi:account`,size:12,color:`white`})]),d(`span`,Ye,E(e.data.title),1),c.value>0?(S(),u(`div`,Xe,E(c.value),1)):l(`v-if`,!0),e.data.approvalMode?(S(),u(`div`,Ze,E(g(e.data.approvalMode)),1)):l(`v-if`,!0)]),d(`div`,Qe,[c.value>0?(S(),u(`div`,$e,[(S(!0),u(a,null,T(f.value,e=>(S(),u(`div`,{key:e.id,class:`approver-tag`},[d(`div`,et,[d(`div`,tt,[p(D(M),{src:e.avatar,"fallback-src":D(W)(e.name),size:`small`},null,8,[`src`,`fallback-src`])]),d(`div`,nt,[d(`span`,rt,E(e.name),1),d(`span`,it,E(e.department),1),d(`span`,at,E(e.role),1)])])]))),128)),m.value>0?(S(),u(`div`,ot,`+`+E(m.value),1)):l(`v-if`,!0)])):(S(),u(`div`,st,[p(D(t),{name:`mdi:account-plus`,size:24,color:`#9ca3af`}),r[0]||=d(`span`,null,`请设置审批人`,-1)]))])]),d(`button`,{type:`button`,class:`add-node-btn`,onClick:_,title:`添加下一个节点`},[p(D(t),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-e6968a42`]]);const lt={class:`copy-node`},ut={class:`node-card`},dt={class:`node-header`},ft={class:`node-title`},pt={key:0,class:`node-badge`},mt={class:`node-content`},ht={key:0,class:`copy-users-list`},gt={key:0,class:`more-count`},_t={key:1,class:`placeholder`};var vt=n(m({__name:`CopyNode`,props:{id:{},data:{}},setup(e){let n=e,r=h(`showAddMenu`),i=h(`deleteNode`),o=s(()=>n.data.copyUsers??[]),c=s(()=>o.value.length),f=s(()=>o.value.slice(0,3)),m=s(()=>Math.max(0,c.value-3)),g=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},_=e=>{e.stopPropagation(),i&&i(n.id)};return(n,r)=>(S(),u(`div`,lt,[d(`div`,{class:y([`status-indicator`,e.data.status])},null,2),l(` 删除按钮 `),d(`button`,{type:`button`,class:`delete-btn`,onClick:_,title:`删除节点`},[p(D(t),{name:`mdi:close`,size:12})]),d(`div`,ut,[d(`div`,dt,[r[0]||=d(`div`,{class:`node-icon`},`📋`,-1),d(`span`,ft,E(e.data.title),1),c.value>0?(S(),u(`div`,pt,E(c.value),1)):l(`v-if`,!0)]),d(`div`,mt,[c.value>0?(S(),u(`div`,ht,[(S(!0),u(a,null,T(f.value,e=>(S(),u(`div`,{key:e.id,class:`copy-user-tag`},E(e.name),1))),128)),m.value>0?(S(),u(`div`,gt,`+`+E(m.value),1)):l(`v-if`,!0)])):(S(),u(`div`,_t,`请设置抄送人`))])]),d(`button`,{type:`button`,class:`add-node-btn`,onClick:g,title:`添加下一个节点`},[p(D(t),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-010e7ec8`]]);const yt={class:`condition-node`},bt={class:`node-card`},xt={class:`node-header`},St={class:`node-title`},Ct={key:0,class:`node-badge`},wt={class:`node-content`},Tt={key:0,class:`conditions-list`},Et={key:0,class:`more-count`},Dt={key:1,class:`placeholder`};var Ot=n(m({__name:`ConditionNode`,props:{id:{},data:{}},setup(e){let n=e,r=h(`showAddMenu`),i=h(`deleteNode`),o=s(()=>n.data.conditions??[]),c=s(()=>o.value.length),f=s(()=>o.value.slice(0,2)),m=s(()=>Math.max(0,c.value-2)),g=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},_=e=>{e.stopPropagation(),i&&i(n.id)};return(n,r)=>(S(),u(`div`,yt,[d(`div`,{class:y([`status-indicator`,e.data.status])},null,2),l(` 删除按钮 `),d(`button`,{type:`button`,class:`delete-btn`,onClick:_,title:`删除节点`},[p(D(t),{name:`mdi:close`,size:12})]),d(`div`,bt,[d(`div`,xt,[r[0]||=d(`div`,{class:`node-icon`},`🔀`,-1),d(`span`,St,E(e.data.title),1),c.value>0?(S(),u(`div`,Ct,E(c.value),1)):l(`v-if`,!0)]),d(`div`,wt,[c.value>0?(S(),u(`div`,Tt,[(S(!0),u(a,null,T(f.value,e=>(S(),u(`div`,{key:e.id,class:`condition-tag`},[r[1]||=d(`span`,{class:`condition-icon`},`→`,-1),d(`span`,null,E(e.name||`条件`+(f.value.indexOf(e)+1)),1)]))),128)),m.value>0?(S(),u(`div`,Et,`+`+E(m.value),1)):l(`v-if`,!0)])):(S(),u(`div`,Dt,`请设置分支条件`))])]),d(`button`,{type:`button`,class:`add-node-btn`,onClick:g,title:`添加下一个节点`},[p(D(t),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-5ede8782`]]);const kt={start:_(We),approval:_(ct),copy:_(vt),condition:_(Ot)};function At(t,n,a){let o=e(),c=w(i(t.modelValue?.nodes??[U])),l=w(i(t.modelValue?.edges??[])),u=Z(c.value),d=Z(l.value),f=w(t.modelValue?i(t.modelValue.config):{version:`1.0`,createdAt:new Date().toISOString()}),p=w(!1),m=w({x:0,y:0}),h=w(!1),g=w(null),_=w(null),y=new Set,b=!1,S=(e,t)=>{let n=setTimeout(()=>{y.delete(n),b||e()},t);y.add(n)},T=s(()=>kt),E=s(()=>{let e={totalNodes:c.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0};return c.value.forEach(t=>{t.type===`approval`?e.approvalNodes++:t.type===`copy`?e.copyNodes++:t.type===`condition`&&e.conditionNodes++}),e}),D=()=>(Q(c.value,u),Q(l.value,d),{nodes:c.value.map(e=>Ie(e,u.get(e.id))),edges:l.value.map(e=>Le(e,d.get(e.id))),...f.value!==void 0&&{config:i(f.value)}}),O=()=>{let e=D();n(`update:modelValue`,e),n(`change`,e)},A=!1,j=0,M=()=>{if(b||t.readonly||A)return;A=!0;let e=j;v(()=>{A=!1,!(b||t.readonly||e!==j)&&O()})},N=e=>{e.some(e=>e.type===`remove`)&&M()},P=(e,t)=>{let n={id:pe(e,t),source:e,target:t,animated:!0,type:`default`};return d.set(n.id,new Set(Object.keys(n))),n},F=(e,t)=>c.value.some(t=>t.id===e.source)&&c.value.some(t=>t.id===e.target)&&!l.value.some(n=>n.id!==t&&n.source===e.source&&n.target===e.target),I=e=>{t.readonly||!F(e)||(l.value=[...l.value,P(e.source,e.target)],M())},L=({edge:e,connection:n})=>{t.readonly||!l.value.some(t=>t.id===e.id)||!F(n,e.id)||(l.value=l.value.map(t=>t.id===e.id?{...t,source:n.source,target:n.target}:t),M())},R=(e=60,t=400)=>{v(()=>{b||S(()=>{a.value?.fitView?.({padding:e,duration:t})},100)})},z=(e,n)=>{t.readonly||(m.value={x:typeof e.x==`number`?e.x:0,y:typeof e.y==`number`?e.y:0},_.value=n||null,p.value=!0)},te=()=>{p.value=!1},B=e=>{if(t.readonly)return;let n=c.value.findIndex(t=>t.id===e);if(n===-1)return;if(c.value[n].type===`start`){o.warning(`不能删除开始节点`);return}let r=l.value.filter(t=>t.target===e),i=l.value.filter(t=>t.source===e);c.value.splice(n,1),l.value=l.value.filter(t=>t.source!==e&&t.target!==e),r.forEach(e=>{i.forEach(t=>{l.value.push(P(e.source,t.target))})}),c.value.forEach((e,t)=>{t>=n&&(e.position.y-=180)}),O(),o.success(`节点已删除`),R()};C(`showAddMenu`,z),C(`deleteNode`,B);let ne=()=>{let e=c.value.length-1,t=c.value[e];if(_.value){let n=c.value.findIndex(e=>e.id===_.value);n!==-1&&(e=n,t=c.value[e])}return{targetNodeIndex:e,targetNode:t}},re=(e,t)=>{let n={id:K(e),position:{x:t?.position.x??150,y:(t?.position.y??130)+180}},r={title:V[e],status:`pending`};switch(e){case`start`:return{...n,type:e,data:{...r,status:`active`}};case`approval`:return{...n,type:e,data:{...r,approvers:[],approvalMode:`any`}};case`copy`:return{...n,type:e,data:{...r,copyUsers:[]}};case`condition`:return{...n,type:e,data:{...r,conditions:[]}}}},ie=(e,t)=>{let n=l.value.filter(t=>t.source===e.id);l.value=l.value.filter(t=>t.source!==e.id),l.value.push(P(e.id,t.id)),n.forEach(e=>{l.value.push(P(t.id,e.target))})};return k(()=>t.modelValue,e=>{if(!e)return;let t=D(),n=e.nodes??[],a=e.edges??[];r(n,t.nodes)&&r(a,t.edges)&&r(e.config,f.value)||(j+=1,u=Z(n),d=Z(a),c.value=i(n),l.value=i(a),f.value=i(e.config))},{deep:!0}),ee(()=>{b=!1,v(()=>{b||S(()=>{a.value?.fitView?.({padding:80,includeHiddenNodes:!1,minZoom:.8,maxZoom:1.2,duration:600})},300)})}),x(()=>{b=!0,y.forEach(e=>clearTimeout(e)),y.clear()}),{nodes:c,edges:l,showAddMenu:p,menuPosition:m,showNodeConfig:h,currentNode:g,nodeTypes:T,workflowStats:E,commitCanvasChange:M,handleCanvasChanges:N,connectNodes:I,updateConnection:L,addNode:e=>{if(!t.readonly)try{let{targetNodeIndex:t,targetNode:n}=ne(),r=re(e,n);u.set(r.id,new Set(Object.keys(r))),c.value.splice(t+1,0,r);for(let e=t+2;e<c.value.length;e++)c.value[e].position.y+=180;n&&ie(n,r),p.value=!1,_.value=null,O(),R()}catch(e){o.error(`添加节点失败,请重试`,e)}},onNodeClick:e=>{let r=c.value.find(t=>t.id===e.node.id);r&&(t.readonly||(g.value=r,h.value=!0),n(`node-click`,Ie(r,u.get(r.id))))},closeAddMenu:te,handleConfigSave:e=>{if(t.readonly||!g.value)return;let n=c.value.findIndex(e=>e.id===g.value.id);if(n!==-1){let t=Ie(c.value[n],u.get(g.value.id));Object.assign(t.data,i(e)),c.value.splice(n,1,t),g.value=t}O(),h.value=!1,o.success(`节点配置已保存`)},resetNodes:()=>{t.readonly||(c.value=i([U]),l.value=[],u=Z(c.value),d.clear(),O(),R(80,600),o.success(`画布已清空`))},getCurrentWorkflowData:D,fitView:()=>{let e=a.value;if(!e?.fitView){o.warning(`画布未准备就绪,请稍后重试`);return}v(()=>{b||a.value!==e||e.fitView({padding:50,includeHiddenNodes:!1,minZoom:.5,maxZoom:1.5,duration:800})}),o.success(`已适应窗口大小`)},deleteNode:B}}function $(e,t,n){return{nodeId:e?.id??``,nodeName:e?.data.title??`流程结构`,field:t,message:n,type:`invalid`,severity:`high`}}function jt(e){let t=new Set,n=new Set;for(let r of e.keys()){if(t.has(r))continue;let i=[{id:r,offset:0}];for(t.add(r),n.add(r);i.length;){let r=i[i.length-1],a=e.get(r.id);if(r.offset>=a.length){n.delete(r.id),i.pop();continue}let o=a[r.offset++];if(n.has(o))return o;t.has(o)||(t.add(o),n.add(o),i.push({id:o,offset:0}))}}}function Mt(e,t){let n=new Map;return e.forEach(e=>{e.id?.trim()?n.has(e.id)?t.push($(e,`nodeId`,`节点 id「${e.id}」重复,请使用唯一标识`)):n.set(e.id,e):t.push($(e,`nodeId`,`节点 id 不能为空`))}),n}function Nt(e,t,n){let r=new Map([...e.keys()].map(e=>[e,[]])),i=new Set;return t.forEach(t=>{let a=e.get(t.source),o=e.get(t.target);if((!t.id?.trim()||i.has(t.id))&&n.push($(a??o,`edgeId`,`连线 id 不能为空或重复`)),i.add(t.id),!a||!o){let e=[!a&&t.source,!o&&t.target].filter(e=>e!==!1).map(e=>e||`空标识`);n.push($(a??o,`connection`,`连线「${t.id}」指向不存在的节点:${e.join(`、`)}`));return}r.get(a.id).push(o.id)}),r}function Pt(e,t,n,r){let i=new Set([e.id]),a=[e.id];for(let e=0;e<a.length;e++)n.get(a[e])?.forEach(e=>{i.has(e)||(i.add(e),a.push(e))});t.forEach(e=>{i.has(e.id)||r.push($(e,`connection`,`此节点无法从开始节点到达,请检查连线方向与流程连接`))})}function Ft(e,t,n={}){let r=[],i=Mt(e,r),a=e.filter(e=>e.type===`start`);a.length!==1&&r.push($(a[0],`start`,`流程必须包含且仅包含一个开始节点,当前为 ${a.length} 个`));let o=Nt(i,t,r);if(a.length===1&&i.has(a[0].id)&&Pt(a[0],i,o,r),n.allowCycles===!1){let e=jt(o);e!==void 0&&r.push($(i.get(e),`cycle`,`当前审批流程不允许循环,请移除回指连线或由业务启用循环策略`))}return r}function It(t,n,r,i){let a=e(),o=w([]),s=w(!1),c,l=()=>{let e=typeof i?.allowCycles==`function`?i.allowCycles():i?.allowCycles,r=Ft(t.value,n.value,{allowCycles:e});return t.value.forEach(e=>{if(e.type===`approval`&&(`approvers`in e.data&&Array.isArray(e.data.approvers)?e.data.approvers:[]).length===0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`approvers`,message:`审批节点必须设置至少一个审批人,否则流程无法正常运行`,type:`required`}),e.type===`condition`){let t=`conditions`in e.data&&Array.isArray(e.data.conditions)?e.data.conditions:[];if(t.length===0)r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`条件分支节点必须配置至少一个分支条件,否则无法进行条件判断`,type:`required`});else{let n=t.filter(e=>!J(e));n.length>0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`有 ${n.length} 个条件分支配置不完整,请完善所有必填字段`,type:`incomplete`})}}}),r};return x(()=>{c&&clearTimeout(c)}),{validationErrors:o,showValidationErrors:s,validateWorkflow:l,validateCurrentWorkflow:()=>{let e=l();o.value=e,e.length===0?(a.success(`流程结构和节点配置验证通过;执行规则由业务后端校验`),s.value=!1):(a.error(`发现 ${e.length} 个问题,请查看详细错误`),s.value=!0,i?.onValidateError?.(e))},jumpToErrorNode:e=>{let n=t.value.find(t=>t.id===e);!n||!r.value||(r.value.setCenter(n.position.x,n.position.y,{zoom:1.2,duration:800}),c&&clearTimeout(c),c=setTimeout(()=>{c=void 0,t.value.includes(n)&&(i?.onShowNodeConfig?.(n),s.value=!1)},900),a.info(`已定位到节点:${n.data.title}`))},getFieldDisplayName:e=>de[e]||e,getErrorTypeText:e=>H[e]||e,resetValidation:()=>{c&&clearTimeout(c),c=void 0,o.value=[],s.value=!1}}}const Lt={start:{label:`发起人`,icon:`mdi:play-circle`,colorClass:`start`},approval:{label:`审批节点`,icon:`mdi:account-check`,colorClass:`approval`},copy:{label:`抄送节点`,icon:`mdi:email-outline`,colorClass:`copy`},condition:{label:`条件分支`,icon:`mdi:source-branch`,colorClass:`condition`}},Rt={any:`或签(任一审批人通过即可)`,all:`会签(所有审批人必须通过)`,sequence:`顺序审批(按顺序依次审批)`},zt={equals:`等于`,not_equals:`不等于`,greater_than:`大于`,less_than:`小于`,contains:`包含`};function Bt(e,t){let n=w(!1),r=w([]),i=w({totalNodes:0,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:0}),a=e=>{let t=e.initiators||[];return t.length>0?[{type:`users`,label:`发起人`,users:t}]:[{type:`text`,label:`发起人`,value:`所有人`}]},o=e=>{let t=e.approvalMode||`any`,n=e.approvers||[],r=[{type:`mode`,label:`审批方式`,value:Rt[t]||t,modeKey:t}];return n.length>0?r.push({type:`users`,label:`审批人`,users:n}):r.push({type:`warning`,label:`审批人`,value:`未设置`}),r},s=e=>{let t=e.copyUsers||[];return t.length>0?[{type:`users`,label:`抄送人`,users:t}]:[{type:`text`,label:`抄送人`,value:`未设置`}]},c=e=>{let t=e.conditions||[];return t.length===0?[{type:`warning`,label:`条件分支`,value:`未配置`}]:t.map((e,t)=>{let n=zt[e.operator]||e.operator;return{type:`text`,label:`分支 ${t+1}`,value:`${e.name||`未命名`} — ${e.field||`?`} ${n} ${e.value||`?`}`}})},l=e=>{switch(e.type){case`start`:return a(e.data);case`approval`:return o(e.data);case`copy`:return s(e.data);case`condition`:return c(e.data)}},u=()=>{let n=new Map;e.value.forEach(e=>n.set(e.id,e));let r=new Map,i=new Map;e.value.forEach(e=>{r.set(e.id,[]),i.set(e.id,0)}),t.value.forEach(e=>{r.get(e.source)?.push(e.target),i.set(e.target,(i.get(e.target)||0)+1)});let a=[];i.forEach((e,t)=>{e===0&&a.push(t)});let o=[],s=new Set;for(;a.length>0;){let e=a.shift();if(s.has(e))continue;s.add(e);let t=n.get(e);t&&o.push(t);let c=r.get(e)||[];for(let e of c){let t=(i.get(e)||1)-1;i.set(e,t),t<=0&&!s.has(e)&&a.push(e)}}return e.value.forEach(e=>{s.has(e.id)||o.push(e)}),o},d=()=>u().map((e,t)=>{let n=Lt[e.type||`start`]||Lt.start;return{order:t+1,node:e,nodeTypeLabel:n.label,icon:n.icon,colorClass:n.colorClass,details:l(e)}}),f=()=>{let n={totalNodes:e.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:t.value.length};return e.value.forEach(e=>{e.type===`approval`?n.approvalNodes++:e.type===`copy`?n.copyNodes++:e.type===`condition`&&n.conditionNodes++}),n};return{showPreview:n,previewSteps:r,previewStats:i,openPreview:()=>{r.value=d(),i.value=f(),n.value=!0},closePreview:()=>{n.value=!1}}}const Vt={class:`approval-workflow-container`},Ht={class:`floating-toolbar`},Ut={class:`add-menu-content`},Wt=[`onClick`],Gt={class:`menu-text`},Kt={key:0,class:`validation-success`},qt={class:`success-icon`},Jt={key:1,class:`validation-errors`},Yt={class:`error-summary`},Xt={class:`error-icon`},Zt={class:`error-list`},Qt={class:`error-header`},$t={class:`error-number`},en={class:`error-info`},tn={class:`error-node`},nn={class:`error-field`},rn={class:`error-message`},an={class:`error-actions`},on={class:`validation-footer`},sn={class:`preview-stats`},cn={class:`stat-item`},ln={class:`stat-value`},un={class:`stat-item approval`},dn={class:`stat-value`},fn={class:`stat-item copy`},pn={class:`stat-value`},mn={class:`stat-item condition`},hn={class:`stat-value`},gn={class:`stat-item edge`},_n={class:`stat-value`},vn={class:`preview-timeline`},yn={class:`step-connector`},bn={class:`step-dot`},xn={key:0,class:`step-line`},Sn={class:`step-content`},Cn={class:`step-header`},wn={class:`step-order`},Tn={class:`step-type-badge`},En={class:`step-title`},Dn={key:0,class:`step-details`},On={class:`detail-label`},kn={class:`warning-text`},An={key:0,class:`preview-empty`},jn={class:`preview-footer`};var Mn=n(m({name:`C_WorkFlow`,__name:`index`,props:{users:{default:()=>[]},roles:{default:()=>[]},departments:{default:()=>[]},modelValue:{},readonly:{type:Boolean,default:!1},allowCycles:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`update:modelValue`,`change`,`node-click`,`edge-click`,`save`,`validate-error`],setup(n,{expose:r,emit:i}){let s=n,m=i,h=e(),_=w(),{nodes:v,edges:x,showAddMenu:ee,menuPosition:C,showNodeConfig:k,currentNode:M,nodeTypes:P,workflowStats:L,commitCanvasChange:R,handleCanvasChanges:z,connectNodes:te,updateConnection:B,addNode:ne,onNodeClick:ie,closeAddMenu:se,handleConfigSave:ce,resetNodes:le,getCurrentWorkflowData:V,fitView:ue,deleteNode:de}=At(s,m,_),{validationErrors:H,showValidationErrors:U,validateWorkflow:W,validateCurrentWorkflow:G,jumpToErrorNode:K,getFieldDisplayName:fe,getErrorTypeText:pe,resetValidation:me}=It(v,x,_,{allowCycles:()=>s.allowCycles,onShowNodeConfig:e=>{s.readonly||(M.value=e,k.value=!0)},onValidateError:e=>m(`validate-error`,e)}),{showPreview:q,previewSteps:J,previewStats:Y,openPreview:he,closePreview:ge}=Bt(v,x),X=()=>{if(s.readonly)return;let e=W();if(H.value=e,e.length>0){h.error(`工作流验证失败: ${e[0].message}`),U.value=!0,m(`validate-error`,e);return}m(`save`,V()),h.success(`工作流保存成功`)},_e=()=>{he()},ve=()=>{ge(),X()},ye=()=>{s.readonly||(le(),me())};return r({validateWorkflow:W,getCurrentWorkflowData:V,saveWorkflow:X,previewWorkflow:_e,deleteNode:de,stats:L}),(e,r)=>(S(),u(`div`,Vt,[l(` 浮动工具栏 `),d(`div`,Ht,[p(D(N),{size:`small`,type:`primary`,disabled:n.readonly,onClick:X},{icon:A(()=>[p(D(t),{name:`mdi:content-save`,size:16})]),default:A(()=>[r[7]||=f(` 保存 `,-1)]),_:1},8,[`disabled`]),p(D(N),{size:`small`,onClick:_e},{icon:A(()=>[p(D(t),{name:`mdi:eye`,size:16})]),default:A(()=>[r[8]||=f(` 预览 `,-1)]),_:1}),p(D(N),{size:`small`,onClick:D(G),title:`检查工作流配置是否正确`},{icon:A(()=>[p(D(t),{name:`mdi:check-circle`,size:16})]),default:A(()=>[r[9]||=f(` 验证流程 `,-1)]),_:1},8,[`onClick`]),r[10]||=d(`div`,{class:`toolbar-divider`},null,-1),p(D(N),{size:`small`,onClick:D(ue),title:`适应窗口`},{icon:A(()=>[p(D(t),{name:`mdi:fit-to-screen`,size:16})]),_:1},8,[`onClick`]),p(D(N),{size:`small`,type:`error`,disabled:n.readonly,onClick:ye,title:`清空画布`},{icon:A(()=>[p(D(t),{name:`mdi:delete-sweep`,size:16})]),_:1},8,[`disabled`])]),l(` Vue Flow 画布 `),p(D(ae),{ref_key:`vueFlowRef`,ref:_,nodes:D(v),"onUpdate:nodes":r[0]||=e=>g(v)?v.value=e:null,edges:D(x),"onUpdate:edges":r[1]||=e=>g(x)?x.value=e:null,"node-types":D(P),class:`workflow-canvas`,"default-viewport":{zoom:1,x:0,y:0},"min-zoom":.5,"max-zoom":2,"fit-view-on-init":!0,"nodes-draggable":!n.readonly,"nodes-connectable":!n.readonly,"edges-updatable":!n.readonly,"delete-key-code":n.readonly?null:void 0,"elements-selectable":!0,onNodeClick:D(ie),onNodeDragStop:D(R),onNodesChange:D(z),onEdgesChange:D(z),onConnect:D(te),onEdgeUpdate:D(B),onPaneClick:D(se)},null,8,[`nodes`,`edges`,`node-types`,`nodes-draggable`,`nodes-connectable`,`edges-updatable`,`delete-key-code`,`onNodeClick`,`onNodeDragStop`,`onNodesChange`,`onEdgesChange`,`onConnect`,`onEdgeUpdate`,`onPaneClick`]),l(` 节点添加菜单 `),(S(),c(o,{to:`body`},[j(d(`div`,{class:`add-node-menu`,style:b({left:D(C).x+`px`,top:D(C).y+`px`})},[d(`div`,Ut,[(S(!0),u(a,null,T(D(oe),e=>(S(),u(`button`,{key:e.type,type:`button`,class:`add-menu-item`,onClick:t=>D(ne)(e.type)},[d(`div`,{class:y([`menu-icon`,e.iconClass])},[p(D(t),{name:e.icon,size:16},null,8,[`name`])],2),d(`span`,Gt,E(e.label),1)],8,Wt))),128))])],4),[[O,D(ee)]])])),l(` 节点配置弹窗 - 拆分到独立组件 `),p(Me,{show:D(k),"onUpdate:show":r[2]||=e=>g(k)?k.value=e:null,"current-node":D(M),users:n.users,departments:n.departments,onSave:D(ce),onCancel:r[3]||=e=>k.value=!1},null,8,[`show`,`current-node`,`users`,`departments`,`onSave`]),l(` 验证错误日志抽屉 `),p(D(F),{show:D(U),"onUpdate:show":r[5]||=e=>g(U)?U.value=e:null,width:450,placement:`right`},{default:A(()=>[p(D(I),{title:`流程验证结果`,closable:``},{footer:A(()=>[d(`div`,on,[p(D(N),{onClick:r[4]||=e=>U.value=!1},{default:A(()=>[...r[16]||=[f(`关闭`,-1)]]),_:1}),p(D(N),{type:`primary`,onClick:D(G)},{icon:A(()=>[p(D(t),{name:`mdi:refresh`,size:16})]),default:A(()=>[r[17]||=f(` 重新验证 `,-1)]),_:1},8,[`onClick`])])]),default:A(()=>[D(H).length===0?(S(),u(`div`,Kt,[d(`div`,qt,[p(D(t),{name:`mdi:check-circle`,size:32,color:`#52c41a`})]),r[11]||=d(`h3`,null,`验证通过`,-1),r[12]||=d(`p`,null,`流程结构和节点配置验证通过;审批执行、权限与业务规则由后端校验。`,-1)])):(S(),u(`div`,Jt,[d(`div`,Yt,[d(`div`,Xt,[p(D(t),{name:`mdi:alert-circle`,size:24,color:`#ff4d4f`})]),d(`h3`,null,`发现 `+E(D(H).length)+` 个问题`,1),r[13]||=d(`p`,null,`请修复以下问题后重新验证:`,-1)]),d(`div`,Zt,[(S(!0),u(a,null,T(D(H),(e,n)=>(S(),u(`div`,{key:`${e.nodeId}-${e.field}-${n}`,class:`error-item`},[d(`div`,Qt,[d(`span`,$t,E(n+1),1),d(`div`,en,[d(`strong`,tn,E(e.nodeName),1),d(`span`,nn,E(D(fe)(e.field)),1)]),d(`div`,{class:y([`error-type`,e.type])},E(D(pe)(e.type)),3)]),d(`div`,rn,E(e.message),1),d(`div`,an,[p(D(N),{size:`small`,type:`primary`,disabled:!e.nodeId,onClick:t=>D(K)(e.nodeId)},{icon:A(()=>[p(D(t),{name:`mdi:target`,size:16})]),default:A(()=>[r[14]||=f(` 定位节点 `,-1)]),_:1},8,[`disabled`,`onClick`])])]))),128))]),r[15]||=d(`div`,{class:`validation-tips`},[d(`h4`,null,`💡 常见问题解决方案:`),d(`ul`,null,[d(`li`,null,[d(`strong`,null,`审批人未设置:`),f(`点击审批节点,在弹窗中选择审批人员 `)]),d(`li`,null,[d(`strong`,null,`条件分支未配置:`),f(`点击条件节点,添加至少一个条件分支 `)]),d(`li`,null,[d(`strong`,null,`节点连接断开:`),f(` 检查节点之间的连线是否正确 `)])])],-1)]))]),_:1})]),_:1},8,[`show`]),l(` 流程预览抽屉 `),p(D(F),{show:D(q),"onUpdate:show":r[6]||=e=>g(q)?q.value=e:null,width:520,placement:`right`},{default:A(()=>[p(D(I),{title:`流程预览`,closable:``},{footer:A(()=>[d(`div`,jn,[p(D(N),{onClick:D(ge)},{default:A(()=>[...r[24]||=[f(`关闭`,-1)]]),_:1},8,[`onClick`]),p(D(N),{type:`primary`,onClick:ve},{icon:A(()=>[p(D(t),{name:`mdi:content-save`,size:16})]),default:A(()=>[r[25]||=f(` 确认并保存 `,-1)]),_:1})])]),default:A(()=>[d(`div`,sn,[d(`div`,cn,[d(`span`,ln,E(D(Y).totalNodes),1),r[18]||=d(`span`,{class:`stat-label`},`总节点`,-1)]),d(`div`,un,[d(`span`,dn,E(D(Y).approvalNodes),1),r[19]||=d(`span`,{class:`stat-label`},`审批`,-1)]),d(`div`,fn,[d(`span`,pn,E(D(Y).copyNodes),1),r[20]||=d(`span`,{class:`stat-label`},`抄送`,-1)]),d(`div`,mn,[d(`span`,hn,E(D(Y).conditionNodes),1),r[21]||=d(`span`,{class:`stat-label`},`条件`,-1)]),d(`div`,gn,[d(`span`,_n,E(D(Y).totalEdges),1),r[22]||=d(`span`,{class:`stat-label`},`连线`,-1)])]),d(`div`,vn,[(S(!0),u(a,null,T(D(J),(e,n)=>(S(),u(`div`,{key:e.node.id,class:y([`preview-step`,e.colorClass])},[l(` 时间线连接线 `),d(`div`,yn,[d(`div`,bn,[p(D(t),{name:e.icon,size:16},null,8,[`name`])]),n<D(J).length-1?(S(),u(`div`,xn)):l(`v-if`,!0)]),l(` 步骤内容 `),d(`div`,Sn,[d(`div`,Cn,[d(`span`,wn,`步骤 `+E(e.order),1),d(`span`,Tn,E(e.nodeTypeLabel),1)]),d(`div`,En,E(e.node.data.title),1),e.details.length>0?(S(),u(`div`,Dn,[(S(!0),u(a,null,T(e.details,(e,n)=>(S(),u(`div`,{key:n,class:y([`step-detail-item`,{"is-warning":e.type===`warning`}])},[d(`span`,On,E(e.label)+`:`,1),l(` 审批方式 badge `),e.type===`mode`?(S(),u(`span`,{key:0,class:y([`mode-badge`,e.modeKey])},E(e.value),3)):e.type===`users`?(S(),u(a,{key:1},[l(` 人员 tags `),(S(!0),u(a,null,T(e.users,e=>(S(),c(D(re),{key:e.name,size:`small`,bordered:!1,round:``,class:`user-tag`},{icon:A(()=>[p(D(t),{name:`mdi:account`,size:12})]),default:A(()=>[f(` `+E(e.name),1)]),_:2},1024))),128))],64)):e.type===`warning`?(S(),u(a,{key:2},[l(` 警告文案 `),d(`span`,kn,` ⚠️ `+E(e.value),1)],2112)):(S(),u(a,{key:3},[l(` 普通文本 `),d(`span`,null,E(e.value),1)],2112))],2))),128))])):l(`v-if`,!0)])],2))),128))]),D(J).length===0?(S(),u(`div`,An,[p(D(t),{name:`mdi:file-document-outline`,size:48,color:`#d1d5db`}),r[23]||=d(`p`,null,`暂无流程节点`,-1)])):l(`v-if`,!0)]),_:1})]),_:1},8,[`show`])]))}}),[[`__scopeId`,`data-v-0ce70378`]]);export{At as i,Bt as n,It as r,Mn as t};
|
|
1
|
+
import{a as e,t}from"./data2.js";import{t as n}from"./feedback.js";import{t as r}from"./C_Icon2.js";import{t as i}from"./export-helper.js";import{Fragment as a,Teleport as o,computed as s,createBlock as c,createCommentVNode as l,createElementBlock as u,createElementVNode as d,createTextVNode as f,createVNode as p,defineComponent as m,inject as h,isRef as g,markRaw as _,nextTick as v,normalizeClass as y,normalizeStyle as b,onBeforeUnmount as x,onMounted as ee,openBlock as S,provide as C,ref as w,renderList as T,toDisplayString as E,unref as D,vShow as O,watch as k,withCtx as A,withDirectives as j}from"vue";import{NAvatar as M,NButton as N,NCard as P,NDrawer as F,NDrawerContent as I,NInput as L,NModal as R,NRadio as z,NRadioGroup as te,NSelect as B,NSpace as ne,NTag as re,NTree as ie}from"naive-ui";import{VueFlow as ae}from"@vue-flow/core";const oe=[{type:`approval`,label:`审批人`,icon:`mdi:account-check`,iconClass:`approval-icon`},{type:`copy`,label:`抄送人`,icon:`mdi:email-outline`,iconClass:`copy-icon`},{type:`condition`,label:`条件分支`,icon:`mdi:source-branch`,iconClass:`condition-icon`}],se=[{value:`any`,label:`或签`,desc:`任意一人同意即可通过`},{value:`all`,label:`会签`,desc:`所有人都同意才能通过`},{value:`sequence`,label:`顺序审批`,desc:`按选择顺序依次审批`}],ce=[{label:`申请金额`,value:`amount`},{label:`申请人部门`,value:`department`},{label:`申请类型`,value:`type`},{label:`紧急程度`,value:`priority`}],le=[{label:`等于`,value:`equals`},{label:`大于`,value:`greater_than`},{label:`小于`,value:`less_than`},{label:`包含`,value:`contains`},{label:`不等于`,value:`not_equals`}],V={start:`发起人`,approval:`审批人`,copy:`抄送人`,condition:`条件分支`},ue={approval:`审批人设置`,copy:`抄送人设置`,condition:`条件分支设置`},de={approvers:`审批人`,conditions:`条件配置`,connection:`节点连接`,nodeId:`节点标识`,edgeId:`连线标识`,start:`开始节点`,cycle:`循环策略`,copyUsers:`抄送人`},H={required:`必填`,invalid:`结构错误`,incomplete:`不完整`,warning:`警告`,error:`错误`},U={id:`start-1`,type:`start`,position:{x:150,y:100},data:{title:`发起人`,status:`active`,initiators:[]}},W=e=>{let t=Array.from(e.trim()).slice(0,2).join(``).toUpperCase()||`?`,n=`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 80 80"><rect width="80" height="80" rx="40" fill="hsl(${Array.from(e).reduce((e,t)=>(e*31+(t.codePointAt(0)??0))%360,210)} 55% 46%)"/><text x="40" y="48" text-anchor="middle" font-family="sans-serif" font-size="28" fill="white">${t.replace(/[&<>"']/g,e=>({"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`})[e])}</text></svg>`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(n)}`};let G=0;const K=e=>typeof crypto<`u`&&`randomUUID`in crypto?`${e}-${crypto.randomUUID()}`:`${e}-${Date.now()}-${++G}`,fe=()=>K(`condition`),pe=(e,t)=>`edge-${e}-${t}`,me=()=>({id:fe(),name:``,field:``,operator:`equals`,value:``}),q=new Set([`equals`,`not_equals`,`greater_than`,`less_than`,`contains`]);function J(e){if(!e||typeof e!=`object`)return!1;let t=e;return[t.id,t.name,t.field,t.value].every(e=>typeof e==`string`&&e.trim().length>0)&&q.has(t.operator)}const Y={key:0,class:`max-h-60vh overflow-y-auto`},he={class:`config-section`},ge={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},X={class:`border rounded-lg p-3 mb-4 max-h-50 overflow-y-auto`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},_e={key:0,class:`rounded-lg p-4 mb-4 border`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},ve={class:`mb-2 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},ye={class:`flex flex-wrap gap-3`},be={class:`flex items-center gap-2`},xe={class:`font-medium text-sm`},Se={class:`text-xs px-1.5 py-0.5 rounded`,style:{color:`var(--n-text-color-3)`,background:`var(--n-color-embedded)`}},Ce={key:0,class:`mt-4`},we={class:`flex flex-col gap-1`},Te={class:`text-sm`},Ee={class:`text-xs`,style:{color:`var(--n-text-color-3)`}},De={class:`max-h-60vh overflow-y-auto`},Oe={class:`config-section`},ke={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},Ae={class:`space-y-3`},je={class:`flex items-center gap-3 flex-nowrap min-h-10 p-2`};var Me=i(m({__name:`NodeConfigModal`,props:{show:{type:Boolean,default:!1},currentNode:{default:null},users:{default:()=>[]},departments:{default:()=>[]}},emits:[`update:show`,`save`,`cancel`],setup(e,{emit:i}){let o=e,m=i,h=n(),g=w(``),_=w([]),v=w([]),y=w(`any`),b=w(!1),x=w([]),ee=s({get:()=>o.show,set:e=>m(`update:show`,e)}),C=s(()=>o.currentNode?.type===`start`?`发起人设置`:ue[o.currentNode?.type]||`节点设置`),O=s(()=>{let e=[],t=new Map;return o.departments?.forEach(e=>{t.has(e.id)||t.set(e.id,{key:`dept-${e.id}`,label:`${e.name} ${e.manager?`(负责人: ${e.manager})`:``}`,children:[],isLeaf:!1,disabled:!0})}),(o.users?.filter(e=>!g.value||e.name.includes(g.value)||e.department.includes(g.value))||[]).forEach(e=>{let n=o.departments?.find(t=>t.name===e.department);n&&t.has(n.id)&&t.get(n.id).children.push({key:e.id,label:`${e.name}${e.role?`(${e.role})`:``}`,isLeaf:!0,user:e})}),t.forEach(t=>{t.children.length>0&&e.push(t)}),e}),j=s(()=>o.users?.filter(e=>_.value.includes(e.id))||[]),F=s(()=>o.users?.filter(e=>v.value.includes(e.id))||[]),I=s(()=>o.users?.filter(e=>_.value.includes(e.id))||[]),ae=e=>{_.value=e.filter(e=>!e.startsWith(`dept-`))},oe=e=>{v.value=e.filter(e=>!e.startsWith(`dept-`))},V=e=>{_.value=_.value.filter(t=>t!==e)},de=e=>{v.value=v.value.filter(t=>t!==e)},H=e=>{_.value=_.value.filter(t=>t!==e)},U=()=>x.value.push(me()),G=e=>x.value.splice(e,1),K=e=>{let{initiators:t}=e.data;_.value=t?t.map(e=>e.id):[]},fe=e=>{_.value=(e.data.approvers||[]).map(e=>e.id),y.value=e.data.approvalMode||`any`},pe=e=>{v.value=(e.data.copyUsers||[]).map(e=>e.id)},q=e=>{x.value=t(e.data.conditions||[])},Me=async()=>{if(_.value.length===0)return h.error(`请选择发起人`),!1;let e=I.value;return m(`save`,{initiators:e}),h.success(`已设置 ${e.length} 个发起人`),!0},Ne=async()=>{if(_.value.length===0)return h.error(`请至少选择一个审批人`),!1;let e=j.value;return m(`save`,{approvers:e,approvalMode:y.value}),h.success(`已设置 ${e.length} 个审批人`),!0},Pe=async()=>{let e=F.value;return m(`save`,{copyUsers:e}),h.success(`已设置 ${e.length} 个抄送人`),!0},Z=async()=>x.value.length===0?(h.error(`请至少添加一个条件分支`),!1):x.value.some(e=>!J(e))?(h.error(`请完善所有条件配置`),!1):(m(`save`,{conditions:t(x.value)}),h.success(`已设置 ${x.value.length} 个条件分支`),!0),Fe=async()=>{if(!o.currentNode)return!1;b.value=!0;try{let e={start:Me,approval:Ne,copy:Pe,condition:Z}[o.currentNode.type];return e?await e():!1}catch(e){return h.error(`保存配置失败`,e),!1}finally{b.value=!1}},Ie=()=>{m(`cancel`)};k(()=>o.currentNode,e=>{if(e)switch(g.value=``,e.type){case`start`:K(e);break;case`approval`:fe(e);break;case`copy`:pe(e);break;case`condition`:q(e);break}},{immediate:!0});let Le=s(()=>[`start`,`approval`,`copy`].includes(o.currentNode?.type||``)),Q=s(()=>{let e=o.currentNode?.type;return e===`start`?{icon:`mdi:account-star`,title:`选择发起人`,checkedKeys:_.value,onSelect:ae,selectedUsers:I.value,selectedLabel:`已选择发起人`,tagType:`primary`,onRemove:H}:e===`approval`?{icon:`mdi:account-check`,title:`选择审批人`,checkedKeys:_.value,onSelect:ae,selectedUsers:j.value,selectedLabel:`已选择审批人`,tagType:`info`,onRemove:V}:e===`copy`?{icon:`mdi:email-outline`,title:`选择抄送人`,checkedKeys:v.value,onSelect:oe,selectedUsers:F.value,selectedLabel:`已选择抄送人`,tagType:`success`,onRemove:de}:{icon:``,title:``,checkedKeys:[],onSelect:()=>{},selectedUsers:[],selectedLabel:``,tagType:`default`,onRemove:()=>{}}});return(e,t)=>(S(),c(D(R),{show:ee.value,"onUpdate:show":t[2]||=e=>ee.value=e,style:{width:`900px`},"mask-closable":!1,preset:`dialog`,title:C.value,"positive-text":`确定`,"negative-text":`取消`,loading:b.value,onPositiveClick:Fe,onNegativeClick:Ie},{default:A(()=>[l(` 公共选择面板 `),Le.value?(S(),u(`div`,Y,[d(`div`,he,[d(`h4`,ge,[Q.value.icon?(S(),c(D(r),{key:0,name:Q.value.icon,size:16},null,8,[`name`])):l(`v-if`,!0),f(` `+E(Q.value.title),1)]),p(D(L),{value:g.value,"onUpdate:value":t[0]||=e=>g.value=e,placeholder:`搜索用户姓名或部门`,clearable:``,class:`mb-4`},{prefix:A(()=>[p(D(r),{name:`mdi:magnify`,size:16})]),_:1},8,[`value`]),d(`div`,X,[p(D(ie),{data:O.value,"checked-keys":Q.value.checkedKeys,selectable:!1,checkable:``,cascade:``,"virtual-scroll":!0,style:{"max-height":`300px`},"onUpdate:checkedKeys":Q.value.onSelect},null,8,[`data`,`checked-keys`,`onUpdate:checkedKeys`])]),Q.value.selectedUsers.length>0?(S(),u(`div`,_e,[d(`h5`,ve,E(Q.value.selectedLabel)+` (`+E(Q.value.selectedUsers.length)+`) `,1),d(`div`,ye,[(S(!0),u(a,null,T(Q.value.selectedUsers,e=>(S(),c(D(re),{key:e.id,closable:``,type:Q.value.tagType,onClose:t=>Q.value.onRemove(e.id)},{default:A(()=>[d(`div`,be,[p(D(M),{src:e.avatar,"fallback-src":D(W)(e.name),size:`small`},null,8,[`src`,`fallback-src`]),d(`span`,xe,E(e.name),1),d(`span`,Se,E(e.department),1)])]),_:2},1032,[`type`,`onClose`]))),128))])])):l(`v-if`,!0)]),l(` 审批节点时附带审批模式 `),o.currentNode?.type===`approval`?(S(),u(`div`,Ce,[t[3]||=d(`h5`,{class:`mb-3 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},` 审批模式 `,-1),p(D(te),{value:y.value,"onUpdate:value":t[1]||=e=>y.value=e},{default:A(()=>[p(D(ne),{vertical:``},{default:A(()=>[(S(!0),u(a,null,T(D(se),e=>(S(),c(D(z),{key:e.value,value:e.value},{default:A(()=>[d(`div`,we,[d(`strong`,Te,E(e.label),1),d(`span`,Ee,E(e.desc),1)])]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`value`])])):l(`v-if`,!0)])):o.currentNode?.type===`condition`?(S(),u(a,{key:1},[l(` 条件节点配置 `),d(`div`,De,[d(`div`,Oe,[d(`h4`,ke,[p(D(r),{name:`mdi:source-branch`,size:16}),t[4]||=f(` 条件分支设置 `,-1)]),d(`div`,Ae,[(S(!0),u(a,null,T(x.value,(e,t)=>(S(),u(`div`,{key:e.id,class:`condition-item`},[p(D(P),{size:`small`,class:`border border-gray-200 hover:border-gray-300 transition-colors`},{default:A(()=>[d(`div`,je,[p(D(L),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`分支名称`,style:{width:`150px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),p(D(B),{value:e.field,"onUpdate:value":t=>e.field=t,placeholder:`选择字段`,options:D(ce),style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),p(D(B),{value:e.operator,"onUpdate:value":t=>e.operator=t,placeholder:`操作符`,options:D(le),style:{width:`100px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),p(D(L),{value:e.value,"onUpdate:value":t=>e.value=t,placeholder:`值`,style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),p(D(N),{quaternary:``,type:`error`,onClick:e=>G(t),class:`flex-shrink-0 ml-auto`},{icon:A(()=>[p(D(r),{name:`mdi:delete`,size:16})]),_:1},8,[`onClick`])])]),_:2},1024)]))),128)),p(D(N),{dashed:``,block:``,onClick:U,class:`w-full`},{icon:A(()=>[p(D(r),{name:`mdi:plus`,size:16})]),default:A(()=>[t[5]||=f(` 添加条件 `,-1)]),_:1})])])])],2112)):l(`v-if`,!0)]),_:1},8,[`show`,`title`,`loading`]))}}),[[`__scopeId`,`data-v-e1ac2c54`]]);const Ne=[`id`,`type`,`position`,`data`,`selected`,`dragging`,`connectable`,`selectable`,`deletable`,`dragHandle`,`width`,`height`,`parentNode`,`zIndex`,`extent`,`expandParent`],Pe=[`id`,`source`,`target`,`sourceHandle`,`targetHandle`,`type`,`animated`,`hidden`,`deletable`,`selectable`,`data`,`style`,`label`,`labelStyle`,`labelShowBg`,`labelBgStyle`,`labelBgPadding`,`labelBgBorderRadius`,`markerStart`,`markerEnd`];function Z(e){return new Map(e.map(e=>[e.id,new Set(Object.keys(e))]))}function Fe(e,t,n){return Object.fromEntries(t.filter(e=>n?.has(String(e))).map(t=>[t,e[t]]))}function Ie(e,n){return t({...Fe(e,Ne,n),id:e.id,type:e.type,position:{x:e.position.x,y:e.position.y},data:e.data})}function Le(e,n){return t({...Fe(e,Pe,n),id:e.id,source:e.source,target:e.target})}function Q(e,t){let n=new Set(e.map(e=>e.id));for(let e of t.keys())n.has(e)||t.delete(e)}const Re={class:`start-node`},ze={class:`node-content`},Be={class:`node-info`},Ve={class:`node-text`},He={key:0,class:`initiator-name`},Ue={key:1,class:`placeholder-text`};var We=i(m({__name:`StartNode`,props:{id:{},data:{}},setup(e){let t=e,n=h(`showAddMenu`),i=s(()=>{let{initiators:e}=t.data;return!e||!Array.isArray(e)||e.length===0?``:e.map(e=>e?.name||`未知用户`).join(`、`)}),a=e=>{e.stopPropagation();let r=e.currentTarget.getBoundingClientRect();n&&n({x:r.left+r.width/2,y:r.bottom+10},t.id)};return(t,n)=>(S(),u(`div`,Re,[l(` 主要内容区域 `),d(`div`,ze,[n[0]||=d(`div`,{class:`node-icon`},`🚀`,-1),d(`div`,Be,[d(`div`,Ve,E(e.data.title),1),i.value?(S(),u(`div`,He,E(i.value),1)):(S(),u(`div`,Ue,`点击设置发起人`))])]),l(` 添加节点按钮 `),d(`button`,{type:`button`,class:`add-node-btn`,onClick:a,title:`添加下一个节点`},[p(D(r),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-6fb2df95`]]);const Ge={class:`approval-node`},Ke={class:`node-card`},qe={class:`node-header`},Je={class:`node-icon`},Ye={class:`node-title`},Xe={key:0,class:`node-badge`},Ze={key:1,class:`approval-mode-badge`},Qe={class:`node-content`},$e={key:0,class:`approvers-list`},et={class:`approver-info`},tt={class:`approver-avatar`},nt={class:`approver-details`},rt={class:`approver-name`},it={class:`approver-dept`},at={class:`approver-role`},ot={key:0,class:`more-count`},st={key:1,class:`placeholder`};var ct=i(m({__name:`ApprovalNode`,props:{id:{},data:{}},setup(e){let t=e,n=h(`showAddMenu`),i=h(`deleteNode`),o=s(()=>t.data.approvers??[]),c=s(()=>o.value.length),f=s(()=>o.value.slice(0,3)),m=s(()=>Math.max(0,c.value-3)),g=e=>({any:`或签`,all:`会签`,sequence:`顺序`})[e]||``,_=e=>{e.stopPropagation();let r=e.currentTarget.getBoundingClientRect();n&&n({x:r.left+r.width/2,y:r.bottom+10},t.id)},v=e=>{e.stopPropagation(),i&&i(t.id)};return(t,n)=>(S(),u(`div`,Ge,[d(`div`,{class:y([`status-indicator`,e.data.status])},null,2),l(` 删除按钮 `),d(`button`,{type:`button`,class:`delete-btn`,onClick:v,title:`删除节点`},[p(D(r),{name:`mdi:close`,size:12})]),d(`div`,Ke,[d(`div`,qe,[d(`div`,Je,[p(D(r),{name:`mdi:account`,size:12,color:`white`})]),d(`span`,Ye,E(e.data.title),1),c.value>0?(S(),u(`div`,Xe,E(c.value),1)):l(`v-if`,!0),e.data.approvalMode?(S(),u(`div`,Ze,E(g(e.data.approvalMode)),1)):l(`v-if`,!0)]),d(`div`,Qe,[c.value>0?(S(),u(`div`,$e,[(S(!0),u(a,null,T(f.value,e=>(S(),u(`div`,{key:e.id,class:`approver-tag`},[d(`div`,et,[d(`div`,tt,[p(D(M),{src:e.avatar,"fallback-src":D(W)(e.name),size:`small`},null,8,[`src`,`fallback-src`])]),d(`div`,nt,[d(`span`,rt,E(e.name),1),d(`span`,it,E(e.department),1),d(`span`,at,E(e.role),1)])])]))),128)),m.value>0?(S(),u(`div`,ot,`+`+E(m.value),1)):l(`v-if`,!0)])):(S(),u(`div`,st,[p(D(r),{name:`mdi:account-plus`,size:24,color:`#9ca3af`}),n[0]||=d(`span`,null,`请设置审批人`,-1)]))])]),d(`button`,{type:`button`,class:`add-node-btn`,onClick:_,title:`添加下一个节点`},[p(D(r),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-e6968a42`]]);const lt={class:`copy-node`},ut={class:`node-card`},dt={class:`node-header`},ft={class:`node-title`},pt={key:0,class:`node-badge`},mt={class:`node-content`},ht={key:0,class:`copy-users-list`},gt={key:0,class:`more-count`},_t={key:1,class:`placeholder`};var vt=i(m({__name:`CopyNode`,props:{id:{},data:{}},setup(e){let t=e,n=h(`showAddMenu`),i=h(`deleteNode`),o=s(()=>t.data.copyUsers??[]),c=s(()=>o.value.length),f=s(()=>o.value.slice(0,3)),m=s(()=>Math.max(0,c.value-3)),g=e=>{e.stopPropagation();let r=e.currentTarget.getBoundingClientRect();n&&n({x:r.left+r.width/2,y:r.bottom+10},t.id)},_=e=>{e.stopPropagation(),i&&i(t.id)};return(t,n)=>(S(),u(`div`,lt,[d(`div`,{class:y([`status-indicator`,e.data.status])},null,2),l(` 删除按钮 `),d(`button`,{type:`button`,class:`delete-btn`,onClick:_,title:`删除节点`},[p(D(r),{name:`mdi:close`,size:12})]),d(`div`,ut,[d(`div`,dt,[n[0]||=d(`div`,{class:`node-icon`},`📋`,-1),d(`span`,ft,E(e.data.title),1),c.value>0?(S(),u(`div`,pt,E(c.value),1)):l(`v-if`,!0)]),d(`div`,mt,[c.value>0?(S(),u(`div`,ht,[(S(!0),u(a,null,T(f.value,e=>(S(),u(`div`,{key:e.id,class:`copy-user-tag`},E(e.name),1))),128)),m.value>0?(S(),u(`div`,gt,`+`+E(m.value),1)):l(`v-if`,!0)])):(S(),u(`div`,_t,`请设置抄送人`))])]),d(`button`,{type:`button`,class:`add-node-btn`,onClick:g,title:`添加下一个节点`},[p(D(r),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-010e7ec8`]]);const yt={class:`condition-node`},bt={class:`node-card`},xt={class:`node-header`},St={class:`node-title`},Ct={key:0,class:`node-badge`},wt={class:`node-content`},Tt={key:0,class:`conditions-list`},Et={key:0,class:`more-count`},Dt={key:1,class:`placeholder`};var Ot=i(m({__name:`ConditionNode`,props:{id:{},data:{}},setup(e){let t=e,n=h(`showAddMenu`),i=h(`deleteNode`),o=s(()=>t.data.conditions??[]),c=s(()=>o.value.length),f=s(()=>o.value.slice(0,2)),m=s(()=>Math.max(0,c.value-2)),g=e=>{e.stopPropagation();let r=e.currentTarget.getBoundingClientRect();n&&n({x:r.left+r.width/2,y:r.bottom+10},t.id)},_=e=>{e.stopPropagation(),i&&i(t.id)};return(t,n)=>(S(),u(`div`,yt,[d(`div`,{class:y([`status-indicator`,e.data.status])},null,2),l(` 删除按钮 `),d(`button`,{type:`button`,class:`delete-btn`,onClick:_,title:`删除节点`},[p(D(r),{name:`mdi:close`,size:12})]),d(`div`,bt,[d(`div`,xt,[n[0]||=d(`div`,{class:`node-icon`},`🔀`,-1),d(`span`,St,E(e.data.title),1),c.value>0?(S(),u(`div`,Ct,E(c.value),1)):l(`v-if`,!0)]),d(`div`,wt,[c.value>0?(S(),u(`div`,Tt,[(S(!0),u(a,null,T(f.value,e=>(S(),u(`div`,{key:e.id,class:`condition-tag`},[n[1]||=d(`span`,{class:`condition-icon`},`→`,-1),d(`span`,null,E(e.name||`条件`+(f.value.indexOf(e)+1)),1)]))),128)),m.value>0?(S(),u(`div`,Et,`+`+E(m.value),1)):l(`v-if`,!0)])):(S(),u(`div`,Dt,`请设置分支条件`))])]),d(`button`,{type:`button`,class:`add-node-btn`,onClick:g,title:`添加下一个节点`},[p(D(r),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-5ede8782`]]);const kt={start:_(We),approval:_(ct),copy:_(vt),condition:_(Ot)};function At(r,i,a){let o=n(),c=w(t(r.modelValue?.nodes??[U])),l=w(t(r.modelValue?.edges??[])),u=Z(c.value),d=Z(l.value),f=w(r.modelValue?t(r.modelValue.config):{version:`1.0`,createdAt:new Date().toISOString()}),p=w(!1),m=w({x:0,y:0}),h=w(!1),g=w(null),_=w(null),y=new Set,b=!1,S=(e,t)=>{let n=setTimeout(()=>{y.delete(n),b||e()},t);y.add(n)},T=s(()=>kt),E=s(()=>{let e={totalNodes:c.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0};return c.value.forEach(t=>{t.type===`approval`?e.approvalNodes++:t.type===`copy`?e.copyNodes++:t.type===`condition`&&e.conditionNodes++}),e}),D=()=>(Q(c.value,u),Q(l.value,d),{nodes:c.value.map(e=>Ie(e,u.get(e.id))),edges:l.value.map(e=>Le(e,d.get(e.id))),...f.value!==void 0&&{config:t(f.value)}}),O=()=>{let e=D();i(`update:modelValue`,e),i(`change`,e)},A=!1,j=0,M=()=>{if(b||r.readonly||A)return;A=!0;let e=j;v(()=>{A=!1,!(b||r.readonly||e!==j)&&O()})},N=e=>{e.some(e=>e.type===`remove`)&&M()},P=(e,t)=>{let n={id:pe(e,t),source:e,target:t,animated:!0,type:`default`};return d.set(n.id,new Set(Object.keys(n))),n},F=(e,t)=>c.value.some(t=>t.id===e.source)&&c.value.some(t=>t.id===e.target)&&!l.value.some(n=>n.id!==t&&n.source===e.source&&n.target===e.target),I=e=>{r.readonly||!F(e)||(l.value=[...l.value,P(e.source,e.target)],M())},L=({edge:e,connection:t})=>{r.readonly||!l.value.some(t=>t.id===e.id)||!F(t,e.id)||(l.value=l.value.map(n=>n.id===e.id?{...n,source:t.source,target:t.target}:n),M())},R=(e=60,t=400)=>{v(()=>{b||S(()=>{a.value?.fitView?.({padding:e,duration:t})},100)})},z=(e,t)=>{r.readonly||(m.value={x:typeof e.x==`number`?e.x:0,y:typeof e.y==`number`?e.y:0},_.value=t||null,p.value=!0)},te=()=>{p.value=!1},B=e=>{if(r.readonly)return;let t=c.value.findIndex(t=>t.id===e);if(t===-1)return;if(c.value[t].type===`start`){o.warning(`不能删除开始节点`);return}let n=l.value.filter(t=>t.target===e),i=l.value.filter(t=>t.source===e);c.value.splice(t,1),l.value=l.value.filter(t=>t.source!==e&&t.target!==e),n.forEach(e=>{i.forEach(t=>{l.value.push(P(e.source,t.target))})}),c.value.forEach((e,n)=>{n>=t&&(e.position.y-=180)}),O(),o.success(`节点已删除`),R()};C(`showAddMenu`,z),C(`deleteNode`,B);let ne=()=>{let e=c.value.length-1,t=c.value[e];if(_.value){let n=c.value.findIndex(e=>e.id===_.value);n!==-1&&(e=n,t=c.value[e])}return{targetNodeIndex:e,targetNode:t}},re=(e,t)=>{let n={id:K(e),position:{x:t?.position.x??150,y:(t?.position.y??130)+180}},r={title:V[e],status:`pending`};switch(e){case`start`:return{...n,type:e,data:{...r,status:`active`}};case`approval`:return{...n,type:e,data:{...r,approvers:[],approvalMode:`any`}};case`copy`:return{...n,type:e,data:{...r,copyUsers:[]}};case`condition`:return{...n,type:e,data:{...r,conditions:[]}}}},ie=(e,t)=>{let n=l.value.filter(t=>t.source===e.id);l.value=l.value.filter(t=>t.source!==e.id),l.value.push(P(e.id,t.id)),n.forEach(e=>{l.value.push(P(t.id,e.target))})};return k(()=>r.modelValue,n=>{if(!n)return;let r=D(),i=n.nodes??[],a=n.edges??[];e(i,r.nodes)&&e(a,r.edges)&&e(n.config,f.value)||(j+=1,u=Z(i),d=Z(a),c.value=t(i),l.value=t(a),f.value=t(n.config))},{deep:!0}),ee(()=>{b=!1,v(()=>{b||S(()=>{a.value?.fitView?.({padding:80,includeHiddenNodes:!1,minZoom:.8,maxZoom:1.2,duration:600})},300)})}),x(()=>{b=!0,y.forEach(e=>clearTimeout(e)),y.clear()}),{nodes:c,edges:l,showAddMenu:p,menuPosition:m,showNodeConfig:h,currentNode:g,nodeTypes:T,workflowStats:E,commitCanvasChange:M,handleCanvasChanges:N,connectNodes:I,updateConnection:L,addNode:e=>{if(!r.readonly)try{let{targetNodeIndex:t,targetNode:n}=ne(),r=re(e,n);u.set(r.id,new Set(Object.keys(r))),c.value.splice(t+1,0,r);for(let e=t+2;e<c.value.length;e++)c.value[e].position.y+=180;n&&ie(n,r),p.value=!1,_.value=null,O(),R()}catch(e){o.error(`添加节点失败,请重试`,e)}},onNodeClick:e=>{let t=c.value.find(t=>t.id===e.node.id);t&&(r.readonly||(g.value=t,h.value=!0),i(`node-click`,Ie(t,u.get(t.id))))},closeAddMenu:te,handleConfigSave:e=>{if(r.readonly||!g.value)return;let n=c.value.findIndex(e=>e.id===g.value.id);if(n!==-1){let r=Ie(c.value[n],u.get(g.value.id));Object.assign(r.data,t(e)),c.value.splice(n,1,r),g.value=r}O(),h.value=!1,o.success(`节点配置已保存`)},resetNodes:()=>{r.readonly||(c.value=t([U]),l.value=[],u=Z(c.value),d.clear(),O(),R(80,600),o.success(`画布已清空`))},getCurrentWorkflowData:D,fitView:()=>{let e=a.value;if(!e?.fitView){o.warning(`画布未准备就绪,请稍后重试`);return}v(()=>{b||a.value!==e||e.fitView({padding:50,includeHiddenNodes:!1,minZoom:.5,maxZoom:1.5,duration:800})}),o.success(`已适应窗口大小`)},deleteNode:B}}function $(e,t,n){return{nodeId:e?.id??``,nodeName:e?.data.title??`流程结构`,field:t,message:n,type:`invalid`,severity:`high`}}function jt(e){let t=new Set,n=new Set;for(let r of e.keys()){if(t.has(r))continue;let i=[{id:r,offset:0}];for(t.add(r),n.add(r);i.length;){let r=i[i.length-1],a=e.get(r.id);if(r.offset>=a.length){n.delete(r.id),i.pop();continue}let o=a[r.offset++];if(n.has(o))return o;t.has(o)||(t.add(o),n.add(o),i.push({id:o,offset:0}))}}}function Mt(e,t){let n=new Map;return e.forEach(e=>{e.id?.trim()?n.has(e.id)?t.push($(e,`nodeId`,`节点 id「${e.id}」重复,请使用唯一标识`)):n.set(e.id,e):t.push($(e,`nodeId`,`节点 id 不能为空`))}),n}function Nt(e,t,n){let r=new Map([...e.keys()].map(e=>[e,[]])),i=new Set;return t.forEach(t=>{let a=e.get(t.source),o=e.get(t.target);if((!t.id?.trim()||i.has(t.id))&&n.push($(a??o,`edgeId`,`连线 id 不能为空或重复`)),i.add(t.id),!a||!o){let e=[!a&&t.source,!o&&t.target].filter(e=>e!==!1).map(e=>e||`空标识`);n.push($(a??o,`connection`,`连线「${t.id}」指向不存在的节点:${e.join(`、`)}`));return}r.get(a.id).push(o.id)}),r}function Pt(e,t,n,r){let i=new Set([e.id]),a=[e.id];for(let e=0;e<a.length;e++)n.get(a[e])?.forEach(e=>{i.has(e)||(i.add(e),a.push(e))});t.forEach(e=>{i.has(e.id)||r.push($(e,`connection`,`此节点无法从开始节点到达,请检查连线方向与流程连接`))})}function Ft(e,t,n={}){let r=[],i=Mt(e,r),a=e.filter(e=>e.type===`start`);a.length!==1&&r.push($(a[0],`start`,`流程必须包含且仅包含一个开始节点,当前为 ${a.length} 个`));let o=Nt(i,t,r);if(a.length===1&&i.has(a[0].id)&&Pt(a[0],i,o,r),n.allowCycles===!1){let e=jt(o);e!==void 0&&r.push($(i.get(e),`cycle`,`当前审批流程不允许循环,请移除回指连线或由业务启用循环策略`))}return r}function It(e,t,r,i){let a=n(),o=w([]),s=w(!1),c,l=()=>{let n=typeof i?.allowCycles==`function`?i.allowCycles():i?.allowCycles,r=Ft(e.value,t.value,{allowCycles:n});return e.value.forEach(e=>{if(e.type===`approval`&&(`approvers`in e.data&&Array.isArray(e.data.approvers)?e.data.approvers:[]).length===0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`approvers`,message:`审批节点必须设置至少一个审批人,否则流程无法正常运行`,type:`required`}),e.type===`condition`){let t=`conditions`in e.data&&Array.isArray(e.data.conditions)?e.data.conditions:[];if(t.length===0)r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`条件分支节点必须配置至少一个分支条件,否则无法进行条件判断`,type:`required`});else{let n=t.filter(e=>!J(e));n.length>0&&r.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`有 ${n.length} 个条件分支配置不完整,请完善所有必填字段`,type:`incomplete`})}}}),r};return x(()=>{c&&clearTimeout(c)}),{validationErrors:o,showValidationErrors:s,validateWorkflow:l,validateCurrentWorkflow:()=>{let e=l();o.value=e,e.length===0?(a.success(`流程结构和节点配置验证通过;执行规则由业务后端校验`),s.value=!1):(a.error(`发现 ${e.length} 个问题,请查看详细错误`),s.value=!0,i?.onValidateError?.(e))},jumpToErrorNode:t=>{let n=e.value.find(e=>e.id===t);!n||!r.value||(r.value.setCenter(n.position.x,n.position.y,{zoom:1.2,duration:800}),c&&clearTimeout(c),c=setTimeout(()=>{c=void 0,e.value.includes(n)&&(i?.onShowNodeConfig?.(n),s.value=!1)},900),a.info(`已定位到节点:${n.data.title}`))},getFieldDisplayName:e=>de[e]||e,getErrorTypeText:e=>H[e]||e,resetValidation:()=>{c&&clearTimeout(c),c=void 0,o.value=[],s.value=!1}}}const Lt={start:{label:`发起人`,icon:`mdi:play-circle`,colorClass:`start`},approval:{label:`审批节点`,icon:`mdi:account-check`,colorClass:`approval`},copy:{label:`抄送节点`,icon:`mdi:email-outline`,colorClass:`copy`},condition:{label:`条件分支`,icon:`mdi:source-branch`,colorClass:`condition`}},Rt={any:`或签(任一审批人通过即可)`,all:`会签(所有审批人必须通过)`,sequence:`顺序审批(按顺序依次审批)`},zt={equals:`等于`,not_equals:`不等于`,greater_than:`大于`,less_than:`小于`,contains:`包含`};function Bt(e,t){let n=w(!1),r=w([]),i=w({totalNodes:0,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:0}),a=e=>{let t=e.initiators||[];return t.length>0?[{type:`users`,label:`发起人`,users:t}]:[{type:`text`,label:`发起人`,value:`所有人`}]},o=e=>{let t=e.approvalMode||`any`,n=e.approvers||[],r=[{type:`mode`,label:`审批方式`,value:Rt[t]||t,modeKey:t}];return n.length>0?r.push({type:`users`,label:`审批人`,users:n}):r.push({type:`warning`,label:`审批人`,value:`未设置`}),r},s=e=>{let t=e.copyUsers||[];return t.length>0?[{type:`users`,label:`抄送人`,users:t}]:[{type:`text`,label:`抄送人`,value:`未设置`}]},c=e=>{let t=e.conditions||[];return t.length===0?[{type:`warning`,label:`条件分支`,value:`未配置`}]:t.map((e,t)=>{let n=zt[e.operator]||e.operator;return{type:`text`,label:`分支 ${t+1}`,value:`${e.name||`未命名`} — ${e.field||`?`} ${n} ${e.value||`?`}`}})},l=e=>{switch(e.type){case`start`:return a(e.data);case`approval`:return o(e.data);case`copy`:return s(e.data);case`condition`:return c(e.data)}},u=()=>{let n=new Map;e.value.forEach(e=>n.set(e.id,e));let r=new Map,i=new Map;e.value.forEach(e=>{r.set(e.id,[]),i.set(e.id,0)}),t.value.forEach(e=>{r.get(e.source)?.push(e.target),i.set(e.target,(i.get(e.target)||0)+1)});let a=[];i.forEach((e,t)=>{e===0&&a.push(t)});let o=[],s=new Set;for(;a.length>0;){let e=a.shift();if(s.has(e))continue;s.add(e);let t=n.get(e);t&&o.push(t);let c=r.get(e)||[];for(let e of c){let t=(i.get(e)||1)-1;i.set(e,t),t<=0&&!s.has(e)&&a.push(e)}}return e.value.forEach(e=>{s.has(e.id)||o.push(e)}),o},d=()=>u().map((e,t)=>{let n=Lt[e.type||`start`]||Lt.start;return{order:t+1,node:e,nodeTypeLabel:n.label,icon:n.icon,colorClass:n.colorClass,details:l(e)}}),f=()=>{let n={totalNodes:e.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:t.value.length};return e.value.forEach(e=>{e.type===`approval`?n.approvalNodes++:e.type===`copy`?n.copyNodes++:e.type===`condition`&&n.conditionNodes++}),n};return{showPreview:n,previewSteps:r,previewStats:i,openPreview:()=>{r.value=d(),i.value=f(),n.value=!0},closePreview:()=>{n.value=!1}}}const Vt={class:`approval-workflow-container`},Ht={class:`floating-toolbar`},Ut={class:`add-menu-content`},Wt=[`onClick`],Gt={class:`menu-text`},Kt={key:0,class:`validation-success`},qt={class:`success-icon`},Jt={key:1,class:`validation-errors`},Yt={class:`error-summary`},Xt={class:`error-icon`},Zt={class:`error-list`},Qt={class:`error-header`},$t={class:`error-number`},en={class:`error-info`},tn={class:`error-node`},nn={class:`error-field`},rn={class:`error-message`},an={class:`error-actions`},on={class:`validation-footer`},sn={class:`preview-stats`},cn={class:`stat-item`},ln={class:`stat-value`},un={class:`stat-item approval`},dn={class:`stat-value`},fn={class:`stat-item copy`},pn={class:`stat-value`},mn={class:`stat-item condition`},hn={class:`stat-value`},gn={class:`stat-item edge`},_n={class:`stat-value`},vn={class:`preview-timeline`},yn={class:`step-connector`},bn={class:`step-dot`},xn={key:0,class:`step-line`},Sn={class:`step-content`},Cn={class:`step-header`},wn={class:`step-order`},Tn={class:`step-type-badge`},En={class:`step-title`},Dn={key:0,class:`step-details`},On={class:`detail-label`},kn={class:`warning-text`},An={key:0,class:`preview-empty`},jn={class:`preview-footer`};var Mn=i(m({name:`C_WorkFlow`,__name:`index`,props:{users:{default:()=>[]},roles:{default:()=>[]},departments:{default:()=>[]},modelValue:{},readonly:{type:Boolean,default:!1},allowCycles:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`update:modelValue`,`change`,`node-click`,`edge-click`,`save`,`validate-error`],setup(e,{expose:t,emit:i}){let s=e,m=i,h=n(),_=w(),{nodes:v,edges:x,showAddMenu:ee,menuPosition:C,showNodeConfig:k,currentNode:M,nodeTypes:P,workflowStats:L,commitCanvasChange:R,handleCanvasChanges:z,connectNodes:te,updateConnection:B,addNode:ne,onNodeClick:ie,closeAddMenu:se,handleConfigSave:ce,resetNodes:le,getCurrentWorkflowData:V,fitView:ue,deleteNode:de}=At(s,m,_),{validationErrors:H,showValidationErrors:U,validateWorkflow:W,validateCurrentWorkflow:G,jumpToErrorNode:K,getFieldDisplayName:fe,getErrorTypeText:pe,resetValidation:me}=It(v,x,_,{allowCycles:()=>s.allowCycles,onShowNodeConfig:e=>{s.readonly||(M.value=e,k.value=!0)},onValidateError:e=>m(`validate-error`,e)}),{showPreview:q,previewSteps:J,previewStats:Y,openPreview:he,closePreview:ge}=Bt(v,x),X=()=>{if(s.readonly)return;let e=W();if(H.value=e,e.length>0){h.error(`工作流验证失败: ${e[0].message}`),U.value=!0,m(`validate-error`,e);return}m(`save`,V()),h.success(`工作流保存成功`)},_e=()=>{he()},ve=()=>{ge(),X()},ye=()=>{s.readonly||(le(),me())};return t({validateWorkflow:W,getCurrentWorkflowData:V,saveWorkflow:X,previewWorkflow:_e,deleteNode:de,stats:L}),(t,n)=>(S(),u(`div`,Vt,[l(` 浮动工具栏 `),d(`div`,Ht,[p(D(N),{size:`small`,type:`primary`,disabled:e.readonly,onClick:X},{icon:A(()=>[p(D(r),{name:`mdi:content-save`,size:16})]),default:A(()=>[n[7]||=f(` 保存 `,-1)]),_:1},8,[`disabled`]),p(D(N),{size:`small`,onClick:_e},{icon:A(()=>[p(D(r),{name:`mdi:eye`,size:16})]),default:A(()=>[n[8]||=f(` 预览 `,-1)]),_:1}),p(D(N),{size:`small`,onClick:D(G),title:`检查工作流配置是否正确`},{icon:A(()=>[p(D(r),{name:`mdi:check-circle`,size:16})]),default:A(()=>[n[9]||=f(` 验证流程 `,-1)]),_:1},8,[`onClick`]),n[10]||=d(`div`,{class:`toolbar-divider`},null,-1),p(D(N),{size:`small`,onClick:D(ue),title:`适应窗口`},{icon:A(()=>[p(D(r),{name:`mdi:fit-to-screen`,size:16})]),_:1},8,[`onClick`]),p(D(N),{size:`small`,type:`error`,disabled:e.readonly,onClick:ye,title:`清空画布`},{icon:A(()=>[p(D(r),{name:`mdi:delete-sweep`,size:16})]),_:1},8,[`disabled`])]),l(` Vue Flow 画布 `),p(D(ae),{ref_key:`vueFlowRef`,ref:_,nodes:D(v),"onUpdate:nodes":n[0]||=e=>g(v)?v.value=e:null,edges:D(x),"onUpdate:edges":n[1]||=e=>g(x)?x.value=e:null,"node-types":D(P),class:`workflow-canvas`,"default-viewport":{zoom:1,x:0,y:0},"min-zoom":.5,"max-zoom":2,"fit-view-on-init":!0,"nodes-draggable":!e.readonly,"nodes-connectable":!e.readonly,"edges-updatable":!e.readonly,"delete-key-code":e.readonly?null:void 0,"elements-selectable":!0,onNodeClick:D(ie),onNodeDragStop:D(R),onNodesChange:D(z),onEdgesChange:D(z),onConnect:D(te),onEdgeUpdate:D(B),onPaneClick:D(se)},null,8,[`nodes`,`edges`,`node-types`,`nodes-draggable`,`nodes-connectable`,`edges-updatable`,`delete-key-code`,`onNodeClick`,`onNodeDragStop`,`onNodesChange`,`onEdgesChange`,`onConnect`,`onEdgeUpdate`,`onPaneClick`]),l(` 节点添加菜单 `),(S(),c(o,{to:`body`},[j(d(`div`,{class:`add-node-menu`,style:b({left:D(C).x+`px`,top:D(C).y+`px`})},[d(`div`,Ut,[(S(!0),u(a,null,T(D(oe),e=>(S(),u(`button`,{key:e.type,type:`button`,class:`add-menu-item`,onClick:t=>D(ne)(e.type)},[d(`div`,{class:y([`menu-icon`,e.iconClass])},[p(D(r),{name:e.icon,size:16},null,8,[`name`])],2),d(`span`,Gt,E(e.label),1)],8,Wt))),128))])],4),[[O,D(ee)]])])),l(` 节点配置弹窗 - 拆分到独立组件 `),p(Me,{show:D(k),"onUpdate:show":n[2]||=e=>g(k)?k.value=e:null,"current-node":D(M),users:e.users,departments:e.departments,onSave:D(ce),onCancel:n[3]||=e=>k.value=!1},null,8,[`show`,`current-node`,`users`,`departments`,`onSave`]),l(` 验证错误日志抽屉 `),p(D(F),{show:D(U),"onUpdate:show":n[5]||=e=>g(U)?U.value=e:null,width:450,placement:`right`},{default:A(()=>[p(D(I),{title:`流程验证结果`,closable:``},{footer:A(()=>[d(`div`,on,[p(D(N),{onClick:n[4]||=e=>U.value=!1},{default:A(()=>[...n[16]||=[f(`关闭`,-1)]]),_:1}),p(D(N),{type:`primary`,onClick:D(G)},{icon:A(()=>[p(D(r),{name:`mdi:refresh`,size:16})]),default:A(()=>[n[17]||=f(` 重新验证 `,-1)]),_:1},8,[`onClick`])])]),default:A(()=>[D(H).length===0?(S(),u(`div`,Kt,[d(`div`,qt,[p(D(r),{name:`mdi:check-circle`,size:32,color:`#52c41a`})]),n[11]||=d(`h3`,null,`验证通过`,-1),n[12]||=d(`p`,null,`流程结构和节点配置验证通过;审批执行、权限与业务规则由后端校验。`,-1)])):(S(),u(`div`,Jt,[d(`div`,Yt,[d(`div`,Xt,[p(D(r),{name:`mdi:alert-circle`,size:24,color:`#ff4d4f`})]),d(`h3`,null,`发现 `+E(D(H).length)+` 个问题`,1),n[13]||=d(`p`,null,`请修复以下问题后重新验证:`,-1)]),d(`div`,Zt,[(S(!0),u(a,null,T(D(H),(e,t)=>(S(),u(`div`,{key:`${e.nodeId}-${e.field}-${t}`,class:`error-item`},[d(`div`,Qt,[d(`span`,$t,E(t+1),1),d(`div`,en,[d(`strong`,tn,E(e.nodeName),1),d(`span`,nn,E(D(fe)(e.field)),1)]),d(`div`,{class:y([`error-type`,e.type])},E(D(pe)(e.type)),3)]),d(`div`,rn,E(e.message),1),d(`div`,an,[p(D(N),{size:`small`,type:`primary`,disabled:!e.nodeId,onClick:t=>D(K)(e.nodeId)},{icon:A(()=>[p(D(r),{name:`mdi:target`,size:16})]),default:A(()=>[n[14]||=f(` 定位节点 `,-1)]),_:1},8,[`disabled`,`onClick`])])]))),128))]),n[15]||=d(`div`,{class:`validation-tips`},[d(`h4`,null,`💡 常见问题解决方案:`),d(`ul`,null,[d(`li`,null,[d(`strong`,null,`审批人未设置:`),f(`点击审批节点,在弹窗中选择审批人员 `)]),d(`li`,null,[d(`strong`,null,`条件分支未配置:`),f(`点击条件节点,添加至少一个条件分支 `)]),d(`li`,null,[d(`strong`,null,`节点连接断开:`),f(` 检查节点之间的连线是否正确 `)])])],-1)]))]),_:1})]),_:1},8,[`show`]),l(` 流程预览抽屉 `),p(D(F),{show:D(q),"onUpdate:show":n[6]||=e=>g(q)?q.value=e:null,width:520,placement:`right`},{default:A(()=>[p(D(I),{title:`流程预览`,closable:``},{footer:A(()=>[d(`div`,jn,[p(D(N),{onClick:D(ge)},{default:A(()=>[...n[24]||=[f(`关闭`,-1)]]),_:1},8,[`onClick`]),p(D(N),{type:`primary`,onClick:ve},{icon:A(()=>[p(D(r),{name:`mdi:content-save`,size:16})]),default:A(()=>[n[25]||=f(` 确认并保存 `,-1)]),_:1})])]),default:A(()=>[d(`div`,sn,[d(`div`,cn,[d(`span`,ln,E(D(Y).totalNodes),1),n[18]||=d(`span`,{class:`stat-label`},`总节点`,-1)]),d(`div`,un,[d(`span`,dn,E(D(Y).approvalNodes),1),n[19]||=d(`span`,{class:`stat-label`},`审批`,-1)]),d(`div`,fn,[d(`span`,pn,E(D(Y).copyNodes),1),n[20]||=d(`span`,{class:`stat-label`},`抄送`,-1)]),d(`div`,mn,[d(`span`,hn,E(D(Y).conditionNodes),1),n[21]||=d(`span`,{class:`stat-label`},`条件`,-1)]),d(`div`,gn,[d(`span`,_n,E(D(Y).totalEdges),1),n[22]||=d(`span`,{class:`stat-label`},`连线`,-1)])]),d(`div`,vn,[(S(!0),u(a,null,T(D(J),(e,t)=>(S(),u(`div`,{key:e.node.id,class:y([`preview-step`,e.colorClass])},[l(` 时间线连接线 `),d(`div`,yn,[d(`div`,bn,[p(D(r),{name:e.icon,size:16},null,8,[`name`])]),t<D(J).length-1?(S(),u(`div`,xn)):l(`v-if`,!0)]),l(` 步骤内容 `),d(`div`,Sn,[d(`div`,Cn,[d(`span`,wn,`步骤 `+E(e.order),1),d(`span`,Tn,E(e.nodeTypeLabel),1)]),d(`div`,En,E(e.node.data.title),1),e.details.length>0?(S(),u(`div`,Dn,[(S(!0),u(a,null,T(e.details,(e,t)=>(S(),u(`div`,{key:t,class:y([`step-detail-item`,{"is-warning":e.type===`warning`}])},[d(`span`,On,E(e.label)+`:`,1),l(` 审批方式 badge `),e.type===`mode`?(S(),u(`span`,{key:0,class:y([`mode-badge`,e.modeKey])},E(e.value),3)):e.type===`users`?(S(),u(a,{key:1},[l(` 人员 tags `),(S(!0),u(a,null,T(e.users,e=>(S(),c(D(re),{key:e.name,size:`small`,bordered:!1,round:``,class:`user-tag`},{icon:A(()=>[p(D(r),{name:`mdi:account`,size:12})]),default:A(()=>[f(` `+E(e.name),1)]),_:2},1024))),128))],64)):e.type===`warning`?(S(),u(a,{key:2},[l(` 警告文案 `),d(`span`,kn,` ⚠️ `+E(e.value),1)],2112)):(S(),u(a,{key:3},[l(` 普通文本 `),d(`span`,null,E(e.value),1)],2112))],2))),128))])):l(`v-if`,!0)])],2))),128))]),D(J).length===0?(S(),u(`div`,An,[p(D(r),{name:`mdi:file-document-outline`,size:48,color:`#d1d5db`}),n[23]||=d(`p`,null,`暂无流程节点`,-1)])):l(`v-if`,!0)]),_:1})]),_:1},8,[`show`])]))}}),[[`__scopeId`,`data-v-0ce70378`]]);export{At as i,Bt as n,It as r,Mn as t};
|
package/dist/Card.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./data2.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`);const a={class:`c-form-card`},o={class:`flex items-center gap-2`},s={class:`config-controls`},c={class:`config-item`},l={class:`flex items-center gap-2`},u={class:`text-xs min-w-12`},d={class:`config-item`},f={class:`config-item`},p={class:`config-item`},m={class:`flex items-center gap-3`},h={class:`card-header`},g={class:`header-info`},_={class:`header-text`},v={key:0},y={class:`header-actions`},b={class:`field-stats`},x={class:`card-content`},S={key:0,class:`progress-section`},C={class:`action-content`},ee={class:`status-summary`},te={class:`status-item`},w={class:`progress-display`},T={class:`text-sm min-w-12`},E={class:`action-buttons`},D=(0,r.defineComponent)({__name:`index`,props:{controlSize:{},formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},formData:{default:()=>({})}},setup(n,{expose:D}){let O=n,k=(0,r.ref)(20),A=(0,r.ref)(!0),j=(0,r.ref)(!0),M=(0,r.ref)(!0),N=(0,r.ref)(`vertical`),P=(0,r.ref)({});(0,r.watch)(()=>O.layoutConfig?.card?.spacing,e=>{k.value=e??20},{immediate:!0});let F=(0,r.computed)(()=>O.layoutConfig?.card?.groups||[]),I=(0,r.computed)(()=>F.value.length>0),L=(0,r.computed)(()=>O.layoutConfig?.card?.showLayoutConfig??!0),R=(0,r.computed)(()=>O.layoutConfig?.card?.showActionPanel??!0),z=(0,r.computed)(()=>I.value?`layout-${N.value}`:`layout-single`),B=(0,r.computed)(()=>{if(!I.value)return[];let e=new Map;return F.value.forEach(t=>{e.set(t.key,[])}),O.formItems.forEach((t,n)=>{let r=(O.options?.[n])?.layout?.group||F.value[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),F.value.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),V=(0,r.computed)(()=>{let e=Object.keys(P.value);return e.length>0&&e.every(e=>P.value[e])}),H=(0,r.computed)(()=>{if(!O.options||O.options.length===0)return 0;let t=O.options.filter(t=>U(e.r(O.formData,t.prop))).length;return Math.round(t/O.options.length*100)}),U=e=>e==null?!1:Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:!0,W=t=>O.options?O.options.filter(e=>e.layout?.group===t.config.key).filter(t=>U(e.r(O.formData,t.prop))).length:0,G=e=>{if(e.items.length===0)return 0;let t=W(e);return Math.round(t/e.items.length*100)},K=e=>{let t={basic:`mdi:account`,contact:`mdi:phone`,preferences:`mdi:cog`,settings:`mdi:cog`,info:`mdi:information`,default:`mdi:form-select`};return t[e]||t.default},q=e=>{P.value[e]=!P.value[e]},J=()=>{let e=!V.value;F.value.forEach(t=>{P.value[t.key]=e})};return(0,r.onMounted)(()=>{let e=O.layoutConfig?.card;e?.spacing!==void 0&&(k.value=e.spacing),e?.direction&&(N.value=e.direction),e?.showProgress!==void 0&&(M.value=e.showProgress),F.value.forEach(e=>{P.value[e.key]=e.collapsed??e.defaultExpanded===!1})}),D({revealField:(e,t=()=>!0)=>{if(!t())return!1;if(!I.value)return!0;let n=O.options.find(t=>t.prop===e)?.layout?.group||F.value[0]?.key;return!n||!B.value.some(e=>e.config.key===n)?!1:(P.value[n]=!1,!0)}}),(e,D)=>{let O=i.NSlider,F=i.NSwitch,U=i.NRadio,Y=i.NRadioGroup,X=i.NCard,Z=i.NBadge,Q=i.NButton,$=i.NProgress;return(0,r.openBlock)(),(0,r.createElementBlock)(`div`,a,[(0,r.createCommentVNode)(` 布局配置面板 `),I.value&&L.value?((0,r.openBlock)(),(0,r.createBlock)(X,{key:0,class:`layout-config-panel`,bordered:!1},{header:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,o,[(0,r.createVNode)(t.t,{name:`mdi:cog`,size:18}),D[4]||=(0,r.createElementVNode)(`span`,null,`布局配置`,-1)])]),default:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,s,[(0,r.createElementVNode)(`div`,c,[D[5]||=(0,r.createElementVNode)(`span`,null,`卡片间距`,-1),(0,r.createElementVNode)(`div`,l,[(0,r.createVNode)(O,{value:k.value,"onUpdate:value":D[0]||=e=>k.value=e,min:12,max:32,step:4,class:`w-24`},null,8,[`value`]),(0,r.createElementVNode)(`span`,u,(0,r.toDisplayString)(k.value)+`px`,1)])]),(0,r.createElementVNode)(`div`,d,[D[6]||=(0,r.createElementVNode)(`span`,null,`显示图标`,-1),(0,r.createVNode)(F,{value:A.value,"onUpdate:value":D[1]||=e=>A.value=e,size:n.controlSize??`small`},null,8,[`value`,`size`])]),(0,r.createElementVNode)(`div`,f,[D[7]||=(0,r.createElementVNode)(`span`,null,`可折叠`,-1),(0,r.createVNode)(F,{value:j.value,"onUpdate:value":D[2]||=e=>j.value=e,size:n.controlSize??`small`},null,8,[`value`,`size`])]),(0,r.createElementVNode)(`div`,p,[D[10]||=(0,r.createElementVNode)(`span`,null,`布局方向`,-1),(0,r.createVNode)(Y,{value:N.value,"onUpdate:value":D[3]||=e=>N.value=e,size:n.controlSize??`small`},{default:(0,r.withCtx)(()=>[(0,r.createVNode)(U,{value:`vertical`},{default:(0,r.withCtx)(()=>[...D[8]||=[(0,r.createTextVNode)(`垂直`,-1)]]),_:1}),(0,r.createVNode)(U,{value:`horizontal`},{default:(0,r.withCtx)(()=>[...D[9]||=[(0,r.createTextVNode)(`水平`,-1)]]),_:1})]),_:1},8,[`value`,`size`])])])]),_:1})):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 表单内容区域 `),(0,r.createElementVNode)(`div`,{class:(0,r.normalizeClass)([`form-content`,z.value]),style:(0,r.normalizeStyle)({gap:`${k.value}px`})},[(0,r.createCommentVNode)(` 无分组时的单卡片模式 `),I.value?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createCommentVNode)(` 有分组时的多卡片模式 `),((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(B.value,e=>((0,r.openBlock)(),(0,r.createBlock)(X,{key:e.config.key,class:(0,r.normalizeClass)([`group-card`,[`${e.config.key}-card`,{collapsed:j.value&&P.value[e.config.key]}]]),bordered:n.layoutConfig.card?.bordered,hoverable:``},{header:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,h,[(0,r.createElementVNode)(`div`,g,[A.value&&e.config.icon?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:0,name:e.config.icon,size:20,class:`card-icon`},null,8,[`name`])):A.value?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:1,name:K(e.config.key),size:20,class:`card-icon`},null,8,[`name`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createElementVNode)(`div`,_,[(0,r.createElementVNode)(`h3`,null,(0,r.toDisplayString)(e.config.title),1),e.config.description?((0,r.openBlock)(),(0,r.createElementBlock)(`p`,v,(0,r.toDisplayString)(e.config.description),1)):(0,r.createCommentVNode)(`v-if`,!0)])]),(0,r.createElementVNode)(`div`,y,[(0,r.createCommentVNode)(` 统计信息 `),(0,r.createElementVNode)(`div`,b,[(0,r.createVNode)(Z,{value:e.items.length,type:`info`,"show-zero":``},null,8,[`value`]),(0,r.createVNode)(Z,{value:`${W(e)}/${e.items.length}`,type:W(e)===e.items.length?`success`:`warning`},null,8,[`value`,`type`])]),(0,r.createCommentVNode)(` 折叠按钮 `),j.value?((0,r.openBlock)(),(0,r.createBlock)(Q,{key:0,quaternary:``,circle:``,size:n.controlSize??`small`,onClick:t=>q(e.config.key)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:P.value[e.config.key]?`mdi:chevron-down`:`mdi:chevron-up`,size:18},null,8,[`name`])]),_:2},1032,[`size`,`onClick`])):(0,r.createCommentVNode)(`v-if`,!0)])])]),default:(0,r.withCtx)(()=>[(0,r.withDirectives)((0,r.createElementVNode)(`div`,x,[(0,r.createCommentVNode)(` 进度指示器 `),M.value?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,S,[(0,r.createVNode)($,{percentage:G(e),color:G(e)===100?`#52c41a`:`#1890ff`,"show-indicator":!1,class:`mb-4`},null,8,[`percentage`,`color`])])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 表单项 `),((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.items,(e,t)=>((0,r.openBlock)(),(0,r.createBlock)((0,r.resolveDynamicComponent)(e),{key:e.key??t}))),128))],512),[[r.vShow,!P.value[e.config.key]]])]),_:2},1032,[`bordered`,`class`]))),128))],64)):((0,r.openBlock)(),(0,r.createBlock)(X,{key:0,class:`single-card`,bordered:n.layoutConfig.card?.bordered,hoverable:``},{header:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,m,[A.value?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:0,name:`mdi:form-select`,size:18,style:{color:`#3b82f6`}})):(0,r.createCommentVNode)(`v-if`,!0),D[11]||=(0,r.createElementVNode)(`span`,null,`表单信息`,-1)])]),default:(0,r.withCtx)(()=>[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(n.formItems,(e,t)=>((0,r.openBlock)(),(0,r.createBlock)((0,r.resolveDynamicComponent)(e),{key:e.key??t}))),128))]),_:1},8,[`bordered`]))],6),(0,r.createCommentVNode)(` 统一操作面板 `),I.value&&R.value?((0,r.openBlock)(),(0,r.createBlock)(X,{key:1,class:`action-panel`,bordered:!1},{default:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,C,[(0,r.createElementVNode)(`div`,ee,[(0,r.createElementVNode)(`div`,te,[D[12]||=(0,r.createElementVNode)(`span`,{class:`label`},`完成进度:`,-1),(0,r.createElementVNode)(`div`,w,[(0,r.createVNode)($,{percentage:H.value,"show-indicator":!1,color:H.value===100?`#52c41a`:`#1890ff`,class:`flex-1`},null,8,[`percentage`,`color`]),(0,r.createElementVNode)(`span`,T,(0,r.toDisplayString)(H.value)+`%`,1)])])]),(0,r.createElementVNode)(`div`,E,[j.value?((0,r.openBlock)(),(0,r.createBlock)(Q,{key:0,size:n.controlSize,onClick:J},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:V.value?`mdi:unfold-more-horizontal`:`mdi:unfold-less-horizontal`,size:18},null,8,[`name`])]),default:(0,r.withCtx)(()=>[(0,r.createTextVNode)(` `+(0,r.toDisplayString)(V.value?`展开全部`:`折叠全部`),1)]),_:1},8,[`size`])):(0,r.createCommentVNode)(`v-if`,!0)])])]),_:1})):(0,r.createCommentVNode)(`v-if`,!0)])}}});var O=n.t(D,[[`__scopeId`,`data-v-a53d698e`]]);exports.default=O;
|
package/dist/Card.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./data2.js";import{t}from"./C_Icon2.js";import{t as n}from"./export-helper.js";import{Fragment as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createTextVNode as l,createVNode as u,defineComponent as d,normalizeClass as f,normalizeStyle as ee,onMounted as p,openBlock as m,ref as h,renderList as g,resolveComponent as _,resolveDynamicComponent as v,toDisplayString as y,vShow as te,watch as b,withCtx as x,withDirectives as ne}from"vue";import{NBadge as S,NButton as re,NCard as ie,NProgress as ae,NRadio as oe,NRadioGroup as se,NSlider as ce,NSwitch as le}from"naive-ui";const ue={class:`c-form-card`},de={class:`flex items-center gap-2`},fe={class:`config-controls`},pe={class:`config-item`},me={class:`flex items-center gap-2`},he={class:`text-xs min-w-12`},C={class:`config-item`},w={class:`config-item`},T={class:`config-item`},E={class:`flex items-center gap-3`},D={class:`card-header`},O={class:`header-info`},k={class:`header-text`},A={key:0},j={class:`header-actions`},M={class:`field-stats`},N={class:`card-content`},P={key:0,class:`progress-section`},F={class:`action-content`},I={class:`status-summary`},L={class:`status-item`},R={class:`progress-display`},ge={class:`text-sm min-w-12`},_e={class:`action-buttons`};var z=n(d({__name:`index`,props:{controlSize:{},formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},formData:{default:()=>({})}},setup(n,{expose:d}){let _=n,z=h(20),B=h(!0),V=h(!0),H=h(!0),U=h(`vertical`),W=h({});b(()=>_.layoutConfig?.card?.spacing,e=>{z.value=e??20},{immediate:!0});let G=i(()=>_.layoutConfig?.card?.groups||[]),K=i(()=>G.value.length>0),ve=i(()=>_.layoutConfig?.card?.showLayoutConfig??!0),ye=i(()=>_.layoutConfig?.card?.showActionPanel??!0),be=i(()=>K.value?`layout-${U.value}`:`layout-single`),q=i(()=>{if(!K.value)return[];let e=new Map;return G.value.forEach(t=>{e.set(t.key,[])}),_.formItems.forEach((t,n)=>{let r=(_.options?.[n])?.layout?.group||G.value[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),G.value.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),J=i(()=>{let e=Object.keys(W.value);return e.length>0&&e.every(e=>W.value[e])}),Y=i(()=>{if(!_.options||_.options.length===0)return 0;let t=_.options.filter(t=>X(e(_.formData,t.prop))).length;return Math.round(t/_.options.length*100)}),X=e=>e==null?!1:Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:!0,Z=t=>_.options?_.options.filter(e=>e.layout?.group===t.config.key).filter(t=>X(e(_.formData,t.prop))).length:0,Q=e=>{if(e.items.length===0)return 0;let t=Z(e);return Math.round(t/e.items.length*100)},xe=e=>{let t={basic:`mdi:account`,contact:`mdi:phone`,preferences:`mdi:cog`,settings:`mdi:cog`,info:`mdi:information`,default:`mdi:form-select`};return t[e]||t.default},Se=e=>{W.value[e]=!W.value[e]},Ce=()=>{let e=!J.value;G.value.forEach(t=>{W.value[t.key]=e})};return p(()=>{let e=_.layoutConfig?.card;e?.spacing!==void 0&&(z.value=e.spacing),e?.direction&&(U.value=e.direction),e?.showProgress!==void 0&&(H.value=e.showProgress),G.value.forEach(e=>{W.value[e.key]=e.collapsed??e.defaultExpanded===!1})}),d({revealField:(e,t=()=>!0)=>{if(!t())return!1;if(!K.value)return!0;let n=_.options.find(t=>t.prop===e)?.layout?.group||G.value[0]?.key;return!n||!q.value.some(e=>e.config.key===n)?!1:(W.value[n]=!1,!0)}}),(e,i)=>{let d=ce,p=le,h=oe,_=se,b=ie,G=S,X=re,$=ae;return m(),s(`div`,ue,[o(` 布局配置面板 `),K.value&&ve.value?(m(),a(b,{key:0,class:`layout-config-panel`,bordered:!1},{header:x(()=>[c(`div`,de,[u(t,{name:`mdi:cog`,size:18}),i[4]||=c(`span`,null,`布局配置`,-1)])]),default:x(()=>[c(`div`,fe,[c(`div`,pe,[i[5]||=c(`span`,null,`卡片间距`,-1),c(`div`,me,[u(d,{value:z.value,"onUpdate:value":i[0]||=e=>z.value=e,min:12,max:32,step:4,class:`w-24`},null,8,[`value`]),c(`span`,he,y(z.value)+`px`,1)])]),c(`div`,C,[i[6]||=c(`span`,null,`显示图标`,-1),u(p,{value:B.value,"onUpdate:value":i[1]||=e=>B.value=e,size:n.controlSize??`small`},null,8,[`value`,`size`])]),c(`div`,w,[i[7]||=c(`span`,null,`可折叠`,-1),u(p,{value:V.value,"onUpdate:value":i[2]||=e=>V.value=e,size:n.controlSize??`small`},null,8,[`value`,`size`])]),c(`div`,T,[i[10]||=c(`span`,null,`布局方向`,-1),u(_,{value:U.value,"onUpdate:value":i[3]||=e=>U.value=e,size:n.controlSize??`small`},{default:x(()=>[u(h,{value:`vertical`},{default:x(()=>[...i[8]||=[l(`垂直`,-1)]]),_:1}),u(h,{value:`horizontal`},{default:x(()=>[...i[9]||=[l(`水平`,-1)]]),_:1})]),_:1},8,[`value`,`size`])])])]),_:1})):o(`v-if`,!0),o(` 表单内容区域 `),c(`div`,{class:f([`form-content`,be.value]),style:ee({gap:`${z.value}px`})},[o(` 无分组时的单卡片模式 `),K.value?(m(),s(r,{key:1},[o(` 有分组时的多卡片模式 `),(m(!0),s(r,null,g(q.value,e=>(m(),a(b,{key:e.config.key,class:f([`group-card`,[`${e.config.key}-card`,{collapsed:V.value&&W.value[e.config.key]}]]),bordered:n.layoutConfig.card?.bordered,hoverable:``},{header:x(()=>[c(`div`,D,[c(`div`,O,[B.value&&e.config.icon?(m(),a(t,{key:0,name:e.config.icon,size:20,class:`card-icon`},null,8,[`name`])):B.value?(m(),a(t,{key:1,name:xe(e.config.key),size:20,class:`card-icon`},null,8,[`name`])):o(`v-if`,!0),c(`div`,k,[c(`h3`,null,y(e.config.title),1),e.config.description?(m(),s(`p`,A,y(e.config.description),1)):o(`v-if`,!0)])]),c(`div`,j,[o(` 统计信息 `),c(`div`,M,[u(G,{value:e.items.length,type:`info`,"show-zero":``},null,8,[`value`]),u(G,{value:`${Z(e)}/${e.items.length}`,type:Z(e)===e.items.length?`success`:`warning`},null,8,[`value`,`type`])]),o(` 折叠按钮 `),V.value?(m(),a(X,{key:0,quaternary:``,circle:``,size:n.controlSize??`small`,onClick:t=>Se(e.config.key)},{icon:x(()=>[u(t,{name:W.value[e.config.key]?`mdi:chevron-down`:`mdi:chevron-up`,size:18},null,8,[`name`])]),_:2},1032,[`size`,`onClick`])):o(`v-if`,!0)])])]),default:x(()=>[ne(c(`div`,N,[o(` 进度指示器 `),H.value?(m(),s(`div`,P,[u($,{percentage:Q(e),color:Q(e)===100?`#52c41a`:`#1890ff`,"show-indicator":!1,class:`mb-4`},null,8,[`percentage`,`color`])])):o(`v-if`,!0),o(` 表单项 `),(m(!0),s(r,null,g(e.items,(e,t)=>(m(),a(v(e),{key:e.key??t}))),128))],512),[[te,!W.value[e.config.key]]])]),_:2},1032,[`bordered`,`class`]))),128))],64)):(m(),a(b,{key:0,class:`single-card`,bordered:n.layoutConfig.card?.bordered,hoverable:``},{header:x(()=>[c(`div`,E,[B.value?(m(),a(t,{key:0,name:`mdi:form-select`,size:18,style:{color:`#3b82f6`}})):o(`v-if`,!0),i[11]||=c(`span`,null,`表单信息`,-1)])]),default:x(()=>[(m(!0),s(r,null,g(n.formItems,(e,t)=>(m(),a(v(e),{key:e.key??t}))),128))]),_:1},8,[`bordered`]))],6),o(` 统一操作面板 `),K.value&&ye.value?(m(),a(b,{key:1,class:`action-panel`,bordered:!1},{default:x(()=>[c(`div`,F,[c(`div`,I,[c(`div`,L,[i[12]||=c(`span`,{class:`label`},`完成进度:`,-1),c(`div`,R,[u($,{percentage:Y.value,"show-indicator":!1,color:Y.value===100?`#52c41a`:`#1890ff`,class:`flex-1`},null,8,[`percentage`,`color`]),c(`span`,ge,y(Y.value)+`%`,1)])])]),c(`div`,_e,[V.value?(m(),a(X,{key:0,size:n.controlSize,onClick:Ce},{icon:x(()=>[u(t,{name:J.value?`mdi:unfold-more-horizontal`:`mdi:unfold-less-horizontal`,size:18},null,8,[`name`])]),default:x(()=>[l(` `+y(J.value?`展开全部`:`折叠全部`),1)]),_:1},8,[`size`])):o(`v-if`,!0)])])]),_:1})):o(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-a53d698e`]]);export{z as default};
|