Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
pro-layout
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
packages
pro-layout
Commits
b8580bd1
Unverified
Commit
b8580bd1
authored
Feb 20, 2021
by
Sendya
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: MenuUtil
parent
2b8873d9
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
17 additions
and
76 deletions
+17
-76
BaseMenu.tsx
src/SiderMenu/BaseMenu.tsx
+15
-76
SiderMenu.tsx
src/SiderMenu/SiderMenu.tsx
+1
-0
index.tsx
src/TopNavHeader/index.tsx
+1
-0
No files found.
src/SiderMenu/BaseMenu.tsx
View file @
b8580bd1
...
@@ -44,6 +44,10 @@ export interface BaseMenuProps extends Partial<PureSettings>, PrivateSiderMenuPr
...
@@ -44,6 +44,10 @@ export interface BaseMenuProps extends Partial<PureSettings>, PrivateSiderMenuPr
// vue props
// vue props
export
const
baseMenuProps
=
{
export
const
baseMenuProps
=
{
locale
:
Boolean
,
locale
:
Boolean
,
prefixCls
:
{
type
:
String
as
PropType
<
string
|
undefined
>
,
default
:
()
=>
'ant-pro'
,
},
i18n
:
{
i18n
:
{
type
:
Function
as
PropType
<
FormatMessage
>
,
type
:
Function
as
PropType
<
FormatMessage
>
,
default
:
(
t
:
string
):
string
=>
t
,
default
:
(
t
:
string
):
string
=>
t
,
...
@@ -76,70 +80,11 @@ export const baseMenuProps = {
...
@@ -76,70 +80,11 @@ export const baseMenuProps = {
},
},
};
};
const
httpReg
=
/
(
http|https|ftp
)
:
\/\/([\w
.
]
+
\/?)\S
*/
;
const
renderTitle
=
(
title
:
string
|
undefined
,
i18nRender
:
FormatMessage
)
=>
{
return
<
span
>
{
(
i18nRender
&&
title
&&
i18nRender
(
title
))
||
title
}
</
span
>;
};
const
renderMenuItem
=
(
item
:
MenuDataItem
,
i18nRender
:
FormatMessage
)
=>
{
const
meta
=
Object
.
assign
({},
item
.
meta
);
const
target
=
meta
.
target
||
null
;
const
hasRemoteUrl
=
httpReg
.
test
(
item
.
path
);
const
CustomTag
:
any
=
resolveComponent
((
target
&&
'a'
)
||
'router-link'
);
const
props
=
{
to
:
{
name
:
item
.
name
}
};
const
attrs
=
hasRemoteUrl
||
target
?
{
href
:
item
.
path
,
target
:
target
}
:
{};
if
(
item
.
children
&&
item
.
meta
?.
hideChildInMenu
)
{
// 把有子菜单的 并且 父菜单是要隐藏子菜单的
// 都给子菜单增加一个 hidden 属性
// 用来给刷新页面时, selectedKeys 做控制用
item
.
children
.
forEach
(
cd
=>
{
cd
.
meta
=
Object
.
assign
(
cd
.
meta
||
{},
{
hidden
:
true
});
});
}
// @ts-nocheck
return
(
<
Menu
.
Item
key=
{
item
.
path
}
>
<
CustomTag
{
...
attrs
}
{
...
props
}
>
<
LazyIcon
icon=
{
meta
.
icon
}
/>
{
renderTitle
(
meta
.
title
,
i18nRender
)
}
</
CustomTag
>
</
Menu
.
Item
>
);
};
const
renderSubMenu
=
(
item
:
MenuDataItem
,
i18nRender
:
FormatMessage
)
=>
{
const
renderMenuContent
=
(
<
span
>
<
LazyIcon
icon=
{
item
.
meta
?.
icon
}
/>
<
span
>
{
renderTitle
(
item
.
meta
?.
title
,
i18nRender
)
}
</
span
>
</
span
>
)
as
string
&
VNode
;
return
(
<
Menu
.
SubMenu
key=
{
item
.
path
}
title=
{
renderMenuContent
}
>
{
/* eslint-disable-next-line @typescript-eslint/no-use-before-define */
}
{
!
item
.
meta
?.
hideChildInMenu
&&
item
.
children
.
map
(
cd
=>
renderMenu
(
cd
,
i18nRender
))
}
</
Menu
.
SubMenu
>
);
};
const
renderMenu
=
(
item
:
MenuDataItem
,
i18nRender
:
FormatMessage
)
=>
{
if
(
item
&&
!
item
.
meta
.
hidden
)
{
const
hasChild
=
item
.
children
&&
!
item
.
meta
?.
hideChildInMenu
;
return
hasChild
?
renderSubMenu
(
item
,
i18nRender
)
:
renderMenuItem
(
item
,
i18nRender
);
}
return
null
;
};
const
IconFont
=
createFromIconfontCN
({
const
IconFont
=
createFromIconfontCN
({
scriptUrl
:
defaultSettings
.
iconfontUrl
,
scriptUrl
:
defaultSettings
.
iconfontUrl
,
});
});
const
LazyIcon
=
(
props
:
{
const
LazyIcon
=
(
props
:
{
icon
:
VNode
|
string
;
iconPrefixes
?:
string
;
prefixCls
?:
string
})
=>
{
icon
:
VNode
|
string
;
iconPrefixes
?:
string
;
prefixCls
?:
string
;
})
=>
{
const
{
icon
,
iconPrefixes
=
'icon-'
,
prefixCls
=
'ant-pro'
}
=
props
;
const
{
icon
,
iconPrefixes
=
'icon-'
,
prefixCls
=
'ant-pro'
}
=
props
;
if
(
!
icon
)
{
if
(
!
icon
)
{
return
null
;
return
null
;
...
@@ -172,18 +117,17 @@ class MenuUtil {
...
@@ -172,18 +117,17 @@ class MenuUtil {
constructor
(
props
:
BaseMenuProps
)
{
constructor
(
props
:
BaseMenuProps
)
{
this
.
props
=
props
;
this
.
props
=
props
;
console
.
log
(
'MenuUtil constructor'
,
new
Date
());
}
}
getNavMenuItems
=
(
menusData
:
MenuDataItem
[]
=
[],
isChildren
:
boolean
)
=>
{
getNavMenuItems
=
(
menusData
:
MenuDataItem
[]
=
[],
isChildren
:
boolean
)
=>
{
return
menusData
.
map
(
item
=>
this
.
getSubMenuOrItem
(
item
,
isChildren
)).
filter
(
item
=>
item
);
return
menusData
.
map
(
item
=>
this
.
getSubMenuOrItem
(
item
,
isChildren
)).
filter
(
item
=>
item
);
}
}
;
getSubMenuOrItem
=
(
item
:
MenuDataItem
,
isChildren
:
boolean
)
=>
{
getSubMenuOrItem
=
(
item
:
MenuDataItem
,
isChildren
:
boolean
)
=>
{
if
(
Array
.
isArray
(
item
.
children
)
if
(
Array
.
isArray
(
item
.
children
)
&&
item
.
children
.
length
>
0
&&
!
item
?.
meta
?.
hideInMenu
)
{
&&
item
.
children
.
length
>
0
&&
!
item
?.
meta
?.
hideInMenu
)
{
const
{
prefixCls
,
i18n
}
=
this
.
props
;
const
{
prefixCls
,
i18n
}
=
this
.
props
;
const
menuTitle
=
i18n
&&
i18n
(
item
.
meta
?.
title
)
||
item
.
meta
?.
title
;
const
menuTitle
=
(
i18n
&&
i18n
(
item
.
meta
?.
title
)
)
||
item
.
meta
?.
title
;
const
defaultTitle
=
item
?.
meta
.
icon
?
(
const
defaultTitle
=
item
?.
meta
.
icon
?
(
<
span
class=
{
`${prefixCls}-menu-item`
}
>
<
span
class=
{
`${prefixCls}-menu-item`
}
>
{
!
isChildren
&&
<
LazyIcon
icon=
{
item
.
meta
.
icon
}
/>
}
{
!
isChildren
&&
<
LazyIcon
icon=
{
item
.
meta
.
icon
}
/>
}
...
@@ -210,7 +154,7 @@ class MenuUtil {
...
@@ -210,7 +154,7 @@ class MenuUtil {
{
this
.
getMenuItem
(
item
,
isChildren
)
}
{
this
.
getMenuItem
(
item
,
isChildren
)
}
</
Menu
.
Item
>
</
Menu
.
Item
>
);
);
}
}
;
getMenuItem
=
(
item
:
MenuDataItem
,
isChildren
:
boolean
)
=>
{
getMenuItem
=
(
item
:
MenuDataItem
,
isChildren
:
boolean
)
=>
{
const
meta
=
Object
.
assign
({},
item
.
meta
);
const
meta
=
Object
.
assign
({},
item
.
meta
);
...
@@ -221,7 +165,7 @@ class MenuUtil {
...
@@ -221,7 +165,7 @@ class MenuUtil {
const
attrs
=
hasUrl
||
target
?
{
href
:
item
.
path
,
target
:
target
}
:
{};
const
attrs
=
hasUrl
||
target
?
{
href
:
item
.
path
,
target
:
target
}
:
{};
const
{
prefixCls
,
i18n
}
=
this
.
props
;
const
{
prefixCls
,
i18n
}
=
this
.
props
;
const
menuTitle
=
i18n
&&
i18n
(
item
.
meta
?.
title
)
||
item
.
meta
?.
title
;
const
menuTitle
=
(
i18n
&&
i18n
(
item
.
meta
?.
title
)
)
||
item
.
meta
?.
title
;
const
defaultTitle
=
item
?.
meta
.
icon
?
(
const
defaultTitle
=
item
?.
meta
.
icon
?
(
<
span
class=
{
`${prefixCls}-menu-item`
}
>
<
span
class=
{
`${prefixCls}-menu-item`
}
>
<
CustomTag
{
...
attrs
}
{
...
props
}
>
<
CustomTag
{
...
attrs
}
{
...
props
}
>
...
@@ -234,7 +178,7 @@ class MenuUtil {
...
@@ -234,7 +178,7 @@ class MenuUtil {
);
);
return
defaultTitle
;
return
defaultTitle
;
}
}
;
conversionPath
=
(
path
:
string
)
=>
{
conversionPath
=
(
path
:
string
)
=>
{
if
(
path
&&
path
.
indexOf
(
'http'
)
===
0
)
{
if
(
path
&&
path
.
indexOf
(
'http'
)
===
0
)
{
...
@@ -249,8 +193,9 @@ export default defineComponent({
...
@@ -249,8 +193,9 @@ export default defineComponent({
props
:
baseMenuProps
,
props
:
baseMenuProps
,
emits
:
[
'update:openKeys'
,
'update:selectedKeys'
],
emits
:
[
'update:openKeys'
,
'update:selectedKeys'
],
setup
(
props
,
{
emit
})
{
setup
(
props
,
{
emit
})
{
const
{
mode
,
i18n
}
=
toRefs
(
props
);
const
{
mode
}
=
toRefs
(
props
);
const
isInline
=
computed
(()
=>
mode
.
value
===
'inline'
);
const
isInline
=
computed
(()
=>
mode
.
value
===
'inline'
);
const
menuUtil
=
new
MenuUtil
(
props
);
const
handleOpenChange
:
OpenEventHandler
=
(
openKeys
:
string
[]):
void
=>
{
const
handleOpenChange
:
OpenEventHandler
=
(
openKeys
:
string
[]):
void
=>
{
emit
(
'update:openKeys'
,
openKeys
);
emit
(
'update:openKeys'
,
openKeys
);
...
@@ -278,13 +223,7 @@ export default defineComponent({
...
@@ -278,13 +223,7 @@ export default defineComponent({
onOpenChange=
{
handleOpenChange
}
onOpenChange=
{
handleOpenChange
}
onSelect=
{
handleSelect
}
onSelect=
{
handleSelect
}
>
>
{
props
.
menuData
&&
{
menuUtil
.
getNavMenuItems
(
props
.
menuData
,
false
)
}
props
.
menuData
.
map
(
menu
=>
{
if
(
menu
.
meta
.
hidden
)
{
return
null
;
}
return
renderMenu
(
menu
,
i18n
.
value
);
})
}
</
Menu
>
</
Menu
>
);
);
},
},
...
...
src/SiderMenu/SiderMenu.tsx
View file @
b8580bd1
...
@@ -129,6 +129,7 @@ const SiderMenu: FunctionalComponent<SiderMenuProps> = (props: SiderMenuProps) =
...
@@ -129,6 +129,7 @@ const SiderMenu: FunctionalComponent<SiderMenuProps> = (props: SiderMenuProps) =
}
}
const
defaultMenuDom
=
(
const
defaultMenuDom
=
(
<
BaseMenu
<
BaseMenu
prefixCls=
{
getPrefixCls
()
}
theme=
{
runtimeTheme
.
value
===
'realDark'
?
'dark'
:
runtimeTheme
.
value
}
theme=
{
runtimeTheme
.
value
===
'realDark'
?
'dark'
:
runtimeTheme
.
value
}
mode=
"inline"
mode=
"inline"
menuData=
{
hasSide
.
value
?
flatMenuData
.
value
:
context
.
menuData
}
menuData=
{
hasSide
.
value
?
flatMenuData
.
value
:
context
.
menuData
}
...
...
src/TopNavHeader/index.tsx
View file @
b8580bd1
...
@@ -85,6 +85,7 @@ export const TopNavHeader: FunctionalComponent<TopNavHeaderProps> = props => {
...
@@ -85,6 +85,7 @@ export const TopNavHeader: FunctionalComponent<TopNavHeaderProps> = props => {
)
}
)
}
<
div
style=
{
{
flex
:
1
}
}
class=
{
`${prefixCls}-menu`
}
>
<
div
style=
{
{
flex
:
1
}
}
class=
{
`${prefixCls}-menu`
}
>
<
BaseMenu
<
BaseMenu
prefixCls=
{
propPrefixCls
}
theme=
{
props
.
theme
===
'realDark'
?
'dark'
:
props
.
theme
}
theme=
{
props
.
theme
===
'realDark'
?
'dark'
:
props
.
theme
}
mode=
{
props
.
mode
}
mode=
{
props
.
mode
}
collapsed=
{
props
.
collapsed
}
collapsed=
{
props
.
collapsed
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment