@robot-admin/naive-ui-components 0.9.2 → 0.10.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 +82 -76
- package/LICENSE +21 -0
- package/README.md +314 -294
- package/dist/C_ActionBar-BAcfOfRw.css.map +1 -0
- package/dist/C_ActionBar-DG2HW7t5.css.map +1 -0
- package/dist/C_ActionBar.css +47 -47
- package/dist/C_ActionBar.js.map +1 -1
- package/dist/C_ActionBar2.js +1 -1
- package/dist/C_ActionBar2.js.map +1 -1
- package/dist/{C_AntV-BY8jqqmi.css.map → C_AntV-D_jTK8oZ.css.map} +1 -1
- package/dist/{C_AntV-BbkHc-_a.css.map → C_AntV-DanTAq22.css.map} +1 -1
- package/dist/C_AntV.css +79 -79
- package/dist/C_AntV.js.map +1 -1
- package/dist/C_AntV2.js +3 -3
- package/dist/C_AntV2.js.map +1 -1
- package/dist/{C_AudioPlayer-DKRIGhi7.css.map → C_AudioPlayer-BnYIJXPD.css.map} +1 -1
- package/dist/{C_AudioPlayer-DlB6eNsa.css.map → C_AudioPlayer-ldTy9Y34.css.map} +1 -1
- package/dist/C_AudioPlayer.css +47 -47
- package/dist/C_AudioPlayer.js.map +1 -1
- package/dist/C_AudioPlayer2.js +1 -1
- package/dist/C_AudioPlayer2.js.map +1 -1
- package/dist/{C_AvatarGroup-D02zci-i.css.map → C_AvatarGroup-B9d-GJ9c.css.map} +1 -1
- package/dist/{C_AvatarGroup-DatHaUlY.css.map → C_AvatarGroup-SIzxuuZr.css.map} +1 -1
- package/dist/C_AvatarGroup.cjs +1 -1
- package/dist/C_AvatarGroup.css +21 -21
- package/dist/C_AvatarGroup.d.cts +1 -1
- package/dist/C_AvatarGroup.d.ts +1 -1
- package/dist/C_AvatarGroup.js +1 -1
- package/dist/C_AvatarGroup.js.map +1 -1
- package/dist/C_AvatarGroup2.js +1 -1
- package/dist/C_AvatarGroup2.js.map +1 -1
- package/dist/{C_Barcode-DYDRDe2O.css.map → C_Barcode-CAU2mFcx.css.map} +1 -1
- package/dist/{C_Barcode-muJdc_O4.css.map → C_Barcode-D2oJaEg3.css.map} +1 -1
- package/dist/C_Barcode.css +7 -7
- package/dist/C_Barcode.js.map +1 -1
- package/dist/C_Barcode2.js +1 -1
- package/dist/C_Barcode2.js.map +1 -1
- package/dist/C_Breadcrumb.js.map +1 -1
- package/dist/C_Breadcrumb2.js +1 -1
- package/dist/C_Breadcrumb2.js.map +1 -1
- package/dist/{C_Captcha-9_hk6VmY.css.map → C_Captcha-B3yrtG7t.css.map} +1 -1
- package/dist/{C_Captcha-MtASlJ0f.css.map → C_Captcha-D4hDdWDu.css.map} +1 -1
- package/dist/C_Captcha.css +19 -19
- package/dist/C_Captcha.js.map +1 -1
- package/dist/C_Captcha2.js +1 -1
- package/dist/C_Captcha2.js.map +1 -1
- package/dist/C_Cascade-CmCrLVft.css.map +1 -0
- package/dist/C_Cascade-U6A5AJJb.css.map +1 -0
- package/dist/C_Cascade.css +3 -3
- package/dist/C_Cascade.d.cts +2 -2
- package/dist/C_Cascade.d.ts +2 -2
- package/dist/C_Cascade.js.map +1 -1
- package/dist/C_Cascade2.js +1 -1
- package/dist/C_Cascade2.js.map +1 -1
- package/dist/{C_Chat-Csjz_BFw.css.map → C_Chat-CF1SU7mc.css.map} +1 -1
- package/dist/{C_Chat-DO1ZBA_0.css.map → C_Chat-DeUv6uuI.css.map} +1 -1
- package/dist/C_Chat.css +65 -65
- package/dist/C_Chat.js.map +1 -1
- package/dist/C_Chat2.js +1 -1
- package/dist/C_Chat2.js.map +1 -1
- package/dist/{C_City-Bam08Qv3.css.map → C_City-DdkX6u64.css.map} +1 -1
- package/dist/{C_City-Bb3W-KaN.css.map → C_City-iP-dIvui.css.map} +1 -1
- package/dist/C_City.css +29 -29
- package/dist/C_City.js.map +1 -1
- package/dist/C_City2.js +1 -1
- package/dist/C_City2.js.map +1 -1
- package/dist/C_Code-BWmJMNS7.css.map +1 -0
- package/dist/C_Code-k14vjgVl.css.map +1 -0
- package/dist/C_Code.css +3 -3
- package/dist/C_Code.js.map +1 -1
- package/dist/C_Code2.js +1 -1
- package/dist/C_Code2.js.map +1 -1
- package/dist/{C_CollapsePanel-CWkFCqNQ.css.map → C_CollapsePanel-BSKcWSmY.css.map} +1 -1
- package/dist/{C_CollapsePanel-pcVJA_4z.css.map → C_CollapsePanel-DRvRq8tB.css.map} +1 -1
- package/dist/C_CollapsePanel.css +35 -35
- package/dist/C_CollapsePanel.js.map +1 -1
- package/dist/C_CollapsePanel2.js +1 -1
- package/dist/C_CollapsePanel2.js.map +1 -1
- package/dist/{C_ContextMenu-B3Cgz_wJ.css.map → C_ContextMenu-Bn_uhJSo.css.map} +1 -1
- package/dist/{C_ContextMenu-u1LixF3_.css.map → C_ContextMenu-C9iuxG2n.css.map} +1 -1
- package/dist/C_ContextMenu.css +17 -17
- package/dist/C_ContextMenu.js.map +1 -1
- package/dist/C_ContextMenu2.js +1 -1
- package/dist/C_ContextMenu2.js.map +1 -1
- package/dist/{C_Cron-Civir5-I.css.map → C_Cron-BIQ2By9v.css.map} +1 -1
- package/dist/{C_Cron-iw3qpMsy.css.map → C_Cron-BNSAGD6A.css.map} +1 -1
- package/dist/C_Cron.css +57 -57
- package/dist/C_Cron.js.map +1 -1
- package/dist/C_Cron2.js +1 -1
- package/dist/C_Cron2.js.map +1 -1
- package/dist/C_Date.js.map +1 -1
- package/dist/C_Date2.js +1 -1
- package/dist/C_Date2.js.map +1 -1
- package/dist/{C_Draggable-BCjIvIwT.css.map → C_Draggable-BDAbk4s5.css.map} +1 -1
- package/dist/{C_Draggable-DwkSlCOS.css.map → C_Draggable-UhfDLXop.css.map} +1 -1
- package/dist/C_Draggable.css +46 -46
- package/dist/C_Draggable.js.map +1 -1
- package/dist/C_Draggable2.js +1 -1
- package/dist/C_Draggable2.js.map +1 -1
- package/dist/{C_Editor-BfjjYQ9B.css.map → C_Editor-CZOaChru.css.map} +1 -1
- package/dist/{C_Editor-Do2StvoJ.css.map → C_Editor-kJAQq5z6.css.map} +1 -1
- package/dist/C_Editor.css +14 -14
- package/dist/C_Editor.js.map +1 -1
- package/dist/C_Editor2.js +1 -1
- package/dist/C_Editor2.js.map +1 -1
- package/dist/{C_FilePreview-BhcbiXsV.css.map → C_FilePreview-Bs_omgJS.css.map} +1 -1
- package/dist/{C_FilePreview-DJudcIbW.css.map → C_FilePreview-DbwoyF2j.css.map} +1 -1
- package/dist/C_FilePreview.css +91 -91
- package/dist/C_FilePreview.js.map +1 -1
- package/dist/C_FilePreview2.js +1 -1
- package/dist/C_FilePreview2.js.map +1 -1
- package/dist/{C_Form-BtcAPIRi.css.map → C_Form-B_2ql62V.css.map} +1 -1
- package/dist/{C_Form-D_gwQ7hC.css.map → C_Form-CX-7xsz3.css.map} +1 -1
- package/dist/C_Form.css +223 -223
- package/dist/C_Form.d.cts +2 -2
- package/dist/C_Form.d.ts +2 -2
- package/dist/C_Form.js.map +1 -1
- package/dist/C_Form2.js +1 -1
- package/dist/C_Form2.js.map +1 -1
- package/dist/{C_FormSearch-Bi4XYjjk.css.map → C_FormSearch-C3F8peAY.css.map} +1 -1
- package/dist/{C_FormSearch-DUGOoX0u.css.map → C_FormSearch-qW56bJPo.css.map} +1 -1
- package/dist/C_FormSearch.css +45 -45
- package/dist/C_FormSearch.js.map +1 -1
- package/dist/C_FormSearch2.js +1 -1
- package/dist/C_FormSearch2.js.map +1 -1
- package/dist/{C_FormulaEditor-CJk3SSUJ.css.map → C_FormulaEditor-ChOvDbsZ.css.map} +1 -1
- package/dist/{C_FormulaEditor-Cy7mjfVO.css.map → C_FormulaEditor-mfiIUDY4.css.map} +1 -1
- package/dist/C_FormulaEditor.css +78 -78
- package/dist/C_FormulaEditor.js.map +1 -1
- package/dist/C_FormulaEditor2.js +1 -1
- package/dist/C_FormulaEditor2.js.map +1 -1
- package/dist/C_FullCalendar-C2nsqrgS.css.map +1 -0
- package/dist/C_FullCalendar-DdFtXVhy.css.map +1 -0
- package/dist/C_FullCalendar.css +2 -2
- package/dist/C_FullCalendar.js.map +1 -1
- package/dist/C_FullCalendar2.js +1 -1
- package/dist/C_FullCalendar2.js.map +1 -1
- package/dist/{C_GlobalSearch-B6wK3m3k.css.map → C_GlobalSearch-Dq4Wo01K.css.map} +1 -1
- package/dist/{C_GlobalSearch-DoPjldFm.css.map → C_GlobalSearch-RB7J43gu.css.map} +1 -1
- package/dist/C_GlobalSearch.css +112 -112
- package/dist/C_GlobalSearch.js.map +1 -1
- package/dist/C_GlobalSearch2.js +1 -1
- package/dist/C_GlobalSearch2.js.map +1 -1
- package/dist/C_Guide.js.map +1 -1
- package/dist/C_Guide2.js +1 -1
- package/dist/C_Guide2.js.map +1 -1
- package/dist/C_Icon.d.cts +1 -1
- package/dist/C_Icon.d.ts +1 -1
- package/dist/C_Icon.js.map +1 -1
- package/dist/C_Icon2.js.map +1 -1
- package/dist/{C_ImageCropper-BqZpkZfU.css.map → C_ImageCropper-CdTX2nxU.css.map} +1 -1
- package/dist/{C_ImageCropper-CylwGuzS.css.map → C_ImageCropper-ilOqPklJ.css.map} +1 -1
- package/dist/C_ImageCropper.css +23 -23
- package/dist/C_ImageCropper.js.map +1 -1
- package/dist/C_ImageCropper2.js +1 -1
- package/dist/C_ImageCropper2.js.map +1 -1
- package/dist/C_Language.d.cts +1 -1
- package/dist/C_Language.d.ts +1 -1
- package/dist/C_Language.js.map +1 -1
- package/dist/C_Language2.js +1 -1
- package/dist/C_Language2.js.map +1 -1
- package/dist/{C_Login-BkdnkBKX.css.map → C_Login-B3qYkLrN.css.map} +1 -1
- package/dist/{C_Login-VkMM6OJ2.css.map → C_Login-xMI1_ojE.css.map} +1 -1
- package/dist/C_Login.css +72 -72
- package/dist/C_Login.js.map +1 -1
- package/dist/C_Login2.js +1 -1
- package/dist/C_Login2.js.map +1 -1
- package/dist/{C_Map-DNnBcY70.css.map → C_Map-CWMMN58_.css.map} +1 -1
- package/dist/{C_Map-LEXIx6zM.css.map → C_Map-xSR2H-9o.css.map} +1 -1
- package/dist/C_Map.css +4 -4
- package/dist/C_Map.js.map +1 -1
- package/dist/C_Map2.js +1 -1
- package/dist/C_Map2.js.map +1 -1
- package/dist/{C_Markdown-DwmI0_0Q.css.map → C_Markdown-C7lTVJ1S.css.map} +1 -1
- package/dist/{C_Markdown-k0794RW0.css.map → C_Markdown-CZDm_baQ.css.map} +1 -1
- package/dist/C_Markdown.css +33 -33
- package/dist/C_Markdown.js.map +1 -1
- package/dist/C_Markdown2.js +1 -1
- package/dist/C_Markdown2.js.map +1 -1
- package/dist/C_Menu.js.map +1 -1
- package/dist/C_Menu2.js +1 -1
- package/dist/C_Menu2.js.map +1 -1
- package/dist/{C_NotificationCenter-DT6fQ79O.css.map → C_NotificationCenter-D7GGGWg7.css.map} +1 -1
- package/dist/{C_NotificationCenter-DbgBiyqB.css.map → C_NotificationCenter-SSmeHA45.css.map} +1 -1
- package/dist/C_NotificationCenter.css +89 -89
- package/dist/C_NotificationCenter.js.map +1 -1
- package/dist/C_NotificationCenter2.js +1 -1
- package/dist/C_NotificationCenter2.js.map +1 -1
- package/dist/C_OrgChart.js.map +1 -1
- package/dist/C_OrgChart2.js.map +1 -1
- package/dist/C_Progress.js.map +1 -1
- package/dist/C_Progress2.js +1 -1
- package/dist/C_Progress2.js.map +1 -1
- package/dist/{C_QRCode-CFNTda_1.css.map → C_QRCode-B_1lHUdx.css.map} +1 -1
- package/dist/{C_QRCode-CmWr9lK-.css.map → C_QRCode-CuQRYu0s.css.map} +1 -1
- package/dist/C_QRCode.css +9 -9
- package/dist/C_QRCode.js.map +1 -1
- package/dist/C_QRCode2.js +1 -1
- package/dist/C_QRCode2.js.map +1 -1
- package/dist/{C_Signature-BDx4ctsE.css.map → C_Signature-Bp-RBpAl.css.map} +1 -1
- package/dist/{C_Signature-Bz_uNbwv.css.map → C_Signature-Cb2VW1ok.css.map} +1 -1
- package/dist/C_Signature.css +15 -15
- package/dist/C_Signature.js.map +1 -1
- package/dist/C_Signature2.js +1 -1
- package/dist/C_Signature2.js.map +1 -1
- package/dist/C_Skeleton.js.map +1 -1
- package/dist/C_Skeleton2.js.map +1 -1
- package/dist/{C_SplitPane-BOwr1C7K.css.map → C_SplitPane-CgGWYsRE.css.map} +1 -1
- package/dist/{C_SplitPane-N-a_D-7F.css.map → C_SplitPane-DGf6WEeR.css.map} +1 -1
- package/dist/C_SplitPane.css +31 -31
- package/dist/C_SplitPane.js.map +1 -1
- package/dist/C_SplitPane2.js +1 -1
- package/dist/C_SplitPane2.js.map +1 -1
- package/dist/C_Steps-27Exh7PM.css.map +1 -0
- package/dist/C_Steps-DU9ZsFrs.css.map +1 -0
- package/dist/C_Steps.css +38 -38
- package/dist/C_Steps.d.cts +1 -1
- package/dist/C_Steps.d.ts +1 -1
- package/dist/C_Steps.js.map +1 -1
- package/dist/C_Steps2.js +1 -1
- package/dist/C_Steps2.js.map +1 -1
- package/dist/{C_Table-BcM5LqAM.css.map → C_Table--kbQaaBv.css.map} +1 -1
- package/dist/{C_Table-HATVoq1F.css.map → C_Table-D631kdXC.css.map} +1 -1
- package/dist/C_Table.css +104 -104
- package/dist/C_Table.js.map +1 -1
- package/dist/C_Table2.js +3 -3
- package/dist/C_Table2.js.map +1 -1
- package/dist/{C_TagsView-DX3LecK1.css.map → C_TagsView-BN8vMRsY.css.map} +1 -1
- package/dist/{C_TagsView-DqOTa8bL.css.map → C_TagsView-s1dnSJAV.css.map} +1 -1
- package/dist/C_TagsView.css +36 -36
- package/dist/C_TagsView.d.cts +1 -1
- package/dist/C_TagsView.d.ts +1 -1
- package/dist/C_TagsView.js.map +1 -1
- package/dist/C_TagsView2.js +1 -1
- package/dist/C_TagsView2.js.map +1 -1
- package/dist/C_Theme.d.cts +1 -1
- package/dist/C_Theme.d.ts +1 -1
- package/dist/C_Theme.js.map +1 -1
- package/dist/C_Theme2.js +1 -1
- package/dist/C_Theme2.js.map +1 -1
- package/dist/C_Time-BQ9PGy8B.css.map +1 -0
- package/dist/C_Time-CO73krC6.css.map +1 -0
- package/dist/C_Time.css +5 -5
- package/dist/C_Time.js.map +1 -1
- package/dist/C_Time2.js +1 -1
- package/dist/C_Time2.js.map +1 -1
- package/dist/{C_Timeline-BKkimrZx.css.map → C_Timeline-4rk0Dzgn.css.map} +1 -1
- package/dist/{C_Timeline-DTuSCX6p.css.map → C_Timeline-DdESmqwL.css.map} +1 -1
- package/dist/C_Timeline.cjs +1 -1
- package/dist/C_Timeline.css +45 -45
- package/dist/C_Timeline.d.cts +1 -1
- package/dist/C_Timeline.d.ts +1 -1
- package/dist/C_Timeline.js +1 -1
- package/dist/C_Timeline.js.map +1 -1
- package/dist/C_Timeline2.js +1 -1
- package/dist/C_Timeline2.js.map +1 -1
- package/dist/{C_Transfer-BOB6OBqS.css.map → C_Transfer-B-vjvhjI.css.map} +1 -1
- package/dist/{C_Transfer-Dpq7ezWC.css.map → C_Transfer-EzdHzZNv.css.map} +1 -1
- package/dist/C_Transfer.css +31 -31
- package/dist/C_Transfer.js.map +1 -1
- package/dist/C_Transfer2.js +1 -1
- package/dist/C_Transfer2.js.map +1 -1
- package/dist/{C_Tree-D98nX9qT.css.map → C_Tree-CsXgGfhn.css.map} +1 -1
- package/dist/{C_Tree-ulfm7b-P.css.map → C_Tree-P7eRpnOa.css.map} +1 -1
- package/dist/C_Tree.css +33 -33
- package/dist/C_Tree.js.map +1 -1
- package/dist/C_Tree2.js +1 -1
- package/dist/C_Tree2.js.map +1 -1
- package/dist/{C_Upload-BR9fg5r4.css.map → C_Upload-CHjiVVh7.css.map} +1 -1
- package/dist/{C_Upload-CPqf74Ea.css.map → C_Upload-DE3OLsZD.css.map} +1 -1
- package/dist/C_Upload.css +50 -50
- package/dist/C_Upload.js.map +1 -1
- package/dist/C_Upload2.js +2 -2
- package/dist/C_Upload2.js.map +1 -1
- package/dist/{C_VideoPlayer-4J96tKfK.css.map → C_VideoPlayer-CnaNOFtW.css.map} +1 -1
- package/dist/{C_VideoPlayer-D35seHkm.css.map → C_VideoPlayer-cnP88zNV.css.map} +1 -1
- package/dist/C_VideoPlayer.css +68 -68
- package/dist/C_VideoPlayer.js.map +1 -1
- package/dist/C_VideoPlayer2.js +3 -3
- package/dist/C_VideoPlayer2.js.map +1 -1
- package/dist/{C_VtableGantt-C2lxFmWg.css.map → C_VtableGantt-CZlJgvpC.css.map} +1 -1
- package/dist/{C_VtableGantt-Dwnkw_WL.css.map → C_VtableGantt-DKfQkql0.css.map} +1 -1
- package/dist/C_VtableGantt.css +15 -15
- package/dist/C_VtableGantt.js.map +1 -1
- package/dist/C_VtableGantt2.js +1 -1
- package/dist/C_VtableGantt2.js.map +1 -1
- package/dist/{C_WaterFall-C4HDqf-a.css.map → C_WaterFall-BJ_39ext.css.map} +1 -1
- package/dist/{C_WaterFall-HWB-gPON.css.map → C_WaterFall-cYc1vntE.css.map} +1 -1
- package/dist/C_WaterFall.css +16 -16
- package/dist/C_WaterFall.js.map +1 -1
- package/dist/C_WaterFall2.js +1 -1
- package/dist/C_WaterFall2.js.map +1 -1
- package/dist/{C_WorkFlow-2hJfvvTK.css.map → C_WorkFlow-BFzRGGhJ.css.map} +1 -1
- package/dist/{C_WorkFlow-DHoNjl8-.css.map → C_WorkFlow-DSyCOvRp.css.map} +1 -1
- package/dist/C_WorkFlow.css +193 -193
- package/dist/C_WorkFlow.js.map +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/C_WorkFlow2.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants2.d.ts +1 -1
- package/dist/constants3.d.ts +1 -1
- package/dist/constants4.d.ts +2 -2
- package/dist/constants5.d.ts +2 -2
- package/dist/data.d.ts +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.vue.d.ts +1 -1
- package/dist/index10.vue.d.ts +2 -2
- package/dist/index11.vue.d.ts +2 -2
- package/dist/index12.vue.d.ts +1 -1
- package/dist/index13.vue.d.ts +2 -2
- package/dist/index14.vue.d.ts +2 -2
- package/dist/index15.vue.d.ts +29 -9
- package/dist/index16.vue.d.ts +11 -4
- package/dist/index17.vue.d.ts +1 -1
- package/dist/index18.vue.d.ts +3 -3
- package/dist/index2.vue.d.ts +6 -6
- package/dist/index20.vue.d.ts +1 -1
- package/dist/index21.vue.d.ts +3 -3
- package/dist/index22.vue.d.ts +3 -3
- package/dist/index23.vue.d.ts +15 -4
- package/dist/index24.vue.d.ts +13 -4
- package/dist/index25.vue.d.ts +4 -2
- package/dist/index26.vue.d.ts +2 -2
- package/dist/index27.vue.d.ts +3 -3
- package/dist/index28.vue.d.ts +4 -4
- package/dist/index3.vue.d.ts +1 -1
- package/dist/index4.vue.d.ts +4 -4
- package/dist/index6.vue.d.ts +3 -3
- package/dist/index7.vue.d.ts +7 -5
- package/dist/resolver.cjs +1 -1
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +2 -21
- package/dist/resolver.d.ts +2 -21
- package/dist/resolver.js +1 -1
- package/dist/resolver.js.map +1 -1
- package/dist/style.css +1991 -1991
- package/dist/useCalendarEvents.d.ts +8 -5
- package/dist/useCollapsePanel.d.ts +2 -2
- package/dist/useCropperCore.d.ts +6 -6
- package/dist/useDraggableLayout.d.ts +3 -3
- package/dist/useDynamicFormState.d.ts +31 -3726
- package/dist/useEdgeInteraction.d.ts +2 -2
- package/dist/useFullscreen.d.ts +2 -2
- package/dist/useInfiniteScroll.d.ts +2 -2
- package/dist/useModalEdit.d.ts +6 -6
- package/dist/useQRCode.d.ts +5 -5
- package/dist/useSignatureHistory.d.ts +2 -2
- package/dist/useSplitResize.d.ts +6 -6
- package/dist/useTimeSelection.d.ts +3 -3
- package/dist/useTreeOperations.d.ts +5 -5
- package/dist/useWorkflowValidation.d.ts +3 -3
- package/package.json +12 -7
- package/dist/C_ActionBar-DYG0Yf3A.css.map +0 -1
- package/dist/C_ActionBar-MAjRhqcI.css.map +0 -1
- package/dist/C_Cascade-Dq0S5Jkm.css.map +0 -1
- package/dist/C_Cascade-IUUHIh7r.css.map +0 -1
- package/dist/C_Code-BFi5xxnM.css.map +0 -1
- package/dist/C_Code-CZ7yfnri.css.map +0 -1
- package/dist/C_FullCalendar-BQA0OjGB.css.map +0 -1
- package/dist/C_FullCalendar-ChJUosAi.css.map +0 -1
- package/dist/C_Steps-Bk1krgiR.css.map +0 -1
- package/dist/C_Steps-Dn2CMpy1.css.map +0 -1
- package/dist/C_Time-BzyQVvTS.css.map +0 -1
- package/dist/C_Time-DmpKLQHc.css.map +0 -1
- package/dist/themes/glass-morphism.css +0 -1
package/dist/C_WorkFlow2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,Teleport 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,inject as f,isRef as p,markRaw as m,nextTick as h,normalizeClass as g,normalizeStyle as _,onMounted as v,openBlock as y,provide as b,ref as x,renderList as S,toDisplayString as C,unref as w,vShow as T,watch as E,withCtx as D,withDirectives as ee}from"vue";import{NAvatar as O,NButton as k,NCard as A,NDrawer as j,NDrawerContent as M,NInput as N,NModal as P,NRadio as te,NRadioGroup as ne,NSelect as F,NSpace as re,NTag as ie,NTree as ae,useMessage as I}from"naive-ui";import{VueFlow as L}from"@vue-flow/core";const R=[{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`}],oe=[{value:`any`,label:`或签`,desc:`任意一人同意即可通过`},{value:`all`,label:`会签`,desc:`所有人都同意才能通过`},{value:`sequence`,label:`顺序审批`,desc:`按选择顺序依次审批`}],se=[{label:`申请金额`,value:`amount`},{label:`申请人部门`,value:`department`},{label:`申请类型`,value:`type`},{label:`紧急程度`,value:`priority`}],z=[{label:`等于`,value:`equals`},{label:`大于`,value:`greater_than`},{label:`小于`,value:`less_than`},{label:`包含`,value:`contains`},{label:`不等于`,value:`not_equals`}],B={start:`发起人`,approval:`审批人`,copy:`抄送人`,condition:`条件分支`},ce={approval:`审批人设置`,copy:`抄送人设置`,condition:`条件分支设置`},V={approvers:`审批人`,conditions:`条件配置`,connection:`节点连接`,copyUsers:`抄送人`},H={required:`必填`,incomplete:`不完整`,warning:`警告`,error:`错误`},U={id:`start-1`,type:`start`,position:{x:150,y:100},data:{title:`发起人`,status:`active`,initiators:[]}},W=e=>`https://ui-avatars.com/api/?name=${encodeURIComponent(e)}&background=random`,G=()=>`condition-${Date.now()}`,K=(e,t)=>`edge-${e}-${t}`,le=()=>({id:G(),name:``,field:``,operator:`equals`,value:``}),ue={key:0,class:`max-h-60vh overflow-y-auto`},q={class:`config-section`},J={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},Y={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)`}},de={key:0,class:`rounded-lg p-4 mb-4 border`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},X={class:`mb-2 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},Z={class:`flex flex-wrap gap-3`},Q={class:`flex items-center gap-2`},fe={class:`font-medium text-sm`},pe={class:`text-xs px-1.5 py-0.5 rounded`,style:{color:`var(--n-text-color-3)`,background:`var(--n-color-embedded)`}},me={key:0,class:`mt-4`},he={class:`flex flex-col gap-1`},ge={class:`text-sm`},_e={class:`text-xs`,style:{color:`var(--n-text-color-3)`}},ve={class:`max-h-60vh overflow-y-auto`},ye={class:`config-section`},be={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},xe={class:`space-y-3`},Se={class:`flex items-center gap-3 flex-nowrap min-h-10 p-2`},Ce=d({__name:`NodeConfigModal`,props:{show:{type:Boolean,default:!1},currentNode:{default:null},users:{default:()=>[]},departments:{default:()=>[]}},emits:[`update:show`,`save`,`cancel`],setup(t,{emit:r}){let d=t,f=r,p=I(),m=x(``),h=x([]),g=x([]),_=x(`any`),v=x(!1),b=x([]),T=i({get:()=>d.show,set:e=>f(`update:show`,e)}),ee=i(()=>d.currentNode?.type===`start`?`发起人设置`:ce[d.currentNode?.type]||`节点设置`),j=i(()=>{let e=[],t=new Map;return d.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})}),(d.users?.filter(e=>!m.value||e.name.includes(m.value)||e.department.includes(m.value))||[]).forEach(e=>{let n=d.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}),M=i(()=>d.users?.filter(e=>h.value.includes(e.id))||[]),L=i(()=>d.users?.filter(e=>g.value.includes(e.id))||[]),R=i(()=>d.users?.filter(e=>h.value.includes(e.id))||[]),B=e=>{h.value=e.filter(e=>!e.startsWith(`dept-`))},V=e=>{g.value=e.filter(e=>!e.startsWith(`dept-`))},H=e=>{h.value=h.value.filter(t=>t!==e)},U=e=>{g.value=g.value.filter(t=>t!==e)},G=e=>{h.value=h.value.filter(t=>t!==e)},K=()=>b.value.push(le()),Ce=e=>b.value.splice(e,1),we=e=>{let{initiators:t}=e.data;h.value=t?t.map(e=>e.id):[]},Te=e=>{h.value=(e.data.approvers||[]).map(e=>e.id),_.value=e.data.approvalMode||`any`},Ee=e=>{g.value=(e.data.copyUsers||[]).map(e=>e.id)},De=e=>{b.value=e.data.conditions||[]},Oe=async()=>{if(h.value.length===0)return p.error(`请选择发起人`),!1;let e=R.value;return f(`save`,{initiators:e}),p.success(`已设置 ${e.length} 个发起人`),!0},ke=async()=>{if(h.value.length===0)return p.error(`请至少选择一个审批人`),!1;let e=M.value;return f(`save`,{approvers:e,approvalMode:_.value}),p.success(`已设置 ${e.length} 个审批人`),!0},Ae=async()=>{let e=L.value;return f(`save`,{copyUsers:e}),p.success(`已设置 ${e.length} 个抄送人`),!0},je=async()=>{if(b.value.length===0)return p.error(`请至少添加一个条件分支`),!1;let e=b.value.filter(e=>e.name&&e.field&&e.operator&&e.value);return e.length===0?(p.error(`请完善条件配置`),!1):(f(`save`,{conditions:e}),p.success(`已设置 ${e.length} 个条件分支`),!0)},Me=async()=>{if(!d.currentNode)return!1;v.value=!0;try{let e={start:Oe,approval:ke,copy:Ae,condition:je}[d.currentNode.type];return e?await e():!1}catch(e){return p.error(`保存配置失败`),console.error(`Save node config error:`,e),!1}finally{v.value=!1}},Ne=()=>{f(`cancel`)};E(()=>d.currentNode,e=>{if(e){m.value=``;let t={start:we,approval:Te,copy:Ee,condition:De}[e.type];t&&t(e)}},{immediate:!0});let Pe=i(()=>[`start`,`approval`,`copy`].includes(d.currentNode?.type||``)),$=i(()=>{let e=d.currentNode?.type;return e===`start`?{icon:`mdi:account-star`,title:`选择发起人`,checkedKeys:h.value,onSelect:B,selectedUsers:R.value,selectedLabel:`已选择发起人`,tagType:`primary`,onRemove:G}:e===`approval`?{icon:`mdi:account-check`,title:`选择审批人`,checkedKeys:h.value,onSelect:B,selectedUsers:M.value,selectedLabel:`已选择审批人`,tagType:`info`,onRemove:H}:e===`copy`?{icon:`mdi:email-outline`,title:`选择抄送人`,checkedKeys:g.value,onSelect:V,selectedUsers:L.value,selectedLabel:`已选择抄送人`,tagType:`success`,onRemove:U}:{icon:``,title:``,checkedKeys:[],onSelect:e=>{},selectedUsers:[],selectedLabel:``,tagType:`default`,onRemove:e=>{}}});return(t,r)=>(y(),a(w(P),{show:T.value,"onUpdate:show":r[2]||=e=>T.value=e,style:{width:`900px`},"mask-closable":!1,preset:`dialog`,title:ee.value,"positive-text":`确定`,"negative-text":`取消`,loading:v.value,onPositiveClick:Me,onNegativeClick:Ne},{default:D(()=>[o(` 公共选择面板 `),Pe.value?(y(),s(`div`,ue,[c(`div`,q,[c(`h4`,J,[$.value.icon?(y(),a(w(e),{key:0,name:$.value.icon,size:16},null,8,[`name`])):o(`v-if`,!0),l(` `+C($.value.title),1)]),u(w(N),{value:m.value,"onUpdate:value":r[0]||=e=>m.value=e,placeholder:`搜索用户姓名或部门`,clearable:``,class:`mb-4`},{prefix:D(()=>[u(w(e),{name:`mdi:magnify`,size:16})]),_:1},8,[`value`]),c(`div`,Y,[u(w(ae),{data:j.value,"checked-keys":$.value.checkedKeys,selectable:!1,checkable:``,cascade:``,"virtual-scroll":!0,style:{"max-height":`300px`},"onUpdate:checkedKeys":$.value.onSelect},null,8,[`data`,`checked-keys`,`onUpdate:checkedKeys`])]),$.value.selectedUsers.length>0?(y(),s(`div`,de,[c(`h5`,X,C($.value.selectedLabel)+` (`+C($.value.selectedUsers.length)+`) `,1),c(`div`,Z,[(y(!0),s(n,null,S($.value.selectedUsers,e=>(y(),a(w(ie),{key:e.id,closable:``,type:$.value.tagType,onClose:t=>$.value.onRemove(e.id)},{default:D(()=>[c(`div`,Q,[u(w(O),{src:e.avatar,"fallback-src":w(W)(e.name),size:`small`},null,8,[`src`,`fallback-src`]),c(`span`,fe,C(e.name),1),c(`span`,pe,C(e.department),1)])]),_:2},1032,[`type`,`onClose`]))),128))])])):o(`v-if`,!0)]),o(` 审批节点时附带审批模式 `),d.currentNode?.type===`approval`?(y(),s(`div`,me,[r[3]||=c(`h5`,{class:`mb-3 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},` 审批模式 `,-1),u(w(ne),{value:_.value,"onUpdate:value":r[1]||=e=>_.value=e},{default:D(()=>[u(w(re),{vertical:``},{default:D(()=>[(y(!0),s(n,null,S(w(oe),e=>(y(),a(w(te),{key:e.value,value:e.value},{default:D(()=>[c(`div`,he,[c(`strong`,ge,C(e.label),1),c(`span`,_e,C(e.desc),1)])]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`value`])])):o(`v-if`,!0)])):d.currentNode?.type===`condition`?(y(),s(n,{key:1},[o(` 条件节点配置 `),c(`div`,ve,[c(`div`,ye,[c(`h4`,be,[u(w(e),{name:`mdi:source-branch`,size:16}),r[4]||=l(` 条件分支设置 `,-1)]),c(`div`,xe,[(y(!0),s(n,null,S(b.value,(t,n)=>(y(),s(`div`,{key:t.id,class:`condition-item`},[u(w(A),{size:`small`,class:`border border-gray-200 hover:border-gray-300 transition-colors`},{default:D(()=>[c(`div`,Se,[u(w(N),{value:t.name,"onUpdate:value":e=>t.name=e,placeholder:`分支名称`,style:{width:`150px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),u(w(F),{value:t.field,"onUpdate:value":e=>t.field=e,placeholder:`选择字段`,options:w(se),style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),u(w(F),{value:t.operator,"onUpdate:value":e=>t.operator=e,placeholder:`操作符`,options:w(z),style:{width:`100px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),u(w(N),{value:t.value,"onUpdate:value":e=>t.value=e,placeholder:`值`,style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),u(w(k),{quaternary:``,type:`error`,onClick:e=>Ce(n),class:`flex-shrink-0 ml-auto`},{icon:D(()=>[u(w(e),{name:`mdi:delete`,size:16})]),_:2},1032,[`onClick`])])]),_:2},1024)]))),128)),u(w(k),{dashed:``,block:``,onClick:K,class:`w-full`},{icon:D(()=>[u(w(e),{name:`mdi:plus`,size:16})]),default:D(()=>[r[5]||=l(` 添加条件 `,-1)]),_:1,__:[5]})])])])],2112)):o(`v-if`,!0)]),_:1},8,[`show`,`title`,`loading`]))}}),we={class:`start-node`},Te={class:`node-content`},Ee={class:`node-info`},De={class:`node-text`},Oe={key:0,class:`initiator-name`},ke={key:1,class:`placeholder-text`};var Ae=t(d({__name:`StartNode`,props:{id:{},data:{}},setup(t){let n=t,r=f(`showAddMenu`),a=i(()=>{let{initiators:e}=n.data;return!e||!Array.isArray(e)||e.length===0?``:e.map(e=>e?.name||`未知用户`).join(`、`)}),l=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)};return(t,n)=>(y(),s(`div`,we,[o(` 主要内容区域 `),c(`div`,Te,[n[0]||=c(`div`,{class:`node-icon`},`🚀`,-1),c(`div`,Ee,[c(`div`,De,C(t.data.title),1),a.value?(y(),s(`div`,Oe,C(a.value),1)):(y(),s(`div`,ke,`点击设置发起人`))])]),o(` 添加节点按钮 `),c(`div`,{class:`add-node-btn`,onClick:l,title:`添加下一个节点`},[u(w(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-f2e5a1d2`]]);const je={class:`approval-node`},Me={class:`node-header`},Ne={class:`node-icon`},Pe={class:`node-title`},$={key:0,class:`node-badge`},Fe={key:1,class:`approval-mode-badge`},Ie={class:`node-content`},Le={key:0,class:`approvers-list`},Re={class:`approver-info`},ze={class:`approver-avatar`},Be={class:`approver-details`},Ve={class:`approver-name`},He={class:`approver-dept`},Ue={class:`approver-role`},We={key:0,class:`more-count`},Ge={key:1,class:`placeholder`};var Ke=t(d({__name:`ApprovalNode`,props:{id:{},data:{}},setup(t){let r=t,a=f(`showAddMenu`),l=f(`deleteNode`),d=i(()=>r.data.approvers??[]),p=i(()=>d.value.length),m=i(()=>d.value.slice(0,3)),h=i(()=>Math.max(0,p.value-3)),_=e=>({any:`或签`,all:`会签`,sequence:`顺序`})[e]||``,v=e=>`https://ui-avatars.com/api/?name=${encodeURIComponent(e)}&background=random`,b=()=>{},x=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();a&&a({x:t.left+t.width/2,y:t.bottom+10},r.id)},T=e=>{e.stopPropagation(),l&&l(r.id)};return(t,r)=>(y(),s(`div`,je,[c(`div`,{class:g([`status-indicator`,t.data.status])},null,2),o(` 删除按钮 `),c(`div`,{class:`delete-btn`,onClick:T,title:`删除节点`},[u(w(e),{name:`mdi:close`,size:12})]),c(`div`,{class:`node-card`,onClick:b},[c(`div`,Me,[c(`div`,Ne,[u(w(e),{name:`mdi:account`,size:12,color:`white`})]),c(`span`,Pe,C(t.data.title),1),p.value>0?(y(),s(`div`,$,C(p.value),1)):o(`v-if`,!0),t.data.approvalMode?(y(),s(`div`,Fe,C(_(t.data.approvalMode)),1)):o(`v-if`,!0)]),c(`div`,Ie,[p.value>0?(y(),s(`div`,Le,[(y(!0),s(n,null,S(m.value,e=>(y(),s(`div`,{key:e.id,class:`approver-tag`},[c(`div`,Re,[c(`div`,ze,[u(w(O),{src:e.avatar,"fallback-src":v(e.name),size:`small`},null,8,[`src`,`fallback-src`])]),c(`div`,Be,[c(`span`,Ve,C(e.name),1),c(`span`,He,C(e.department),1),c(`span`,Ue,C(e.role),1)])])]))),128)),h.value>0?(y(),s(`div`,We,`+`+C(h.value),1)):o(`v-if`,!0)])):(y(),s(`div`,Ge,[u(w(e),{name:`mdi:account-plus`,size:24,color:`#9ca3af`}),r[0]||=c(`span`,null,`请设置审批人`,-1)]))])]),c(`div`,{class:`add-node-btn`,onClick:x,title:`添加下一个节点`},[u(w(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-25b98d0b`]]);const qe={class:`copy-node`},Je={class:`node-header`},Ye={class:`node-title`},Xe={key:0,class:`node-badge`},Ze={class:`node-content`},Qe={key:0,class:`copy-users-list`},$e={key:0,class:`more-count`},et={key:1,class:`placeholder`};var tt=t(d({__name:`CopyNode`,props:{id:{},data:{}},setup(t){let r=t,a=f(`showAddMenu`),l=f(`deleteNode`),d=i(()=>r.data.copyUsers??[]),p=i(()=>d.value.length),m=i(()=>d.value.slice(0,3)),h=i(()=>Math.max(0,p.value-3)),_=()=>{},v=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();a&&a({x:t.left+t.width/2,y:t.bottom+10},r.id)},b=e=>{e.stopPropagation(),l&&l(r.id)};return(t,r)=>(y(),s(`div`,qe,[c(`div`,{class:g([`status-indicator`,t.data.status])},null,2),o(` 删除按钮 `),c(`div`,{class:`delete-btn`,onClick:b,title:`删除节点`},[u(w(e),{name:`mdi:close`,size:12})]),c(`div`,{class:`node-card`,onClick:_},[c(`div`,Je,[r[0]||=c(`div`,{class:`node-icon`},`📋`,-1),c(`span`,Ye,C(t.data.title),1),p.value>0?(y(),s(`div`,Xe,C(p.value),1)):o(`v-if`,!0)]),c(`div`,Ze,[p.value>0?(y(),s(`div`,Qe,[(y(!0),s(n,null,S(m.value,e=>(y(),s(`div`,{key:e.id,class:`copy-user-tag`},C(e.name),1))),128)),h.value>0?(y(),s(`div`,$e,`+`+C(h.value),1)):o(`v-if`,!0)])):(y(),s(`div`,et,`请设置抄送人`))])]),c(`div`,{class:`add-node-btn`,onClick:v,title:`添加下一个节点`},[u(w(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-8723da4d`]]);const nt={class:`condition-node`},rt={class:`node-card`},it={class:`node-header`},at={class:`node-title`},ot={key:0,class:`node-badge`},st={class:`node-content`},ct={key:0,class:`conditions-list`},lt={key:0,class:`more-count`},ut={key:1,class:`placeholder`};var dt=t(d({__name:`ConditionNode`,props:{id:{},data:{}},setup(t){let r=t,a=f(`showAddMenu`),l=f(`deleteNode`),d=i(()=>r.data.conditions??[]),p=i(()=>d.value.length),m=i(()=>d.value.slice(0,2)),h=i(()=>Math.max(0,p.value-2)),_=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();a&&a({x:t.left+t.width/2,y:t.bottom+10},r.id)},v=e=>{e.stopPropagation(),l&&l(r.id)};return(t,r)=>(y(),s(`div`,nt,[c(`div`,{class:g([`status-indicator`,t.data.status])},null,2),o(` 删除按钮 `),c(`div`,{class:`delete-btn`,onClick:v,title:`删除节点`},[u(w(e),{name:`mdi:close`,size:12})]),c(`div`,rt,[c(`div`,it,[r[0]||=c(`div`,{class:`node-icon`},`🔀`,-1),c(`span`,at,C(t.data.title),1),p.value>0?(y(),s(`div`,ot,C(p.value),1)):o(`v-if`,!0)]),c(`div`,st,[p.value>0?(y(),s(`div`,ct,[(y(!0),s(n,null,S(m.value,e=>(y(),s(`div`,{key:e.id,class:`condition-tag`},[r[1]||=c(`span`,{class:`condition-icon`},`→`,-1),c(`span`,null,C(e.name||`条件`+(m.value.indexOf(e)+1)),1)]))),128)),h.value>0?(y(),s(`div`,lt,`+`+C(h.value),1)):o(`v-if`,!0)])):(y(),s(`div`,ut,`请设置分支条件`))])]),c(`div`,{class:`add-node-btn`,onClick:_,title:`添加下一个节点`},[u(w(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-94be7bc6`]]);const ft={start:m(Ae),approval:m(Ke),copy:m(tt),condition:m(dt)};function pt(e,t,n){let r=I(),a=x([{...U}]),o=x([]),s=x(!1),c=x({x:0,y:0}),l=x(!1),u=x(null),d=x(null),f=i(()=>ft),p=i(()=>{let e={totalNodes:a.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0};return a.value.forEach(t=>{t.type===`approval`?e.approvalNodes++:t.type===`copy`?e.copyNodes++:t.type===`condition`&&e.conditionNodes++}),e}),m=()=>({nodes:a.value,edges:o.value,config:{version:`1.0`,createdAt:new Date().toISOString()}}),g=()=>{let e=m();t(`update:modelValue`,e),t(`change`,e)},_=(e=60,t=400)=>{h(()=>{setTimeout(()=>{n.value?.fitView?.({padding:e,duration:t})},100)})},y=(e,t)=>{c.value={x:typeof e.x==`number`?e.x:0,y:typeof e.y==`number`?e.y:0},d.value=t||null,s.value=!0},S=()=>{s.value=!1},C=e=>{if(e===`start-1`){r.warning(`不能删除开始节点`);return}let t=a.value.findIndex(t=>t.id===e);if(t===-1)return;let n=o.value.filter(t=>t.target===e),i=o.value.filter(t=>t.source===e);a.value.splice(t,1),o.value=o.value.filter(t=>t.source!==e&&t.target!==e),n.forEach(e=>{i.forEach(t=>{o.value.push({id:K(e.source,t.target),source:e.source,target:t.target,animated:!0,type:`default`})})}),a.value.forEach((e,n)=>{n>=t&&(e.position.y-=180)}),g(),r.success(`节点已删除`),_()};b(`showAddMenu`,y),b(`deleteNode`,C);let w=()=>{let e=a.value.length-1,t=a.value[e];if(d.value){let n=a.value.findIndex(e=>e.id===d.value);n!==-1&&(e=n,t=a.value[e])}return{targetNodeIndex:e,targetNode:t}},T=(e,t)=>({id:`${e}-${Date.now()}`,type:e,position:{x:t?.position.x||150,y:(t?.position.y||130)+180},data:{title:B[e],status:`pending`,...e===`approval`&&{approvers:[],approvalMode:`any`},...e===`copy`&&{copyUsers:[]},...e===`condition`&&{conditions:[]}}}),D=(e,t)=>{let n=o.value.filter(t=>t.source===e.id);o.value=o.value.filter(t=>t.source!==e.id),o.value.push({id:K(e.id,t.id),source:e.id,target:t.id,animated:!0,type:`default`}),n.forEach(e=>{o.value.push({id:K(t.id,e.target),source:t.id,target:e.target,animated:!0,type:`default`})})};return E(()=>e.modelValue,e=>{e&&e!==m()&&(a.value=e.nodes||[],o.value=e.edges||[])},{deep:!0}),v(()=>{h(()=>{setTimeout(()=>{n.value?.fitView?.({padding:80,includeHiddenNodes:!1,minZoom:.8,maxZoom:1.2,duration:600})},300)})}),{nodes:a,edges:o,showAddMenu:s,menuPosition:c,showNodeConfig:l,currentNode:u,nodeTypes:f,workflowStats:p,addNode:e=>{try{let{targetNodeIndex:t,targetNode:n}=w(),r=T(e,n);a.value.splice(t+1,0,r);for(let e=t+2;e<a.value.length;e++)a.value[e].position.y+=180;n&&D(n,r),s.value=!1,d.value=null,g(),_()}catch(e){console.error(`Error adding node:`,e),r.error(`添加节点失败,请重试`)}},onNodeClick:e=>{let{node:n}=e;u.value=n,l.value=!0,t(`node-click`,n)},closeAddMenu:S,handleConfigSave:e=>{if(!u.value)return;let t=a.value.findIndex(e=>e.id===u.value.id);if(t!==-1){let n={...a.value[t],data:{...a.value[t].data,...e}};a.value.splice(t,1,n),u.value=n}g(),l.value=!1,r.success(`节点配置已保存`)},resetNodes:()=>{a.value=[{...U}],o.value=[],g(),_(80,600),r.success(`画布已清空`)},getCurrentWorkflowData:m,fitView:()=>{if(!n.value?.fitView){r.warning(`画布未准备就绪,请稍后重试`);return}h(()=>{n.value.fitView({padding:50,includeHiddenNodes:!1,minZoom:.5,maxZoom:1.5,duration:800})}),r.success(`已适应窗口大小`)},deleteNode:C}}function mt(e,t,n,r){let i=I(),a=x([]),o=x(!1),s=()=>{let n=[];e.value.forEach(e=>{if(e.type===`approval`&&(e.data.approvers||[]).length===0&&n.push({nodeId:e.id,nodeName:e.data.title,field:`approvers`,message:`审批节点必须设置至少一个审批人,否则流程无法正常运行`,type:`required`}),e.type===`condition`){let t=e.data.conditions||[];if(t.length===0)n.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`条件分支节点必须配置至少一个分支条件,否则无法进行条件判断`,type:`required`});else{let r=t.filter(e=>!e.name||!e.field||!e.operator||!e.value);r.length>0&&n.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`有 ${r.length} 个条件分支配置不完整,请完善所有必填字段`,type:`incomplete`})}}});let r=new Set;return t.value.forEach(e=>{r.add(e.source),r.add(e.target)}),e.value.forEach(e=>{e.type!==`start`&&!r.has(e.id)&&n.push({nodeId:e.id,nodeName:e.data.title,field:`connection`,message:`此节点未与其他节点连接,可能导致流程中断`,type:`warning`})}),n};return{validationErrors:a,showValidationErrors:o,validateWorkflow:s,validateCurrentWorkflow:()=>{let e=s();a.value=e,e.length===0?(i.success(`工作流验证通过!所有节点配置正确`),o.value=!1):(i.error(`发现 ${e.length} 个问题,请查看详细错误`),o.value=!0,r?.onValidateError?.(e))},jumpToErrorNode:t=>{let a=e.value.find(e=>e.id===t);!a||!n.value||(n.value.setCenter(a.position.x,a.position.y,{zoom:1.2,duration:800}),setTimeout(()=>{r?.onShowNodeConfig?.(a),o.value=!1},900),i.info(`已定位到节点:${a.data.title}`))},getFieldDisplayName:e=>V[e]||e,getErrorTypeText:e=>H[e]||e,resetValidation:()=>{a.value=[],o.value=!1}}}const ht={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`}},gt={any:`或签(任一审批人通过即可)`,all:`会签(所有审批人必须通过)`,sequence:`顺序审批(按顺序依次审批)`},_t={equals:`等于`,not_equals:`不等于`,greater_than:`大于`,less_than:`小于`,contains:`包含`};function vt(e,t){let n=x(!1),r=x([]),i=x({totalNodes:0,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:0}),a={start:e=>{let t=e.initiators||[];return t.length>0?[{type:`users`,label:`发起人`,users:t}]:[{type:`text`,label:`发起人`,value:`所有人`}]},approval:e=>{let t=e.approvalMode||`any`,n=e.approvers||[],r=[{type:`mode`,label:`审批方式`,value:gt[t]||t,modeKey:t}];return n.length>0?r.push({type:`users`,label:`审批人`,users:n}):r.push({type:`warning`,label:`审批人`,value:`未设置`}),r},copy:e=>{let t=e.copyUsers||[];return t.length>0?[{type:`users`,label:`抄送人`,users:t}]:[{type:`text`,label:`抄送人`,value:`未设置`}]},condition:e=>{let t=e.conditions||[];return t.length===0?[{type:`warning`,label:`条件分支`,value:`未配置`}]:t.map((e,t)=>{let n=_t[e.operator]||e.operator;return{type:`text`,label:`分支 ${t+1}`,value:`${e.name||`未命名`} — ${e.field||`?`} ${n} ${e.value||`?`}`}})}},o=e=>{let t=a[e.type||`start`];return t?t(e.data):[]},s=()=>{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},c=()=>s().map((e,t)=>{let n=ht[e.type||`start`]||ht.start;return{order:t+1,node:e,nodeTypeLabel:n.label,icon:n.icon,colorClass:n.colorClass,details:o(e)}}),l=()=>{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=c(),i.value=l(),n.value=!0},closePreview:()=>{n.value=!1}}}const yt={class:`approval-workflow-container`},bt={class:`floating-toolbar`},xt={class:`add-menu-content`},St=[`onClick`],Ct={class:`menu-text`},wt={key:0,class:`validation-success`},Tt={class:`success-icon`},Et={key:1,class:`validation-errors`},Dt={class:`error-summary`},Ot={class:`error-icon`},kt={class:`error-list`},At={class:`error-header`},jt={class:`error-number`},Mt={class:`error-info`},Nt={class:`error-node`},Pt={class:`error-field`},Ft={class:`error-message`},It={class:`error-actions`},Lt={class:`validation-footer`},Rt={class:`preview-stats`},zt={class:`stat-item`},Bt={class:`stat-value`},Vt={class:`stat-item approval`},Ht={class:`stat-value`},Ut={class:`stat-item copy`},Wt={class:`stat-value`},Gt={class:`stat-item condition`},Kt={class:`stat-value`},qt={class:`stat-item edge`},Jt={class:`stat-value`},Yt={class:`preview-timeline`},Xt={class:`step-connector`},Zt={class:`step-dot`},Qt={key:0,class:`step-line`},$t={class:`step-content`},en={class:`step-header`},tn={class:`step-order`},nn={class:`step-type-badge`},rn={class:`step-title`},an={key:0,class:`step-details`},on={class:`detail-label`},sn={class:`warning-text`},cn={key:0,class:`preview-empty`},ln={class:`preview-footer`};var un=t(d({name:`C_WorkFlow`,__name:`index`,props:{users:{default:()=>[]},roles:{default:()=>[]},departments:{default:()=>[]},modelValue:{},readonly:{type:Boolean,default:!1},theme:{default:`light`}},emits:[`update:modelValue`,`change`,`node-click`,`edge-click`,`save`,`validate-error`],setup(t,{expose:i,emit:d}){let f=t,m=d,h=I(),v=x(),{nodes:b,edges:E,showAddMenu:O,menuPosition:A,showNodeConfig:N,currentNode:P,nodeTypes:te,workflowStats:ne,addNode:F,onNodeClick:re,closeAddMenu:ae,handleConfigSave:oe,resetNodes:se,getCurrentWorkflowData:z,fitView:B,deleteNode:ce}=pt(f,m,v),{validationErrors:V,showValidationErrors:H,validateWorkflow:U,validateCurrentWorkflow:W,jumpToErrorNode:G,getFieldDisplayName:K,getErrorTypeText:le,resetValidation:ue}=mt(b,E,v,{onShowNodeConfig:e=>{P.value=e,N.value=!0},onValidateError:e=>m(`validate-error`,e)}),{showPreview:q,previewSteps:J,previewStats:Y,openPreview:de,closePreview:X}=vt(b,E),Z=()=>{let e=U();if(e.length>0){h.error(`工作流验证失败: ${e[0].message}`),H.value=!0;return}m(`save`,z()),h.success(`工作流保存成功`)},Q=()=>{de()},fe=()=>{X(),Z()},pe=()=>{se(),ue()};return i({validateWorkflow:U,getCurrentWorkflowData:z,saveWorkflow:Z,previewWorkflow:Q,deleteNode:ce,stats:ne}),(t,i)=>(y(),s(`div`,yt,[o(` 浮动工具栏 `),c(`div`,bt,[u(w(k),{size:`small`,type:`primary`,onClick:Z},{icon:D(()=>[u(w(e),{name:`mdi:content-save`,size:16})]),default:D(()=>[i[7]||=l(` 保存 `,-1)]),_:1,__:[7]}),u(w(k),{size:`small`,onClick:Q},{icon:D(()=>[u(w(e),{name:`mdi:eye`,size:16})]),default:D(()=>[i[8]||=l(` 预览 `,-1)]),_:1,__:[8]}),u(w(k),{size:`small`,onClick:w(W),title:`检查工作流配置是否正确`},{icon:D(()=>[u(w(e),{name:`mdi:check-circle`,size:16})]),default:D(()=>[i[9]||=l(` 验证流程 `,-1)]),_:1,__:[9]},8,[`onClick`]),i[10]||=c(`div`,{class:`toolbar-divider`},null,-1),u(w(k),{size:`small`,onClick:w(B),title:`适应窗口`},{icon:D(()=>[u(w(e),{name:`mdi:fit-to-screen`,size:16})]),_:1},8,[`onClick`]),u(w(k),{size:`small`,type:`error`,onClick:pe,title:`清空画布`},{icon:D(()=>[u(w(e),{name:`mdi:delete-sweep`,size:16})]),_:1})]),o(` Vue Flow 画布 `),u(w(L),{ref_key:`vueFlowRef`,ref:v,nodes:w(b),"onUpdate:nodes":i[0]||=e=>p(b)?b.value=e:null,edges:w(E),"onUpdate:edges":i[1]||=e=>p(E)?E.value=e:null,"node-types":w(te),class:`workflow-canvas`,"default-viewport":{zoom:1,x:0,y:0},"min-zoom":.5,"max-zoom":2,"fit-view-on-init":!0,"nodes-draggable":!0,"elements-selectable":!0,onNodeClick:w(re),onPaneClick:w(ae)},null,8,[`nodes`,`edges`,`node-types`,`onNodeClick`,`onPaneClick`]),o(` 节点添加菜单 `),(y(),a(r,{to:`body`},[ee(c(`div`,{class:`add-node-menu`,style:_({left:w(A).x+`px`,top:w(A).y+`px`})},[c(`div`,xt,[(y(!0),s(n,null,S(w(R),t=>(y(),s(`div`,{key:t.type,class:`add-menu-item`,onClick:e=>w(F)(t.type)},[c(`div`,{class:g([`menu-icon`,t.iconClass])},[u(w(e),{name:t.icon,size:16},null,8,[`name`])],2),c(`span`,Ct,C(t.label),1)],8,St))),128))])],4),[[T,w(O)]])])),o(` 节点配置弹窗 - 拆分到独立组件 `),u(Ce,{show:w(N),"onUpdate:show":i[2]||=e=>p(N)?N.value=e:null,"current-node":w(P),users:t.users,departments:t.departments,onSave:w(oe),onCancel:i[3]||=e=>N.value=!1},null,8,[`show`,`current-node`,`users`,`departments`,`onSave`]),o(` 验证错误日志抽屉 `),u(w(j),{show:w(H),"onUpdate:show":i[5]||=e=>p(H)?H.value=e:null,width:450,placement:`right`},{default:D(()=>[u(w(M),{title:`流程验证结果`,closable:``},{footer:D(()=>[c(`div`,Lt,[u(w(k),{onClick:i[4]||=e=>H.value=!1},{default:D(()=>i[16]||=[l(`关闭`,-1)]),_:1,__:[16]}),u(w(k),{type:`primary`,onClick:w(W)},{icon:D(()=>[u(w(e),{name:`mdi:refresh`,size:16})]),default:D(()=>[i[17]||=l(` 重新验证 `,-1)]),_:1,__:[17]},8,[`onClick`])])]),default:D(()=>[w(V).length===0?(y(),s(`div`,wt,[c(`div`,Tt,[u(w(e),{name:`mdi:check-circle`,size:32,color:`#52c41a`})]),i[11]||=c(`h3`,null,`验证通过`,-1),i[12]||=c(`p`,null,`工作流配置正确,所有节点都已正确设置!`,-1)])):(y(),s(`div`,Et,[c(`div`,Dt,[c(`div`,Ot,[u(w(e),{name:`mdi:alert-circle`,size:24,color:`#ff4d4f`})]),c(`h3`,null,`发现 `+C(w(V).length)+` 个问题`,1),i[13]||=c(`p`,null,`请修复以下问题后重新验证:`,-1)]),c(`div`,kt,[(y(!0),s(n,null,S(w(V),(t,n)=>(y(),s(`div`,{key:t.nodeId,class:`error-item`},[c(`div`,At,[c(`span`,jt,C(n+1),1),c(`div`,Mt,[c(`strong`,Nt,C(t.nodeName),1),c(`span`,Pt,C(w(K)(t.field)),1)]),c(`div`,{class:g([`error-type`,t.type])},C(w(le)(t.type)),3)]),c(`div`,Ft,C(t.message),1),c(`div`,It,[u(w(k),{size:`small`,type:`primary`,onClick:e=>w(G)(t.nodeId)},{icon:D(()=>[u(w(e),{name:`mdi:target`,size:16})]),default:D(()=>[i[14]||=l(` 定位节点 `,-1)]),_:2,__:[14]},1032,[`onClick`])])]))),128))]),i[15]||=c(`div`,{class:`validation-tips`},[c(`h4`,null,`💡 常见问题解决方案:`),c(`ul`,null,[c(`li`,null,[c(`strong`,null,`审批人未设置:`),l(`点击审批节点,在弹窗中选择审批人员 `)]),c(`li`,null,[c(`strong`,null,`条件分支未配置:`),l(`点击条件节点,添加至少一个条件分支 `)]),c(`li`,null,[c(`strong`,null,`节点连接断开:`),l(` 检查节点之间的连线是否正确 `)])])],-1)]))]),_:1})]),_:1},8,[`show`]),o(` 流程预览抽屉 `),u(w(j),{show:w(q),"onUpdate:show":i[6]||=e=>p(q)?q.value=e:null,width:520,placement:`right`},{default:D(()=>[u(w(M),{title:`流程预览`,closable:``},{footer:D(()=>[c(`div`,ln,[u(w(k),{onClick:w(X)},{default:D(()=>i[24]||=[l(`关闭`,-1)]),_:1,__:[24]},8,[`onClick`]),u(w(k),{type:`primary`,onClick:fe},{icon:D(()=>[u(w(e),{name:`mdi:content-save`,size:16})]),default:D(()=>[i[25]||=l(` 确认并保存 `,-1)]),_:1,__:[25]})])]),default:D(()=>[c(`div`,Rt,[c(`div`,zt,[c(`span`,Bt,C(w(Y).totalNodes),1),i[18]||=c(`span`,{class:`stat-label`},`总节点`,-1)]),c(`div`,Vt,[c(`span`,Ht,C(w(Y).approvalNodes),1),i[19]||=c(`span`,{class:`stat-label`},`审批`,-1)]),c(`div`,Ut,[c(`span`,Wt,C(w(Y).copyNodes),1),i[20]||=c(`span`,{class:`stat-label`},`抄送`,-1)]),c(`div`,Gt,[c(`span`,Kt,C(w(Y).conditionNodes),1),i[21]||=c(`span`,{class:`stat-label`},`条件`,-1)]),c(`div`,qt,[c(`span`,Jt,C(w(Y).totalEdges),1),i[22]||=c(`span`,{class:`stat-label`},`连线`,-1)])]),c(`div`,Yt,[(y(!0),s(n,null,S(w(J),(t,r)=>(y(),s(`div`,{key:t.node.id,class:g([`preview-step`,t.colorClass])},[o(` 时间线连接线 `),c(`div`,Xt,[c(`div`,Zt,[u(w(e),{name:t.icon,size:16},null,8,[`name`])]),r<w(J).length-1?(y(),s(`div`,Qt)):o(`v-if`,!0)]),o(` 步骤内容 `),c(`div`,$t,[c(`div`,en,[c(`span`,tn,`步骤 `+C(t.order),1),c(`span`,nn,C(t.nodeTypeLabel),1)]),c(`div`,rn,C(t.node.data.title),1),t.details.length>0?(y(),s(`div`,an,[(y(!0),s(n,null,S(t.details,(t,r)=>(y(),s(`div`,{key:r,class:g([`step-detail-item`,{"is-warning":t.type===`warning`}])},[c(`span`,on,C(t.label)+`:`,1),o(` 审批方式 badge `),t.type===`mode`?(y(),s(`span`,{key:0,class:g([`mode-badge`,t.modeKey])},C(t.value),3)):t.type===`users`?(y(),s(n,{key:1},[o(` 人员 tags `),(y(!0),s(n,null,S(t.users,t=>(y(),a(w(ie),{key:t.name,size:`small`,bordered:!1,round:``,class:`user-tag`},{icon:D(()=>[u(w(e),{name:`mdi:account`,size:12})]),default:D(()=>[l(` `+C(t.name),1)]),_:2},1024))),128))],64)):t.type===`warning`?(y(),s(n,{key:2},[o(` 警告文案 `),c(`span`,sn,` ⚠️ `+C(t.value),1)],2112)):(y(),s(n,{key:3},[o(` 普通文本 `),c(`span`,null,C(t.value),1)],2112))],2))),128))])):o(`v-if`,!0)])],2))),128))]),w(J).length===0?(y(),s(`div`,cn,[u(w(e),{name:`mdi:file-document-outline`,size:48,color:`#d1d5db`}),i[23]||=c(`p`,null,`暂无流程节点`,-1)])):o(`v-if`,!0)]),_:1})]),_:1},8,[`show`])]))}}),[[`__scopeId`,`data-v-c21f6a06`]]);export{pt as i,vt as n,mt as r,un as t};
|
|
1
|
+
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{NAvatar as n,NButton as r,NCard as i,NDrawer as a,NDrawerContent as o,NInput as s,NModal as c,NRadio as l,NRadioGroup as u,NSelect as d,NSpace as f,NTag as p,NTree as m,useMessage as h}from"naive-ui";import{Fragment as g,Teleport as _,computed as v,createBlock as y,createCommentVNode as b,createElementBlock as x,createElementVNode as S,createTextVNode as C,createVNode as w,defineComponent as T,inject as E,isRef as D,markRaw as O,nextTick as k,normalizeClass as A,normalizeStyle as j,onMounted as M,openBlock as N,provide as P,ref as F,renderList as I,toDisplayString as L,unref as R,vShow as ee,watch as z,withCtx as B,withDirectives as te}from"vue";import{VueFlow as ne}from"@vue-flow/core";const V=[{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`}],re=[{value:`any`,label:`或签`,desc:`任意一人同意即可通过`},{value:`all`,label:`会签`,desc:`所有人都同意才能通过`},{value:`sequence`,label:`顺序审批`,desc:`按选择顺序依次审批`}],ie=[{label:`申请金额`,value:`amount`},{label:`申请人部门`,value:`department`},{label:`申请类型`,value:`type`},{label:`紧急程度`,value:`priority`}],H=[{label:`等于`,value:`equals`},{label:`大于`,value:`greater_than`},{label:`小于`,value:`less_than`},{label:`包含`,value:`contains`},{label:`不等于`,value:`not_equals`}],U={start:`发起人`,approval:`审批人`,copy:`抄送人`,condition:`条件分支`},ae={approval:`审批人设置`,copy:`抄送人设置`,condition:`条件分支设置`},W={approvers:`审批人`,conditions:`条件配置`,connection:`节点连接`,copyUsers:`抄送人`},G={required:`必填`,incomplete:`不完整`,warning:`警告`,error:`错误`},K={id:`start-1`,type:`start`,position:{x:150,y:100},data:{title:`发起人`,status:`active`,initiators:[]}},q=e=>`https://ui-avatars.com/api/?name=${encodeURIComponent(e)}&background=random`,oe=()=>`condition-${Date.now()}`,J=(e,t)=>`edge-${e}-${t}`,se=()=>({id:oe(),name:``,field:``,operator:`equals`,value:``}),ce={key:0,class:`max-h-60vh overflow-y-auto`},Y={class:`config-section`},X={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},Z={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)`}},le={key:0,class:`rounded-lg p-4 mb-4 border`,style:{borderColor:`var(--n-border-color)`,background:`var(--n-color-embedded)`}},ue={class:`mb-2 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},Q={class:`flex flex-wrap gap-3`},de={class:`flex items-center gap-2`},fe={class:`font-medium text-sm`},pe={class:`text-xs px-1.5 py-0.5 rounded`,style:{color:`var(--n-text-color-3)`,background:`var(--n-color-embedded)`}},me={key:0,class:`mt-4`},he={class:`flex flex-col gap-1`},ge={class:`text-sm`},_e={class:`text-xs`,style:{color:`var(--n-text-color-3)`}},ve={class:`max-h-60vh overflow-y-auto`},ye={class:`config-section`},be={class:`flex items-center gap-2 mb-4 text-base font-semibold`,style:{color:`var(--n-text-color-1)`}},xe={class:`space-y-3`},Se={class:`flex items-center gap-3 flex-nowrap min-h-10 p-2`},Ce=T({__name:`NodeConfigModal`,props:{show:{type:Boolean,default:!1},currentNode:{default:null},users:{default:()=>[]},departments:{default:()=>[]}},emits:[`update:show`,`save`,`cancel`],setup(t,{emit:a}){let o=t,_=a,T=h(),E=F(``),D=F([]),O=F([]),k=F(`any`),A=F(!1),j=F([]),M=v({get:()=>o.show,set:e=>_(`update:show`,e)}),P=v(()=>o.currentNode?.type===`start`?`发起人设置`:ae[o.currentNode?.type]||`节点设置`),ee=v(()=>{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=>!E.value||e.name.includes(E.value)||e.department.includes(E.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}),te=v(()=>o.users?.filter(e=>D.value.includes(e.id))||[]),ne=v(()=>o.users?.filter(e=>O.value.includes(e.id))||[]),V=v(()=>o.users?.filter(e=>D.value.includes(e.id))||[]),U=e=>{D.value=e.filter(e=>!e.startsWith(`dept-`))},W=e=>{O.value=e.filter(e=>!e.startsWith(`dept-`))},G=e=>{D.value=D.value.filter(t=>t!==e)},K=e=>{O.value=O.value.filter(t=>t!==e)},oe=e=>{D.value=D.value.filter(t=>t!==e)},J=()=>j.value.push(se()),Ce=e=>j.value.splice(e,1),we=e=>{let{initiators:t}=e.data;D.value=t?t.map(e=>e.id):[]},Te=e=>{D.value=(e.data.approvers||[]).map(e=>e.id),k.value=e.data.approvalMode||`any`},Ee=e=>{O.value=(e.data.copyUsers||[]).map(e=>e.id)},De=e=>{j.value=e.data.conditions||[]},Oe=async()=>{if(D.value.length===0)return T.error(`请选择发起人`),!1;let e=V.value;return _(`save`,{initiators:e}),T.success(`已设置 ${e.length} 个发起人`),!0},ke=async()=>{if(D.value.length===0)return T.error(`请至少选择一个审批人`),!1;let e=te.value;return _(`save`,{approvers:e,approvalMode:k.value}),T.success(`已设置 ${e.length} 个审批人`),!0},Ae=async()=>{let e=ne.value;return _(`save`,{copyUsers:e}),T.success(`已设置 ${e.length} 个抄送人`),!0},je=async()=>{if(j.value.length===0)return T.error(`请至少添加一个条件分支`),!1;let e=j.value.filter(e=>e.name&&e.field&&e.operator&&e.value);return e.length===0?(T.error(`请完善条件配置`),!1):(_(`save`,{conditions:e}),T.success(`已设置 ${e.length} 个条件分支`),!0)},Me=async()=>{if(!o.currentNode)return!1;A.value=!0;try{let e={start:Oe,approval:ke,copy:Ae,condition:je}[o.currentNode.type];return e?await e():!1}catch(e){return T.error(`保存配置失败`),console.error(`Save node config error:`,e),!1}finally{A.value=!1}},Ne=()=>{_(`cancel`)};z(()=>o.currentNode,e=>{if(e){E.value=``;let t={start:we,approval:Te,copy:Ee,condition:De}[e.type];t&&t(e)}},{immediate:!0});let Pe=v(()=>[`start`,`approval`,`copy`].includes(o.currentNode?.type||``)),$=v(()=>{let e=o.currentNode?.type;return e===`start`?{icon:`mdi:account-star`,title:`选择发起人`,checkedKeys:D.value,onSelect:U,selectedUsers:V.value,selectedLabel:`已选择发起人`,tagType:`primary`,onRemove:oe}:e===`approval`?{icon:`mdi:account-check`,title:`选择审批人`,checkedKeys:D.value,onSelect:U,selectedUsers:te.value,selectedLabel:`已选择审批人`,tagType:`info`,onRemove:G}:e===`copy`?{icon:`mdi:email-outline`,title:`选择抄送人`,checkedKeys:O.value,onSelect:W,selectedUsers:ne.value,selectedLabel:`已选择抄送人`,tagType:`success`,onRemove:K}:{icon:``,title:``,checkedKeys:[],onSelect:e=>{},selectedUsers:[],selectedLabel:``,tagType:`default`,onRemove:e=>{}}});return(t,a)=>(N(),y(R(c),{show:M.value,"onUpdate:show":a[2]||=e=>M.value=e,style:{width:`900px`},"mask-closable":!1,preset:`dialog`,title:P.value,"positive-text":`确定`,"negative-text":`取消`,loading:A.value,onPositiveClick:Me,onNegativeClick:Ne},{default:B(()=>[b(` 公共选择面板 `),Pe.value?(N(),x(`div`,ce,[S(`div`,Y,[S(`h4`,X,[$.value.icon?(N(),y(R(e),{key:0,name:$.value.icon,size:16},null,8,[`name`])):b(`v-if`,!0),C(` `+L($.value.title),1)]),w(R(s),{value:E.value,"onUpdate:value":a[0]||=e=>E.value=e,placeholder:`搜索用户姓名或部门`,clearable:``,class:`mb-4`},{prefix:B(()=>[w(R(e),{name:`mdi:magnify`,size:16})]),_:1},8,[`value`]),S(`div`,Z,[w(R(m),{data:ee.value,"checked-keys":$.value.checkedKeys,selectable:!1,checkable:``,cascade:``,"virtual-scroll":!0,style:{"max-height":`300px`},"onUpdate:checkedKeys":$.value.onSelect},null,8,[`data`,`checked-keys`,`onUpdate:checkedKeys`])]),$.value.selectedUsers.length>0?(N(),x(`div`,le,[S(`h5`,ue,L($.value.selectedLabel)+` (`+L($.value.selectedUsers.length)+`) `,1),S(`div`,Q,[(N(!0),x(g,null,I($.value.selectedUsers,e=>(N(),y(R(p),{key:e.id,closable:``,type:$.value.tagType,onClose:t=>$.value.onRemove(e.id)},{default:B(()=>[S(`div`,de,[w(R(n),{src:e.avatar,"fallback-src":R(q)(e.name),size:`small`},null,8,[`src`,`fallback-src`]),S(`span`,fe,L(e.name),1),S(`span`,pe,L(e.department),1)])]),_:2},1032,[`type`,`onClose`]))),128))])])):b(`v-if`,!0)]),b(` 审批节点时附带审批模式 `),o.currentNode?.type===`approval`?(N(),x(`div`,me,[a[3]||=S(`h5`,{class:`mb-3 text-sm font-medium`,style:{color:`var(--n-text-color-1)`}},` 审批模式 `,-1),w(R(u),{value:k.value,"onUpdate:value":a[1]||=e=>k.value=e},{default:B(()=>[w(R(f),{vertical:``},{default:B(()=>[(N(!0),x(g,null,I(R(re),e=>(N(),y(R(l),{key:e.value,value:e.value},{default:B(()=>[S(`div`,he,[S(`strong`,ge,L(e.label),1),S(`span`,_e,L(e.desc),1)])]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`value`])])):b(`v-if`,!0)])):o.currentNode?.type===`condition`?(N(),x(g,{key:1},[b(` 条件节点配置 `),S(`div`,ve,[S(`div`,ye,[S(`h4`,be,[w(R(e),{name:`mdi:source-branch`,size:16}),a[4]||=C(` 条件分支设置 `,-1)]),S(`div`,xe,[(N(!0),x(g,null,I(j.value,(t,n)=>(N(),x(`div`,{key:t.id,class:`condition-item`},[w(R(i),{size:`small`,class:`border border-gray-200 hover:border-gray-300 transition-colors`},{default:B(()=>[S(`div`,Se,[w(R(s),{value:t.name,"onUpdate:value":e=>t.name=e,placeholder:`分支名称`,style:{width:`150px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),w(R(d),{value:t.field,"onUpdate:value":e=>t.field=e,placeholder:`选择字段`,options:R(ie),style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),w(R(d),{value:t.operator,"onUpdate:value":e=>t.operator=e,placeholder:`操作符`,options:R(H),style:{width:`100px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`,`options`]),w(R(s),{value:t.value,"onUpdate:value":e=>t.value=e,placeholder:`值`,style:{width:`120px`},class:`flex-shrink-0`},null,8,[`value`,`onUpdate:value`]),w(R(r),{quaternary:``,type:`error`,onClick:e=>Ce(n),class:`flex-shrink-0 ml-auto`},{icon:B(()=>[w(R(e),{name:`mdi:delete`,size:16})]),_:2},1032,[`onClick`])])]),_:2},1024)]))),128)),w(R(r),{dashed:``,block:``,onClick:J,class:`w-full`},{icon:B(()=>[w(R(e),{name:`mdi:plus`,size:16})]),default:B(()=>[a[5]||=C(` 添加条件 `,-1)]),_:1,__:[5]})])])])],2112)):b(`v-if`,!0)]),_:1},8,[`show`,`title`,`loading`]))}}),we={class:`start-node`},Te={class:`node-content`},Ee={class:`node-info`},De={class:`node-text`},Oe={key:0,class:`initiator-name`},ke={key:1,class:`placeholder-text`};var Ae=t(T({__name:`StartNode`,props:{id:{},data:{}},setup(t){let n=t,r=E(`showAddMenu`),i=v(()=>{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(t,n)=>(N(),x(`div`,we,[b(` 主要内容区域 `),S(`div`,Te,[n[0]||=S(`div`,{class:`node-icon`},`🚀`,-1),S(`div`,Ee,[S(`div`,De,L(t.data.title),1),i.value?(N(),x(`div`,Oe,L(i.value),1)):(N(),x(`div`,ke,`点击设置发起人`))])]),b(` 添加节点按钮 `),S(`div`,{class:`add-node-btn`,onClick:a,title:`添加下一个节点`},[w(R(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-8dfd664b`]]);const je={class:`approval-node`},Me={class:`node-header`},Ne={class:`node-icon`},Pe={class:`node-title`},$={key:0,class:`node-badge`},Fe={key:1,class:`approval-mode-badge`},Ie={class:`node-content`},Le={key:0,class:`approvers-list`},Re={class:`approver-info`},ze={class:`approver-avatar`},Be={class:`approver-details`},Ve={class:`approver-name`},He={class:`approver-dept`},Ue={class:`approver-role`},We={key:0,class:`more-count`},Ge={key:1,class:`placeholder`};var Ke=t(T({__name:`ApprovalNode`,props:{id:{},data:{}},setup(t){let r=t,i=E(`showAddMenu`),a=E(`deleteNode`),o=v(()=>r.data.approvers??[]),s=v(()=>o.value.length),c=v(()=>o.value.slice(0,3)),l=v(()=>Math.max(0,s.value-3)),u=e=>({any:`或签`,all:`会签`,sequence:`顺序`})[e]||``,d=e=>`https://ui-avatars.com/api/?name=${encodeURIComponent(e)}&background=random`,f=()=>{},p=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();i&&i({x:t.left+t.width/2,y:t.bottom+10},r.id)},m=e=>{e.stopPropagation(),a&&a(r.id)};return(t,r)=>(N(),x(`div`,je,[S(`div`,{class:A([`status-indicator`,t.data.status])},null,2),b(` 删除按钮 `),S(`div`,{class:`delete-btn`,onClick:m,title:`删除节点`},[w(R(e),{name:`mdi:close`,size:12})]),S(`div`,{class:`node-card`,onClick:f},[S(`div`,Me,[S(`div`,Ne,[w(R(e),{name:`mdi:account`,size:12,color:`white`})]),S(`span`,Pe,L(t.data.title),1),s.value>0?(N(),x(`div`,$,L(s.value),1)):b(`v-if`,!0),t.data.approvalMode?(N(),x(`div`,Fe,L(u(t.data.approvalMode)),1)):b(`v-if`,!0)]),S(`div`,Ie,[s.value>0?(N(),x(`div`,Le,[(N(!0),x(g,null,I(c.value,e=>(N(),x(`div`,{key:e.id,class:`approver-tag`},[S(`div`,Re,[S(`div`,ze,[w(R(n),{src:e.avatar,"fallback-src":d(e.name),size:`small`},null,8,[`src`,`fallback-src`])]),S(`div`,Be,[S(`span`,Ve,L(e.name),1),S(`span`,He,L(e.department),1),S(`span`,Ue,L(e.role),1)])])]))),128)),l.value>0?(N(),x(`div`,We,`+`+L(l.value),1)):b(`v-if`,!0)])):(N(),x(`div`,Ge,[w(R(e),{name:`mdi:account-plus`,size:24,color:`#9ca3af`}),r[0]||=S(`span`,null,`请设置审批人`,-1)]))])]),S(`div`,{class:`add-node-btn`,onClick:p,title:`添加下一个节点`},[w(R(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-f7fd7107`]]);const qe={class:`copy-node`},Je={class:`node-header`},Ye={class:`node-title`},Xe={key:0,class:`node-badge`},Ze={class:`node-content`},Qe={key:0,class:`copy-users-list`},$e={key:0,class:`more-count`},et={key:1,class:`placeholder`};var tt=t(T({__name:`CopyNode`,props:{id:{},data:{}},setup(t){let n=t,r=E(`showAddMenu`),i=E(`deleteNode`),a=v(()=>n.data.copyUsers??[]),o=v(()=>a.value.length),s=v(()=>a.value.slice(0,3)),c=v(()=>Math.max(0,o.value-3)),l=()=>{},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(),i&&i(n.id)};return(t,n)=>(N(),x(`div`,qe,[S(`div`,{class:A([`status-indicator`,t.data.status])},null,2),b(` 删除按钮 `),S(`div`,{class:`delete-btn`,onClick:d,title:`删除节点`},[w(R(e),{name:`mdi:close`,size:12})]),S(`div`,{class:`node-card`,onClick:l},[S(`div`,Je,[n[0]||=S(`div`,{class:`node-icon`},`📋`,-1),S(`span`,Ye,L(t.data.title),1),o.value>0?(N(),x(`div`,Xe,L(o.value),1)):b(`v-if`,!0)]),S(`div`,Ze,[o.value>0?(N(),x(`div`,Qe,[(N(!0),x(g,null,I(s.value,e=>(N(),x(`div`,{key:e.id,class:`copy-user-tag`},L(e.name),1))),128)),c.value>0?(N(),x(`div`,$e,`+`+L(c.value),1)):b(`v-if`,!0)])):(N(),x(`div`,et,`请设置抄送人`))])]),S(`div`,{class:`add-node-btn`,onClick:u,title:`添加下一个节点`},[w(R(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-6ae0b500`]]);const nt={class:`condition-node`},rt={class:`node-card`},it={class:`node-header`},at={class:`node-title`},ot={key:0,class:`node-badge`},st={class:`node-content`},ct={key:0,class:`conditions-list`},lt={key:0,class:`more-count`},ut={key:1,class:`placeholder`};var dt=t(T({__name:`ConditionNode`,props:{id:{},data:{}},setup(t){let n=t,r=E(`showAddMenu`),i=E(`deleteNode`),a=v(()=>n.data.conditions??[]),o=v(()=>a.value.length),s=v(()=>a.value.slice(0,2)),c=v(()=>Math.max(0,o.value-2)),l=e=>{e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();r&&r({x:t.left+t.width/2,y:t.bottom+10},n.id)},u=e=>{e.stopPropagation(),i&&i(n.id)};return(t,n)=>(N(),x(`div`,nt,[S(`div`,{class:A([`status-indicator`,t.data.status])},null,2),b(` 删除按钮 `),S(`div`,{class:`delete-btn`,onClick:u,title:`删除节点`},[w(R(e),{name:`mdi:close`,size:12})]),S(`div`,rt,[S(`div`,it,[n[0]||=S(`div`,{class:`node-icon`},`🔀`,-1),S(`span`,at,L(t.data.title),1),o.value>0?(N(),x(`div`,ot,L(o.value),1)):b(`v-if`,!0)]),S(`div`,st,[o.value>0?(N(),x(`div`,ct,[(N(!0),x(g,null,I(s.value,e=>(N(),x(`div`,{key:e.id,class:`condition-tag`},[n[1]||=S(`span`,{class:`condition-icon`},`→`,-1),S(`span`,null,L(e.name||`条件`+(s.value.indexOf(e)+1)),1)]))),128)),c.value>0?(N(),x(`div`,lt,`+`+L(c.value),1)):b(`v-if`,!0)])):(N(),x(`div`,ut,`请设置分支条件`))])]),S(`div`,{class:`add-node-btn`,onClick:l,title:`添加下一个节点`},[w(R(e),{name:`mdi:plus`,size:16})])]))}}),[[`__scopeId`,`data-v-60e87967`]]);const ft={start:O(Ae),approval:O(Ke),copy:O(tt),condition:O(dt)};function pt(e,t,n){let r=h(),i=F([{...K}]),a=F([]),o=F(!1),s=F({x:0,y:0}),c=F(!1),l=F(null),u=F(null),d=v(()=>ft),f=v(()=>{let e={totalNodes:i.value.length,approvalNodes:0,copyNodes:0,conditionNodes:0};return i.value.forEach(t=>{t.type===`approval`?e.approvalNodes++:t.type===`copy`?e.copyNodes++:t.type===`condition`&&e.conditionNodes++}),e}),p=()=>({nodes:i.value,edges:a.value,config:{version:`1.0`,createdAt:new Date().toISOString()}}),m=()=>{let e=p();t(`update:modelValue`,e),t(`change`,e)},g=(e=60,t=400)=>{k(()=>{setTimeout(()=>{n.value?.fitView?.({padding:e,duration:t})},100)})},_=(e,t)=>{s.value={x:typeof e.x==`number`?e.x:0,y:typeof e.y==`number`?e.y:0},u.value=t||null,o.value=!0},y=()=>{o.value=!1},b=e=>{if(e===`start-1`){r.warning(`不能删除开始节点`);return}let t=i.value.findIndex(t=>t.id===e);if(t===-1)return;let n=a.value.filter(t=>t.target===e),o=a.value.filter(t=>t.source===e);i.value.splice(t,1),a.value=a.value.filter(t=>t.source!==e&&t.target!==e),n.forEach(e=>{o.forEach(t=>{a.value.push({id:J(e.source,t.target),source:e.source,target:t.target,animated:!0,type:`default`})})}),i.value.forEach((e,n)=>{n>=t&&(e.position.y-=180)}),m(),r.success(`节点已删除`),g()};P(`showAddMenu`,_),P(`deleteNode`,b);let x=()=>{let e=i.value.length-1,t=i.value[e];if(u.value){let n=i.value.findIndex(e=>e.id===u.value);n!==-1&&(e=n,t=i.value[e])}return{targetNodeIndex:e,targetNode:t}},S=(e,t)=>({id:`${e}-${Date.now()}`,type:e,position:{x:t?.position.x||150,y:(t?.position.y||130)+180},data:{title:U[e],status:`pending`,...e===`approval`&&{approvers:[],approvalMode:`any`},...e===`copy`&&{copyUsers:[]},...e===`condition`&&{conditions:[]}}}),C=(e,t)=>{let n=a.value.filter(t=>t.source===e.id);a.value=a.value.filter(t=>t.source!==e.id),a.value.push({id:J(e.id,t.id),source:e.id,target:t.id,animated:!0,type:`default`}),n.forEach(e=>{a.value.push({id:J(t.id,e.target),source:t.id,target:e.target,animated:!0,type:`default`})})};return z(()=>e.modelValue,e=>{e&&e!==p()&&(i.value=e.nodes||[],a.value=e.edges||[])},{deep:!0}),M(()=>{k(()=>{setTimeout(()=>{n.value?.fitView?.({padding:80,includeHiddenNodes:!1,minZoom:.8,maxZoom:1.2,duration:600})},300)})}),{nodes:i,edges:a,showAddMenu:o,menuPosition:s,showNodeConfig:c,currentNode:l,nodeTypes:d,workflowStats:f,addNode:e=>{try{let{targetNodeIndex:t,targetNode:n}=x(),r=S(e,n);i.value.splice(t+1,0,r);for(let e=t+2;e<i.value.length;e++)i.value[e].position.y+=180;n&&C(n,r),o.value=!1,u.value=null,m(),g()}catch(e){console.error(`Error adding node:`,e),r.error(`添加节点失败,请重试`)}},onNodeClick:e=>{let{node:n}=e;l.value=n,c.value=!0,t(`node-click`,n)},closeAddMenu:y,handleConfigSave:e=>{if(!l.value)return;let t=i.value.findIndex(e=>e.id===l.value.id);if(t!==-1){let n={...i.value[t],data:{...i.value[t].data,...e}};i.value.splice(t,1,n),l.value=n}m(),c.value=!1,r.success(`节点配置已保存`)},resetNodes:()=>{i.value=[{...K}],a.value=[],m(),g(80,600),r.success(`画布已清空`)},getCurrentWorkflowData:p,fitView:()=>{if(!n.value?.fitView){r.warning(`画布未准备就绪,请稍后重试`);return}k(()=>{n.value.fitView({padding:50,includeHiddenNodes:!1,minZoom:.5,maxZoom:1.5,duration:800})}),r.success(`已适应窗口大小`)},deleteNode:b}}function mt(e,t,n,r){let i=h(),a=F([]),o=F(!1),s=()=>{let n=[];e.value.forEach(e=>{if(e.type===`approval`&&(e.data.approvers||[]).length===0&&n.push({nodeId:e.id,nodeName:e.data.title,field:`approvers`,message:`审批节点必须设置至少一个审批人,否则流程无法正常运行`,type:`required`}),e.type===`condition`){let t=e.data.conditions||[];if(t.length===0)n.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`条件分支节点必须配置至少一个分支条件,否则无法进行条件判断`,type:`required`});else{let r=t.filter(e=>!e.name||!e.field||!e.operator||!e.value);r.length>0&&n.push({nodeId:e.id,nodeName:e.data.title,field:`conditions`,message:`有 ${r.length} 个条件分支配置不完整,请完善所有必填字段`,type:`incomplete`})}}});let r=new Set;return t.value.forEach(e=>{r.add(e.source),r.add(e.target)}),e.value.forEach(e=>{e.type!==`start`&&!r.has(e.id)&&n.push({nodeId:e.id,nodeName:e.data.title,field:`connection`,message:`此节点未与其他节点连接,可能导致流程中断`,type:`warning`})}),n};return{validationErrors:a,showValidationErrors:o,validateWorkflow:s,validateCurrentWorkflow:()=>{let e=s();a.value=e,e.length===0?(i.success(`工作流验证通过!所有节点配置正确`),o.value=!1):(i.error(`发现 ${e.length} 个问题,请查看详细错误`),o.value=!0,r?.onValidateError?.(e))},jumpToErrorNode:t=>{let a=e.value.find(e=>e.id===t);!a||!n.value||(n.value.setCenter(a.position.x,a.position.y,{zoom:1.2,duration:800}),setTimeout(()=>{r?.onShowNodeConfig?.(a),o.value=!1},900),i.info(`已定位到节点:${a.data.title}`))},getFieldDisplayName:e=>W[e]||e,getErrorTypeText:e=>G[e]||e,resetValidation:()=>{a.value=[],o.value=!1}}}const ht={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`}},gt={any:`或签(任一审批人通过即可)`,all:`会签(所有审批人必须通过)`,sequence:`顺序审批(按顺序依次审批)`},_t={equals:`等于`,not_equals:`不等于`,greater_than:`大于`,less_than:`小于`,contains:`包含`};function vt(e,t){let n=F(!1),r=F([]),i=F({totalNodes:0,approvalNodes:0,copyNodes:0,conditionNodes:0,totalEdges:0}),a={start:e=>{let t=e.initiators||[];return t.length>0?[{type:`users`,label:`发起人`,users:t}]:[{type:`text`,label:`发起人`,value:`所有人`}]},approval:e=>{let t=e.approvalMode||`any`,n=e.approvers||[],r=[{type:`mode`,label:`审批方式`,value:gt[t]||t,modeKey:t}];return n.length>0?r.push({type:`users`,label:`审批人`,users:n}):r.push({type:`warning`,label:`审批人`,value:`未设置`}),r},copy:e=>{let t=e.copyUsers||[];return t.length>0?[{type:`users`,label:`抄送人`,users:t}]:[{type:`text`,label:`抄送人`,value:`未设置`}]},condition:e=>{let t=e.conditions||[];return t.length===0?[{type:`warning`,label:`条件分支`,value:`未配置`}]:t.map((e,t)=>{let n=_t[e.operator]||e.operator;return{type:`text`,label:`分支 ${t+1}`,value:`${e.name||`未命名`} — ${e.field||`?`} ${n} ${e.value||`?`}`}})}},o=e=>{let t=a[e.type||`start`];return t?t(e.data):[]},s=()=>{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},c=()=>s().map((e,t)=>{let n=ht[e.type||`start`]||ht.start;return{order:t+1,node:e,nodeTypeLabel:n.label,icon:n.icon,colorClass:n.colorClass,details:o(e)}}),l=()=>{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=c(),i.value=l(),n.value=!0},closePreview:()=>{n.value=!1}}}const yt={class:`approval-workflow-container`},bt={class:`floating-toolbar`},xt={class:`add-menu-content`},St=[`onClick`],Ct={class:`menu-text`},wt={key:0,class:`validation-success`},Tt={class:`success-icon`},Et={key:1,class:`validation-errors`},Dt={class:`error-summary`},Ot={class:`error-icon`},kt={class:`error-list`},At={class:`error-header`},jt={class:`error-number`},Mt={class:`error-info`},Nt={class:`error-node`},Pt={class:`error-field`},Ft={class:`error-message`},It={class:`error-actions`},Lt={class:`validation-footer`},Rt={class:`preview-stats`},zt={class:`stat-item`},Bt={class:`stat-value`},Vt={class:`stat-item approval`},Ht={class:`stat-value`},Ut={class:`stat-item copy`},Wt={class:`stat-value`},Gt={class:`stat-item condition`},Kt={class:`stat-value`},qt={class:`stat-item edge`},Jt={class:`stat-value`},Yt={class:`preview-timeline`},Xt={class:`step-connector`},Zt={class:`step-dot`},Qt={key:0,class:`step-line`},$t={class:`step-content`},en={class:`step-header`},tn={class:`step-order`},nn={class:`step-type-badge`},rn={class:`step-title`},an={key:0,class:`step-details`},on={class:`detail-label`},sn={class:`warning-text`},cn={key:0,class:`preview-empty`},ln={class:`preview-footer`};var un=t(T({name:`C_WorkFlow`,__name:`index`,props:{users:{default:()=>[]},roles:{default:()=>[]},departments:{default:()=>[]},modelValue:{},readonly:{type:Boolean,default:!1},theme:{default:`light`}},emits:[`update:modelValue`,`change`,`node-click`,`edge-click`,`save`,`validate-error`],setup(t,{expose:n,emit:i}){let s=t,c=i,l=h(),u=F(),{nodes:d,edges:f,showAddMenu:m,menuPosition:v,showNodeConfig:T,currentNode:E,nodeTypes:O,workflowStats:k,addNode:M,onNodeClick:P,closeAddMenu:z,handleConfigSave:re,resetNodes:ie,getCurrentWorkflowData:H,fitView:U,deleteNode:ae}=pt(s,c,u),{validationErrors:W,showValidationErrors:G,validateWorkflow:K,validateCurrentWorkflow:q,jumpToErrorNode:oe,getFieldDisplayName:J,getErrorTypeText:se,resetValidation:ce}=mt(d,f,u,{onShowNodeConfig:e=>{E.value=e,T.value=!0},onValidateError:e=>c(`validate-error`,e)}),{showPreview:Y,previewSteps:X,previewStats:Z,openPreview:le,closePreview:ue}=vt(d,f),Q=()=>{let e=K();if(e.length>0){l.error(`工作流验证失败: ${e[0].message}`),G.value=!0;return}c(`save`,H()),l.success(`工作流保存成功`)},de=()=>{le()},fe=()=>{ue(),Q()},pe=()=>{ie(),ce()};return n({validateWorkflow:K,getCurrentWorkflowData:H,saveWorkflow:Q,previewWorkflow:de,deleteNode:ae,stats:k}),(t,n)=>(N(),x(`div`,yt,[b(` 浮动工具栏 `),S(`div`,bt,[w(R(r),{size:`small`,type:`primary`,onClick:Q},{icon:B(()=>[w(R(e),{name:`mdi:content-save`,size:16})]),default:B(()=>[n[7]||=C(` 保存 `,-1)]),_:1,__:[7]}),w(R(r),{size:`small`,onClick:de},{icon:B(()=>[w(R(e),{name:`mdi:eye`,size:16})]),default:B(()=>[n[8]||=C(` 预览 `,-1)]),_:1,__:[8]}),w(R(r),{size:`small`,onClick:R(q),title:`检查工作流配置是否正确`},{icon:B(()=>[w(R(e),{name:`mdi:check-circle`,size:16})]),default:B(()=>[n[9]||=C(` 验证流程 `,-1)]),_:1,__:[9]},8,[`onClick`]),n[10]||=S(`div`,{class:`toolbar-divider`},null,-1),w(R(r),{size:`small`,onClick:R(U),title:`适应窗口`},{icon:B(()=>[w(R(e),{name:`mdi:fit-to-screen`,size:16})]),_:1},8,[`onClick`]),w(R(r),{size:`small`,type:`error`,onClick:pe,title:`清空画布`},{icon:B(()=>[w(R(e),{name:`mdi:delete-sweep`,size:16})]),_:1})]),b(` Vue Flow 画布 `),w(R(ne),{ref_key:`vueFlowRef`,ref:u,nodes:R(d),"onUpdate:nodes":n[0]||=e=>D(d)?d.value=e:null,edges:R(f),"onUpdate:edges":n[1]||=e=>D(f)?f.value=e:null,"node-types":R(O),class:`workflow-canvas`,"default-viewport":{zoom:1,x:0,y:0},"min-zoom":.5,"max-zoom":2,"fit-view-on-init":!0,"nodes-draggable":!0,"elements-selectable":!0,onNodeClick:R(P),onPaneClick:R(z)},null,8,[`nodes`,`edges`,`node-types`,`onNodeClick`,`onPaneClick`]),b(` 节点添加菜单 `),(N(),y(_,{to:`body`},[te(S(`div`,{class:`add-node-menu`,style:j({left:R(v).x+`px`,top:R(v).y+`px`})},[S(`div`,xt,[(N(!0),x(g,null,I(R(V),t=>(N(),x(`div`,{key:t.type,class:`add-menu-item`,onClick:e=>R(M)(t.type)},[S(`div`,{class:A([`menu-icon`,t.iconClass])},[w(R(e),{name:t.icon,size:16},null,8,[`name`])],2),S(`span`,Ct,L(t.label),1)],8,St))),128))])],4),[[ee,R(m)]])])),b(` 节点配置弹窗 - 拆分到独立组件 `),w(Ce,{show:R(T),"onUpdate:show":n[2]||=e=>D(T)?T.value=e:null,"current-node":R(E),users:t.users,departments:t.departments,onSave:R(re),onCancel:n[3]||=e=>T.value=!1},null,8,[`show`,`current-node`,`users`,`departments`,`onSave`]),b(` 验证错误日志抽屉 `),w(R(a),{show:R(G),"onUpdate:show":n[5]||=e=>D(G)?G.value=e:null,width:450,placement:`right`},{default:B(()=>[w(R(o),{title:`流程验证结果`,closable:``},{footer:B(()=>[S(`div`,Lt,[w(R(r),{onClick:n[4]||=e=>G.value=!1},{default:B(()=>n[16]||=[C(`关闭`,-1)]),_:1,__:[16]}),w(R(r),{type:`primary`,onClick:R(q)},{icon:B(()=>[w(R(e),{name:`mdi:refresh`,size:16})]),default:B(()=>[n[17]||=C(` 重新验证 `,-1)]),_:1,__:[17]},8,[`onClick`])])]),default:B(()=>[R(W).length===0?(N(),x(`div`,wt,[S(`div`,Tt,[w(R(e),{name:`mdi:check-circle`,size:32,color:`#52c41a`})]),n[11]||=S(`h3`,null,`验证通过`,-1),n[12]||=S(`p`,null,`工作流配置正确,所有节点都已正确设置!`,-1)])):(N(),x(`div`,Et,[S(`div`,Dt,[S(`div`,Ot,[w(R(e),{name:`mdi:alert-circle`,size:24,color:`#ff4d4f`})]),S(`h3`,null,`发现 `+L(R(W).length)+` 个问题`,1),n[13]||=S(`p`,null,`请修复以下问题后重新验证:`,-1)]),S(`div`,kt,[(N(!0),x(g,null,I(R(W),(t,i)=>(N(),x(`div`,{key:t.nodeId,class:`error-item`},[S(`div`,At,[S(`span`,jt,L(i+1),1),S(`div`,Mt,[S(`strong`,Nt,L(t.nodeName),1),S(`span`,Pt,L(R(J)(t.field)),1)]),S(`div`,{class:A([`error-type`,t.type])},L(R(se)(t.type)),3)]),S(`div`,Ft,L(t.message),1),S(`div`,It,[w(R(r),{size:`small`,type:`primary`,onClick:e=>R(oe)(t.nodeId)},{icon:B(()=>[w(R(e),{name:`mdi:target`,size:16})]),default:B(()=>[n[14]||=C(` 定位节点 `,-1)]),_:2,__:[14]},1032,[`onClick`])])]))),128))]),n[15]||=S(`div`,{class:`validation-tips`},[S(`h4`,null,`💡 常见问题解决方案:`),S(`ul`,null,[S(`li`,null,[S(`strong`,null,`审批人未设置:`),C(`点击审批节点,在弹窗中选择审批人员 `)]),S(`li`,null,[S(`strong`,null,`条件分支未配置:`),C(`点击条件节点,添加至少一个条件分支 `)]),S(`li`,null,[S(`strong`,null,`节点连接断开:`),C(` 检查节点之间的连线是否正确 `)])])],-1)]))]),_:1})]),_:1},8,[`show`]),b(` 流程预览抽屉 `),w(R(a),{show:R(Y),"onUpdate:show":n[6]||=e=>D(Y)?Y.value=e:null,width:520,placement:`right`},{default:B(()=>[w(R(o),{title:`流程预览`,closable:``},{footer:B(()=>[S(`div`,ln,[w(R(r),{onClick:R(ue)},{default:B(()=>n[24]||=[C(`关闭`,-1)]),_:1,__:[24]},8,[`onClick`]),w(R(r),{type:`primary`,onClick:fe},{icon:B(()=>[w(R(e),{name:`mdi:content-save`,size:16})]),default:B(()=>[n[25]||=C(` 确认并保存 `,-1)]),_:1,__:[25]})])]),default:B(()=>[S(`div`,Rt,[S(`div`,zt,[S(`span`,Bt,L(R(Z).totalNodes),1),n[18]||=S(`span`,{class:`stat-label`},`总节点`,-1)]),S(`div`,Vt,[S(`span`,Ht,L(R(Z).approvalNodes),1),n[19]||=S(`span`,{class:`stat-label`},`审批`,-1)]),S(`div`,Ut,[S(`span`,Wt,L(R(Z).copyNodes),1),n[20]||=S(`span`,{class:`stat-label`},`抄送`,-1)]),S(`div`,Gt,[S(`span`,Kt,L(R(Z).conditionNodes),1),n[21]||=S(`span`,{class:`stat-label`},`条件`,-1)]),S(`div`,qt,[S(`span`,Jt,L(R(Z).totalEdges),1),n[22]||=S(`span`,{class:`stat-label`},`连线`,-1)])]),S(`div`,Yt,[(N(!0),x(g,null,I(R(X),(t,n)=>(N(),x(`div`,{key:t.node.id,class:A([`preview-step`,t.colorClass])},[b(` 时间线连接线 `),S(`div`,Xt,[S(`div`,Zt,[w(R(e),{name:t.icon,size:16},null,8,[`name`])]),n<R(X).length-1?(N(),x(`div`,Qt)):b(`v-if`,!0)]),b(` 步骤内容 `),S(`div`,$t,[S(`div`,en,[S(`span`,tn,`步骤 `+L(t.order),1),S(`span`,nn,L(t.nodeTypeLabel),1)]),S(`div`,rn,L(t.node.data.title),1),t.details.length>0?(N(),x(`div`,an,[(N(!0),x(g,null,I(t.details,(t,n)=>(N(),x(`div`,{key:n,class:A([`step-detail-item`,{"is-warning":t.type===`warning`}])},[S(`span`,on,L(t.label)+`:`,1),b(` 审批方式 badge `),t.type===`mode`?(N(),x(`span`,{key:0,class:A([`mode-badge`,t.modeKey])},L(t.value),3)):t.type===`users`?(N(),x(g,{key:1},[b(` 人员 tags `),(N(!0),x(g,null,I(t.users,t=>(N(),y(R(p),{key:t.name,size:`small`,bordered:!1,round:``,class:`user-tag`},{icon:B(()=>[w(R(e),{name:`mdi:account`,size:12})]),default:B(()=>[C(` `+L(t.name),1)]),_:2},1024))),128))],64)):t.type===`warning`?(N(),x(g,{key:2},[b(` 警告文案 `),S(`span`,sn,` ⚠️ `+L(t.value),1)],2112)):(N(),x(g,{key:3},[b(` 普通文本 `),S(`span`,null,L(t.value),1)],2112))],2))),128))])):b(`v-if`,!0)])],2))),128))]),R(X).length===0?(N(),x(`div`,cn,[w(R(e),{name:`mdi:file-document-outline`,size:48,color:`#d1d5db`}),n[23]||=S(`p`,null,`暂无流程节点`,-1)])):b(`v-if`,!0)]),_:1})]),_:1},8,[`show`])]))}}),[[`__scopeId`,`data-v-6ed6dbc9`]]);export{pt as i,vt as n,mt as r,un as t};
|
|
2
2
|
//# sourceMappingURL=C_WorkFlow2.js.map
|