From db9b98af8e3aca19558c00e71bd5be3d2ce22791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=9C?= <2970639877@qq.com> Date: Wed, 11 Mar 2026 17:36:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E5=92=8C=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modules/role.ts | 18 +- src/api/types/role.d.ts | 24 +- src/components/common/Form.vue | 18 +- src/views/system/menuManagement/index.vue | 63 +++- src/views/system/menuManagement/options.ts | 6 +- src/views/system/menuManagement/备份.vue | 256 ------------- src/views/system/roleManagement/index.vue | 407 +++++++++++++++++---- src/views/system/roleManagement/options.ts | 17 + src/views/system/roleManagement/rules.ts | 9 + 9 files changed, 449 insertions(+), 369 deletions(-) delete mode 100644 src/views/system/menuManagement/备份.vue create mode 100644 src/views/system/roleManagement/options.ts diff --git a/src/api/modules/role.ts b/src/api/modules/role.ts index 5807f70..1b75072 100644 --- a/src/api/modules/role.ts +++ b/src/api/modules/role.ts @@ -43,15 +43,6 @@ export async function deleteRoleApi(params: DeleteRoleParams): Promise { return request.post('/roles/del', params); } -/** - * 设置角色权限 - * @param params 角色ID + 权限ID列表(逗号分隔字符串) - * @returns Promise - */ -export async function setRolePermissionApi(params: SetRolePermissionParams): Promise { - return request.post('/roles/setPermission', params); -} - /** * 获取角色权限 * @param params 角色ID @@ -60,3 +51,12 @@ export async function setRolePermissionApi(params: SetRolePermissionParams): Pro export async function getRolePermissionApi(params: GetRolePermissionParams): Promise { return request.get('/roles/getPermission', { id: params.id }); } + +/** + * 设置角色权限 + * @param params 角色ID + 权限ID列表(逗号分隔字符串) + * @returns Promise + */ +export async function setRolePermissionApi(params: SetRolePermissionParams): Promise { + return request.post('/roles/setPermission', params); +} diff --git a/src/api/types/role.d.ts b/src/api/types/role.d.ts index 1c964c2..bb8edff 100644 --- a/src/api/types/role.d.ts +++ b/src/api/types/role.d.ts @@ -7,10 +7,6 @@ export interface RoleFormParams { id?: string; // 仅编辑/删除/权限操作时需要 } -// 删除角色参数 -export interface DeleteRoleParams { - id: string; -} // 设置角色权限参数 export interface SetRolePermissionParams { @@ -22,18 +18,32 @@ export interface SetRolePermissionParams { export interface GetRolePermissionParams { id: string; } +// 删除角色参数 +export interface DeleteRoleParams { + id: string; +} // 角色列表单条数据类型 export interface RoleItem { id: string; name: string; title: string; - create_time?: string; - update_time?: string; + create_at?: string; } // 角色列表响应类型 export type RoleListResponse = RoleItem[]; +// 定义权限项的结构 +interface PermissionInfo { + id: string; + title: string; +} +export interface RolePermissionItem { + all_permission_info: PermissionInfo[]; + permission_ids: []; + +} + // 权限ID列表响应类型 -export type PermissionIdsResponse = string[]; +export type PermissionIdsResponse = RolePermissionItem; diff --git a/src/components/common/Form.vue b/src/components/common/Form.vue index d873d99..7c0e236 100644 --- a/src/components/common/Form.vue +++ b/src/components/common/Form.vue @@ -10,8 +10,8 @@ - + @@ -47,7 +46,7 @@ import MenuHeader from '@/components/common/Header.vue' import MenuTable from '@/components/common/Table.vue' import MenuDialog from '@/components/common/Dialog.vue' import MenuForm from '@/components/common/Form.vue' -import { MenuTableColumns, MenuiconOptions, menuiconMap, MenuFormItemOptions } from './options' +import { menuTableColumns, menuiconOptions, menuiconMap, menuFormItemOptions } from './options' import { rules } from './rules' import { getMenuApi, createMenuApi, editMenuApi, deleteMenuApi } from '@/api/modules/menu' @@ -79,11 +78,11 @@ const menuForm = ref({ }) const menuFormRef = ref() // 表单验证规则 -const menuFormRules = rules(menuForm.value, MenuiconOptions) +const menuFormRules = rules(menuForm.value, menuiconOptions) // icon和菜单表单选项映射 const menuFormOptionsMap = ref({ 'parentName': [] as any[], - 'icon': MenuiconOptions, + 'icon': menuiconOptions, 'type': [ { label: '菜单', value: 1 }, { label: '按钮', value: 2 } @@ -151,14 +150,30 @@ const handleEditMenu = (row: any) => { } const handleDeleteMenu = async (row: any) => { try { - await deleteMenuApi({id: row.id}) + await deleteMenuApi({ id: row.id }) await fetchMenuList() } catch (err) { console.error('删除菜单失败') } } -const handleToggleStatus = (row: any) => { - row.status = row.status === 1 ? 2 : 1 +const handleStatusChange = async (row: any) => { + const oldStatus = row.status === 1 ? 2 : 1 + + try { + // 调用后端修改状态接口 + // await updateMenuStatusApi({ + // id: row.id, + // status: row.status + // }) + // ElMessage.success(`已${row.status === 1 ? '启用' : '禁用'}`) + // 刷新列表 + // await fetchMenuList() + } catch (err) { + // 失败回滚 + row.status = oldStatus + ElMessage.error('状态修改失败') + console.error(err) + } } /** @@ -192,8 +207,30 @@ const handleSubmit = async () => { } const handleCancel = () => { dialogVisible.value = false + dialogType.value = 'add' + menuForm.value = { + name: '', // 菜单名称 + parentName: '', // 上级菜单名称 + path: '', // 路由路径 + api: '', // 后端路由 + icon: '', // 图标名称 + sort: null, // 排序(默认1) + type: null, // 默认是菜单类型 + status: null, // 默认是启用状态 + } } const handleClose = () => { dialogVisible.value = false + dialogType.value = 'add' + menuForm.value = { + name: '', // 菜单名称 + parentName: '', // 上级菜单名称 + path: '', // 路由路径 + api: '', // 后端路由 + icon: '', // 图标名称 + sort: null, // 排序(默认1) + type: null, // 默认是菜单类型 + status: null, // 默认是启用状态 + } } diff --git a/src/views/system/menuManagement/options.ts b/src/views/system/menuManagement/options.ts index 9f4ab94..0834d7f 100644 --- a/src/views/system/menuManagement/options.ts +++ b/src/views/system/menuManagement/options.ts @@ -13,7 +13,7 @@ export const menuiconMap: Record = { } // 定义选择图标选项列表配置 -export const MenuiconOptions = [ +export const menuiconOptions = [ { label: "无图标", value: "无图标" }, { label: "Tools(工具)", value: "Tools", icon: Tools }, { label: "List(列表)", value: "List", icon: List }, @@ -26,7 +26,7 @@ export const MenuiconOptions = [ ] //定义table配置 -export const MenuTableColumns = [ +export const menuTableColumns = [ { prop: 'name', label: '菜单名称', align: 'center' as const, width: '120px' }, { prop: 'path', label: '路由路径', align: 'center' as const, width: '120px' }, { label: '图标', slotName: 'icon', align: 'center' as const }, @@ -36,7 +36,7 @@ export const MenuTableColumns = [ ] //定义menuForm配置 -export const MenuFormItemOptions = [ +export const menuFormItemOptions = [ { prop: 'name', label: '菜单名称', type: 'input' as const,placeholder: '请输入菜单名称' }, { prop: 'parentName', label: '父级菜单', type: 'select' as const, placeholder: '请选择父级菜单' }, { prop: 'path', label: '路由路径', type: 'input' as const, placeholder: '请输入路由路径' }, diff --git a/src/views/system/menuManagement/备份.vue b/src/views/system/menuManagement/备份.vue deleted file mode 100644 index ab44094..0000000 --- a/src/views/system/menuManagement/备份.vue +++ /dev/null @@ -1,256 +0,0 @@ - - - \ No newline at end of file diff --git a/src/views/system/roleManagement/index.vue b/src/views/system/roleManagement/index.vue index 40f686c..c7b1935 100644 --- a/src/views/system/roleManagement/index.vue +++ b/src/views/system/roleManagement/index.vue @@ -1,92 +1,347 @@