@zat-design/sisyphus-react 4.5.9 → 4.5.10-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.css +1 -1
- package/dist/less.esm.css +1 -1
- package/es/FormsProvider/index.js +14 -21
- package/es/ProAction/components/CheckModalContent/index.js +12 -26
- package/es/ProAction/index.js +79 -83
- package/es/ProAction/propsType.js +0 -1
- package/es/ProConfigProvider/index.js +63 -110
- package/es/ProConfigProvider/propsType.js +0 -1
- package/es/ProDownload/index.d.ts +2 -1
- package/es/ProDownload/index.js +74 -69
- package/es/ProDownload/propsType.js +0 -1
- package/es/ProDownload/utils.d.ts +10 -5
- package/es/ProDownload/utils.js +63 -95
- package/es/ProDrawerForm/components/ProDrawer/index.js +83 -113
- package/es/ProDrawerForm/components/ProModal/index.js +77 -108
- package/es/ProDrawerForm/components/index.js +6 -2
- package/es/ProDrawerForm/hooks/useConfirmClose.js +20 -39
- package/es/ProDrawerForm/index.js +29 -38
- package/es/ProDrawerForm/propsType.js +0 -1
- package/es/ProDrawerForm/utils/index.js +18 -36
- package/es/ProEditLabel/components/RenderProForm.js +45 -49
- package/es/ProEditLabel/index.js +126 -163
- package/es/ProEditLabel/propsType.js +0 -1
- package/es/ProEditLabel/utils/index.js +5 -8
- package/es/ProEditTable/components/ActionButton/index.js +111 -119
- package/es/ProEditTable/components/RcTable/BaseTable.js +38 -51
- package/es/ProEditTable/components/RcTable/DraggableTable.js +97 -129
- package/es/ProEditTable/components/RcTable/index.js +6 -4
- package/es/ProEditTable/components/RenderField/ListChangedWrapper.js +77 -95
- package/es/ProEditTable/components/RenderField/index.js +490 -587
- package/es/ProEditTable/components/RenderField/propsType.js +0 -1
- package/es/ProEditTable/components/RenderField/tools.js +115 -112
- package/es/ProEditTable/components/RenderToolbar/index.js +47 -73
- package/es/ProEditTable/components/Summary/index.js +38 -64
- package/es/ProEditTable/components/Validator/index.js +46 -46
- package/es/ProEditTable/components/index.js +12 -5
- package/es/ProEditTable/index.js +456 -378
- package/es/ProEditTable/propsType.js +0 -1
- package/es/ProEditTable/utils/config.js +60 -122
- package/es/ProEditTable/utils/diffOriginal.js +45 -82
- package/es/ProEditTable/utils/getDefaultProps.js +19 -24
- package/es/ProEditTable/utils/index.js +154 -235
- package/es/ProEditTable/utils/tools.js +149 -286
- package/es/ProEditTable/utils/transform.js +25 -30
- package/es/ProEditTable/utils/useEditTableError.js +30 -43
- package/es/ProEditTable/utils/useShouldUpdateForTable.js +42 -72
- package/es/ProEditTable/utils/validateAll.js +87 -154
- package/es/ProEnum/components/Group.js +38 -30
- package/es/ProEnum/components/Tag.js +22 -26
- package/es/ProEnum/hooks/useEnum.js +48 -116
- package/es/ProEnum/hooks/useEnumRequest.js +182 -212
- package/es/ProEnum/hooks/useFrequentEnumRequest.js +40 -48
- package/es/ProEnum/index.js +162 -172
- package/es/ProEnum/propsType.js +0 -1
- package/es/ProEnum/utils/eventCenter.js +10 -12
- package/es/ProEnum/utils/frequentEnum.js +35 -92
- package/es/ProEnum/utils/getEnum.js +32 -90
- package/es/ProEnum/utils/getEnumLabel.js +44 -49
- package/es/ProEnum/utils/index.js +93 -207
- package/es/ProForm/components/Container.js +13 -28
- package/es/ProForm/components/FormFooter/index.js +36 -44
- package/es/ProForm/components/FormFooter/propsType.js +0 -1
- package/es/ProForm/components/base/Checkbox/index.js +32 -59
- package/es/ProForm/components/base/DatePicker/index.js +49 -71
- package/es/ProForm/components/base/Input/index.js +63 -97
- package/es/ProForm/components/base/Input/propsType.js +0 -1
- package/es/ProForm/components/base/InputNumber/index.js +118 -172
- package/es/ProForm/components/base/Radio/index.js +39 -52
- package/es/ProForm/components/base/RangePicker/index.js +109 -127
- package/es/ProForm/components/base/RangePicker/useDateRange.js +20 -17
- package/es/ProForm/components/base/Select/index.js +63 -89
- package/es/ProForm/components/base/Switch/index.js +27 -35
- package/es/ProForm/components/base/SwitchCheckbox/index.js +36 -54
- package/es/ProForm/components/base/TextArea/index.js +30 -41
- package/es/ProForm/components/base/TimePicker/index.js +27 -37
- package/es/ProForm/components/combination/Container/index.js +37 -47
- package/es/ProForm/components/combination/Container/propsType.js +0 -1
- package/es/ProForm/components/combination/FormList/components/ActionButton.js +165 -237
- package/es/ProForm/components/combination/FormList/components/BlockFields.js +98 -102
- package/es/ProForm/components/combination/FormList/components/Empty.js +28 -55
- package/es/ProForm/components/combination/FormList/components/LineFields.js +57 -54
- package/es/ProForm/components/combination/FormList/components/ToolbarButton.js +61 -109
- package/es/ProForm/components/combination/FormList/index.js +151 -161
- package/es/ProForm/components/combination/FormList/propsType.js +0 -1
- package/es/ProForm/components/combination/FormList/style/index.less +6 -0
- package/es/ProForm/components/combination/FormList/utils.js +22 -38
- package/es/ProForm/components/combination/Group/component/AddonWrapper/index.js +12 -28
- package/es/ProForm/components/combination/Group/component/ComRender.js +50 -111
- package/es/ProForm/components/combination/Group/component/FlexibleGroup.js +106 -213
- package/es/ProForm/components/combination/Group/hooks/index.js +69 -129
- package/es/ProForm/components/combination/Group/index.js +87 -126
- package/es/ProForm/components/combination/Group/propsType.js +0 -1
- package/es/ProForm/components/combination/Group/utils/index.js +124 -239
- package/es/ProForm/components/combination/ProCascader/index.js +156 -199
- package/es/ProForm/components/combination/ProCascader/propsType.js +0 -1
- package/es/ProForm/components/combination/ProCascader/utils/index.js +12 -21
- package/es/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +72 -70
- package/es/ProForm/components/combination/ProModalSelect/index.js +309 -347
- package/es/ProForm/components/combination/ProModalSelect/propsType.js +0 -1
- package/es/ProForm/components/combination/ProModalSelect/utils/index.js +32 -39
- package/es/ProForm/components/combination/ProNumberRange/index.js +100 -156
- package/es/ProForm/components/combination/ProNumberRange/propsType.js +0 -1
- package/es/ProForm/components/combination/ProRangeLimit/index.js +104 -115
- package/es/ProForm/components/combination/ProRangeLimit/propsType.js +0 -1
- package/es/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +16 -16
- package/es/ProForm/components/combination/ProTimeLimit/index.js +75 -109
- package/es/ProForm/components/index.js +56 -34
- package/es/ProForm/components/render/ChangedWrapper.js +85 -94
- package/es/ProForm/components/render/ConfirmWrapper.js +27 -39
- package/es/ProForm/components/render/CustomComponentViewWrapper.js +65 -82
- package/es/ProForm/components/render/Render.js +223 -329
- package/es/ProForm/components/render/RenderFields.js +76 -113
- package/es/ProForm/components/render/propsType.js +0 -1
- package/es/ProForm/hooks/useControlled.js +8 -10
- package/es/ProForm/hooks/useDeepCompareMemo.js +11 -11
- package/es/ProForm/hooks/useFieldProps.js +8 -4
- package/es/ProForm/hooks/useForm.js +50 -110
- package/es/ProForm/hooks/useRules.js +17 -33
- package/es/ProForm/hooks/useShouldUpdate.js +77 -152
- package/es/ProForm/hooks/useWatch.js +62 -134
- package/es/ProForm/index.js +157 -194
- package/es/ProForm/propsType.js +15 -7
- package/es/ProForm/utils/buildFormItemProps.js +51 -58
- package/es/ProForm/utils/diffOriginal.js +43 -73
- package/es/ProForm/utils/getDefaultProps.js +18 -24
- package/es/ProForm/utils/index.js +160 -235
- package/es/ProForm/utils/processDependencies.js +21 -60
- package/es/ProForm/utils/reactiveValues.js +20 -34
- package/es/ProForm/utils/rulesCreator.js +42 -40
- package/es/ProForm/utils/transformNames.js +10 -13
- package/es/ProForm/utils/transformValue.js +16 -29
- package/es/ProForm/utils/valueType.js +96 -178
- package/es/ProIcon/config/index.js +340 -274
- package/es/ProIcon/index.js +135 -209
- package/es/ProIcon/propsTypes.js +0 -1
- package/es/ProIcon/utils/index.js +24 -39
- package/es/ProLayout/components/Layout/Header/index.js +108 -141
- package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +134 -190
- package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +113 -139
- package/es/ProLayout/components/Layout/Menu/OpenMenu/propsType.js +0 -1
- package/es/ProLayout/components/Layout/Menu/SideMenu/index.js +23 -31
- package/es/ProLayout/components/Layout/Menu/index.js +92 -89
- package/es/ProLayout/components/Layout/Notice/index.js +13 -27
- package/es/ProLayout/components/Layout/index.js +8 -3
- package/es/ProLayout/components/ProCollapse/PropTypes.js +0 -1
- package/es/ProLayout/components/ProCollapse/index.js +89 -111
- package/es/ProLayout/components/ProFooter/PropTypes.js +0 -1
- package/es/ProLayout/components/ProFooter/index.js +27 -24
- package/es/ProLayout/components/ProHeader/PropTypes.js +0 -1
- package/es/ProLayout/components/ProHeader/components/Copy/index.js +23 -21
- package/es/ProLayout/components/ProHeader/components/Describe/index.js +67 -84
- package/es/ProLayout/components/ProHeader/components/ProBackBtn/index.js +18 -21
- package/es/ProLayout/components/ProHeader/components/ProBackBtn/propsType.js +0 -1
- package/es/ProLayout/components/ProHeader/components/index.js +6 -2
- package/es/ProLayout/components/ProHeader/index.js +216 -356
- package/es/ProLayout/components/ProHeader/utils/index.js +19 -26
- package/es/ProLayout/components/TabsManager/components/TabContextMenu.js +92 -85
- package/es/ProLayout/components/TabsManager/components/TabItem.js +53 -63
- package/es/ProLayout/components/TabsManager/components/TabsContext.js +5 -5
- package/es/ProLayout/components/TabsManager/components/TabsHeader.js +42 -52
- package/es/ProLayout/components/TabsManager/hooks/useActiveTab.js +8 -9
- package/es/ProLayout/components/TabsManager/hooks/useIframeRoute.js +19 -32
- package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +6 -20
- package/es/ProLayout/components/TabsManager/hooks/useTabsCache.js +25 -42
- package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +320 -350
- package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.d.ts +19 -0
- package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.js +332 -0
- package/es/ProLayout/components/TabsManager/index.js +407 -351
- package/es/ProLayout/components/TabsManager/propTypes.d.ts +4 -0
- package/es/ProLayout/components/TabsManager/propTypes.js +7 -15
- package/es/ProLayout/components/TabsManager/style/index.less +1 -1
- package/es/ProLayout/components/TabsManager/utils/historyObserver.d.ts +7 -0
- package/es/ProLayout/components/TabsManager/utils/historyObserver.js +65 -0
- package/es/ProLayout/components/TabsManager/utils/index.d.ts +15 -2
- package/es/ProLayout/components/TabsManager/utils/index.js +156 -159
- package/es/ProLayout/components/index.js +8 -3
- package/es/ProLayout/index.js +173 -228
- package/es/ProLayout/propTypes.d.ts +28 -1
- package/es/ProLayout/propTypes.js +12 -52
- package/es/ProLayout/utils/index.js +48 -128
- package/es/ProSelect/components/AdaptiveTooltip.js +26 -25
- package/es/ProSelect/index.js +187 -223
- package/es/ProSelect/propsType.js +0 -1
- package/es/ProSelect/style/index.less +13 -0
- package/es/ProSelect/utils/index.js +100 -146
- package/es/ProStep/components/Anchor/index.js +71 -82
- package/es/ProStep/components/Item/index.js +49 -56
- package/es/ProStep/components/LazyLoad/index.js +23 -29
- package/es/ProStep/components/Listener/index.js +20 -33
- package/es/ProStep/components/Step/index.js +31 -38
- package/es/ProStep/constants.js +4 -1
- package/es/ProStep/index.js +166 -153
- package/es/ProStep/propsType.js +0 -1
- package/es/ProStep/style/index.less +1 -1
- package/es/ProStep/utils/index.js +29 -55
- package/es/ProStepTab/index.js +83 -138
- package/es/ProStepTab/propsType.js +0 -1
- package/es/ProTable/components/EditableCell/EditIcon.js +10 -14
- package/es/ProTable/components/EditableCell/index.js +37 -71
- package/es/ProTable/components/EditableCell/propsType.js +0 -1
- package/es/ProTable/components/FormatColumn/index.js +209 -340
- package/es/ProTable/components/FormatColumn/propsType.js +0 -1
- package/es/ProTable/components/RcTable/components/BaseTable/index.js +35 -39
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +80 -107
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +54 -48
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/propsType.js +0 -1
- package/es/ProTable/components/RcTable/components/DraggableTable/index.js +47 -54
- package/es/ProTable/components/RcTable/index.js +6 -4
- package/es/ProTable/components/RenderColumn/index.js +158 -186
- package/es/ProTable/components/RenderEmptyText/index.js +12 -21
- package/es/ProTable/components/RenderFooter/index.js +15 -15
- package/es/ProTable/components/RenderSummary/index.js +33 -50
- package/es/ProTable/components/RenderTableHeader/index.js +44 -46
- package/es/ProTable/components/RenderTabs/index.js +47 -51
- package/es/ProTable/components/TableResizable/index.js +56 -72
- package/es/ProTable/components/TooltipTitle/index.js +13 -21
- package/es/ProTable/components/index.js +16 -36
- package/es/ProTable/hooks/useAntdTable.js +191 -224
- package/es/ProTable/index.js +232 -249
- package/es/ProTable/propsType.js +0 -1
- package/es/ProTable/utils/columnStorage.js +63 -88
- package/es/ProTable/utils/index.js +57 -90
- package/es/ProTabs/components/Card/index.js +20 -48
- package/es/ProTabs/components/index.js +4 -1
- package/es/ProTabs/index.js +41 -58
- package/es/ProTabs/propType.js +0 -1
- package/es/ProThemeTools/component/ProTools/index.js +106 -158
- package/es/ProThemeTools/component/index.js +4 -1
- package/es/ProThemeTools/context/ThemeContext.js +67 -146
- package/es/ProThemeTools/index.js +103 -156
- package/es/ProThemeTools/propsType.js +0 -1
- package/es/ProThemeTools/utils/index.js +60 -109
- package/es/ProTooltip/index.js +132 -168
- package/es/ProTooltip/propsType.js +0 -1
- package/es/ProTree/components/AdaptiveTooltip.js +15 -17
- package/es/ProTree/components/CloseIcon.js +18 -26
- package/es/ProTree/components/List.js +28 -47
- package/es/ProTree/components/ProTree.js +152 -211
- package/es/ProTree/components/ProTreeSelect/index.js +255 -459
- package/es/ProTree/components/ProTreeSelect/propsType.js +0 -1
- package/es/ProTree/components/SearchTitle.js +23 -42
- package/es/ProTree/components/Tree.js +147 -195
- package/es/ProTree/components/index.js +10 -5
- package/es/ProTree/index.js +12 -16
- package/es/ProTree/propsType.js +0 -1
- package/es/ProTree/utils.js +46 -118
- package/es/ProTreeModal/components/Cascader.js +56 -64
- package/es/ProTreeModal/components/CloseIcon.js +18 -26
- package/es/ProTreeModal/components/List.js +114 -180
- package/es/ProTreeModal/components/SearchTitle.js +15 -18
- package/es/ProTreeModal/components/SortableItem.js +29 -58
- package/es/ProTreeModal/components/Tree.js +99 -113
- package/es/ProTreeModal/components/Trigger.js +87 -121
- package/es/ProTreeModal/components/index.js +14 -6
- package/es/ProTreeModal/index.js +397 -438
- package/es/ProTreeModal/propsType.js +0 -1
- package/es/ProTreeModal/utils.js +52 -95
- package/es/ProUpload/components/ButtonRender.js +44 -54
- package/es/ProUpload/components/DragRender.js +94 -148
- package/es/ProUpload/components/DraggableUploadListItem.js +12 -25
- package/es/ProUpload/components/Example.js +27 -31
- package/es/ProUpload/components/FileItem.js +69 -163
- package/es/ProUpload/components/ImageRender.js +134 -170
- package/es/ProUpload/index.js +68 -100
- package/es/ProUpload/propsType.js +0 -1
- package/es/ProUpload/uitls.js +8 -4
- package/es/ProUtils/utils/index.js +17 -13
- package/es/ProViewer/index.js +154 -175
- package/es/ProViewer/propsType.js +0 -5
- package/es/ProWaterMark/index.js +9 -16
- package/es/ProWaterMark/propsType.js +0 -1
- package/es/hooks/useDraggableRow.js +25 -53
- package/es/index.js +57 -77
- package/es/locale/en_US.js +153 -142
- package/es/locale/index.js +23 -36
- package/es/locale/zh_CN.js +145 -142
- package/es/tokens.js +84 -83
- package/es/utils/index.js +24 -51
- package/package.json +4 -2
- package/es/ProConfigProvider/demo/locale.js +0 -58
package/es/ProLayout/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { useSetState, useToggle, useDeepCompareEffect } from 'ahooks';
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useMemo, useRef, useCallback, useLayoutEffect, useState } from "react";
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
import { useSetState, useToggle, useDeepCompareEffect } from "ahooks";
|
|
6
5
|
import { ProWaterMark } from "../index";
|
|
7
6
|
import { ProCollapse, ProFooter, ProHeader } from "./components";
|
|
8
7
|
import { Header, Notice, Menu } from "./components/Layout/index";
|
|
@@ -11,17 +10,15 @@ import { isTabsMode, validateTabsProps } from "./propTypes";
|
|
|
11
10
|
import { useProLayoutTabs } from "./components/TabsManager/hooks/useProLayoutTabs";
|
|
12
11
|
import { useActiveTab } from "./components/TabsManager/hooks/useActiveTab";
|
|
13
12
|
import { transformMenus } from "./utils";
|
|
14
|
-
import { canOpenAsTab } from "./components/TabsManager/utils";
|
|
13
|
+
import { canOpenAsTab, flattenMenuData } from "./components/TabsManager/utils";
|
|
15
14
|
import headerBg from "../assets/header_bg.png";
|
|
16
|
-
|
|
17
|
-
// 全局上下文
|
|
18
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
-
export const LayoutContext = /*#__PURE__*/createContext(undefined);
|
|
15
|
+
const LayoutContext = createContext(void 0);
|
|
20
16
|
const TABS_HEADER_MEASURE_SELECTOR = '[data-pro-layout-tabs-measure="true"]';
|
|
21
|
-
const ProLayout = props => {
|
|
17
|
+
const ProLayout = (props) => {
|
|
18
|
+
var _a;
|
|
22
19
|
const {
|
|
23
20
|
children,
|
|
24
|
-
className =
|
|
21
|
+
className = "",
|
|
25
22
|
pure = false,
|
|
26
23
|
headerHeight = 64,
|
|
27
24
|
contentStyle = {},
|
|
@@ -30,7 +27,7 @@ const ProLayout = props => {
|
|
|
30
27
|
notice: noticeIn,
|
|
31
28
|
// 修改别名
|
|
32
29
|
dataSource,
|
|
33
|
-
pathPrefix =
|
|
30
|
+
pathPrefix = "",
|
|
34
31
|
target,
|
|
35
32
|
onCollapsedChange,
|
|
36
33
|
collapsed: propsCollapsed = false,
|
|
@@ -39,108 +36,89 @@ const ProLayout = props => {
|
|
|
39
36
|
headerTitleRender,
|
|
40
37
|
headerContentRender,
|
|
41
38
|
rightContentRender,
|
|
42
|
-
title =
|
|
39
|
+
title = "",
|
|
43
40
|
logo,
|
|
44
41
|
appsOptions,
|
|
45
42
|
// Menu组件需要的props
|
|
46
|
-
iconfontUrl =
|
|
43
|
+
iconfontUrl = "",
|
|
47
44
|
sideMenuFooterRender,
|
|
48
45
|
sideMenuHeaderRender,
|
|
49
|
-
mode =
|
|
46
|
+
mode = "normal",
|
|
50
47
|
tabs
|
|
51
48
|
} = props;
|
|
52
49
|
const isTabsLayout = isTabsMode(props);
|
|
53
50
|
validateTabsProps(mode, tabs);
|
|
54
51
|
const tabsManagerRef = useRef(null);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
tabsBarEl: null,
|
|
63
|
-
hasTabs: false,
|
|
64
|
-
isIframePure: false
|
|
65
|
-
});
|
|
66
|
-
// 稳定的 ref 回调,避免内联函数每次渲染都触发 setState 导致无限循环
|
|
67
|
-
const setTabsBarElRef = useCallback(el => setTabsState({
|
|
68
|
-
tabsBarEl: el
|
|
69
|
-
}), []);
|
|
70
|
-
// TabsManager 会在 layout effect 中调用这两个回调;保持引用稳定,避免父组件每次
|
|
71
|
-
// render 都让 layout effect 重新执行并再次 setState,形成无限更新循环。
|
|
72
|
-
const handleTabsChange = useCallback(v => setTabsState({
|
|
73
|
-
hasTabs: v
|
|
74
|
-
}), []);
|
|
75
|
-
const handleIframePureChange = useCallback(v => setTabsState({
|
|
76
|
-
isIframePure: v
|
|
77
|
-
}), []);
|
|
52
|
+
const [{ tabsBarEl, hasTabs, isIframePure }, setTabsState] = useSetState({ tabsBarEl: null, hasTabs: false, isIframePure: false });
|
|
53
|
+
const setTabsBarElRef = useCallback(
|
|
54
|
+
(el) => setTabsState({ tabsBarEl: el }),
|
|
55
|
+
[]
|
|
56
|
+
);
|
|
57
|
+
const handleTabsChange = useCallback((v) => setTabsState({ hasTabs: v }), []);
|
|
58
|
+
const handleIframePureChange = useCallback((v) => setTabsState({ isIframePure: v }), []);
|
|
78
59
|
const noticeElRef = useRef(null);
|
|
79
|
-
const setNoticeElRef = useCallback(el => {
|
|
60
|
+
const setNoticeElRef = useCallback((el) => {
|
|
80
61
|
noticeElRef.current = el;
|
|
81
62
|
}, []);
|
|
82
|
-
const [stickyHeights, setStickyHeights] = useState({
|
|
83
|
-
|
|
84
|
-
tabsBar: 0
|
|
85
|
-
});
|
|
86
|
-
const [{
|
|
87
|
-
notice,
|
|
88
|
-
menus,
|
|
89
|
-
selectedPath
|
|
90
|
-
}, setState] = useSetState({
|
|
63
|
+
const [stickyHeights, setStickyHeights] = useState({ notice: 0, tabsBar: 0 });
|
|
64
|
+
const [{ notice, menus, selectedPath }, setState] = useSetState({
|
|
91
65
|
notice: headerNotice || noticeIn,
|
|
92
66
|
menus: [],
|
|
93
|
-
selectedPath:
|
|
67
|
+
selectedPath: ""
|
|
94
68
|
});
|
|
95
69
|
useLayoutEffect(() => {
|
|
96
70
|
const noticeEl = notice && !isIframePure ? noticeElRef.current : null;
|
|
97
71
|
const visibleTabsBarEl = isTabsLayout && hasTabs && !isIframePure ? tabsBarEl : null;
|
|
98
|
-
const visibleTabsHeaderEl = visibleTabsBarEl
|
|
72
|
+
const visibleTabsHeaderEl = visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.querySelector(
|
|
73
|
+
TABS_HEADER_MEASURE_SELECTOR
|
|
74
|
+
);
|
|
99
75
|
let active = true;
|
|
100
76
|
let animationFrameId;
|
|
101
77
|
const measureStickyElements = () => {
|
|
102
|
-
if (!active)
|
|
78
|
+
if (!active)
|
|
79
|
+
return;
|
|
103
80
|
const nextHeights = {
|
|
104
|
-
notice: noticeEl
|
|
105
|
-
tabsBar: visibleTabsHeaderEl
|
|
81
|
+
notice: (noticeEl == null ? void 0 : noticeEl.getBoundingClientRect().height) ?? 0,
|
|
82
|
+
tabsBar: (visibleTabsHeaderEl == null ? void 0 : visibleTabsHeaderEl.getBoundingClientRect().height) ?? 0
|
|
106
83
|
};
|
|
107
|
-
setStickyHeights(
|
|
84
|
+
setStickyHeights(
|
|
85
|
+
(currentHeights) => currentHeights.notice === nextHeights.notice && currentHeights.tabsBar === nextHeights.tabsBar ? currentHeights : nextHeights
|
|
86
|
+
);
|
|
108
87
|
};
|
|
109
88
|
measureStickyElements();
|
|
110
|
-
if (typeof window.requestAnimationFrame ===
|
|
89
|
+
if (typeof window.requestAnimationFrame === "function") {
|
|
111
90
|
animationFrameId = window.requestAnimationFrame(measureStickyElements);
|
|
112
91
|
}
|
|
113
|
-
const handleTabsTransitionEnd = event => {
|
|
114
|
-
if (event.target === visibleTabsBarEl && event.propertyName ===
|
|
92
|
+
const handleTabsTransitionEnd = (event) => {
|
|
93
|
+
if (event.target === visibleTabsBarEl && event.propertyName === "grid-template-rows") {
|
|
115
94
|
measureStickyElements();
|
|
116
95
|
}
|
|
117
96
|
};
|
|
118
|
-
visibleTabsBarEl
|
|
119
|
-
const observedElements = [noticeEl, visibleTabsHeaderEl].filter(
|
|
120
|
-
|
|
97
|
+
visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.addEventListener("transitionend", handleTabsTransitionEnd);
|
|
98
|
+
const observedElements = [noticeEl, visibleTabsHeaderEl].filter(
|
|
99
|
+
(element) => element !== null && element !== void 0
|
|
100
|
+
);
|
|
101
|
+
if (observedElements.length === 0 || typeof ResizeObserver === "undefined") {
|
|
121
102
|
return () => {
|
|
122
103
|
active = false;
|
|
123
|
-
if (animationFrameId !==
|
|
104
|
+
if (animationFrameId !== void 0) {
|
|
124
105
|
window.cancelAnimationFrame(animationFrameId);
|
|
125
106
|
}
|
|
126
|
-
visibleTabsBarEl
|
|
107
|
+
visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.removeEventListener("transitionend", handleTabsTransitionEnd);
|
|
127
108
|
};
|
|
128
109
|
}
|
|
129
110
|
const resizeObserver = new ResizeObserver(measureStickyElements);
|
|
130
|
-
observedElements.forEach(element => resizeObserver.observe(element));
|
|
111
|
+
observedElements.forEach((element) => resizeObserver.observe(element));
|
|
131
112
|
return () => {
|
|
132
113
|
active = false;
|
|
133
|
-
if (animationFrameId !==
|
|
114
|
+
if (animationFrameId !== void 0) {
|
|
134
115
|
window.cancelAnimationFrame(animationFrameId);
|
|
135
116
|
}
|
|
136
|
-
visibleTabsBarEl
|
|
117
|
+
visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.removeEventListener("transitionend", handleTabsTransitionEnd);
|
|
137
118
|
resizeObserver.disconnect();
|
|
138
119
|
};
|
|
139
120
|
}, [hasTabs, isIframePure, isTabsLayout, notice, tabsBarEl]);
|
|
140
|
-
const [collapsed, {
|
|
141
|
-
toggle,
|
|
142
|
-
set
|
|
143
|
-
}] = useToggle(props.collapsed || false);
|
|
121
|
+
const [collapsed, { toggle, set }] = useToggle(props.collapsed || false);
|
|
144
122
|
useDeepCompareEffect(() => {
|
|
145
123
|
set(props.collapsed || false);
|
|
146
124
|
}, [props.collapsed]);
|
|
@@ -149,27 +127,17 @@ const ProLayout = props => {
|
|
|
149
127
|
return;
|
|
150
128
|
}
|
|
151
129
|
const userData = transformMenus(dataSource, pathPrefix);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
setState({
|
|
155
|
-
menus: menuData
|
|
156
|
-
});
|
|
130
|
+
const menuData = Array.isArray(userData) ? userData : (userData == null ? void 0 : userData.menus) || [];
|
|
131
|
+
setState({ menus: menuData });
|
|
157
132
|
}, [dataSource]);
|
|
158
133
|
const menuDataSource = useMemo(() => {
|
|
159
|
-
// menus 已通过 useDeepCompareEffect 填充,直接使用
|
|
160
134
|
if (Array.isArray(menus) && menus.length > 0) {
|
|
161
|
-
return {
|
|
162
|
-
menus
|
|
163
|
-
};
|
|
135
|
+
return { menus };
|
|
164
136
|
}
|
|
165
|
-
|
|
166
|
-
// 确保 tabsInstance 第一次创建时就能查到完整菜单数据(含 closable 等属性)
|
|
167
|
-
if (!Array.isArray(dataSource) && Array.isArray(dataSource?.menus)) {
|
|
137
|
+
if (!Array.isArray(dataSource) && Array.isArray(dataSource == null ? void 0 : dataSource.menus)) {
|
|
168
138
|
return dataSource;
|
|
169
139
|
}
|
|
170
|
-
return {
|
|
171
|
-
menus: menus || []
|
|
172
|
-
};
|
|
140
|
+
return { menus: menus || [] };
|
|
173
141
|
}, [menus, dataSource]);
|
|
174
142
|
const enhancedTabsConfig = useMemo(() => {
|
|
175
143
|
if (!isTabsLayout || !tabs) {
|
|
@@ -178,99 +146,80 @@ const ProLayout = props => {
|
|
|
178
146
|
return {
|
|
179
147
|
...tabs,
|
|
180
148
|
onTabChange: (activeKey, activeTab, allTabs) => {
|
|
149
|
+
var _a2, _b, _c, _d, _e;
|
|
181
150
|
if (!allTabs || allTabs.length === 0) {
|
|
182
|
-
|
|
183
|
-
setState({
|
|
184
|
-
selectedPath: '##EMPTY##'
|
|
185
|
-
});
|
|
151
|
+
setState({ selectedPath: "##EMPTY##" });
|
|
186
152
|
return;
|
|
187
153
|
}
|
|
188
|
-
const
|
|
154
|
+
const menuCodeSource = (_a2 = activeTab == null ? void 0 : activeTab.menuCodeSource) == null ? void 0 : _a2.trim();
|
|
155
|
+
const sourceMenu = menuCodeSource ? flattenMenuData(menuDataSource.menus).find((menu) => menu.code === menuCodeSource) : void 0;
|
|
156
|
+
const sourcePath = (sourceMenu == null ? void 0 : sourceMenu.redirectUrl) || (sourceMenu == null ? void 0 : sourceMenu.url) || (sourceMenu == null ? void 0 : sourceMenu.router);
|
|
157
|
+
const targetPath = sourcePath || (activeTab == null ? void 0 : activeTab.url) || ((_b = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _b.router) || ((_c = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _c.redirectUrl) || ((_d = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _d.url);
|
|
189
158
|
if (targetPath && targetPath !== selectedPath) {
|
|
190
|
-
setState({
|
|
191
|
-
selectedPath: targetPath
|
|
192
|
-
});
|
|
159
|
+
setState({ selectedPath: targetPath });
|
|
193
160
|
}
|
|
194
|
-
tabs.onTabChange
|
|
161
|
+
(_e = tabs.onTabChange) == null ? void 0 : _e.call(tabs, activeKey, activeTab, allTabs);
|
|
195
162
|
}
|
|
196
163
|
};
|
|
197
|
-
}, [isTabsLayout, tabs, selectedPath]);
|
|
164
|
+
}, [isTabsLayout, menuDataSource.menus, tabs, selectedPath]);
|
|
198
165
|
const renderContent = () => {
|
|
199
166
|
if (!isTabsLayout || !enhancedTabsConfig) {
|
|
200
|
-
return
|
|
201
|
-
children: children
|
|
202
|
-
});
|
|
167
|
+
return /* @__PURE__ */ jsx("div", { children });
|
|
203
168
|
}
|
|
204
|
-
return
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
169
|
+
return /* @__PURE__ */ jsx(
|
|
170
|
+
TabsManager,
|
|
171
|
+
{
|
|
172
|
+
ref: tabsManagerRef,
|
|
173
|
+
config: enhancedTabsConfig,
|
|
174
|
+
dataSource: menuDataSource,
|
|
175
|
+
originalOnMenuClick: onMenuClick,
|
|
176
|
+
tabsBarContainer: tabsBarEl,
|
|
177
|
+
onTabsChange: handleTabsChange,
|
|
178
|
+
onIframePureChange: handleIframePureChange,
|
|
179
|
+
children
|
|
180
|
+
}
|
|
181
|
+
);
|
|
214
182
|
};
|
|
215
|
-
const handleMenuClick = useCallback(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
183
|
+
const handleMenuClick = useCallback(
|
|
184
|
+
(params) => {
|
|
185
|
+
var _a2, _b, _c, _d, _e, _f, _g;
|
|
186
|
+
if (!isTabsLayout) {
|
|
187
|
+
onMenuClick == null ? void 0 : onMenuClick(params);
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
(_b = (_a2 = tabsManagerRef.current) == null ? void 0 : _a2.handleMenuClick) == null ? void 0 : _b.call(_a2, params);
|
|
191
|
+
if (!params.item) {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
if (!canOpenAsTab(params.item)) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
const canAdd = (_d = (_c = tabsManagerRef.current) == null ? void 0 : _c.canAddTab) == null ? void 0 : _d.call(_c, params.item);
|
|
198
|
+
if (!canAdd) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
const targetPath = ((_e = params.item) == null ? void 0 : _e.redirectUrl) || ((_f = params.item) == null ? void 0 : _f.url) || ((_g = params.item) == null ? void 0 : _g.router);
|
|
202
|
+
if (targetPath && targetPath !== selectedPath) {
|
|
203
|
+
setState({ selectedPath: targetPath });
|
|
204
|
+
}
|
|
237
205
|
return false;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
const targetPath = params.item?.redirectUrl || params.item?.url || params.item?.router;
|
|
242
|
-
if (targetPath && targetPath !== selectedPath) {
|
|
243
|
-
setState({
|
|
244
|
-
selectedPath: targetPath
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
// tabs 模式下由 Tab 管理内容,阻止菜单默认 Link 跳转
|
|
248
|
-
return false;
|
|
249
|
-
}, [isTabsLayout, onMenuClick, selectedPath]);
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* 关闭提示框
|
|
253
|
-
*/
|
|
206
|
+
},
|
|
207
|
+
[isTabsLayout, onMenuClick, selectedPath]
|
|
208
|
+
);
|
|
254
209
|
const onCancelNotice = () => {
|
|
255
|
-
setState({
|
|
256
|
-
notice: null
|
|
257
|
-
});
|
|
210
|
+
setState({ notice: null });
|
|
258
211
|
};
|
|
259
212
|
const contentCls = classNames({
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
213
|
+
"pro-layout-row": true,
|
|
214
|
+
"pro-layout-row-has-notice": notice,
|
|
215
|
+
"pro-layout-row-pure": typeof pure === "boolean" && pure,
|
|
216
|
+
"pro-layout-row-top-pure": typeof pure !== "boolean" && pure.topMenu,
|
|
217
|
+
"pro-layout-row-left-pure": typeof pure !== "boolean" && pure.leftMenu
|
|
265
218
|
});
|
|
266
219
|
const noticeHeight = stickyHeights.notice;
|
|
267
|
-
|
|
268
|
-
// pure 模式下 Header 不渲染,有效头部高度为 0
|
|
269
|
-
const isPureHeader = typeof pure === 'boolean' ? pure : !!pure?.topMenu;
|
|
220
|
+
const isPureHeader = typeof pure === "boolean" ? pure : !!(pure == null ? void 0 : pure.topMenu);
|
|
270
221
|
const effectiveHeaderHeight = isPureHeader ? 0 : headerHeight;
|
|
271
222
|
const contentStickyTop = effectiveHeaderHeight + noticeHeight + (hasTabs ? stickyHeights.tabsBar : 0);
|
|
272
|
-
|
|
273
|
-
// 为Header组件创建专门的props对象
|
|
274
223
|
const headerProps = {
|
|
275
224
|
headerHeight,
|
|
276
225
|
pure,
|
|
@@ -281,21 +230,15 @@ const ProLayout = props => {
|
|
|
281
230
|
logo,
|
|
282
231
|
appsOptions
|
|
283
232
|
};
|
|
284
|
-
|
|
285
|
-
// 为Notice组件创建专门的props对象
|
|
286
233
|
const noticeProps = {
|
|
287
234
|
headerHeight: effectiveHeaderHeight,
|
|
288
235
|
notice,
|
|
289
236
|
onCancel: onCancelNotice,
|
|
290
237
|
noticeRef: setNoticeElRef
|
|
291
238
|
};
|
|
292
|
-
|
|
293
|
-
// 为Menu组件创建专门的props对象
|
|
294
239
|
const menuProps = {
|
|
295
240
|
headerHeight,
|
|
296
|
-
dataSource: Array.isArray(menus) ? {
|
|
297
|
-
menus
|
|
298
|
-
} : menus,
|
|
241
|
+
dataSource: Array.isArray(menus) ? { menus } : menus,
|
|
299
242
|
iconfontUrl,
|
|
300
243
|
collapsed,
|
|
301
244
|
notice,
|
|
@@ -309,72 +252,74 @@ const ProLayout = props => {
|
|
|
309
252
|
onMenuClick: handleMenuClick,
|
|
310
253
|
appsOptions
|
|
311
254
|
};
|
|
312
|
-
const layoutDom = isIframePure ?
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}) : /*#__PURE__*/_jsxs("div", {
|
|
324
|
-
className: classNames({
|
|
325
|
-
'pro-layout': true,
|
|
326
|
-
'pro-layout-light': true,
|
|
327
|
-
'pro-layout-pure': typeof pure === 'boolean' ? pure : pure?.topMenu || pure?.leftMenu,
|
|
328
|
-
[`${className}`]: className
|
|
329
|
-
}),
|
|
330
|
-
style: {
|
|
331
|
-
'--header-bg-image': `url(${headerBg})`,
|
|
332
|
-
'--pro-layout-header-height': `${effectiveHeaderHeight}px`,
|
|
333
|
-
'--pro-layout-notice-height': `${noticeHeight}px`,
|
|
334
|
-
'--pro-layout-content-sticky-top': `${contentStickyTop}px`
|
|
335
|
-
},
|
|
336
|
-
children: [/*#__PURE__*/_jsx(Header, {
|
|
337
|
-
...headerProps
|
|
338
|
-
}), /*#__PURE__*/_jsx(Notice, {
|
|
339
|
-
...noticeProps
|
|
340
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
341
|
-
ref: setTabsBarElRef,
|
|
342
|
-
className: `pro-layout-tabs-bar-wrapper${hasTabs ? ' tabs-visible' : ''}${collapsed ? ' tabs-menu-open' : ''}`,
|
|
343
|
-
style: {
|
|
344
|
-
marginTop: effectiveHeaderHeight + noticeHeight
|
|
345
|
-
}
|
|
346
|
-
}), /*#__PURE__*/_jsxs("div", {
|
|
347
|
-
className: contentCls,
|
|
348
|
-
children: [/*#__PURE__*/_jsx(Menu, {
|
|
349
|
-
...menuProps
|
|
350
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
351
|
-
className: `pro-layout-content${hasTabs ? ' pro-layout-content-has-tabs' : ''}`,
|
|
352
|
-
style: {
|
|
353
|
-
...contentStyle,
|
|
354
|
-
marginTop: 0
|
|
355
|
-
},
|
|
255
|
+
const layoutDom = isIframePure ? (
|
|
256
|
+
/* iframe pure 模式:仅渲染 TabsManager 内容,不渲染 Header/Notice/Menu/tabsBar */
|
|
257
|
+
/* @__PURE__ */ jsx(
|
|
258
|
+
"div",
|
|
259
|
+
{
|
|
260
|
+
className: classNames({
|
|
261
|
+
"pro-layout": true,
|
|
262
|
+
"pro-layout-light": true,
|
|
263
|
+
"pro-layout-iframe-pure": true,
|
|
264
|
+
[`${className}`]: className
|
|
265
|
+
}),
|
|
356
266
|
children: renderContent()
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
267
|
+
}
|
|
268
|
+
)
|
|
269
|
+
) : /* @__PURE__ */ jsxs(
|
|
270
|
+
"div",
|
|
271
|
+
{
|
|
272
|
+
className: classNames({
|
|
273
|
+
"pro-layout": true,
|
|
274
|
+
"pro-layout-light": true,
|
|
275
|
+
"pro-layout-pure": typeof pure === "boolean" ? pure : (pure == null ? void 0 : pure.topMenu) || (pure == null ? void 0 : pure.leftMenu),
|
|
276
|
+
[`${className}`]: className
|
|
277
|
+
}),
|
|
278
|
+
style: {
|
|
279
|
+
"--header-bg-image": `url(${headerBg})`,
|
|
280
|
+
"--pro-layout-header-height": `${effectiveHeaderHeight}px`,
|
|
281
|
+
"--pro-layout-notice-height": `${noticeHeight}px`,
|
|
282
|
+
"--pro-layout-content-sticky-top": `${contentStickyTop}px`
|
|
283
|
+
},
|
|
284
|
+
children: [
|
|
285
|
+
/* @__PURE__ */ jsx(Header, { ...headerProps }),
|
|
286
|
+
/* @__PURE__ */ jsx(Notice, { ...noticeProps }),
|
|
287
|
+
/* @__PURE__ */ jsx(
|
|
288
|
+
"div",
|
|
289
|
+
{
|
|
290
|
+
ref: setTabsBarElRef,
|
|
291
|
+
className: `pro-layout-tabs-bar-wrapper${hasTabs ? " tabs-visible" : ""}${collapsed ? " tabs-menu-open" : ""}`,
|
|
292
|
+
style: { marginTop: effectiveHeaderHeight + noticeHeight }
|
|
293
|
+
}
|
|
294
|
+
),
|
|
295
|
+
/* @__PURE__ */ jsxs("div", { className: contentCls, children: [
|
|
296
|
+
/* @__PURE__ */ jsx(Menu, { ...menuProps }),
|
|
297
|
+
/* @__PURE__ */ jsx(
|
|
298
|
+
"div",
|
|
299
|
+
{
|
|
300
|
+
className: `pro-layout-content${hasTabs ? " pro-layout-content-has-tabs" : ""}`,
|
|
301
|
+
style: {
|
|
302
|
+
...contentStyle,
|
|
303
|
+
marginTop: 0
|
|
304
|
+
},
|
|
305
|
+
children: renderContent()
|
|
306
|
+
}
|
|
307
|
+
)
|
|
308
|
+
] })
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
);
|
|
312
|
+
return /* @__PURE__ */ jsx(LayoutContext.Provider, { value: { selectedPath, target, onSelected: setState }, children: !((_a = Object.keys(waterMarkProps)) == null ? void 0 : _a.length) ? layoutDom : /* @__PURE__ */ jsx(ProWaterMark, { ...waterMarkProps, children: layoutDom }) });
|
|
371
313
|
};
|
|
372
314
|
ProLayout.ProCollapse = ProCollapse;
|
|
373
315
|
ProLayout.ProFooter = ProFooter;
|
|
374
316
|
ProLayout.ProHeader = ProHeader;
|
|
375
317
|
ProLayout.useProLayoutTabs = useProLayoutTabs;
|
|
376
318
|
ProLayout.useActiveTab = useActiveTab;
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
319
|
+
var ProLayout_default = ProLayout;
|
|
320
|
+
export {
|
|
321
|
+
LayoutContext,
|
|
322
|
+
ProLayout_default as default,
|
|
323
|
+
useActiveTab,
|
|
324
|
+
useProLayoutTabs
|
|
325
|
+
};
|
|
@@ -321,7 +321,7 @@ export interface TabItem {
|
|
|
321
321
|
*/
|
|
322
322
|
title: string;
|
|
323
323
|
/**
|
|
324
|
-
* @description
|
|
324
|
+
* @description 标签关联路由。URL 同步模式下保存当前完整的 pathname + search + hash
|
|
325
325
|
*/
|
|
326
326
|
url?: string;
|
|
327
327
|
/**
|
|
@@ -349,6 +349,10 @@ export interface TabItem {
|
|
|
349
349
|
* @description 标签页关联键;用于业务详情页复用已有标签页
|
|
350
350
|
*/
|
|
351
351
|
relationKey?: string | number;
|
|
352
|
+
/**
|
|
353
|
+
* @description 最初打开当前业务标签链路的左侧菜单 code;仅用于激活来源菜单
|
|
354
|
+
*/
|
|
355
|
+
menuCodeSource?: string;
|
|
352
356
|
}
|
|
353
357
|
export interface TabsState {
|
|
354
358
|
tabsList: TabItem[];
|
|
@@ -358,6 +362,13 @@ export interface TabsState {
|
|
|
358
362
|
activeComponent?: string;
|
|
359
363
|
}
|
|
360
364
|
export type TabsStorageStrategy = 'localStorage' | 'sessionStorage';
|
|
365
|
+
export interface TabsUrlSyncConfig {
|
|
366
|
+
/**
|
|
367
|
+
* @description 切换标签页时写入浏览器历史的方式
|
|
368
|
+
* @default 'replace'
|
|
369
|
+
*/
|
|
370
|
+
history?: 'replace' | 'push';
|
|
371
|
+
}
|
|
361
372
|
/**
|
|
362
373
|
* @description 添加标签页的业务参数
|
|
363
374
|
*/
|
|
@@ -370,6 +381,11 @@ export interface AddTabParams {
|
|
|
370
381
|
* @description 标签页显示名称
|
|
371
382
|
*/
|
|
372
383
|
name: string;
|
|
384
|
+
/**
|
|
385
|
+
* @description 应用内完整 URL。URL 同步模式下作为页签业务身份
|
|
386
|
+
* @example '/wjs/workbench/workbench/Record?recordTab=quote'
|
|
387
|
+
*/
|
|
388
|
+
url?: string;
|
|
373
389
|
/**
|
|
374
390
|
* @description 额外的业务数据
|
|
375
391
|
*/
|
|
@@ -378,6 +394,10 @@ export interface AddTabParams {
|
|
|
378
394
|
* @description 标签页关联键;相同关联键的业务详情重复打开时复用已有标签页
|
|
379
395
|
*/
|
|
380
396
|
relationKey?: string | number;
|
|
397
|
+
/**
|
|
398
|
+
* @description 最初打开当前业务标签链路的左侧菜单 code;仅用于激活来源菜单
|
|
399
|
+
*/
|
|
400
|
+
menuCodeSource?: string;
|
|
381
401
|
}
|
|
382
402
|
/**
|
|
383
403
|
* @description 添加标签页的选项
|
|
@@ -519,6 +539,13 @@ export interface TabsConfig {
|
|
|
519
539
|
max?: number;
|
|
520
540
|
storage?: TabsStorageStrategy;
|
|
521
541
|
cacheKey?: string;
|
|
542
|
+
/**
|
|
543
|
+
* @description 是否将活动页签与浏览器 URL 双向同步。默认不同步,保持现有行为
|
|
544
|
+
* - true: 开启同步,切换页签时使用 replace
|
|
545
|
+
* - object: 开启同步并自定义历史写入方式
|
|
546
|
+
* @default false
|
|
547
|
+
*/
|
|
548
|
+
urlSync?: boolean | TabsUrlSyncConfig;
|
|
522
549
|
/**
|
|
523
550
|
* @description 普通初始标签页。无缓存时每次 ProLayout 挂载只初始化一次;关闭全部后本次挂载期间不会重新添加
|
|
524
551
|
*/
|