Skip to content

Commit 83573b3

Browse files
YunaiVgitee-org
authored andcommitted
!408 菜单新增 alwaysShow 总是展示、componentName 组件名
Merge pull request !408 from 芋道源码/feature/dev-yunai
2 parents 2f285c2 + 534c155 commit 83573b3

File tree

10 files changed

+60
-39
lines changed

10 files changed

+60
-39
lines changed

src/store/modules/permission.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,23 +58,26 @@ function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
5858
icon: route.icon,
5959
noCache: !route.keepAlive,
6060
}
61-
// 路由地址转首字母大写驼峰,作为路由名称,适配 keepAlive
62-
route.name = toCamelCase(route.path, true)
63-
// 处理三级及以上菜单路由缓存问题,将path名字赋值给name
64-
if (route.path.indexOf("/") !== -1) {
65-
const pathArr = route.path.split("/");
66-
route.name = toCamelCase(pathArr[pathArr.length - 1], true)
67-
}
6861
route.hidden = !route.visible
62+
// 处理 name 属性
63+
if (route.componentName && route.componentName.length > 0) {
64+
route.name = route.componentName
65+
} else {
66+
// 路由地址转首字母大写驼峰,作为路由名称,适配 keepAlive
67+
route.name = toCamelCase(route.path, true)
68+
// 处理三级及以上菜单路由缓存问题,将 path 名字赋值给 name
69+
if (route.path.indexOf("/") !== -1) {
70+
const pathArr = route.path.split("/");
71+
route.name = toCamelCase(pathArr[pathArr.length - 1], true)
72+
}
73+
}
6974
// 处理 component 属性
7075
if (route.children) { // 父节点
7176
if (route.parentId === 0) {
7277
route.component = Layout
7378
} else {
7479
route.component = ParentView
7580
}
76-
// 解决只有一个菜单时无法显示目录
77-
route.alwaysShow = true
7881
} else { // 根节点
7982
route.component = loadView(route.component)
8083
}
@@ -85,8 +88,10 @@ function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
8588
}
8689
if (route.children != null && route.children && route.children.length) {
8790
route.children = filterAsyncRouter(route.children, route, type)
91+
route.alwaysShow = route.alwaysShow !== undefined ? route.alwaysShow : true
8892
} else {
8993
delete route['children']
94+
delete route['alwaysShow'] // 如果没有子菜单,就不需要考虑 alwaysShow 字段
9095
}
9196
return true
9297
})

src/views/mp/account/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ import {
132132
} from '@/api/mp/account'
133133
134134
export default {
135-
name: 'mpAccount',
135+
name: 'MpAccount',
136136
components: {},
137137
data() {
138138
return {

src/views/mp/autoReply/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ import { getSimpleAccounts } from "@/api/mp/account";
162162
import { createAutoReply, deleteAutoReply, getAutoReply, getAutoReplyPage, updateAutoReply } from "@/api/mp/autoReply";
163163
164164
export default {
165-
name: 'mpAutoReply',
165+
name: 'MpAutoReply',
166166
components: {
167167
WxVideoPlayer,
168168
WxVoicePlayer,

src/views/mp/draft/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ import { getSimpleAccounts } from "@/api/mp/account";
167167
import {deleteFreePublish, submitFreePublish} from "@/api/mp/freePublish";
168168
169169
export default {
170-
name: 'mpDraft',
170+
name: 'MpDraft',
171171
components: {
172172
WxEditor,
173173
WxNews,

src/views/mp/freePublish/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ import { getSimpleAccounts } from "@/api/mp/account";
6464
import WxNews from '@/views/mp/components/wx-news/main.vue';
6565
6666
export default {
67-
name: 'mpDraft',
67+
name: 'MpFreePublish',
6868
components: {
6969
WxNews
7070
},

src/views/mp/material/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ import { getMaterialPage, deletePermanentMaterial } from "@/api/mp/material";
178178
import { getAccessToken } from '@/utils/auth'
179179
180180
export default {
181-
name: 'mpMaterial',
181+
name: 'MpMaterial',
182182
components: {
183183
WxVoicePlayer,
184184
WxVideoPlayer

src/views/mp/menu/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ import { deleteMenu, getMenuList, saveMenu } from "@/api/mp/menu";
157157
import { getSimpleAccounts } from "@/api/mp/account";
158158
159159
export default {
160-
name: 'mpMenu',
160+
name: 'MpMenu',
161161
components: {
162162
WxReplySelect,
163163
WxNews,

src/views/mp/mpuser/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ import { getSimpleAccounts } from "@/api/mp/account";
9595
import { getSimpleTags } from "@/api/mp/tag";
9696
9797
export default {
98-
name: "WxAccountFans",
98+
name: "MpUser",
9999
components: {
100100
},
101101
data() {

src/views/mp/statistics/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ import {addTime, beginOfDay, betweenDay, endOfDay, formatDate} from "@/utils/dat
8282
import { getSimpleAccounts } from "@/api/mp/account";
8383
8484
export default {
85-
name: 'mpStatistics',
85+
name: 'MpStatistics',
8686
data() {
8787
return {
8888
date : [beginOfDay(new Date(new Date().getTime() - 3600 * 1000 * 24 * 7)), // -7 天

src/views/system/menu/index.vue

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,14 @@
3838
</template>
3939
</el-table-column>
4040
<el-table-column prop="sort" label="排序" width="60"></el-table-column>
41-
<el-table-column prop="permission" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
42-
<el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
41+
<el-table-column prop="permission" label="权限标识" :show-overflow-tooltip="true" />
42+
<el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true" />
43+
<el-table-column prop="componentName" label="组件名称" :show-overflow-tooltip="true" />
4344
<el-table-column prop="status" label="状态" width="80">
4445
<template v-slot="scope">
4546
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
4647
</template>
4748
</el-table-column>
48-
<el-table-column label="创建时间" align="center" prop="createTime">
49-
<template v-slot="scope">
50-
<span>{{ parseTime(scope.row.createTime) }}</span>
51-
</template>
52-
</el-table-column>
5349
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
5450
<template v-slot="scope">
5551
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
@@ -63,7 +59,7 @@
6359
</el-table>
6460

6561
<!-- 添加或修改菜单对话框 -->
66-
<el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
62+
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
6763
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
6864
<el-row>
6965
<el-col :span="24">
@@ -113,22 +109,27 @@
113109
<el-input v-model="form.path" placeholder="请输入路由地址" />
114110
</el-form-item>
115111
</el-col>
116-
<el-col :span="12" v-if="form.type === 2">
117-
<el-form-item label="组件路径" prop="component">
118-
<el-input v-model="form.component" placeholder="请输入组件路径" />
119-
</el-form-item>
120-
</el-col>
121-
<el-col :span="12">
122-
<el-form-item v-if="form.type !== 1" label="权限标识">
112+
<el-col :span="12">
113+
<el-form-item v-if="form.type !== 1" label="权限标识">
123114
<span slot="label">
124115
<el-tooltip content="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)" placement="top">
125116
<i class="el-icon-question" />
126117
</el-tooltip>
127118
权限字符
128119
</span>
129-
<el-input v-model="form.permission" placeholder="请权限标识" maxlength="50" />
120+
<el-input v-model="form.permission" placeholder="请权限标识" maxlength="50" />
121+
</el-form-item>
122+
</el-col>
123+
<el-col :span="12" v-if="form.type === 2">
124+
<el-form-item label="组件路径" prop="component">
125+
<el-input v-model="form.component" placeholder="例如说:system/user/index" />
130126
</el-form-item>
131127
</el-col>
128+
<el-col :span="12" v-if="form.type === 2">
129+
<el-form-item label="组件名称" prop="componentName">
130+
<el-input v-model="form.componentName" placeholder="例如说:SystemUser" />
131+
</el-form-item>
132+
</el-col>
132133
<el-col :span="12">
133134
<el-form-item label="菜单状态" prop="status">
134135
<span slot="label">
@@ -158,19 +159,33 @@
158159
</el-form-item>
159160
</el-col>
160161
<el-col :span="12">
161-
<el-form-item v-if="form.type === 2" label="显示状态">
162+
<el-form-item v-if="form.type !== 3" label="总是显示">
162163
<span slot="label">
163-
<el-tooltip content="选择缓存时,则会被 `keep-alive` 缓存,需要匹配组件的 `name` 和路由地址保持一致" placement="top">
164+
<el-tooltip content="选择不是时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单" placement="top">
164165
<i class="el-icon-question" />
165166
</el-tooltip>
166-
是否缓存
167+
总是显示
167168
</span>
168-
<el-radio-group v-model="form.keepAlive">
169-
<el-radio :key="true" :label="true">缓存</el-radio>
170-
<el-radio :key="false" :label="false">不缓存</el-radio>
169+
<el-radio-group v-model="form.alwaysShow">
170+
<el-radio :key="true" :label="true">总是</el-radio>
171+
<el-radio :key="false" :label="false">不是</el-radio>
171172
</el-radio-group>
172173
</el-form-item>
173174
</el-col>
175+
<el-col :span="12">
176+
<el-form-item v-if="form.type === 2" label="是否缓存">
177+
<span slot="label">
178+
<el-tooltip content="选择缓存时,则会被 `keep-alive` 缓存,必须填写「组件名称」字段" placement="top">
179+
<i class="el-icon-question" />
180+
</el-tooltip>
181+
是否缓存
182+
</span>
183+
<el-radio-group v-model="form.keepAlive">
184+
<el-radio :key="true" :label="true">缓存</el-radio>
185+
<el-radio :key="false" :label="false">不缓存</el-radio>
186+
</el-radio-group>
187+
</el-form-item>
188+
</el-col>
174189
</el-row>
175190
</el-form>
176191
<div slot="footer" class="dialog-footer">
@@ -296,6 +311,7 @@ export default {
296311
status: CommonStatusEnum.ENABLE,
297312
visible: true,
298313
keepAlive: true,
314+
alwaysShow: true,
299315
};
300316
this.resetForm("form");
301317
},

0 commit comments

Comments
 (0)