aldehyde 0.2.440 → 0.2.442

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 (79) hide show
  1. package/lib/hooks/use-tabs/index.d.ts.map +1 -1
  2. package/lib/hooks/use-tabs/index.js +15 -10
  3. package/lib/hooks/use-tabs/index.js.map +1 -1
  4. package/lib/layout2/header.d.ts +1 -0
  5. package/lib/layout2/header.d.ts.map +1 -1
  6. package/lib/layout2/header.js +2 -2
  7. package/lib/layout2/header.js.map +1 -1
  8. package/lib/layout2/page.d.ts +3 -1
  9. package/lib/layout2/page.d.ts.map +1 -1
  10. package/lib/layout2/page.js +36 -6
  11. package/lib/layout2/page.js.map +1 -1
  12. package/lib/layout2/tabs/tabs-context.d.ts +4 -0
  13. package/lib/layout2/tabs/tabs-context.d.ts.map +1 -1
  14. package/lib/layout2/tabs/tabs-context.js +3 -0
  15. package/lib/layout2/tabs/tabs-context.js.map +1 -1
  16. package/lib/layout2/tabs/tabs-layout.d.ts.map +1 -1
  17. package/lib/layout2/tabs/tabs-layout.js +3 -10
  18. package/lib/layout2/tabs/tabs-layout.js.map +1 -1
  19. package/lib/layout3/components/tabs-layout.d.ts.map +1 -1
  20. package/lib/layout3/components/tabs-layout.js +3 -10
  21. package/lib/layout3/components/tabs-layout.js.map +1 -1
  22. package/lib/layout3/header.d.ts +1 -0
  23. package/lib/layout3/header.d.ts.map +1 -1
  24. package/lib/layout3/header.js +2 -2
  25. package/lib/layout3/header.js.map +1 -1
  26. package/lib/layout3/page.d.ts.map +1 -1
  27. package/lib/layout3/page.js +18 -7
  28. package/lib/layout3/page.js.map +1 -1
  29. package/lib/layout4/components/tabs-layout.d.ts.map +1 -1
  30. package/lib/layout4/components/tabs-layout.js +3 -10
  31. package/lib/layout4/components/tabs-layout.js.map +1 -1
  32. package/lib/layout4/header.d.ts +1 -0
  33. package/lib/layout4/header.d.ts.map +1 -1
  34. package/lib/layout4/header.js +2 -2
  35. package/lib/layout4/header.js.map +1 -1
  36. package/lib/layout4/page.d.ts.map +1 -1
  37. package/lib/layout4/page.js +18 -7
  38. package/lib/layout4/page.js.map +1 -1
  39. package/lib/layout5/page.d.ts.map +1 -1
  40. package/lib/layout5/page.js +18 -7
  41. package/lib/layout5/page.js.map +1 -1
  42. package/lib/layout5/sider.d.ts +1 -0
  43. package/lib/layout5/sider.d.ts.map +1 -1
  44. package/lib/layout5/sider.js +2 -2
  45. package/lib/layout5/sider.js.map +1 -1
  46. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.d.ts.map +1 -1
  47. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js +2 -6
  48. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js.map +1 -1
  49. package/lib/table/act-table.js +2 -1
  50. package/lib/table/act-table.js.map +1 -1
  51. package/lib/tmpl/interface.d.ts +1 -0
  52. package/lib/tmpl/interface.d.ts.map +1 -1
  53. package/lib/tree/tmpl-tree.d.ts +1 -1
  54. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  55. package/lib/tree/tmpl-tree.js +5 -4
  56. package/lib/tree/tmpl-tree.js.map +1 -1
  57. package/lib/units/index.d.ts +1 -0
  58. package/lib/units/index.d.ts.map +1 -1
  59. package/lib/units/index.js +17 -0
  60. package/lib/units/index.js.map +1 -1
  61. package/package.json +1 -1
  62. package/src/aldehyde/hooks/use-tabs/index.tsx +17 -11
  63. package/src/aldehyde/layout2/header.tsx +3 -2
  64. package/src/aldehyde/layout2/page.tsx +43 -8
  65. package/src/aldehyde/layout2/tabs/tabs-context.tsx +7 -0
  66. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +20 -39
  67. package/src/aldehyde/layout3/components/tabs-layout.tsx +15 -26
  68. package/src/aldehyde/layout3/header.tsx +3 -2
  69. package/src/aldehyde/layout3/page.tsx +24 -9
  70. package/src/aldehyde/layout4/components/tabs-layout.tsx +15 -25
  71. package/src/aldehyde/layout4/header.tsx +3 -2
  72. package/src/aldehyde/layout4/page.tsx +24 -9
  73. package/src/aldehyde/layout5/page.tsx +25 -9
  74. package/src/aldehyde/layout5/sider.tsx +3 -2
  75. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +3 -7
  76. package/src/aldehyde/table/act-table.tsx +2 -2
  77. package/src/aldehyde/tmpl/interface.tsx +1 -0
  78. package/src/aldehyde/tree/tmpl-tree.tsx +5 -4
  79. package/src/aldehyde/units/index.tsx +17 -0
@@ -1,5 +1,5 @@
1
1
  import { Layout, theme, ConfigProvider } from "antd";
2
- import React, { useEffect, useRef, useState } from "react";
2
+ import React, { useEffect, useRef, useState, useMemo } from "react";
3
3
  import DocumentTitle from "react-document-title";
4
4
  import { useSessionStorageState } from "ahooks";
5
5
  import { generate } from "@ant-design/colors";
@@ -11,9 +11,11 @@ import { LayoutProvider, useLayoutContext } from "../layout2/layout-context";
11
11
  import { MenuType } from "../layout2/type/layout-type";
12
12
  import Units from '../units';
13
13
  import { useLocale } from "../locale/useLocale";
14
- import { KeepAliveTab } from "../hooks/use-tabs";
15
- import { getMenuConfig } from "../layout2/page";
14
+ import { KeepAliveTab, useTabs } from "../hooks/use-tabs";
15
+ import { getMenuConfig, routeNavigationThemeHome } from "../layout2/page";
16
16
  import { ThemeConfig } from "../tmpl/interface";
17
+ import { useLocation, useNavigate, NavigateFunction } from "react-router-dom";
18
+ import { KeepAliveTabContext } from '../layout2/tabs/tabs-context';
17
19
  import "./css/main.less";
18
20
 
19
21
  const { useToken } = theme;
@@ -25,6 +27,7 @@ type PagePropsType = {
25
27
  const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
26
28
  const [systemName, setSystemName] = useState("");
27
29
  const [menu, setMenu] = useState<MenuType[]>([]);
30
+ const [customHome, setCustomHome] = useState<string>(); // 自定义首页菜单
28
31
  const [themeConfig, setThemeConfig] = useState<ThemeConfig>();
29
32
  const pageRef = useRef<HTMLDivElement>(undefined); // page ref
30
33
  //清空缓存
@@ -32,6 +35,9 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
32
35
  const { documentTitle, updateMenuItemIdToFirstFloorIdxMap } = useLayoutContext();
33
36
  const { getSiderCollapsed, compactTheme } = useLocale();
34
37
  const { token: { colorPrimary } } = useToken();
38
+ const { pathname } = useLocation();
39
+ const navigate = useNavigate();
40
+ const { closeTab, tabs, refreshTab, closeOtherTab, setTabs, activeTabRoutePath } = useTabs();
35
41
 
36
42
  const getThemeConfigAndMenuConfig = async () => {
37
43
  const tConfig = await Units.getThemeConfig();
@@ -40,6 +46,8 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
40
46
  setMenu(menuConfig?.menu);
41
47
  updateMenuItemIdToFirstFloorIdxMap(menuConfig?.menu);
42
48
  setThemeConfig(tConfig);
49
+ const temCustomHome = routeNavigationThemeHome(tConfig, menuConfig?.menu, pathname, navigate, closeTab);
50
+ setCustomHome(temCustomHome);
43
51
  };
44
52
 
45
53
  useEffect(() => {
@@ -49,6 +57,11 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
49
57
  window.addEventListener('beforeunload', () => { setKeepAliveTabs([]); });
50
58
  }, []);
51
59
 
60
+ const keepAliveContextValue = useMemo(
61
+ () => ({ closeTab, closeOtherTab, refreshTab, setTabs, tabs, activeTabRoutePath }),
62
+ [closeTab, closeOtherTab, refreshTab, setTabs, tabs, activeTabRoutePath]
63
+ );
64
+
52
65
  return (
53
66
  <DocumentTitle title={documentTitle}>
54
67
  <div
@@ -71,13 +84,15 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
71
84
  modal={{ className: "v3-antd-modal" }}
72
85
  card={{ className: "v3-antd-card" }}
73
86
  >
74
- <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
75
- <Header themeConfig={themeConfig} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu}></Header>
76
- <Layout>
77
- <Sider themeConfig={themeConfig} menuList={menu} collapsed={getSiderCollapsed()}></Sider>
78
- <Main menuList={menu} >{props.children}</Main>
87
+ <KeepAliveTabContext.Provider value={keepAliveContextValue}>
88
+ <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
89
+ <Header themeConfig={themeConfig} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu} customHome={customHome} />
90
+ <Layout>
91
+ <Sider themeConfig={themeConfig} menuList={menu} collapsed={getSiderCollapsed()}></Sider>
92
+ <Main menuList={menu} >{props.children}</Main>
93
+ </Layout>
79
94
  </Layout>
80
- </Layout>
95
+ </KeepAliveTabContext.Provider>
81
96
  </ConfigProvider>
82
97
  </div>
83
98
  </DocumentTitle>
@@ -1,8 +1,8 @@
1
- import React, { useCallback, useMemo } from "react";
1
+ import React, { useCallback, useMemo, useContext } from "react";
2
2
  import { Dropdown, Tabs } from 'antd';
3
3
  import { MenuItemType } from 'antd/es/menu/interface';
4
4
  import { KeepAliveTabContext } from '../../layout2/tabs/tabs-context';
5
- import { KeepAliveTab, useTabs } from "../../hooks/use-tabs";
5
+ import { KeepAliveTab } from "../../hooks/use-tabs";
6
6
  import antdIcons from '@ant-design/icons';
7
7
  import { useNavigate } from 'react-router-dom';
8
8
  import QueueAnim from 'rc-queue-anim';
@@ -23,7 +23,7 @@ const TabsLayout = (props: Props) => {
23
23
  const { menuList } = props;
24
24
  const { translate } = useLocale();
25
25
  const navigate = useNavigate();
26
- const { activeTabRoutePath, tabs = [], closeTab, refreshTab, closeOtherTab } = useTabs();
26
+ const { activeTabRoutePath, closeTab, refreshTab, closeOtherTab, tabs = [] } = useContext(KeepAliveTabContext);
27
27
 
28
28
  const menuItems: MenuItemType[] = useMemo(
29
29
  () => tabs.length <= 1 ? [] : [
@@ -91,30 +91,20 @@ const TabsLayout = (props: Props) => {
91
91
  }
92
92
  }, [tabs]);
93
93
 
94
- const keepAliveContextValue = useMemo(
95
- () => ({
96
- closeTab,
97
- closeOtherTab,
98
- refreshTab,
99
- }),
100
- [closeTab, closeOtherTab, refreshTab]
101
- );
102
94
 
103
95
  return (
104
- <KeepAliveTabContext.Provider value={keepAliveContextValue}>
105
- <Tabs
106
- animated={true}
107
- className="v4-tabs-layout"
108
- activeKey={activeTabRoutePath}
109
- items={tabItems}
110
- type="editable-card"
111
- onChange={onTabsChange}
112
- hideAdd
113
- onEdit={(e) => closeTab(e.toString())}
114
- size="small"
115
- // tabBarGutter={10}
116
- />
117
- </KeepAliveTabContext.Provider>
96
+ <Tabs
97
+ animated={true}
98
+ className="v4-tabs-layout"
99
+ activeKey={activeTabRoutePath}
100
+ items={tabItems}
101
+ type="editable-card"
102
+ onChange={onTabsChange}
103
+ hideAdd
104
+ onEdit={(e) => closeTab(e.toString())}
105
+ size="small"
106
+ // tabBarGutter={10}
107
+ />
118
108
  )
119
109
  }
120
110
 
@@ -51,11 +51,12 @@ type HeaderPropsType = {
51
51
  style?: any;
52
52
  logoImg?: string;
53
53
  themeConfig?: ThemeConfig;
54
+ customHome?: string;
54
55
  };
55
56
 
56
57
  type MenuItem = Required<MenuProps>["items"][number];
57
58
 
58
- const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, logoImg, themeConfig }) => {
59
+ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, logoImg, themeConfig, customHome }) => {
59
60
  const { setDocumentTitle, menuItemIdToFirstFloorIdxMap } = useLayoutContext();
60
61
  const { translate, getLocale } = useLocale();
61
62
  const [menu, setMenu] = useState<MenuItem[]>([]);
@@ -141,7 +142,7 @@ const Header: React.FC<HeaderPropsType> = ({ systemName, menuList, logoImg, them
141
142
  return (
142
143
  <Layout.Header className="v4-layout-header" >
143
144
  <div className="header-top" style={{ backgroundImage: `url(${headerBgImg})` }}>
144
- <NavLink to="/v4/home" style={{ display: "contents" }}>
145
+ <NavLink to={customHome || "/v4/home"} style={{ display: "contents" }}>
145
146
  <div className="header-title">
146
147
  {logoImg ? <img src={logoImg} alt="" /> : <IconFont type="icon-xinpian" className="header-title-icon" />}
147
148
  <div className="header-title-text">{translate("${" + systemName + "}")}</div></div>
@@ -1,5 +1,5 @@
1
1
  import { Layout, theme, ConfigProvider } from "antd";
2
- import React, { useEffect, useRef, useState } from "react";
2
+ import React, { useEffect, useRef, useState, useMemo } from "react";
3
3
  import DocumentTitle from "react-document-title";
4
4
  import { useSessionStorageState } from "ahooks";
5
5
  import { generate } from "@ant-design/colors";
@@ -11,10 +11,12 @@ import { LayoutProvider, useLayoutContext } from "../layout2/layout-context";
11
11
  import { MenuType } from "../layout2/type/layout-type";
12
12
  import Units from '../units';
13
13
  import { useLocale } from "../locale/useLocale";
14
- import { KeepAliveTab } from "../hooks/use-tabs";
15
- import { getMenuConfig } from "../layout2/page";
14
+ import { KeepAliveTab, useTabs } from "../hooks/use-tabs";
15
+ import { getMenuConfig, routeNavigationThemeHome } from "../layout2/page";
16
16
  import homePng from "./imgs/home.png";
17
17
  import { ThemeConfig } from "../tmpl/interface";
18
+ import { useLocation, useNavigate, NavigateFunction } from "react-router-dom";
19
+ import { KeepAliveTabContext } from '../layout2/tabs/tabs-context';
18
20
  import "./css/main.less";
19
21
 
20
22
  const { useToken } = theme;
@@ -28,6 +30,7 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
28
30
  const { logo } = props;
29
31
  const [systemName, setSystemName] = useState("");
30
32
  const [systemLogo, setSystemLogo] = useState("");
33
+ const [customHome, setCustomHome] = useState<string>(); // 自定义首页菜单
31
34
  const [themeConfig, setThemeConfig] = useState<ThemeConfig>();
32
35
  const [menu, setMenu] = useState<MenuType[]>([]);
33
36
  const pageRef = useRef<HTMLDivElement>(undefined); // page ref
@@ -36,6 +39,9 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
36
39
  const { documentTitle, updateMenuItemIdToFirstFloorIdxMap } = useLayoutContext();
37
40
  const { getSiderCollapsed, compactTheme } = useLocale();
38
41
  const { token: { colorPrimary } } = useToken();
42
+ const { pathname } = useLocation();
43
+ const navigate = useNavigate();
44
+ const { closeTab, tabs, refreshTab, closeOtherTab, setTabs, activeTabRoutePath } = useTabs();
39
45
 
40
46
  const getThemeConfigAndMenuConfig = async () => {
41
47
  const tConfig = await Units.getThemeConfig();
@@ -45,6 +51,8 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
45
51
  setMenu(menuConfig?.menu);
46
52
  updateMenuItemIdToFirstFloorIdxMap(menuConfig?.menu);
47
53
  setThemeConfig(tConfig);
54
+ const temCustomHome = routeNavigationThemeHome(tConfig, menuConfig?.menu, pathname, navigate, closeTab);
55
+ setCustomHome(temCustomHome);
48
56
  };
49
57
 
50
58
  useEffect(() => {
@@ -54,6 +62,11 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
54
62
  window.addEventListener('beforeunload', () => { setKeepAliveTabs([]); });
55
63
  }, []);
56
64
 
65
+ const keepAliveContextValue = useMemo(
66
+ () => ({ closeTab, closeOtherTab, refreshTab, setTabs, tabs, activeTabRoutePath }),
67
+ [closeTab, closeOtherTab, refreshTab, setTabs, tabs, activeTabRoutePath]
68
+ );
69
+
57
70
  return (
58
71
  <DocumentTitle title={documentTitle}>
59
72
  <div
@@ -86,13 +99,15 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
86
99
  modal={{ className: "v4-antd-modal" }}
87
100
  card={{ className: "v4-antd-card" }}
88
101
  >
89
- <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
90
- <Header themeConfig={themeConfig} logoImg={logo || systemLogo} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu}></Header>
91
- <Layout>
92
- <Sider themeConfig={themeConfig} menuList={menu} collapsed={getSiderCollapsed()}></Sider>
93
- <Main menuList={menu}>{props.children}</Main>
102
+ <KeepAliveTabContext.Provider value={keepAliveContextValue}>
103
+ <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
104
+ <Header themeConfig={themeConfig} logoImg={logo || systemLogo} systemName={systemName ? systemName : Units.programName_NavLeft()} menuList={menu} customHome={customHome} />
105
+ <Layout>
106
+ <Sider themeConfig={themeConfig} menuList={menu} collapsed={getSiderCollapsed()}></Sider>
107
+ <Main menuList={menu}>{props.children}</Main>
108
+ </Layout>
94
109
  </Layout>
95
- </Layout>
110
+ </KeepAliveTabContext.Provider>
96
111
  </ConfigProvider>
97
112
  </div>
98
113
  </DocumentTitle >
@@ -1,5 +1,5 @@
1
1
  import { Layout, theme, ConfigProvider } from "antd";
2
- import React, { useEffect, useRef, useState } from "react";
2
+ import React, { useEffect, useRef, useState, useMemo } from "react";
3
3
  import DocumentTitle from "react-document-title";
4
4
  import { useSessionStorageState } from "ahooks";
5
5
  import { generate } from "@ant-design/colors";
@@ -11,9 +11,11 @@ import { LayoutProvider, useLayoutContext } from "../layout2/layout-context";
11
11
  import { MenuType } from "../layout2/type/layout-type";
12
12
  import Units from '../units';
13
13
  import { useLocale } from "../locale/useLocale";
14
- import { KeepAliveTab } from "../hooks/use-tabs";
15
- import { getMenuConfig } from "../layout2/page";
14
+ import { KeepAliveTab, useTabs } from "../hooks/use-tabs";
15
+ import { getMenuConfig, routeNavigationThemeHome } from "../layout2/page";
16
16
  import { ThemeConfig } from "../tmpl/interface";
17
+ import { useLocation, useNavigate, NavigateFunction } from "react-router-dom";
18
+ import { KeepAliveTabContext } from '../layout2/tabs/tabs-context';
17
19
  import homePng from "./imgs/home.png";
18
20
 
19
21
  const { useToken } = theme;
@@ -27,6 +29,7 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
27
29
  const { logo } = props;
28
30
  const [systemName, setSystemName] = useState("");
29
31
  const [systemLogo, setSystemLogo] = useState("");
32
+ const [customHome, setCustomHome] = useState<string>(); // 自定义首页菜单
30
33
  const [themeConfig, setThemeConfig] = useState<ThemeConfig>();
31
34
  const [menu, setMenu] = useState<MenuType[]>([]);
32
35
  const pageRef = useRef<HTMLDivElement>(undefined); // page ref
@@ -35,6 +38,9 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
35
38
  const { documentTitle, updateMenuItemIdToFirstFloorIdxMap } = useLayoutContext();
36
39
  const { getSiderCollapsed, compactTheme } = useLocale();
37
40
  const { token: { colorPrimary } } = useToken();
41
+ const { pathname } = useLocation();
42
+ const navigate = useNavigate();
43
+ const { closeTab, tabs, refreshTab, closeOtherTab, setTabs, activeTabRoutePath } = useTabs();
38
44
 
39
45
  const getThemeConfigAndMenuConfig = async () => {
40
46
  const tConfig = await Units.getThemeConfig();
@@ -44,6 +50,8 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
44
50
  setMenu(menuConfig?.menu);
45
51
  updateMenuItemIdToFirstFloorIdxMap(menuConfig?.menu);
46
52
  setThemeConfig(tConfig);
53
+ const temCustomHome = routeNavigationThemeHome(tConfig, menuConfig?.menu, pathname, navigate, closeTab);
54
+ setCustomHome(temCustomHome);
47
55
  };
48
56
 
49
57
  useEffect(() => {
@@ -53,6 +61,11 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
53
61
  window.addEventListener('beforeunload', () => { setKeepAliveTabs([]); });
54
62
  }, []);
55
63
 
64
+ const keepAliveContextValue = useMemo(
65
+ () => ({ closeTab, closeOtherTab, refreshTab, setTabs, tabs, activeTabRoutePath }),
66
+ [closeTab, closeOtherTab, refreshTab, setTabs, tabs, activeTabRoutePath]
67
+ );
68
+
56
69
  return (
57
70
  <DocumentTitle title={documentTitle}>
58
71
  <div
@@ -67,13 +80,16 @@ const Page: React.FC<PagePropsType> = (props: PagePropsType) => {
67
80
  theme={{
68
81
  algorithm: compactTheme ? [theme.compactAlgorithm] : [],
69
82
  }}>
70
- <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
71
- <Sider themeConfig={themeConfig} logoImg={logo || systemLogo} menuList={menu} collapsed={getSiderCollapsed()} systemName={systemName ? systemName : Units.programName_NavLeft()} />
72
- <Layout>
73
- <Header themeConfig={themeConfig} menuList={menu} />
74
- <Main menuList={menu}>{props.children}</Main>
83
+ <KeepAliveTabContext.Provider value={keepAliveContextValue}>
84
+
85
+ <Layout style={{ height: "100%" }} className={compactTheme ? "layout-compactTheme" : undefined}>
86
+ <Sider themeConfig={themeConfig} logoImg={logo || systemLogo} menuList={menu} collapsed={getSiderCollapsed()} systemName={systemName ? systemName : Units.programName_NavLeft()} customHome={customHome} />
87
+ <Layout>
88
+ <Header themeConfig={themeConfig} menuList={menu} />
89
+ <Main menuList={menu}>{props.children}</Main>
90
+ </Layout>
75
91
  </Layout>
76
- </Layout>
92
+ </KeepAliveTabContext.Provider>
77
93
  </ConfigProvider>
78
94
  </div>
79
95
  </DocumentTitle>
@@ -21,6 +21,7 @@ type SiderPropsType = {
21
21
  systemName: string;
22
22
  logoImg?: string;
23
23
  themeConfig?: ThemeConfig;
24
+ customHome?: string;
24
25
  };
25
26
 
26
27
  type MenuItem = Required<MenuProps>["items"][number];
@@ -48,7 +49,7 @@ const getSecoundFloorMenuList = (
48
49
 
49
50
  const { useToken } = theme;
50
51
 
51
- const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed, systemName, logoImg, themeConfig }) => {
52
+ const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed, systemName, logoImg, themeConfig, customHome }) => {
52
53
  const { setDocumentTitle, menuItemIdToFirstFloorIdxMap } = useLayoutContext();
53
54
  const { translate, getLocale } = useLocale();
54
55
  const secoundFloorMenuList = useRef<SecoundFloorMenuList>([]);
@@ -171,7 +172,7 @@ const Sider: React.FC<SiderPropsType> = ({ menuList, collapsed, systemName, logo
171
172
  color: "inherit",
172
173
  borderBottom: "1px solid rgba(0,21,41,.08)",
173
174
  }}
174
- to={"/v5/home"}
175
+ to={customHome || "/v5/home"}
175
176
  >
176
177
  {logoImg ? <img
177
178
  className="header-logo"
@@ -22,7 +22,7 @@ export default function ScreenFit(props: ScreenFitProps) {
22
22
  const canvasRef = useRef(null);
23
23
  const [size, setSize] = useState({ width, height, originalHeight: 0, originalWidth: 0 })
24
24
 
25
- let observer: MutationObserver;
25
+ let observer: ResizeObserver;
26
26
 
27
27
  function updateSize() {
28
28
  if (size.width && size.height) {
@@ -90,12 +90,8 @@ export default function ScreenFit(props: ScreenFitProps) {
90
90
  bodyOverflow = document.body.style.overflow;
91
91
  document.body.style.overflow = 'hidden';
92
92
  }
93
- observer = new MutationObserver(() => onResize());
94
- observer.observe(elRef.current, {
95
- attributes: true,
96
- attributeFilter: ['style'],
97
- attributeOldValue: true
98
- })
93
+ observer = new ResizeObserver(() => onResize());
94
+ observer.observe(canvasRef.current);
99
95
  setSize({
100
96
  ...size,
101
97
  originalWidth: window.screen.width,
@@ -732,9 +732,9 @@ class ActTable extends React.PureComponent<ActTableProps, ActTableStat> {
732
732
 
733
733
  doJump = async (jump: JumpConfig, record_: DtmplData) => {
734
734
  let record = record_.fieldMap ? record_.fieldMap : record_;
735
+ const version = localStorage.getItem("version") || "";
735
736
 
736
737
  let url = null;
737
-
738
738
  let path = jump.path;
739
739
  if (!path) {
740
740
  path = "/";
@@ -751,7 +751,7 @@ class ActTable extends React.PureComponent<ActTableProps, ActTableStat> {
751
751
  url = path.split("//")[0] + "//";
752
752
  path = path.split("//")[1];
753
753
  } else {
754
- url = new URL(window.location.href).pathname;
754
+ url = `/#/${version}`;
755
755
  }
756
756
 
757
757
  //处理路由参数
@@ -887,4 +887,5 @@ export interface ThemeConfig {
887
887
  showTopMenuIcon?: boolean;
888
888
  styleTheme?: string;
889
889
  themeColor?: string;
890
+ homeSourceId?: string; // 首页菜单
890
891
  }
@@ -203,11 +203,11 @@ class TmplTree extends React.PureComponent<TmplTreeProps, TmplTreeState> {
203
203
  }
204
204
  if (defSelect && !this.state.currentNodeData && !currentId) { // 是否默认选中
205
205
  const leafNode = findFirstLeaf(this.state.data);
206
- if (leafNode) this.onClickNode(leafNode);
206
+ if (leafNode) this.onClickNode(leafNode, false);
207
207
  }
208
208
  if (currentId) { // 指定默认选中项
209
209
  const curNode = findFirstLeaf(this.state.data, currentId);
210
- if (curNode) this.onClickNode(curNode);
210
+ if (curNode) this.onClickNode(curNode, false);
211
211
  }
212
212
  });
213
213
  }
@@ -236,7 +236,8 @@ class TmplTree extends React.PureComponent<TmplTreeProps, TmplTreeState> {
236
236
  };
237
237
  serial_number = new Date().getTime();
238
238
 
239
- onClickNode = (dataNode: TreeDataNode) => {
239
+ // throttle是否节流
240
+ onClickNode = (dataNode: TreeDataNode, throttle = true) => {
240
241
  const {
241
242
  doEditRoot,
242
243
  doViewRoot,
@@ -247,7 +248,7 @@ class TmplTree extends React.PureComponent<TmplTreeProps, TmplTreeState> {
247
248
 
248
249
 
249
250
  let new_serial_number = new Date().getTime();
250
- if (new_serial_number - this.serial_number > 1500) {
251
+ if (!throttle || (new_serial_number - this.serial_number > 1500)) {
251
252
  this.serial_number = new_serial_number;
252
253
  } else {
253
254
  return;
@@ -1274,5 +1274,22 @@ export default {
1274
1274
  }, {});
1275
1275
  this.coverUserPageConfig(defUserPageConfig); // 覆盖本地缓存
1276
1276
  return configs;
1277
+ },
1278
+ findItemByIdIterative(tree: any[], value: string | number, key = "id") { // 查找树级数组中的指定项
1279
+ if (!tree?.length) {
1280
+ return undefined;
1281
+ }
1282
+ // 使用一个栈来存储待遍历的节点
1283
+ const stack = [...tree];
1284
+ while (stack.length > 0) {
1285
+ const node = stack.pop();
1286
+ if (node[key] === value) {
1287
+ return node;
1288
+ }
1289
+ if (node.children && node.children.length > 0) {
1290
+ stack.push(...node.children);
1291
+ }
1292
+ }
1293
+ return undefined;
1277
1294
  }
1278
1295
  };