Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
啊嘞嘞EC
vue-vben-admin
提交
d5d4c4b4
V
vue-vben-admin
项目概览
啊嘞嘞EC
/
vue-vben-admin
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vue-vben-admin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
d5d4c4b4
编写于
3月 07, 2021
作者:
V
Vben
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(menu): fix menu icon missing close #328
上级
491f1fcf
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
22 addition
and
146 deletion
+22
-146
src/components/Menu/index.ts
src/components/Menu/index.ts
+2
-2
src/components/Menu/src/components/ExpandIcon.vue
src/components/Menu/src/components/ExpandIcon.vue
+0
-43
src/components/Menu/src/components/MenuItemTag.vue
src/components/Menu/src/components/MenuItemTag.vue
+0
-57
src/components/SimpleMenu/index.ts
src/components/SimpleMenu/index.ts
+1
-0
src/components/SimpleMenu/src/SimpleMenuTag.vue
src/components/SimpleMenu/src/SimpleMenuTag.vue
+4
-5
src/layouts/default/sider/MixSider.vue
src/layouts/default/sider/MixSider.vue
+6
-28
src/layouts/default/sider/index.vue
src/layouts/default/sider/index.vue
+1
-0
src/main.ts
src/main.ts
+4
-7
src/store/modules/permission.ts
src/store/modules/permission.ts
+3
-4
stylelint.config.js
stylelint.config.js
+1
-0
未找到文件。
src/components/Menu/index.ts
浏览文件 @
d5d4c4b4
import
{
createAsyncComponent
}
from
'
/@/utils/factory/createAsyncComponent
'
;
//
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
import
BasicMenu
from
'
./src/BasicMenu.vue
'
;
// export const BasicMenu = createAsyncComponent(() => import('./src/BasicMenu.vue'));
export
const
MenuTag
=
createAsyncComponent
(()
=>
import
(
'
./src/components/MenuItemTag.vue
'
));
//
export const MenuTag = createAsyncComponent(() => import('./src/components/MenuItemTag.vue'));
export
{
BasicMenu
};
src/components/Menu/src/components/ExpandIcon.vue
已删除
100644 → 0
浏览文件 @
491f1fcf
<
template
>
<BasicArrow
:expand=
"getIsOpen"
bottom
inset
:class=
"getWrapperClass"
/>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
PropType
,
computed
}
from
'
vue
'
;
import
{
useDesign
}
from
'
/@/hooks/web/useDesign
'
;
import
{
BasicArrow
}
from
'
/@/components/Basic
'
;
import
{
propTypes
}
from
'
/@/utils/propTypes
'
;
export
default
defineComponent
({
name
:
'
BasicMenuItem
'
,
components
:
{
BasicArrow
},
props
:
{
key
:
propTypes
.
string
,
openKeys
:
{
type
:
Array
as
PropType
<
string
[]
>
,
default
:
[],
},
collapsed
:
propTypes
.
bool
,
},
setup
(
props
)
{
const
{
prefixCls
}
=
useDesign
(
'
basic-menu
'
);
const
getIsOpen
=
computed
(()
=>
{
return
props
.
openKeys
.
includes
(
props
.
key
);
});
const
getWrapperClass
=
computed
(()
=>
{
return
[
`
${
prefixCls
}
__expand-icon`
,
{
[
`
${
prefixCls
}
__expand-icon--collapsed`
]:
props
.
collapsed
,
},
];
});
return
{
prefixCls
,
getIsOpen
,
getWrapperClass
,
};
},
});
</
script
>
src/components/Menu/src/components/MenuItemTag.vue
已删除
100644 → 0
浏览文件 @
491f1fcf
<
template
>
<span
:class=
"getTagClass"
v-if=
"getShowTag"
>
{{
getContent
}}
</span>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
computed
}
from
'
vue
'
;
import
{
useDesign
}
from
'
/@/hooks/web/useDesign
'
;
import
{
contentProps
}
from
'
../props
'
;
export
default
defineComponent
({
name
:
'
MenuItemTag
'
,
props
:
contentProps
,
setup
(
props
)
{
const
{
prefixCls
}
=
useDesign
(
'
basic-menu-item-tag
'
);
const
getShowTag
=
computed
(()
=>
{
const
{
item
,
showTitle
,
isHorizontal
}
=
props
;
if
(
!
item
||
showTitle
||
isHorizontal
)
return
false
;
const
{
tag
}
=
item
;
if
(
!
tag
)
return
false
;
const
{
dot
,
content
}
=
tag
;
if
(
!
dot
&&
!
content
)
return
false
;
return
true
;
});
const
getContent
=
computed
(()
=>
{
if
(
!
getShowTag
.
value
)
return
''
;
const
{
item
}
=
props
;
const
{
tag
}
=
item
;
const
{
dot
,
content
}
=
tag
!
;
return
dot
?
''
:
content
;
});
const
getTagClass
=
computed
(()
=>
{
const
{
item
}
=
props
;
const
{
tag
=
{}
}
=
item
||
{};
const
{
dot
,
type
=
'
error
'
}
=
tag
;
return
[
prefixCls
,
[
`
${
prefixCls
}
--
${
type
}
`
],
{
[
`
${
prefixCls
}
--dot`
]:
dot
,
},
];
});
return
{
prefixCls
,
getTagClass
,
getShowTag
,
getContent
,
};
},
});
</
script
>
src/components/SimpleMenu/index.ts
浏览文件 @
d5d4c4b4
export
{
default
as
SimpleMenu
}
from
'
./src/SimpleMenu.vue
'
;
export
{
default
as
SimpleMenuTag
}
from
'
./src/SimpleMenuTag.vue
'
;
src/components/SimpleMenu/src/SimpleMenuTag.vue
浏览文件 @
d5d4c4b4
...
...
@@ -8,6 +8,7 @@
import
{
defineComponent
,
computed
}
from
'
vue
'
;
import
{
useDesign
}
from
'
/@/hooks/web/useDesign
'
;
import
{
propTypes
}
from
'
/@/utils/propTypes
'
;
export
default
defineComponent
({
name
:
'
SimpleMenuTag
'
,
...
...
@@ -16,10 +17,8 @@
type
:
Object
as
PropType
<
Menu
>
,
default
:
{},
},
collapseParent
:
{
type
:
Boolean
as
PropType
<
boolean
>
,
default
:
false
,
},
dot
:
propTypes
.
bool
,
collapseParent
:
propTypes
.
bool
,
},
setup
(
props
)
{
const
{
prefixCls
}
=
useDesign
(
'
simple-menu
'
);
...
...
@@ -56,7 +55,7 @@
[
`
${
tagCls
}
--
${
type
}
`
],
{
[
`
${
tagCls
}
--collapse`
]:
collapseParent
,
[
`
${
tagCls
}
--dot`
]:
dot
,
[
`
${
tagCls
}
--dot`
]:
dot
||
props
.
dot
,
},
];
});
...
...
src/layouts/default/sider/MixSider.vue
浏览文件 @
d5d4c4b4
<
template
>
<div
:class=
"`$
{prefixCls}-dom`" :style="getDomStyle">
</div>
<div
v-click-outside=
"handleClickOutside"
:style=
"getWrapStyle"
...
...
@@ -27,15 +26,15 @@
[`${prefixCls}-module__item--active`]: item.path === activePath,
},
]"
v-bind="getItemEvents(item)"
v-for="item in menuModules"
:key="item.path"
v-bind="getItemEvents(item)"
>
<
MenuTag
:item=
"item"
:showTitle=
"false"
:isHorizontal=
"false"
/>
<
SimpleMenuTag
:item=
"item"
collapseParent
dot
/>
<Icon
:class=
"`$
{prefixCls}-module__icon`"
:size="getCollapsed ? 16 : 20"
:icon="item.
meta
&&
item.meta.icon
"
:icon="item.
icon || (item.meta
&&
item.meta.icon)
"
/>
<p
:class=
"`$
{prefixCls}-module__name`">
{{
t
(
item
.
name
)
}}
...
...
@@ -85,8 +84,8 @@
import
{
defineComponent
,
onMounted
,
ref
,
computed
,
unref
}
from
'
vue
'
;
import
{
MenuTag
}
from
'
/@/components/Menu
'
;
import
{
ScrollContainer
}
from
'
/@/components/Container
'
;
import
{
SimpleMenuTag
}
from
'
/@/components/SimpleMenu
'
;
import
Icon
from
'
/@/components/Icon
'
;
import
{
AppLogo
}
from
'
/@/components/Application
'
;
import
Trigger
from
'
../trigger/HeaderTrigger.vue
'
;
...
...
@@ -111,9 +110,9 @@
ScrollContainer
,
AppLogo
,
SimpleMenu
,
MenuTag
,
Icon
,
Trigger
,
SimpleMenuTag
,
},
directives
:
{
clickOutside
,
...
...
@@ -337,8 +336,6 @@
</
script
>
<
style
lang=
"less"
>
@prefix-cls: ~'@{namespace}-layout-mix-sider';
@tag-prefix-cls: ~'@{namespace}-basic-menu-item-tag';
@menu-prefix-cls: ~'@{namespace}-menu';
@width: 80px;
.@{prefix-cls} {
position: fixed;
...
...
@@ -349,15 +346,6 @@
overflow: hidden;
background: @sider-dark-bg-color;
transition: all 0.2s ease 0s;
.@{tag-prefix-cls} {
position: absolute;
top: 6px;
right: 2px;
}
.@{menu-prefix-cls} {
width: 100% !important;
}
&-dom {
height: 100%;
...
...
@@ -420,7 +408,7 @@
&.dark {
&.open {
.@{prefix-cls}-logo {
border-bottom: 1px solid @border-color;
//
border-bottom: 1px solid @border-color;
}
> .scrollbar {
...
...
@@ -524,16 +512,6 @@
height: calc(100%);
background: #fff;
transition: all 0.2s;
.@{tag-prefix-cls} {
position: absolute;
top: 10px;
right: 30px;
&--dot {
top: 50%;
margin-top: -3px;
}
}
&__title {
display: flex;
...
...
src/layouts/default/sider/index.vue
浏览文件 @
d5d4c4b4
...
...
@@ -43,6 +43,7 @@
</
script
>
<
style
lang=
"less"
>
@prefix-cls: ~'@{namespace}-layout-sider-wrapper';
.@{prefix-cls} {
.ant-drawer-body {
height: 100vh;
...
...
src/main.ts
浏览文件 @
d5d4c4b4
...
...
@@ -27,10 +27,11 @@ import { isDevMode } from '/@/utils/env';
(
async
()
=>
{
const
app
=
createApp
(
App
);
// Register global components
registerGlobComp
(
app
);
// Multilingual configuration
await
setupI18n
(
app
);
// Configure routing
setupRouter
(
app
);
...
...
@@ -43,12 +44,8 @@ import { isDevMode } from '/@/utils/env';
// Configure global error handling
setupErrorHandle
(
app
);
await
Promise
.
all
([
// Multilingual configuration
setupI18n
(
app
),
// Mount when the route is ready
router
.
isReady
(),
]);
// Mount when the route is ready
await
router
.
isReady
();
app
.
mount
(
'
#app
'
,
true
);
...
...
src/store/modules/permission.ts
浏览文件 @
d5d4c4b4
...
...
@@ -18,7 +18,7 @@ import { transformObjToRoute } from '/@/router/helper/routeHelper';
import
{
transformRouteToMenu
}
from
'
/@/router/helper/menuHelper
'
;
import
{
useMessage
}
from
'
/@/hooks/web/useMessage
'
;
//
import { useI18n } from '/@/hooks/web/useI18n';
import
{
useI18n
}
from
'
/@/hooks/web/useI18n
'
;
import
{
ERROR_LOG_ROUTE
,
PAGE_NOT_FOUND_ROUTE
}
from
'
/@/router/constant
'
;
const
{
createMessage
}
=
useMessage
();
...
...
@@ -84,7 +84,7 @@ class Permission extends VuexModule {
@
Action
async
buildRoutesAction
(
id
?:
number
|
string
):
Promise
<
AppRouteRecordRaw
[]
>
{
//
const { t } = useI18n();
const
{
t
}
=
useI18n
();
let
routes
:
AppRouteRecordRaw
[]
=
[];
const
roleList
=
toRaw
(
userStore
.
getRoleListState
);
...
...
@@ -101,8 +101,7 @@ class Permission extends VuexModule {
// If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below
}
else
if
(
permissionMode
===
PermissionModeEnum
.
BACK
)
{
createMessage
.
loading
({
content
:
'
Loading menu...
'
,
// content: 't('sys.app.menuLoading')',
content
:
t
(
'
sys.app.menuLoading
'
),
duration
:
1
,
});
// Here to get the background routing menu logic to modify by yourself
...
...
stylelint.config.js
浏览文件 @
d5d4c4b4
...
...
@@ -16,6 +16,7 @@ module.exports = {
},
],
'
no-empty-source
'
:
null
,
'
named-grid-areas-no-invalid
'
:
null
,
'
unicode-bom
'
:
'
never
'
,
'
no-descending-specificity
'
:
null
,
'
font-family-no-missing-generic-family-keyword
'
:
null
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录