@donglegeyu/company-ui 1.2.38 → 1.2.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/shared-components/SvgIcon/index.js +10 -1
- package/dist/cjs/template-components/AdminLayoutTemplate/index.d.ts +1 -1
- package/dist/cjs/template-components/AdminLayoutTemplate/index.js +11 -14
- package/dist/cjs/template-components/AdminLayoutTemplate/index.scss +2 -0
- package/dist/cjs/template-components/CompanySidebar/FirstSidebar.d.ts +2 -1
- package/dist/cjs/template-components/CompanySidebar/FirstSidebar.js +2 -1
- package/dist/cjs/template-components/CompanySidebar/default-logo.d.ts +2 -0
- package/dist/cjs/template-components/CompanySidebar/default-logo.js +29 -0
- package/dist/cjs/template-components/CompanySidebar/index.js +38 -4
- package/dist/cjs/template-components/CompanySidebar/menuIconMap.js +11 -2
- package/dist/cjs/template-components/DetailPageTemplate/index.scss +1 -0
- package/dist/cjs/template-components/FormPageTemplate/index.scss +1 -0
- package/dist/cjs/template-components/StatisticsListPage/index.scss +3 -0
- package/dist/es/shared-components/SvgIcon/index.js +12 -0
- package/dist/es/template-components/AdminLayoutTemplate/index.d.ts +1 -1
- package/dist/es/template-components/AdminLayoutTemplate/index.js +13 -1
- package/dist/es/template-components/AdminLayoutTemplate/index.scss +2 -0
- package/dist/es/template-components/CompanySidebar/FirstSidebar.d.ts +2 -1
- package/dist/es/template-components/CompanySidebar/FirstSidebar.js +2 -1
- package/dist/es/template-components/CompanySidebar/default-logo.d.ts +2 -0
- package/dist/es/template-components/CompanySidebar/default-logo.js +2 -0
- package/dist/es/template-components/CompanySidebar/index.js +46 -8
- package/dist/es/template-components/CompanySidebar/menuIconMap.js +8 -1
- package/dist/es/template-components/DetailPageTemplate/index.scss +1 -0
- package/dist/es/template-components/FormPageTemplate/index.scss +1 -0
- package/dist/es/template-components/StatisticsListPage/index.scss +3 -0
- package/package.json +3 -2
|
@@ -24,6 +24,7 @@ __export(SvgIcon_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(SvgIcon_exports);
|
|
25
25
|
var import_icons = require("./icons");
|
|
26
26
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
27
|
+
var FALLBACK_ICON = "folder-open";
|
|
27
28
|
function toCssSize(size, fallback) {
|
|
28
29
|
if (size === void 0 || size === null)
|
|
29
30
|
return fallback;
|
|
@@ -40,7 +41,15 @@ function SvgIcon({
|
|
|
40
41
|
onClick
|
|
41
42
|
}) {
|
|
42
43
|
const key = name ?? href;
|
|
43
|
-
|
|
44
|
+
let icon = key ? (0, import_icons.getIconDefinition)(key) : void 0;
|
|
45
|
+
if (!icon && name) {
|
|
46
|
+
if (process.env.NODE_ENV !== "production") {
|
|
47
|
+
console.warn(
|
|
48
|
+
`[SvgIcon] 未注册的图标 name "${name}",已回退为 "${FALLBACK_ICON}"。请使用内置图标集(/icon-library 精选)中的键。`
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
icon = (0, import_icons.getIconDefinition)(FALLBACK_ICON);
|
|
52
|
+
}
|
|
44
53
|
const dimension = toCssSize(size, 16);
|
|
45
54
|
const mergedStyle = {
|
|
46
55
|
width: dimension,
|
|
@@ -20,7 +20,7 @@ export interface AdminLayoutTemplateProps {
|
|
|
20
20
|
className?: string;
|
|
21
21
|
/** 根节点自定义 style(父容器无确定高度时可传 style={{ height: '100vh' }}) */
|
|
22
22
|
style?: CSSProperties;
|
|
23
|
-
/** 顶部 Logo
|
|
23
|
+
/** 顶部 Logo 图片地址;缺省使用内置默认 Logo(随包分发,传 "" 可回退为品牌名首字母) */
|
|
24
24
|
logo?: string;
|
|
25
25
|
/** 品牌名称(无 Logo 时显示首字母) */
|
|
26
26
|
brandName?: string;
|
|
@@ -269,14 +269,7 @@ function AdminLayoutTemplate({
|
|
|
269
269
|
setInternalActiveTabKey(key);
|
|
270
270
|
onActiveTabChange == null ? void 0 : onActiveTabChange(key, existing ?? { key, label, path, closable });
|
|
271
271
|
},
|
|
272
|
-
[
|
|
273
|
-
isTabsControlled,
|
|
274
|
-
tabs,
|
|
275
|
-
internalTabs,
|
|
276
|
-
isTabActiveControlled,
|
|
277
|
-
onTabsChange,
|
|
278
|
-
onActiveTabChange
|
|
279
|
-
]
|
|
272
|
+
[isTabsControlled, tabs, internalTabs, isTabActiveControlled, onTabsChange, onActiveTabChange]
|
|
280
273
|
);
|
|
281
274
|
const handleTabChange = (0, import_react.useCallback)(
|
|
282
275
|
(key, tab) => {
|
|
@@ -355,6 +348,12 @@ function AdminLayoutTemplate({
|
|
|
355
348
|
(menu) => {
|
|
356
349
|
var _a2;
|
|
357
350
|
setActiveKey(menu.key);
|
|
351
|
+
const parentModule = businessMenus.find((m) => findMenuByKey(m.children ?? [], menu.key));
|
|
352
|
+
if (parentModule && parentModule.key !== activeFirstMenu) {
|
|
353
|
+
setActiveFirstMenu(parentModule.key);
|
|
354
|
+
setExpandedKeys(collectParentKeys(parentModule.children ?? []));
|
|
355
|
+
onActiveFirstMenuChange == null ? void 0 : onActiveFirstMenuChange(parentModule.key);
|
|
356
|
+
}
|
|
358
357
|
if ((_a2 = menu.children) == null ? void 0 : _a2.length)
|
|
359
358
|
return;
|
|
360
359
|
if (systemMenuKeys.has(menu.key)) {
|
|
@@ -367,19 +366,17 @@ function AdminLayoutTemplate({
|
|
|
367
366
|
return;
|
|
368
367
|
}
|
|
369
368
|
const page = pages == null ? void 0 : pages.find((p) => p.key === menu.key);
|
|
370
|
-
openTab(
|
|
371
|
-
menu.key,
|
|
372
|
-
(page == null ? void 0 : page.label) ?? menu.label,
|
|
373
|
-
(page == null ? void 0 : page.path) ?? menu.path,
|
|
374
|
-
page == null ? void 0 : page.closable
|
|
375
|
-
);
|
|
369
|
+
openTab(menu.key, (page == null ? void 0 : page.label) ?? menu.label, (page == null ? void 0 : page.path) ?? menu.path, page == null ? void 0 : page.closable);
|
|
376
370
|
onMenuOpen == null ? void 0 : onMenuOpen(menu);
|
|
377
371
|
},
|
|
378
372
|
[
|
|
373
|
+
businessMenus,
|
|
374
|
+
activeFirstMenu,
|
|
379
375
|
systemMenuKeys,
|
|
380
376
|
homeTab,
|
|
381
377
|
isTabActiveControlled,
|
|
382
378
|
onActiveTabChange,
|
|
379
|
+
onActiveFirstMenuChange,
|
|
383
380
|
onMenuOpen,
|
|
384
381
|
pages,
|
|
385
382
|
openTab
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
display: flex;
|
|
20
20
|
flex-direction: column;
|
|
21
21
|
overflow: hidden;
|
|
22
|
+
|
|
22
23
|
/* 主区灰底与 SmartListTemplate 等业务模板的 --color-bg-layout 对齐,
|
|
23
24
|
页签栏与内容未充满处不露出白底 */
|
|
24
25
|
background: var(--color-bg-layout, #f5f5f5);
|
|
@@ -31,6 +32,7 @@
|
|
|
31
32
|
/* 间距契约:内容区只做滚动容器,禁止加 padding/margin/background(业务模板自带)。
|
|
32
33
|
纵向 flex 让 SmartListTemplate(flex-grow:1 + align-self:stretch)充满剩余高度 */
|
|
33
34
|
.admin-layout-content {
|
|
35
|
+
position: relative; /* 为 FormPageTemplate/DetailPageTemplate 等 absolute+inset:0 模板提供定位上下文,防止逃逸到全屏祖先 */
|
|
34
36
|
flex: 1;
|
|
35
37
|
min-height: 0;
|
|
36
38
|
overflow: auto;
|
|
@@ -12,6 +12,7 @@ export interface FirstSidebarProps {
|
|
|
12
12
|
businessMenus: SidebarMenuItem[];
|
|
13
13
|
customNavMenus: SidebarMenuItem[];
|
|
14
14
|
activeKey: string;
|
|
15
|
+
activeFirstMenu: string;
|
|
15
16
|
visibleMenuCount?: number;
|
|
16
17
|
domainPopoverOpen: boolean;
|
|
17
18
|
adminPopoverOpen: boolean;
|
|
@@ -25,4 +26,4 @@ export interface FirstSidebarProps {
|
|
|
25
26
|
onThemeSettings?: () => void;
|
|
26
27
|
onLogout?: () => void;
|
|
27
28
|
}
|
|
28
|
-
export default function FirstSidebar({ domains, currentDomainId, userInfo, logo, brandName, firstMenus, systemBottomMenus, businessMenus, customNavMenus, activeKey, visibleMenuCount, domainPopoverOpen, adminPopoverOpen, onDomainPopoverOpenChange, onAdminPopoverOpenChange, onDomainChange, onMenuClick, onBusinessMenuEnter, onBusinessMenuLeave, onOpenMore, onThemeSettings, onLogout, }: FirstSidebarProps): import("react").JSX.Element;
|
|
29
|
+
export default function FirstSidebar({ domains, currentDomainId, userInfo, logo, brandName, firstMenus, systemBottomMenus, businessMenus, customNavMenus, activeKey, activeFirstMenu, visibleMenuCount, domainPopoverOpen, adminPopoverOpen, onDomainPopoverOpenChange, onAdminPopoverOpenChange, onDomainChange, onMenuClick, onBusinessMenuEnter, onBusinessMenuLeave, onOpenMore, onThemeSettings, onLogout, }: FirstSidebarProps): import("react").JSX.Element;
|
|
@@ -37,6 +37,7 @@ function FirstSidebar({
|
|
|
37
37
|
businessMenus,
|
|
38
38
|
customNavMenus,
|
|
39
39
|
activeKey,
|
|
40
|
+
activeFirstMenu,
|
|
40
41
|
visibleMenuCount = 6,
|
|
41
42
|
domainPopoverOpen,
|
|
42
43
|
adminPopoverOpen,
|
|
@@ -108,7 +109,7 @@ function FirstSidebar({
|
|
|
108
109
|
displayMenus.map((menu) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
109
110
|
"div",
|
|
110
111
|
{
|
|
111
|
-
className: `business-menu-item${activeKey === menu.key ? " active" : ""}`,
|
|
112
|
+
className: `business-menu-item${activeFirstMenu === menu.key || activeKey === menu.key ? " active" : ""}`,
|
|
112
113
|
onClick: () => onMenuClick(menu),
|
|
113
114
|
onMouseEnter: () => onBusinessMenuEnter(menu),
|
|
114
115
|
onMouseLeave: onBusinessMenuLeave,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/template-components/CompanySidebar/default-logo.ts
|
|
20
|
+
var default_logo_exports = {};
|
|
21
|
+
__export(default_logo_exports, {
|
|
22
|
+
DEFAULT_LOGO: () => DEFAULT_LOGO
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(default_logo_exports);
|
|
25
|
+
var DEFAULT_LOGO = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My4zMDgiIGhlaWdodD0iMjIiIGZpbGw9Im5vbmUiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHJlY3Qgd2lkdGg9IjUzLjMwOCIgaGVpZ2h0PSIyMiIgcng9IjAiLz48L2NsaXBQYXRoPjwvZGVmcz48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0uNDQ4IDIwLjUwMXYtMi42M2gxLjgyNXYtLjkxM2guNTc0di45MTNoMS44MjV2MS44NDhxLjAyMS44MDUtLjY3OC43ODJIMi44NDV2MS41aC0uNTc0di0xLjV6bS41MzQtLjM5MmgxLjI5di0xLjg0OEguOTgzem0zLjE1Ni0xLjg0OEgyLjg0NXYxLjg0OGguOTg1cS4zMDcuMDAxLjMwNi0uMzd2LTEuNDc4ek03LjMxMyAyMS44MjZ2LTQuNjNoNC4zMjZ2My45MTNxLjAyMS43MzgtLjY5OC43MTd6bS41My0uMzdoMi44OTJxLjM5LjAyMy4zNjktLjM0N3YtMy41NDRoLTMuMjZ6bS4yOS0zLjAyM3YtLjM3aDIuNjY2di4zN0g5LjY5di43NGgxLjAwNXYuMzQ3SDkuNjl2MS4wNDRoMS4xN3YuMzQ3SDguMDd2LS4zNDdoMS4wODdWMTkuNTJoLS45NDR2LS4zNDdoLjk0NHYtLjc0em0yLjA3IDEuOTU3YTQgNCAwIDAgMC0uMjA1LS42OTZoLjM2OHEuMjA1LjM3LjI0NS42OTZ6TTE0LjExMiAxOS4yNjJhMTEgMTEgMCAwIDEtLjE2NS0xLjVoLjMyOHEuMDIuNzgyLjE4NSAxLjV6bS0uMTI0IDIuNjk2di0uNDc4cS4zMjktLjU4Ny40My0xLjIxOC4xMDQtLjYxLjEwNC0xLjg2OHYtMS4zOTFoLjQ1djEuMDQzcS4yMDUtLjAyMS40MzEtLjE1M3YuNDM1YTEuOCAxLjggMCAwIDEtLjQzLjEzcTAgMS42NzYuNDUgMi41MjN2LjQ3OHEtLjQxLS40MTMtLjYzNi0xLjE5NS0uMjAyIDEuMDYyLS43OTkgMS42OTRtMS40MzYtMS4yODN2LS4zOTJxLjQzLS4zMjYuNjk4LS43NGExLjggMS44IDAgMCAwLS41NTQtLjI4MXYtLjM0OHEuNDEuMDY1LjcxOS4yNjJ2LjA2NWEyLjUgMi41IDAgMCAwIC4yMDYtLjQ3OCAzIDMgMCAwIDAtLjU1NC0uMzA0di0uMTUzcS0uMjI1LjM0OS0uNTk2LjY3NHYtLjM3cS40OTItLjYzLjYxNi0xLjY1MmguNDNsLS4wODIuNDEyaC43Nzl2LjM0N2wtLjAyMS4zMDVoLjM2OWExIDEgMCAwIDAgLjAyLS4xOTZ2LS44N2guNDN2MS4wNjZoLjMwN3YtLjc4M2guMzA3di43ODNoLjE4NnYuMzdoLS43NzlxLjEwMyAxLjIxNS44ODIgMS44Njh2LjM5M3EtLjkwMi0uNTY2LTEuMTA4LTEuNDE0LS4yMDQuOTEzLTEuMDI2IDEuNDE0di0uMzlxLjY3Ni0uNjU0Ljc4LTEuODdoLS40NXEtLjI0NSAxLjUyLTEuNTYgMi4yODJtLjAyIDEuMTUycS4wODEtLjQ1Ni4yNDUtMS4wMjFoLjM5cS0uMTg1LjYzMS0uMjI1IDEuMDIxem0uNTk1LTMuNjk1cS4yNjcuMDY2LjU1NC4yMTcuMDIyLS4xMDguMDYyLS4zNDguMDIxLS4xOTUuMDQxLS4yODJoLS40OTJhMS43IDEuNyAwIDAgMS0uMTY1LjQxM20uNTEzIDMuNzE3YTcgNyAwIDAgMC0uMTY1LTEuMDQzaC4zN3EuMTQyLjQzNC4yMDUgMS4wNDN6bS44NjEtLjAyMmE0LjQgNC40IDAgMCAwLS4yMDYtMS4wMjFoLjM2OXEuMTg0LjUyMS4yNjcgMS4wMjF6bS44ODMgMGE2IDYgMCAwIDAtLjI0NS0xLjAyMWguMzlxLjIyNS41NjYuMjY1IDEuMDIxek0yMC45MzUgMTguODQ4di0uMzdxLjgtLjQ3OC45NjMtMS40OTloLjU1NHEtLjA2LjIxNy0uMTIzLjQxM2gzLjA5N3YuMzdoLTMuMjQxcS0uMjY4LjY1MS0xLjI1IDEuMDg2bTQuMTgyIDMuMTNxLS45MjQuMTA2LS44ODEtMi4zMDVIMjEuMjJ2LS4zOWgzLjU5cS0uMDQyIDIuNDU2LjMyNyAyLjI4NC4xODUuMDIxLjE4NS0uMzdoLjM0OHEuMDIuODAyLS41NTQuNzhtLTMuMjYtMy4yODN2LS4zOTJoMy4yMTl2LjM5MnpNMjguNTc2IDIxLjgyNnYtLjM3aC4xODZxLjMwOC4wMjIuMjg2LS4yODJ2LTIuMjE4aC0uNDFxLjAyIDIuMDg2LS44NiAzLjAyM3YtLjU0M3EuMjY1LS41MjEuMzI3LTEuMDg3LjA4LS41NDIuMDgyLTEuOTE0di0uNTY1aC0uMzQ4di0uMzdoLjYzNlYxN2guNTEzdi41aC41OTV2LjM3aC0uOTIydi43MTcwMDAwMDAwMDAwMDAxaC44NHYyLjU4N3EuMDIuNjc0LS42MTYuNjUyem0xLjA2Ny0zLjY1MnYtLjMwNHEuNDczLS4zMDQuNTEzLS44OTNoLjQ5MmExIDEgMCAwIDEtLjEyNC40MTNoMi4wMXYuMzQ3aC0yLjIxNnEtLjIwNC4yNjMtLjY3NS40MzdtLjA2Mi41di0uMzI2aC4zODl2LS4zOWguNDkydi4zOWgxLjAyNnYtLjM5aC40OTJ2LjM5aC4zODl2LjMyNmgtLjM5djEuOTE0aC40NTJ2LjM0N2gtMi44OTF2LS4zNDdoLjQzdi0xLjkxNHptLS4wNDEgMy4zMDN2LS4yODJxLjU3NS0uMTk1LjcxNi0uNjA4aC40OTJxLS4yMjYuNzE3LTEuMjA4Ljg5bS45MjItMy4zMDN2LjQxM2gxLjAyNnYtLjQxM3ptMCAuNzR2LjQzNWgxLjAyNnYtLjQzNXptMCAuNzZ2LjQxMmgxLjAyNnYtLjQxMnptMS45MjggMS44MDNxLS45NjQtLjE1Mi0xLjIxMS0uODkyaC41MTNxLjE0MS40MTMuNjk4LjYwOHpNMzQuNzIgMTcuNzM5di0uNDEzaDQuNzE2di40MTNoLTIuMjE1djQuMTk1aC0uNTk1VjE3Ljc0em00LjQzIDIuNDEyYTkgOSAwIDAgMC0xLjcwMy0uOTc4di0uNDM1cS45NjUuMjgyIDEuNzAzLjc4MnpNNDEuODA5IDIxLjgyNnYtMi4yNjFoMS45MDZ2MS42MXEuMDIyLjY3My0uNjU2LjY1MXptLjQ3MS0yLjgwNHYtMS44MjZoMy40MjV2MS4wODZxLjAyMS43MzktLjcxOS43NHptLjAyIDIuNDEyaC42MzdxLjMwOC4wMi4yODYtLjMwNXYtMS4xNzRoLS45MjJ6bS40OTMtMi44MDVoMi4wM3EuMzY5LjAyMy4zNDgtLjQxMnYtLjYzMWgtMi4zNzh6bTEuNDM1IDMuMTk3di0yLjI2MWgxLjkyOHYxLjYxcS4wMjEuNjczLS42MzcuNjUxem0uNDkyLS4zOTJoLjY1N3EuMzI5LjAyLjMwNy0uMzA1di0xLjE3NGgtLjk2NHpNNDkuNjU2IDIxLjkxNFYxOS43NmgtLjQ3MXYuMjgycS4wNjIgMS4zOTItLjcyIDEuOTM0di0uNDEzcS4yODctLjM5Mi4yNjktMS4zOXYtM2guNDV2MS4xOTRoLjQzdi0xLjMyNmguNDMxdjEuMzI2aC4yNDV2LjM0N2gtMS4xMDh2LjY5N2guOTAydjIuNWgtLjQyOHptLjg0LTIuMjE4di0yLjMwNGguNzM3YTEuOCAxLjggMCAwIDAgLjEwMy0uNDEzaC41MzRxLS4wNjIuMjE3LS4xMjQuNDEzaDEuMjkxdjEuNjFxLjAyMi43MzgtLjYzNi42OTRoLS42NTdxLS4yNjYuNDM1LTEuMTQ5Ljg3aDEuMTd2LS42NTJoLjQ5MnYuNjUyaDEuMDI1di4zN2gtMS4wMjV2MS4wMmgtLjQ5MnYtMS4wMmgtMS40OTd2LS4zN2guMzA3di0uMzI3cS40MjktLjI2Mi42NTYtLjU0M3ptLjQzLTEuOTM1di41NjZoLjYxNnYtLjU2NnptMCAxLjU2NWguNTEzcS4xMDMtLjI2LjEwMy0uNjMxdi0uMDIzaC0uNjE1em0xLjM1NCAwcS4zNDguMDIyLjMyNy0uMzd2LS4yODJoLS42MTZxLjAwMS4zOTItLjA4Mi42NTJ6bS4zMjctMS41NjVoLS42MTZ2LjU2NmguNjE2eiIvPjxwYXRoIGZpbGw9IiNGMzk4MDAiIGQ9Ik0xLjM2MyA5LjI4NWMwLTEuMjEuOTkzLTIuMTk0IDIuMjEyLTIuMTk0czIuMjExLjk4NSAyLjIxMSAyLjE5NC0uOTkgMi4xOTMtMi4yMTEgMi4xOTNhMi4yMDYgMi4yMDYgMCAwIDEtMi4yMTItMi4xOTNtNS4xMDUtMi4wOEEzLjU4IDMuNTggMCAwIDAgMy41NzUgNS43NEMxLjYwNSA1LjczOSAwIDcuMzMgMCA5LjI4NXMxLjYwNCAzLjU0NiAzLjU3NSAzLjU0NmMxLjk3IDAgMy41NzUtMS41OTEgMy41NzUtMy41NDZhMi4yMDUgMi4yMDUgMCAwIDEgMi4zNy0yLjE4OGMxLjA5LjA3NiAxLjk3Ljk1IDIuMDQ5IDIuMDMuMDkgMS4yODEtLjkzNSAyLjM1MS0yLjIwNiAyLjM1MS0uMjA4IDAtLjQxNi0uMDI4LS42MTMtLjA4NWEuNjc3LjY3NyAwIDEgMC0uMzc1IDEuMzAxYy4zMjEuMDkyLjY1My4xMzcuOTg4LjEzNyAyLjAyOSAwIDMuNjY4LTEuNjgzIDMuNTcxLTMuNzE2LS4wODQtMS44MTYtMS41NzEtMy4yODYtMy40LTMuMzcycS0uMDg1LS4wMDMtLjE3LS4wMDRjLTEuMTkgMC0yLjI0NS41NzgtMi44OTYgMS40NjciLz48cGF0aCBmaWxsPSIjRjM5ODAwIiBkPSJNMy4zMzggMEMxLjg3OCAwIC42NTggMS4xODUuNjgyIDIuNjM1LjcwNyA0LjA0MiAxLjg2OCA1LjE4IDMuMjkzIDUuMThoMS43ODFjLjM3NSAwIC42OTgtLjI5Mi43MDUtLjY2NGEuNjc3LjY3NyAwIDAgMC0uNjgyLS42ODhIMy4zMjRjLS42NzUgMC0xLjI1Mi0uNTItMS4yNzctMS4xOWExLjI0IDEuMjQgMCAwIDEgMS4yNDYtMS4yODRoNi4zMmMuNjc1IDAgMS4yNS41MTkgMS4yNzcgMS4xODlhMS4yNDQgMS4yNDQgMCAwIDEtMS4yNDYgMS4yODVINy42NDZhLjcxLjcxIDAgMCAwLS42NjcuNDYzbC0uNTYgMS41MjJjLS4wMzkuMTA2LjEwMy4xODIuMTczLjA5NGwuMzQ2LS40NWEuNzEuNzEgMCAwIDEgLjU2NC0uMjc1SDkuNmMxLjQ2MiAwIDIuNjgtMS4xODUgMi42NTYtMi42MzVBMi42MDUgMi42MDUgMCAwIDAgOS42NDQgMHoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNNDMuMzg3IDkuNTdINDIuMTVjLS4wMiAwLS4wNC4wMTUtLjA0My4wMzYtLjIyNS45MDItLjQ5NyAxLjY1LS44MSAyLjIyNC0uMDE2LjAzLjAwNy4wNjMuMDQuMDYzaDEuMzFxLjAyNy0uMDAyLjA0LS4wMjRhOS40IDkuNCAwIDAgMCAuNzQ0LTIuMjQxYy4wMDQtLjAyOS0uMDE3LS4wNTctLjA0NS0uMDU3TTUwLjk4IDEwLjUyNWwtMS4zNjQtLjAyMi0uMDEzLjQyN2MtLjAxLjE4LS4wMTYuMzA0LS4xLjM5NnEtLjEzNy4xNDktLjQzNS4xNS0uMDU2LS4wMDEtLjExLS4wMDVoLTIuNDk1cS0uMDYuMDA0LS4xMTEuMDA0Yy0uMjg5IDAtLjUwNS0uMDcxLS42MzktLjIxNC0uMTI3LS4xMzUtLjE4My0uMzM1LS4xNjctLjU4OVY5LjYxOGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDRoLTEuNDA2YS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ0djEuMjI0Yy0uMDE2LjQ3LjA5Ny44MzMuMzMyIDEuMDc0LjI2MS4yNjguNjg0LjQwMyAxLjI1Ni40MDNsLjExMy0uMDAyaDMuNzQybC4xMDMuMDAycS43MjIgMCAxLjA2Ny0uMzU0LjM0My0uMzUzLjMxOS0xLjA3NHoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNNDguNDczIDkuNTdoLTEuNDU4YS4wNDQuMDQ0IDAgMCAwLS4wNDMuMDU4Yy4xMTcuMzg4LjIyNC43NjQuMzE1IDEuMTE3LjAwNC4wMi4wMjIuMDMzLjA0My4wMzNoMS41OTZjLjAzIDAgLjA1MS0uMDMuMDQzLS4wNi0uMTUyLS40OTItLjMwNy0uODctLjQ1Ny0xLjEyN2EuMDUuMDUgMCAwIDAtLjA0LS4wMk01Mi40NiA5LjU5OGEuMDUuMDUgMCAwIDAtLjA0LS4wMjRoLTEuMjI2YS4wNDQuMDQ0IDAgMCAwLS4wNDEuMDZjLjMxMy43NDIuNTQgMS40OS42NzUgMi4yMjUuMDA1LjAyLjAyMy4wMzcuMDQ0LjAzN2gxLjM4OGEuMDQ2LjA0NiAwIDAgMCAuMDQ1LS4wNTUgOS42IDkuNiAwIDAgMC0uODQ0LTIuMjQzTTMxLjEyOCA1LjY0MWg1LjcyOWwuMDk4LjAwMmMuNTcgMCAxLjAwMy0uMTQ1IDEuMjg1LS40MzMuMjk5LS4zMDQuNDQzLS43OC40MjUtMS40MTdWMS4xMzlhLjA0Ni4wNDYgMCAwIDAtLjA0Ni0uMDQ1aC02Ljk2NGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuOTY0YzAgLjAyNS4wMi4wNDUuMDQ1LjA0NWg1LjM2Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDV2MS41OXEuMDI5LjQ0OC0uMTc3LjY2Ny0uMTgxLjE5MS0uNTM3LjE5MmwtLjA5My0uMDA0aC00LjYwNmEuNS41IDAgMCAxLS41MDMtLjQ5OHYtM2EuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDZoLTEuNTE0YS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1djIuOTNjLjAwMi44NjcuNzEgMS41NzIgMS41ODggMS41NzJNMzMuNDM3IDYuNzY0aC00Ljk3M2EuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYzLjk4N2MwIC44NC42ODYgMS41MjIgMS41MzQgMS41MjJoMS43NzNsLjEwNS4wMDJxLjg2NyAwIDEuMjc3LS40MTljLjI2My0uMjcuMzg5LS42OC4zNzMtMS4yMjFWNi44MWMuMDAyLS4wMjUtLjAxOS0uMDQ2LS4wNDQtLjA0Nm0tMS4zNDQgMy45MWMwIC41MjMtLjI2Mi44LS43NTQuOGgtLjk3MmEuNTYuNTYgMCAwIDEtLjU2LS41NTVWNy44MWMwLS4wMjQuMDItLjA0NS4wNDUtLjA0NWgyLjE5M2MuMDI1IDAgLjA0Ni4wMi4wNDYuMDQ1djIuODY0ek0zOS43NTIgNi43NjRoLTMuOTY4bC0xLjEyMi0uMDFhLjA0Ni4wNDYgMCAwIDAtLjA0Ni4wNDV2NC4wMDVjMCAuODM1LjY4MiAxLjUxMSAxLjUyNCAxLjUxMWgxLjk0NGwuMTAzLjAwM2MuNTUgMCAuOTY0LS4xMzcgMS4yMjctLjQwN3MuMzktLjY4NC4zNzMtMS4yMzJsLjAxLTMuODdhLjA0Ni4wNDYgMCAwIDAtLjA0NS0uMDQ1bS0xLjU3MSA0LjU0N3EtLjE1OS4xNjYtLjQ1My4xNjctLjA0NSAwLS4wODUtLjAwNGgtLjk0YS42OS42OSAwIDAgMS0uNjk3LS42OVY3LjgxYzAtLjAyNS4wMi0uMDQ1LjA0Ni0uMDQ1aDIuMjQ2Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDV2Mi44NnEuMDI5LjQzOC0uMTYyLjY0TTQyLjAyIDcuNTQ3aDcuODAzYy4xNjEgMCAuMjg3LS4xMjkuMjg3LS4yODJ2LS4yNDdhLjA0Ni4wNDYgMCAwIDAtLjA0Ni0uMDQ1bC04LjA0My0uMDIyYS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di41MWMwIC4wMi4wMi4wNDEuMDQ1LjA0MSIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik00MS42ODggNC45aDEuODg0Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDR2LjYxYzAgLjAyNC0uMDIuMDQ0LS4wNDUuMDQ0aC0xLjU1YS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ1di41OTJjMCAuMDI1LjAyLjA0NS4wNDYuMDQ1aDguNzU1Yy4wMjUgMCAuMDQ2LjAyLjA0Ni4wNDV2MS4xNzljLjAwMi4yNzYtLjA3Mi40OTQtLjIxMi42MzVhLjU4LjU4IDAgMCAxLS40ODguMTYxaC04LjEwMWEuMDQ2LjA0NiAwIDAgMC0uMDQ2LjA0NXYuNjk1YzAgLjAyNC4wMi4wNDUuMDQ2LjA0NWg4LjcwMmwuMDk1LjAwMmMuNDk0IDAgLjg2OS0uMTI5IDEuMTE2LS4zOC4yNzItLjI3OC40MDEtLjcyLjM4My0xLjMxMXYtMS43NWEuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDZoLTEuMjRhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1VjVjMC0uMDI1LjAyLS4wNDUuMDQ1LS4wNDVoMS45OTNjLjAyNSAwIC4wNDYtLjAyLjA0Ni0uMDQ1di0uNjk1YS4wNDYuMDQ2IDAgMCAwLS4wNDYtLjA0NWgtMS45OTNhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1di0uNjYxYzAtLjAyNS4wMi0uMDQ1LjA0NS0uMDQ1aDEuOTkzYy4wMjUgMCAuMDQ2LS4wMi4wNDYtLjA0NXYtLjY5NWEuMDQ2LjA0NiAwIDAgMC0uMDQ2LS4wNDVoLTEuOTkzYS4wNDYuMDQ2IDAgMCAxLS4wNDUtLjA0NXYtLjYxMmMwLS4wMjUuMDItLjA0NS4wNDUtLjA0NWgxLjk5M2MuMDI1IDAgLjA0Ni0uMDIuMDQ2LS4wNDV2LS42OTVhLjA0Ni4wNDYgMCAwIDAtLjA0Ni0uMDQ1aC0xLjk5M2EuMDQ2LjA0NiAwIDAgMS0uMDQ1LS4wNDRWLjYxYS4wNDYuMDQ2IDAgMCAwLS4wNDYtLjA0NWgtMS4zYS4wNDYuMDQ2IDAgMCAwLS4wNDQuMDQ1di40OTNjMCAuMDI0LS4wMjEuMDQ0LS4wNDYuMDQ0SDQ3Ljc4YS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di42OTVjMCAuMDI0LjAyLjA0NS4wNDUuMDQ1aDEuNzczYy4wMjUgMCAuMDQ2LjAyLjA0Ni4wNDV2LjYwOGMwIC4wMjUtLjAyMS4wNDUtLjA0Ni4wNDVINDcuNzhhLjA0Ni4wNDYgMCAwIDAtLjA0NS4wNDV2LjY5NWMwIC4wMjQuMDIuMDQ1LjA0NS4wNDVoMS43NzNjLjAyNSAwIC4wNDYuMDIuMDQ2LjA0NXYuNjYxYzAgLjAyNS0uMDIxLjA0NS0uMDQ2LjA0NUg0Ny43OGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuNjk1YzAgLjAyNC4wMi4wNDUuMDQ1LjA0NWgxLjc3M2MuMDI1IDAgLjA0Ni4wMi4wNDYuMDQ1di41NTVjMCAuMDI1LS4wMjEuMDQ1LS4wNDYuMDQ1aC00LjU1NWEuMDQ2LjA0NiAwIDAgMS0uMDQ1LS4wNDV2LS42MDljMC0uMDI0LjAyLS4wNDQuMDQ1LS4wNDRoMS44MjdjLjAyNCAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uNjk1YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWgtMS44MjdhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1VjMuNDZjMC0uMDI1LjAyLS4wNDUuMDQ1LS4wNDVoMS44MjdjLjAyNCAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uNjk1YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWgtMS44MjdhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1di0uNjA4YzAtLjAyNS4wMi0uMDQ1LjA0NS0uMDQ1aDEuODI3Yy4wMjQgMCAuMDQ1LS4wMi4wNDUtLjA0NXYtLjY5NWEuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDVoLTEuODI3YS4wNDYuMDQ2IDAgMCAxLS4wNDUtLjA0NFYuNjFhLjA0Ni4wNDYgMCAwIDAtLjA0NS0uMDQ1SDQzLjY2YS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ1di40OTNjMCAuMDI0LS4wMi4wNDQtLjA0NS4wNDRoLTEuODg0YS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di42OTVjMCAuMDI0LjAyLjA0NS4wNDUuMDQ1aDEuODg0Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDV2LjYwOGMwIC4wMjUtLjAyLjA0NS0uMDQ1LjA0NWgtMS44ODRhLjA0Ni4wNDYgMCAwIDAtLjA0NS4wNDV2LjY5NWMwIC4wMjQuMDIuMDQ1LjA0NS4wNDVoMS44ODRjLjAyNSAwIC4wNDUuMDIuMDQ1LjA0NXYuNjA4YzAgLjAyNS0uMDIuMDQ1LS4wNDUuMDQ1aC0xLjg4NGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuNjk1Yy4wMDIuMDI2LjAyMi4wNDcuMDQ3LjA0N00yNi45OTggMTEuNDJoLTMuMDE2Yy0uMDMxIDAtLjA1Ni0uMDMtLjA0LS4wNmEzLjQgMy40IDAgMCAwIC4yOTctLjgzOC4wNDUuMDQ1IDAgMCAwLS4wNDUtLjA1M0gyMi42NGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjAzOWMtLjExNi42MDItLjIxNy44MjMtLjI1Ni44OTJhLjA0LjA0IDAgMCAxLS4wMzkuMDIzaC0yLjg0NmEuMDQuMDQgMCAwIDEtLjAzOS0uMDIzYy0uMDM5LS4wNjctLjE0LS4yOTQtLjI1NS0uODkyLS4wMDQtLjAyLS4wMjMtLjA0LS4wNDUtLjA0aC0xLjU1M2MtLjAyOSAwLS4wNTIuMDI1LS4wNDUuMDU0LjA2LjMzNy4yMjQuNjk2LjI5Ni44MzcuMDE3LjAzLS4wMDguMDYyLS4wMzkuMDYyaC0zLjAxN2EuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuNzVjMCAuMDI0LjAyLjA0NC4wNDUuMDQ0aDEyLjI0Yy4wMjUgMCAuMDQ2LS4wMi4wNDYtLjA0NXYtLjc1YS4wNDYuMDQ2IDAgMCAwLS4wNDYtLjA0NE0xNC44NjQgMi4wNDJoNS4xMzVjLjAyNSAwIC4wNDYuMDIuMDQ2LjA0NXYuNzY2YzAgLjAyNS0uMDIuMDQ1LS4wNDYuMDQ1aC00LjEyYS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di43NWMwIC4wMjQuMDIuMDQ1LjA0NS4wNDVoOS45OTNjLjAyNSAwIC4wNDYtLjAyLjA0Ni0uMDQ1VjIuOTRhLjA0Ni4wNDYgMCAwIDAtLjA0Ni0uMDQ1aC00LjE3NGEuMDQ2LjA0NiAwIDAgMS0uMDQ1LS4wNDV2LS43NjZjMC0uMDI0LjAyLS4wNDUuMDQ1LS4wNDVoNS4xMzZjLjAyNSAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uODAyYS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWgtNS4xMzZhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1Vi41NTdhLjA0Ni4wNDYgMCAwIDAtLjA0NS0uMDQ1aC0xLjUyYS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di41NDZjMCAuMDI0LS4wMi4wNDUtLjA0Ni4wNDVoLTUuMTMzYS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ1di44MDJjLjAwMi4wMjcuMDIxLjA0Ny4wNDYuMDQ3TTI2LjgyOSA2LjMzNVY1LjUxYzAtLjU5NS0uNDg2LTEuMDc3LTEuMDg2LTEuMDc3SDE1Ljk2Yy0uNiAwLTEuMDg1LjQ4NC0xLjA4NSAxLjA3N2wtLjAxMy44MjVjMCAuMDI3LjAyLjA0OS4wNDguMDQ5bDEuNTIuMDEyYy4wMjYgMCAuMDQ5LS4wMi4wNDktLjA0OXYtLjU4YzAtLjI3NC4yMjItLjQ5NC40OTgtLjQ5NGg3Ljc4YS41Mi41MiAwIDAgMSAuNTIxLjUxN2wtLjAxMi41NDNjMCAuMDI2LjAyLjA0OS4wNDkuMDQ5aDEuNDY2Yy4wMjUgMCAuMDQ4LS4wMi4wNDgtLjA0NyIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNC41MzkgNi43NTdjLjAyNCAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uNjQ2YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NGgtNy4zNzdhLjA0Ni4wNDYgMCAwIDAtLjA0NS4wNDR2LjY0NmMwIC4wMjQuMDIuMDQ1LjA0NS4wNDV6TTE2LjAyNyA3LjQ4M3YxLjEzMmMtLjAzMi41MTMuMDcuOS4zMSAxLjE1Mi4yMzYuMjUxLjYxNy4zNzggMS4xMy4zNzhsLjEwNS0uMDAyaDYuNTZsLjEwNC4wMDJjLjUxMiAwIC44OTMtLjEyNyAxLjEzLS4zNzguMjM5LS4yNTEuMzQyLS42NC4zMDktMS4xNTZWNy40OTZhLjA0Ni4wNDYgMCAwIDAtLjA0NS0uMDQ1aC03LjY0OGEuMDQ2LjA0NiAwIDAgMC0uMDQ2LjA0NXYuNjk4YzAgLjAyNS4wMjEuMDQ1LjA0Ni4wNDVoNi4xNDdjLjA1NyAwIC4xMDMuMDQ1LjEwMy4xMDJ2LjQyMXEuMDI3LjI2OC0uMTEyLjQxOS0uMTYxLjE3NS0uNTM1LjE3NWgtNS40NjdxLS4zNzUgMC0uNTM2LS4xNzVjLS4wOS0uMS0uMTI3LS4yNDEtLjExMS0uNDEzVjcuNDk2YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWwtMS4zNTMtLjAxM2EuMDQ2LjA0NiAwIDAgMC0uMDQ2LjA0NSIvPjwvZz48L3N2Zz4=";
|
|
26
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
+
0 && (module.exports = {
|
|
28
|
+
DEFAULT_LOGO
|
|
29
|
+
});
|
|
@@ -38,8 +38,27 @@ var import_SecondSidebar = __toESM(require("./SecondSidebar"));
|
|
|
38
38
|
var import_MoreMenuDrawer = __toESM(require("./MoreMenuDrawer"));
|
|
39
39
|
var import_CustomNavPanel = __toESM(require("./CustomNavPanel"));
|
|
40
40
|
var import_menuIconMap = require("./menuIconMap");
|
|
41
|
+
var import_default_logo = require("./default-logo");
|
|
41
42
|
var import_index = require("./index.scss");
|
|
42
43
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
44
|
+
function buildLeafToFirstKeyMap(menus) {
|
|
45
|
+
const map = /* @__PURE__ */ new Map();
|
|
46
|
+
const walk = (items, firstKey) => {
|
|
47
|
+
(items || []).forEach((item) => {
|
|
48
|
+
var _a;
|
|
49
|
+
map.set(item.key, firstKey);
|
|
50
|
+
if ((_a = item.children) == null ? void 0 : _a.length)
|
|
51
|
+
walk(item.children, firstKey);
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
(menus || []).forEach((menu) => {
|
|
55
|
+
var _a;
|
|
56
|
+
map.set(menu.key, menu.key);
|
|
57
|
+
if ((_a = menu.children) == null ? void 0 : _a.length)
|
|
58
|
+
walk(menu.children, menu.key);
|
|
59
|
+
});
|
|
60
|
+
return map;
|
|
61
|
+
}
|
|
43
62
|
function DefaultFallback() {
|
|
44
63
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "company-sidebar-error", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "导航加载失败" }) });
|
|
45
64
|
}
|
|
@@ -50,7 +69,7 @@ function CompanySidebar({
|
|
|
50
69
|
currentDomainId,
|
|
51
70
|
onDomainChange,
|
|
52
71
|
userInfo,
|
|
53
|
-
logo,
|
|
72
|
+
logo = import_default_logo.DEFAULT_LOGO,
|
|
54
73
|
brandName,
|
|
55
74
|
firstMenus,
|
|
56
75
|
systemBottomMenus,
|
|
@@ -88,6 +107,17 @@ function CompanySidebar({
|
|
|
88
107
|
const resolvedBusinessMenus = (0, import_react.useMemo)(() => (0, import_menuIconMap.resolveMenuIcons)(businessMenus), [businessMenus]);
|
|
89
108
|
const resolvedSecondMenus = (0, import_react.useMemo)(() => (0, import_menuIconMap.resolveMenuIcons)(secondMenus), [secondMenus]);
|
|
90
109
|
const resolvedCustomNavMenus = (0, import_react.useMemo)(() => (0, import_menuIconMap.resolveMenuIcons)(customNavMenus), [customNavMenus]);
|
|
110
|
+
const leafToFirstKeyMap = (0, import_react.useMemo)(() => buildLeafToFirstKeyMap(businessMenus), [businessMenus]);
|
|
111
|
+
const handleLeafMenuClick = (0, import_react.useCallback)(
|
|
112
|
+
(menu) => {
|
|
113
|
+
const firstKey = leafToFirstKeyMap.get(menu.key);
|
|
114
|
+
if (firstKey && firstKey !== activeFirstMenu) {
|
|
115
|
+
onFirstMenuSelect(firstKey);
|
|
116
|
+
}
|
|
117
|
+
onMenuClick(menu);
|
|
118
|
+
},
|
|
119
|
+
[leafToFirstKeyMap, activeFirstMenu, onFirstMenuSelect, onMenuClick]
|
|
120
|
+
);
|
|
91
121
|
(0, import_react.useEffect)(() => {
|
|
92
122
|
setState((prev) => ({ ...prev, localExpandedKeys: expandedKeys }));
|
|
93
123
|
}, [expandedKeys]);
|
|
@@ -125,10 +155,13 @@ function CompanySidebar({
|
|
|
125
155
|
}, [delayHideSidebar]);
|
|
126
156
|
const handleFirstMenuClick = (0, import_react.useCallback)(
|
|
127
157
|
(menu) => {
|
|
128
|
-
|
|
158
|
+
const firstKey = leafToFirstKeyMap.get(menu.key) || menu.key;
|
|
159
|
+
if (firstKey !== activeFirstMenu) {
|
|
160
|
+
onFirstMenuSelect(firstKey);
|
|
161
|
+
}
|
|
129
162
|
onMenuClick(menu);
|
|
130
163
|
},
|
|
131
|
-
[onFirstMenuSelect, onMenuClick]
|
|
164
|
+
[leafToFirstKeyMap, activeFirstMenu, onFirstMenuSelect, onMenuClick]
|
|
132
165
|
);
|
|
133
166
|
const handleMoreSelect = (0, import_react.useCallback)(
|
|
134
167
|
(menu, child) => {
|
|
@@ -184,6 +217,7 @@ function CompanySidebar({
|
|
|
184
217
|
businessMenus: resolvedBusinessMenus,
|
|
185
218
|
customNavMenus: resolvedCustomNavMenus,
|
|
186
219
|
activeKey,
|
|
220
|
+
activeFirstMenu,
|
|
187
221
|
visibleMenuCount,
|
|
188
222
|
domainPopoverOpen: state.domainPopoverOpen,
|
|
189
223
|
adminPopoverOpen: state.adminPopoverOpen,
|
|
@@ -210,7 +244,7 @@ function CompanySidebar({
|
|
|
210
244
|
expandedKeys: state.localExpandedKeys,
|
|
211
245
|
emptyImage,
|
|
212
246
|
onMenuClick: (menu) => {
|
|
213
|
-
|
|
247
|
+
handleLeafMenuClick(menu);
|
|
214
248
|
if (!secondSidebarFixed) {
|
|
215
249
|
delayHideSidebar();
|
|
216
250
|
}
|
|
@@ -24,6 +24,8 @@ __export(menuIconMap_exports, {
|
|
|
24
24
|
resolveMenuIcons: () => resolveMenuIcons
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(menuIconMap_exports);
|
|
27
|
+
var import_icons = require("../../shared-components/SvgIcon/icons");
|
|
28
|
+
var VALID_ICONS = new Set(import_icons.iconNames);
|
|
27
29
|
var KEYWORD_ICON_MAP = [
|
|
28
30
|
{ keywords: ["商品", "货品", "物料", "spu", "sku", "product"], icon: "commodity" },
|
|
29
31
|
{ keywords: ["采购", "进货", "供应商", "purchase"], icon: "buy" },
|
|
@@ -47,8 +49,15 @@ var KEYWORD_ICON_MAP = [
|
|
|
47
49
|
];
|
|
48
50
|
var DEFAULT_ICON = "folder-open";
|
|
49
51
|
function getMenuIcon(menu) {
|
|
50
|
-
if (menu.icon)
|
|
51
|
-
|
|
52
|
+
if (menu.icon) {
|
|
53
|
+
if (VALID_ICONS.has(menu.icon))
|
|
54
|
+
return menu.icon;
|
|
55
|
+
if (process.env.NODE_ENV !== "production") {
|
|
56
|
+
console.warn(
|
|
57
|
+
`[CompanySidebar] 菜单 "${menu.label}" 的 icon "${menu.icon}" 不在内置图标集中,已回退为关键词匹配。内置图标键可查阅文档站 /icon-library 精选集。`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
52
61
|
const label = (menu.label || "").toLowerCase();
|
|
53
62
|
for (const { keywords, icon } of KEYWORD_ICON_MAP) {
|
|
54
63
|
if (keywords.some((kw) => label.includes(kw.toLowerCase()))) {
|
|
@@ -171,6 +171,9 @@
|
|
|
171
171
|
justify-content: flex-end;
|
|
172
172
|
padding: calc(var(--spacing-md, 16) * 1px);
|
|
173
173
|
border-top: 1px solid var(--color-border-secondary, rgba(5, 5, 5, 0.06));
|
|
174
|
+
|
|
175
|
+
/* 吸底:表格高度由 scroll.y 控制不一定填满 wrapper,margin-top:auto 保证分页器始终贴白卡底部(对齐 SmartListTemplate 视觉契约) */
|
|
176
|
+
margin-top: auto;
|
|
174
177
|
}
|
|
175
178
|
}
|
|
176
179
|
}
|
|
@@ -5,7 +5,10 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
5
5
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
6
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
7
|
import { getIconDefinition } from "./icons";
|
|
8
|
+
|
|
9
|
+
// 未注册图标键的兜底图标,保证任何输入都有可见输出(业务环境无 iconpark sprite,不能依赖 <use> 静默回退)
|
|
8
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
var FALLBACK_ICON = "folder-open";
|
|
9
12
|
function toCssSize(size, fallback) {
|
|
10
13
|
if (size === undefined || size === null) return fallback;
|
|
11
14
|
return typeof size === "number" ? "".concat(size, "px") : size;
|
|
@@ -23,6 +26,15 @@ export default function SvgIcon(_ref) {
|
|
|
23
26
|
onClick = _ref.onClick;
|
|
24
27
|
var key = name !== null && name !== void 0 ? name : href;
|
|
25
28
|
var icon = key ? getIconDefinition(key) : undefined;
|
|
29
|
+
|
|
30
|
+
// name 未注册:dev 警告并兜底渲染,避免业务环境静默空白
|
|
31
|
+
// (href 未注册不警告,IconParkGallery 全量库走 <use> sprite 是合法路径)
|
|
32
|
+
if (!icon && name) {
|
|
33
|
+
if (process.env.NODE_ENV !== "production") {
|
|
34
|
+
console.warn("[SvgIcon] \u672A\u6CE8\u518C\u7684\u56FE\u6807 name \"".concat(name, "\"\uFF0C\u5DF2\u56DE\u9000\u4E3A \"").concat(FALLBACK_ICON, "\"\u3002\u8BF7\u4F7F\u7528\u5185\u7F6E\u56FE\u6807\u96C6\uFF08/icon-library \u7CBE\u9009\uFF09\u4E2D\u7684\u952E\u3002"));
|
|
35
|
+
}
|
|
36
|
+
icon = getIconDefinition(FALLBACK_ICON);
|
|
37
|
+
}
|
|
26
38
|
var dimension = toCssSize(size, 16);
|
|
27
39
|
var mergedStyle = _objectSpread(_objectSpread({
|
|
28
40
|
width: dimension,
|
|
@@ -20,7 +20,7 @@ export interface AdminLayoutTemplateProps {
|
|
|
20
20
|
className?: string;
|
|
21
21
|
/** 根节点自定义 style(父容器无确定高度时可传 style={{ height: '100vh' }}) */
|
|
22
22
|
style?: CSSProperties;
|
|
23
|
-
/** 顶部 Logo
|
|
23
|
+
/** 顶部 Logo 图片地址;缺省使用内置默认 Logo(随包分发,传 "" 可回退为品牌名首字母) */
|
|
24
24
|
logo?: string;
|
|
25
25
|
/** 品牌名称(无 Logo 时显示首字母) */
|
|
26
26
|
brandName?: string;
|
|
@@ -447,6 +447,18 @@ export default function AdminLayoutTemplate(_ref) {
|
|
|
447
447
|
var handleMenuClick = useCallback(function (menu) {
|
|
448
448
|
var _menu$children5, _page$label2, _page$path2;
|
|
449
449
|
setActiveKey(menu.key);
|
|
450
|
+
// 反向同步一级菜单高亮:从收藏/更多应用/自定义导航面板点击叶子菜单时,
|
|
451
|
+
// activeFirstMenu 可能停留在其他模块(与 handleTabChange 的反向同步保持一致)
|
|
452
|
+
var parentModule = businessMenus.find(function (m) {
|
|
453
|
+
var _m$children2;
|
|
454
|
+
return findMenuByKey((_m$children2 = m.children) !== null && _m$children2 !== void 0 ? _m$children2 : [], menu.key);
|
|
455
|
+
});
|
|
456
|
+
if (parentModule && parentModule.key !== activeFirstMenu) {
|
|
457
|
+
var _parentModule$childre2;
|
|
458
|
+
setActiveFirstMenu(parentModule.key);
|
|
459
|
+
setExpandedKeys(collectParentKeys((_parentModule$childre2 = parentModule.children) !== null && _parentModule$childre2 !== void 0 ? _parentModule$childre2 : []));
|
|
460
|
+
onActiveFirstMenuChange === null || onActiveFirstMenuChange === void 0 || onActiveFirstMenuChange(parentModule.key);
|
|
461
|
+
}
|
|
450
462
|
// 父级菜单只负责展开(展开交互由 CompanySidebar 内部处理)
|
|
451
463
|
if ((_menu$children5 = menu.children) !== null && _menu$children5 !== void 0 && _menu$children5.length) return;
|
|
452
464
|
// 一级系统菜单(首页/收藏/系统设置)不开页签;首页激活 homeTab
|
|
@@ -467,7 +479,7 @@ export default function AdminLayoutTemplate(_ref) {
|
|
|
467
479
|
});
|
|
468
480
|
openTab(menu.key, (_page$label2 = page === null || page === void 0 ? void 0 : page.label) !== null && _page$label2 !== void 0 ? _page$label2 : menu.label, (_page$path2 = page === null || page === void 0 ? void 0 : page.path) !== null && _page$path2 !== void 0 ? _page$path2 : menu.path, page === null || page === void 0 ? void 0 : page.closable);
|
|
469
481
|
onMenuOpen === null || onMenuOpen === void 0 || onMenuOpen(menu);
|
|
470
|
-
}, [systemMenuKeys, homeTab, isTabActiveControlled, onActiveTabChange, onMenuOpen, pages, openTab]);
|
|
482
|
+
}, [businessMenus, activeFirstMenu, systemMenuKeys, homeTab, isTabActiveControlled, onActiveTabChange, onActiveFirstMenuChange, onMenuOpen, pages, openTab]);
|
|
471
483
|
return /*#__PURE__*/_jsxs("div", {
|
|
472
484
|
className: "admin-layout-template".concat(className ? " ".concat(className) : ""),
|
|
473
485
|
style: style,
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
display: flex;
|
|
20
20
|
flex-direction: column;
|
|
21
21
|
overflow: hidden;
|
|
22
|
+
|
|
22
23
|
/* 主区灰底与 SmartListTemplate 等业务模板的 --color-bg-layout 对齐,
|
|
23
24
|
页签栏与内容未充满处不露出白底 */
|
|
24
25
|
background: var(--color-bg-layout, #f5f5f5);
|
|
@@ -31,6 +32,7 @@
|
|
|
31
32
|
/* 间距契约:内容区只做滚动容器,禁止加 padding/margin/background(业务模板自带)。
|
|
32
33
|
纵向 flex 让 SmartListTemplate(flex-grow:1 + align-self:stretch)充满剩余高度 */
|
|
33
34
|
.admin-layout-content {
|
|
35
|
+
position: relative; /* 为 FormPageTemplate/DetailPageTemplate 等 absolute+inset:0 模板提供定位上下文,防止逃逸到全屏祖先 */
|
|
34
36
|
flex: 1;
|
|
35
37
|
min-height: 0;
|
|
36
38
|
overflow: auto;
|
|
@@ -12,6 +12,7 @@ export interface FirstSidebarProps {
|
|
|
12
12
|
businessMenus: SidebarMenuItem[];
|
|
13
13
|
customNavMenus: SidebarMenuItem[];
|
|
14
14
|
activeKey: string;
|
|
15
|
+
activeFirstMenu: string;
|
|
15
16
|
visibleMenuCount?: number;
|
|
16
17
|
domainPopoverOpen: boolean;
|
|
17
18
|
adminPopoverOpen: boolean;
|
|
@@ -25,4 +26,4 @@ export interface FirstSidebarProps {
|
|
|
25
26
|
onThemeSettings?: () => void;
|
|
26
27
|
onLogout?: () => void;
|
|
27
28
|
}
|
|
28
|
-
export default function FirstSidebar({ domains, currentDomainId, userInfo, logo, brandName, firstMenus, systemBottomMenus, businessMenus, customNavMenus, activeKey, visibleMenuCount, domainPopoverOpen, adminPopoverOpen, onDomainPopoverOpenChange, onAdminPopoverOpenChange, onDomainChange, onMenuClick, onBusinessMenuEnter, onBusinessMenuLeave, onOpenMore, onThemeSettings, onLogout, }: FirstSidebarProps): import("react").JSX.Element;
|
|
29
|
+
export default function FirstSidebar({ domains, currentDomainId, userInfo, logo, brandName, firstMenus, systemBottomMenus, businessMenus, customNavMenus, activeKey, activeFirstMenu, visibleMenuCount, domainPopoverOpen, adminPopoverOpen, onDomainPopoverOpenChange, onAdminPopoverOpenChange, onDomainChange, onMenuClick, onBusinessMenuEnter, onBusinessMenuLeave, onOpenMore, onThemeSettings, onLogout, }: FirstSidebarProps): import("react").JSX.Element;
|
|
@@ -15,6 +15,7 @@ export default function FirstSidebar(_ref) {
|
|
|
15
15
|
businessMenus = _ref.businessMenus,
|
|
16
16
|
customNavMenus = _ref.customNavMenus,
|
|
17
17
|
activeKey = _ref.activeKey,
|
|
18
|
+
activeFirstMenu = _ref.activeFirstMenu,
|
|
18
19
|
_ref$visibleMenuCount = _ref.visibleMenuCount,
|
|
19
20
|
visibleMenuCount = _ref$visibleMenuCount === void 0 ? 6 : _ref$visibleMenuCount,
|
|
20
21
|
domainPopoverOpen = _ref.domainPopoverOpen,
|
|
@@ -120,7 +121,7 @@ export default function FirstSidebar(_ref) {
|
|
|
120
121
|
className: "business-menus",
|
|
121
122
|
children: [displayMenus.map(function (menu) {
|
|
122
123
|
return /*#__PURE__*/_jsxs("div", {
|
|
123
|
-
className: "business-menu-item".concat(activeKey === menu.key ? " active" : ""),
|
|
124
|
+
className: "business-menu-item".concat(activeFirstMenu === menu.key || activeKey === menu.key ? " active" : ""),
|
|
124
125
|
onClick: function onClick() {
|
|
125
126
|
return onMenuClick(menu);
|
|
126
127
|
},
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** 内置默认 Logo(logo-dl.svg 经 svgo 压缩为 data URI,随 npm 包分发,零网络请求) */
|
|
2
|
+
export var DEFAULT_LOGO = "data:image/svg+xml;base64," + "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My4zMDgiIGhlaWdodD0iMjIiIGZpbGw9Im5vbmUiPjxkZW" + "ZzPjxjbGlwUGF0aCBpZD0iYSI+PHJlY3Qgd2lkdGg9IjUzLjMwOCIgaGVpZ2h0PSIyMiIgcng9IjAiLz48L2NsaXBQYXRoPjwvZGVmcz48ZyBj" + "bGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0uNDQ4IDIwLjUwMXYtMi42M2gxLjgyNXYtLjkxM2guNTc0di45MTNoMS" + "44MjV2MS44NDhxLjAyMS44MDUtLjY3OC43ODJIMi44NDV2MS41aC0uNTc0di0xLjV6bS41MzQtLjM5MmgxLjI5di0xLjg0OEguOTgzem0zLjE1" + "Ni0xLjg0OEgyLjg0NXYxLjg0OGguOTg1cS4zMDcuMDAxLjMwNi0uMzd2LTEuNDc4ek03LjMxMyAyMS44MjZ2LTQuNjNoNC4zMjZ2My45MTNxLj" + "AyMS43MzgtLjY5OC43MTd6bS41My0uMzdoMi44OTJxLjM5LjAyMy4zNjktLjM0N3YtMy41NDRoLTMuMjZ6bS4yOS0zLjAyM3YtLjM3aDIuNjY2" + "di4zN0g5LjY5di43NGgxLjAwNXYuMzQ3SDkuNjl2MS4wNDRoMS4xN3YuMzQ3SDguMDd2LS4zNDdoMS4wODdWMTkuNTJoLS45NDR2LS4zNDdoLj" + "k0NHYtLjc0em0yLjA3IDEuOTU3YTQgNCAwIDAgMC0uMjA1LS42OTZoLjM2OHEuMjA1LjM3LjI0NS42OTZ6TTE0LjExMiAxOS4yNjJhMTEgMTEg" + "MCAwIDEtLjE2NS0xLjVoLjMyOHEuMDIuNzgyLjE4NSAxLjV6bS0uMTI0IDIuNjk2di0uNDc4cS4zMjktLjU4Ny40My0xLjIxOC4xMDQtLjYxLj" + "EwNC0xLjg2OHYtMS4zOTFoLjQ1djEuMDQzcS4yMDUtLjAyMS40MzEtLjE1M3YuNDM1YTEuOCAxLjggMCAwIDEtLjQzLjEzcTAgMS42NzYuNDUg" + "Mi41MjN2LjQ3OHEtLjQxLS40MTMtLjYzNi0xLjE5NS0uMjAyIDEuMDYyLS43OTkgMS42OTRtMS40MzYtMS4yODN2LS4zOTJxLjQzLS4zMjYuNj" + "k4LS43NGExLjggMS44IDAgMCAwLS41NTQtLjI4MXYtLjM0OHEuNDEuMDY1LjcxOS4yNjJ2LjA2NWEyLjUgMi41IDAgMCAwIC4yMDYtLjQ3OCAz" + "IDMgMCAwIDAtLjU1NC0uMzA0di0uMTUzcS0uMjI1LjM0OS0uNTk2LjY3NHYtLjM3cS40OTItLjYzLjYxNi0xLjY1MmguNDNsLS4wODIuNDEyaC" + "43Nzl2LjM0N2wtLjAyMS4zMDVoLjM2OWExIDEgMCAwIDAgLjAyLS4xOTZ2LS44N2guNDN2MS4wNjZoLjMwN3YtLjc4M2guMzA3di43ODNoLjE4" + "NnYuMzdoLS43NzlxLjEwMyAxLjIxNS44ODIgMS44Njh2LjM5M3EtLjkwMi0uNTY2LTEuMTA4LTEuNDE0LS4yMDQuOTEzLTEuMDI2IDEuNDE0di" + "0uMzlxLjY3Ni0uNjU0Ljc4LTEuODdoLS40NXEtLjI0NSAxLjUyLTEuNTYgMi4yODJtLjAyIDEuMTUycS4wODEtLjQ1Ni4yNDUtMS4wMjFoLjM5" + "cS0uMTg1LjYzMS0uMjI1IDEuMDIxem0uNTk1LTMuNjk1cS4yNjcuMDY2LjU1NC4yMTcuMDIyLS4xMDguMDYyLS4zNDguMDIxLS4xOTUuMDQxLS" + "4yODJoLS40OTJhMS43IDEuNyAwIDAgMS0uMTY1LjQxM20uNTEzIDMuNzE3YTcgNyAwIDAgMC0uMTY1LTEuMDQzaC4zN3EuMTQyLjQzNC4yMDUg" + "MS4wNDN6bS44NjEtLjAyMmE0LjQgNC40IDAgMCAwLS4yMDYtMS4wMjFoLjM2OXEuMTg0LjUyMS4yNjcgMS4wMjF6bS44ODMgMGE2IDYgMCAwID" + "AtLjI0NS0xLjAyMWguMzlxLjIyNS41NjYuMjY1IDEuMDIxek0yMC45MzUgMTguODQ4di0uMzdxLjgtLjQ3OC45NjMtMS40OTloLjU1NHEtLjA2" + "LjIxNy0uMTIzLjQxM2gzLjA5N3YuMzdoLTMuMjQxcS0uMjY4LjY1MS0xLjI1IDEuMDg2bTQuMTgyIDMuMTNxLS45MjQuMTA2LS44ODEtMi4zMD" + "VIMjEuMjJ2LS4zOWgzLjU5cS0uMDQyIDIuNDU2LjMyNyAyLjI4NC4xODUuMDIxLjE4NS0uMzdoLjM0OHEuMDIuODAyLS41NTQuNzhtLTMuMjYt" + "My4yODN2LS4zOTJoMy4yMTl2LjM5MnpNMjguNTc2IDIxLjgyNnYtLjM3aC4xODZxLjMwOC4wMjIuMjg2LS4yODJ2LTIuMjE4aC0uNDFxLjAyID" + "IuMDg2LS44NiAzLjAyM3YtLjU0M3EuMjY1LS41MjEuMzI3LTEuMDg3LjA4LS41NDIuMDgyLTEuOTE0di0uNTY1aC0uMzQ4di0uMzdoLjYzNlYx" + "N2guNTEzdi41aC41OTV2LjM3aC0uOTIydi43MTcwMDAwMDAwMDAwMDAxaC44NHYyLjU4N3EuMDIuNjc0LS42MTYuNjUyem0xLjA2Ny0zLjY1Mn" + "YtLjMwNHEuNDczLS4zMDQuNTEzLS44OTNoLjQ5MmExIDEgMCAwIDEtLjEyNC40MTNoMi4wMXYuMzQ3aC0yLjIxNnEtLjIwNC4yNjMtLjY3NS40" + "MzdtLjA2Mi41di0uMzI2aC4zODl2LS4zOWguNDkydi4zOWgxLjAyNnYtLjM5aC40OTJ2LjM5aC4zODl2LjMyNmgtLjM5djEuOTE0aC40NTJ2Lj" + "M0N2gtMi44OTF2LS4zNDdoLjQzdi0xLjkxNHptLS4wNDEgMy4zMDN2LS4yODJxLjU3NS0uMTk1LjcxNi0uNjA4aC40OTJxLS4yMjYuNzE3LTEu" + "MjA4Ljg5bS45MjItMy4zMDN2LjQxM2gxLjAyNnYtLjQxM3ptMCAuNzR2LjQzNWgxLjAyNnYtLjQzNXptMCAuNzZ2LjQxMmgxLjAyNnYtLjQxMn" + "ptMS45MjggMS44MDNxLS45NjQtLjE1Mi0xLjIxMS0uODkyaC41MTNxLjE0MS40MTMuNjk4LjYwOHpNMzQuNzIgMTcuNzM5di0uNDEzaDQuNzE2" + "di40MTNoLTIuMjE1djQuMTk1aC0uNTk1VjE3Ljc0em00LjQzIDIuNDEyYTkgOSAwIDAgMC0xLjcwMy0uOTc4di0uNDM1cS45NjUuMjgyIDEuNz" + "AzLjc4MnpNNDEuODA5IDIxLjgyNnYtMi4yNjFoMS45MDZ2MS42MXEuMDIyLjY3My0uNjU2LjY1MXptLjQ3MS0yLjgwNHYtMS44MjZoMy40MjV2" + "MS4wODZxLjAyMS43MzktLjcxOS43NHptLjAyIDIuNDEyaC42MzdxLjMwOC4wMi4yODYtLjMwNXYtMS4xNzRoLS45MjJ6bS40OTMtMi44MDVoMi" + "4wM3EuMzY5LjAyMy4zNDgtLjQxMnYtLjYzMWgtMi4zNzh6bTEuNDM1IDMuMTk3di0yLjI2MWgxLjkyOHYxLjYxcS4wMjEuNjczLS42MzcuNjUx" + "em0uNDkyLS4zOTJoLjY1N3EuMzI5LjAyLjMwNy0uMzA1di0xLjE3NGgtLjk2NHpNNDkuNjU2IDIxLjkxNFYxOS43NmgtLjQ3MXYuMjgycS4wNj" + "IgMS4zOTItLjcyIDEuOTM0di0uNDEzcS4yODctLjM5Mi4yNjktMS4zOXYtM2guNDV2MS4xOTRoLjQzdi0xLjMyNmguNDMxdjEuMzI2aC4yNDV2" + "LjM0N2gtMS4xMDh2LjY5N2guOTAydjIuNWgtLjQyOHptLjg0LTIuMjE4di0yLjMwNGguNzM3YTEuOCAxLjggMCAwIDAgLjEwMy0uNDEzaC41Mz" + "RxLS4wNjIuMjE3LS4xMjQuNDEzaDEuMjkxdjEuNjFxLjAyMi43MzgtLjYzNi42OTRoLS42NTdxLS4yNjYuNDM1LTEuMTQ5Ljg3aDEuMTd2LS42" + "NTJoLjQ5MnYuNjUyaDEuMDI1di4zN2gtMS4wMjV2MS4wMmgtLjQ5MnYtMS4wMmgtMS40OTd2LS4zN2guMzA3di0uMzI3cS40MjktLjI2Mi42NT" + "YtLjU0M3ptLjQzLTEuOTM1di41NjZoLjYxNnYtLjU2NnptMCAxLjU2NWguNTEzcS4xMDMtLjI2LjEwMy0uNjMxdi0uMDIzaC0uNjE1em0xLjM1" + "NCAwcS4zNDguMDIyLjMyNy0uMzd2LS4yODJoLS42MTZxLjAwMS4zOTItLjA4Mi42NTJ6bS4zMjctMS41NjVoLS42MTZ2LjU2NmguNjE2eiIvPj" + "xwYXRoIGZpbGw9IiNGMzk4MDAiIGQ9Ik0xLjM2MyA5LjI4NWMwLTEuMjEuOTkzLTIuMTk0IDIuMjEyLTIuMTk0czIuMjExLjk4NSAyLjIxMSAy" + "LjE5NC0uOTkgMi4xOTMtMi4yMTEgMi4xOTNhMi4yMDYgMi4yMDYgMCAwIDEtMi4yMTItMi4xOTNtNS4xMDUtMi4wOEEzLjU4IDMuNTggMCAwID" + "AgMy41NzUgNS43NEMxLjYwNSA1LjczOSAwIDcuMzMgMCA5LjI4NXMxLjYwNCAzLjU0NiAzLjU3NSAzLjU0NmMxLjk3IDAgMy41NzUtMS41OTEg" + "My41NzUtMy41NDZhMi4yMDUgMi4yMDUgMCAwIDEgMi4zNy0yLjE4OGMxLjA5LjA3NiAxLjk3Ljk1IDIuMDQ5IDIuMDMuMDkgMS4yODEtLjkzNS" + "AyLjM1MS0yLjIwNiAyLjM1MS0uMjA4IDAtLjQxNi0uMDI4LS42MTMtLjA4NWEuNjc3LjY3NyAwIDEgMC0uMzc1IDEuMzAxYy4zMjEuMDkyLjY1" + "My4xMzcuOTg4LjEzNyAyLjAyOSAwIDMuNjY4LTEuNjgzIDMuNTcxLTMuNzE2LS4wODQtMS44MTYtMS41NzEtMy4yODYtMy40LTMuMzcycS0uMD" + "g1LS4wMDMtLjE3LS4wMDRjLTEuMTkgMC0yLjI0NS41NzgtMi44OTYgMS40NjciLz48cGF0aCBmaWxsPSIjRjM5ODAwIiBkPSJNMy4zMzggMEMx" + "Ljg3OCAwIC42NTggMS4xODUuNjgyIDIuNjM1LjcwNyA0LjA0MiAxLjg2OCA1LjE4IDMuMjkzIDUuMThoMS43ODFjLjM3NSAwIC42OTgtLjI5Mi" + "43MDUtLjY2NGEuNjc3LjY3NyAwIDAgMC0uNjgyLS42ODhIMy4zMjRjLS42NzUgMC0xLjI1Mi0uNTItMS4yNzctMS4xOWExLjI0IDEuMjQgMCAw" + "IDEgMS4yNDYtMS4yODRoNi4zMmMuNjc1IDAgMS4yNS41MTkgMS4yNzcgMS4xODlhMS4yNDQgMS4yNDQgMCAwIDEtMS4yNDYgMS4yODVINy42ND" + "ZhLjcxLjcxIDAgMCAwLS42NjcuNDYzbC0uNTYgMS41MjJjLS4wMzkuMTA2LjEwMy4xODIuMTczLjA5NGwuMzQ2LS40NWEuNzEuNzEgMCAwIDEg" + "LjU2NC0uMjc1SDkuNmMxLjQ2MiAwIDIuNjgtMS4xODUgMi42NTYtMi42MzVBMi42MDUgMi42MDUgMCAwIDAgOS42NDQgMHoiLz48cGF0aCBmaW" + "xsPSIjRkZGIiBkPSJNNDMuMzg3IDkuNTdINDIuMTVjLS4wMiAwLS4wNC4wMTUtLjA0My4wMzYtLjIyNS45MDItLjQ5NyAxLjY1LS44MSAyLjIy" + "NC0uMDE2LjAzLjAwNy4wNjMuMDQuMDYzaDEuMzFxLjAyNy0uMDAyLjA0LS4wMjRhOS40IDkuNCAwIDAgMCAuNzQ0LTIuMjQxYy4wMDQtLjAyOS" + "0uMDE3LS4wNTctLjA0NS0uMDU3TTUwLjk4IDEwLjUyNWwtMS4zNjQtLjAyMi0uMDEzLjQyN2MtLjAxLjE4LS4wMTYuMzA0LS4xLjM5NnEtLjEz" + "Ny4xNDktLjQzNS4xNS0uMDU2LS4wMDEtLjExLS4wMDVoLTIuNDk1cS0uMDYuMDA0LS4xMTEuMDA0Yy0uMjg5IDAtLjUwNS0uMDcxLS42MzktLj" + "IxNC0uMTI3LS4xMzUtLjE4My0uMzM1LS4xNjctLjU4OVY5LjYxOGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDRoLTEuNDA2YS4wNDYuMDQ2IDAg" + "MCAwLS4wNDYuMDQ0djEuMjI0Yy0uMDE2LjQ3LjA5Ny44MzMuMzMyIDEuMDc0LjI2MS4yNjguNjg0LjQwMyAxLjI1Ni40MDNsLjExMy0uMDAyaD" + "MuNzQybC4xMDMuMDAycS43MjIgMCAxLjA2Ny0uMzU0LjM0My0uMzUzLjMxOS0xLjA3NHoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNNDguNDcz" + "IDkuNTdoLTEuNDU4YS4wNDQuMDQ0IDAgMCAwLS4wNDMuMDU4Yy4xMTcuMzg4LjIyNC43NjQuMzE1IDEuMTE3LjAwNC4wMi4wMjIuMDMzLjA0My" + "4wMzNoMS41OTZjLjAzIDAgLjA1MS0uMDMuMDQzLS4wNi0uMTUyLS40OTItLjMwNy0uODctLjQ1Ny0xLjEyN2EuMDUuMDUgMCAwIDAtLjA0LS4w" + "Mk01Mi40NiA5LjU5OGEuMDUuMDUgMCAwIDAtLjA0LS4wMjRoLTEuMjI2YS4wNDQuMDQ0IDAgMCAwLS4wNDEuMDZjLjMxMy43NDIuNTQgMS40OS" + "42NzUgMi4yMjUuMDA1LjAyLjAyMy4wMzcuMDQ0LjAzN2gxLjM4OGEuMDQ2LjA0NiAwIDAgMCAuMDQ1LS4wNTUgOS42IDkuNiAwIDAgMC0uODQ0" + "LTIuMjQzTTMxLjEyOCA1LjY0MWg1LjcyOWwuMDk4LjAwMmMuNTcgMCAxLjAwMy0uMTQ1IDEuMjg1LS40MzMuMjk5LS4zMDQuNDQzLS43OC40Mj" + "UtMS40MTdWMS4xMzlhLjA0Ni4wNDYgMCAwIDAtLjA0Ni0uMDQ1aC02Ljk2NGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuOTY0YzAgLjAyNS4w" + "Mi4wNDUuMDQ1LjA0NWg1LjM2Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDV2MS41OXEuMDI5LjQ0OC0uMTc3LjY2Ny0uMTgxLjE5MS0uNTM3LjE5Mm" + "wtLjA5My0uMDA0aC00LjYwNmEuNS41IDAgMCAxLS41MDMtLjQ5OHYtM2EuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDZoLTEuNTE0YS4wNDYuMDQ2" + "IDAgMCAwLS4wNDUuMDQ1djIuOTNjLjAwMi44NjcuNzEgMS41NzIgMS41ODggMS41NzJNMzMuNDM3IDYuNzY0aC00Ljk3M2EuMDQ2LjA0NiAwID" + "AgMC0uMDQ1LjA0NXYzLjk4N2MwIC44NC42ODYgMS41MjIgMS41MzQgMS41MjJoMS43NzNsLjEwNS4wMDJxLjg2NyAwIDEuMjc3LS40MTljLjI2" + "My0uMjcuMzg5LS42OC4zNzMtMS4yMjFWNi44MWMuMDAyLS4wMjUtLjAxOS0uMDQ2LS4wNDQtLjA0Nm0tMS4zNDQgMy45MWMwIC41MjMtLjI2Mi" + "44LS43NTQuOGgtLjk3MmEuNTYuNTYgMCAwIDEtLjU2LS41NTVWNy44MWMwLS4wMjQuMDItLjA0NS4wNDUtLjA0NWgyLjE5M2MuMDI1IDAgLjA0" + "Ni4wMi4wNDYuMDQ1djIuODY0ek0zOS43NTIgNi43NjRoLTMuOTY4bC0xLjEyMi0uMDFhLjA0Ni4wNDYgMCAwIDAtLjA0Ni4wNDV2NC4wMDVjMC" + "AuODM1LjY4MiAxLjUxMSAxLjUyNCAxLjUxMWgxLjk0NGwuMTAzLjAwM2MuNTUgMCAuOTY0LS4xMzcgMS4yMjctLjQwN3MuMzktLjY4NC4zNzMt" + "MS4yMzJsLjAxLTMuODdhLjA0Ni4wNDYgMCAwIDAtLjA0NS0uMDQ1bS0xLjU3MSA0LjU0N3EtLjE1OS4xNjYtLjQ1My4xNjctLjA0NSAwLS4wOD" + "UtLjAwNGgtLjk0YS42OS42OSAwIDAgMS0uNjk3LS42OVY3LjgxYzAtLjAyNS4wMi0uMDQ1LjA0Ni0uMDQ1aDIuMjQ2Yy4wMjUgMCAuMDQ1LjAy" + "LjA0NS4wNDV2Mi44NnEuMDI5LjQzOC0uMTYyLjY0TTQyLjAyIDcuNTQ3aDcuODAzYy4xNjEgMCAuMjg3LS4xMjkuMjg3LS4yODJ2LS4yNDdhLj" + "A0Ni4wNDYgMCAwIDAtLjA0Ni0uMDQ1bC04LjA0My0uMDIyYS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di41MWMwIC4wMi4wMi4wNDEuMDQ1LjA0" + "MSIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik00MS42ODggNC45aDEuODg0Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDR2LjYxYzAgLjAyNC0uMDIuMD" + "Q0LS4wNDUuMDQ0aC0xLjU1YS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ1di41OTJjMCAuMDI1LjAyLjA0NS4wNDYuMDQ1aDguNzU1Yy4wMjUgMCAu" + "MDQ2LjAyLjA0Ni4wNDV2MS4xNzljLjAwMi4yNzYtLjA3Mi40OTQtLjIxMi42MzVhLjU4LjU4IDAgMCAxLS40ODguMTYxaC04LjEwMWEuMDQ2Lj" + "A0NiAwIDAgMC0uMDQ2LjA0NXYuNjk1YzAgLjAyNC4wMi4wNDUuMDQ2LjA0NWg4LjcwMmwuMDk1LjAwMmMuNDk0IDAgLjg2OS0uMTI5IDEuMTE2" + "LS4zOC4yNzItLjI3OC40MDEtLjcyLjM4My0xLjMxMXYtMS43NWEuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDZoLTEuMjRhLjA0Ni4wNDYgMCAwID" + "EtLjA0NS0uMDQ1VjVjMC0uMDI1LjAyLS4wNDUuMDQ1LS4wNDVoMS45OTNjLjAyNSAwIC4wNDYtLjAyLjA0Ni0uMDQ1di0uNjk1YS4wNDYuMDQ2" + "IDAgMCAwLS4wNDYtLjA0NWgtMS45OTNhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1di0uNjYxYzAtLjAyNS4wMi0uMDQ1LjA0NS0uMDQ1aDEuOT" + "kzYy4wMjUgMCAuMDQ2LS4wMi4wNDYtLjA0NXYtLjY5NWEuMDQ2LjA0NiAwIDAgMC0uMDQ2LS4wNDVoLTEuOTkzYS4wNDYuMDQ2IDAgMCAxLS4w" + "NDUtLjA0NXYtLjYxMmMwLS4wMjUuMDItLjA0NS4wNDUtLjA0NWgxLjk5M2MuMDI1IDAgLjA0Ni0uMDIuMDQ2LS4wNDV2LS42OTVhLjA0Ni4wND" + "YgMCAwIDAtLjA0Ni0uMDQ1aC0xLjk5M2EuMDQ2LjA0NiAwIDAgMS0uMDQ1LS4wNDRWLjYxYS4wNDYuMDQ2IDAgMCAwLS4wNDYtLjA0NWgtMS4z" + "YS4wNDYuMDQ2IDAgMCAwLS4wNDQuMDQ1di40OTNjMCAuMDI0LS4wMjEuMDQ0LS4wNDYuMDQ0SDQ3Ljc4YS4wNDYuMDQ2IDAgMCAwLS4wNDUuMD" + "Q1di42OTVjMCAuMDI0LjAyLjA0NS4wNDUuMDQ1aDEuNzczYy4wMjUgMCAuMDQ2LjAyLjA0Ni4wNDV2LjYwOGMwIC4wMjUtLjAyMS4wNDUtLjA0" + "Ni4wNDVINDcuNzhhLjA0Ni4wNDYgMCAwIDAtLjA0NS4wNDV2LjY5NWMwIC4wMjQuMDIuMDQ1LjA0NS4wNDVoMS43NzNjLjAyNSAwIC4wNDYuMD" + "IuMDQ2LjA0NXYuNjYxYzAgLjAyNS0uMDIxLjA0NS0uMDQ2LjA0NUg0Ny43OGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuNjk1YzAgLjAyNC4w" + "Mi4wNDUuMDQ1LjA0NWgxLjc3M2MuMDI1IDAgLjA0Ni4wMi4wNDYuMDQ1di41NTVjMCAuMDI1LS4wMjEuMDQ1LS4wNDYuMDQ1aC00LjU1NWEuMD" + "Q2LjA0NiAwIDAgMS0uMDQ1LS4wNDV2LS42MDljMC0uMDI0LjAyLS4wNDQuMDQ1LS4wNDRoMS44MjdjLjAyNCAwIC4wNDUtLjAyLjA0NS0uMDQ1" + "di0uNjk1YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWgtMS44MjdhLjA0Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1VjMuNDZjMC0uMDI1LjAyLS4wND" + "UuMDQ1LS4wNDVoMS44MjdjLjAyNCAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uNjk1YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWgtMS44MjdhLjA0" + "Ni4wNDYgMCAwIDEtLjA0NS0uMDQ1di0uNjA4YzAtLjAyNS4wMi0uMDQ1LjA0NS0uMDQ1aDEuODI3Yy4wMjQgMCAuMDQ1LS4wMi4wNDUtLjA0NX" + "YtLjY5NWEuMDQ2LjA0NiAwIDAgMC0uMDQ1LS4wNDVoLTEuODI3YS4wNDYuMDQ2IDAgMCAxLS4wNDUtLjA0NFYuNjFhLjA0Ni4wNDYgMCAwIDAt" + "LjA0NS0uMDQ1SDQzLjY2YS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ1di40OTNjMCAuMDI0LS4wMi4wNDQtLjA0NS4wNDRoLTEuODg0YS4wNDYuMD" + "Q2IDAgMCAwLS4wNDUuMDQ1di42OTVjMCAuMDI0LjAyLjA0NS4wNDUuMDQ1aDEuODg0Yy4wMjUgMCAuMDQ1LjAyLjA0NS4wNDV2LjYwOGMwIC4w" + "MjUtLjAyLjA0NS0uMDQ1LjA0NWgtMS44ODRhLjA0Ni4wNDYgMCAwIDAtLjA0NS4wNDV2LjY5NWMwIC4wMjQuMDIuMDQ1LjA0NS4wNDVoMS44OD" + "RjLjAyNSAwIC4wNDUuMDIuMDQ1LjA0NXYuNjA4YzAgLjAyNS0uMDIuMDQ1LS4wNDUuMDQ1aC0xLjg4NGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0" + "NXYuNjk1Yy4wMDIuMDI2LjAyMi4wNDcuMDQ3LjA0N00yNi45OTggMTEuNDJoLTMuMDE2Yy0uMDMxIDAtLjA1Ni0uMDMtLjA0LS4wNmEzLjQgMy" + "40IDAgMCAwIC4yOTctLjgzOC4wNDUuMDQ1IDAgMCAwLS4wNDUtLjA1M0gyMi42NGEuMDQ2LjA0NiAwIDAgMC0uMDQ1LjAzOWMtLjExNi42MDIt" + "LjIxNy44MjMtLjI1Ni44OTJhLjA0LjA0IDAgMCAxLS4wMzkuMDIzaC0yLjg0NmEuMDQuMDQgMCAwIDEtLjAzOS0uMDIzYy0uMDM5LS4wNjctLj" + "E0LS4yOTQtLjI1NS0uODkyLS4wMDQtLjAyLS4wMjMtLjA0LS4wNDUtLjA0aC0xLjU1M2MtLjAyOSAwLS4wNTIuMDI1LS4wNDUuMDU0LjA2LjMz" + "Ny4yMjQuNjk2LjI5Ni44MzcuMDE3LjAzLS4wMDguMDYyLS4wMzkuMDYyaC0zLjAxN2EuMDQ2LjA0NiAwIDAgMC0uMDQ1LjA0NXYuNzVjMCAuMD" + "I0LjAyLjA0NC4wNDUuMDQ0aDEyLjI0Yy4wMjUgMCAuMDQ2LS4wMi4wNDYtLjA0NXYtLjc1YS4wNDYuMDQ2IDAgMCAwLS4wNDYtLjA0NE0xNC44" + "NjQgMi4wNDJoNS4xMzVjLjAyNSAwIC4wNDYuMDIuMDQ2LjA0NXYuNzY2YzAgLjAyNS0uMDIuMDQ1LS4wNDYuMDQ1aC00LjEyYS4wNDYuMDQ2ID" + "AgMCAwLS4wNDUuMDQ1di43NWMwIC4wMjQuMDIuMDQ1LjA0NS4wNDVoOS45OTNjLjAyNSAwIC4wNDYtLjAyLjA0Ni0uMDQ1VjIuOTRhLjA0Ni4w" + "NDYgMCAwIDAtLjA0Ni0uMDQ1aC00LjE3NGEuMDQ2LjA0NiAwIDAgMS0uMDQ1LS4wNDV2LS43NjZjMC0uMDI0LjAyLS4wNDUuMDQ1LS4wNDVoNS" + "4xMzZjLjAyNSAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uODAyYS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWgtNS4xMzZhLjA0Ni4wNDYgMCAwIDEt" + "LjA0NS0uMDQ1Vi41NTdhLjA0Ni4wNDYgMCAwIDAtLjA0NS0uMDQ1aC0xLjUyYS4wNDYuMDQ2IDAgMCAwLS4wNDUuMDQ1di41NDZjMCAuMDI0LS" + "4wMi4wNDUtLjA0Ni4wNDVoLTUuMTMzYS4wNDYuMDQ2IDAgMCAwLS4wNDYuMDQ1di44MDJjLjAwMi4wMjcuMDIxLjA0Ny4wNDYuMDQ3TTI2Ljgy" + "OSA2LjMzNVY1LjUxYzAtLjU5NS0uNDg2LTEuMDc3LTEuMDg2LTEuMDc3SDE1Ljk2Yy0uNiAwLTEuMDg1LjQ4NC0xLjA4NSAxLjA3N2wtLjAxMy" + "44MjVjMCAuMDI3LjAyLjA0OS4wNDguMDQ5bDEuNTIuMDEyYy4wMjYgMCAuMDQ5LS4wMi4wNDktLjA0OXYtLjU4YzAtLjI3NC4yMjItLjQ5NC40" + "OTgtLjQ5NGg3Ljc4YS41Mi41MiAwIDAgMSAuNTIxLjUxN2wtLjAxMi41NDNjMCAuMDI2LjAyLjA0OS4wNDkuMDQ5aDEuNDY2Yy4wMjUgMCAuMD" + "Q4LS4wMi4wNDgtLjA0NyIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNC41MzkgNi43NTdjLjAyNCAwIC4wNDUtLjAyLjA0NS0uMDQ1di0uNjQ2" + "YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NGgtNy4zNzdhLjA0Ni4wNDYgMCAwIDAtLjA0NS4wNDR2LjY0NmMwIC4wMjQuMDIuMDQ1LjA0NS4wND" + "V6TTE2LjAyNyA3LjQ4M3YxLjEzMmMtLjAzMi41MTMuMDcuOS4zMSAxLjE1Mi4yMzYuMjUxLjYxNy4zNzggMS4xMy4zNzhsLjEwNS0uMDAyaDYu" + "NTZsLjEwNC4wMDJjLjUxMiAwIC44OTMtLjEyNyAxLjEzLS4zNzguMjM5LS4yNTEuMzQyLS42NC4zMDktMS4xNTZWNy40OTZhLjA0Ni4wNDYgMC" + "AwIDAtLjA0NS0uMDQ1aC03LjY0OGEuMDQ2LjA0NiAwIDAgMC0uMDQ2LjA0NXYuNjk4YzAgLjAyNS4wMjEuMDQ1LjA0Ni4wNDVoNi4xNDdjLjA1" + "NyAwIC4xMDMuMDQ1LjEwMy4xMDJ2LjQyMXEuMDI3LjI2OC0uMTEyLjQxOS0uMTYxLjE3NS0uNTM1LjE3NWgtNS40NjdxLS4zNzUgMC0uNTM2LS" + "4xNzVjLS4wOS0uMS0uMTI3LS4yNDEtLjExMS0uNDEzVjcuNDk2YS4wNDYuMDQ2IDAgMCAwLS4wNDUtLjA0NWwtMS4zNTMtLjAxM2EuMDQ2LjA0" + "NiAwIDAgMC0uMDQ2LjA0NSIvPjwvZz48L3N2Zz4=";
|
|
@@ -16,10 +16,29 @@ import SecondSidebar from "./SecondSidebar";
|
|
|
16
16
|
import MoreMenuDrawer from "./MoreMenuDrawer";
|
|
17
17
|
import CustomNavPanel from "./CustomNavPanel";
|
|
18
18
|
import { resolveMenuIcons } from "./menuIconMap";
|
|
19
|
+
import { DEFAULT_LOGO } from "./default-logo";
|
|
19
20
|
import "./index.scss";
|
|
21
|
+
|
|
22
|
+
// 反查表:任意叶子菜单 key -> 所属一级业务菜单 key(选中二级时同步高亮一级)
|
|
20
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
21
24
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
25
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
26
|
+
function buildLeafToFirstKeyMap(menus) {
|
|
27
|
+
var map = new Map();
|
|
28
|
+
var walk = function walk(items, firstKey) {
|
|
29
|
+
(items || []).forEach(function (item) {
|
|
30
|
+
var _item$children;
|
|
31
|
+
map.set(item.key, firstKey);
|
|
32
|
+
if ((_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length) walk(item.children, firstKey);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
(menus || []).forEach(function (menu) {
|
|
36
|
+
var _menu$children;
|
|
37
|
+
map.set(menu.key, menu.key);
|
|
38
|
+
if ((_menu$children = menu.children) !== null && _menu$children !== void 0 && _menu$children.length) walk(menu.children, menu.key);
|
|
39
|
+
});
|
|
40
|
+
return map;
|
|
41
|
+
}
|
|
23
42
|
function DefaultFallback() {
|
|
24
43
|
return /*#__PURE__*/_jsx("div", {
|
|
25
44
|
className: "company-sidebar-error",
|
|
@@ -35,7 +54,8 @@ export default function CompanySidebar(_ref) {
|
|
|
35
54
|
currentDomainId = _ref.currentDomainId,
|
|
36
55
|
onDomainChange = _ref.onDomainChange,
|
|
37
56
|
userInfo = _ref.userInfo,
|
|
38
|
-
logo = _ref.logo,
|
|
57
|
+
_ref$logo = _ref.logo,
|
|
58
|
+
logo = _ref$logo === void 0 ? DEFAULT_LOGO : _ref$logo,
|
|
39
59
|
brandName = _ref.brandName,
|
|
40
60
|
firstMenus = _ref.firstMenus,
|
|
41
61
|
systemBottomMenus = _ref.systemBottomMenus,
|
|
@@ -50,7 +70,7 @@ export default function CompanySidebar(_ref) {
|
|
|
50
70
|
activeFirstMenu = _ref.activeFirstMenu,
|
|
51
71
|
activeKey = _ref.activeKey,
|
|
52
72
|
onFirstMenuSelect = _ref.onFirstMenuSelect,
|
|
53
|
-
|
|
73
|
+
onMenuClick = _ref.onMenuClick,
|
|
54
74
|
expandedKeys = _ref.expandedKeys,
|
|
55
75
|
onExpandedKeysChange = _ref.onExpandedKeysChange,
|
|
56
76
|
secondSidebarFixed = _ref.secondSidebarFixed,
|
|
@@ -82,6 +102,20 @@ export default function CompanySidebar(_ref) {
|
|
|
82
102
|
var resolvedCustomNavMenus = useMemo(function () {
|
|
83
103
|
return resolveMenuIcons(customNavMenus);
|
|
84
104
|
}, [customNavMenus]);
|
|
105
|
+
|
|
106
|
+
// 叶子 key -> 一级菜单 key 反查表(业务菜单树全量)
|
|
107
|
+
var leafToFirstKeyMap = useMemo(function () {
|
|
108
|
+
return buildLeafToFirstKeyMap(businessMenus);
|
|
109
|
+
}, [businessMenus]);
|
|
110
|
+
|
|
111
|
+
// 内部统一的叶子菜单点击处理:命中业务菜单时同步 activeFirstMenu,保证一级导航同步高亮
|
|
112
|
+
var handleLeafMenuClick = useCallback(function (menu) {
|
|
113
|
+
var firstKey = leafToFirstKeyMap.get(menu.key);
|
|
114
|
+
if (firstKey && firstKey !== activeFirstMenu) {
|
|
115
|
+
onFirstMenuSelect(firstKey);
|
|
116
|
+
}
|
|
117
|
+
onMenuClick(menu);
|
|
118
|
+
}, [leafToFirstKeyMap, activeFirstMenu, onFirstMenuSelect, onMenuClick]);
|
|
85
119
|
useEffect(function () {
|
|
86
120
|
setState(function (prev) {
|
|
87
121
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
@@ -131,19 +165,22 @@ export default function CompanySidebar(_ref) {
|
|
|
131
165
|
delayHideSidebar();
|
|
132
166
|
}, [delayHideSidebar]);
|
|
133
167
|
var handleFirstMenuClick = useCallback(function (menu) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
168
|
+
var firstKey = leafToFirstKeyMap.get(menu.key) || menu.key;
|
|
169
|
+
if (firstKey !== activeFirstMenu) {
|
|
170
|
+
onFirstMenuSelect(firstKey);
|
|
171
|
+
}
|
|
172
|
+
onMenuClick(menu);
|
|
173
|
+
}, [leafToFirstKeyMap, activeFirstMenu, onFirstMenuSelect, onMenuClick]);
|
|
137
174
|
var handleMoreSelect = useCallback(function (menu, child) {
|
|
138
175
|
var target = child || menu;
|
|
139
176
|
onFirstMenuSelect(menu.key);
|
|
140
|
-
|
|
177
|
+
onMenuClick(target);
|
|
141
178
|
setState(function (prev) {
|
|
142
179
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
143
180
|
moreDrawerOpen: false
|
|
144
181
|
});
|
|
145
182
|
});
|
|
146
|
-
}, [onFirstMenuSelect,
|
|
183
|
+
}, [onFirstMenuSelect, onMenuClick]);
|
|
147
184
|
var handleOpenCustomNav = useCallback(function () {
|
|
148
185
|
setState(function (prev) {
|
|
149
186
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
@@ -190,6 +227,7 @@ export default function CompanySidebar(_ref) {
|
|
|
190
227
|
businessMenus: resolvedBusinessMenus,
|
|
191
228
|
customNavMenus: resolvedCustomNavMenus,
|
|
192
229
|
activeKey: activeKey,
|
|
230
|
+
activeFirstMenu: activeFirstMenu,
|
|
193
231
|
visibleMenuCount: visibleMenuCount,
|
|
194
232
|
domainPopoverOpen: state.domainPopoverOpen,
|
|
195
233
|
adminPopoverOpen: state.adminPopoverOpen,
|
|
@@ -230,7 +268,7 @@ export default function CompanySidebar(_ref) {
|
|
|
230
268
|
expandedKeys: state.localExpandedKeys,
|
|
231
269
|
emptyImage: emptyImage,
|
|
232
270
|
onMenuClick: function onMenuClick(menu) {
|
|
233
|
-
|
|
271
|
+
handleLeafMenuClick(menu);
|
|
234
272
|
if (!secondSidebarFixed) {
|
|
235
273
|
delayHideSidebar();
|
|
236
274
|
}
|
|
@@ -7,6 +7,8 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
7
7
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
8
8
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
9
9
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
10
|
+
import { iconNames } from "../../shared-components/SvgIcon/icons";
|
|
11
|
+
var VALID_ICONS = new Set(iconNames);
|
|
10
12
|
var KEYWORD_ICON_MAP = [{
|
|
11
13
|
keywords: ["商品", "货品", "物料", "spu", "sku", "product"],
|
|
12
14
|
icon: "commodity"
|
|
@@ -67,7 +69,12 @@ var KEYWORD_ICON_MAP = [{
|
|
|
67
69
|
}];
|
|
68
70
|
var DEFAULT_ICON = "folder-open";
|
|
69
71
|
export function getMenuIcon(menu) {
|
|
70
|
-
if (menu.icon)
|
|
72
|
+
if (menu.icon) {
|
|
73
|
+
if (VALID_ICONS.has(menu.icon)) return menu.icon;
|
|
74
|
+
if (process.env.NODE_ENV !== "production") {
|
|
75
|
+
console.warn("[CompanySidebar] \u83DC\u5355 \"".concat(menu.label, "\" \u7684 icon \"").concat(menu.icon, "\" \u4E0D\u5728\u5185\u7F6E\u56FE\u6807\u96C6\u4E2D\uFF0C\u5DF2\u56DE\u9000\u4E3A\u5173\u952E\u8BCD\u5339\u914D\u3002\u5185\u7F6E\u56FE\u6807\u952E\u53EF\u67E5\u9605\u6587\u6863\u7AD9 /icon-library \u7CBE\u9009\u96C6\u3002"));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
71
78
|
var label = (menu.label || "").toLowerCase();
|
|
72
79
|
var _iterator = _createForOfIteratorHelper(KEYWORD_ICON_MAP),
|
|
73
80
|
_step;
|
|
@@ -171,6 +171,9 @@
|
|
|
171
171
|
justify-content: flex-end;
|
|
172
172
|
padding: calc(var(--spacing-md, 16) * 1px);
|
|
173
173
|
border-top: 1px solid var(--color-border-secondary, rgba(5, 5, 5, 0.06));
|
|
174
|
+
|
|
175
|
+
/* 吸底:表格高度由 scroll.y 控制不一定填满 wrapper,margin-top:auto 保证分页器始终贴白卡底部(对齐 SmartListTemplate 视觉契约) */
|
|
176
|
+
margin-top: auto;
|
|
174
177
|
}
|
|
175
178
|
}
|
|
176
179
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@donglegeyu/company-ui",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.40",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/es/index.js",
|
|
6
6
|
"types": "dist/es/index.d.ts",
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"test:run": "vitest run",
|
|
32
32
|
"test:coverage": "vitest run --coverage",
|
|
33
33
|
"prepare": "husky",
|
|
34
|
-
"prepublishOnly": "bash scripts/check-clean.sh && npm run build"
|
|
34
|
+
"prepublishOnly": "bash scripts/check-clean.sh && npm run build",
|
|
35
|
+
"verify:skill-examples": "node scripts/verify-skill-examples.mjs"
|
|
35
36
|
},
|
|
36
37
|
"keywords": [
|
|
37
38
|
"antd",
|