From e240f4acc8b7150f950320a21cf157facd4d4340 Mon Sep 17 00:00:00 2001 From: zhangyuanpeng <1016062422@qq.com> Date: Mon, 25 Nov 2024 17:08:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20:sparkles:=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/menu.ts | 76 +++++++ src/pages.json | 12 ++ src/pages/work/index.vue | 1 + src/pages/work/role/assign-perm.vue | 113 ++++++++++ src/pages/work/role/index.vue | 319 ++++++++++++++++++++++++++++ 5 files changed, 521 insertions(+) create mode 100644 src/api/system/menu.ts create mode 100644 src/pages/work/role/assign-perm.vue create mode 100644 src/pages/work/role/index.vue diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts new file mode 100644 index 0000000..54424c2 --- /dev/null +++ b/src/api/system/menu.ts @@ -0,0 +1,76 @@ +import request from "@/utils/request"; +// 菜单基础URL +const MENU_BASE_URL = "/api/v1/menus"; + +const MenuAPI = { + /** + * 获取当前用户的路由列表 + *

+ * 无需传入角色,后端解析token获取角色自行判断是否拥有路由的权限 + * + * @returns 路由列表 + */ + getRoutes() { + return request({ + url: `${MENU_BASE_URL}/routes`, + method: "GET", + }); + }, + + /** + * 获取菜单下拉数据源 + * + * @returns 菜单下拉数据源 + */ + getOptions(onlyParent?: boolean) { + return request({ + url: `${MENU_BASE_URL}/options`, + method: "GET", + data: { onlyParent: onlyParent }, + }); + }, +}; + +export default MenuAPI; + +/** RouteVO,路由对象 */ +export interface RouteVO { + /** 子路由列表 */ + children: RouteVO[]; + /** 组件路径 */ + component?: string; + /** 路由属性 */ + meta?: Meta; + /** 路由名称 */ + name?: string; + /** 路由路径 */ + path?: string; + /** 跳转链接 */ + redirect?: string; +} + +/** Meta,路由属性 */ +export interface Meta { + /** 【目录】只有一个子路由是否始终显示 */ + alwaysShow?: boolean; + /** 是否隐藏(true-是 false-否) */ + hidden?: boolean; + /** ICON */ + icon?: string; + /** 【菜单】是否开启页面缓存 */ + keepAlive?: boolean; + /** 路由title */ + title?: string; +} + +/** + * 组件数据源 + */ +interface OptionType { + /** 值 */ + value: string | number; + /** 文本 */ + label: string; + /** 子列表 */ + children?: OptionType[]; +} diff --git a/src/pages.json b/src/pages.json index 37a4746..e7afde2 100644 --- a/src/pages.json +++ b/src/pages.json @@ -67,6 +67,18 @@ "style": { "navigationBarTitleText": "通知详情" } + }, + { + "path": "pages/work/role/index", + "style": { + "navigationBarTitleText": "角色管理" + } + }, + { + "path": "pages/work/role/assign-perm", + "style": { + "navigationBarTitleText": "角色分配权限" + } } ], "globalStyle": { diff --git a/src/pages/work/index.vue b/src/pages/work/index.vue index cd6dd54..62c6da3 100644 --- a/src/pages/work/index.vue +++ b/src/pages/work/index.vue @@ -36,6 +36,7 @@ const gridList = reactive([ { icon: "/static/icons/role.png", title: "角色管理", + url: "/pages/work/role/index", prem: "sys:role:query", }, { diff --git a/src/pages/work/role/assign-perm.vue b/src/pages/work/role/assign-perm.vue new file mode 100644 index 0000000..0cb2843 --- /dev/null +++ b/src/pages/work/role/assign-perm.vue @@ -0,0 +1,113 @@ + + + + diff --git a/src/pages/work/role/index.vue b/src/pages/work/role/index.vue new file mode 100644 index 0000000..1044cc0 --- /dev/null +++ b/src/pages/work/role/index.vue @@ -0,0 +1,319 @@ + + + +