@ximatai/muyun-web-app 0.26.8 → 0.26.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/DictionaryManagementView-CtIQpqVA.js +1035 -0
  2. package/dist/MenuManagementView-DJhkN2sG.js +837 -0
  3. package/dist/{MetadataOrchestrationView-DKYVGMzy.js → MetadataOrchestrationView-CzhAgEdX.js} +211 -205
  4. package/dist/{ModuleActionManagementView-DiVzuPdu.js → ModuleActionManagementView-CM2d8jPO.js} +72 -72
  5. package/dist/{RoleAuthorizationView-C0s4Bog7.js → RoleAuthorizationView-jn_WUCeg.js} +228 -221
  6. package/dist/{RoleDetailWorkspaceView-dqHxKVfd.js → RoleDetailWorkspaceView-CzaQ3Dz1.js} +1 -1
  7. package/dist/RoleManagementView-nY7qu4GF.js +1951 -0
  8. package/dist/{SystemUserDetailWorkspaceView-CQ9WeLrR.js → SystemUserDetailWorkspaceView-CBvqmWvP.js} +1 -1
  9. package/dist/SystemUserManagementView-AEomKvK7.js +887 -0
  10. package/dist/currentUserContext-B1lj1WgF.js +11 -0
  11. package/dist/index.css +1 -1
  12. package/dist/index.js +531 -4402
  13. package/dist/{platform-components-CFU_zR7-.js → platform-components-CIi6GdC9.js} +4832 -3453
  14. package/dist/types/App.vue.d.ts +1 -0
  15. package/dist/types/app/StaticRoutePageHost.vue.d.ts +11 -0
  16. package/dist/types/app/loginTenant.d.ts +1 -1
  17. package/dist/types/app/menuRouteCompiler.d.ts +45 -0
  18. package/dist/types/app/menuRouteRuntime.d.ts +24 -0
  19. package/dist/types/app/pageRouteContext.d.ts +24 -0
  20. package/dist/types/app/routeDiagnosticsStore.d.ts +10 -0
  21. package/dist/types/app/router.d.ts +15 -0
  22. package/dist/types/app/staticRouteDefinitions.d.ts +25 -0
  23. package/dist/types/app/workbenchRouteSync.d.ts +1 -1
  24. package/dist/types/app/workbenchStartup.d.ts +3 -3
  25. package/dist/types/consumer/index.d.ts +5 -3
  26. package/dist/types/dynamic-page-runtime/DynamicModuleHost.vue.d.ts +3 -10
  27. package/dist/types/dynamic-page-runtime/DynamicRecordDetailActions.vue.d.ts +4 -3
  28. package/dist/types/dynamic-page-runtime/ManagedDetailRelationInlineSurface.vue.d.ts +40 -0
  29. package/dist/types/dynamic-page-runtime/ManagedDetailRelationSurface.vue.d.ts +14 -0
  30. package/dist/types/dynamic-page-runtime/ModulePageDetailRelations.vue.d.ts +26 -0
  31. package/dist/types/dynamic-page-runtime/ModulePageFormContributionRenderer.vue.d.ts +12 -0
  32. package/dist/types/dynamic-page-runtime/ModulePageHost.vue.d.ts +14 -0
  33. package/dist/types/dynamic-page-runtime/ModulePageListExpansionSurface.vue.d.ts +19 -0
  34. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansion.vue.d.ts +13 -0
  35. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansions.vue.d.ts +16 -0
  36. package/dist/types/dynamic-page-runtime/ModulePageRecordContent.vue.d.ts +42 -0
  37. package/dist/types/dynamic-page-runtime/ModuleRecordDetailActions.vue.d.ts +41 -0
  38. package/dist/types/dynamic-page-runtime/NavigatorManagementEditor.vue.d.ts +20 -1
  39. package/dist/types/dynamic-page-runtime/PageNavigatorExplorer.vue.d.ts +12 -5
  40. package/dist/types/dynamic-page-runtime/RecordFormSurface.vue.d.ts +31 -0
  41. package/dist/types/dynamic-page-runtime/composables/useManagedDetailRelationRuntime.d.ts +30 -0
  42. package/dist/types/dynamic-page-runtime/composables/useModulePageActions.d.ts +13 -0
  43. package/dist/types/dynamic-page-runtime/composables/useModulePageBootstrap.d.ts +17 -0
  44. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailActionRuntime.d.ts +48 -0
  45. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailExtensionRuntime.d.ts +26 -0
  46. package/dist/types/dynamic-page-runtime/composables/useModulePageFormContributionRuntime.d.ts +22 -0
  47. package/dist/types/dynamic-page-runtime/composables/useModulePageListSession.d.ts +41 -0
  48. package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +1324 -0
  49. package/dist/types/dynamic-page-runtime/composables/useRecordEditingSession.d.ts +22 -0
  50. package/dist/types/dynamic-page-runtime/dynamicModuleDetailStateModel.d.ts +5 -12
  51. package/dist/types/dynamic-page-runtime/formComputeCoordinator.d.ts +18 -0
  52. package/dist/types/dynamic-page-runtime/index.d.ts +3 -2
  53. package/dist/types/dynamic-page-runtime/listPageSizePreference.d.ts +10 -0
  54. package/dist/types/dynamic-page-runtime/moduleDetailStateModel.d.ts +12 -0
  55. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +181 -7
  56. package/dist/types/dynamic-page-runtime/navigatorVisibility.d.ts +6 -0
  57. package/dist/types/dynamic-page-runtime/pageContextRuntime.d.ts +2 -2
  58. package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +9 -1
  59. package/dist/types/dynamic-page-runtime/relationFormComputeCoordinator.d.ts +9 -0
  60. package/dist/types/formula/FormulaRuntime.d.ts +29 -0
  61. package/dist/types/platform-admin-runtime/WorkspaceViewDrawer.vue.d.ts +1 -0
  62. package/dist/types/{views/UserDetailWorkspaceView.vue.d.ts → platform-admin-runtime/employee/EmployeeAccountDrawer.vue.d.ts} +2 -2
  63. package/dist/types/platform-admin-runtime/employeeModulePageEnhancement.d.ts +3 -0
  64. package/dist/types/platform-admin-runtime/index.d.ts +1 -1
  65. package/dist/types/platform-admin-runtime/moduleOpenApi.d.ts +2 -0
  66. package/dist/types/platform-admin-runtime/passwordPolicyPageEnhancement.d.ts +6 -0
  67. package/dist/types/platform-admin-runtime/platformAdminRoutes.d.ts +1 -6
  68. package/dist/types/platform-admin-runtime/platformModulePageEnhancement.d.ts +9 -0
  69. package/dist/types/platform-admin-runtime/tenant/TenantApplicationConfigurationDrawer.vue.d.ts +7 -0
  70. package/dist/types/platform-admin-runtime/tenant/TenantApplicationsDetailSection.vue.d.ts +7 -0
  71. package/dist/types/platform-admin-runtime/tenantModulePageEnhancement.d.ts +7 -0
  72. package/dist/types/platform-admin-runtime/user/UserOnlineStatusCell.vue.d.ts +8 -0
  73. package/dist/types/platform-admin-runtime/user/UserPasswordDrawer.vue.d.ts +7 -0
  74. package/dist/types/platform-admin-runtime/user/UserSessionListExpansion.vue.d.ts +7 -0
  75. package/dist/types/platform-admin-runtime/user/useUserSessionRows.d.ts +23 -0
  76. package/dist/types/platform-admin-runtime/user/userOnlineStatusStore.d.ts +11 -0
  77. package/dist/types/platform-admin-runtime/userModulePageEnhancement.d.ts +7 -0
  78. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +4 -2
  79. package/dist/types/platform-components/DetailRelationListPanel.vue.d.ts +13 -0
  80. package/dist/types/{views/EmployeeDetailWorkspaceView.vue.d.ts → platform-components/DrawerTitleActions.vue.d.ts} +2 -1
  81. package/dist/types/platform-components/FileTransferUploader.vue.d.ts +7 -0
  82. package/dist/types/platform-components/ModuleActionButton.vue.d.ts +5 -2
  83. package/dist/types/platform-components/RecordContentSectionHeading.vue.d.ts +17 -0
  84. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +3 -0
  85. package/dist/types/platform-components/RecordDetailExtensionSection.vue.d.ts +8 -3
  86. package/dist/types/platform-components/RecordDetailFields.vue.d.ts +5 -0
  87. package/dist/types/platform-components/RecordDetailLayout.vue.d.ts +11 -3
  88. package/dist/types/platform-components/RecordDetailPanel.vue.d.ts +14 -6
  89. package/dist/types/platform-components/RecordExpandedSubtable.vue.d.ts +3 -0
  90. package/dist/types/platform-components/RecordFileReferenceTransfer.vue.d.ts +4 -0
  91. package/dist/types/platform-components/RecordFormFields.vue.d.ts +29 -1
  92. package/dist/types/platform-components/RecordImageFileReferencePreview.vue.d.ts +11 -0
  93. package/dist/types/platform-components/RecordListExpansionSurface.vue.d.ts +13 -0
  94. package/dist/types/platform-components/RecordListExplorer.vue.d.ts +4 -2
  95. package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +2 -1
  96. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +12 -2
  97. package/dist/types/platform-components/RecordPicker.vue.d.ts +10 -2
  98. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +33 -5
  99. package/dist/types/{views/EmployeeEmploymentDrawer.vue.d.ts → platform-components/RecordRelationTabs.vue.d.ts} +7 -7
  100. package/dist/types/platform-components/RecordSelectionCheckbox.vue.d.ts +13 -0
  101. package/dist/types/platform-components/StaticManagementLayout.vue.d.ts +12 -4
  102. package/dist/types/platform-components/TreeRecordExplorer.vue.d.ts +4 -2
  103. package/dist/types/platform-components/UserSessionExpandedSubtable.vue.d.ts +2 -0
  104. package/dist/types/platform-components/drawerTitleActions.d.ts +11 -0
  105. package/dist/types/platform-components/index.d.ts +11 -3
  106. package/dist/types/platform-components/optionFieldOptionCache.d.ts +3 -0
  107. package/dist/types/platform-components/recordDetailFieldModel.d.ts +2 -0
  108. package/dist/types/platform-components/recordFormFieldModel.d.ts +67 -4
  109. package/dist/types/platform-components/recordPickerConstraints.d.ts +2 -0
  110. package/dist/types/platform-components/recordPickerModel.d.ts +6 -2
  111. package/dist/types/platform-workbench/Workbench.vue.d.ts +2 -2
  112. package/dist/types/platform-workbench/index.d.ts +3 -2
  113. package/dist/types/platform-workbench/legacyPageHostTypeCompatibility.d.ts +6 -0
  114. package/dist/types/platform-workbench/menuNavigation.d.ts +24 -2
  115. package/dist/types/platform-workbench/pageCacheKey.d.ts +2 -0
  116. package/dist/types/platform-workbench/pageHostRegistry.d.ts +1 -1
  117. package/dist/types/platform-workbench/workbenchNavigation.d.ts +14 -1
  118. package/dist/types/views/PasswordPolicyPreview.vue.d.ts +7 -0
  119. package/dist/types/views/RoleAccountGrantDrawer.vue.d.ts +1 -0
  120. package/dist/types/views/RoleAuthorizationView.vue.d.ts +2 -0
  121. package/dist/types/views/RoleEmploymentGrantDrawer.vue.d.ts +1 -0
  122. package/dist/types/views/{EmployeeManagementView.vue.d.ts → UserDetailRouteView.vue.d.ts} +3 -2
  123. package/dist/types/views/UserManagementListView.vue.d.ts +3 -0
  124. package/dist/types/views/UserManagementView.vue.d.ts +1 -6
  125. package/dist/types/views/WorkspaceRouteView.vue.d.ts +3 -0
  126. package/dist/types/views/menuManagementState.d.ts +2 -0
  127. package/dist/types/views/userDetailStateModel.d.ts +1 -3
  128. package/dist/types/views/userManagementRouteState.d.ts +11 -0
  129. package/dist/types/vue-ui-antdv/components/UiButton.vue.d.ts +3 -0
  130. package/dist/types/vue-ui-antdv/components/UiIcon.vue.d.ts +1 -1
  131. package/dist/types/vue-ui-antdv/components/UiInput.vue.d.ts +2 -1
  132. package/dist/types/vue-ui-antdv/components/UiRadioGroup.vue.d.ts +18 -0
  133. package/dist/types/vue-ui-antdv/components/UiRecordExplorerItem.vue.d.ts +2 -2
  134. package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +4 -2
  135. package/dist/types/vue-ui-antdv/index.d.ts +4 -2
  136. package/dist/types/web-contracts/index.d.ts +303 -12
  137. package/dist/types/web-core/businessNotifications.d.ts +3 -2
  138. package/dist/types/web-core/index.d.ts +1 -0
  139. package/dist/types/web-core/module/abilities.d.ts +7 -7
  140. package/dist/types/web-core/module/moduleContext.d.ts +5 -3
  141. package/dist/types/web-core/module/runtimeContext.d.ts +2 -0
  142. package/dist/types/web-core/module/staticModuleClient.d.ts +36 -10
  143. package/dist/types/web-core/referenceResolveClient.d.ts +11 -0
  144. package/dist/workspaceViewSessions-B5g4M0rT.js +51 -0
  145. package/dist/workspaceViews-CkERhK0K.js +8748 -0
  146. package/package.json +1 -1
  147. package/dist/EmployeeDetailWorkspaceView-DswEDSxH.js +0 -14
  148. package/dist/EmployeeManagementView-C9STtw08.js +0 -1777
  149. package/dist/RoleManagementView-D43pUCxi.js +0 -1926
  150. package/dist/SystemUserManagementView-D75_ylYk.js +0 -758
  151. package/dist/UserDetailWorkspaceView-BCST01d2.js +0 -17
  152. package/dist/UserManagementView-CcdvDo_y.js +0 -964
  153. package/dist/pageRealtime-EAiGWKEo.js +0 -227
  154. package/dist/types/views/EmployeeDetailContent.vue.d.ts +0 -64
  155. package/dist/types/views/employeeDetailStateModel.d.ts +0 -39
  156. package/dist/types/views/employeeDetailWorkspaceSession.d.ts +0 -16
  157. package/dist/types/views/employeeDetailWorkspaceView.d.ts +0 -4
  158. package/dist/types/views/fieldUiControlManagementState.d.ts +0 -76
  159. package/dist/types/views/moduleManagementState.d.ts +0 -76
  160. package/dist/types/views/positionManagementState.d.ts +0 -218
  161. package/dist/types/views/tenantManagementState.d.ts +0 -74
  162. package/dist/types/views/useEmployeeEmploymentRows.d.ts +0 -20
  163. package/dist/types/views/userDetailWorkspaceSession.d.ts +0 -14
  164. package/dist/types/views/userDetailWorkspaceView.d.ts +0 -4
  165. package/dist/useUserSessionRows-DCpUZCzN.js +0 -128
  166. package/dist/workspaceViewSessions-Dj1LjdG1.js +0 -4984
  167. /package/dist/types/views/{FieldUiControlManagementView.vue.d.ts → DynamicModuleRouteView.vue.d.ts} +0 -0
  168. /package/dist/types/views/{ModuleManagementView.vue.d.ts → ExternalRouteView.vue.d.ts} +0 -0
  169. /package/dist/types/views/{PasswordManagementView.vue.d.ts → ModuleOpenApiRouteView.vue.d.ts} +0 -0
  170. /package/dist/types/views/{PositionManagementView.vue.d.ts → OpenApiCatalogRouteView.vue.d.ts} +0 -0
  171. /package/dist/types/views/{TenantManagementView.vue.d.ts → RouteDiagnosticsView.vue.d.ts} +0 -0
@@ -0,0 +1,1951 @@
1
+ import { A as e, B as t, Bt as n, Et as r, G as i, Kt as a, O as o, Ot as s, P as c, Qt as l, Tt as u, V as d, W as ee, Wt as f, b as p, bt as te, c as m, ft as h, g, h as _, i as v, l as y, mt as ne, ot as re, r as ie, st as ae, u as oe, vr as se, vt as ce, w as b, x, xt as le, yt as ue, zt as de } from "./platform-components-CIi6GdC9.js";
2
+ import { C as fe, P as pe } from "./workspaceViews-CkERhK0K.js";
3
+ import { n as me } from "./currentUserContext-B1lj1WgF.js";
4
+ import { r as he, t as ge } from "./RoleAuthorizationView-jn_WUCeg.js";
5
+ import { i as _e, n as S, r as ve, t as ye } from "./workspaceViewSessions-B5g4M0rT.js";
6
+ import { Fragment as be, computed as C, createBlock as w, createCommentVNode as T, createElementBlock as E, createElementVNode as D, createTextVNode as O, createVNode as k, defineComponent as A, normalizeClass as xe, onBeforeUnmount as Se, onMounted as Ce, openBlock as j, ref as M, renderList as N, toDisplayString as P, unref as F, watch as we, withCtx as I, withKeys as L, withModifiers as Te } from "vue";
7
+ //#region src/views/RoleAccountGrantDrawer.vue?vue&type=script&setup=true&lang.ts
8
+ var R = {
9
+ key: 1,
10
+ class: "role-account-grant-drawer-state"
11
+ }, z = {
12
+ key: 2,
13
+ class: "role-account-grant-drawer-body"
14
+ }, B = { class: "role-account-grant-search" }, V = { class: "role-account-grant-summary" }, H = { key: 0 }, U = { class: "role-account-grant-selected" }, W = { class: "role-account-grant-selected-title" }, G = {
15
+ key: 0,
16
+ class: "role-account-grant-selected-list"
17
+ }, Ee = ["disabled", "onClick"], De = {
18
+ key: 1,
19
+ class: "role-account-grant-selected-empty"
20
+ }, Oe = { class: "role-account-grant-pagination" }, ke = 20, Ae = /*#__PURE__*/ a(/* @__PURE__ */ A({
21
+ name: "RoleAccountGrantDrawer",
22
+ __name: "RoleAccountGrantDrawer",
23
+ props: {
24
+ open: { type: Boolean },
25
+ container: {},
26
+ context: {},
27
+ role: {}
28
+ },
29
+ emits: ["close", "saved"],
30
+ setup(e, { emit: t }) {
31
+ let n = e, r = t, i = M([]), a = M({}), o = M([]), s = M(/* @__PURE__ */ new Set()), c = M(/* @__PURE__ */ new Set()), l = M(""), u = M(""), d = M(0), p = M(0), m = M(!1), g = M(!1), _ = M(!1), v = M(!1), y = C(() => he(n.context.http)), ne = C(() => n.role?.id), re = C(() => n.role ? `绑定用户 - ${J(n.role)}` : "绑定用户"), ie = C(() => n.role?.ownerScopeType === "platform" ? "platform" : n.role?.ownerScopeType === "organization" ? "organization" : "tenant"), oe = C(() => ie.value === "platform" ? void 0 : n.role?.ownerScopeId), se = C(() => {
32
+ let e = /* @__PURE__ */ new Map();
33
+ for (let t of i.value) t.userId && e.set(t.userId, t);
34
+ return e;
35
+ }), ce = C(() => o.value.filter((e) => e.id).map((e) => ({
36
+ id: e.id,
37
+ username: K(e),
38
+ employeeNo: e.employeeNo ?? "",
39
+ employeeTitle: e.employeeTitle ?? "",
40
+ organizationTitle: e.organizationTitle ?? e.organizationId ?? "",
41
+ departmentTitle: e.departmentTitle ?? e.departmentId ?? "",
42
+ boundTitle: c.value.has(e.id) ? "已绑定" : "未绑定"
43
+ }))), b = C(() => [...s.value].map((e) => a.value[e] ?? Ne(e))), x = C(() => Math.max(1, Math.ceil(p.value / ke))), fe = C(() => d.value > 0), pe = C(() => d.value + 1 < x.value), me = C(() => [...s.value].filter((e) => !c.value.has(e))), ge = C(() => [...c.value].filter((e) => !s.value.has(e))), _e = C(() => me.value.length > 0 || ge.value.length > 0), S = {
44
+ rowKey: "id",
45
+ columns: [
46
+ {
47
+ title: "用户账号",
48
+ key: "username",
49
+ width: 140
50
+ },
51
+ {
52
+ title: "职员姓名",
53
+ key: "employeeTitle",
54
+ width: 120
55
+ },
56
+ {
57
+ title: "职员工号",
58
+ key: "employeeNo",
59
+ width: 120
60
+ },
61
+ {
62
+ title: "所属机构",
63
+ key: "organizationTitle",
64
+ width: 140
65
+ },
66
+ {
67
+ title: "所属部门",
68
+ key: "departmentTitle",
69
+ width: 140
70
+ },
71
+ {
72
+ title: "状态",
73
+ key: "boundTitle",
74
+ width: 90
75
+ }
76
+ ]
77
+ }, ve = C(() => ({
78
+ selectedRowKeys: [...s.value],
79
+ preserveSelectedRowKeys: !0,
80
+ disabledOf: () => _.value,
81
+ onChange: (e) => {
82
+ s.value = new Set(e.map((e) => String(e)));
83
+ }
84
+ }));
85
+ we(() => [n.open, n.role?.id], ([e]) => {
86
+ e ? ye() : Ae();
87
+ }, { immediate: !0 });
88
+ async function ye() {
89
+ let e = ne.value;
90
+ if (!e) {
91
+ Ae();
92
+ return;
93
+ }
94
+ m.value = !0, v.value = !1;
95
+ try {
96
+ let [t, n] = await Promise.all([y.value.accountRoleGrants(e), y.value.userSelector({
97
+ roleId: e,
98
+ enabledOnly: !1,
99
+ page: {
100
+ pageNum: 0,
101
+ pageSize: 500
102
+ }
103
+ })]);
104
+ i.value = t;
105
+ let r = new Set(t.map((e) => e.userId).filter((e) => !!e));
106
+ c.value = r, s.value = new Set(r), a.value = Me([...t.map((e) => Ne(e.userId)).filter((e) => !!e), ...n.records]), await A(0);
107
+ } catch (e) {
108
+ v.value = !0, h(e, {
109
+ source: "role-account-grants",
110
+ phase: "load"
111
+ });
112
+ } finally {
113
+ m.value = !1;
114
+ }
115
+ }
116
+ async function A(e) {
117
+ g.value = !0;
118
+ try {
119
+ let t = await y.value.userSelector({
120
+ keyword: u.value,
121
+ enabledOnly: !0,
122
+ page: {
123
+ pageNum: Math.max(0, e),
124
+ pageSize: ke
125
+ }
126
+ });
127
+ o.value = t.records, a.value = {
128
+ ...a.value,
129
+ ...Me(t.records)
130
+ }, d.value = t.pageNum, p.value = t.total;
131
+ } catch (e) {
132
+ h(e, {
133
+ source: "role-account-grants",
134
+ phase: "load"
135
+ });
136
+ } finally {
137
+ g.value = !1;
138
+ }
139
+ }
140
+ function xe() {
141
+ u.value = l.value.trim(), A(0);
142
+ }
143
+ function Se(e, t) {
144
+ let n = new Set(s.value);
145
+ t ? n.add(e) : n.delete(e), s.value = n;
146
+ }
147
+ async function Ce() {
148
+ let e = ne.value;
149
+ if (e) {
150
+ if (!_e.value) {
151
+ r("close");
152
+ return;
153
+ }
154
+ _.value = !0;
155
+ try {
156
+ for (let t of me.value) await y.value.grantAccountRole(e, {
157
+ userId: t,
158
+ managementScopeType: ie.value,
159
+ managementScopeId: oe.value
160
+ });
161
+ for (let t of ge.value) {
162
+ let n = se.value.get(t)?.id;
163
+ n && await y.value.deleteAccountRoleGrant(e, n);
164
+ }
165
+ await ae({
166
+ success: !0,
167
+ message: "用户绑定已保存"
168
+ }, {
169
+ source: "role-account-grants",
170
+ phase: "action",
171
+ fallbackMessage: "用户绑定已保存"
172
+ }), r("saved"), r("close");
173
+ } catch (e) {
174
+ h(e, {
175
+ source: "role-account-grants",
176
+ phase: "action"
177
+ });
178
+ } finally {
179
+ _.value = !1;
180
+ }
181
+ }
182
+ }
183
+ function Te() {
184
+ _.value || r("close");
185
+ }
186
+ function Ae() {
187
+ i.value = [], a.value = {}, o.value = [], s.value = /* @__PURE__ */ new Set(), c.value = /* @__PURE__ */ new Set(), l.value = "", u.value = "", d.value = 0, p.value = 0, m.value = !1, g.value = !1, _.value = !1, v.value = !1;
188
+ }
189
+ function je(e) {
190
+ Se(e, !1);
191
+ }
192
+ function Me(e) {
193
+ let t = {};
194
+ for (let n of e) n.id && (t[n.id] = n);
195
+ return t;
196
+ }
197
+ function Ne(e) {
198
+ return e ? {
199
+ id: e,
200
+ username: e
201
+ } : void 0;
202
+ }
203
+ function K(e) {
204
+ return String(e?.username ?? e?.id ?? "未知用户");
205
+ }
206
+ function q(e) {
207
+ return e.employeeTitle && e.employeeNo ? `${e.employeeTitle} / ${e.employeeNo}` : e.employeeTitle ?? e.employeeNo ?? e.employeeId ?? e.id;
208
+ }
209
+ function J(e) {
210
+ return String(e.title ?? e.id ?? "角色");
211
+ }
212
+ return (t, n) => (j(), w(F(ee), {
213
+ open: e.open,
214
+ title: re.value,
215
+ container: e.container,
216
+ "close-title": "关闭",
217
+ onClose: Te
218
+ }, {
219
+ operation: I(() => [k(F(f), {
220
+ disabled: _.value || m.value,
221
+ onClick: Te
222
+ }, {
223
+ default: I(() => [...n[3] ||= [O("取消", -1)]]),
224
+ _: 1
225
+ }, 8, ["disabled"]), k(F(f), {
226
+ type: "primary",
227
+ loading: _.value,
228
+ disabled: m.value || !_e.value,
229
+ onClick: Ce
230
+ }, {
231
+ default: I(() => [...n[4] ||= [O(" 确定 ", -1)]]),
232
+ _: 1
233
+ }, 8, ["loading", "disabled"])]),
234
+ default: I(() => [m.value ? (j(), w(F(le), {
235
+ key: 0,
236
+ class: "role-account-grant-drawer-state",
237
+ tip: "加载用户"
238
+ })) : v.value ? (j(), E("div", R, [k(F(te), {
239
+ title: "用户加载失败",
240
+ message: "无法加载当前角色的用户绑定"
241
+ }), k(F(f), {
242
+ type: "primary",
243
+ "icon-name": "reload",
244
+ onClick: ye
245
+ }, {
246
+ default: I(() => [...n[5] ||= [O("重试", -1)]]),
247
+ _: 1
248
+ })])) : (j(), E("section", z, [
249
+ D("div", B, [k(F(de), {
250
+ value: l.value,
251
+ "allow-clear": "",
252
+ disabled: _.value,
253
+ placeholder: "搜索用户账号",
254
+ "onUpdate:value": n[0] ||= (e) => l.value = e,
255
+ onKeydown: L(xe, ["enter"])
256
+ }, null, 8, ["value", "disabled"]), k(F(f), {
257
+ "icon-name": "search",
258
+ disabled: _.value,
259
+ onClick: xe
260
+ }, {
261
+ default: I(() => [...n[6] ||= [O("查询", -1)]]),
262
+ _: 1
263
+ }, 8, ["disabled"])]),
264
+ D("div", V, [D("span", null, "已选 " + P(s.value.size) + " 个", 1), _e.value ? (j(), E("span", H, "新增 " + P(me.value.length) + " 个,移除 " + P(ge.value.length) + " 个", 1)) : T("v-if", !0)]),
265
+ D("section", U, [D("div", W, [n[7] ||= D("strong", null, "已选用户", -1), D("span", null, P(b.value.length) + " 个", 1)]), b.value.length > 0 ? (j(), E("div", G, [(j(!0), E(be, null, N(b.value, (e) => (j(), E("button", {
266
+ key: e.id,
267
+ type: "button",
268
+ disabled: _.value,
269
+ onClick: (t) => je(e.id)
270
+ }, [D("span", null, P(K(e)), 1), D("small", null, P(q(e)), 1)], 8, Ee))), 128))])) : (j(), E("span", De, "暂无已选用户"))]),
271
+ k(F(ue), {
272
+ class: "role-account-grant-table",
273
+ size: "middle",
274
+ contract: S,
275
+ rows: ce.value,
276
+ loading: g.value,
277
+ pagination: !1,
278
+ selection: ve.value
279
+ }, null, 8, [
280
+ "rows",
281
+ "loading",
282
+ "selection"
283
+ ]),
284
+ D("div", Oe, [D("span", null, "共 " + P(p.value) + " 个用户,第 " + P(d.value + 1) + " / " + P(x.value) + " 页", 1), D("div", null, [k(F(f), {
285
+ disabled: _.value || g.value || !fe.value,
286
+ onClick: n[1] ||= (e) => A(d.value - 1)
287
+ }, {
288
+ default: I(() => [...n[8] ||= [O(" 上一页 ", -1)]]),
289
+ _: 1
290
+ }, 8, ["disabled"]), k(F(f), {
291
+ disabled: _.value || g.value || !pe.value,
292
+ onClick: n[2] ||= (e) => A(d.value + 1)
293
+ }, {
294
+ default: I(() => [...n[9] ||= [O(" 下一页 ", -1)]]),
295
+ _: 1
296
+ }, 8, ["disabled"])])])
297
+ ]))]),
298
+ _: 1
299
+ }, 8, [
300
+ "open",
301
+ "title",
302
+ "container"
303
+ ]));
304
+ }
305
+ }), [["__scopeId", "data-v-59d7dba1"]]);
306
+ //#endregion
307
+ //#region src/views/roleDetailWorkspaceSession.ts
308
+ function je(e, t) {
309
+ return ye(fe, e, {
310
+ ...t,
311
+ selectedRole: { ...t.selectedRole },
312
+ draft: { ...t.draft },
313
+ scope: {
314
+ ...t.scope,
315
+ tenant: t.scope.tenant ? { ...t.scope.tenant } : void 0,
316
+ organization: t.scope.organization ? { ...t.scope.organization } : void 0
317
+ }
318
+ });
319
+ }
320
+ function Me(e, t) {
321
+ return S(fe, e, t);
322
+ }
323
+ function Ne(e) {
324
+ return ve(fe, e);
325
+ }
326
+ //#endregion
327
+ //#region src/views/EmployeeEmploymentTable.vue
328
+ var K = /*#__PURE__*/ a(/* @__PURE__ */ A({
329
+ name: "EmployeeEmploymentTable",
330
+ __name: "EmployeeEmploymentTable",
331
+ props: {
332
+ rows: {},
333
+ selectedIds: { default: () => /* @__PURE__ */ new Set() },
334
+ selectable: {
335
+ type: Boolean,
336
+ default: !1
337
+ },
338
+ disabled: {
339
+ type: Boolean,
340
+ default: !1
341
+ }
342
+ },
343
+ emits: ["update:selectedIds"],
344
+ setup(e, { emit: t }) {
345
+ let n = e, r = t, i = M([]), a = [
346
+ {
347
+ key: "title",
348
+ title: "职员",
349
+ width: 160
350
+ },
351
+ {
352
+ key: "employeeNo",
353
+ title: "工号",
354
+ width: 140
355
+ },
356
+ {
357
+ key: "organizationTitle",
358
+ title: "所属机构",
359
+ width: 180
360
+ },
361
+ {
362
+ key: "employmentCount",
363
+ title: "任职",
364
+ width: 88,
365
+ align: "right"
366
+ },
367
+ {
368
+ key: "selectedCount",
369
+ title: "已选",
370
+ width: 88,
371
+ align: "right"
372
+ }
373
+ ], o = [
374
+ {
375
+ key: "position",
376
+ title: "岗位",
377
+ width: 160
378
+ },
379
+ {
380
+ key: "organization",
381
+ title: "机构",
382
+ width: 160
383
+ },
384
+ {
385
+ key: "department",
386
+ title: "部门",
387
+ width: 160
388
+ },
389
+ {
390
+ key: "primaryPosition",
391
+ title: "主岗位",
392
+ width: 88
393
+ }
394
+ ], s = C(() => {
395
+ let e = /* @__PURE__ */ new Map();
396
+ for (let t of n.rows) {
397
+ let n = t.employeeId ?? t.id, r = e.get(n) ?? {
398
+ employeeId: n,
399
+ title: t.employeeTitle ?? n,
400
+ employeeNo: t.employeeNo,
401
+ organizationTitle: t.organizationTitle,
402
+ positions: []
403
+ };
404
+ r.positions.push(t), e.set(n, r);
405
+ }
406
+ return [...e.values()];
407
+ }), c = C(() => s.value);
408
+ function l(e, t) {
409
+ let n = t;
410
+ return e.key === "title" ? n.title : e.key === "employeeNo" ? n.employeeNo ?? n.employeeId : e.key === "organizationTitle" ? n.organizationTitle ?? "-" : e.key === "employmentCount" ? `${n.positions.length} 项` : e.key === "selectedCount" ? `${ee(n)} 项` : "";
411
+ }
412
+ function d(e, t) {
413
+ let n = t;
414
+ return e.key === "position" ? n.positionTitle ?? n.positionId : e.key === "organization" ? n.organizationTitle ?? n.organizationId : e.key === "department" ? n.departmentTitle ?? n.departmentId : e.key === "primaryPosition" ? n.primaryPosition ? "是" : "否" : "";
415
+ }
416
+ function ee(e) {
417
+ return e.positions.filter((e) => n.selectedIds.has(e.id)).length;
418
+ }
419
+ function f(e) {
420
+ if (n.selectable) return {
421
+ selectedRowKeys: e.positions.filter((e) => n.selectedIds.has(e.id)).map((e) => e.id),
422
+ preserveSelectedRowKeys: !0,
423
+ disabledOf: () => n.disabled,
424
+ onChange: (t) => p(e, t)
425
+ };
426
+ }
427
+ function p(e, t) {
428
+ let i = new Set(n.selectedIds);
429
+ for (let t of e.positions) i.delete(t.id);
430
+ for (let e of t) i.add(String(e));
431
+ r("update:selectedIds", i);
432
+ }
433
+ function te(e, t) {
434
+ let n = e.employeeId;
435
+ i.value = t ? Array.from(new Set([...i.value, n])) : i.value.filter((e) => e !== n);
436
+ }
437
+ function m(e) {
438
+ let t = e.employeeId;
439
+ te(e, !i.value.includes(t));
440
+ }
441
+ return (e, t) => (j(), w(F(u), {
442
+ class: "employee-employment-table",
443
+ columns: a,
444
+ rows: c.value,
445
+ "row-key": "employeeId",
446
+ pagination: !1,
447
+ "expanded-row-keys": i.value,
448
+ "clickable-rows": "",
449
+ "horizontal-scroll": "",
450
+ onRowExpand: te,
451
+ onRowDblclick: m
452
+ }, {
453
+ cell: I(({ column: e, record: t }) => [O(P(l(e, t)), 1)]),
454
+ expandedRow: I(({ record: e }) => [k(F(b), { title: "任职信息" }, {
455
+ default: I(() => [k(F(u), {
456
+ columns: o,
457
+ rows: e.positions,
458
+ "row-key": "id",
459
+ pagination: !1,
460
+ selection: f(e),
461
+ "horizontal-scroll": "",
462
+ "row-muted": (e) => e.enabled === !1
463
+ }, {
464
+ cell: I(({ column: e, record: t }) => [O(P(d(e, t)), 1)]),
465
+ _: 1
466
+ }, 8, [
467
+ "rows",
468
+ "selection",
469
+ "row-muted"
470
+ ])]),
471
+ _: 2
472
+ }, 1024)]),
473
+ _: 1
474
+ }, 8, ["rows", "expanded-row-keys"]));
475
+ }
476
+ }), [["__scopeId", "data-v-e5fcebfa"]]), q = { key: 1 }, J = {
477
+ key: 2,
478
+ class: "role-employment-grant-body"
479
+ }, Y = { class: "role-employment-grant-selected" }, X = { class: "role-employment-grant-selected-title" }, Z = {
480
+ key: 0,
481
+ class: "role-employment-grant-selected-list"
482
+ }, Pe = ["disabled", "onClick"], Fe = {
483
+ key: 1,
484
+ class: "role-employment-grant-selected-empty"
485
+ }, Ie = { class: "role-employment-grant-pagination" }, Le = /*#__PURE__*/ a(/* @__PURE__ */ A({
486
+ name: "RoleEmploymentGrantDrawer",
487
+ __name: "RoleEmploymentGrantDrawer",
488
+ props: {
489
+ open: { type: Boolean },
490
+ container: {},
491
+ context: {},
492
+ role: {}
493
+ },
494
+ emits: ["close", "saved"],
495
+ setup(e, { emit: t }) {
496
+ let n = e, r = t, i = M([]), a = M([]), o = M({}), s = M(/* @__PURE__ */ new Set()), c = M(/* @__PURE__ */ new Set()), l = M(!1), u = M(!1), d = M(!1), p = M(!1), m = M(0), g = M(0), _ = M(""), v = C(() => n.role?.id), y = C(() => he(n.context.http)), ne = C(() => `绑定任职 - ${n.role?.title ?? n.role?.id ?? ""}`), re = C(() => [...s.value].filter((e) => !c.value.has(e))), ie = C(() => [...c.value].filter((e) => !s.value.has(e))), oe = C(() => new Map(i.value.map((e) => [e.employeePositionId, e]))), se = C(() => a.value.filter((e) => !_.value.trim() || pe(e).includes(_.value.trim()))), ce = C(() => new Set(se.value.filter((e) => s.value.has(e.id)).map((e) => e.employeeId)).size), b = C(() => [...s.value].map((e) => o.value[e] ?? _e(e)));
497
+ we(() => [n.open, n.role?.id], ([e]) => {
498
+ e ? x() : fe();
499
+ }, { immediate: !0 });
500
+ async function x(e = 0) {
501
+ let t = v.value;
502
+ if (t) {
503
+ u.value = !0, p.value = !1;
504
+ try {
505
+ let [n, r] = await Promise.all([y.value.employmentRoleGrants(t), y.value.employmentSelector(t, {
506
+ enabledOnly: !0,
507
+ page: {
508
+ pageNum: e,
509
+ pageSize: 50
510
+ }
511
+ })]);
512
+ i.value = n, c.value = new Set(n.map((e) => e.employeePositionId).filter((e) => !!e)), o.value = {
513
+ ...o.value,
514
+ ...ge(r.records)
515
+ }, l.value ||= (s.value = new Set(c.value), !0), a.value = r.records, m.value = r.pageNum, g.value = r.total;
516
+ } catch (e) {
517
+ p.value = !0, h(e, {
518
+ source: "role-employment-grants",
519
+ phase: "load"
520
+ });
521
+ } finally {
522
+ u.value = !1;
523
+ }
524
+ }
525
+ }
526
+ async function ue() {
527
+ let e = v.value;
528
+ if (e) {
529
+ d.value = !0;
530
+ try {
531
+ for (let t of re.value) await y.value.grantEmploymentRole(e, t);
532
+ for (let t of ie.value) {
533
+ let n = oe.value.get(t)?.id;
534
+ n && await y.value.deleteEmploymentRoleGrant(e, n);
535
+ }
536
+ await ae({
537
+ success: !0,
538
+ message: "任职角色授权已保存"
539
+ }, {
540
+ source: "role-employment-grants",
541
+ phase: "action"
542
+ }), r("saved"), r("close");
543
+ } catch (e) {
544
+ h(e, {
545
+ source: "role-employment-grants",
546
+ phase: "action"
547
+ });
548
+ } finally {
549
+ d.value = !1;
550
+ }
551
+ }
552
+ }
553
+ function fe() {
554
+ i.value = [], a.value = [], o.value = {}, s.value = /* @__PURE__ */ new Set(), c.value = /* @__PURE__ */ new Set(), l.value = !1, _.value = "", m.value = 0, g.value = 0, p.value = !1;
555
+ }
556
+ function pe(e) {
557
+ return [
558
+ e.employeeTitle,
559
+ e.employeeNo,
560
+ e.organizationTitle,
561
+ e.departmentTitle,
562
+ e.positionTitle
563
+ ].filter(Boolean).join(" ");
564
+ }
565
+ function me(e) {
566
+ let t = new Set(s.value);
567
+ t.delete(e), s.value = t;
568
+ }
569
+ function ge(e) {
570
+ let t = {};
571
+ for (let n of e) n.id && (t[n.id] = n);
572
+ return t;
573
+ }
574
+ function _e(e) {
575
+ return {
576
+ id: e,
577
+ positionId: e
578
+ };
579
+ }
580
+ function S(e) {
581
+ let t = e.positionTitle ?? e.positionId ?? e.id;
582
+ return e.employeeTitle ? `${e.employeeTitle} · ${t}` : t;
583
+ }
584
+ function ve(e) {
585
+ return [
586
+ e.employeeNo,
587
+ e.organizationTitle ?? e.organizationId,
588
+ e.departmentTitle ?? e.departmentId
589
+ ].filter(Boolean).join(" / ") || e.id;
590
+ }
591
+ return (t, n) => (j(), w(F(ee), {
592
+ open: e.open,
593
+ title: ne.value,
594
+ container: e.container,
595
+ "close-title": "关闭",
596
+ onClose: n[6] ||= (e) => !d.value && r("close")
597
+ }, {
598
+ operation: I(() => [k(F(f), {
599
+ disabled: d.value,
600
+ onClick: n[0] ||= (e) => r("close")
601
+ }, {
602
+ default: I(() => [...n[7] ||= [O("取消", -1)]]),
603
+ _: 1
604
+ }, 8, ["disabled"]), k(F(f), {
605
+ type: "primary",
606
+ loading: d.value,
607
+ disabled: u.value || re.value.length === 0 && ie.value.length === 0,
608
+ onClick: ue
609
+ }, {
610
+ default: I(() => [...n[8] ||= [O(" 确定 ", -1)]]),
611
+ _: 1
612
+ }, 8, ["loading", "disabled"])]),
613
+ default: I(() => [u.value ? (j(), w(F(le), {
614
+ key: 0,
615
+ tip: "加载任职"
616
+ })) : p.value ? (j(), E("div", q, [k(F(te), {
617
+ title: "任职加载失败",
618
+ message: "无法加载任职授权"
619
+ }), k(F(f), { onClick: n[1] ||= (e) => x() }, {
620
+ default: I(() => [...n[9] ||= [O("重试", -1)]]),
621
+ _: 1
622
+ })])) : (j(), E("section", J, [
623
+ n[13] ||= D("p", null, "角色将在所选任职的机构、部门和岗位上下文中生效。展开职员后选择其具体任职。", -1),
624
+ k(F(de), {
625
+ value: _.value,
626
+ "onUpdate:value": n[2] ||= (e) => _.value = e,
627
+ "allow-clear": "",
628
+ placeholder: "筛选职员、工号、机构、部门或岗位"
629
+ }, null, 8, ["value"]),
630
+ D("div", null, " 已选 " + P(s.value.size) + " 个任职;当前页涉及 " + P(ce.value) + " 名职员;新增 " + P(re.value.length) + " 个,移除 " + P(ie.value.length) + " 个 ", 1),
631
+ D("section", Y, [D("div", X, [n[10] ||= D("strong", null, "已选任职", -1), D("span", null, P(b.value.length) + " 个", 1)]), b.value.length > 0 ? (j(), E("div", Z, [(j(!0), E(be, null, N(b.value, (e) => (j(), E("button", {
632
+ key: e.id,
633
+ type: "button",
634
+ disabled: d.value,
635
+ onClick: (t) => me(e.id)
636
+ }, [D("span", null, P(S(e)), 1), D("small", null, P(ve(e)), 1)], 8, Pe))), 128))])) : (j(), E("span", Fe, "暂无已选任职"))]),
637
+ k(K, {
638
+ "selected-ids": s.value,
639
+ "onUpdate:selectedIds": n[3] ||= (e) => s.value = e,
640
+ rows: se.value,
641
+ selectable: "",
642
+ disabled: d.value
643
+ }, null, 8, [
644
+ "selected-ids",
645
+ "rows",
646
+ "disabled"
647
+ ]),
648
+ D("div", Ie, [
649
+ D("span", null, "共 " + P(g.value) + " 个启用任职", 1),
650
+ k(F(f), {
651
+ disabled: u.value || m.value === 0,
652
+ onClick: n[4] ||= (e) => x(m.value - 1)
653
+ }, {
654
+ default: I(() => [...n[11] ||= [O("上一页", -1)]]),
655
+ _: 1
656
+ }, 8, ["disabled"]),
657
+ k(F(f), {
658
+ disabled: u.value || (m.value + 1) * 50 >= g.value,
659
+ onClick: n[5] ||= (e) => x(m.value + 1)
660
+ }, {
661
+ default: I(() => [...n[12] ||= [O(" 下一页 ", -1)]]),
662
+ _: 1
663
+ }, 8, ["disabled"])
664
+ ])
665
+ ]))]),
666
+ _: 1
667
+ }, 8, [
668
+ "open",
669
+ "title",
670
+ "container"
671
+ ]));
672
+ }
673
+ }), [["__scopeId", "data-v-436bc3bc"]]), Re = { class: "role-group-member-selector" }, ze = /*#__PURE__*/ a(/* @__PURE__ */ A({
674
+ name: "RoleGroupMemberSelector",
675
+ __name: "RoleGroupMemberSelector",
676
+ props: {
677
+ value: { default: void 0 },
678
+ candidates: {},
679
+ currentRoleId: { default: void 0 },
680
+ disabled: {
681
+ type: Boolean,
682
+ default: !1
683
+ }
684
+ },
685
+ emits: ["update:value"],
686
+ setup(e, { emit: t }) {
687
+ let r = e, i = t, a = C(() => l(r.value)), o = C(() => new Set(r.candidates.filter((e) => e.roleKind === "dataGrant" && e.id && a.value.includes(e.id)).map((e) => e.id))), s = C(() => r.candidates.filter((e) => e.id && e.id !== r.currentRoleId).map((e) => ({
688
+ label: `${u(e)} / ${d(e.roleKind)}`,
689
+ value: e.id,
690
+ disabled: e.roleKind === "dataGrant" && o.value.size > 0 && !a.value.includes(e.id)
691
+ })));
692
+ function c(e) {
693
+ if (!Array.isArray(e)) {
694
+ i("update:value", void 0);
695
+ return;
696
+ }
697
+ let t = e.map((e) => String(e).trim()).filter(Boolean);
698
+ i("update:value", t.length > 0 ? t.join(",") : void 0);
699
+ }
700
+ function l(e) {
701
+ return Array.isArray(e) ? e.map((e) => String(e).trim()).filter(Boolean) : typeof e == "string" ? e.split(",").map((e) => e.trim()).filter(Boolean) : [];
702
+ }
703
+ function u(e) {
704
+ return String(e?.title ?? e?.id ?? "角色");
705
+ }
706
+ function d(e) {
707
+ return e === "dataGrant" ? "数据授权角色" : "标准角色";
708
+ }
709
+ return (t, r) => (j(), E("label", Re, [r[0] ||= D("span", { class: "role-group-member-selector-label" }, "成员角色", -1), k(F(n), {
710
+ mode: "multiple",
711
+ value: a.value,
712
+ options: s.value,
713
+ placeholder: "请选择成员角色",
714
+ disabled: e.disabled,
715
+ "allow-clear": !0,
716
+ "onUpdate:value": c
717
+ }, null, 8, [
718
+ "value",
719
+ "options",
720
+ "disabled"
721
+ ])]));
722
+ }
723
+ }), [["__scopeId", "data-v-91d9ae10"]]), Be = {
724
+ key: 1,
725
+ class: "role-detail-state"
726
+ }, Ve = {
727
+ key: 1,
728
+ class: "role-detail-state"
729
+ }, He = /*@__PURE__*/ A({
730
+ name: "RoleManagementView",
731
+ __name: "RoleManagementView",
732
+ props: {
733
+ recordId: {},
734
+ scopeKind: {},
735
+ scopeId: {}
736
+ },
737
+ setup(n) {
738
+ let a = n, u = pe(), ae = l({ moduleAlias: "iam.tenant" }), se = l({ moduleAlias: "iam.organization" }), b = l({ moduleAlias: "iam.role" }), ue = me(), he = M(""), S = M(null), ve = M(""), ye = M(0), A = M(0), N = M(0), P = M(), L = M(), R = M(), z = M(), B = M(!1), V = M("view"), H = M(!1), U = M(!1), W = M(!1), G = M(), Ee = M(!1), De = M(!1), Oe = M(), ke = M(!1), K = M(0), q = M(Kt(void 0)), J = M(d(void 0)), Y = M([]), X = C(() => !!(a.recordId && a.scopeKind)), Z = C(() => X.value && u?.presentation === "drawer"), Pe = C(() => !X.value || Z.value), Fe = C(() => ae), Ie = C(() => P.value?.id), Re = C(() => ue?.value?.system === !0), He = C(() => ue?.value?.system === !0), Q = C(() => {
739
+ let e = ue?.value?.tenantId;
740
+ if (!(ue?.value?.system === !0 || !e)) return {
741
+ id: e,
742
+ title: e,
743
+ alias: e,
744
+ enabled: !0
745
+ };
746
+ }), Ue = C(() => m(se, {
747
+ scopeFieldName: "tenantId",
748
+ scopeValue: Ie.value,
749
+ treePath: "/iam.organization/tree"
750
+ })), We = C(() => L.value?.kind !== "platform"), Ge = C(() => dt(b, L.value)), Ke = C(() => [
751
+ {
752
+ key: "title",
753
+ title: "角色名称",
754
+ width: "22%"
755
+ },
756
+ {
757
+ key: "assignmentType",
758
+ title: "授权层级",
759
+ width: "13%",
760
+ render: (e) => dn(e, "assignmentType", sn(e.assignmentType))
761
+ },
762
+ {
763
+ key: "roleKind",
764
+ title: "角色类型",
765
+ width: "13%",
766
+ render: (e) => dn(e, "roleKind", cn(e.roleKind))
767
+ },
768
+ {
769
+ key: "sharePolicy",
770
+ title: "公开策略",
771
+ width: "15%",
772
+ render: (e) => dn(e, "sharePolicy", ln(e.sharePolicy))
773
+ },
774
+ {
775
+ key: "systemManaged",
776
+ title: "系统托管",
777
+ width: "12%",
778
+ render: (e) => un(e.systemManaged)
779
+ },
780
+ {
781
+ key: "enabled",
782
+ title: "状态",
783
+ type: "enabledStatus",
784
+ width: "10%"
785
+ }
786
+ ]), qe = C(() => !!L.value), Je = C(() => V.value === "create" ? "新建角色" : vn(z.value ?? q.value)), Ye = C(() => L.value?.title ?? "角色详情"), Xe = C(() => W.value || H.value), Ze = C(() => H.value || !L.value ? !1 : V.value === "create" ? b.can("create") === !0 : !!z.value?.id && b.can("update") === !0 && !z.value?.systemManaged), Qe = C(() => {
787
+ let e = z.value;
788
+ return !!(e?.id && e.systemManaged !== !0 && b.can(gn(e)) === !0);
789
+ }), $e = C(() => V.value === "view" ? z.value?.id ? [
790
+ {
791
+ key: "edit",
792
+ actionCode: "update",
793
+ title: "编辑",
794
+ iconName: "edit",
795
+ disabled: W.value || z.value.systemManaged === !0
796
+ },
797
+ {
798
+ key: "bind",
799
+ actionCode: mn(z.value),
800
+ title: hn(z.value),
801
+ iconName: "lock",
802
+ visible: fn(z.value),
803
+ disabled: W.value || z.value.systemManaged === !0
804
+ },
805
+ {
806
+ key: "delete",
807
+ actionCode: "delete",
808
+ title: "删除",
809
+ iconName: "delete",
810
+ danger: !0,
811
+ disabled: W.value || z.value.systemManaged === !0
812
+ }
813
+ ] : [] : [{
814
+ key: "cancel",
815
+ title: "取消",
816
+ iconName: "close",
817
+ disabled: W.value
818
+ }, {
819
+ key: "save",
820
+ actionCode: V.value === "create" ? "create" : "update",
821
+ title: "保存",
822
+ iconName: "save",
823
+ primary: !0,
824
+ loading: W.value,
825
+ disabled: !Ze.value
826
+ }]), et = C(() => $e.value), tt = C(() => $e.value), nt = _e({
827
+ view: fe,
828
+ input: C(() => {
829
+ let e = z.value?.id, t = L.value, n = V.value;
830
+ if (!(!e || !t || n !== "view" && n !== "edit")) return {
831
+ recordId: e,
832
+ scopeKind: t.kind,
833
+ ...t.kind === "platform" ? {} : { scopeId: t.id }
834
+ };
835
+ }),
836
+ title: C(() => vn(z.value)),
837
+ eligibility: C(() => ({
838
+ hasStableIdentity: !!(z.value?.id && L.value) && !H.value,
839
+ busy: W.value
840
+ })),
841
+ beforePromote: async (e) => {
842
+ let t = z.value, n = L.value;
843
+ if (!(!t || !n)) return await je(e, {
844
+ selectedRole: t,
845
+ draft: q.value,
846
+ scope: n,
847
+ mode: V.value === "edit" ? "edit" : "view"
848
+ }) === "accepted";
849
+ },
850
+ onPromoted: Mt
851
+ }), rt = C(() => ({
852
+ title: {
853
+ label: "角色名称",
854
+ required: !0,
855
+ visible: !0,
856
+ placeholder: "请输入角色名称"
857
+ },
858
+ assignmentType: {
859
+ label: "授权层级",
860
+ required: !0,
861
+ visible: !0,
862
+ controlType: "select",
863
+ options: en(q.value.roleKind)
864
+ },
865
+ roleKind: {
866
+ label: "角色类型",
867
+ required: !0,
868
+ visible: !0,
869
+ controlType: "select",
870
+ options: tn(q.value.assignmentType)
871
+ },
872
+ memberRoleIds: {
873
+ label: "成员角色",
874
+ visible: q.value.roleKind === "group"
875
+ },
876
+ ownerScopeType: {
877
+ label: "归属范围",
878
+ required: !0,
879
+ visible: !0,
880
+ readOnly: !0,
881
+ controlType: "select",
882
+ options: [
883
+ {
884
+ label: "平台",
885
+ value: "platform"
886
+ },
887
+ {
888
+ label: "租户",
889
+ value: "tenant"
890
+ },
891
+ {
892
+ label: "机构",
893
+ value: "organization"
894
+ }
895
+ ]
896
+ },
897
+ ownerScopeId: {
898
+ label: "归属对象",
899
+ visible: !0,
900
+ readOnly: !0
901
+ },
902
+ sharePolicy: {
903
+ label: "公开策略",
904
+ required: !0,
905
+ visible: !0,
906
+ controlType: "select",
907
+ options: on(L.value?.kind ?? q.value.ownerScopeType)
908
+ },
909
+ description: {
910
+ label: "说明",
911
+ visible: !0,
912
+ placeholder: "请输入角色说明"
913
+ },
914
+ enabled: {
915
+ label: "启用状态",
916
+ visible: !0,
917
+ controlType: "enabledStatus"
918
+ },
919
+ sortOrder: {
920
+ label: "排序号",
921
+ visible: !0,
922
+ placeholder: "请输入排序号"
923
+ }
924
+ })), it = [
925
+ "title",
926
+ "assignmentType",
927
+ "roleKind"
928
+ ], at = [
929
+ "ownerScopeType",
930
+ "ownerScopeId",
931
+ "sharePolicy",
932
+ "description",
933
+ "enabled",
934
+ "sortOrder"
935
+ ], ot = C(() => {
936
+ let e = [
937
+ "title",
938
+ "assignmentType",
939
+ "roleKind"
940
+ ];
941
+ return q.value.roleKind === "group" && e.push("memberRoleIds"), e.push("ownerScopeType", "ownerScopeId", "sharePolicy", "description", "enabled", "sortOrder"), e;
942
+ }), st;
943
+ Ce(() => {
944
+ if (lt(), !X.value || !a.recordId || !a.scopeKind) return;
945
+ let e = Ht();
946
+ e && !Z.value && (st = Me(e, ct)), Vt();
947
+ }), Se(() => st?.());
948
+ function ct(e) {
949
+ return V.value === "edit" ? !1 : (Gt(e), !0);
950
+ }
951
+ we(z, (e) => {
952
+ !X.value || !e || u?.setTitle(vn(e));
953
+ }, { immediate: !0 }), we(Q, gt, { immediate: !0 }), we(L, () => {
954
+ X.value || (R.value = void 0, z.value = void 0, q.value = Kt(L.value), Mt(), N.value += 1, ut());
955
+ });
956
+ async function lt() {
957
+ try {
958
+ J.value = d((await b.runtime.ready).uiDescriptor);
959
+ } catch (e) {
960
+ h(e, {
961
+ source: "role-management",
962
+ phase: "load"
963
+ });
964
+ }
965
+ }
966
+ async function ut(e = L.value) {
967
+ if (!e) {
968
+ Y.value = [];
969
+ return;
970
+ }
971
+ try {
972
+ Y.value = (await b.crud.query(ft({
973
+ page: {
974
+ pageNum: 0,
975
+ pageSize: 500
976
+ },
977
+ conditions: [
978
+ {
979
+ fieldName: "assignmentType",
980
+ operator: "EQ",
981
+ values: ["employment"]
982
+ },
983
+ {
984
+ fieldName: "roleKind",
985
+ operator: "IN",
986
+ values: ["standard", "dataGrant"]
987
+ },
988
+ {
989
+ fieldName: "enabled",
990
+ operator: "EQ",
991
+ values: [!0]
992
+ }
993
+ ],
994
+ sorts: [{ field: "sortOrder" }, { field: "title" }]
995
+ }, e))).records;
996
+ } catch (e) {
997
+ Y.value = [], h(e, {
998
+ source: "role-management",
999
+ phase: "load"
1000
+ });
1001
+ }
1002
+ }
1003
+ function dt(e, t) {
1004
+ return {
1005
+ ...e,
1006
+ crud: {
1007
+ ...e.crud,
1008
+ query: (n) => t ? e.crud.query(ft(n, t)) : e.crud.query(n)
1009
+ }
1010
+ };
1011
+ }
1012
+ function ft(e, t) {
1013
+ let n = [...e?.conditions ?? [], {
1014
+ fieldName: "ownerScopeType",
1015
+ operator: "EQ",
1016
+ values: [t.kind]
1017
+ }];
1018
+ return t.kind !== "platform" && t.id && n.push({
1019
+ fieldName: "ownerScopeId",
1020
+ operator: "EQ",
1021
+ values: [t.id]
1022
+ }), {
1023
+ ...e,
1024
+ conditions: n
1025
+ };
1026
+ }
1027
+ function pt(e) {
1028
+ return e === "ownerScopeType" || e === "ownerScopeId" || V.value === "edit" && ["assignmentType", "roleKind"].includes(e) ? !0 : z.value?.systemManaged === !0;
1029
+ }
1030
+ function mt(e, t) {
1031
+ let n = {
1032
+ ...q.value,
1033
+ [e]: t
1034
+ };
1035
+ e === "roleKind" && (t === "group" || t === "dataGrant") && (n.assignmentType = "employment"), e === "roleKind" && t !== "group" && (n.memberRoleIds = void 0), e === "assignmentType" && t === "account" && $t(n.roleKind) && (n.roleKind = "standard", n.memberRoleIds = void 0), q.value = n;
1036
+ }
1037
+ function ht(e) {
1038
+ if (He.value) {
1039
+ if (!L.value && Re.value) {
1040
+ _t();
1041
+ return;
1042
+ }
1043
+ !P.value && e.length > 0 && vt(e[0]);
1044
+ }
1045
+ }
1046
+ function gt(e = Q.value) {
1047
+ !e || He.value || P.value || L.value || (P.value = e, yt(e), A.value += 1);
1048
+ }
1049
+ function _t() {
1050
+ !$() || !Re.value || (P.value = void 0, L.value = {
1051
+ kind: "platform",
1052
+ key: "platform",
1053
+ title: "平台角色"
1054
+ });
1055
+ }
1056
+ function vt(e) {
1057
+ $() && (P.value = e, yt(e), A.value += 1);
1058
+ }
1059
+ function yt(e = P.value) {
1060
+ !e?.id || !$() || (L.value = {
1061
+ kind: "tenant",
1062
+ id: e.id,
1063
+ key: `tenant:${e.id}`,
1064
+ title: `${yn(e)} / 租户本级`,
1065
+ tenant: e
1066
+ });
1067
+ }
1068
+ function bt(e) {
1069
+ !e.id || !$() || (L.value = {
1070
+ kind: "organization",
1071
+ id: e.id,
1072
+ key: `organization:${e.id}`,
1073
+ title: bn(e),
1074
+ tenant: P.value,
1075
+ organization: e
1076
+ });
1077
+ }
1078
+ function xt(e) {
1079
+ e.key === "create" && At();
1080
+ }
1081
+ function St(e) {
1082
+ return [
1083
+ {
1084
+ key: "bind",
1085
+ actionCode: mn(e),
1086
+ title: "绑定",
1087
+ after: "edit",
1088
+ pinned: !0,
1089
+ visible: fn(e)
1090
+ },
1091
+ {
1092
+ key: "authorize",
1093
+ actionCode: "rolePermissions",
1094
+ title: "授权",
1095
+ after: "bind",
1096
+ pinned: !0,
1097
+ visible: pn(e)
1098
+ },
1099
+ {
1100
+ key: "toggle",
1101
+ actionCode: gn(e),
1102
+ title: _n(e),
1103
+ iconName: "power",
1104
+ before: "delete"
1105
+ }
1106
+ ];
1107
+ }
1108
+ function Ct(e, t) {
1109
+ if (e.systemManaged !== !0) return;
1110
+ let n = t.key ?? t.actionCode;
1111
+ return n === "edit" || n === "update" || n === "bind" || n === "authorize" || n === "toggle" || n === "delete" ? { disabled: !0 } : void 0;
1112
+ }
1113
+ function wt(e, t) {
1114
+ if ($()) {
1115
+ if (e.key === "view") {
1116
+ jt(t, "view");
1117
+ return;
1118
+ }
1119
+ if (e.key === "edit") {
1120
+ jt(t, "edit");
1121
+ return;
1122
+ }
1123
+ if (e.key === "bind") {
1124
+ Ot(t, t.assignmentType === "employment");
1125
+ return;
1126
+ }
1127
+ if (e.key === "authorize") {
1128
+ Tt(t);
1129
+ return;
1130
+ }
1131
+ if (e.key === "toggle") {
1132
+ Rt(t);
1133
+ return;
1134
+ }
1135
+ e.key === "delete" && Lt(t);
1136
+ }
1137
+ }
1138
+ function Tt(e) {
1139
+ !String(e.id ?? "") || e.roleKind === "group" || (Oe.value = qt(e), ke.value = !0);
1140
+ }
1141
+ function Et() {
1142
+ ke.value = !1, Oe.value = void 0;
1143
+ }
1144
+ function Dt(e) {
1145
+ $() && jt(e, "view");
1146
+ }
1147
+ async function Ot(e, t = !1) {
1148
+ if (!$()) return;
1149
+ let n = String(e.id ?? "");
1150
+ if (n) {
1151
+ Ee.value = !t, De.value = t, G.value = qt(e);
1152
+ try {
1153
+ G.value = await b.crud.view(n);
1154
+ } catch (e) {
1155
+ Ee.value = !1, De.value = !1, G.value = void 0, h(e, {
1156
+ source: "role-management",
1157
+ phase: "load"
1158
+ });
1159
+ }
1160
+ }
1161
+ }
1162
+ function kt() {
1163
+ W.value || (Ee.value = !1, De.value = !1, G.value = void 0);
1164
+ }
1165
+ function At() {
1166
+ if ($()) {
1167
+ if (!L.value) {
1168
+ ne("请先选择角色归属范围", { phase: "validation" });
1169
+ return;
1170
+ }
1171
+ z.value = void 0, R.value = void 0, q.value = Kt(L.value), V.value = "create", H.value = !1, U.value = !1, K.value += 1, B.value = !0;
1172
+ }
1173
+ }
1174
+ async function jt(e, t) {
1175
+ if (!$()) return;
1176
+ let n = String(e.id ?? "");
1177
+ if (!n) return;
1178
+ R.value = n, B.value = !0, V.value = t, z.value = void 0, q.value = qt(e), H.value = !0, U.value = !1;
1179
+ let r = K.value + 1;
1180
+ K.value = r;
1181
+ try {
1182
+ let e = await b.crud.view(n);
1183
+ if (!zt(n, r)) return;
1184
+ if (!Wt(e)) {
1185
+ U.value = !0, ne("角色不属于当前归属范围", {
1186
+ source: "role-management",
1187
+ phase: "load"
1188
+ });
1189
+ return;
1190
+ }
1191
+ Bt(e, t);
1192
+ } catch (e) {
1193
+ zt(n, r) && (U.value = !0, h(e, {
1194
+ source: "role-management",
1195
+ phase: "load"
1196
+ }));
1197
+ } finally {
1198
+ zt(n, r) && (H.value = !1);
1199
+ }
1200
+ }
1201
+ function Mt() {
1202
+ W.value || (K.value += 1, H.value = !1, U.value = !1, B.value = !1, V.value = "view", q.value = z.value ? qt(z.value) : Kt(L.value), Z.value && u?.dismiss());
1203
+ }
1204
+ function Nt() {
1205
+ if (!W.value) {
1206
+ if (!z.value?.id || V.value === "create") {
1207
+ Mt();
1208
+ return;
1209
+ }
1210
+ q.value = qt(z.value), V.value = "view", H.value = !1, U.value = !1;
1211
+ }
1212
+ }
1213
+ function Pt(e) {
1214
+ if (e.key === "cancel") {
1215
+ Nt();
1216
+ return;
1217
+ }
1218
+ if (e.key === "save") {
1219
+ It();
1220
+ return;
1221
+ }
1222
+ if ($()) {
1223
+ if (e.key === "edit" && z.value && !z.value.systemManaged) {
1224
+ q.value = qt(z.value), V.value = "edit";
1225
+ return;
1226
+ }
1227
+ if (e.key === "bind" && z.value) {
1228
+ Ot(z.value, z.value.assignmentType === "employment");
1229
+ return;
1230
+ }
1231
+ e.key === "delete" && Lt(z.value);
1232
+ }
1233
+ }
1234
+ function Ft() {
1235
+ let e = String(q.value.id ?? R.value ?? "");
1236
+ if (!e) return;
1237
+ let t = V.value === "create" ? "view" : V.value;
1238
+ jt({
1239
+ ...q.value,
1240
+ id: e
1241
+ }, t);
1242
+ }
1243
+ async function It() {
1244
+ await ie({
1245
+ loading: W,
1246
+ mode: V.value === "edit" ? "edit" : "create",
1247
+ source: "role-management",
1248
+ validateContext: () => L.value ? void 0 : "请先选择角色归属范围",
1249
+ canSave: () => Ze.value,
1250
+ deniedMessage: "当前用户无权保存角色",
1251
+ createRecord: () => Jt(q.value, L.value),
1252
+ validateRecord: Xt,
1253
+ save: (e, t) => t === "edit" && z.value?.id ? b.crud.update(z.value.id, e) : b.crud.insert(e),
1254
+ onSaved: ({ record: e }) => {
1255
+ Bt(e), N.value += 1, ut();
1256
+ }
1257
+ });
1258
+ }
1259
+ async function Lt(e) {
1260
+ await v({
1261
+ loading: W,
1262
+ source: "role-management",
1263
+ record: () => e?.id ? e : void 0,
1264
+ canExecute: (e) => b.can("delete") === !0 && e.systemManaged !== !0,
1265
+ deniedMessage: "当前用户无权删除角色",
1266
+ confirm: (e) => ce({
1267
+ title: "删除角色",
1268
+ content: `确认删除角色「${vn(e)}」?`,
1269
+ okText: "删除",
1270
+ danger: !0
1271
+ }),
1272
+ execute: (e) => b.crud.delete(String(e.id), { version: e.version }),
1273
+ onExecuted: (e, t) => {
1274
+ R.value === String(t.id) && (R.value = void 0, z.value = void 0, q.value = Kt(L.value), B.value = !1, V.value = "view", H.value = !1, U.value = !1, K.value += 1), N.value += 1, ut();
1275
+ }
1276
+ });
1277
+ }
1278
+ async function Rt(e) {
1279
+ await v({
1280
+ loading: W,
1281
+ source: "role-management",
1282
+ record: () => e?.id ? e : void 0,
1283
+ canExecute: (e) => b.can(gn(e)) === !0 && e.systemManaged !== !0,
1284
+ deniedMessage: "当前用户无权变更角色启停状态",
1285
+ execute: (e) => e.enabled === !1 ? b.crud.enable(String(e.id), { version: e.version }) : b.crud.disable(String(e.id), { version: e.version }),
1286
+ onExecuted: async (e, t) => {
1287
+ R.value === String(t.id) && Bt(await b.crud.view(String(t.id))), N.value += 1, ut();
1288
+ }
1289
+ });
1290
+ }
1291
+ function $() {
1292
+ return !W.value;
1293
+ }
1294
+ function zt(e, t) {
1295
+ return K.value === t && R.value === e;
1296
+ }
1297
+ function Bt(e, t = "view") {
1298
+ z.value = e, R.value = e.id, q.value = qt(e), V.value = t === "edit" && e.systemManaged !== !0 ? "edit" : "view", B.value = !0, H.value = !1, U.value = !1, K.value += 1;
1299
+ }
1300
+ async function Vt() {
1301
+ let e = Ht();
1302
+ if (!e) return;
1303
+ L.value = Ut(e);
1304
+ let t = Ne(e);
1305
+ if (t) {
1306
+ Gt(t);
1307
+ return;
1308
+ }
1309
+ await jt({ id: e.recordId }, "view");
1310
+ }
1311
+ function Ht() {
1312
+ let e = a.recordId, t = a.scopeKind;
1313
+ if (!(!e || !t || t !== "platform" && !a.scopeId)) return {
1314
+ recordId: e,
1315
+ scopeKind: t,
1316
+ ...t === "platform" ? {} : { scopeId: a.scopeId }
1317
+ };
1318
+ }
1319
+ function Ut(e) {
1320
+ if (e.scopeKind === "platform") return {
1321
+ kind: "platform",
1322
+ key: "platform",
1323
+ title: "平台角色"
1324
+ };
1325
+ let t = e.scopeId, n = e.scopeKind === "organization" ? `机构:${t}` : `租户:${t}`;
1326
+ return {
1327
+ kind: e.scopeKind,
1328
+ id: t,
1329
+ key: `${e.scopeKind}:${t}`,
1330
+ title: n,
1331
+ ...e.scopeKind === "tenant" ? { tenant: {
1332
+ id: t,
1333
+ title: t,
1334
+ alias: t
1335
+ } } : {}
1336
+ };
1337
+ }
1338
+ function Wt(e) {
1339
+ let t = L.value;
1340
+ return !t || e.ownerScopeType !== t.kind ? !1 : t.kind === "platform" || e.ownerScopeId === t.id;
1341
+ }
1342
+ function Gt(e) {
1343
+ L.value = e.scope, z.value = e.selectedRole, R.value = e.selectedRole.id, q.value = e.draft, V.value = e.mode, B.value = !0, H.value = !1, U.value = !1, K.value += 1;
1344
+ }
1345
+ function Kt(e) {
1346
+ return {
1347
+ tenantId: Yt(e),
1348
+ ownerScopeType: e?.kind,
1349
+ ownerScopeId: e?.kind === "platform" ? void 0 : e?.id,
1350
+ assignmentType: "employment",
1351
+ roleKind: "standard",
1352
+ sharePolicy: rn(),
1353
+ enabled: !0,
1354
+ sortOrder: 100
1355
+ };
1356
+ }
1357
+ function qt(e) {
1358
+ return { ...e };
1359
+ }
1360
+ function Jt(e, t) {
1361
+ let n = Qt(e.roleKind), r = nn(e.sharePolicy, t.kind), i = y(e, {
1362
+ title: e.title?.trim(),
1363
+ assignmentType: Zt(e.assignmentType, n),
1364
+ roleKind: n,
1365
+ memberRoleIds: e.memberRoleIds?.trim() || void 0,
1366
+ tenantId: Yt(t),
1367
+ ownerScopeType: t.kind,
1368
+ ownerScopeId: t.kind === "platform" ? void 0 : t.id,
1369
+ ownerScopeKey: void 0,
1370
+ sharePolicy: r,
1371
+ description: e.description?.trim() || void 0,
1372
+ enabled: e.enabled !== !1,
1373
+ sortOrder: an(e.sortOrder)
1374
+ });
1375
+ return n !== "group" && (i.memberRoleIds = void 0), i;
1376
+ }
1377
+ function Yt(e) {
1378
+ return e?.kind === "platform" ? void 0 : e?.tenant?.id ?? e?.id;
1379
+ }
1380
+ function Xt(e) {
1381
+ for (let n of [
1382
+ "title",
1383
+ "assignmentType",
1384
+ "roleKind",
1385
+ "ownerScopeType",
1386
+ "sharePolicy"
1387
+ ]) {
1388
+ let r = t(n, {
1389
+ fields: J.value,
1390
+ fallback: rt.value
1391
+ });
1392
+ if (r.visible && r.required && !e[n]) return `请填写${r.label}`;
1393
+ }
1394
+ if (e.ownerScopeType !== "platform" && !e.ownerScopeId) return "请选择归属对象";
1395
+ if (!on(e.ownerScopeType).some((t) => t.value === e.sharePolicy)) return "请选择当前归属范围可用的公开策略";
1396
+ }
1397
+ function Zt(e, t) {
1398
+ return t === "group" || t === "dataGrant" ? "employment" : e === "account" ? "account" : "employment";
1399
+ }
1400
+ function Qt(e) {
1401
+ return e === "group" || e === "dataGrant" || e === "system" ? e : "standard";
1402
+ }
1403
+ function $t(e) {
1404
+ return e === "group" || e === "dataGrant";
1405
+ }
1406
+ function en(e) {
1407
+ return $t(e) ? [{
1408
+ label: "任职角色",
1409
+ value: "employment"
1410
+ }] : [{
1411
+ label: "账号角色",
1412
+ value: "account"
1413
+ }, {
1414
+ label: "任职角色",
1415
+ value: "employment"
1416
+ }];
1417
+ }
1418
+ function tn(e) {
1419
+ let t = [{
1420
+ label: "标准角色",
1421
+ value: "standard"
1422
+ }, {
1423
+ label: "系统角色",
1424
+ value: "system"
1425
+ }];
1426
+ return e === "account" ? t : [
1427
+ t[0],
1428
+ {
1429
+ label: "角色组",
1430
+ value: "group"
1431
+ },
1432
+ {
1433
+ label: "数据授权角色",
1434
+ value: "dataGrant"
1435
+ },
1436
+ t[1]
1437
+ ];
1438
+ }
1439
+ function nn(e, t) {
1440
+ return on(t).map((e) => e.value).includes(e ?? "") ? e : rn();
1441
+ }
1442
+ function rn() {
1443
+ return "private";
1444
+ }
1445
+ function an(e) {
1446
+ if (typeof e == "number") return Number.isFinite(e) ? e : 100;
1447
+ let t = Number(String(e ?? "").trim());
1448
+ return Number.isFinite(t) ? t : 100;
1449
+ }
1450
+ function on(e) {
1451
+ return e === "platform" ? [{
1452
+ label: "私有",
1453
+ value: "private"
1454
+ }, {
1455
+ label: "全局公开",
1456
+ value: "platform"
1457
+ }] : e === "organization" ? [{
1458
+ label: "私有",
1459
+ value: "private"
1460
+ }, {
1461
+ label: "本级及下级",
1462
+ value: "ownerAndChildren"
1463
+ }] : [{
1464
+ label: "私有",
1465
+ value: "private"
1466
+ }, {
1467
+ label: "租户公开",
1468
+ value: "tenant"
1469
+ }];
1470
+ }
1471
+ function sn(e) {
1472
+ return e === "account" ? "账号角色" : "任职角色";
1473
+ }
1474
+ function cn(e) {
1475
+ return {
1476
+ standard: "标准角色",
1477
+ group: "角色组",
1478
+ dataGrant: "数据授权角色",
1479
+ system: "系统角色"
1480
+ }[e ?? "standard"];
1481
+ }
1482
+ function ln(e) {
1483
+ return {
1484
+ private: "私有",
1485
+ ownerAndChildren: "本级及下级",
1486
+ tenant: "租户公开",
1487
+ platform: "全局公开"
1488
+ }[e ?? "private"];
1489
+ }
1490
+ function un(e) {
1491
+ return e === !0 ? "是" : "否";
1492
+ }
1493
+ function dn(e, t, n) {
1494
+ let r = e[`${t}Title`];
1495
+ return typeof r == "string" && r.trim() ? r : n;
1496
+ }
1497
+ function fn(e) {
1498
+ return !!e?.id && (e?.assignmentType === "account" || e?.assignmentType === "employment");
1499
+ }
1500
+ function pn(e) {
1501
+ return !!e?.id && e?.roleKind !== "group";
1502
+ }
1503
+ function mn(e) {
1504
+ return e?.assignmentType === "employment" ? "employmentRoleGrants" : "accountRoleGrants";
1505
+ }
1506
+ function hn(e) {
1507
+ return e?.assignmentType === "employment" ? "绑定任职" : "绑定用户";
1508
+ }
1509
+ function gn(e) {
1510
+ return e?.enabled === !1 ? "enable" : "disable";
1511
+ }
1512
+ function _n(e) {
1513
+ return e?.enabled === !1 ? "启用" : "停用";
1514
+ }
1515
+ function vn(e) {
1516
+ return String(e?.title ?? e?.id ?? "角色");
1517
+ }
1518
+ function yn(e) {
1519
+ return String(e?.title ?? e?.alias ?? e?.id ?? "未命名租户");
1520
+ }
1521
+ function bn(e) {
1522
+ return String(e?.title ?? e?.code ?? e?.id ?? "未命名机构");
1523
+ }
1524
+ function xn(e, t) {
1525
+ if (e === "ownerScopeType") return Cn(q.value.ownerScopeType);
1526
+ if (e === "ownerScopeId") return L.value?.title ?? String(t ?? "");
1527
+ if (e === "memberRoleIds") return Sn(t);
1528
+ }
1529
+ function Sn(e) {
1530
+ let t = En(e);
1531
+ return t.length === 0 ? "-" : t.map((e) => {
1532
+ let t = Y.value.find((t) => t.id === e);
1533
+ return t ? vn(t) : e;
1534
+ }).join(",");
1535
+ }
1536
+ function Cn(e) {
1537
+ return e === "platform" ? "平台" : e === "organization" ? "机构" : "租户";
1538
+ }
1539
+ function wn(e) {
1540
+ return {
1541
+ title: yn(e),
1542
+ secondary: e.alias ?? e.id,
1543
+ muted: e.enabled === !1
1544
+ };
1545
+ }
1546
+ function Tn(e) {
1547
+ return {
1548
+ title: e.title ?? e.code ?? e.id ?? "未命名机构",
1549
+ secondary: e.code ?? e.id,
1550
+ muted: e.enabled === !1
1551
+ };
1552
+ }
1553
+ function En(e) {
1554
+ return Array.isArray(e) ? e.map((e) => String(e).trim()).filter(Boolean) : typeof e == "string" ? e.split(",").map((e) => e.trim()).filter(Boolean) : [];
1555
+ }
1556
+ return (t, n) => (j(), E("section", {
1557
+ ref_key: "pageRoot",
1558
+ ref: S,
1559
+ class: xe(["role-management-page", {
1560
+ "role-management-page-platform": !We.value,
1561
+ "role-management-page--task": X.value && !Z.value
1562
+ }])
1563
+ }, [
1564
+ !X.value || Z.value ? (j(), w(F(x), {
1565
+ key: 0,
1566
+ class: "role-scope-panel",
1567
+ title: "租户",
1568
+ "refresh-title": "刷新租户列表",
1569
+ "search-keyword": he.value,
1570
+ "search-placeholder": "搜索租户名称、alias 或 ID",
1571
+ searchable: He.value,
1572
+ onRefresh: n[2] ||= (e) => He.value ? ye.value += 1 : gt(),
1573
+ "onUpdate:searchKeyword": n[3] ||= (e) => he.value = e
1574
+ }, {
1575
+ default: I(() => [Re.value ? (j(), E("button", {
1576
+ key: 0,
1577
+ class: "role-platform-scope",
1578
+ type: "button",
1579
+ onClick: _t
1580
+ }, [k(F(s), {
1581
+ title: "平台角色",
1582
+ secondary: "全局范围",
1583
+ clickable: "",
1584
+ selected: L.value?.kind === "platform"
1585
+ }, null, 8, ["selected"])])) : T("v-if", !0), !He.value && Q.value ? (j(), E("button", {
1586
+ key: 1,
1587
+ class: "role-tenant-root-scope",
1588
+ type: "button",
1589
+ onClick: n[0] ||= (e) => vt(Q.value)
1590
+ }, [k(F(s), {
1591
+ title: yn(Q.value),
1592
+ secondary: "当前租户",
1593
+ clickable: "",
1594
+ selected: P.value?.id === Q.value.id
1595
+ }, null, 8, ["title", "selected"])])) : (j(), w(F(re), {
1596
+ key: 2,
1597
+ context: Fe.value,
1598
+ "selected-id": P.value?.id,
1599
+ "reload-key": ye.value,
1600
+ keyword: he.value,
1601
+ "empty-description": "暂无租户",
1602
+ "loading-tip": "加载租户列表",
1603
+ "fallback-title": "未命名租户",
1604
+ "item-of": wn,
1605
+ onLoaded: ht,
1606
+ onSelect: n[1] ||= (e) => vt(e)
1607
+ }, null, 8, [
1608
+ "context",
1609
+ "selected-id",
1610
+ "reload-key",
1611
+ "keyword"
1612
+ ]))]),
1613
+ _: 1
1614
+ }, 8, ["search-keyword", "searchable"])) : T("v-if", !0),
1615
+ (!X.value || Z.value) && We.value ? (j(), w(F(x), {
1616
+ key: 1,
1617
+ class: "role-scope-panel",
1618
+ title: "归属范围",
1619
+ "refresh-title": "刷新机构树",
1620
+ "search-keyword": ve.value,
1621
+ "search-placeholder": "搜索机构名称、编码或 ID",
1622
+ searchable: !!P.value,
1623
+ onRefresh: n[6] ||= (e) => A.value += 1,
1624
+ "onUpdate:searchKeyword": n[7] ||= (e) => ve.value = e
1625
+ }, {
1626
+ default: I(() => [L.value?.kind === "platform" ? (j(), w(F(r), {
1627
+ key: 0,
1628
+ description: "平台角色不需要选择租户内范围"
1629
+ })) : P.value ? (j(), E(be, { key: 2 }, [D("button", {
1630
+ class: "role-tenant-root-scope",
1631
+ type: "button",
1632
+ onClick: n[4] ||= (e) => yt()
1633
+ }, [k(F(s), {
1634
+ title: yn(P.value),
1635
+ secondary: "租户本级角色",
1636
+ clickable: "",
1637
+ selected: L.value?.kind === "tenant" && L.value.id === P.value.id
1638
+ }, null, 8, ["title", "selected"])]), k(F(oe), {
1639
+ context: Ue.value,
1640
+ "selected-id": L.value?.kind === "organization" ? L.value.id : void 0,
1641
+ "reload-key": A.value,
1642
+ keyword: ve.value,
1643
+ "search-mode": "none",
1644
+ "search-trigger": "external",
1645
+ "empty-description": "当前租户暂无机构",
1646
+ "loading-tip": "加载机构树",
1647
+ "fallback-title": "未命名机构",
1648
+ "item-of": Tn,
1649
+ onSelect: n[5] ||= (e) => bt(e)
1650
+ }, null, 8, [
1651
+ "context",
1652
+ "selected-id",
1653
+ "reload-key",
1654
+ "keyword"
1655
+ ])], 64)) : (j(), w(F(r), {
1656
+ key: 1,
1657
+ description: "请选择左侧租户"
1658
+ }))]),
1659
+ _: 1
1660
+ }, 8, ["search-keyword", "searchable"])) : T("v-if", !0),
1661
+ !X.value || Z.value ? (j(), w(F(e), {
1662
+ key: 2,
1663
+ class: "role-list-panel",
1664
+ context: Ge.value,
1665
+ title: L.value ? `角色列表 - ${L.value.title}` : "角色列表",
1666
+ columns: Ke.value,
1667
+ "standard-crud-actions": "",
1668
+ "standard-crud-row-actions": "",
1669
+ "extra-row-actions-of": St,
1670
+ "row-action-state-of": Ct,
1671
+ "selected-key": R.value,
1672
+ "reload-key": N.value,
1673
+ ready: qe.value,
1674
+ "quick-search-placeholder": "搜索角色名称或说明",
1675
+ "empty-description": "当前范围暂无角色",
1676
+ "waiting-description": "请选择角色归属范围",
1677
+ onAction: xt,
1678
+ onRowAction: wt,
1679
+ onRowDblclick: Dt,
1680
+ onSelect: n[8] ||= (e) => R.value = String(e.id ?? "")
1681
+ }, null, 8, [
1682
+ "context",
1683
+ "title",
1684
+ "columns",
1685
+ "selected-key",
1686
+ "reload-key",
1687
+ "ready"
1688
+ ])) : T("v-if", !0),
1689
+ Pe.value ? (j(), w(F(ee), {
1690
+ key: 3,
1691
+ open: B.value,
1692
+ title: Je.value,
1693
+ container: S.value,
1694
+ subtitle: Ye.value,
1695
+ "close-on-outside": V.value === "view",
1696
+ promotion: F(nt),
1697
+ onClose: Mt
1698
+ }, {
1699
+ status: I(() => [V.value === "view" && z.value ? (j(), w(F(p), {
1700
+ key: 0,
1701
+ enabled: z.value.enabled !== !1,
1702
+ disabled: W.value || !Qe.value,
1703
+ loading: W.value,
1704
+ "show-label": !1,
1705
+ onChange: n[9] ||= (e) => Rt(z.value)
1706
+ }, null, 8, [
1707
+ "enabled",
1708
+ "disabled",
1709
+ "loading"
1710
+ ])) : T("v-if", !0)]),
1711
+ operation: I(() => [k(F(i), {
1712
+ context: Ge.value,
1713
+ actions: et.value,
1714
+ onAction: Pt
1715
+ }, null, 8, ["context", "actions"])]),
1716
+ default: I(() => [H.value ? (j(), w(F(le), {
1717
+ key: 0,
1718
+ class: "role-detail-state",
1719
+ tip: "加载角色详情"
1720
+ })) : U.value ? (j(), E("div", Be, [k(F(te), {
1721
+ title: "详情加载失败",
1722
+ message: "无法加载角色详情,请重试"
1723
+ }), k(F(f), {
1724
+ type: "primary",
1725
+ "icon-name": "reload",
1726
+ onClick: Ft
1727
+ }, {
1728
+ default: I(() => [...n[15] ||= [O("重试", -1)]]),
1729
+ _: 1
1730
+ })])) : V.value === "view" || V.value === "create" || z.value ? (j(), E(be, { key: 2 }, [V.value === "view" ? (j(), w(F(c), {
1731
+ key: 0,
1732
+ record: q.value,
1733
+ "field-names": ot.value,
1734
+ fields: J.value,
1735
+ fallback: rt.value,
1736
+ "display-of": xn
1737
+ }, null, 8, [
1738
+ "record",
1739
+ "field-names",
1740
+ "fields",
1741
+ "fallback"
1742
+ ])) : (j(), E("form", {
1743
+ key: 1,
1744
+ class: "role-form",
1745
+ onSubmit: Te(It, ["prevent"])
1746
+ }, [
1747
+ D("label", null, [n[16] ||= D("span", { class: "role-form-label" }, "当前范围", -1), k(F(de), {
1748
+ value: L.value?.title ?? "-",
1749
+ disabled: ""
1750
+ }, null, 8, ["value"])]),
1751
+ k(F(g), {
1752
+ record: q.value,
1753
+ "field-names": it,
1754
+ fields: J.value,
1755
+ fallback: rt.value,
1756
+ disabled: Xe.value,
1757
+ "disabled-of": pt,
1758
+ "onUpdate:field": mt
1759
+ }, null, 8, [
1760
+ "record",
1761
+ "fields",
1762
+ "fallback",
1763
+ "disabled"
1764
+ ]),
1765
+ q.value.roleKind === "group" ? (j(), w(ze, {
1766
+ key: 0,
1767
+ value: q.value.memberRoleIds,
1768
+ candidates: Y.value,
1769
+ "current-role-id": z.value?.id,
1770
+ disabled: Xe.value || z.value?.systemManaged === !0,
1771
+ "onUpdate:value": n[10] ||= (e) => mt("memberRoleIds", e)
1772
+ }, null, 8, [
1773
+ "value",
1774
+ "candidates",
1775
+ "current-role-id",
1776
+ "disabled"
1777
+ ])) : T("v-if", !0),
1778
+ k(F(g), {
1779
+ record: q.value,
1780
+ "field-names": at,
1781
+ fields: J.value,
1782
+ fallback: rt.value,
1783
+ disabled: Xe.value,
1784
+ "disabled-of": pt,
1785
+ "onUpdate:field": mt
1786
+ }, null, 8, [
1787
+ "record",
1788
+ "fields",
1789
+ "fallback",
1790
+ "disabled"
1791
+ ])
1792
+ ], 32)), V.value === "create" ? T("v-if", !0) : (j(), w(F(_), {
1793
+ key: 2,
1794
+ record: q.value,
1795
+ "show-sort-order": ""
1796
+ }, null, 8, ["record"]))], 64)) : T("v-if", !0)]),
1797
+ _: 1
1798
+ }, 8, [
1799
+ "open",
1800
+ "title",
1801
+ "container",
1802
+ "subtitle",
1803
+ "close-on-outside",
1804
+ "promotion"
1805
+ ])) : (j(), w(F(o), {
1806
+ key: 4,
1807
+ title: Je.value,
1808
+ subtitle: Ye.value
1809
+ }, {
1810
+ status: I(() => [V.value === "view" && z.value ? (j(), w(F(p), {
1811
+ key: 0,
1812
+ enabled: z.value.enabled !== !1,
1813
+ disabled: W.value || !Qe.value,
1814
+ loading: W.value,
1815
+ "show-label": !1,
1816
+ onChange: n[11] ||= (e) => Rt(z.value)
1817
+ }, null, 8, [
1818
+ "enabled",
1819
+ "disabled",
1820
+ "loading"
1821
+ ])) : T("v-if", !0)]),
1822
+ operation: I(() => [k(F(i), {
1823
+ context: F(b),
1824
+ actions: tt.value,
1825
+ "record-id": z.value?.id,
1826
+ onAction: Pt
1827
+ }, null, 8, [
1828
+ "context",
1829
+ "actions",
1830
+ "record-id"
1831
+ ])]),
1832
+ default: I(() => [H.value ? (j(), w(F(le), {
1833
+ key: 0,
1834
+ class: "role-detail-state",
1835
+ tip: "加载角色详情"
1836
+ })) : U.value ? (j(), E("div", Ve, [k(F(te), {
1837
+ title: "详情加载失败",
1838
+ message: "无法加载角色详情,请重试"
1839
+ }), k(F(f), {
1840
+ type: "primary",
1841
+ "icon-name": "reload",
1842
+ onClick: Ft
1843
+ }, {
1844
+ default: I(() => [...n[17] ||= [O("重试", -1)]]),
1845
+ _: 1
1846
+ })])) : V.value === "view" || z.value ? (j(), E(be, { key: 2 }, [V.value === "view" ? (j(), w(F(c), {
1847
+ key: 0,
1848
+ record: q.value,
1849
+ "field-names": ot.value,
1850
+ fields: J.value,
1851
+ fallback: rt.value,
1852
+ "display-of": xn
1853
+ }, null, 8, [
1854
+ "record",
1855
+ "field-names",
1856
+ "fields",
1857
+ "fallback"
1858
+ ])) : (j(), E("form", {
1859
+ key: 1,
1860
+ class: "role-form",
1861
+ onSubmit: Te(It, ["prevent"])
1862
+ }, [
1863
+ D("label", null, [n[18] ||= D("span", { class: "role-form-label" }, "当前范围", -1), k(F(de), {
1864
+ value: L.value?.title ?? "-",
1865
+ disabled: ""
1866
+ }, null, 8, ["value"])]),
1867
+ k(F(g), {
1868
+ record: q.value,
1869
+ "field-names": it,
1870
+ fields: J.value,
1871
+ fallback: rt.value,
1872
+ disabled: Xe.value,
1873
+ "disabled-of": pt,
1874
+ "onUpdate:field": mt
1875
+ }, null, 8, [
1876
+ "record",
1877
+ "fields",
1878
+ "fallback",
1879
+ "disabled"
1880
+ ]),
1881
+ q.value.roleKind === "group" ? (j(), w(ze, {
1882
+ key: 0,
1883
+ value: q.value.memberRoleIds,
1884
+ candidates: Y.value,
1885
+ "current-role-id": z.value?.id,
1886
+ disabled: Xe.value || z.value?.systemManaged === !0,
1887
+ "onUpdate:value": n[12] ||= (e) => mt("memberRoleIds", e)
1888
+ }, null, 8, [
1889
+ "value",
1890
+ "candidates",
1891
+ "current-role-id",
1892
+ "disabled"
1893
+ ])) : T("v-if", !0),
1894
+ k(F(g), {
1895
+ record: q.value,
1896
+ "field-names": at,
1897
+ fields: J.value,
1898
+ fallback: rt.value,
1899
+ disabled: Xe.value,
1900
+ "disabled-of": pt,
1901
+ "onUpdate:field": mt
1902
+ }, null, 8, [
1903
+ "record",
1904
+ "fields",
1905
+ "fallback",
1906
+ "disabled"
1907
+ ])
1908
+ ], 32)), k(F(_), {
1909
+ record: q.value,
1910
+ "show-sort-order": ""
1911
+ }, null, 8, ["record"])], 64)) : T("v-if", !0)]),
1912
+ _: 1
1913
+ }, 8, ["title", "subtitle"])),
1914
+ k(Ae, {
1915
+ open: Ee.value,
1916
+ context: F(b),
1917
+ role: G.value,
1918
+ container: S.value,
1919
+ onClose: kt,
1920
+ onSaved: n[13] ||= (e) => N.value += 1
1921
+ }, null, 8, [
1922
+ "open",
1923
+ "context",
1924
+ "role",
1925
+ "container"
1926
+ ]),
1927
+ k(Le, {
1928
+ open: De.value,
1929
+ context: F(b),
1930
+ role: G.value,
1931
+ container: S.value,
1932
+ onClose: kt,
1933
+ onSaved: n[14] ||= (e) => N.value += 1
1934
+ }, null, 8, [
1935
+ "open",
1936
+ "context",
1937
+ "role",
1938
+ "container"
1939
+ ]),
1940
+ ke.value && Oe.value?.id ? (j(), w(ge, {
1941
+ key: 5,
1942
+ "role-id": Oe.value.id,
1943
+ container: S.value,
1944
+ drawer: "",
1945
+ onClose: Et
1946
+ }, null, 8, ["role-id", "container"])) : T("v-if", !0)
1947
+ ], 2));
1948
+ }
1949
+ }), Q = /* @__PURE__ */ se({ default: () => Ue }), Ue = /*#__PURE__*/ a(He, [["__scopeId", "data-v-7057f589"]]);
1950
+ //#endregion
1951
+ export { Q as n, Ue as t };