@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.
Files changed (27) hide show
  1. package/dist/cjs/shared-components/SvgIcon/index.js +10 -1
  2. package/dist/cjs/template-components/AdminLayoutTemplate/index.d.ts +1 -1
  3. package/dist/cjs/template-components/AdminLayoutTemplate/index.js +11 -14
  4. package/dist/cjs/template-components/AdminLayoutTemplate/index.scss +2 -0
  5. package/dist/cjs/template-components/CompanySidebar/FirstSidebar.d.ts +2 -1
  6. package/dist/cjs/template-components/CompanySidebar/FirstSidebar.js +2 -1
  7. package/dist/cjs/template-components/CompanySidebar/default-logo.d.ts +2 -0
  8. package/dist/cjs/template-components/CompanySidebar/default-logo.js +29 -0
  9. package/dist/cjs/template-components/CompanySidebar/index.js +38 -4
  10. package/dist/cjs/template-components/CompanySidebar/menuIconMap.js +11 -2
  11. package/dist/cjs/template-components/DetailPageTemplate/index.scss +1 -0
  12. package/dist/cjs/template-components/FormPageTemplate/index.scss +1 -0
  13. package/dist/cjs/template-components/StatisticsListPage/index.scss +3 -0
  14. package/dist/es/shared-components/SvgIcon/index.js +12 -0
  15. package/dist/es/template-components/AdminLayoutTemplate/index.d.ts +1 -1
  16. package/dist/es/template-components/AdminLayoutTemplate/index.js +13 -1
  17. package/dist/es/template-components/AdminLayoutTemplate/index.scss +2 -0
  18. package/dist/es/template-components/CompanySidebar/FirstSidebar.d.ts +2 -1
  19. package/dist/es/template-components/CompanySidebar/FirstSidebar.js +2 -1
  20. package/dist/es/template-components/CompanySidebar/default-logo.d.ts +2 -0
  21. package/dist/es/template-components/CompanySidebar/default-logo.js +2 -0
  22. package/dist/es/template-components/CompanySidebar/index.js +46 -8
  23. package/dist/es/template-components/CompanySidebar/menuIconMap.js +8 -1
  24. package/dist/es/template-components/DetailPageTemplate/index.scss +1 -0
  25. package/dist/es/template-components/FormPageTemplate/index.scss +1 -0
  26. package/dist/es/template-components/StatisticsListPage/index.scss +3 -0
  27. 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
- const icon = key ? (0, import_icons.getIconDefinition)(key) : void 0;
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 图片地址(如 "/logo-dl.svg" */
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,2 @@
1
+ /** 内置默认 Logo(logo-dl.svg 经 svgo 压缩为 data URI,随 npm 包分发,零网络请求) */
2
+ export declare const DEFAULT_LOGO: string;
@@ -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
- onFirstMenuSelect(menu.key);
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
- onMenuClick(menu);
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
- return menu.icon;
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()))) {
@@ -1,4 +1,5 @@
1
1
  .detail-page-template {
2
+ box-sizing: border-box; /* 消费方项目未必有全局 border-box reset,模板自持,防止 padding 撑破 inset:0 宽度 */
2
3
  position: absolute;
3
4
  inset: 0;
4
5
  width: 100%;
@@ -1,4 +1,5 @@
1
1
  .form-page-template {
2
+ box-sizing: border-box; /* 消费方项目未必有全局 border-box reset,模板自持,防止 padding 撑破 inset:0 宽度 */
2
3
  position: absolute;
3
4
  inset: 0;
4
5
  width: 100%;
@@ -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 图片地址(如 "/logo-dl.svg" */
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 declare const DEFAULT_LOGO: string;
@@ -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
- _onMenuClick = _ref.onMenuClick,
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
- onFirstMenuSelect(menu.key);
135
- _onMenuClick(menu);
136
- }, [onFirstMenuSelect, _onMenuClick]);
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
- _onMenuClick(target);
177
+ onMenuClick(target);
141
178
  setState(function (prev) {
142
179
  return _objectSpread(_objectSpread({}, prev), {}, {
143
180
  moreDrawerOpen: false
144
181
  });
145
182
  });
146
- }, [onFirstMenuSelect, _onMenuClick]);
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
- _onMenuClick(menu);
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) return 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;
@@ -1,4 +1,5 @@
1
1
  .detail-page-template {
2
+ box-sizing: border-box; /* 消费方项目未必有全局 border-box reset,模板自持,防止 padding 撑破 inset:0 宽度 */
2
3
  position: absolute;
3
4
  inset: 0;
4
5
  width: 100%;
@@ -1,4 +1,5 @@
1
1
  .form-page-template {
2
+ box-sizing: border-box; /* 消费方项目未必有全局 border-box reset,模板自持,防止 padding 撑破 inset:0 宽度 */
2
3
  position: absolute;
3
4
  inset: 0;
4
5
  width: 100%;
@@ -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.38",
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",