@hkyhy/marsun-components-core 0.1.44 → 0.1.45

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 (39) hide show
  1. package/dist/components/AgentHub/Report/Detail/ReportArchiveModal/index.d.ts +13 -0
  2. package/dist/components/AgentHub/Report/Detail/ReportArchiveModal/index.js +81 -0
  3. package/dist/components/AgentHub/Report/Detail/ReportArchiveModal/index.js.map +1 -0
  4. package/dist/components/AgentHub/Report/Detail/ReportArchiveModal/style.module.scss.js +11 -0
  5. package/dist/components/AgentHub/Report/Detail/ReportArchiveModal/style.module.scss.js.map +1 -0
  6. package/dist/components/AgentHub/Report/Detail/ReportExportLayout/index.d.ts +33 -0
  7. package/dist/components/AgentHub/Report/Detail/ReportExportLayout/index.js +113 -0
  8. package/dist/components/AgentHub/Report/Detail/ReportExportLayout/index.js.map +1 -0
  9. package/dist/components/AgentHub/Report/Detail/ReportExportLayout/style.module.scss.js +7 -0
  10. package/dist/components/AgentHub/Report/Detail/ReportExportLayout/style.module.scss.js.map +1 -0
  11. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.d.ts +15 -0
  12. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.js +105 -0
  13. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.js.map +1 -0
  14. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/style.module.scss.js +11 -0
  15. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/style.module.scss.js.map +1 -0
  16. package/dist/components/AgentHub/Report/Detail/ReportVersionList/index.d.ts +14 -0
  17. package/dist/components/AgentHub/Report/Detail/ReportVersionList/index.js +91 -0
  18. package/dist/components/AgentHub/Report/Detail/ReportVersionList/index.js.map +1 -0
  19. package/dist/components/AgentHub/Report/Detail/ReportVersionList/style.module.scss.js +14 -0
  20. package/dist/components/AgentHub/Report/Detail/ReportVersionList/style.module.scss.js.map +1 -0
  21. package/dist/components/AgentHub/Report/Detail/ReportWorkspace/index.d.ts +13 -0
  22. package/dist/components/AgentHub/Report/Detail/ReportWorkspace/index.js +39 -0
  23. package/dist/components/AgentHub/Report/Detail/ReportWorkspace/index.js.map +1 -0
  24. package/dist/components/AgentHub/Report/Detail/ReportWorkspace/style.module.scss.js +9 -0
  25. package/dist/components/AgentHub/Report/Detail/ReportWorkspace/style.module.scss.js.map +1 -0
  26. package/dist/components/AgentHub/Report/Detail/index.d.ts +10 -0
  27. package/dist/components/AgentHub/Report/index.d.ts +1 -0
  28. package/dist/components/AgentHub/Report/types.d.ts +24 -0
  29. package/dist/components/PermissionBindPanel/PermissionBindPanel.d.ts +20 -0
  30. package/dist/components/PermissionBindPanel/PermissionBindPanel.js +302 -0
  31. package/dist/components/PermissionBindPanel/PermissionBindPanel.js.map +1 -0
  32. package/dist/components/PermissionBindPanel/index.d.ts +3 -0
  33. package/dist/components/PermissionBindPanel/types.d.ts +29 -0
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.js +292 -280
  36. package/dist/index.js.map +1 -1
  37. package/dist/marsun-components-core.css +1 -1
  38. package/dist/styles/global.css +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ const r = {
2
+ "marsun-report-workspace": "_marsun-report-workspace_1ah71_1",
3
+ "marsun-report-workspace-list": "_marsun-report-workspace-list_1ah71_11",
4
+ "marsun-report-workspace-detail": "_marsun-report-workspace-detail_1ah71_12"
5
+ };
6
+ export {
7
+ r as default
8
+ };
9
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -2,3 +2,13 @@ export { default as ReportMetaStrip } from './ReportMetaStrip';
2
2
  export type { ReportMetaItem, ReportMetaStripProps, ReportMetaTone } from './ReportMetaStrip';
3
3
  export { default as ReportTemplate } from './ReportTemplate';
4
4
  export type { ReportTemplateProps } from './ReportTemplate';
5
+ export { default as ReportVersionList } from './ReportVersionList';
6
+ export type { ReportVersionListProps } from './ReportVersionList';
7
+ export { default as ReportHtmlPreview } from './ReportHtmlPreview';
8
+ export type { ReportHtmlPreviewProps } from './ReportHtmlPreview';
9
+ export { default as ReportArchiveModal } from './ReportArchiveModal';
10
+ export type { ReportArchiveModalProps } from './ReportArchiveModal';
11
+ export { default as ReportExportLayout } from './ReportExportLayout';
12
+ export type { ReportExportLayoutProps } from './ReportExportLayout';
13
+ export { default as ReportWorkspace } from './ReportWorkspace';
14
+ export type { ReportWorkspaceProps } from './ReportWorkspace';
@@ -1 +1,2 @@
1
1
  export * from './Detail';
2
+ export type { ReportExportApi, ReportVersionItem } from './types';
@@ -0,0 +1,24 @@
1
+ export type ReportVersionItem = {
2
+ id: string;
3
+ /** ISO 或可解析时间串 */
4
+ at: string;
5
+ by?: string;
6
+ };
7
+ export type ReportExportApi = {
8
+ fetchVersions: (reportId: string) => Promise<ReportVersionItem[]>;
9
+ fetchPreviewHtml: (reportId: string, snapshot?: unknown) => Promise<{
10
+ html: string;
11
+ }>;
12
+ archive: (payload: {
13
+ reportId: string;
14
+ archivedBy: string;
15
+ snapshot?: unknown;
16
+ eventSource?: string;
17
+ eventLabel?: string;
18
+ }) => Promise<void>;
19
+ downloadDocx?: (reportId: string, snapshot?: unknown) => Promise<void>;
20
+ fetchDetail?: (reportId: string) => Promise<{
21
+ report: unknown;
22
+ meta?: unknown;
23
+ }>;
24
+ };
@@ -0,0 +1,20 @@
1
+ import { CSSProperties } from 'react';
2
+ import { PermissionBindCatalog, PermissionBindItem } from './types';
3
+ export type PermissionBindPanelProps = {
4
+ /** 三栏目录;缺省时按 code 前缀扁平分组 */
5
+ catalog?: PermissionBindCatalog | null;
6
+ permissions: PermissionBindItem[];
7
+ /** 已选 permissionId */
8
+ value: string[];
9
+ onChange: (nextIds: string[]) => void;
10
+ /** SYSTEM 入口码;未勾时禁用 requiresSystemEntry 模块 */
11
+ systemEntryCodes?: string[];
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ height?: number;
15
+ };
16
+ /**
17
+ * 角色绑权三栏信息架构:左页面模块 · 主区按业务功能点分类分组勾选。
18
+ * defaultGranted 叶子勾选且不可取消。
19
+ */
20
+ export default function PermissionBindPanel({ catalog, permissions, value, onChange, systemEntryCodes, className, style, height, }: PermissionBindPanelProps): import("react").JSX.Element;
@@ -0,0 +1,302 @@
1
+ import { jsx as m, jsxs as y, Fragment as R } from "react/jsx-runtime";
2
+ import { Empty as j, Row as A, Col as q, Typography as I, Checkbox as B } from "antd";
3
+ import { useMemo as w, useEffect as G, useState as F } from "react";
4
+ function H(d, c) {
5
+ const r = /* @__PURE__ */ new Set(), l = [], o = [];
6
+ for (const t of d.modules) {
7
+ const s = [], g = [], a = [];
8
+ for (const k of t.categories) {
9
+ const p = [];
10
+ for (const u of k.leaves) {
11
+ r.add(u.code);
12
+ const f = c.get(u.code), b = !!u.defaultGranted;
13
+ p.push({
14
+ code: u.code,
15
+ label: u.label,
16
+ defaultGranted: b,
17
+ perm: f
18
+ }), f && (g.push(f), b && (l.push(f.id), a.push(f.id)));
19
+ }
20
+ p.length && s.push({ key: k.key, label: k.label, leaves: p });
21
+ }
22
+ s.length && o.push({
23
+ key: t.key,
24
+ label: t.label,
25
+ requiresSystemEntry: !!t.requiresSystemEntry,
26
+ categories: s,
27
+ perms: g,
28
+ lockedPermIds: a
29
+ });
30
+ }
31
+ return { modules: o, usedCodes: r, lockedIds: l };
32
+ }
33
+ function U(d) {
34
+ const c = /* @__PURE__ */ new Map();
35
+ for (const r of d) {
36
+ const l = r.code.includes(":") ? r.code.split(":")[0] : "_other", o = c.get(l) || [];
37
+ o.push(r), c.set(l, o);
38
+ }
39
+ return [...c.entries()].map(([r, l]) => {
40
+ const o = [...l].sort((t, s) => t.code.localeCompare(s.code));
41
+ return {
42
+ key: r,
43
+ label: r,
44
+ requiresSystemEntry: o.every((t) => t.layer === "BUSINESS"),
45
+ categories: [
46
+ {
47
+ key: "all",
48
+ label: "功能点",
49
+ leaves: o.map((t) => ({
50
+ code: t.code,
51
+ label: t.name || t.code,
52
+ defaultGranted: !1,
53
+ perm: t
54
+ }))
55
+ }
56
+ ],
57
+ perms: o,
58
+ lockedPermIds: []
59
+ };
60
+ });
61
+ }
62
+ function D(d, c, r) {
63
+ const l = c.filter((t) => !r.has(t.code));
64
+ if (!l.length) return d;
65
+ const o = [...l].sort((t, s) => t.code.localeCompare(s.code));
66
+ return [
67
+ ...d,
68
+ {
69
+ key: "uncategorized",
70
+ label: "未分类",
71
+ requiresSystemEntry: !0,
72
+ categories: [
73
+ {
74
+ key: "orphan",
75
+ label: "未归入目录的权限点",
76
+ leaves: o.map((t) => ({
77
+ code: t.code,
78
+ label: t.name || t.code,
79
+ defaultGranted: !1,
80
+ perm: t
81
+ }))
82
+ }
83
+ ],
84
+ perms: o,
85
+ lockedPermIds: []
86
+ }
87
+ ];
88
+ }
89
+ function _({
90
+ catalog: d,
91
+ permissions: c,
92
+ value: r,
93
+ onChange: l,
94
+ systemEntryCodes: o = [],
95
+ className: t,
96
+ style: s,
97
+ height: g = 420
98
+ }) {
99
+ const a = w(() => c.filter((e) => e.layer !== "RESOURCE"), [c]), k = w(() => {
100
+ const e = /* @__PURE__ */ new Map();
101
+ for (const n of a) e.set(n.code, n);
102
+ return e;
103
+ }, [a]), { modules: p, lockedIds: u } = w(() => {
104
+ var e;
105
+ if ((e = d == null ? void 0 : d.modules) != null && e.length) {
106
+ const n = H(d, k);
107
+ return {
108
+ modules: D(n.modules, a, n.usedCodes),
109
+ lockedIds: n.lockedIds
110
+ };
111
+ }
112
+ return { modules: U(a), lockedIds: [] };
113
+ }, [d, k, a]), f = w(() => new Set(u), [u]), b = w(() => {
114
+ if (!o.length) return !0;
115
+ const e = a.filter((n) => o.includes(n.code)).map((n) => n.id);
116
+ return e.length ? e.some((n) => r.includes(n)) : !0;
117
+ }, [o, a, r]), M = (e) => b ? [.../* @__PURE__ */ new Set([...e, ...u])] : e;
118
+ G(() => {
119
+ if (!b || !u.length) return;
120
+ u.filter((n) => !r.includes(n)).length && l(M(r));
121
+ }, [u.join("|"), b]);
122
+ const [E, v] = F("");
123
+ G(() => {
124
+ if (!p.length) {
125
+ v("");
126
+ return;
127
+ }
128
+ p.some((e) => e.key === E) || v(p[0].key);
129
+ }, [p, E]);
130
+ const i = p.find((e) => e.key === E) || p[0], P = (e) => !!(e != null && e.requiresSystemEntry && !b), C = (e) => {
131
+ l(M(e));
132
+ }, L = (e, n) => {
133
+ b && f.has(e) || C(n ? [...r, e] : r.filter((x) => x !== e));
134
+ }, z = (e, n) => {
135
+ const x = e.perms.filter((h) => !f.has(h.id)).map((h) => h.id);
136
+ if (n) C([...r, ...x]);
137
+ else {
138
+ const h = new Set(x);
139
+ C(r.filter((S) => !h.has(S)));
140
+ }
141
+ };
142
+ if (!p.length)
143
+ return /* @__PURE__ */ m(j, { description: "暂无权限点", className: t, style: s });
144
+ const T = P(i);
145
+ return /* @__PURE__ */ y(
146
+ A,
147
+ {
148
+ gutter: 0,
149
+ className: t,
150
+ style: {
151
+ border: "1px solid var(--ant-color-border, #d9d9d9)",
152
+ borderRadius: 8,
153
+ minHeight: g,
154
+ overflow: "hidden",
155
+ ...s
156
+ },
157
+ children: [
158
+ /* @__PURE__ */ m(
159
+ q,
160
+ {
161
+ span: 7,
162
+ style: {
163
+ borderRight: "1px solid var(--ant-color-border, #d9d9d9)",
164
+ background: "var(--ant-color-fill-quaternary, #fafafa)",
165
+ maxHeight: g,
166
+ overflow: "auto"
167
+ },
168
+ children: p.map((e) => {
169
+ const n = e.perms.filter((S) => r.includes(S.id)).length, x = e.perms.length, h = e.key === ((i == null ? void 0 : i.key) || "");
170
+ return /* @__PURE__ */ y(
171
+ "div",
172
+ {
173
+ role: "button",
174
+ tabIndex: 0,
175
+ onClick: () => v(e.key),
176
+ onKeyDown: (S) => {
177
+ (S.key === "Enter" || S.key === " ") && v(e.key);
178
+ },
179
+ style: {
180
+ padding: "10px 12px",
181
+ cursor: "pointer",
182
+ background: h ? "var(--ant-color-primary-bg, #e6f4ff)" : "transparent",
183
+ fontWeight: h ? 600 : 400,
184
+ borderLeft: h ? "3px solid var(--ant-color-primary, #1677ff)" : "3px solid transparent",
185
+ opacity: P(e) && n === 0 ? 0.75 : 1
186
+ },
187
+ children: [
188
+ /* @__PURE__ */ m("div", { children: e.label }),
189
+ /* @__PURE__ */ y(I.Text, { type: "secondary", style: { fontSize: 12 }, children: [
190
+ n,
191
+ "/",
192
+ x
193
+ ] })
194
+ ]
195
+ },
196
+ e.key
197
+ );
198
+ })
199
+ }
200
+ ),
201
+ /* @__PURE__ */ m(q, { span: 17, style: { padding: 16, maxHeight: g, overflow: "auto" }, children: i ? /* @__PURE__ */ y(R, { children: [
202
+ /* @__PURE__ */ y(
203
+ "div",
204
+ {
205
+ style: {
206
+ display: "flex",
207
+ justifyContent: "space-between",
208
+ marginBottom: 12,
209
+ alignItems: "center"
210
+ },
211
+ children: [
212
+ /* @__PURE__ */ m(I.Text, { strong: !0, children: i.label }),
213
+ /* @__PURE__ */ m(
214
+ B,
215
+ {
216
+ disabled: T || i.perms.every((e) => f.has(e.id)),
217
+ checked: i.perms.length > 0 && i.perms.every((e) => r.includes(e.id)),
218
+ indeterminate: i.perms.some((e) => r.includes(e.id)) && !i.perms.every((e) => r.includes(e.id)),
219
+ onChange: (e) => z(i, e.target.checked),
220
+ children: "全选本模块"
221
+ }
222
+ )
223
+ ]
224
+ }
225
+ ),
226
+ i.categories.map((e) => /* @__PURE__ */ m(
227
+ O,
228
+ {
229
+ category: e,
230
+ value: r,
231
+ moduleDisabled: T,
232
+ lockedIdSet: f,
233
+ onToggle: L
234
+ },
235
+ e.key
236
+ )),
237
+ T ? /* @__PURE__ */ m(I.Text, { type: "warning", style: { display: "block", marginTop: 12 }, children: "请先勾选 SYSTEM 入口权,再勾选业务权限。基线权限仍保持勾选。" }) : null
238
+ ] }) : null })
239
+ ]
240
+ }
241
+ );
242
+ }
243
+ function O({
244
+ category: d,
245
+ value: c,
246
+ moduleDisabled: r,
247
+ lockedIdSet: l,
248
+ onToggle: o
249
+ }) {
250
+ return /* @__PURE__ */ y("div", { style: { marginBottom: 16 }, children: [
251
+ /* @__PURE__ */ m(
252
+ I.Text,
253
+ {
254
+ type: "secondary",
255
+ style: { display: "block", marginBottom: 8, fontWeight: 500 },
256
+ children: d.label
257
+ }
258
+ ),
259
+ /* @__PURE__ */ m(
260
+ "div",
261
+ {
262
+ style: {
263
+ display: "grid",
264
+ gridTemplateColumns: "repeat(2, minmax(0, 1fr))",
265
+ gap: "8px 16px"
266
+ },
267
+ children: d.leaves.map((t) => {
268
+ const s = t.perm;
269
+ if (!s)
270
+ return /* @__PURE__ */ y(B, { disabled: !0, children: [
271
+ t.label,
272
+ /* @__PURE__ */ y(I.Text, { type: "secondary", style: { marginLeft: 6, fontSize: 12 }, children: [
273
+ t.code,
274
+ "(未注册)"
275
+ ] })
276
+ ] }, t.code);
277
+ const g = t.defaultGranted || l.has(s.id);
278
+ return /* @__PURE__ */ y(
279
+ B,
280
+ {
281
+ disabled: g || r,
282
+ checked: c.includes(s.id),
283
+ onChange: (a) => o(s.id, a.target.checked),
284
+ children: [
285
+ t.label || s.name,
286
+ /* @__PURE__ */ y(I.Text, { type: "secondary", style: { marginLeft: 6, fontSize: 12 }, children: [
287
+ s.code,
288
+ t.defaultGranted ? " · 基线" : ""
289
+ ] })
290
+ ]
291
+ },
292
+ s.id
293
+ );
294
+ })
295
+ }
296
+ )
297
+ ] });
298
+ }
299
+ export {
300
+ _ as default
301
+ };
302
+ //# sourceMappingURL=PermissionBindPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionBindPanel.js","sources":["../../../src/components/PermissionBindPanel/PermissionBindPanel.tsx"],"sourcesContent":["import { Checkbox, Col, Empty, Row, Typography } from 'antd';\nimport { useEffect, useMemo, useState, type CSSProperties } from 'react';\nimport type { PermissionBindCatalog, PermissionBindItem } from './types';\n\nexport type PermissionBindPanelProps = {\n /** 三栏目录;缺省时按 code 前缀扁平分组 */\n catalog?: PermissionBindCatalog | null;\n permissions: PermissionBindItem[];\n /** 已选 permissionId */\n value: string[];\n onChange: (nextIds: string[]) => void;\n /** SYSTEM 入口码;未勾时禁用 requiresSystemEntry 模块 */\n systemEntryCodes?: string[];\n className?: string;\n style?: CSSProperties;\n height?: number;\n};\n\ntype ResolvedLeaf = {\n code: string;\n label: string;\n defaultGranted: boolean;\n perm?: PermissionBindItem;\n};\n\ntype ResolvedCategory = {\n key: string;\n label: string;\n leaves: ResolvedLeaf[];\n};\n\ntype ResolvedModule = {\n key: string;\n label: string;\n requiresSystemEntry: boolean;\n categories: ResolvedCategory[];\n perms: PermissionBindItem[];\n lockedPermIds: string[];\n};\n\nfunction buildFromCatalog(\n catalog: PermissionBindCatalog,\n byCode: Map<string, PermissionBindItem>,\n): { modules: ResolvedModule[]; usedCodes: Set<string>; lockedIds: string[] } {\n const usedCodes = new Set<string>();\n const lockedIds: string[] = [];\n const modules: ResolvedModule[] = [];\n\n for (const mod of catalog.modules) {\n const categories: ResolvedCategory[] = [];\n const perms: PermissionBindItem[] = [];\n const modLocked: string[] = [];\n for (const cat of mod.categories) {\n const leaves: ResolvedLeaf[] = [];\n for (const leaf of cat.leaves) {\n usedCodes.add(leaf.code);\n const perm = byCode.get(leaf.code);\n const defaultGranted = Boolean(leaf.defaultGranted);\n leaves.push({\n code: leaf.code,\n label: leaf.label,\n defaultGranted,\n perm,\n });\n if (perm) {\n perms.push(perm);\n if (defaultGranted) {\n lockedIds.push(perm.id);\n modLocked.push(perm.id);\n }\n }\n }\n if (leaves.length) {\n categories.push({ key: cat.key, label: cat.label, leaves });\n }\n }\n if (categories.length) {\n modules.push({\n key: mod.key,\n label: mod.label,\n requiresSystemEntry: Boolean(mod.requiresSystemEntry),\n categories,\n perms,\n lockedPermIds: modLocked,\n });\n }\n }\n\n return { modules, usedCodes, lockedIds };\n}\n\nfunction buildPrefixFallback(permissions: PermissionBindItem[]): ResolvedModule[] {\n const byPrefix = new Map<string, PermissionBindItem[]>();\n for (const p of permissions) {\n const prefix = p.code.includes(':') ? p.code.split(':')[0]! : '_other';\n const arr = byPrefix.get(prefix) || [];\n arr.push(p);\n byPrefix.set(prefix, arr);\n }\n return [...byPrefix.entries()].map(([key, perms]) => {\n const sorted = [...perms].sort((a, b) => a.code.localeCompare(b.code));\n return {\n key,\n label: key,\n requiresSystemEntry: sorted.every((p) => p.layer === 'BUSINESS'),\n categories: [\n {\n key: 'all',\n label: '功能点',\n leaves: sorted.map((p) => ({\n code: p.code,\n label: p.name || p.code,\n defaultGranted: false,\n perm: p,\n })),\n },\n ],\n perms: sorted,\n lockedPermIds: [],\n };\n });\n}\n\nfunction appendUncategorized(\n modules: ResolvedModule[],\n permissions: PermissionBindItem[],\n usedCodes: Set<string>,\n): ResolvedModule[] {\n const orphans = permissions.filter((p) => !usedCodes.has(p.code));\n if (!orphans.length) return modules;\n const sorted = [...orphans].sort((a, b) => a.code.localeCompare(b.code));\n return [\n ...modules,\n {\n key: 'uncategorized',\n label: '未分类',\n requiresSystemEntry: true,\n categories: [\n {\n key: 'orphan',\n label: '未归入目录的权限点',\n leaves: sorted.map((p) => ({\n code: p.code,\n label: p.name || p.code,\n defaultGranted: false,\n perm: p,\n })),\n },\n ],\n perms: sorted,\n lockedPermIds: [],\n },\n ];\n}\n\n/**\n * 角色绑权三栏信息架构:左页面模块 · 主区按业务功能点分类分组勾选。\n * defaultGranted 叶子勾选且不可取消。\n */\nexport default function PermissionBindPanel({\n catalog,\n permissions,\n value,\n onChange,\n systemEntryCodes = [],\n className,\n style,\n height = 420,\n}: PermissionBindPanelProps) {\n const bindable = useMemo(() => permissions.filter((p) => p.layer !== 'RESOURCE'), [permissions]);\n\n const byCode = useMemo(() => {\n const m = new Map<string, PermissionBindItem>();\n for (const p of bindable) m.set(p.code, p);\n return m;\n }, [bindable]);\n\n const { modules, lockedIds } = useMemo(() => {\n if (catalog?.modules?.length) {\n const built = buildFromCatalog(catalog, byCode);\n return {\n modules: appendUncategorized(built.modules, bindable, built.usedCodes),\n lockedIds: built.lockedIds,\n };\n }\n return { modules: buildPrefixFallback(bindable), lockedIds: [] as string[] };\n }, [catalog, byCode, bindable]);\n\n const lockedIdSet = useMemo(() => new Set(lockedIds), [lockedIds]);\n\n const systemEntryOpen = useMemo(() => {\n if (!systemEntryCodes.length) return true;\n const entryIds = bindable.filter((p) => systemEntryCodes.includes(p.code)).map((p) => p.id);\n if (!entryIds.length) return true;\n return entryIds.some((id) => value.includes(id));\n }, [systemEntryCodes, bindable, value]);\n\n /** SYSTEM 入口打开时才强制基线;关掉入口时允许 strip 业务码 */\n const mergeLocked = (ids: string[]) =>\n systemEntryOpen ? [...new Set([...ids, ...lockedIds])] : ids;\n\n useEffect(() => {\n if (!systemEntryOpen || !lockedIds.length) return;\n const missing = lockedIds.filter((id) => !value.includes(id));\n if (missing.length) onChange(mergeLocked(value));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [lockedIds.join('|'), systemEntryOpen]);\n\n const [activeModule, setActiveModule] = useState('');\n\n useEffect(() => {\n if (!modules.length) {\n setActiveModule('');\n return;\n }\n if (!modules.some((m) => m.key === activeModule)) {\n setActiveModule(modules[0]!.key);\n }\n }, [modules, activeModule]);\n\n const active = modules.find((m) => m.key === activeModule) || modules[0];\n\n const moduleLocked = (mod: ResolvedModule | undefined) =>\n Boolean(mod?.requiresSystemEntry && !systemEntryOpen);\n\n const setIds = (next: string[]) => {\n onChange(mergeLocked(next));\n };\n\n const toggleId = (id: string, on: boolean) => {\n if (systemEntryOpen && lockedIdSet.has(id)) return;\n if (on) setIds([...value, id]);\n else setIds(value.filter((x) => x !== id));\n };\n\n const toggleAllInModule = (mod: ResolvedModule, on: boolean) => {\n const optionalIds = mod.perms.filter((p) => !lockedIdSet.has(p.id)).map((p) => p.id);\n if (on) setIds([...value, ...optionalIds]);\n else {\n const drop = new Set(optionalIds);\n setIds(value.filter((id) => !drop.has(id)));\n }\n };\n\n if (!modules.length) {\n return <Empty description=\"暂无权限点\" className={className} style={style} />;\n }\n\n const locked = moduleLocked(active);\n\n return (\n <Row\n gutter={0}\n className={className}\n style={{\n border: '1px solid var(--ant-color-border, #d9d9d9)',\n borderRadius: 8,\n minHeight: height,\n overflow: 'hidden',\n ...style,\n }}\n >\n <Col\n span={7}\n style={{\n borderRight: '1px solid var(--ant-color-border, #d9d9d9)',\n background: 'var(--ant-color-fill-quaternary, #fafafa)',\n maxHeight: height,\n overflow: 'auto',\n }}\n >\n {modules.map((m) => {\n const selected = m.perms.filter((p) => value.includes(p.id)).length;\n const total = m.perms.length;\n const isActive = m.key === (active?.key || '');\n return (\n <div\n key={m.key}\n role=\"button\"\n tabIndex={0}\n onClick={() => setActiveModule(m.key)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') setActiveModule(m.key);\n }}\n style={{\n padding: '10px 12px',\n cursor: 'pointer',\n background: isActive ? 'var(--ant-color-primary-bg, #e6f4ff)' : 'transparent',\n fontWeight: isActive ? 600 : 400,\n borderLeft: isActive\n ? '3px solid var(--ant-color-primary, #1677ff)'\n : '3px solid transparent',\n opacity: moduleLocked(m) && selected === 0 ? 0.75 : 1,\n }}\n >\n <div>{m.label}</div>\n <Typography.Text type=\"secondary\" style={{ fontSize: 12 }}>\n {selected}/{total}\n </Typography.Text>\n </div>\n );\n })}\n </Col>\n <Col span={17} style={{ padding: 16, maxHeight: height, overflow: 'auto' }}>\n {active ? (\n <>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: 12,\n alignItems: 'center',\n }}\n >\n <Typography.Text strong>{active.label}</Typography.Text>\n <Checkbox\n disabled={locked || active.perms.every((p) => lockedIdSet.has(p.id))}\n checked={active.perms.length > 0 && active.perms.every((p) => value.includes(p.id))}\n indeterminate={\n active.perms.some((p) => value.includes(p.id)) &&\n !active.perms.every((p) => value.includes(p.id))\n }\n onChange={(e) => toggleAllInModule(active, e.target.checked)}\n >\n 全选本模块\n </Checkbox>\n </div>\n\n {active.categories.map((cat) => (\n <CategoryBlock\n key={cat.key}\n category={cat}\n value={value}\n moduleDisabled={locked}\n lockedIdSet={lockedIdSet}\n onToggle={toggleId}\n />\n ))}\n\n {locked ? (\n <Typography.Text type=\"warning\" style={{ display: 'block', marginTop: 12 }}>\n 请先勾选 SYSTEM 入口权,再勾选业务权限。基线权限仍保持勾选。\n </Typography.Text>\n ) : null}\n </>\n ) : null}\n </Col>\n </Row>\n );\n}\n\nfunction CategoryBlock({\n category,\n value,\n moduleDisabled,\n lockedIdSet,\n onToggle,\n}: {\n category: ResolvedCategory;\n value: string[];\n moduleDisabled: boolean;\n lockedIdSet: Set<string>;\n onToggle: (id: string, on: boolean) => void;\n}) {\n return (\n <div style={{ marginBottom: 16 }}>\n <Typography.Text\n type=\"secondary\"\n style={{ display: 'block', marginBottom: 8, fontWeight: 500 }}\n >\n {category.label}\n </Typography.Text>\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n gap: '8px 16px',\n }}\n >\n {category.leaves.map((leaf) => {\n const perm = leaf.perm;\n if (!perm) {\n return (\n <Checkbox key={leaf.code} disabled>\n {leaf.label}\n <Typography.Text type=\"secondary\" style={{ marginLeft: 6, fontSize: 12 }}>\n {leaf.code}(未注册)\n </Typography.Text>\n </Checkbox>\n );\n }\n const isBaseline = leaf.defaultGranted || lockedIdSet.has(perm.id);\n return (\n <Checkbox\n key={perm.id}\n disabled={isBaseline || moduleDisabled}\n checked={value.includes(perm.id)}\n onChange={(e) => onToggle(perm.id, e.target.checked)}\n >\n {leaf.label || perm.name}\n <Typography.Text type=\"secondary\" style={{ marginLeft: 6, fontSize: 12 }}>\n {perm.code}\n {leaf.defaultGranted ? ' · 基线' : ''}\n </Typography.Text>\n </Checkbox>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["buildFromCatalog","catalog","byCode","usedCodes","lockedIds","modules","mod","categories","perms","modLocked","cat","leaves","leaf","perm","defaultGranted","buildPrefixFallback","permissions","byPrefix","p","prefix","arr","key","sorted","a","b","appendUncategorized","orphans","PermissionBindPanel","value","onChange","systemEntryCodes","className","style","height","bindable","useMemo","m","_a","built","lockedIdSet","systemEntryOpen","entryIds","id","mergeLocked","ids","useEffect","activeModule","setActiveModule","useState","active","moduleLocked","setIds","next","toggleId","on","toggleAllInModule","optionalIds","drop","jsx","Empty","locked","jsxs","Row","Col","selected","total","isActive","e","Typography","Fragment","Checkbox","CategoryBlock","category","moduleDisabled","onToggle","isBaseline"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { default as PermissionBindPanel } from './PermissionBindPanel';
2
+ export type { PermissionBindPanelProps } from './PermissionBindPanel';
3
+ export type { PermissionBindCatalog, PermissionBindCategory, PermissionBindItem, PermissionBindLeaf, PermissionBindModule, } from './types';
@@ -0,0 +1,29 @@
1
+ /** 绑权三栏目录:页面模块 → 业务功能点分类 → 实际业务功能点 */
2
+ export type PermissionBindLeaf = {
3
+ code: string;
4
+ label: string;
5
+ /** 全员基线:勾选且不可取消 */
6
+ defaultGranted?: boolean;
7
+ };
8
+ export type PermissionBindCategory = {
9
+ key: string;
10
+ label: string;
11
+ leaves: PermissionBindLeaf[];
12
+ };
13
+ export type PermissionBindModule = {
14
+ key: string;
15
+ label: string;
16
+ /** 未勾 SYSTEM 入口时是否禁用本模块业务勾选 */
17
+ requiresSystemEntry?: boolean;
18
+ categories: PermissionBindCategory[];
19
+ };
20
+ export type PermissionBindCatalog = {
21
+ systemAppCode: string;
22
+ modules: PermissionBindModule[];
23
+ };
24
+ export type PermissionBindItem = {
25
+ id: string;
26
+ code: string;
27
+ name: string;
28
+ layer?: string | null;
29
+ };
package/dist/index.d.ts CHANGED
@@ -33,6 +33,7 @@ export * from './components/InteractiveBlock';
33
33
  export * from './components/Layout';
34
34
  export * from './components/Modal';
35
35
  export * from './components/Permissions';
36
+ export * from './components/PermissionBindPanel';
36
37
  export * from './components/OrgTree';
37
38
  export * from './components/StateBar';
38
39
  export * from './components/Stat';