Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bill-manager-ui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
bill-manager-ui
Commits
0fe8f040
Commit
0fe8f040
authored
Feb 20, 2025
by
“yiyousong”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf: 优化菜单管理
parent
6f2cf656
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
40 additions
and
118 deletions
+40
-118
admin_2/src/filters/index.js
admin_2/src/filters/index.js
+7
-79
admin_2/src/layouts/components/Header.vue
admin_2/src/layouts/components/Header.vue
+15
-22
admin_2/src/pages/system/menu/Menu.vue
admin_2/src/pages/system/menu/Menu.vue
+8
-8
admin_2/src/pages/system/menu/components/AddMenu.vue
admin_2/src/pages/system/menu/components/AddMenu.vue
+4
-4
admin_2/src/utils/index.js
admin_2/src/utils/index.js
+6
-5
No files found.
admin_2/src/filters/index.js
View file @
0fe8f040
import
moment
from
"
moment
"
;
import
moment
from
'
moment
'
;
// 时间格式 年月日时分秒
// 时间格式 年月日时分秒
export
function
dateFormat
(
val
)
{
export
function
dateFormat
(
val
)
{
return
moment
(
val
).
format
(
"
YYYY-MM-DD HH:mm:ss
"
);
return
moment
(
val
).
format
(
'
YYYY-MM-DD HH:mm:ss
'
);
}
}
// 时间格式 年月日
// 时间格式 年月日
export
function
dateDayFormat
(
val
)
{
export
function
dateDayFormat
(
val
)
{
return
moment
(
val
).
format
(
"
YYYY-MM-DD
"
);
return
moment
(
val
).
format
(
'
YYYY-MM-DD
'
);
}
}
// 时分秒
// 时分秒
export
function
times
(
val
)
{
export
function
times
(
val
)
{
return
moment
(
val
).
format
(
"
HH:mm:ss
"
);
return
moment
(
val
).
format
(
'
HH:mm:ss
'
);
}
}
// 年
// 年
export
function
year
(
val
)
{
export
function
year
(
val
)
{
return
moment
(
val
).
format
(
"
YYYY
"
);
return
moment
(
val
).
format
(
'
YYYY
'
);
}
}
//
号数
//
月日
export
function
days
(
val
)
{
export
function
days
(
val
)
{
return
moment
(
val
).
format
(
"
MM-DD
"
);
return
moment
(
val
).
format
(
'
MM-DD
'
);
}
// 过滤叫号状态
export
function
filterStyle
(
val
)
{
const
style
=
{
0
:
"
排队中
"
,
1
:
"
办理中
"
,
4
:
"
办理完成
"
,
};
let
str
;
Object
.
keys
(
style
).
forEach
((
key
)
=>
{
if
(
key
==
val
)
{
str
=
style
[
key
];
}
});
return
str
;
}
// 过滤政治面貌
export
function
filterPolitical
(
val
)
{
const
obj
=
{
0
:
"
中共党员
"
,
1
:
"
中共预备党员
"
,
2
:
"
共青团员
"
,
3
:
"
普通居民
"
,
4
:
"
其他
"
,
};
let
str
;
Object
.
keys
(
obj
).
forEach
((
key
)
=>
{
if
(
key
==
val
)
{
str
=
obj
[
key
];
}
});
return
str
;
}
// 过滤密码显示*号
export
function
filterPwd
(
val
)
{
let
str
=
val
.
replace
(
/
\S
/g
,
"
*
"
);
return
str
;
}
// 过滤会员等级
export
function
filterMember
(
val
)
{
const
member
=
{
1
:
"
试用客户
"
,
// 2: "VIP客户",
3
:
"
设计师
"
,
};
let
str
=
"
--
"
;
Object
.
keys
(
member
).
forEach
((
key
)
=>
{
if
(
key
==
val
)
{
str
=
member
[
key
];
}
});
return
str
;
}
// 过滤客户来源
export
function
filterCustomerSrc
(
val
)
{
const
customer
=
{
1
:
"
申请试用
"
,
2
:
"
顾问签单
"
,
};
let
str
=
"
--
"
;
Object
.
keys
(
customer
).
forEach
((
key
)
=>
{
if
(
key
==
val
)
{
str
=
customer
[
key
];
}
});
return
str
;
}
}
admin_2/src/layouts/components/Header.vue
View file @
0fe8f040
...
@@ -13,12 +13,7 @@
...
@@ -13,12 +13,7 @@
<HeaderSite
class=
"ml-10"
></HeaderSite>
<HeaderSite
class=
"ml-10"
></HeaderSite>
</div>
</div>
<!-- 导航 -->
<!-- 导航 -->
<el-menu
<el-menu
:default-active=
"activeMenu"
mode=
"horizontal"
router
@
select=
"selectMenu"
>
:default-active=
"activeMenu"
mode=
"horizontal"
router
@
select=
"selectMenu"
>
<template
v-for=
"v in menus"
>
<template
v-for=
"v in menus"
>
<el-submenu
<el-submenu
v-if=
"!v.hideChildrenInMenu && v.children && v.children.length"
v-if=
"!v.hideChildrenInMenu && v.children && v.children.length"
...
@@ -29,11 +24,7 @@
...
@@ -29,11 +24,7 @@
<i
v-if=
"v.meta && v.meta.icon"
:class=
"v.meta.icon"
></i>
<i
v-if=
"v.meta && v.meta.icon"
:class=
"v.meta.icon"
></i>
{{
v
.
meta
.
title
}}
{{
v
.
meta
.
title
}}
</
template
>
</
template
>
<el-menu-item
<el-menu-item
v-for=
"item in v.children"
:key=
"item.path"
:index=
"item.path"
>
v-for=
"item in v.children"
:key=
"item.path"
:index=
"item.path"
>
<i
v-if=
"item.meta && item.meta.icon"
:class=
"item.meta.icon"
></i>
<i
v-if=
"item.meta && item.meta.icon"
:class=
"item.meta.icon"
></i>
{{ item.meta
&&
item.meta.title }}
{{ item.meta
&&
item.meta.title }}
</el-menu-item>
</el-menu-item>
...
@@ -53,17 +44,17 @@
...
@@ -53,17 +44,17 @@
</template>
</template>
<
script
>
<
script
>
import
HeaderSite
from
"
./HeaderSite.vue
"
;
import
HeaderSite
from
'
./HeaderSite.vue
'
;
import
{
mapState
,
mapActions
}
from
"
vuex
"
;
import
{
mapState
,
mapActions
}
from
'
vuex
'
;
import
{
systemName
}
from
"
@/config
"
;
import
{
systemName
}
from
'
@/config
'
;
export
default
{
export
default
{
components
:
{
components
:
{
HeaderSite
,
HeaderSite
},
},
data
()
{
data
()
{
return
{
return
{
systemName
,
systemName
,
portal
:
process
.
env
.
VUE_APP_API_portal_URL
+
"
/#
"
,
portal
:
process
.
env
.
VUE_APP_API_portal_URL
+
'
/#
'
};
};
},
},
computed
:
{
computed
:
{
...
@@ -75,22 +66,24 @@ export default {
...
@@ -75,22 +66,24 @@ export default {
}
}
return
path
;
return
path
;
},
},
...
mapState
(
"
user
"
,
[
"
menus
"
,
"
sysName
"
,
"
sysLogo
"
,
"
path
"
,
"
menus
"
]),
...
mapState
(
'
user
'
,
[
'
menus
'
,
'
sysName
'
,
'
sysLogo
'
,
'
path
'
,
'
menus
'
])
},
},
created
()
{
created
()
{
document
.
title
=
this
.
sysName
?
this
.
sysName
:
this
.
systemName
;
// 设置项目标题
document
.
title
=
this
.
sysName
?
this
.
sysName
:
this
.
systemName
;
// 设置项目标题
},
},
methods
:
{
methods
:
{
...
mapActions
(
"
user
"
,
[
"
setSecondaryRoutes
"
]),
...
mapActions
(
'
user
'
,
[
'
setSecondaryRoutes
'
]),
selectMenu
(
index
)
{
selectMenu
(
index
)
{
this
.
setSecondaryRoutes
(
index
);
this
.
setSecondaryRoutes
(
index
);
},
},
handleGoHome
()
{
handleGoHome
()
{
let
path
=
this
.
menus
[
0
].
path
;
let
path
=
this
.
menus
[
0
].
path
;
this
.
$router
.
push
(
path
);
if
(
path
)
{
},
this
.
$router
.
push
(
path
);
},
}
}
}
};
};
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
...
@@ -114,7 +107,7 @@ export default {
...
@@ -114,7 +107,7 @@ export default {
@text-color: #fefefea5;
@text-color: #fefefea5;
.mixins(@l,@t) {
.mixins(@l,@t) {
content:
""
;
content:
''
;
display: inline-block;
display: inline-block;
height: 4px;
height: 4px;
width: 30%;
width: 30%;
...
...
admin_2/src/pages/system/menu/Menu.vue
View file @
0fe8f040
...
@@ -123,14 +123,14 @@ export default {
...
@@ -123,14 +123,14 @@ export default {
}
}
}
}
},
},
{
//
{
label
:
'
权限类型
'
,
//
label: '权限类型',
prop
:
'
authType
'
,
//
prop: 'authType',
align
:
'
center
'
,
//
align: 'center',
formatter
:
(
row
)
=>
{
//
formatter: (row) => {
return
this
.
dict
.
authType
[
row
.
authType
];
//
return this.dict.authType[row.authType];
}
//
}
},
//
},
{
{
label
:
'
父ID
'
,
label
:
'
父ID
'
,
prop
:
'
parentId
'
,
prop
:
'
parentId
'
,
...
...
admin_2/src/pages/system/menu/components/AddMenu.vue
View file @
0fe8f040
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
<icon-select
v-model=
"form.imgPath"
></icon-select>
<icon-select
v-model=
"form.imgPath"
></icon-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"权限类型"
prop=
"authType"
v-if=
"form.menuType != 2"
>
<
!--
<
el-form-item
label=
"权限类型"
prop=
"authType"
v-if=
"form.menuType != 2"
>
<el-select
clearable
v-model=
"form.authType"
placeholder=
"请选择权限类型"
>
<el-select
clearable
v-model=
"form.authType"
placeholder=
"请选择权限类型"
>
<el-option
<el-option
v-for=
"(item, key) in dict.authType"
v-for=
"(item, key) in dict.authType"
...
@@ -43,7 +43,7 @@
...
@@ -43,7 +43,7 @@
>
>
</el-option>
</el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
-->
<el-form-item
prop=
"url"
v-if=
"form.menuType != 2"
>
<el-form-item
prop=
"url"
v-if=
"form.menuType != 2"
>
<span
slot=
"label"
>
<span
slot=
"label"
>
<el-tooltip
content=
"访问的路由地址,如:`system`"
placement=
"top"
>
<el-tooltip
content=
"访问的路由地址,如:`system`"
placement=
"top"
>
...
@@ -261,8 +261,8 @@ export default {
...
@@ -261,8 +261,8 @@ export default {
rules
:
{
rules
:
{
name
:
[{
required
:
true
,
message
:
'
请输入菜单名称
'
,
trigger
:
'
blur
'
}],
name
:
[{
required
:
true
,
message
:
'
请输入菜单名称
'
,
trigger
:
'
blur
'
}],
url
:
[{
required
:
true
,
message
:
'
请输入菜单访问地址
'
,
trigger
:
'
blur
'
}],
url
:
[{
required
:
true
,
message
:
'
请输入菜单访问地址
'
,
trigger
:
'
blur
'
}],
component
:
[{
required
:
true
,
message
:
'
请输入组件路径
'
,
trigger
:
'
blur
'
}]
,
component
:
[{
required
:
true
,
message
:
'
请输入组件路径
'
,
trigger
:
'
blur
'
}]
authType
:
[{
required
:
true
,
message
:
'
请输入选择权限类型
'
,
trigger
:
'
change
'
}]
//
authType: [{ required: true, message: '请输入选择权限类型', trigger: 'change' }]
}
}
};
};
},
},
...
...
admin_2/src/utils/index.js
View file @
0fe8f040
...
@@ -221,16 +221,17 @@ export const generateRoutes = (menuList) => {
...
@@ -221,16 +221,17 @@ export const generateRoutes = (menuList) => {
// 递归处理子节点
// 递归处理子节点
if
(
item
.
children
&&
item
.
children
.
length
>
0
)
{
if
(
item
.
children
&&
item
.
children
.
length
>
0
)
{
newItem
.
children
=
generateRoutes
(
item
.
children
);
newItem
.
children
=
generateRoutes
(
item
.
children
);
// 如果存在子路由,默认重定向到第一个不是在菜单栏隐藏的子路由
let
firstChild
=
newItem
.
children
.
find
((
v
)
=>
!
v
.
hidden
);
if
(
firstChild
)
{
newItem
.
redirect
=
firstChild
.
path
;
}
}
}
return
newItem
;
return
newItem
;
});
});
routers
.
forEach
((
v
)
=>
{
if
(
v
.
children
&&
v
.
children
.
length
)
{
v
.
redirect
=
v
.
children
[
0
].
path
;
}
});
return
routers
;
return
routers
;
};
};
/**
/**
* 过滤菜单按钮项并提取 menuType = 2 的项
* 过滤菜单按钮项并提取 menuType = 2 的项
* @param {Array} menuList - 菜单列表
* @param {Array} menuList - 菜单列表
...
...
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