aldehyde 0.2.441 → 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.
- package/lib/hooks/use-tabs/index.d.ts.map +1 -1
- package/lib/hooks/use-tabs/index.js +15 -10
- package/lib/hooks/use-tabs/index.js.map +1 -1
- package/lib/layout2/header.d.ts +1 -0
- package/lib/layout2/header.d.ts.map +1 -1
- package/lib/layout2/header.js +2 -2
- package/lib/layout2/header.js.map +1 -1
- package/lib/layout2/page.d.ts +3 -1
- package/lib/layout2/page.d.ts.map +1 -1
- package/lib/layout2/page.js +36 -6
- package/lib/layout2/page.js.map +1 -1
- package/lib/layout2/tabs/tabs-context.d.ts +4 -0
- package/lib/layout2/tabs/tabs-context.d.ts.map +1 -1
- package/lib/layout2/tabs/tabs-context.js +3 -0
- package/lib/layout2/tabs/tabs-context.js.map +1 -1
- package/lib/layout2/tabs/tabs-layout.d.ts.map +1 -1
- package/lib/layout2/tabs/tabs-layout.js +3 -10
- package/lib/layout2/tabs/tabs-layout.js.map +1 -1
- package/lib/layout3/components/tabs-layout.d.ts.map +1 -1
- package/lib/layout3/components/tabs-layout.js +3 -10
- package/lib/layout3/components/tabs-layout.js.map +1 -1
- package/lib/layout3/header.d.ts +1 -0
- package/lib/layout3/header.d.ts.map +1 -1
- package/lib/layout3/header.js +2 -2
- package/lib/layout3/header.js.map +1 -1
- package/lib/layout3/page.d.ts.map +1 -1
- package/lib/layout3/page.js +18 -7
- package/lib/layout3/page.js.map +1 -1
- package/lib/layout4/components/tabs-layout.d.ts.map +1 -1
- package/lib/layout4/components/tabs-layout.js +3 -10
- package/lib/layout4/components/tabs-layout.js.map +1 -1
- package/lib/layout4/header.d.ts +1 -0
- package/lib/layout4/header.d.ts.map +1 -1
- package/lib/layout4/header.js +2 -2
- package/lib/layout4/header.js.map +1 -1
- package/lib/layout4/page.d.ts.map +1 -1
- package/lib/layout4/page.js +18 -7
- package/lib/layout4/page.js.map +1 -1
- package/lib/layout5/page.d.ts.map +1 -1
- package/lib/layout5/page.js +18 -7
- package/lib/layout5/page.js.map +1 -1
- package/lib/layout5/sider.d.ts +1 -0
- package/lib/layout5/sider.d.ts.map +1 -1
- package/lib/layout5/sider.js +2 -2
- package/lib/layout5/sider.js.map +1 -1
- package/lib/table/act-table.js +2 -1
- package/lib/table/act-table.js.map +1 -1
- package/lib/tmpl/interface.d.ts +1 -0
- package/lib/tmpl/interface.d.ts.map +1 -1
- package/lib/units/index.d.ts +1 -0
- package/lib/units/index.d.ts.map +1 -1
- package/lib/units/index.js +17 -0
- package/lib/units/index.js.map +1 -1
- package/package.json +1 -1
- package/src/aldehyde/hooks/use-tabs/index.tsx +17 -11
- package/src/aldehyde/layout2/header.tsx +3 -2
- package/src/aldehyde/layout2/page.tsx +43 -8
- package/src/aldehyde/layout2/tabs/tabs-context.tsx +7 -0
- package/src/aldehyde/layout2/tabs/tabs-layout.tsx +20 -39
- package/src/aldehyde/layout3/components/tabs-layout.tsx +15 -26
- package/src/aldehyde/layout3/header.tsx +3 -2
- package/src/aldehyde/layout3/page.tsx +24 -9
- package/src/aldehyde/layout4/components/tabs-layout.tsx +15 -25
- package/src/aldehyde/layout4/header.tsx +3 -2
- package/src/aldehyde/layout4/page.tsx +24 -9
- package/src/aldehyde/layout5/page.tsx +25 -9
- package/src/aldehyde/layout5/sider.tsx +3 -2
- package/src/aldehyde/table/act-table.tsx +2 -2
- package/src/aldehyde/tmpl/interface.tsx +1 -0
- 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
|
-
<
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
<
|
|
78
|
-
|
|
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
|
-
</
|
|
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
|
|
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,
|
|
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
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
<
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
<
|
|
93
|
-
|
|
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
|
-
</
|
|
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
|
-
<
|
|
71
|
-
|
|
72
|
-
<Layout>
|
|
73
|
-
<
|
|
74
|
-
<
|
|
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
|
-
</
|
|
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"
|
|
@@ -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 =
|
|
754
|
+
url = `/#/${version}`;
|
|
755
755
|
}
|
|
756
756
|
|
|
757
757
|
//处理路由参数
|
|
@@ -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
|
};
|