From e0a9402efd051e7fca8b1ddb11d2b499b0619c51 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 3 Jan 2026 10:13:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E8=BA=AB=E4=BB=BD=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 数据库添加is_admin字段和索引 - User实体类添加isAdmin字段 - 后端添加setAdmin API(UserController和UserService) - 前端用户管理界面添加管理员标识列 - 添加设置/取消管理员按钮及功能 - 用户管理表格显示管理员标识(红色标签) --- .../designhub/controller/UserController.java | 11 +++++++ .../main/java/com/designhub/entity/User.java | 5 +++ .../com/designhub/service/UserService.java | 23 +++++++++++++ database/add_is_admin_field.sql | 11 +++++++ frontend/src/api/user.ts | 9 ++++++ frontend/src/views/Settings.vue | 32 ++++++++++++++++++- 6 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 database/add_is_admin_field.sql diff --git a/backend/src/main/java/com/designhub/controller/UserController.java b/backend/src/main/java/com/designhub/controller/UserController.java index e4909c4..cbaae20 100644 --- a/backend/src/main/java/com/designhub/controller/UserController.java +++ b/backend/src/main/java/com/designhub/controller/UserController.java @@ -134,5 +134,16 @@ public class UserController { log.info("获取设计师列表及工作量: deptId={}", deptId); return Result.success(userService.getDesignersWithWorkload(deptId)); } + + @Operation(summary = "设置/取消管理员", description = "设置或取消用户的管理员身份") + @PutMapping("/{id}/admin") + public Result setAdmin( + @PathVariable Long id, + @RequestBody Map params + ) { + Integer isAdmin = params.get("isAdmin"); + log.info("设置用户管理员身份: userId={}, isAdmin={}", id, isAdmin); + return Result.success(userService.setAdmin(id, isAdmin)); + } } diff --git a/backend/src/main/java/com/designhub/entity/User.java b/backend/src/main/java/com/designhub/entity/User.java index 8bc35e6..39a8781 100644 --- a/backend/src/main/java/com/designhub/entity/User.java +++ b/backend/src/main/java/com/designhub/entity/User.java @@ -75,6 +75,11 @@ public class User implements Serializable { */ private Integer status; + /** + * 是否管理员:0-否 1-是 + */ + private Integer isAdmin; + /** * 用户积分 */ diff --git a/backend/src/main/java/com/designhub/service/UserService.java b/backend/src/main/java/com/designhub/service/UserService.java index 33e2eda..549f75b 100644 --- a/backend/src/main/java/com/designhub/service/UserService.java +++ b/backend/src/main/java/com/designhub/service/UserService.java @@ -1262,4 +1262,27 @@ public class UserService { log.info("查询到{}个设计师", result.size()); return result; } + + /** + * 设置/取消管理员 + */ + @Transactional(rollbackFor = Exception.class) + public boolean setAdmin(Long userId, Integer isAdmin) { + log.info("设置用户管理员身份: userId={}, isAdmin={}", userId, isAdmin); + + User user = getUserById(userId); + if (user == null) { + throw new BusinessException("用户不存在"); + } + + // 更新管理员标识 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(User::getId, userId); + updateWrapper.set(User::getIsAdmin, isAdmin != null ? isAdmin : 0); + + boolean result = userMapper.update(null, updateWrapper) > 0; + log.info("设置管理员身份结果: userId={}, isAdmin={}, result={}", userId, isAdmin, result); + + return result; + } } diff --git a/database/add_is_admin_field.sql b/database/add_is_admin_field.sql new file mode 100644 index 0000000..92a36ca --- /dev/null +++ b/database/add_is_admin_field.sql @@ -0,0 +1,11 @@ +-- 为 sys_user 表添加 is_admin 字段 +-- 作者:系统 +-- 日期:2026-01-03 +-- 说明:添加管理员标识字段,用于标识用户是否具有管理员权限 + +ALTER TABLE `sys_user` +ADD COLUMN `is_admin` TINYINT DEFAULT 0 COMMENT '是否管理员:0-否 1-是' AFTER `status`; + +-- 更新索引以提高查询性能 +CREATE INDEX `idx_is_admin` ON `sys_user` (`is_admin`); + diff --git a/frontend/src/api/user.ts b/frontend/src/api/user.ts index 1e63c06..0fd4334 100644 --- a/frontend/src/api/user.ts +++ b/frontend/src/api/user.ts @@ -10,6 +10,7 @@ export interface User { deptId?: number; deptName?: string; status?: number; + isAdmin?: number; // 是否管理员:0-否 1-是 avatar?: string; createTime?: string; updateTime?: string; @@ -161,3 +162,11 @@ export const getDesignersWithWorkload = async (deptId?: number): Promise => { + const response = await request.put(`/users/${id}/admin`, { isAdmin }); + return response.data; +}; + diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index ac9fae8..7c7256b 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -348,6 +348,14 @@ 未分配 + +