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.
- 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/lowcode-components/lowcode-view/component/screen-fit/index.d.ts.map +1 -1
- package/lib/lowcode-components/lowcode-view/component/screen-fit/index.js +2 -6
- package/lib/lowcode-components/lowcode-view/component/screen-fit/index.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/tree/tmpl-tree.d.ts +1 -1
- package/lib/tree/tmpl-tree.d.ts.map +1 -1
- package/lib/tree/tmpl-tree.js +5 -4
- package/lib/tree/tmpl-tree.js.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/lowcode-components/lowcode-view/component/screen-fit/index.tsx +3 -7
- package/src/aldehyde/table/act-table.tsx +2 -2
- package/src/aldehyde/tmpl/interface.tsx +1 -0
- package/src/aldehyde/tree/tmpl-tree.tsx +5 -4
- 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"
|
|
@@ -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:
|
|
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
|
|
94
|
-
observer.observe(
|
|
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 =
|
|
754
|
+
url = `/#/${version}`;
|
|
755
755
|
}
|
|
756
756
|
|
|
757
757
|
//处理路由参数
|
|
@@ -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
|
-
|
|
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
|
};
|