@jetlinks-web/components 2.0.1 → 2.0.2-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/package.json +3 -3
- package/src/ConfigProvider/context.ts +17 -17
- package/src/ConfigProvider/index.tsx +40 -42
- package/src/ProLayout/Basic/BasicLayout.tsx +395 -392
- package/src/ProLayout/Basic/Header.tsx +115 -115
- package/src/ProLayout/PageContainer/index.tsx +441 -441
- package/src/ProLayout/SiderMenu/BaseMenu.tsx +296 -296
- package/src/ProLayout/SiderMenu/SiderMenu.tsx +320 -320
- package/src/ProLayout/SiderMenu/typings.ts +49 -49
- package/src/ProLayout/TopHeader/index.tsx +210 -210
- package/src/ProLayout/typings.ts +87 -87
- package/src/ProTable/index.tsx +551 -551
- package/src/ProTable/proTableTypes.ts +70 -70
- package/src/ProTable/style/index.less +92 -92
- package/src/Search/typing.ts +76 -76
- package/src/style/variable.less +4 -4
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import type { VNodeChild, CSSProperties, HTMLAttributes } from 'vue';
|
|
2
|
-
import type { Theme } from '../typings';
|
|
3
|
-
|
|
4
|
-
export type {
|
|
5
|
-
MenuMode,
|
|
6
|
-
MenuTheme,
|
|
7
|
-
} from 'ant-design-vue/
|
|
8
|
-
|
|
9
|
-
export interface MenuInfo {
|
|
10
|
-
key: string | number;
|
|
11
|
-
keyPath: string[] | number[];
|
|
12
|
-
item: VNodeChild;
|
|
13
|
-
domEvent: MouseEvent;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface SelectInfo extends MenuInfo {
|
|
17
|
-
selectedKeys: string[];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type OpenEventHandler = (
|
|
21
|
-
keys:
|
|
22
|
-
| string[]
|
|
23
|
-
| {
|
|
24
|
-
key: string;
|
|
25
|
-
item: VNodeChild;
|
|
26
|
-
trigger: string;
|
|
27
|
-
open: boolean;
|
|
28
|
-
},
|
|
29
|
-
) => void;
|
|
30
|
-
|
|
31
|
-
export type SiderTheme = Theme;
|
|
32
|
-
|
|
33
|
-
export type CollapseType = 'clickTrigger' | 'responsive';
|
|
34
|
-
|
|
35
|
-
export interface SiderProps extends HTMLAttributes {
|
|
36
|
-
prefixCls?: string;
|
|
37
|
-
collapsible?: boolean;
|
|
38
|
-
collapsed?: boolean;
|
|
39
|
-
defaultCollapsed?: boolean;
|
|
40
|
-
reverseArrow?: boolean;
|
|
41
|
-
onCollapse?: (collapsed: boolean, type: CollapseType) => void;
|
|
42
|
-
zeroWidthTriggerStyle?: CSSProperties;
|
|
43
|
-
trigger?: VNodeChild | JSX.Element;
|
|
44
|
-
width?: number | string;
|
|
45
|
-
collapsedWidth?: number | string;
|
|
46
|
-
breakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
47
|
-
theme?: SiderTheme;
|
|
48
|
-
onBreakpoint?: (broken: boolean) => void;
|
|
49
|
-
}
|
|
1
|
+
import type { VNodeChild, CSSProperties, HTMLAttributes } from 'vue';
|
|
2
|
+
import type { Theme } from '../typings';
|
|
3
|
+
|
|
4
|
+
export type {
|
|
5
|
+
MenuMode,
|
|
6
|
+
MenuTheme,
|
|
7
|
+
} from 'ant-design-vue/es/menu/src/interface';
|
|
8
|
+
|
|
9
|
+
export interface MenuInfo {
|
|
10
|
+
key: string | number;
|
|
11
|
+
keyPath: string[] | number[];
|
|
12
|
+
item: VNodeChild;
|
|
13
|
+
domEvent: MouseEvent;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface SelectInfo extends MenuInfo {
|
|
17
|
+
selectedKeys: string[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type OpenEventHandler = (
|
|
21
|
+
keys:
|
|
22
|
+
| string[]
|
|
23
|
+
| {
|
|
24
|
+
key: string;
|
|
25
|
+
item: VNodeChild;
|
|
26
|
+
trigger: string;
|
|
27
|
+
open: boolean;
|
|
28
|
+
},
|
|
29
|
+
) => void;
|
|
30
|
+
|
|
31
|
+
export type SiderTheme = Theme;
|
|
32
|
+
|
|
33
|
+
export type CollapseType = 'clickTrigger' | 'responsive';
|
|
34
|
+
|
|
35
|
+
export interface SiderProps extends HTMLAttributes {
|
|
36
|
+
prefixCls?: string;
|
|
37
|
+
collapsible?: boolean;
|
|
38
|
+
collapsed?: boolean;
|
|
39
|
+
defaultCollapsed?: boolean;
|
|
40
|
+
reverseArrow?: boolean;
|
|
41
|
+
onCollapse?: (collapsed: boolean, type: CollapseType) => void;
|
|
42
|
+
zeroWidthTriggerStyle?: CSSProperties;
|
|
43
|
+
trigger?: VNodeChild | JSX.Element;
|
|
44
|
+
width?: number | string;
|
|
45
|
+
collapsedWidth?: number | string;
|
|
46
|
+
breakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
47
|
+
theme?: SiderTheme;
|
|
48
|
+
onBreakpoint?: (broken: boolean) => void;
|
|
49
|
+
}
|
|
@@ -1,210 +1,210 @@
|
|
|
1
|
-
import { computed, ref } from 'vue';
|
|
2
|
-
import type { RouteRecordRaw } from 'vue-router';
|
|
3
|
-
import { default as ResizeObserver } from 'ant-design-vue/
|
|
4
|
-
import type { VueNode } from 'ant-design-vue/
|
|
5
|
-
import type { SiderMenuProps } from '../SiderMenu/SiderMenu';
|
|
6
|
-
import {
|
|
7
|
-
defaultRenderLogoAndTitle,
|
|
8
|
-
siderMenuProps,
|
|
9
|
-
} from '../SiderMenu/SiderMenu';
|
|
10
|
-
import PropTypes from 'ant-design-vue/
|
|
11
|
-
import type {
|
|
12
|
-
MenuDataItem,
|
|
13
|
-
ProProps,
|
|
14
|
-
RightContentRender,
|
|
15
|
-
WithFalse,
|
|
16
|
-
Theme,
|
|
17
|
-
} from '../typings';
|
|
18
|
-
import { defaultSettingProps } from '../defaultSettings';
|
|
19
|
-
import type { PropType, FunctionalComponent, ExtractPropTypes } from 'vue';
|
|
20
|
-
import { defaultPrefixCls, useRouteContext } from '../RouteContext';
|
|
21
|
-
import BaseMenu from '../SiderMenu/BaseMenu';
|
|
22
|
-
import { clearMenuItem } from '../util';
|
|
23
|
-
|
|
24
|
-
export const baseHeaderProps = {
|
|
25
|
-
...defaultSettingProps,
|
|
26
|
-
prefixCls: PropTypes.string.def('ant-pro'),
|
|
27
|
-
collapsed: PropTypes.looseBool,
|
|
28
|
-
logo: siderMenuProps.logo,
|
|
29
|
-
logoStyle: siderMenuProps.logoStyle,
|
|
30
|
-
headerTheme: {
|
|
31
|
-
type: String as PropType<Theme>,
|
|
32
|
-
default: 'dark',
|
|
33
|
-
},
|
|
34
|
-
menuData: {
|
|
35
|
-
type: Array as PropType<MenuDataItem[]>,
|
|
36
|
-
default: () => [],
|
|
37
|
-
},
|
|
38
|
-
splitMenus: siderMenuProps.splitMenus,
|
|
39
|
-
menuRender: {
|
|
40
|
-
type: [Object, Function] as PropType<
|
|
41
|
-
WithFalse<
|
|
42
|
-
(
|
|
43
|
-
props: ProProps /* HeaderViewProps */,
|
|
44
|
-
defaultDom: VueNode,
|
|
45
|
-
) => VueNode
|
|
46
|
-
>
|
|
47
|
-
>,
|
|
48
|
-
default: () => undefined,
|
|
49
|
-
},
|
|
50
|
-
menuHeaderRender: siderMenuProps.menuHeaderRender,
|
|
51
|
-
menuItemRender: siderMenuProps.menuItemRender,
|
|
52
|
-
subMenuItemRender: siderMenuProps.subMenuItemRender,
|
|
53
|
-
rightContentRender: {
|
|
54
|
-
type: [Object, Function] as PropType<RightContentRender>,
|
|
55
|
-
default: () => undefined,
|
|
56
|
-
},
|
|
57
|
-
collapsedButtonRender: siderMenuProps.collapsedButtonRender,
|
|
58
|
-
matchMenuKeys: siderMenuProps.matchMenuKeys,
|
|
59
|
-
|
|
60
|
-
// events
|
|
61
|
-
onMenuHeaderClick: PropTypes.func,
|
|
62
|
-
onCollapse: siderMenuProps.onCollapse,
|
|
63
|
-
onOpenKeys: siderMenuProps.onOpenKeys,
|
|
64
|
-
onSelect: siderMenuProps.onSelect,
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export type BaseHeaderPropsType = ExtractPropTypes<typeof baseHeaderProps>;
|
|
68
|
-
|
|
69
|
-
export const topNavHeaderProps = { ...siderMenuProps, ...baseHeaderProps };
|
|
70
|
-
|
|
71
|
-
export type TopNavHeaderProps = Partial<
|
|
72
|
-
ExtractPropTypes<typeof topNavHeaderProps>
|
|
73
|
-
> &
|
|
74
|
-
Partial<SiderMenuProps>;
|
|
75
|
-
|
|
76
|
-
const RightContent: FunctionalComponent<TopNavHeaderProps> = ({
|
|
77
|
-
rightContentRender,
|
|
78
|
-
...props
|
|
79
|
-
}) => {
|
|
80
|
-
const rightSize = ref<number | string>('auto');
|
|
81
|
-
|
|
82
|
-
return (
|
|
83
|
-
<div
|
|
84
|
-
style={{
|
|
85
|
-
minWidth: rightSize.value,
|
|
86
|
-
}}
|
|
87
|
-
>
|
|
88
|
-
<div
|
|
89
|
-
style={{
|
|
90
|
-
paddingRight: 8,
|
|
91
|
-
}}
|
|
92
|
-
>
|
|
93
|
-
<ResizeObserver
|
|
94
|
-
onResize={({ width }: { width: number }) => {
|
|
95
|
-
rightSize.value = width;
|
|
96
|
-
}}
|
|
97
|
-
>
|
|
98
|
-
{rightContentRender &&
|
|
99
|
-
typeof rightContentRender === 'function' ? (
|
|
100
|
-
<div>
|
|
101
|
-
{rightContentRender({
|
|
102
|
-
...props,
|
|
103
|
-
})}
|
|
104
|
-
</div>
|
|
105
|
-
) : (
|
|
106
|
-
rightContentRender
|
|
107
|
-
)}
|
|
108
|
-
</ResizeObserver>
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
111
|
-
);
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export const TopNavHeader: FunctionalComponent<TopNavHeaderProps> = (props) => {
|
|
115
|
-
const headerRef = ref();
|
|
116
|
-
const {
|
|
117
|
-
prefixCls: propPrefixCls,
|
|
118
|
-
onMenuHeaderClick,
|
|
119
|
-
onOpenKeys,
|
|
120
|
-
onSelect,
|
|
121
|
-
contentWidth,
|
|
122
|
-
rightContentRender,
|
|
123
|
-
layout,
|
|
124
|
-
menuData,
|
|
125
|
-
mode,
|
|
126
|
-
} = props;
|
|
127
|
-
const context = useRouteContext();
|
|
128
|
-
const prefixCls = `${propPrefixCls || defaultPrefixCls}-top-nav-header`;
|
|
129
|
-
const headerDom = defaultRenderLogoAndTitle(
|
|
130
|
-
{ ...props, collapsed: false } as SiderMenuProps,
|
|
131
|
-
// REMARK:: Any time render header title
|
|
132
|
-
// layout === 'mix' ? 'headerTitleRender' : undefined,
|
|
133
|
-
// layout !== 'side' ? 'headerTitleRender' : undefined,
|
|
134
|
-
'headerTitleRender',
|
|
135
|
-
);
|
|
136
|
-
//
|
|
137
|
-
let MenusData = props.layout === 'side' ? [] : menuData;
|
|
138
|
-
if (props.layout === 'mix' && props.splitMenus) {
|
|
139
|
-
const noChildrenMenuData = (menuData || []).map((item) => ({
|
|
140
|
-
...item,
|
|
141
|
-
children: undefined,
|
|
142
|
-
component: undefined,
|
|
143
|
-
})) as RouteRecordRaw[];
|
|
144
|
-
MenusData = clearMenuItem(noChildrenMenuData);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const _mode = computed(() =>
|
|
148
|
-
props.layout === 'mix' && props.splitMenus ? 'horizontal' : mode,
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
const className = computed(() => {
|
|
152
|
-
return {
|
|
153
|
-
[prefixCls]: true,
|
|
154
|
-
light: props.theme === 'light',
|
|
155
|
-
dark: props.theme === 'dark',
|
|
156
|
-
};
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
return (
|
|
160
|
-
<div class={className.value}>
|
|
161
|
-
<div
|
|
162
|
-
ref={headerRef}
|
|
163
|
-
class={`${prefixCls}-main ${
|
|
164
|
-
contentWidth === 'Fixed' ? 'wide' : ''
|
|
165
|
-
}`}
|
|
166
|
-
>
|
|
167
|
-
{headerDom && (
|
|
168
|
-
<div
|
|
169
|
-
class={`${prefixCls}-main-left`}
|
|
170
|
-
onClick={onMenuHeaderClick}
|
|
171
|
-
>
|
|
172
|
-
<div class={`${prefixCls}-logo`} key="logo" id="logo">
|
|
173
|
-
{headerDom}
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
)}
|
|
177
|
-
<div style={{ flex: 1 }} class={`${prefixCls}-menu`}>
|
|
178
|
-
<BaseMenu
|
|
179
|
-
prefixCls={propPrefixCls}
|
|
180
|
-
locale={props.locale || context.locale}
|
|
181
|
-
theme={props.theme}
|
|
182
|
-
mode={_mode.value}
|
|
183
|
-
collapsed={props.collapsed}
|
|
184
|
-
iconfontUrl={props.iconfontUrl}
|
|
185
|
-
menuData={MenusData}
|
|
186
|
-
menuItemRender={props.menuItemRender}
|
|
187
|
-
subMenuItemRender={props.subMenuItemRender}
|
|
188
|
-
openKeys={context.openKeys}
|
|
189
|
-
selectedKeys={context.selectedKeys}
|
|
190
|
-
class={{
|
|
191
|
-
'top-nav-menu': props.mode === 'horizontal',
|
|
192
|
-
}}
|
|
193
|
-
{...{
|
|
194
|
-
'onUpdate:openKeys': ($event: string[]) =>
|
|
195
|
-
onOpenKeys && onOpenKeys($event),
|
|
196
|
-
'onUpdate:selectedKeys': ($event: string[]) =>
|
|
197
|
-
onSelect && onSelect($event),
|
|
198
|
-
}}
|
|
199
|
-
/>
|
|
200
|
-
</div>
|
|
201
|
-
{rightContentRender && (
|
|
202
|
-
<RightContent
|
|
203
|
-
rightContentRender={rightContentRender}
|
|
204
|
-
{...props}
|
|
205
|
-
/>
|
|
206
|
-
)}
|
|
207
|
-
</div>
|
|
208
|
-
</div>
|
|
209
|
-
);
|
|
210
|
-
};
|
|
1
|
+
import { computed, ref } from 'vue';
|
|
2
|
+
import type { RouteRecordRaw } from 'vue-router';
|
|
3
|
+
import { default as ResizeObserver } from 'ant-design-vue/es/vc-resize-observer';
|
|
4
|
+
import type { VueNode } from 'ant-design-vue/es/_util/type';
|
|
5
|
+
import type { SiderMenuProps } from '../SiderMenu/SiderMenu';
|
|
6
|
+
import {
|
|
7
|
+
defaultRenderLogoAndTitle,
|
|
8
|
+
siderMenuProps,
|
|
9
|
+
} from '../SiderMenu/SiderMenu';
|
|
10
|
+
import PropTypes from 'ant-design-vue/es/_util/vue-types';
|
|
11
|
+
import type {
|
|
12
|
+
MenuDataItem,
|
|
13
|
+
ProProps,
|
|
14
|
+
RightContentRender,
|
|
15
|
+
WithFalse,
|
|
16
|
+
Theme,
|
|
17
|
+
} from '../typings';
|
|
18
|
+
import { defaultSettingProps } from '../defaultSettings';
|
|
19
|
+
import type { PropType, FunctionalComponent, ExtractPropTypes } from 'vue';
|
|
20
|
+
import { defaultPrefixCls, useRouteContext } from '../RouteContext';
|
|
21
|
+
import BaseMenu from '../SiderMenu/BaseMenu';
|
|
22
|
+
import { clearMenuItem } from '../util';
|
|
23
|
+
|
|
24
|
+
export const baseHeaderProps = {
|
|
25
|
+
...defaultSettingProps,
|
|
26
|
+
prefixCls: PropTypes.string.def('ant-pro'),
|
|
27
|
+
collapsed: PropTypes.looseBool,
|
|
28
|
+
logo: siderMenuProps.logo,
|
|
29
|
+
logoStyle: siderMenuProps.logoStyle,
|
|
30
|
+
headerTheme: {
|
|
31
|
+
type: String as PropType<Theme>,
|
|
32
|
+
default: 'dark',
|
|
33
|
+
},
|
|
34
|
+
menuData: {
|
|
35
|
+
type: Array as PropType<MenuDataItem[]>,
|
|
36
|
+
default: () => [],
|
|
37
|
+
},
|
|
38
|
+
splitMenus: siderMenuProps.splitMenus,
|
|
39
|
+
menuRender: {
|
|
40
|
+
type: [Object, Function] as PropType<
|
|
41
|
+
WithFalse<
|
|
42
|
+
(
|
|
43
|
+
props: ProProps /* HeaderViewProps */,
|
|
44
|
+
defaultDom: VueNode,
|
|
45
|
+
) => VueNode
|
|
46
|
+
>
|
|
47
|
+
>,
|
|
48
|
+
default: () => undefined,
|
|
49
|
+
},
|
|
50
|
+
menuHeaderRender: siderMenuProps.menuHeaderRender,
|
|
51
|
+
menuItemRender: siderMenuProps.menuItemRender,
|
|
52
|
+
subMenuItemRender: siderMenuProps.subMenuItemRender,
|
|
53
|
+
rightContentRender: {
|
|
54
|
+
type: [Object, Function] as PropType<RightContentRender>,
|
|
55
|
+
default: () => undefined,
|
|
56
|
+
},
|
|
57
|
+
collapsedButtonRender: siderMenuProps.collapsedButtonRender,
|
|
58
|
+
matchMenuKeys: siderMenuProps.matchMenuKeys,
|
|
59
|
+
|
|
60
|
+
// events
|
|
61
|
+
onMenuHeaderClick: PropTypes.func,
|
|
62
|
+
onCollapse: siderMenuProps.onCollapse,
|
|
63
|
+
onOpenKeys: siderMenuProps.onOpenKeys,
|
|
64
|
+
onSelect: siderMenuProps.onSelect,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export type BaseHeaderPropsType = ExtractPropTypes<typeof baseHeaderProps>;
|
|
68
|
+
|
|
69
|
+
export const topNavHeaderProps = { ...siderMenuProps, ...baseHeaderProps };
|
|
70
|
+
|
|
71
|
+
export type TopNavHeaderProps = Partial<
|
|
72
|
+
ExtractPropTypes<typeof topNavHeaderProps>
|
|
73
|
+
> &
|
|
74
|
+
Partial<SiderMenuProps>;
|
|
75
|
+
|
|
76
|
+
const RightContent: FunctionalComponent<TopNavHeaderProps> = ({
|
|
77
|
+
rightContentRender,
|
|
78
|
+
...props
|
|
79
|
+
}) => {
|
|
80
|
+
const rightSize = ref<number | string>('auto');
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<div
|
|
84
|
+
style={{
|
|
85
|
+
minWidth: rightSize.value,
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
<div
|
|
89
|
+
style={{
|
|
90
|
+
paddingRight: 8,
|
|
91
|
+
}}
|
|
92
|
+
>
|
|
93
|
+
<ResizeObserver
|
|
94
|
+
onResize={({ width }: { width: number }) => {
|
|
95
|
+
rightSize.value = width;
|
|
96
|
+
}}
|
|
97
|
+
>
|
|
98
|
+
{rightContentRender &&
|
|
99
|
+
typeof rightContentRender === 'function' ? (
|
|
100
|
+
<div>
|
|
101
|
+
{rightContentRender({
|
|
102
|
+
...props,
|
|
103
|
+
})}
|
|
104
|
+
</div>
|
|
105
|
+
) : (
|
|
106
|
+
rightContentRender
|
|
107
|
+
)}
|
|
108
|
+
</ResizeObserver>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export const TopNavHeader: FunctionalComponent<TopNavHeaderProps> = (props) => {
|
|
115
|
+
const headerRef = ref();
|
|
116
|
+
const {
|
|
117
|
+
prefixCls: propPrefixCls,
|
|
118
|
+
onMenuHeaderClick,
|
|
119
|
+
onOpenKeys,
|
|
120
|
+
onSelect,
|
|
121
|
+
contentWidth,
|
|
122
|
+
rightContentRender,
|
|
123
|
+
layout,
|
|
124
|
+
menuData,
|
|
125
|
+
mode,
|
|
126
|
+
} = props;
|
|
127
|
+
const context = useRouteContext();
|
|
128
|
+
const prefixCls = `${propPrefixCls || defaultPrefixCls}-top-nav-header`;
|
|
129
|
+
const headerDom = defaultRenderLogoAndTitle(
|
|
130
|
+
{ ...props, collapsed: false } as SiderMenuProps,
|
|
131
|
+
// REMARK:: Any time render header title
|
|
132
|
+
// layout === 'mix' ? 'headerTitleRender' : undefined,
|
|
133
|
+
// layout !== 'side' ? 'headerTitleRender' : undefined,
|
|
134
|
+
'headerTitleRender',
|
|
135
|
+
);
|
|
136
|
+
//
|
|
137
|
+
let MenusData = props.layout === 'side' ? [] : menuData;
|
|
138
|
+
if (props.layout === 'mix' && props.splitMenus) {
|
|
139
|
+
const noChildrenMenuData = (menuData || []).map((item) => ({
|
|
140
|
+
...item,
|
|
141
|
+
children: undefined,
|
|
142
|
+
component: undefined,
|
|
143
|
+
})) as RouteRecordRaw[];
|
|
144
|
+
MenusData = clearMenuItem(noChildrenMenuData);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const _mode = computed(() =>
|
|
148
|
+
props.layout === 'mix' && props.splitMenus ? 'horizontal' : mode,
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
const className = computed(() => {
|
|
152
|
+
return {
|
|
153
|
+
[prefixCls]: true,
|
|
154
|
+
light: props.theme === 'light',
|
|
155
|
+
dark: props.theme === 'dark',
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
return (
|
|
160
|
+
<div class={className.value}>
|
|
161
|
+
<div
|
|
162
|
+
ref={headerRef}
|
|
163
|
+
class={`${prefixCls}-main ${
|
|
164
|
+
contentWidth === 'Fixed' ? 'wide' : ''
|
|
165
|
+
}`}
|
|
166
|
+
>
|
|
167
|
+
{headerDom && (
|
|
168
|
+
<div
|
|
169
|
+
class={`${prefixCls}-main-left`}
|
|
170
|
+
onClick={onMenuHeaderClick}
|
|
171
|
+
>
|
|
172
|
+
<div class={`${prefixCls}-logo`} key="logo" id="logo">
|
|
173
|
+
{headerDom}
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
)}
|
|
177
|
+
<div style={{ flex: 1 }} class={`${prefixCls}-menu`}>
|
|
178
|
+
<BaseMenu
|
|
179
|
+
prefixCls={propPrefixCls}
|
|
180
|
+
locale={props.locale || context.locale}
|
|
181
|
+
theme={props.theme}
|
|
182
|
+
mode={_mode.value}
|
|
183
|
+
collapsed={props.collapsed}
|
|
184
|
+
iconfontUrl={props.iconfontUrl}
|
|
185
|
+
menuData={MenusData}
|
|
186
|
+
menuItemRender={props.menuItemRender}
|
|
187
|
+
subMenuItemRender={props.subMenuItemRender}
|
|
188
|
+
openKeys={context.openKeys}
|
|
189
|
+
selectedKeys={context.selectedKeys}
|
|
190
|
+
class={{
|
|
191
|
+
'top-nav-menu': props.mode === 'horizontal',
|
|
192
|
+
}}
|
|
193
|
+
{...{
|
|
194
|
+
'onUpdate:openKeys': ($event: string[]) =>
|
|
195
|
+
onOpenKeys && onOpenKeys($event),
|
|
196
|
+
'onUpdate:selectedKeys': ($event: string[]) =>
|
|
197
|
+
onSelect && onSelect($event),
|
|
198
|
+
}}
|
|
199
|
+
/>
|
|
200
|
+
</div>
|
|
201
|
+
{rightContentRender && (
|
|
202
|
+
<RightContent
|
|
203
|
+
rightContentRender={rightContentRender}
|
|
204
|
+
{...props}
|
|
205
|
+
/>
|
|
206
|
+
)}
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
);
|
|
210
|
+
};
|