diff --git a/package.json b/package.json
index 7c9f6b26..de586a08 100644
--- a/package.json
+++ b/package.json
@@ -7,15 +7,16 @@
"serve": "vite preview"
},
"dependencies": {
+ "@element-plus/icons": "0.0.11",
"axios": "^0.24.0",
"element-plus": "^1.2.0-beta.6",
- "@element-plus/icons": "0.0.11",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
"path-to-regexp": "^6.2.0",
"screenfull": "^6.0.0",
"vue": "^3.2.16",
"vue-router": "^4.0.12",
+ "vue3-treeselect": "^0.1.10",
"vuex": "^4.0.2"
},
"devDependencies": {
diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts
index b59dc84a..b47013b3 100644
--- a/src/api/system/menu.ts
+++ b/src/api/system/menu.ts
@@ -87,7 +87,7 @@ export function updateMenu(id: number, data: object) {
*
* @param ids 菜单ID,多个以英文逗号(,)分割
*/
-export function deleteMenu(ids: string) {
+export function deleteMenus(ids: string) {
return request({
url: '/youlai-admin/api/v1/menus/' + ids,
method: 'delete'
diff --git a/src/api/system/perm.ts b/src/api/system/perm.ts
new file mode 100644
index 00000000..bbe9de17
--- /dev/null
+++ b/src/api/system/perm.ts
@@ -0,0 +1,79 @@
+import request from '@/utils/request'
+
+/**
+ * 获取权限分页列表
+ *
+ * @param queryParams
+ */
+export function listPermsWithPage(queryParams: object) {
+ return request({
+ url: '/youlai-admin/api/v1/permissions/page',
+ method: 'get',
+ params: queryParams
+ })
+}
+
+/**
+ * 获取权限列表
+ *
+ * @param queryParams
+ */
+export function listPerms(queryParams: object) {
+ return request({
+ url: '/youlai-admin/api/v1/permissions',
+ method: 'get',
+ params: queryParams
+ })
+}
+
+/**
+ * 获取权限详情
+ *
+ * @param id
+ */
+export function getPermDetail(id: number) {
+ return request({
+ url: '/youlai-admin/api/v1/permissions/' + id,
+ method: 'get'
+ })
+}
+
+/**
+ * 添加权限
+ *
+ * @param data
+ */
+export function addPerm(data: object) {
+ return request({
+ url: '/youlai-admin/api/v1/permissions',
+ method: 'post',
+ data: data
+ })
+}
+
+/**
+ * 更新权限
+ *
+ * @param id
+ * @param data
+ */
+export function updatePerm(id: number, data: object) {
+ return request({
+ url: '/youlai-admin/api/v1/permissions/' + id,
+ method: 'put',
+ data: data
+ })
+}
+
+/**
+ * 批量删除权限,多个以英文逗号(,)分割
+ *
+ * @param ids
+ */
+export function deletePerms(ids: string) {
+ return request({
+ url: '/youlai-admin/api/v1/permissions/' + ids,
+ method: 'delete'
+ })
+}
+
diff --git a/src/api/system/role.ts b/src/api/system/role.ts
new file mode 100644
index 00000000..cd197c21
--- /dev/null
+++ b/src/api/system/role.ts
@@ -0,0 +1,79 @@
+import request from '@/utils/request'
+
+/**
+ * 获取角色分页列表
+ *
+ * @param queryParams
+ */
+export function listRolesWithPage(queryParams: object) {
+ return request({
+ url: '/youlai-admin/api/v1/roles/page',
+ method: 'get',
+ params: queryParams
+ })
+}
+
+/**
+ * 获取角色列表
+ *
+ * @param queryParams
+ */
+export function listRoles(queryParams: object) {
+ return request({
+ url: '/youlai-admin/api/v1/roles',
+ method: 'get',
+ params: queryParams
+ })
+}
+
+/**
+ * 获取角色详情
+ *
+ * @param id
+ */
+export function getPermDetail(id: number) {
+ return request({
+ url: '/youlai-admin/api/v1/roles/' + id,
+ method: 'get'
+ })
+}
+
+/**
+ * 添加角色
+ *
+ * @param data
+ */
+export function addPerm(data: object) {
+ return request({
+ url: '/youlai-admin/api/v1/roles',
+ method: 'post',
+ data: data
+ })
+}
+
+/**
+ * 更新角色
+ *
+ * @param id
+ * @param data
+ */
+export function updatePerm(id: number, data: object) {
+ return request({
+ url: '/youlai-admin/api/v1/roles/' + id,
+ method: 'put',
+ data: data
+ })
+}
+
+/**
+ * 批量删除角色,多个以英文逗号(,)分割
+ *
+ * @param ids
+ */
+export function deleteRoles(ids: string) {
+ return request({
+ url: '/youlai-admin/api/v1/roles/' + ids,
+ method: 'delete'
+ })
+}
+
diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue
index eb6d0ab0..e32bf387 100644
--- a/src/components/Breadcrumb/index.vue
+++ b/src/components/Breadcrumb/index.vue
@@ -1,42 +1,50 @@
-
+
-
-
- {{ item.meta.title }}
-
- {{ item.meta.title }}
+
+ {{ item.meta.title }}
+ {{ item.meta.title }}
+
+
\ No newline at end of file
diff --git a/src/permission.ts b/src/permission.ts
index 871c7fde..86732f07 100644
--- a/src/permission.ts
+++ b/src/permission.ts
@@ -11,7 +11,7 @@ const whiteList = ['/login', '/auth-redirect']
router.beforeEach(async (to, form, next) => {
NProgress.start()
- const hasToken =store.state.user.token
+ const hasToken = store.state.user.token
if (hasToken) {
// 如果登录成功,跳转到首页
if (to.path === '/login') {
@@ -25,8 +25,8 @@ router.beforeEach(async (to, form, next) => {
try {
await store.dispatch('user/getUserInfo')
const roles = store.state.user.roles
- await store.dispatch('permission/generateRoutes', roles)
- store.state.permission.addRoutes.forEach(route => {
+ const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
+ accessRoutes.forEach((route: any) => {
router.addRoute(route)
})
next({...to, replace: true})
@@ -50,7 +50,6 @@ router.beforeEach(async (to, form, next) => {
}
})
-
router.afterEach(() => {
NProgress.done()
})
\ No newline at end of file
diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts
index 83a5a633..c918c2f2 100644
--- a/src/store/modules/permission.ts
+++ b/src/store/modules/permission.ts
@@ -8,10 +8,6 @@ const modules = import.meta.glob("../../views/**/**.vue");
export const Layout = () => import( '@/layout/index.vue')
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
- // 超级管理员放行
- if (roles.includes('ROOT')) {
- return true
- }
if (route.meta && route.meta.roles) {
return roles.some(role => {
if (route.meta?.roles !== undefined) {
@@ -66,7 +62,12 @@ const permissionModule: Module = {
return new Promise((resolve, reject) => {
listRoutes().then(response => {
const asyncRoutes = response.data
- let accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
+ let accessedRoutes
+ if (roles.includes('ROOT')) { // 超级管理员拥有全部权限
+ accessedRoutes = asyncRoutes || []
+ } else {
+ accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
+ }
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
}).catch(error => {
@@ -74,7 +75,6 @@ const permissionModule: Module = {
})
})
}
-
}
}
export default permissionModule;
diff --git a/src/views/system/dict/components/Dict.vue b/src/views/system/dict/components/Dict.vue
index 67320a7a..b2c73661 100644
--- a/src/views/system/dict/components/Dict.vue
+++ b/src/views/system/dict/components/Dict.vue
@@ -158,7 +158,7 @@ const state = reactive({
})
function handleQuery() {
- emit('dictClick',{})
+ emit('dictClick',null)
state.loading = true
listDictWithPage(state.queryParams).then(response => {
const {data, total} = response as any
diff --git a/src/views/system/dict/components/DictItem.vue b/src/views/system/dict/components/DictItem.vue
index 345ba335..75e0539a 100644
--- a/src/views/system/dict/components/DictItem.vue
+++ b/src/views/system/dict/components/DictItem.vue
@@ -14,7 +14,7 @@
@@ -32,8 +32,8 @@
size="mini"
>
-
-
+
+
启用
@@ -105,7 +105,6 @@
-