diff --git a/apps/web-antd/src/api/core/permission.ts b/apps/web-antd/src/api/core/permission.ts new file mode 100644 index 0000000..7ffba84 --- /dev/null +++ b/apps/web-antd/src/api/core/permission.ts @@ -0,0 +1,211 @@ +import { requestClient } from '#/api/request'; + +export namespace PermissionApi { + // ─── 用户组 ─────────────────────────────────────────────── + export interface UserGroup { + id?: number; + group_code: string; + group_name: string; + status: number; + remark?: string; + createTime?: number; + updateTime?: number; + } + + export interface UserGroupListParams { + page?: number; + pageSize?: number; + group_code?: string; + group_name?: string; + } + + // ─── 角色(权限组)──────────────────────────────────────── + export interface Role { + id?: number; + role_code: string; + role_name: string; + status: number; + is_system?: number; + remark?: string; + createTime?: number; + updateTime?: number; + } + + export interface RoleListParams { + page?: number; + pageSize?: number; + role_code?: string; + role_name?: string; + } + + // ─── 单点权限 ───────────────────────────────────────────── + export interface Permission { + id?: number; + permission_code: string; + permission_name: string; + permission_group?: string; + api_path?: string; + http_method?: string; + status: number; + remark?: string; + createTime?: number; + updateTime?: number; + } + + export interface PermissionListParams { + page?: number; + pageSize?: number; + permission_code?: string; + permission_name?: string; + permission_group?: string; + } + + // ─── 关联关系 ───────────────────────────────────────────── + export interface GroupRoleRelItem { + group_id: number; + role_id: number; + } + + export interface RolePermissionRelItem { + role_id: number; + permission_id: number; + } + + // ─── 用户权限分配 ────────────────────────────────────────── + export interface UserGroupRelItem { + admin_id: number; + group_id: number; + } + + export interface UserGroupsAssignParams { + admin_id: number; + group_ids: number[]; + } + + export interface UserGroupsOfUser { + admin_id: number; + groups: UserGroup[]; + } + + // 用户直接单点权限(admin_user_permission_rel) + export interface UserPermissionItem { + permission_id: number; + grant_type: 1 | 2; // 1=允许 2=拒绝 + } + + export interface UserPermissionsAssignParams { + admin_id: number; + permissions: UserPermissionItem[]; + } + + // ─── 通用分页响应 ───────────────────────────────────────── + export interface PageResult { + items: T[]; + total: number; + } +} + +// ═══ 用户组 API ════════════════════════════════════════════ + +export async function getUserGroupListApi(params: PermissionApi.UserGroupListParams) { + return requestClient.post>( + '/admin/usergroup/list', + params, + ); +} + +export async function addUserGroupApi(params: PermissionApi.UserGroup) { + return requestClient.post('/admin/usergroup/add', params); +} + +export async function editUserGroupApi(params: PermissionApi.UserGroup) { + return requestClient.post('/admin/usergroup/edit', params); +} + +export async function deleteUserGroupApi(id: number) { + return requestClient.post('/admin/usergroup/delete', { id }); +} + +// ═══ 角色(权限组)API ══════════════════════════════════════ + +export async function getRoleListApi(params: PermissionApi.RoleListParams) { + return requestClient.post>( + '/admin/role/list', + params, + ); +} + +export async function addRoleApi(params: PermissionApi.Role) { + return requestClient.post('/admin/role/add', params); +} + +export async function editRoleApi(params: PermissionApi.Role) { + return requestClient.post('/admin/role/edit', params); +} + +export async function deleteRoleApi(id: number) { + return requestClient.post('/admin/role/delete', { id }); +} + +// 用户组绑定角色 +export async function setGroupRolesApi(params: { group_id: number; role_ids: number[] }) { + return requestClient.post('/admin/usergroup/role/set', params); +} + +export async function getGroupRolesApi(group_id: number) { + return requestClient.post('/admin/usergroup/role/list', { group_id }); +} + +// 角色绑定权限 +export async function setRolePermissionsApi(params: { role_id: number; permission_ids: number[] }) { + return requestClient.post('/admin/role/permission/set', params); +} + +export async function getRolePermissionsApi(role_id: number) { + return requestClient.post('/admin/role/permission/list', { role_id }); +} + +// ═══ 单点权限 API ═══════════════════════════════════════════ + +export async function getPermissionListApi(params: PermissionApi.PermissionListParams) { + return requestClient.post>( + '/admin/permission/list', + params, + ); +} + +export async function addPermissionApi(params: PermissionApi.Permission) { + return requestClient.post('/admin/permission/add', params); +} + +export async function editPermissionApi(params: PermissionApi.Permission) { + return requestClient.post('/admin/permission/edit', params); +} + +export async function deletePermissionApi(id: number) { + return requestClient.post('/admin/permission/delete', { id }); +} + +// ═══ 用户权限分配 API ═══════════════════════════════════════ + +export async function getUserGroupsApi(admin_id: number) { + return requestClient.post('/admin/user/group/list', { admin_id }); +} + +export async function setUserGroupsApi(params: PermissionApi.UserGroupsAssignParams) { + return requestClient.post('/admin/user/group/set', params); +} + +// 用户直接单点权限 +export async function getUserPermissionsDirectApi(admin_id: number) { + return requestClient.post('/admin/user/permission/list', { admin_id }); +} + +export async function setUserPermissionsDirectApi(params: PermissionApi.UserPermissionsAssignParams) { + return requestClient.post('/admin/user/permission/set', params); +} + +// 获取用户通过用户组继承的角色列表 +export async function getUserRolesApi(admin_id: number) { + return requestClient.post('/admin/user/role/list', { admin_id }); +} diff --git a/apps/web-antd/src/locales/langs/en-US/page.json b/apps/web-antd/src/locales/langs/en-US/page.json index 6282038..17ec06e 100644 --- a/apps/web-antd/src/locales/langs/en-US/page.json +++ b/apps/web-antd/src/locales/langs/en-US/page.json @@ -30,7 +30,14 @@ "title": "Admin", "user": "User", "setting": "Setting", - "log": "Log" + "log": "Log", + "config": "Config", + "permission": { + "userGroup": "User Groups", + "role": "Roles", + "permission": "Permissions", + "userAssign": "User Assignment" + } }, "dashboard": { "title": "Dashboard", diff --git a/apps/web-antd/src/locales/langs/zh-CN/page.json b/apps/web-antd/src/locales/langs/zh-CN/page.json index a49fcd9..db9e6b4 100644 --- a/apps/web-antd/src/locales/langs/zh-CN/page.json +++ b/apps/web-antd/src/locales/langs/zh-CN/page.json @@ -31,7 +31,13 @@ "user": "用户管理", "setting": "系统设置", "log": "操作日志", - "config": "配置管理" + "config": "配置管理", + "permission": { + "userGroup": "用户组管理", + "role": "权限组管理", + "permission": "单点权限管理", + "userAssign": "用户权限分配" + } }, "dashboard": { "title": "运维管理", diff --git a/apps/web-antd/src/model/admin.user.ts b/apps/web-antd/src/model/admin.user.ts index 3190c39..7b82c6b 100644 --- a/apps/web-antd/src/model/admin.user.ts +++ b/apps/web-antd/src/model/admin.user.ts @@ -1,4 +1,5 @@ export interface UserInfo { + id?: number; username: string; password?: string; phone: string; diff --git a/apps/web-antd/src/router/routes/modules/admin.ts b/apps/web-antd/src/router/routes/modules/admin.ts index 4bc223b..5bb1fec 100644 --- a/apps/web-antd/src/router/routes/modules/admin.ts +++ b/apps/web-antd/src/router/routes/modules/admin.ts @@ -48,6 +48,50 @@ const routes: RouteRecordRaw[] = [ title: $t('page.admin.config'), }, }, + { + name: 'PermissionUserGroup', + path: '/permission/user-group', + component: () => import('#/views/admin/permission/user-group.vue'), + meta: { + authority: ['super'], + affixTab: false, + icon: 'material-symbols:group', + title: $t('page.admin.permission.userGroup'), + }, + }, + { + name: 'PermissionRole', + path: '/permission/role', + component: () => import('#/views/admin/permission/role.vue'), + meta: { + authority: ['super'], + affixTab: false, + icon: 'material-symbols:shield-person', + title: $t('page.admin.permission.role'), + }, + }, + { + name: 'PermissionItem', + path: '/permission/permission', + component: () => import('#/views/admin/permission/permission.vue'), + meta: { + authority: ['super'], + affixTab: false, + icon: 'material-symbols:key', + title: $t('page.admin.permission.permission'), + }, + }, + { + name: 'PermissionUserAssign', + path: '/permission/user-assign', + component: () => import('#/views/admin/permission/user-assign.vue'), + meta: { + authority: ['super'], + affixTab: false, + icon: 'material-symbols:manage-accounts', + title: $t('page.admin.permission.userAssign'), + }, + }, ], }, ]; diff --git a/apps/web-antd/src/views/admin/permission/permission.vue b/apps/web-antd/src/views/admin/permission/permission.vue new file mode 100644 index 0000000..665fe76 --- /dev/null +++ b/apps/web-antd/src/views/admin/permission/permission.vue @@ -0,0 +1,228 @@ + + + diff --git a/apps/web-antd/src/views/admin/permission/role.vue b/apps/web-antd/src/views/admin/permission/role.vue new file mode 100644 index 0000000..37e41dd --- /dev/null +++ b/apps/web-antd/src/views/admin/permission/role.vue @@ -0,0 +1,224 @@ + + +