@rytass/bpm-core-react 0.3.8 → 0.4.1

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.
Files changed (232) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.md +69 -4
  3. package/dist/chunks/approval-instance-list-page-BF2r5D2-.js +278 -0
  4. package/dist/chunks/approval-instance-list-page-BF2r5D2-.js.map +1 -0
  5. package/dist/chunks/approval-instance-list-page-C5ZKPHdA.cjs +2 -0
  6. package/dist/chunks/approval-instance-list-page-C5ZKPHdA.cjs.map +1 -0
  7. package/dist/chunks/auth-provider-4BeCw7cI.cjs +2 -0
  8. package/dist/chunks/auth-provider-4BeCw7cI.cjs.map +1 -0
  9. package/dist/chunks/auth-provider-B5oPmvk2.js +83 -0
  10. package/dist/chunks/auth-provider-B5oPmvk2.js.map +1 -0
  11. package/dist/chunks/{builder-D950gct_.js → builder-BLVnnpnP.js} +474 -478
  12. package/dist/chunks/builder-BLVnnpnP.js.map +1 -0
  13. package/dist/chunks/builder-DVE9zIKH.cjs +3 -0
  14. package/dist/chunks/builder-DVE9zIKH.cjs.map +1 -0
  15. package/dist/chunks/categories-B6QZKZRt.cjs +2 -0
  16. package/dist/chunks/categories-B6QZKZRt.cjs.map +1 -0
  17. package/dist/chunks/categories-DBPoSrsi.js +382 -0
  18. package/dist/chunks/categories-DBPoSrsi.js.map +1 -0
  19. package/dist/chunks/chunk-CMqjfN_6.cjs +1 -0
  20. package/dist/chunks/dashboard-page-CddG1MnK.cjs +2 -0
  21. package/dist/chunks/dashboard-page-CddG1MnK.cjs.map +1 -0
  22. package/dist/chunks/dashboard-page-Ib8srCMy.js +119 -0
  23. package/dist/chunks/dashboard-page-Ib8srCMy.js.map +1 -0
  24. package/dist/chunks/delegations-C2wLWsDQ.cjs +2 -0
  25. package/dist/chunks/delegations-C2wLWsDQ.cjs.map +1 -0
  26. package/dist/chunks/delegations-DDEk-WI6.cjs +2 -0
  27. package/dist/chunks/delegations-DDEk-WI6.cjs.map +1 -0
  28. package/dist/chunks/delegations-ZNtodFaD.js +568 -0
  29. package/dist/chunks/delegations-ZNtodFaD.js.map +1 -0
  30. package/dist/chunks/delegations-iVnRi3QE.js +641 -0
  31. package/dist/chunks/delegations-iVnRi3QE.js.map +1 -0
  32. package/dist/chunks/detail-Dcr5mM8g.cjs +2 -0
  33. package/dist/chunks/detail-Dcr5mM8g.cjs.map +1 -0
  34. package/dist/chunks/detail-u9DdLhDW.js +1518 -0
  35. package/dist/chunks/detail-u9DdLhDW.js.map +1 -0
  36. package/dist/chunks/format-date-time-XxBzF0F5.cjs +2 -0
  37. package/dist/chunks/{format-date-time-26_pFvv4.cjs.map → format-date-time-XxBzF0F5.cjs.map} +1 -1
  38. package/dist/chunks/login-9bCXyjbX.cjs +2 -0
  39. package/dist/chunks/{login-CQ9MfwcC.cjs.map → login-9bCXyjbX.cjs.map} +1 -1
  40. package/dist/chunks/{login-C20yVxbc.js → login-BKxpLibd.js} +3 -2
  41. package/dist/chunks/{login-C20yVxbc.js.map → login-BKxpLibd.js.map} +1 -1
  42. package/dist/chunks/notifications-BKs4--96.cjs +2 -0
  43. package/dist/chunks/notifications-BKs4--96.cjs.map +1 -0
  44. package/dist/chunks/notifications-CSulztkU.js +193 -0
  45. package/dist/chunks/notifications-CSulztkU.js.map +1 -0
  46. package/dist/chunks/orgs-BIiqzHvb.cjs +2 -0
  47. package/dist/chunks/orgs-BIiqzHvb.cjs.map +1 -0
  48. package/dist/chunks/orgs-Cc18umVt.js +1944 -0
  49. package/dist/chunks/orgs-Cc18umVt.js.map +1 -0
  50. package/dist/chunks/router-adapter--gYs13E8.cjs +2 -0
  51. package/dist/chunks/router-adapter--gYs13E8.cjs.map +1 -0
  52. package/dist/chunks/router-adapter-DftlFTOd.js +23 -0
  53. package/dist/chunks/router-adapter-DftlFTOd.js.map +1 -0
  54. package/dist/chunks/templates-D44FSB46.js +380 -0
  55. package/dist/chunks/templates-D44FSB46.js.map +1 -0
  56. package/dist/chunks/templates-w96t83N-.cjs +2 -0
  57. package/dist/chunks/templates-w96t83N-.cjs.map +1 -0
  58. package/dist/chunks/users-CUY139DF.js +214 -0
  59. package/dist/chunks/users-CUY139DF.js.map +1 -0
  60. package/dist/chunks/users-qghSMtLn.cjs +2 -0
  61. package/dist/chunks/users-qghSMtLn.cjs.map +1 -0
  62. package/dist/components/approval-instance-list-page.d.ts +1 -2
  63. package/dist/components/bpm-notification-bell-button.d.ts +22 -0
  64. package/dist/components/dashboard-page.d.ts +1 -4
  65. package/dist/index.cjs +1 -1
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.css +1 -0
  68. package/dist/index.d.ts +3 -1
  69. package/dist/index.js +206 -97
  70. package/dist/index.js.map +1 -1
  71. package/dist/lib/notification-drawer-provider.d.ts +3 -2
  72. package/dist/lib/notification-unread-provider.d.ts +6 -5
  73. package/dist/lib/providers.d.ts +3 -2
  74. package/dist/lib/use-bpm-logout.d.ts +12 -0
  75. package/dist/lib/use-bpm-member.d.ts +11 -0
  76. package/dist/next/BPMNextProviders.d.ts +1 -1
  77. package/dist/next/index.cjs +1 -1
  78. package/dist/next/index.cjs.map +1 -1
  79. package/dist/next/index.js +13 -23
  80. package/dist/next/index.js.map +1 -1
  81. package/dist/pages/admin/delegations/index.cjs +1 -1
  82. package/dist/pages/admin/delegations/index.js +1 -1
  83. package/dist/pages/admin/orgs/index.cjs +1 -1
  84. package/dist/pages/admin/orgs/index.js +1 -1
  85. package/dist/pages/admin/users/index.cjs +1 -1
  86. package/dist/pages/admin/users/index.js +1 -1
  87. package/dist/pages/delegations/index.cjs +1 -1
  88. package/dist/pages/delegations/index.js +1 -1
  89. package/dist/pages/forms/builder/index.cjs +1 -1
  90. package/dist/pages/forms/builder/index.js +1 -1
  91. package/dist/pages/instances/detail/index.cjs +1 -1
  92. package/dist/pages/instances/detail/index.js +1 -1
  93. package/dist/pages/login/index.cjs +1 -1
  94. package/dist/pages/login/index.js +1 -1
  95. package/dist/pages/settings/notifications/index.cjs +1 -1
  96. package/dist/pages/settings/notifications/index.js +1 -1
  97. package/dist/pages/templates/categories/index.cjs +1 -1
  98. package/dist/pages/templates/categories/index.js +1 -1
  99. package/dist/pages/templates/index.cjs +1 -1
  100. package/dist/pages/templates/index.js +1 -1
  101. package/dist/views/admin/delegations/AdminDelegationsView.d.ts +1 -4
  102. package/dist/views/admin/delegations/index.cjs +1 -1
  103. package/dist/views/admin/delegations/index.js +1 -1
  104. package/dist/views/admin/index.cjs +1 -1
  105. package/dist/views/admin/index.js +3 -3
  106. package/dist/views/admin/orgs/AdminOrgsView.d.ts +1 -4
  107. package/dist/views/admin/orgs/index.cjs +1 -1
  108. package/dist/views/admin/orgs/index.js +1 -1
  109. package/dist/views/admin/users/AdminUsersView.d.ts +1 -4
  110. package/dist/views/admin/users/index.cjs +1 -1
  111. package/dist/views/admin/users/index.js +1 -1
  112. package/dist/views/cc/CcView.d.ts +1 -3
  113. package/dist/views/cc/index.cjs +1 -1
  114. package/dist/views/cc/index.cjs.map +1 -1
  115. package/dist/views/cc/index.js +2 -3
  116. package/dist/views/cc/index.js.map +1 -1
  117. package/dist/views/dashboard/DashboardView.d.ts +1 -3
  118. package/dist/views/dashboard/index.cjs +1 -1
  119. package/dist/views/dashboard/index.cjs.map +1 -1
  120. package/dist/views/dashboard/index.js +3 -3
  121. package/dist/views/dashboard/index.js.map +1 -1
  122. package/dist/views/delegations/DelegationsView.d.ts +1 -4
  123. package/dist/views/delegations/index.cjs +1 -1
  124. package/dist/views/delegations/index.js +1 -1
  125. package/dist/views/forms/FormsView.d.ts +1 -3
  126. package/dist/views/forms/builder/index.cjs +1 -1
  127. package/dist/views/forms/builder/index.js +1 -1
  128. package/dist/views/forms/index.cjs +1 -1
  129. package/dist/views/forms/index.cjs.map +1 -1
  130. package/dist/views/forms/index.js +95 -99
  131. package/dist/views/forms/index.js.map +1 -1
  132. package/dist/views/inbox/InboxView.d.ts +1 -3
  133. package/dist/views/inbox/index.cjs +1 -1
  134. package/dist/views/inbox/index.cjs.map +1 -1
  135. package/dist/views/inbox/index.js +91 -94
  136. package/dist/views/inbox/index.js.map +1 -1
  137. package/dist/views/instances/detail/index.cjs +1 -1
  138. package/dist/views/instances/detail/index.js +1 -1
  139. package/dist/views/instances/new/index.cjs +1 -1
  140. package/dist/views/instances/new/index.cjs.map +1 -1
  141. package/dist/views/instances/new/index.js +71 -77
  142. package/dist/views/instances/new/index.js.map +1 -1
  143. package/dist/views/login/index.cjs +1 -1
  144. package/dist/views/login/index.js +1 -1
  145. package/dist/views/root/RootView.d.ts +1 -3
  146. package/dist/views/search/SearchView.d.ts +1 -3
  147. package/dist/views/search/index.cjs +1 -1
  148. package/dist/views/search/index.cjs.map +1 -1
  149. package/dist/views/search/index.js +2 -3
  150. package/dist/views/search/index.js.map +1 -1
  151. package/dist/views/sent/SentView.d.ts +1 -3
  152. package/dist/views/sent/index.cjs +1 -1
  153. package/dist/views/sent/index.cjs.map +1 -1
  154. package/dist/views/sent/index.js +2 -3
  155. package/dist/views/sent/index.js.map +1 -1
  156. package/dist/views/settings/index.cjs +1 -1
  157. package/dist/views/settings/index.js +1 -1
  158. package/dist/views/settings/notifications/SettingsNotificationsView.d.ts +1 -4
  159. package/dist/views/settings/notifications/index.cjs +1 -1
  160. package/dist/views/settings/notifications/index.js +1 -1
  161. package/dist/views/templates/TemplatesView.d.ts +1 -4
  162. package/dist/views/templates/categories/TemplateCategoriesView.d.ts +1 -4
  163. package/dist/views/templates/categories/index.cjs +1 -1
  164. package/dist/views/templates/categories/index.js +1 -1
  165. package/dist/views/templates/designer/TemplateDesignerView.d.ts +1 -2
  166. package/dist/views/templates/designer/index.cjs +7 -7
  167. package/dist/views/templates/designer/index.cjs.map +1 -1
  168. package/dist/views/templates/designer/index.js +707 -711
  169. package/dist/views/templates/designer/index.js.map +1 -1
  170. package/dist/views/templates/index.cjs +1 -1
  171. package/dist/views/templates/index.js +2 -2
  172. package/dist/views/templates/versions/TemplateVersionsView.d.ts +1 -2
  173. package/dist/views/templates/versions/index.cjs +1 -1
  174. package/dist/views/templates/versions/index.cjs.map +1 -1
  175. package/dist/views/templates/versions/index.js +45 -49
  176. package/dist/views/templates/versions/index.js.map +1 -1
  177. package/package.json +2 -2
  178. package/dist/app-navigation.css +0 -1
  179. package/dist/chunks/app-navigation-BSkMsEhy.js +0 -268
  180. package/dist/chunks/app-navigation-BSkMsEhy.js.map +0 -1
  181. package/dist/chunks/app-navigation-KnlJCUp1.cjs +0 -2
  182. package/dist/chunks/app-navigation-KnlJCUp1.cjs.map +0 -1
  183. package/dist/chunks/approval-instance-list-page-CVXgE2K3.cjs +0 -2
  184. package/dist/chunks/approval-instance-list-page-CVXgE2K3.cjs.map +0 -1
  185. package/dist/chunks/approval-instance-list-page-CqNdoZqx.js +0 -282
  186. package/dist/chunks/approval-instance-list-page-CqNdoZqx.js.map +0 -1
  187. package/dist/chunks/auth-provider-BV8Iiwfb.cjs +0 -2
  188. package/dist/chunks/auth-provider-BV8Iiwfb.cjs.map +0 -1
  189. package/dist/chunks/auth-provider-Bnox5gsx.js +0 -98
  190. package/dist/chunks/auth-provider-Bnox5gsx.js.map +0 -1
  191. package/dist/chunks/builder-CMlJfQHE.cjs +0 -3
  192. package/dist/chunks/builder-CMlJfQHE.cjs.map +0 -1
  193. package/dist/chunks/builder-D950gct_.js.map +0 -1
  194. package/dist/chunks/categories-5yEM3p3N.cjs +0 -2
  195. package/dist/chunks/categories-5yEM3p3N.cjs.map +0 -1
  196. package/dist/chunks/categories-BIpOG451.js +0 -387
  197. package/dist/chunks/categories-BIpOG451.js.map +0 -1
  198. package/dist/chunks/dashboard-page-Bx1-Ys3e.js +0 -122
  199. package/dist/chunks/dashboard-page-Bx1-Ys3e.js.map +0 -1
  200. package/dist/chunks/dashboard-page-CQNRbMkJ.cjs +0 -2
  201. package/dist/chunks/dashboard-page-CQNRbMkJ.cjs.map +0 -1
  202. package/dist/chunks/delegations-B2j-wNEO.js +0 -646
  203. package/dist/chunks/delegations-B2j-wNEO.js.map +0 -1
  204. package/dist/chunks/delegations-CsB9ozLu.cjs +0 -2
  205. package/dist/chunks/delegations-CsB9ozLu.cjs.map +0 -1
  206. package/dist/chunks/delegations-CvtwTXNP.cjs +0 -2
  207. package/dist/chunks/delegations-CvtwTXNP.cjs.map +0 -1
  208. package/dist/chunks/delegations-dKodb0WW.js +0 -573
  209. package/dist/chunks/delegations-dKodb0WW.js.map +0 -1
  210. package/dist/chunks/detail-BcGAqJ_R.js +0 -1523
  211. package/dist/chunks/detail-BcGAqJ_R.js.map +0 -1
  212. package/dist/chunks/detail-CqjqLd65.cjs +0 -2
  213. package/dist/chunks/detail-CqjqLd65.cjs.map +0 -1
  214. package/dist/chunks/format-date-time-26_pFvv4.cjs +0 -2
  215. package/dist/chunks/login-CQ9MfwcC.cjs +0 -2
  216. package/dist/chunks/notifications-2swRqDPF.js +0 -198
  217. package/dist/chunks/notifications-2swRqDPF.js.map +0 -1
  218. package/dist/chunks/notifications-BaYDebFt.cjs +0 -2
  219. package/dist/chunks/notifications-BaYDebFt.cjs.map +0 -1
  220. package/dist/chunks/orgs-CuHxxd_n.js +0 -1949
  221. package/dist/chunks/orgs-CuHxxd_n.js.map +0 -1
  222. package/dist/chunks/orgs-YMiVLNvL.cjs +0 -2
  223. package/dist/chunks/orgs-YMiVLNvL.cjs.map +0 -1
  224. package/dist/chunks/templates-DTkbSgFY.cjs +0 -2
  225. package/dist/chunks/templates-DTkbSgFY.cjs.map +0 -1
  226. package/dist/chunks/templates-DoDWM68t.js +0 -384
  227. package/dist/chunks/templates-DoDWM68t.js.map +0 -1
  228. package/dist/chunks/users-3ySyUW4u.cjs +0 -2
  229. package/dist/chunks/users-3ySyUW4u.cjs.map +0 -1
  230. package/dist/chunks/users-sMfrSjRQ.js +0 -219
  231. package/dist/chunks/users-sMfrSjRQ.js.map +0 -1
  232. package/dist/components/app-navigation.d.ts +0 -41
@@ -1,1949 +0,0 @@
1
- "use client";
2
- import { t as e } from "./app-navigation-BSkMsEhy.js";
3
- import { r as t } from "./routes-config-dxahImVe.js";
4
- import { a as n, i as r, n as i, o as a, r as o, t as s } from "./admin-pickers-DLlG_1du.js";
5
- import { t as c } from "./bpm-form-field-Cao0rMol.js";
6
- import { forwardRef as l, useCallback as u, useEffect as d, useImperativeHandle as f, useMemo as p, useRef as m, useState as h } from "react";
7
- import { AutoComplete as g, Button as _, DatePicker as v, Filter as y, FilterArea as b, FilterLine as x, FormField as S, Input as C, Modal as w, PageHeader as T, Section as E, SectionGroup as D, Select as O, Tab as k, TabItem as A, Table as j, Typography as M } from "@mezzanine-ui/react";
8
- import { resolveMembers as N } from "@rytass/bpm-core-client";
9
- import { Fragment as P, jsx as F, jsxs as I } from "react/jsx-runtime";
10
- import { CloseIcon as ee, EditIcon as te, PlusIcon as ne, SaveIcon as re } from "@mezzanine-ui/icons";
11
- import ie from "@mezzanine-ui/react/ContentHeader";
12
- import { FormFieldLayout as L } from "@mezzanine-ui/core/form";
13
- import { commitOrgUnitTreeDraft as ae, createManagerResolution as oe, createMembership as se, createOrgUnit as ce, createPosition as le, deleteManagerResolution as ue, deleteMembership as de, deleteOrgUnit as fe, readOrganizationDashboard as pe, updateManagerResolution as me, updateMembership as he, updateOrgUnit as ge, updatePosition as _e } from "@rytass/bpm-core-client/organization";
14
- import { Background as ve, ConnectionMode as ye, Controls as be, Handle as xe, MiniMap as Se, Position as R, ReactFlow as Ce, applyNodeChanges as we } from "@xyflow/react";
15
- import * as z from "dagre";
16
- import '../orgs.css';//#region src/lib/org-tree-draft.ts
17
- function B(e) {
18
- return new Map(e.map((e) => [e.id, e.parentId]));
19
- }
20
- function Te({ orgUnitId: e, parentDraft: t, parentId: n }) {
21
- let r = n === e ? e : n, i = De({
22
- orgUnitId: e,
23
- parentDraft: t,
24
- parentId: r
25
- });
26
- if (i) return {
27
- message: i,
28
- parentDraft: t,
29
- status: "INVALID"
30
- };
31
- if ((t.get(e) ?? null) === r) return {
32
- message: "父子關係沒有變更。",
33
- parentDraft: t,
34
- status: "UNCHANGED"
35
- };
36
- let a = new Map(t);
37
- return a.set(e, r), {
38
- message: r ? "已暫存新的上層組織。" : "已暫存為根節點。",
39
- parentDraft: a,
40
- status: "UPDATED"
41
- };
42
- }
43
- function Ee({ orgUnits: e, parentDraft: t }) {
44
- return e.map((e) => {
45
- let n = t.get(e.id) ?? null;
46
- return n === e.parentId ? null : {
47
- orgUnitId: e.id,
48
- parentId: n,
49
- previousParentId: e.parentId
50
- };
51
- }).filter((e) => !!e);
52
- }
53
- function De({ orgUnitId: e, parentDraft: t, parentId: n }) {
54
- return t.has(e) ? n ? t.has(n) ? n === e ? "組織不可成為自己的上層。" : Oe({
55
- orgUnitId: e,
56
- parentDraft: t,
57
- parentId: n
58
- }) ? "不可搬移到自己的下層組織。" : null : "找不到新的上層組織。" : null : "找不到要搬移的組織節點。";
59
- }
60
- function Oe({ orgUnitId: e, parentDraft: t, parentId: n }) {
61
- let r = /* @__PURE__ */ new Set(), i = n;
62
- for (; i;) {
63
- if (i === e || r.has(i)) return !0;
64
- r.add(i), i = t.get(i) ?? null;
65
- }
66
- return !1;
67
- }
68
- var V = {
69
- orgTreeEditor: "bpm_orgTreeEditor_TMOtD",
70
- orgTreeSummary: "bpm_orgTreeSummary_vpcV8",
71
- orgTreeChangeList: "bpm_orgTreeChangeList_EzmOv",
72
- orgTreeCanvas: "bpm_orgTreeCanvas_MeD7y",
73
- orgTreeNode: "bpm_orgTreeNode_bN4FS",
74
- orgTreeNodeRoot: "bpm_orgTreeNodeRoot_Hr2KD",
75
- orgTreeNodeSelected: "bpm_orgTreeNodeSelected_eRwtL",
76
- orgTreeNodeChanged: "bpm_orgTreeNodeChanged_qPJg0",
77
- orgTreeNodeDeleted: "bpm_orgTreeNodeDeleted_Ab0cI",
78
- orgTreeNodeHeader: "bpm_orgTreeNodeHeader_LEXl-",
79
- orgTreeNodeBadge: "bpm_orgTreeNodeBadge_zLc7t",
80
- orgTreeNodeActions: "bpm_orgTreeNodeActions_cMldI"
81
- }, H = "__org-tree-root__", U = 232, ke = 118, Ae = 232, je = 86, Me = 320, Ne = {
82
- COMPANY: "公司",
83
- DEPARTMENT: "部門",
84
- DIVISION: "事業群",
85
- TEAM: "小組"
86
- }, Pe = { orgUnit: Ie }, Fe = l(function({ onCreateChild: e, onCreateRoot: t, onEditOrgUnit: n, onSaveDraft: r, onStateChange: i, orgUnits: a }, o) {
87
- let [s, c] = h(!1), [l, m] = h(null), [g, _] = h(null), [v, y] = h(() => B(a)), [b, x] = h([]), S = p(() => new Map(a.map((e) => [e.id, e])), [a]), C = p(() => Ee({
88
- orgUnits: a,
89
- parentDraft: v
90
- }), [a, v]), w = p(() => Le({
91
- isEditing: s,
92
- onCreateChild: (n) => {
93
- n ? e(n) : t();
94
- },
95
- onEditOrgUnit: (e) => {
96
- let t = S.get(e);
97
- t && n(t);
98
- },
99
- orgUnits: a,
100
- orgUnitsById: S,
101
- parentDraft: v,
102
- selectedOrgUnitId: g
103
- }), [
104
- s,
105
- e,
106
- t,
107
- n,
108
- a,
109
- S,
110
- v,
111
- g
112
- ]), T = C.length > 0;
113
- f(o, () => ({
114
- cancelEditing: j,
115
- saveDraft: N,
116
- startEditing: A
117
- })), d(() => {
118
- i({
119
- hasDraftChanges: T,
120
- isEditing: s
121
- });
122
- }, [
123
- T,
124
- s,
125
- i
126
- ]), d(() => {
127
- y(B(a)), _(null), m(null), c(!1);
128
- }, [a]), d(() => {
129
- x(w.nodes);
130
- }, [w.nodes]);
131
- let E = u((e, t) => {
132
- y((n) => {
133
- let r = Te({
134
- orgUnitId: e,
135
- parentDraft: n,
136
- parentId: t
137
- });
138
- return m(r.message), r.parentDraft;
139
- });
140
- }, []), D = u((e) => {
141
- if (!s || !e.target || !e.source) return;
142
- let t = e.source === H ? null : e.source;
143
- if (e.target === H) {
144
- m("根節點不能搬移到其他節點下。");
145
- return;
146
- }
147
- E(e.target, t);
148
- }, [E, s]), O = u((e) => {
149
- s && x((t) => we(e, [...t]));
150
- }, [s]), k = u((e, t, n) => {
151
- if (!s || t.id === H) return;
152
- let r = Be(e, t.id) ?? ze(t, n);
153
- if (r === void 0) {
154
- m("拖曳到目標父節點附近,或從父節點拉線到子節點。");
155
- return;
156
- }
157
- E(t.id, r === H ? null : r);
158
- }, [E, s]);
159
- function A() {
160
- c(!0), y(B(a)), m("已進入編輯模式,拖曳節點或拉線只會更新前端草稿。");
161
- }
162
- function j() {
163
- c(!1), y(B(a)), m("已取消草稿變更。");
164
- }
165
- async function N() {
166
- if (!r) {
167
- m("批次儲存 API 尚未接上,草稿仍保留在前端。");
168
- return;
169
- }
170
- await r(C), c(!1), m("組織樹草稿已儲存。");
171
- }
172
- return /* @__PURE__ */ I("div", {
173
- className: V.orgTreeEditor,
174
- children: [/* @__PURE__ */ I("div", {
175
- className: V.orgTreeSummary,
176
- children: [/* @__PURE__ */ F(M, {
177
- color: "text-neutral",
178
- variant: "caption",
179
- children: l ?? (T ? `目前有 ${C.length} 筆父子關係草稿變更。` : "目前沒有草稿變更。")
180
- }), T ? /* @__PURE__ */ F("ul", {
181
- className: V.orgTreeChangeList,
182
- children: C.map((e) => /* @__PURE__ */ I("li", { children: [
183
- Ge(e.orgUnitId, S),
184
- ":",
185
- Ge(e.previousParentId, S),
186
- " -> ",
187
- Ge(e.parentId, S)
188
- ] }, e.orgUnitId))
189
- }) : null]
190
- }), /* @__PURE__ */ F("div", {
191
- className: V.orgTreeCanvas,
192
- children: /* @__PURE__ */ I(Ce, {
193
- connectionMode: ye.Strict,
194
- edges: [...w.edges],
195
- fitView: !0,
196
- fitViewOptions: { padding: .18 },
197
- isValidConnection: (e) => We({
198
- source: e.source,
199
- target: e.target
200
- }, v),
201
- maxZoom: 1.4,
202
- minZoom: .25,
203
- nodeTypes: Pe,
204
- nodes: [...b],
205
- nodesConnectable: s,
206
- nodesDraggable: s,
207
- onConnect: D,
208
- onNodeClick: (e, t) => {
209
- _(t.id === H ? null : t.id);
210
- },
211
- onNodeDoubleClick: (e, t) => {
212
- if (t.id !== H) {
213
- let e = S.get(t.id);
214
- e && n(e);
215
- }
216
- },
217
- onNodeDragStop: k,
218
- onNodesChange: O,
219
- onPaneClick: () => _(null),
220
- panOnDrag: !0,
221
- proOptions: { hideAttribution: !0 },
222
- children: [
223
- /* @__PURE__ */ F(ve, {}),
224
- /* @__PURE__ */ F(be, {}),
225
- /* @__PURE__ */ F(Se, {
226
- pannable: !0,
227
- zoomable: !0
228
- })
229
- ]
230
- })
231
- })]
232
- });
233
- });
234
- function Ie({ data: e, selected: t }) {
235
- return /* @__PURE__ */ I("div", {
236
- className: [
237
- V.orgTreeNode,
238
- e.isSyntheticRoot ? V.orgTreeNodeRoot : "",
239
- e.changed ? V.orgTreeNodeChanged : "",
240
- e.deleted ? V.orgTreeNodeDeleted : "",
241
- t ? V.orgTreeNodeSelected : ""
242
- ].filter(Boolean).join(" "),
243
- children: [
244
- e.isSyntheticRoot ? null : /* @__PURE__ */ F(xe, {
245
- id: "target",
246
- isConnectable: e.isEditing,
247
- position: R.Top,
248
- type: "target"
249
- }),
250
- /* @__PURE__ */ F(xe, {
251
- id: "source",
252
- isConnectable: e.isEditing,
253
- position: R.Bottom,
254
- type: "source"
255
- }),
256
- /* @__PURE__ */ I("div", {
257
- className: V.orgTreeNodeHeader,
258
- children: [/* @__PURE__ */ F(M, {
259
- component: "span",
260
- ellipsis: !0,
261
- title: e.name,
262
- variant: "label-primary",
263
- children: e.name
264
- }), e.changed ? /* @__PURE__ */ F("span", {
265
- className: V.orgTreeNodeBadge,
266
- children: "草稿"
267
- }) : null]
268
- }),
269
- /* @__PURE__ */ F(M, {
270
- color: "text-neutral",
271
- component: "span",
272
- ellipsis: !0,
273
- title: e.code,
274
- variant: "caption",
275
- children: e.isSyntheticRoot ? "根節點容器" : `${e.typeLabel} · ${e.code}`
276
- }),
277
- e.isSyntheticRoot ? null : /* @__PURE__ */ I(M, {
278
- color: "text-neutral",
279
- component: "span",
280
- ellipsis: !0,
281
- title: e.parentLabel,
282
- variant: "caption",
283
- children: ["上層:", e.parentLabel]
284
- }),
285
- /* @__PURE__ */ F("div", {
286
- className: V.orgTreeNodeActions,
287
- children: e.isSyntheticRoot ? /* @__PURE__ */ F(_, {
288
- icon: ne,
289
- iconType: "leading",
290
- onClick: () => e.onCreateChild(null),
291
- size: "sub",
292
- variant: "base-secondary",
293
- children: "新增根節點"
294
- }) : /* @__PURE__ */ I(P, { children: [/* @__PURE__ */ F(_, {
295
- icon: te,
296
- iconType: "leading",
297
- onClick: () => {
298
- e.orgUnitId && e.onEdit(e.orgUnitId);
299
- },
300
- size: "sub",
301
- variant: "base-secondary",
302
- children: "編輯"
303
- }), /* @__PURE__ */ F(_, {
304
- icon: ne,
305
- iconType: "leading",
306
- onClick: () => e.onCreateChild(e.orgUnitId),
307
- size: "sub",
308
- variant: "base-secondary",
309
- children: "新增子節點"
310
- })] })
311
- })
312
- ]
313
- });
314
- }
315
- function Le({ isEditing: e, onCreateChild: t, onEditOrgUnit: n, orgUnits: r, orgUnitsById: i, parentDraft: a, selectedOrgUnitId: o }) {
316
- let s = new z.graphlib.Graph();
317
- s.setDefaultEdgeLabel(() => ({})), s.setGraph({
318
- marginx: 36,
319
- marginy: 36,
320
- nodesep: 44,
321
- rankdir: "TB"
322
- }), s.setNode(H, {
323
- height: je,
324
- width: Ae
325
- }), r.forEach((e) => {
326
- s.setNode(e.id, {
327
- height: ke,
328
- width: U
329
- });
330
- }), r.forEach((e) => {
331
- let t = a.get(e.id) ?? null;
332
- s.setEdge(t ?? H, e.id);
333
- }), z.layout(s);
334
- let c = Re({
335
- data: {
336
- changed: !1,
337
- code: H,
338
- deleted: !1,
339
- isEditing: e,
340
- isSyntheticRoot: !0,
341
- name: "組織根節點",
342
- onCreateChild: t,
343
- onEdit: n,
344
- orgUnitId: null,
345
- parentLabel: "",
346
- path: "",
347
- typeLabel: ""
348
- },
349
- graph: s,
350
- height: je,
351
- id: H,
352
- selected: o === null,
353
- width: Ae
354
- }), l = r.map((r) => {
355
- let c = a.get(r.id) ?? null, l = Ge(c, i);
356
- return Re({
357
- data: {
358
- changed: c !== r.parentId,
359
- code: r.code,
360
- deleted: !!r.deletedAt,
361
- isEditing: e,
362
- isSyntheticRoot: !1,
363
- name: r.name,
364
- onCreateChild: t,
365
- onEdit: n,
366
- orgUnitId: r.id,
367
- parentLabel: l,
368
- path: r.path,
369
- typeLabel: Ke(r.type)
370
- },
371
- graph: s,
372
- height: ke,
373
- id: r.id,
374
- selected: o === r.id,
375
- width: U
376
- });
377
- });
378
- return {
379
- edges: r.map((t) => {
380
- let n = a.get(t.id) ?? null, r = n !== t.parentId;
381
- return {
382
- animated: e && r,
383
- data: {},
384
- id: `org-tree-edge-${n ?? "root"}-${t.id}`,
385
- source: n ?? H,
386
- sourceHandle: "source",
387
- style: r ? {
388
- stroke: "var(--mzn-color-primary, #0057ff)",
389
- strokeWidth: 2
390
- } : void 0,
391
- target: t.id,
392
- targetHandle: "target",
393
- type: "smoothstep"
394
- };
395
- }),
396
- nodes: [c, ...l]
397
- };
398
- }
399
- function Re({ data: e, graph: t, height: n, id: r, selected: i, width: a }) {
400
- let o = t.node(r);
401
- return {
402
- data: e,
403
- height: n,
404
- id: r,
405
- initialHeight: n,
406
- initialWidth: a,
407
- position: o ? {
408
- x: o.x - a / 2,
409
- y: o.y - n / 2
410
- } : {
411
- x: 0,
412
- y: 0
413
- },
414
- selected: i,
415
- sourcePosition: R.Bottom,
416
- targetPosition: R.Top,
417
- type: "orgUnit",
418
- width: a
419
- };
420
- }
421
- function ze(e, t) {
422
- let n = He(e);
423
- return t.filter((t) => t.id !== e.id).map((e) => ({
424
- distance: Ue(n, He(e)),
425
- id: e.id
426
- })).filter((e) => e.distance <= Me).sort((e, t) => e.distance - t.distance)[0]?.id;
427
- }
428
- function Be(e, t) {
429
- let n = W(e);
430
- if (n) return Array.from(document.querySelectorAll(".react-flow__node[data-id]")).map((e) => {
431
- let r = e.dataset.id;
432
- if (!r || r === t) return null;
433
- let i = e.getBoundingClientRect();
434
- return {
435
- distance: Ue(n, {
436
- x: i.left + i.width / 2,
437
- y: i.top + i.height / 2
438
- }),
439
- id: r
440
- };
441
- }).filter((e) => !!e).filter((e) => e.distance <= Me).sort((e, t) => e.distance - t.distance)[0]?.id;
442
- }
443
- function W(e) {
444
- return Ve(e) ? {
445
- x: e.clientX,
446
- y: e.clientY
447
- } : null;
448
- }
449
- function Ve(e) {
450
- return typeof e == "object" && !!e && "clientX" in e && "clientY" in e && typeof e.clientX == "number" && typeof e.clientY == "number";
451
- }
452
- function He(e) {
453
- return {
454
- x: e.position.x + (e.width ?? U) / 2,
455
- y: e.position.y + (e.height ?? ke) / 2
456
- };
457
- }
458
- function Ue(e, t) {
459
- return Math.hypot(e.x - t.x, e.y - t.y);
460
- }
461
- function We(e, t) {
462
- return !e.source || !e.target || e.target === H ? !1 : De({
463
- orgUnitId: e.target,
464
- parentDraft: t,
465
- parentId: e.source === H ? null : e.source
466
- }) === null;
467
- }
468
- function Ge(e, t) {
469
- if (!e) return "根節點";
470
- let n = t.get(e);
471
- return n ? `${n.name} · ${n.code}` : "未知組織";
472
- }
473
- function Ke(e) {
474
- return Ne[e.toUpperCase()] ?? "未知類型";
475
- }
476
- var G = {
477
- tableIntroActions: "bpm_tableIntroActions_WO4XU",
478
- modalFields: "bpm_modalFields_juyv6",
479
- tableIntro: "bpm_tableIntro_u3hcm",
480
- tableFrame: "bpm_tableFrame_IdbmB",
481
- orgFilterArea: "bpm_orgFilterArea_Xjbbp",
482
- membershipFilterArea: "bpm_membershipFilterArea_zob-Y",
483
- scopeLabel: "bpm_scopeLabel_TLHMC"
484
- }, qe = {
485
- hasDraftChanges: !1,
486
- isEditing: !1
487
- }, K = [
488
- {
489
- id: "COMPANY",
490
- name: "公司"
491
- },
492
- {
493
- id: "DIVISION",
494
- name: "事業群"
495
- },
496
- {
497
- id: "DEPARTMENT",
498
- name: "部門"
499
- },
500
- {
501
- id: "TEAM",
502
- name: "小組"
503
- }
504
- ], Je = {
505
- id: "ALL",
506
- name: "全部類型"
507
- }, Ye = [Je, ...K], q = [
508
- {
509
- id: "MEMBER",
510
- name: "指定會員"
511
- },
512
- {
513
- id: "ORG_UNIT",
514
- name: "指定組織"
515
- },
516
- {
517
- id: "POSITION",
518
- name: "指定職位"
519
- }
520
- ], Xe = {
521
- id: "ALL",
522
- name: "全部範圍"
523
- }, Ze = [Xe, ...q], Qe = {
524
- activeOnly: !1,
525
- id: "ALL",
526
- name: "全部狀態"
527
- }, $e = [Qe, {
528
- activeOnly: !0,
529
- id: "ACTIVE",
530
- name: "目前有效"
531
- }], J = [{
532
- id: "true",
533
- name: "主要歸屬",
534
- value: !0
535
- }, {
536
- id: "false",
537
- name: "一般歸屬",
538
- value: !1
539
- }], et = [
540
- 10,
541
- 20,
542
- 50
543
- ], tt = 1368, nt = 908, rt = 1292, it = 1124;
544
- function at({ activeHref: n } = {}) {
545
- let r = t(), i = n ?? r.adminOrgs(), [a, o] = h("ORG_UNITS"), [s, c] = h(null), [l, f] = h(null), [m, g] = h(null), [_, v] = h(!0), [y, b] = h(null), [x, S] = h(Qe), [C, O] = h(1), [j, P] = h(10), [ee, te] = h(Xe), [ne, re] = h(0), [L, ve] = h([]), [ye, be] = h(null), [xe, Se] = h(null), [R, Ce] = h(null), [we, z] = h(1), [B, Te] = h(10), [Ee, De] = h(null), [Oe, V] = h(0), [H, U] = h(null), [ke, Ae] = h(1), [je, Me] = h(10), [Ne, Pe] = h(""), [Fe, Ie] = h(0), [Le, Re] = h(Je), [ze, Be] = h("TABLE"), [W, Ve] = h([]), [He, Ue] = h([]), [We, Ge] = h([]), [Ke, G] = h(null), [qe, K] = h(1), [Ye, q] = h(10), [Ze, $e] = h(""), [J, et] = h(0), [tt, nt] = h([]), [rt, it] = h([]), [at, ut] = h([]), [Y, dt] = h(!1);
546
- d(() => {
547
- s && f(s);
548
- }, [s]);
549
- let ft = s ?? l, X = u(async () => {
550
- v(!0), g(null);
551
- try {
552
- let e = await pe({
553
- managerActiveOnly: x.activeOnly,
554
- managerPage: C,
555
- managerPageSize: j,
556
- managerScopeType: ee.id === "ALL" ? null : ee.id,
557
- membershipActiveOnly: ye?.activeOnly ?? !1,
558
- membershipOrgUnitId: R?.id ?? null,
559
- membershipPage: we,
560
- membershipPageSize: B,
561
- membershipPositionId: Ee?.id ?? null,
562
- orgUnitPage: ke,
563
- orgUnitPageSize: je,
564
- orgUnitSearchText: Ne,
565
- orgUnitType: Le.id === "ALL" ? null : Le.id,
566
- positionPage: qe,
567
- positionPageSize: Ye,
568
- positionSearchText: Ze
569
- });
570
- ve(await N(_t(e.memberships, e.managerResolutions))), Ve(e.orgUnits), Ie(e.orgUnitCount), Ue(e.filteredOrgUnits), nt(e.positions), et(e.positionCount), Ge(e.filteredPositions), V(e.membershipCount), ut(e.filteredMemberships), re(e.managerResolutionCount), it(e.filteredManagerResolutions);
571
- } catch (e) {
572
- g(zt(e));
573
- } finally {
574
- v(!1);
575
- }
576
- }, [
577
- x,
578
- C,
579
- j,
580
- ee,
581
- ye,
582
- R,
583
- we,
584
- B,
585
- Ee,
586
- ke,
587
- je,
588
- Ne,
589
- Le,
590
- qe,
591
- Ye,
592
- Ze
593
- ]);
594
- d(() => {
595
- X();
596
- }, [X]);
597
- let Z = p(() => new Map(W.map((e) => [e.id, e])), [W]), Q = p(() => new Map(tt.map((e) => [e.id, e])), [tt]), $ = p(() => new Map(L.map((e) => [e.memberId, e])), [L]), wt = p(() => He.map((e) => ({
598
- ...e,
599
- key: e.id,
600
- parentName: e.parentId ? bt(Z.get(e.parentId)) : "根節點",
601
- typeLabel: xt(e.type)
602
- })), [He, Z]), Tt = p(() => We.map((e) => ({
603
- ...e,
604
- key: e.id
605
- })), [We]), Et = p(() => at.map((e) => ({
606
- ...e,
607
- key: e.id,
608
- memberName: yt($.get(e.memberId)),
609
- orgUnitName: bt(Z.get(e.orgUnitId)),
610
- positionName: e.positionId ? St(Q.get(e.positionId)) : "未指定"
611
- })), [
612
- $,
613
- at,
614
- Z,
615
- Q
616
- ]), Dt = p(() => rt.map((e) => ({
617
- ...e,
618
- key: e.id,
619
- managerName: yt($.get(e.managerMemberId)),
620
- scopeLabel: vt(e, {
621
- membersById: $,
622
- orgUnitsById: Z,
623
- positionsById: Q
624
- })
625
- })), [
626
- rt,
627
- $,
628
- Z,
629
- Q
630
- ]), Ot = p(() => ({
631
- render: (e) => [{
632
- name: "編輯",
633
- onClick: () => U({
634
- record: e,
635
- type: "EDIT"
636
- })
637
- }, {
638
- name: "停用",
639
- onClick: () => c({
640
- confirmText: "停用組織",
641
- description: `停用「${e.name}」後,這個組織節點將不再出現在可用組織清單中。`,
642
- id: e.id,
643
- title: "停用組織節點",
644
- type: "ORG_UNIT"
645
- }),
646
- variant: "destructive-secondary"
647
- }],
648
- variant: "base-secondary",
649
- width: 128
650
- }), []), kt = p(() => ({
651
- render: (e) => [{
652
- name: "編輯",
653
- onClick: () => G({
654
- record: e,
655
- type: "EDIT"
656
- })
657
- }],
658
- variant: "base-secondary",
659
- width: 88
660
- }), []), At = p(() => ({
661
- render: (e) => [{
662
- name: "編輯",
663
- onClick: () => Se({
664
- record: e,
665
- type: "EDIT"
666
- })
667
- }, {
668
- name: "刪除",
669
- onClick: () => c({
670
- confirmText: "刪除歸屬",
671
- description: `刪除「${e.memberName}」在「${e.orgUnitName}」的會員歸屬。`,
672
- id: e.id,
673
- title: "刪除會員歸屬",
674
- type: "MEMBERSHIP"
675
- }),
676
- variant: "destructive-secondary"
677
- }],
678
- variant: "base-secondary",
679
- width: 128
680
- }), []), jt = p(() => ({
681
- render: (e) => [{
682
- name: "編輯",
683
- onClick: () => b({
684
- record: e,
685
- type: "EDIT"
686
- })
687
- }, {
688
- name: "刪除",
689
- onClick: () => c({
690
- confirmText: "刪除主管規則",
691
- description: `刪除「${e.scopeLabel}」指派給「${e.managerName}」的主管解析規則。`,
692
- id: e.id,
693
- title: "刪除主管解析規則",
694
- type: "MANAGER_RESOLUTION"
695
- }),
696
- variant: "destructive-secondary"
697
- }],
698
- variant: "base-secondary",
699
- width: 128
700
- }), []);
701
- function Mt(e) {
702
- Ae(1), Pe(e);
703
- }
704
- function Nt(e) {
705
- Ae(1), Re(e);
706
- }
707
- function Pt(e) {
708
- K(1), $e(e);
709
- }
710
- function It(e) {
711
- z(1), be(e);
712
- }
713
- function Lt(e) {
714
- z(1), Ce(e);
715
- }
716
- function Rt(e) {
717
- z(1), De(e);
718
- }
719
- function Bt(e) {
720
- O(1), S(e);
721
- }
722
- function Vt(e) {
723
- O(1), te(e);
724
- }
725
- function Ht() {
726
- Y || c(null);
727
- }
728
- async function Ut() {
729
- s && await Gt(async () => {
730
- s.type === "ORG_UNIT" && await fe(s.id), s.type === "MEMBERSHIP" && await de(s.id), s.type === "MANAGER_RESOLUTION" && await ue(s.id), c(null);
731
- });
732
- }
733
- async function Wt(e) {
734
- dt(!0), g(null);
735
- try {
736
- await ae({ moves: e.map((e) => ({
737
- baseUpdatedAt: Z.get(e.orgUnitId)?.updatedAt ?? "",
738
- id: e.orgUnitId,
739
- parentId: e.parentId
740
- })) }), await X();
741
- } catch (e) {
742
- throw g(zt(e)), e;
743
- } finally {
744
- dt(!1);
745
- }
746
- }
747
- async function Gt(e) {
748
- dt(!0), g(null);
749
- try {
750
- await e(), await X();
751
- } catch (e) {
752
- g(zt(e));
753
- } finally {
754
- dt(!1);
755
- }
756
- }
757
- return /* @__PURE__ */ I(e, {
758
- activeHref: i,
759
- children: [
760
- /* @__PURE__ */ F(T, { children: /* @__PURE__ */ F(ie, {
761
- description: "維護組織樹、職位、會員歸屬與簽核主管解析規則。",
762
- title: "組織管理"
763
- }) }),
764
- /* @__PURE__ */ F(D, { children: /* @__PURE__ */ I(E, {
765
- tab: /* @__PURE__ */ I(k, {
766
- activeKey: a,
767
- onChange: (e) => o(Ct(e)),
768
- children: [
769
- /* @__PURE__ */ F(A, { children: "組織樹" }, "ORG_UNITS"),
770
- /* @__PURE__ */ F(A, { children: "職位" }, "POSITIONS"),
771
- /* @__PURE__ */ F(A, { children: "會員歸屬" }, "MEMBERSHIPS"),
772
- /* @__PURE__ */ F(A, { children: "簽核主管" }, "MANAGERS")
773
- ]
774
- }),
775
- children: [
776
- m ? /* @__PURE__ */ F(M, {
777
- color: "text-error",
778
- variant: "body",
779
- children: m
780
- }) : null,
781
- a === "ORG_UNITS" ? /* @__PURE__ */ F(ot, {
782
- actions: Ot,
783
- loading: _,
784
- onCreate: () => U({
785
- parentId: null,
786
- record: null,
787
- type: "CREATE"
788
- }),
789
- onCreateChild: (e) => U({
790
- parentId: e,
791
- record: null,
792
- type: "CREATE"
793
- }),
794
- onEditOrgUnit: (e) => U({
795
- record: e,
796
- type: "EDIT"
797
- }),
798
- onPageChange: Ae,
799
- onSaveDraft: Wt,
800
- onPageSizeChange: (e) => {
801
- Ae(1), Me(e);
802
- },
803
- onSearchTextChange: Mt,
804
- onTypeFilterChange: Nt,
805
- orgUnits: W,
806
- page: ke,
807
- pageSize: je,
808
- rows: wt,
809
- searchText: Ne,
810
- saving: Y,
811
- total: Fe,
812
- typeFilter: Le,
813
- viewMode: ze,
814
- onViewModeChange: Be
815
- }) : null,
816
- a === "POSITIONS" ? /* @__PURE__ */ F(st, {
817
- actions: kt,
818
- loading: _,
819
- onCreate: () => G({
820
- record: null,
821
- type: "CREATE"
822
- }),
823
- onPageChange: K,
824
- onPageSizeChange: (e) => {
825
- K(1), q(e);
826
- },
827
- onSearchTextChange: Pt,
828
- page: qe,
829
- pageSize: Ye,
830
- rows: Tt,
831
- searchText: Ze,
832
- total: J
833
- }) : null,
834
- a === "MEMBERSHIPS" ? /* @__PURE__ */ F(ct, {
835
- actions: At,
836
- loading: _,
837
- onCreate: () => Se({
838
- record: null,
839
- type: "CREATE"
840
- }),
841
- onActiveFilterChange: It,
842
- onOrgUnitFilterChange: Lt,
843
- onPageChange: z,
844
- onPageSizeChange: (e) => {
845
- z(1), Te(e);
846
- },
847
- onPositionFilterChange: Rt,
848
- orgUnitFilter: R,
849
- orgUnits: W,
850
- page: we,
851
- pageSize: B,
852
- positionFilter: Ee,
853
- positions: tt,
854
- rows: Et,
855
- statusFilter: ye,
856
- total: Oe
857
- }) : null,
858
- a === "MANAGERS" ? /* @__PURE__ */ F(lt, {
859
- actions: jt,
860
- loading: _,
861
- onCreate: () => b({
862
- record: null,
863
- type: "CREATE"
864
- }),
865
- onActiveFilterChange: Bt,
866
- onPageChange: O,
867
- onPageSizeChange: (e) => {
868
- O(1), P(e);
869
- },
870
- onScopeTypeFilterChange: Vt,
871
- page: C,
872
- pageSize: j,
873
- rows: Dt,
874
- scopeTypeFilter: ee,
875
- statusFilter: x,
876
- total: ne
877
- }) : null
878
- ]
879
- }) }),
880
- /* @__PURE__ */ F(pt, {
881
- modal: H,
882
- onClose: () => U(null),
883
- onSubmit: (e) => Gt(async () => {
884
- H?.type === "EDIT" && H.record ? await ge({
885
- ...e,
886
- id: H.record.id,
887
- metadataJson: null
888
- }) : await ce({
889
- code: e.code ?? "",
890
- metadataJson: "{}",
891
- name: e.name ?? "",
892
- parentId: e.parentId,
893
- type: e.type ?? "DEPARTMENT"
894
- }), U(null);
895
- }),
896
- orgUnits: W,
897
- saving: Y
898
- }),
899
- /* @__PURE__ */ F(mt, {
900
- modal: Ke,
901
- onClose: () => G(null),
902
- onSubmit: (e) => Gt(async () => {
903
- Ke?.type === "EDIT" && Ke.record ? await _e({
904
- ...e,
905
- id: Ke.record.id,
906
- metadataJson: null
907
- }) : await le({
908
- code: e.code ?? "",
909
- level: e.level ?? 0,
910
- metadataJson: "{}",
911
- name: e.name ?? ""
912
- }), G(null);
913
- }),
914
- saving: Y
915
- }),
916
- /* @__PURE__ */ F(ht, {
917
- membersById: $,
918
- modal: xe,
919
- onClose: () => Se(null),
920
- onSubmit: (e) => Gt(async () => {
921
- xe?.type === "EDIT" && xe.record ? await he({
922
- ...e,
923
- id: xe.record.id
924
- }) : await se({
925
- effectiveFrom: e.effectiveFrom ?? Ft(),
926
- effectiveTo: e.effectiveTo,
927
- isPrimary: e.isPrimary ?? !1,
928
- memberId: e.memberId ?? "",
929
- orgUnitId: e.orgUnitId ?? "",
930
- positionId: e.positionId
931
- }), Se(null);
932
- }),
933
- orgUnits: W,
934
- positions: tt,
935
- saving: Y
936
- }),
937
- /* @__PURE__ */ F(gt, {
938
- membersById: $,
939
- modal: y,
940
- onClose: () => b(null),
941
- onSubmit: (e) => Gt(async () => {
942
- y?.type === "EDIT" && y.record ? await me({
943
- ...e,
944
- id: y.record.id
945
- }) : await oe({
946
- effectiveFrom: e.effectiveFrom ?? Ft(),
947
- effectiveTo: e.effectiveTo,
948
- managerMemberId: e.managerMemberId ?? "",
949
- priority: e.priority ?? 0,
950
- scopeId: e.scopeId ?? "",
951
- scopeType: e.scopeType ?? "MEMBER"
952
- }), b(null);
953
- }),
954
- orgUnits: W,
955
- positions: tt,
956
- saving: Y
957
- }),
958
- /* @__PURE__ */ F(w, {
959
- cancelText: "取消",
960
- confirmButtonProps: { variant: "destructive-primary" },
961
- confirmText: ft?.confirmText ?? "",
962
- loading: Y,
963
- modalStatusType: "error",
964
- modalType: "standard",
965
- onCancel: Ht,
966
- onClose: Ht,
967
- onConfirm: () => void Ut(),
968
- open: !!s,
969
- showModalFooter: !0,
970
- showModalHeader: !0,
971
- size: "regular",
972
- supportingText: "此操作會立即套用,請確認後再繼續。",
973
- title: ft?.title ?? "",
974
- children: /* @__PURE__ */ F(M, {
975
- color: "text-neutral",
976
- variant: "body",
977
- children: ft?.description ?? ""
978
- })
979
- })
980
- ]
981
- });
982
- }
983
- function ot({ actions: e, loading: t, onCreate: n, onCreateChild: r, onEditOrgUnit: i, onPageChange: a, onSaveDraft: o, onPageSizeChange: s, onSearchTextChange: c, onTypeFilterChange: l, onViewModeChange: u, orgUnits: f, page: g, pageSize: v, rows: w, searchText: T, saving: E, total: D, typeFilter: k, viewMode: A }) {
984
- let M = m(null), [N, te] = h(qe), ne = A === "TABLE" ? "FLOW" : "TABLE", re = A === "TABLE" ? "切換樹狀圖" : "切換表格", ie = A === "FLOW", ae = Y({
985
- isTreeMode: ie,
986
- isTreeEditing: N.isEditing
987
- }), oe = dt({
988
- isTreeMode: ie,
989
- isTreeEditing: N.isEditing
990
- }), se = ft({
991
- hasDraftChanges: N.hasDraftChanges,
992
- isTreeEditing: N.isEditing,
993
- isTreeMode: ie,
994
- loading: t,
995
- saving: E
996
- }), ce = p(() => [
997
- {
998
- dataIndex: "code",
999
- key: "code",
1000
- title: "代碼",
1001
- width: 180
1002
- },
1003
- {
1004
- dataIndex: "name",
1005
- key: "name",
1006
- title: "名稱",
1007
- width: 240
1008
- },
1009
- {
1010
- dataIndex: "typeLabel",
1011
- key: "typeLabel",
1012
- title: "類型",
1013
- width: 120
1014
- },
1015
- {
1016
- dataIndex: "parentName",
1017
- key: "parentName",
1018
- title: "上層",
1019
- width: 280
1020
- },
1021
- {
1022
- dataIndex: "path",
1023
- key: "path",
1024
- title: "Path",
1025
- width: 420
1026
- }
1027
- ], []);
1028
- return d(() => {
1029
- A === "TABLE" && te(qe);
1030
- }, [A]), /* @__PURE__ */ I(P, { children: [/* @__PURE__ */ F(X, {
1031
- actionDisabled: se,
1032
- actionIcon: oe,
1033
- actionLabel: ae,
1034
- actions: /* @__PURE__ */ I(P, { children: [/* @__PURE__ */ F(_, {
1035
- onClick: () => u(ne),
1036
- variant: "base-secondary",
1037
- children: re
1038
- }), ie && N.isEditing ? /* @__PURE__ */ F(_, {
1039
- disabled: E,
1040
- icon: ee,
1041
- iconType: "leading",
1042
- onClick: () => M.current?.cancelEditing(),
1043
- variant: "base-secondary",
1044
- children: "取消"
1045
- }) : null] }),
1046
- description: "組織節點使用 ltree path 維護階層,搬移節點會同步更新子節點 path。",
1047
- onCreate: () => {
1048
- if (!ie) {
1049
- n();
1050
- return;
1051
- }
1052
- if (N.isEditing) {
1053
- M.current?.saveDraft();
1054
- return;
1055
- }
1056
- M.current?.startEditing();
1057
- },
1058
- title: "組織樹"
1059
- }), A === "TABLE" ? /* @__PURE__ */ I(P, { children: [/* @__PURE__ */ F(b, {
1060
- className: G.orgFilterArea,
1061
- size: "sub",
1062
- children: /* @__PURE__ */ I(x, { children: [/* @__PURE__ */ F(y, {
1063
- span: 3,
1064
- children: /* @__PURE__ */ F(S, {
1065
- fullWidth: !0,
1066
- layout: L.VERTICAL,
1067
- name: "orgUnitSearchText",
1068
- children: /* @__PURE__ */ F(C, {
1069
- fullWidth: !0,
1070
- onChange: (e) => c(e.target.value),
1071
- placeholder: "搜尋組織名稱或代碼",
1072
- size: "sub",
1073
- value: T,
1074
- variant: "base"
1075
- })
1076
- })
1077
- }), /* @__PURE__ */ F(y, {
1078
- span: 2,
1079
- children: /* @__PURE__ */ F(S, {
1080
- fullWidth: !0,
1081
- layout: L.VERTICAL,
1082
- name: "orgUnitTypeFilter",
1083
- children: /* @__PURE__ */ F(O, {
1084
- clearable: !1,
1085
- fullWidth: !0,
1086
- onChange: (e) => l(wt(e)),
1087
- options: [...Ye],
1088
- placeholder: "類型",
1089
- size: "sub",
1090
- value: k
1091
- })
1092
- })
1093
- })] })
1094
- }), /* @__PURE__ */ F("div", {
1095
- className: G.tableFrame,
1096
- children: /* @__PURE__ */ F(j, {
1097
- actions: e,
1098
- columns: ce,
1099
- dataSource: [...w],
1100
- fullWidth: !0,
1101
- loading: t,
1102
- pagination: ut({
1103
- onPageChange: a,
1104
- onPageSizeChange: s,
1105
- page: g,
1106
- pageSize: v,
1107
- total: D
1108
- }),
1109
- style: { minWidth: tt }
1110
- })
1111
- })] }) : /* @__PURE__ */ F(Fe, {
1112
- ref: M,
1113
- onCreateChild: r,
1114
- onCreateRoot: n,
1115
- onEditOrgUnit: i,
1116
- onSaveDraft: o,
1117
- onStateChange: te,
1118
- orgUnits: f,
1119
- saving: E
1120
- })] });
1121
- }
1122
- function st({ actions: e, loading: t, onCreate: n, onPageChange: r, onPageSizeChange: i, onSearchTextChange: a, page: o, pageSize: s, rows: c, searchText: l, total: u }) {
1123
- let d = p(() => [
1124
- {
1125
- dataIndex: "code",
1126
- key: "code",
1127
- title: "代碼",
1128
- width: 180
1129
- },
1130
- {
1131
- dataIndex: "name",
1132
- key: "name",
1133
- title: "名稱",
1134
- width: 280
1135
- },
1136
- {
1137
- dataIndex: "level",
1138
- key: "level",
1139
- title: "職等",
1140
- width: 96
1141
- },
1142
- {
1143
- dataIndex: "updatedAt",
1144
- key: "updatedAt",
1145
- title: "更新時間",
1146
- width: 220
1147
- }
1148
- ], []);
1149
- return /* @__PURE__ */ I(P, { children: [
1150
- /* @__PURE__ */ F(X, {
1151
- actionLabel: "新增職位",
1152
- description: "職位提供會員歸屬與主管解析規則使用。",
1153
- onCreate: n,
1154
- title: "職位"
1155
- }),
1156
- /* @__PURE__ */ F(b, {
1157
- className: G.orgFilterArea,
1158
- size: "sub",
1159
- children: /* @__PURE__ */ F(x, { children: /* @__PURE__ */ F(y, {
1160
- span: 3,
1161
- children: /* @__PURE__ */ F(S, {
1162
- fullWidth: !0,
1163
- layout: L.VERTICAL,
1164
- name: "positionSearchText",
1165
- children: /* @__PURE__ */ F(C, {
1166
- fullWidth: !0,
1167
- onChange: (e) => a(e.target.value),
1168
- placeholder: "搜尋職位名稱或代碼",
1169
- size: "sub",
1170
- value: l,
1171
- variant: "base"
1172
- })
1173
- })
1174
- }) })
1175
- }),
1176
- /* @__PURE__ */ F("div", {
1177
- className: G.tableFrame,
1178
- children: /* @__PURE__ */ F(j, {
1179
- actions: e,
1180
- columns: d,
1181
- dataSource: [...c],
1182
- fullWidth: !0,
1183
- loading: t,
1184
- pagination: ut({
1185
- onPageChange: r,
1186
- onPageSizeChange: i,
1187
- page: o,
1188
- pageSize: s,
1189
- total: u
1190
- }),
1191
- style: { minWidth: nt }
1192
- })
1193
- })
1194
- ] });
1195
- }
1196
- function ct({ actions: e, loading: t, onCreate: r, onActiveFilterChange: i, onOrgUnitFilterChange: o, onPageChange: s, onPageSizeChange: c, onPositionFilterChange: l, orgUnitFilter: u, orgUnits: d, page: f, pageSize: m, positionFilter: h, positions: _, rows: v, statusFilter: C, total: w }) {
1197
- let T = p(() => [
1198
- {
1199
- dataIndex: "memberName",
1200
- key: "memberName",
1201
- title: "會員",
1202
- width: 280
1203
- },
1204
- {
1205
- dataIndex: "orgUnitName",
1206
- key: "orgUnitName",
1207
- title: "組織",
1208
- width: 280
1209
- },
1210
- {
1211
- dataIndex: "positionName",
1212
- key: "positionName",
1213
- title: "職位",
1214
- width: 220
1215
- },
1216
- {
1217
- key: "isPrimary",
1218
- render: (e) => e.isPrimary ? "主要" : "一般",
1219
- title: "類型",
1220
- width: 104
1221
- },
1222
- {
1223
- dataIndex: "effectiveFrom",
1224
- key: "effectiveFrom",
1225
- title: "生效日",
1226
- width: 140
1227
- },
1228
- {
1229
- dataIndex: "effectiveTo",
1230
- key: "effectiveTo",
1231
- title: "結束日",
1232
- width: 140
1233
- }
1234
- ], []), E = p(() => d.map(n), [d]), D = p(() => _.map(a), [_]);
1235
- return /* @__PURE__ */ I(P, { children: [
1236
- /* @__PURE__ */ F(X, {
1237
- actionLabel: "新增歸屬",
1238
- description: "會員歸屬是 BPM 內部組織權限、主管解析與條件判斷的來源。",
1239
- onCreate: r,
1240
- title: "會員歸屬"
1241
- }),
1242
- /* @__PURE__ */ F(b, {
1243
- className: [G.orgFilterArea, G.membershipFilterArea].join(" "),
1244
- size: "sub",
1245
- children: /* @__PURE__ */ I(x, { children: [
1246
- /* @__PURE__ */ F(y, {
1247
- span: 2,
1248
- children: /* @__PURE__ */ F(S, {
1249
- fullWidth: !0,
1250
- layout: L.VERTICAL,
1251
- name: "membershipOrgUnitFilter",
1252
- children: /* @__PURE__ */ F(g, {
1253
- disabledOptionsFilter: !0,
1254
- emptyText: "沒有符合的組織",
1255
- inputProps: {
1256
- autoCapitalize: "none",
1257
- autoCorrect: "off",
1258
- name: "membershipOrgUnitFilter",
1259
- spellCheck: !1
1260
- },
1261
- mode: "single",
1262
- name: "membershipOrgUnitFilter",
1263
- onChange: (e) => o(kt(e)),
1264
- options: [...E],
1265
- placeholder: "全部組織",
1266
- size: "sub",
1267
- value: u
1268
- })
1269
- })
1270
- }),
1271
- /* @__PURE__ */ F(y, {
1272
- span: 2,
1273
- children: /* @__PURE__ */ F(S, {
1274
- fullWidth: !0,
1275
- layout: L.VERTICAL,
1276
- name: "membershipPositionFilter",
1277
- children: /* @__PURE__ */ F(g, {
1278
- disabledOptionsFilter: !0,
1279
- emptyText: "沒有符合的職位",
1280
- inputProps: {
1281
- autoCapitalize: "none",
1282
- autoCorrect: "off",
1283
- name: "membershipPositionFilter",
1284
- spellCheck: !1
1285
- },
1286
- mode: "single",
1287
- name: "membershipPositionFilter",
1288
- onChange: (e) => l(At(e)),
1289
- options: [...D],
1290
- placeholder: "全部職位",
1291
- size: "sub",
1292
- value: h
1293
- })
1294
- })
1295
- }),
1296
- /* @__PURE__ */ F(y, {
1297
- span: 2,
1298
- children: /* @__PURE__ */ F(S, {
1299
- fullWidth: !0,
1300
- layout: L.VERTICAL,
1301
- name: "membershipStatusFilter",
1302
- children: /* @__PURE__ */ F(g, {
1303
- disabledOptionsFilter: !0,
1304
- emptyText: "沒有符合的狀態",
1305
- inputProps: {
1306
- autoCapitalize: "none",
1307
- autoCorrect: "off",
1308
- name: "membershipStatusFilter",
1309
- spellCheck: !1
1310
- },
1311
- mode: "single",
1312
- name: "membershipStatusFilter",
1313
- onChange: (e) => i(Ot(e)),
1314
- options: [...$e],
1315
- placeholder: "全部狀態",
1316
- size: "sub",
1317
- value: C
1318
- })
1319
- })
1320
- })
1321
- ] })
1322
- }),
1323
- /* @__PURE__ */ F("div", {
1324
- className: G.tableFrame,
1325
- children: /* @__PURE__ */ F(j, {
1326
- actions: e,
1327
- columns: T,
1328
- dataSource: [...v],
1329
- fullWidth: !0,
1330
- loading: t,
1331
- pagination: ut({
1332
- onPageChange: s,
1333
- onPageSizeChange: c,
1334
- page: f,
1335
- pageSize: m,
1336
- total: w
1337
- }),
1338
- style: { minWidth: rt }
1339
- })
1340
- })
1341
- ] });
1342
- }
1343
- function lt({ actions: e, loading: t, onCreate: n, onActiveFilterChange: r, onPageChange: i, onPageSizeChange: a, onScopeTypeFilterChange: o, page: s, pageSize: c, rows: l, scopeTypeFilter: u, statusFilter: d, total: f }) {
1344
- let m = p(() => [
1345
- {
1346
- dataIndex: "scopeLabel",
1347
- key: "scopeLabel",
1348
- title: "套用範圍",
1349
- width: 320
1350
- },
1351
- {
1352
- dataIndex: "managerName",
1353
- key: "managerName",
1354
- title: "簽核主管",
1355
- width: 300
1356
- },
1357
- {
1358
- dataIndex: "priority",
1359
- key: "priority",
1360
- title: "優先序",
1361
- width: 96
1362
- },
1363
- {
1364
- dataIndex: "effectiveFrom",
1365
- key: "effectiveFrom",
1366
- title: "生效日",
1367
- width: 140
1368
- },
1369
- {
1370
- dataIndex: "effectiveTo",
1371
- key: "effectiveTo",
1372
- title: "結束日",
1373
- width: 140
1374
- }
1375
- ], []);
1376
- return /* @__PURE__ */ I(P, { children: [
1377
- /* @__PURE__ */ F(X, {
1378
- actionLabel: "新增主管規則",
1379
- description: "簽核主管規則獨立於組織樹 parent,解析優先序為會員、組織、職位。",
1380
- onCreate: n,
1381
- title: "簽核主管"
1382
- }),
1383
- /* @__PURE__ */ F(b, {
1384
- className: G.orgFilterArea,
1385
- size: "sub",
1386
- children: /* @__PURE__ */ I(x, { children: [/* @__PURE__ */ F(y, {
1387
- span: 3,
1388
- children: /* @__PURE__ */ F(S, {
1389
- fullWidth: !0,
1390
- layout: L.VERTICAL,
1391
- name: "managerScopeTypeFilter",
1392
- children: /* @__PURE__ */ F(O, {
1393
- clearable: !1,
1394
- fullWidth: !0,
1395
- onChange: (e) => o(Et(e)),
1396
- options: [...Ze],
1397
- placeholder: "套用範圍",
1398
- size: "sub",
1399
- value: u
1400
- })
1401
- })
1402
- }), /* @__PURE__ */ F(y, {
1403
- span: 2,
1404
- children: /* @__PURE__ */ F(S, {
1405
- fullWidth: !0,
1406
- layout: L.VERTICAL,
1407
- name: "managerStatusFilter",
1408
- children: /* @__PURE__ */ F(O, {
1409
- clearable: !1,
1410
- fullWidth: !0,
1411
- onChange: (e) => r(Dt(e)),
1412
- options: [...$e],
1413
- placeholder: "狀態",
1414
- size: "sub",
1415
- value: d
1416
- })
1417
- })
1418
- })] })
1419
- }),
1420
- /* @__PURE__ */ F("div", {
1421
- className: G.tableFrame,
1422
- children: /* @__PURE__ */ F(j, {
1423
- actions: e,
1424
- columns: m,
1425
- dataSource: [...l],
1426
- fullWidth: !0,
1427
- loading: t,
1428
- pagination: ut({
1429
- onPageChange: i,
1430
- onPageSizeChange: a,
1431
- page: s,
1432
- pageSize: c,
1433
- total: f
1434
- }),
1435
- style: { minWidth: it }
1436
- })
1437
- })
1438
- ] });
1439
- }
1440
- function ut({ onPageChange: e, onPageSizeChange: t, page: n, pageSize: r, total: i }) {
1441
- return {
1442
- current: n,
1443
- onChange: e,
1444
- onChangePageSize: t,
1445
- pageSize: r,
1446
- pageSizeLabel: "每頁筆數",
1447
- pageSizeOptions: [...et],
1448
- renderResultSummary: (e, t, n) => `顯示 ${e}-${t} 筆,共 ${n} 筆`,
1449
- showPageSizeOptions: !0,
1450
- total: i
1451
- };
1452
- }
1453
- function Y({ isTreeEditing: e, isTreeMode: t }) {
1454
- return t ? e ? "儲存" : "開始編輯" : "新增組織";
1455
- }
1456
- function dt({ isTreeEditing: e, isTreeMode: t }) {
1457
- return t ? e ? re : te : ne;
1458
- }
1459
- function ft({ hasDraftChanges: e, isTreeEditing: t, isTreeMode: n, loading: r, saving: i }) {
1460
- return n ? t ? !e || i : r : !1;
1461
- }
1462
- function X({ actionDisabled: e = !1, actionIcon: t = ne, actionLabel: n, actions: r, description: i, onCreate: a, title: o }) {
1463
- return /* @__PURE__ */ I("div", {
1464
- className: G.tableIntro,
1465
- children: [/* @__PURE__ */ I("div", { children: [/* @__PURE__ */ F(M, {
1466
- component: "h2",
1467
- variant: "h3",
1468
- children: o
1469
- }), /* @__PURE__ */ F(M, {
1470
- color: "text-neutral",
1471
- variant: "body",
1472
- children: i
1473
- })] }), /* @__PURE__ */ I("div", {
1474
- className: G.tableIntroActions,
1475
- children: [r, /* @__PURE__ */ F(_, {
1476
- disabled: e,
1477
- icon: t,
1478
- iconType: "leading",
1479
- onClick: a,
1480
- children: n
1481
- })]
1482
- })]
1483
- });
1484
- }
1485
- function pt({ modal: e, onClose: t, onSubmit: r, orgUnits: a, saving: o }) {
1486
- let [s, l] = h(""), [u, f] = h(""), [p, m] = h(null), [g, _] = h(K[2]);
1487
- return d(() => {
1488
- if (!e) return;
1489
- let t = e.record, r = t?.parentId ?? e.parentId ?? null, i = r ? a.find((e) => e.id === r) ?? null : null;
1490
- l(t?.code ?? ""), f(t?.name ?? ""), m(i ? n(i) : null), _(K.find((e) => e.id === t?.type) ?? K[2]);
1491
- }, [e, a]), /* @__PURE__ */ F(w, {
1492
- cancelText: "取消",
1493
- confirmButtonProps: { disabled: !s || !u },
1494
- confirmText: e?.type === "EDIT" ? "儲存" : "建立",
1495
- loading: o,
1496
- modalType: "standard",
1497
- onCancel: t,
1498
- onClose: t,
1499
- onConfirm: () => void r({
1500
- code: s,
1501
- name: u,
1502
- parentId: p?.id ?? null,
1503
- type: g.id
1504
- }),
1505
- open: !!e,
1506
- showModalFooter: !0,
1507
- showModalHeader: !0,
1508
- size: "regular",
1509
- title: e?.type === "EDIT" ? "編輯組織" : "新增組織",
1510
- children: /* @__PURE__ */ I("div", {
1511
- className: G.modalFields,
1512
- children: [
1513
- /* @__PURE__ */ F(Z, {
1514
- label: "代碼",
1515
- name: "orgCode",
1516
- onChange: l,
1517
- placeholder: "例如 FIN-TW",
1518
- value: s
1519
- }),
1520
- /* @__PURE__ */ F(Z, {
1521
- label: "名稱",
1522
- name: "orgName",
1523
- onChange: f,
1524
- placeholder: "例如 財務部",
1525
- value: u
1526
- }),
1527
- /* @__PURE__ */ F(c, {
1528
- label: "類型",
1529
- name: "orgType",
1530
- children: /* @__PURE__ */ F(O, {
1531
- clearable: !1,
1532
- fullWidth: !0,
1533
- onChange: (e) => _($(e)),
1534
- options: [...K],
1535
- placeholder: "選擇組織類型",
1536
- value: g
1537
- })
1538
- }),
1539
- /* @__PURE__ */ F(c, {
1540
- label: "上層組織",
1541
- name: "parentId",
1542
- children: /* @__PURE__ */ F(i, {
1543
- name: "parentId",
1544
- onChange: m,
1545
- orgUnits: a.filter((t) => t.id !== e?.record?.id),
1546
- placeholder: "選擇上層組織",
1547
- value: p
1548
- })
1549
- })
1550
- ]
1551
- })
1552
- });
1553
- }
1554
- function mt({ modal: e, onClose: t, onSubmit: n, saving: r }) {
1555
- let [i, a] = h(""), [o, s] = h("0"), [c, l] = h("");
1556
- return d(() => {
1557
- e && (a(e.record?.code ?? ""), s(String(e.record?.level ?? 0)), l(e.record?.name ?? ""));
1558
- }, [e]), /* @__PURE__ */ F(w, {
1559
- cancelText: "取消",
1560
- confirmButtonProps: { disabled: !i || !c },
1561
- confirmText: e?.type === "EDIT" ? "儲存" : "建立",
1562
- loading: r,
1563
- modalType: "standard",
1564
- onCancel: t,
1565
- onClose: t,
1566
- onConfirm: () => void n({
1567
- code: i,
1568
- level: Number(o),
1569
- name: c
1570
- }),
1571
- open: !!e,
1572
- showModalFooter: !0,
1573
- showModalHeader: !0,
1574
- size: "regular",
1575
- title: e?.type === "EDIT" ? "編輯職位" : "新增職位",
1576
- children: /* @__PURE__ */ I("div", {
1577
- className: G.modalFields,
1578
- children: [
1579
- /* @__PURE__ */ F(Z, {
1580
- label: "代碼",
1581
- name: "positionCode",
1582
- onChange: a,
1583
- placeholder: "例如 FIN-MGR",
1584
- value: i
1585
- }),
1586
- /* @__PURE__ */ F(Z, {
1587
- label: "名稱",
1588
- name: "positionName",
1589
- onChange: l,
1590
- placeholder: "例如 財務主管",
1591
- value: c
1592
- }),
1593
- /* @__PURE__ */ F(Z, {
1594
- label: "職等",
1595
- name: "positionLevel",
1596
- onChange: s,
1597
- placeholder: "例如 5",
1598
- value: o
1599
- })
1600
- ]
1601
- })
1602
- });
1603
- }
1604
- function ht({ membersById: e, modal: t, onClose: l, onSubmit: u, orgUnits: f, positions: p, saving: m }) {
1605
- let [g, _] = h(Ft()), [v, y] = h(""), [b, x] = h(J[1]), [S, C] = h(null), [T, E] = h(null), [D, k] = h(null);
1606
- return d(() => {
1607
- if (!t) return;
1608
- let i = t.record, o = i ? e.get(i.memberId) : null;
1609
- _(i?.effectiveFrom ?? Ft()), y(i?.effectiveTo ?? ""), x(J.find((e) => e.value === i?.isPrimary) ?? J[1]), C(o ? r(o) : null), E(Pt(f.find((e) => e.id === i?.orgUnitId), n)), k(Pt(p.find((e) => e.id === i?.positionId), a));
1610
- }, [
1611
- e,
1612
- t,
1613
- f,
1614
- p
1615
- ]), /* @__PURE__ */ F(w, {
1616
- cancelText: "取消",
1617
- confirmButtonProps: { disabled: !S || !T },
1618
- confirmText: t?.type === "EDIT" ? "儲存" : "建立",
1619
- loading: m,
1620
- modalType: "standard",
1621
- onCancel: l,
1622
- onClose: l,
1623
- onConfirm: () => void u({
1624
- effectiveFrom: g,
1625
- effectiveTo: v || null,
1626
- isPrimary: b.value,
1627
- memberId: S?.id ?? null,
1628
- orgUnitId: T?.id ?? null,
1629
- positionId: D?.id ?? null
1630
- }),
1631
- open: !!t,
1632
- showModalFooter: !0,
1633
- showModalHeader: !0,
1634
- size: "regular",
1635
- title: t?.type === "EDIT" ? "編輯會員歸屬" : "新增會員歸屬",
1636
- children: /* @__PURE__ */ I("div", {
1637
- className: G.modalFields,
1638
- children: [
1639
- /* @__PURE__ */ F(c, {
1640
- label: "會員",
1641
- name: "memberId",
1642
- children: /* @__PURE__ */ F(s, {
1643
- name: "memberId",
1644
- onChange: C,
1645
- placeholder: "搜尋會員姓名或信箱",
1646
- value: S
1647
- })
1648
- }),
1649
- /* @__PURE__ */ F(c, {
1650
- label: "組織",
1651
- name: "orgUnitId",
1652
- children: /* @__PURE__ */ F(i, {
1653
- name: "orgUnitId",
1654
- onChange: E,
1655
- orgUnits: f,
1656
- placeholder: "選擇歸屬組織",
1657
- value: T
1658
- })
1659
- }),
1660
- /* @__PURE__ */ F(c, {
1661
- label: "職位",
1662
- name: "positionId",
1663
- children: /* @__PURE__ */ F(o, {
1664
- name: "positionId",
1665
- onChange: k,
1666
- placeholder: "選擇職位",
1667
- positions: p,
1668
- value: D
1669
- })
1670
- }),
1671
- /* @__PURE__ */ F(c, {
1672
- label: "歸屬類型",
1673
- name: "isPrimary",
1674
- children: /* @__PURE__ */ F(O, {
1675
- clearable: !1,
1676
- fullWidth: !0,
1677
- onChange: (e) => x(jt(e)),
1678
- options: [...J],
1679
- placeholder: "選擇歸屬類型",
1680
- value: b
1681
- })
1682
- }),
1683
- /* @__PURE__ */ F(Q, {
1684
- label: "生效日",
1685
- name: "membershipEffectiveFrom",
1686
- onChange: _,
1687
- placeholder: "YYYY-MM-DD",
1688
- value: g
1689
- }),
1690
- /* @__PURE__ */ F(Q, {
1691
- label: "結束日",
1692
- name: "membershipEffectiveTo",
1693
- onChange: y,
1694
- placeholder: "YYYY-MM-DD,未設定代表無期限",
1695
- value: v
1696
- })
1697
- ]
1698
- })
1699
- });
1700
- }
1701
- function gt({ membersById: e, modal: t, onClose: l, onSubmit: u, orgUnits: f, positions: p, saving: m }) {
1702
- let [g, _] = h(Ft()), [v, y] = h(""), [b, x] = h(null), [S, C] = h("0"), [T, E] = h(null), [D, k] = h(null), [A, j] = h(null), [N, P] = h(q[0]);
1703
- d(() => {
1704
- if (!t) return;
1705
- let i = t.record, o = q.find((e) => e.id === i?.scopeType) ?? q[0];
1706
- _(i?.effectiveFrom ?? Ft()), y(i?.effectiveTo ?? ""), x(Pt(i ? e.get(i.managerMemberId) : null, r)), C(String(i?.priority ?? 0)), E(o.id === "MEMBER" ? Pt(i ? e.get(i.scopeId) : null, r) : null), k(o.id === "ORG_UNIT" ? Pt(f.find((e) => e.id === i?.scopeId), n) : null), j(o.id === "POSITION" ? Pt(p.find((e) => e.id === i?.scopeId), a) : null), P(o);
1707
- }, [
1708
- e,
1709
- t,
1710
- f,
1711
- p
1712
- ]);
1713
- let ee = N.id === "MEMBER" ? T?.id : N.id === "ORG_UNIT" ? D?.id : A?.id, te = !!(N.id === "MEMBER" && T?.id && b?.id && T.id === b.id);
1714
- return /* @__PURE__ */ F(w, {
1715
- cancelText: "取消",
1716
- confirmButtonProps: { disabled: !b || !ee || te },
1717
- confirmText: t?.type === "EDIT" ? "儲存" : "建立",
1718
- loading: m,
1719
- modalType: "standard",
1720
- onCancel: l,
1721
- onClose: l,
1722
- onConfirm: () => void u({
1723
- effectiveFrom: g,
1724
- effectiveTo: v || null,
1725
- managerMemberId: b?.id ?? null,
1726
- priority: Number(S),
1727
- scopeId: ee ?? null,
1728
- scopeType: N.id
1729
- }),
1730
- open: !!t,
1731
- showModalFooter: !0,
1732
- showModalHeader: !0,
1733
- size: "regular",
1734
- title: t?.type === "EDIT" ? "編輯主管規則" : "新增主管規則",
1735
- children: /* @__PURE__ */ I("div", {
1736
- className: G.modalFields,
1737
- children: [
1738
- /* @__PURE__ */ F(c, {
1739
- label: "套用範圍",
1740
- name: "scopeType",
1741
- children: /* @__PURE__ */ F(O, {
1742
- clearable: !1,
1743
- fullWidth: !0,
1744
- onChange: (e) => P(Tt(e)),
1745
- options: [...q],
1746
- placeholder: "選擇套用範圍",
1747
- value: N
1748
- })
1749
- }),
1750
- N.id === "MEMBER" ? /* @__PURE__ */ F(c, {
1751
- label: "會員",
1752
- name: "scopeMemberId",
1753
- children: /* @__PURE__ */ F(s, {
1754
- name: "scopeMemberId",
1755
- onChange: E,
1756
- placeholder: "搜尋套用會員",
1757
- value: T
1758
- })
1759
- }) : null,
1760
- N.id === "ORG_UNIT" ? /* @__PURE__ */ F(c, {
1761
- label: "組織",
1762
- name: "scopeOrgUnitId",
1763
- children: /* @__PURE__ */ F(i, {
1764
- name: "scopeOrgUnitId",
1765
- onChange: k,
1766
- orgUnits: f,
1767
- placeholder: "選擇套用組織",
1768
- value: D
1769
- })
1770
- }) : null,
1771
- N.id === "POSITION" ? /* @__PURE__ */ F(c, {
1772
- label: "職位",
1773
- name: "scopePositionId",
1774
- children: /* @__PURE__ */ F(o, {
1775
- name: "scopePositionId",
1776
- onChange: j,
1777
- placeholder: "選擇套用職位",
1778
- positions: p,
1779
- value: A
1780
- })
1781
- }) : null,
1782
- /* @__PURE__ */ F(c, {
1783
- label: "簽核主管",
1784
- name: "managerMemberId",
1785
- children: /* @__PURE__ */ F(s, {
1786
- name: "managerMemberId",
1787
- onChange: x,
1788
- placeholder: "搜尋簽核主管",
1789
- value: b
1790
- })
1791
- }),
1792
- te ? /* @__PURE__ */ F(M, {
1793
- color: "text-error",
1794
- variant: "caption",
1795
- children: "簽核主管不可設定為套用會員本人。"
1796
- }) : null,
1797
- /* @__PURE__ */ F(Z, {
1798
- label: "優先序",
1799
- name: "managerPriority",
1800
- onChange: C,
1801
- placeholder: "例如 10",
1802
- value: S
1803
- }),
1804
- /* @__PURE__ */ F(Q, {
1805
- label: "生效日",
1806
- name: "managerEffectiveFrom",
1807
- onChange: _,
1808
- placeholder: "YYYY-MM-DD",
1809
- value: g
1810
- }),
1811
- /* @__PURE__ */ F(Q, {
1812
- label: "結束日",
1813
- name: "managerEffectiveTo",
1814
- onChange: y,
1815
- placeholder: "YYYY-MM-DD,未設定代表無期限",
1816
- value: v
1817
- })
1818
- ]
1819
- })
1820
- });
1821
- }
1822
- function Z({ label: e, name: t, onChange: n, placeholder: r, value: i }) {
1823
- return /* @__PURE__ */ F(c, {
1824
- label: e,
1825
- name: t,
1826
- children: /* @__PURE__ */ F(C, {
1827
- fullWidth: !0,
1828
- name: t,
1829
- onChange: (e) => n(e.target.value),
1830
- placeholder: r,
1831
- value: i
1832
- })
1833
- });
1834
- }
1835
- function Q({ label: e, name: t, onChange: n, placeholder: r, value: i }) {
1836
- return /* @__PURE__ */ F(c, {
1837
- label: e,
1838
- name: t,
1839
- children: /* @__PURE__ */ F(v, {
1840
- format: "YYYY-MM-DD",
1841
- fullWidth: !0,
1842
- inputProps: { name: t },
1843
- onChange: (e) => n(It(e)),
1844
- placeholder: r,
1845
- value: i.trim() ? i : void 0
1846
- })
1847
- });
1848
- }
1849
- function _t(e, t) {
1850
- return [...new Set([
1851
- ...e.map((e) => e.memberId),
1852
- ...t.map((e) => e.managerMemberId),
1853
- ...t.filter((e) => e.scopeType === "MEMBER").map((e) => e.scopeId)
1854
- ])];
1855
- }
1856
- function vt(e, t) {
1857
- return e.scopeType === "MEMBER" ? `會員:${yt(t.membersById.get(e.scopeId))}` : e.scopeType === "ORG_UNIT" ? `組織:${bt(t.orgUnitsById.get(e.scopeId))}` : `職位:${St(t.positionsById.get(e.scopeId))}`;
1858
- }
1859
- function yt(e) {
1860
- return e ? `${e.name} · ${e.email}` : "未知會員";
1861
- }
1862
- function bt(e) {
1863
- return e ? `${e.name} · ${e.code}` : "未知組織";
1864
- }
1865
- function xt(e) {
1866
- return K.find((t) => t.id.toLowerCase() === e.toLowerCase())?.name ?? "未知類型";
1867
- }
1868
- function St(e) {
1869
- return e ? `${e.name} · ${e.code}` : "未指定";
1870
- }
1871
- function Ct(e) {
1872
- return e === "MANAGERS" || e === "MEMBERSHIPS" || e === "POSITIONS" ? e : "ORG_UNITS";
1873
- }
1874
- function $(e) {
1875
- let t = Nt(e) ? e : null;
1876
- if (typeof t?.id == "string") {
1877
- let e = t.id;
1878
- return K.find((t) => t.id.toLowerCase() === e.toLowerCase()) ?? K[2];
1879
- }
1880
- return K[2];
1881
- }
1882
- function wt(e) {
1883
- let t = Nt(e) ? e : null;
1884
- if (typeof t?.id == "string") {
1885
- let e = t.id;
1886
- return Ye.find((t) => t.id.toLowerCase() === e.toLowerCase()) ?? Je;
1887
- }
1888
- return Je;
1889
- }
1890
- function Tt(e) {
1891
- return Mt(e, q, q[0]);
1892
- }
1893
- function Et(e) {
1894
- return Mt(e, Ze, Xe);
1895
- }
1896
- function Dt(e) {
1897
- return Mt(e, $e, Qe);
1898
- }
1899
- function Ot(e) {
1900
- let t = Nt(e) ? e : null, n = typeof t?.id == "string" ? t.id : null;
1901
- return $e.find((e) => e.id === n) ?? null;
1902
- }
1903
- function kt(e) {
1904
- let t = Nt(e) ? e : null, n = typeof t?.id == "string" ? t.id : null, r = typeof t?.name == "string" ? t.name : null;
1905
- return n && r ? {
1906
- id: n,
1907
- name: r
1908
- } : null;
1909
- }
1910
- function At(e) {
1911
- let t = Nt(e) ? e : null, n = typeof t?.id == "string" ? t.id : null, r = typeof t?.name == "string" ? t.name : null;
1912
- return n && r ? {
1913
- id: n,
1914
- name: r
1915
- } : null;
1916
- }
1917
- function jt(e) {
1918
- return Mt(e, J, J[1]);
1919
- }
1920
- function Mt(e, t, n) {
1921
- let r = Nt(e) ? e : null, i = typeof r?.id == "string" ? r.id : null;
1922
- return t.find((e) => e.id === i) ?? n;
1923
- }
1924
- function Nt(e) {
1925
- return typeof e == "object" && !!e && !Array.isArray(e);
1926
- }
1927
- function Pt(e, t) {
1928
- return e ? t(e) : null;
1929
- }
1930
- function Ft() {
1931
- return Lt(/* @__PURE__ */ new Date());
1932
- }
1933
- function It(e) {
1934
- let t = e ? new Date(e) : null;
1935
- return t && !Number.isNaN(t.getTime()) ? Lt(t) : "";
1936
- }
1937
- function Lt(e) {
1938
- return `${e.getFullYear()}-${Rt(e.getMonth() + 1)}-${Rt(e.getDate())}`;
1939
- }
1940
- function Rt(e) {
1941
- return String(e).padStart(2, "0");
1942
- }
1943
- function zt(e) {
1944
- return e instanceof Error ? e.message : "讀取組織資料失敗。";
1945
- }
1946
- //#endregion
1947
- export { at as t };
1948
-
1949
- //# sourceMappingURL=orgs-CuHxxd_n.js.map