功能更新:新增Bug管理模块,完善用户角色分配,优化项目设置
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
<div class="page-wrap">
|
||||
<page-section title="菜单管理">
|
||||
<template slot="extra">
|
||||
<el-button size="small" :loading="initPermissionMenuLoading" @click="initPermissionMenu">初始化权限管理菜单</el-button>
|
||||
<el-button size="small" :loading="initBugMenuLoading" @click="initBugManagementMenu">初始化 Bug 管理菜单</el-button>
|
||||
<el-button type="primary" size="small" @click="openCreate(0)">新建菜单</el-button>
|
||||
</template>
|
||||
<el-form :inline="true" :model="queryForm" size="small" @submit.native.prevent>
|
||||
@@ -163,6 +165,8 @@ export default {
|
||||
return {
|
||||
loading: false,
|
||||
submitting: false,
|
||||
initPermissionMenuLoading: false,
|
||||
initBugMenuLoading: false,
|
||||
dialogVisible: false,
|
||||
dialogMode: 'create',
|
||||
queryForm: {
|
||||
@@ -307,6 +311,179 @@ export default {
|
||||
this.fetchTree()
|
||||
})
|
||||
}).catch(() => {})
|
||||
},
|
||||
initPermissionMenu() {
|
||||
this.initPermissionMenuLoading = true
|
||||
getMenuTree({}).then(res => {
|
||||
const data = res && res.data ? res.data : res || []
|
||||
const tree = Array.isArray(data) ? data : (data.list || data.items || [])
|
||||
const flattened = []
|
||||
this.flattenMenus(tree, flattened)
|
||||
|
||||
let systemMenu = flattened.find(item => {
|
||||
const path = item.path || ''
|
||||
const name = item.name || ''
|
||||
return path === '/system' || name === '系统管理'
|
||||
})
|
||||
const hasPermissionMenu = flattened.some(item => (item.path || '') === '/system/permission')
|
||||
|
||||
const createPermissionChild = parentId => {
|
||||
if (hasPermissionMenu) {
|
||||
this.$message.success('权限管理菜单已存在')
|
||||
return Promise.resolve()
|
||||
}
|
||||
return createMenu({
|
||||
parentId: Number(parentId || 0),
|
||||
name: '权限管理',
|
||||
code: 'system_permission_manage',
|
||||
type: 2,
|
||||
path: '/system/permission',
|
||||
component: '@/components/System/PermissionManage',
|
||||
icon: 'lock',
|
||||
permissionCode: 'permission:list',
|
||||
sort: 40,
|
||||
visible: 1,
|
||||
status: 1
|
||||
})
|
||||
}
|
||||
|
||||
if (systemMenu) {
|
||||
return createPermissionChild(systemMenu.id || systemMenu.menuId)
|
||||
}
|
||||
|
||||
return createMenu({
|
||||
parentId: 0,
|
||||
name: '系统管理',
|
||||
code: 'system_manage',
|
||||
type: 1,
|
||||
path: '/system',
|
||||
component: '',
|
||||
icon: 'setting',
|
||||
permissionCode: '',
|
||||
sort: 90,
|
||||
visible: 1,
|
||||
status: 1
|
||||
}).then(createRes => {
|
||||
const created = (createRes && createRes.data) || {}
|
||||
const parentId = created.id || created.menuId
|
||||
if (parentId) {
|
||||
return createPermissionChild(parentId)
|
||||
}
|
||||
// 如果接口不返回id,则重新拉取菜单树定位系统管理菜单
|
||||
return getMenuTree({}).then(latestRes => {
|
||||
const latestData = latestRes && latestRes.data ? latestRes.data : latestRes || []
|
||||
const latestTree = Array.isArray(latestData) ? latestData : (latestData.list || latestData.items || [])
|
||||
const latestFlattened = []
|
||||
this.flattenMenus(latestTree, latestFlattened)
|
||||
const latestSystem = latestFlattened.find(item => (item.path || '') === '/system' || (item.name || '') === '系统管理')
|
||||
return createPermissionChild(latestSystem ? (latestSystem.id || latestSystem.menuId) : 0)
|
||||
})
|
||||
})
|
||||
}).then(() => {
|
||||
this.$message.success('权限管理菜单初始化完成')
|
||||
this.fetchTree()
|
||||
}).catch(() => {
|
||||
this.$message.error('初始化权限管理菜单失败')
|
||||
}).finally(() => {
|
||||
this.initPermissionMenuLoading = false
|
||||
})
|
||||
},
|
||||
initBugManagementMenu() {
|
||||
this.initBugMenuLoading = true
|
||||
getMenuTree({}).then(res => {
|
||||
const data = res && res.data ? res.data : res || []
|
||||
const tree = Array.isArray(data) ? data : (data.list || data.items || [])
|
||||
const flattened = []
|
||||
this.flattenMenus(tree, flattened)
|
||||
const hasBugMenu = flattened.some(item => String(item.path || '').indexOf('/bug') === 0)
|
||||
if (hasBugMenu) {
|
||||
this.$message.success('Bug 管理菜单已存在')
|
||||
return Promise.resolve()
|
||||
}
|
||||
return createMenu({
|
||||
parentId: 0,
|
||||
name: 'Bug管理',
|
||||
code: 'bug_manage_root',
|
||||
type: 1,
|
||||
path: '/bug',
|
||||
component: '',
|
||||
icon: 'el-icon-s-claim',
|
||||
permissionCode: '',
|
||||
sort: 88,
|
||||
visible: 1,
|
||||
status: 1
|
||||
}).then(parentRes => {
|
||||
const created = (parentRes && parentRes.data) || {}
|
||||
let parentId = created.id || created.menuId
|
||||
const resolveParentId = () => {
|
||||
if (parentId) return Promise.resolve(parentId)
|
||||
return getMenuTree({}).then(latestRes => {
|
||||
const latestData = latestRes && latestRes.data ? latestRes.data : latestRes || []
|
||||
const latestTree = Array.isArray(latestData) ? latestData : (latestData.list || latestData.items || [])
|
||||
const flat = []
|
||||
this.flattenMenus(latestTree, flat)
|
||||
const p = flat.find(item => (item.path || '') === '/bug' || (item.code || '') === 'bug_manage_root')
|
||||
return p ? (p.id || p.menuId) : 0
|
||||
})
|
||||
}
|
||||
return resolveParentId().then(pid => {
|
||||
if (!pid) {
|
||||
return Promise.reject(new Error('未获取到 Bug 管理父菜单 ID'))
|
||||
}
|
||||
const children = [
|
||||
{
|
||||
name: '新建 Bug',
|
||||
code: 'bug_create',
|
||||
path: '/bug/create',
|
||||
component: '@/components/Bug/BugEditor',
|
||||
permissionCode: 'bug:create',
|
||||
sort: 5,
|
||||
icon: 'el-icon-document-add'
|
||||
},
|
||||
{
|
||||
name: 'Bug 列表',
|
||||
code: 'bug_list',
|
||||
path: '/bug/list',
|
||||
component: '@/components/Bug/BugList',
|
||||
permissionCode: 'bug:list',
|
||||
sort: 10,
|
||||
icon: 'el-icon-document'
|
||||
},
|
||||
{
|
||||
name: 'Bug 统计',
|
||||
code: 'bug_stats',
|
||||
path: '/bug/stats',
|
||||
component: '@/components/Bug/BugStats',
|
||||
permissionCode: 'bug:stats',
|
||||
sort: 20,
|
||||
icon: 'el-icon-data-line'
|
||||
}
|
||||
]
|
||||
return children.reduce((chain, c) => {
|
||||
return chain.then(() => createMenu({
|
||||
parentId: Number(pid),
|
||||
name: c.name,
|
||||
code: c.code,
|
||||
type: 2,
|
||||
path: c.path,
|
||||
component: c.component,
|
||||
icon: c.icon,
|
||||
permissionCode: c.permissionCode,
|
||||
sort: c.sort,
|
||||
visible: 1,
|
||||
status: 1
|
||||
}))
|
||||
}, Promise.resolve())
|
||||
})
|
||||
})
|
||||
}).then(() => {
|
||||
this.$message.success('Bug 管理菜单初始化完成')
|
||||
this.fetchTree()
|
||||
}).catch(() => {
|
||||
this.$message.error('初始化 Bug 管理菜单失败')
|
||||
}).finally(() => {
|
||||
this.initBugMenuLoading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
||||
Reference in New Issue
Block a user