# 后台管理系统 Bug 清单

> 更新时间：2026-01-05
> 涉及模块：角色管理、部门管理、管理员管理
> 状态：✅ 已全部修复

---

## 一、后端 API 缺失问题

### BUG-001：部门菜单获取接口缺失 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：部门管理
- **问题描述**：前端调用 `GET /api/admin/departments/{id}/menus` 获取部门已分配的菜单，但后端没有实现该接口
- **修复内容**：
  1. 在 `IDepartmentService` 添加 `GetMenuIdsAsync(long departmentId)` 方法
  2. 在 `DepartmentService` 实现该方法
  3. 在 `DepartmentController` 添加 `[HttpGet("{id:long}/menus")]` 接口

---

## 二、前后端字段不匹配问题

### BUG-002：管理员查询参数不匹配 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：管理员管理
- **问题描述**：前端使用 `keyword` 字段进行模糊搜索，后端期望 `Username`、`RealName`、`Phone` 分开的字段
- **修复内容**：
  1. 在 `AdminUserQueryRequest` 添加 `Keyword` 字段，移除 `Username`、`RealName`、`Phone`
  2. 在 `AdminUserService.GetListAsync` 实现对用户名、姓名、手机号的模糊搜索

### BUG-003：管理员列表角色字段格式不匹配 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：管理员管理
- **问题描述**：前端期望 `roles` 是对象数组，后端返回的是两个独立数组
- **修复内容**：
  1. 在 `AdminUserDto` 添加 `Roles` 属性（`List<AdminUserRoleDto>`）
  2. 添加 `AdminUserRoleDto` 类（包含 Id 和 Name）
  3. 在 `AdminUserService` 中填充 `Roles` 属性

### BUG-004：管理员列表时间字段名不匹配 ✅ 已修复
- **严重程度**：🟡 中
- **模块**：管理员管理
- **问题描述**：前端期望 `lastLoginAt`，后端返回 `LastLoginTime`
- **修复内容**：
  1. 前端 `adminUser.ts` 接口定义 `lastLoginAt` → `lastLoginTime`
  2. 前端 `user/index.vue` 表格列绑定 `lastLoginAt` → `lastLoginTime`

---

## 三、功能逻辑问题

### BUG-005：权限编码不匹配导致按钮不显示 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：角色管理、部门管理、管理员管理
- **问题描述**：多个页面的操作按钮因权限编码不匹配而不显示（前端用连字符，后端用下划线）
- **修复内容**：前端统一改为下划线格式
  - `role/index.vue`: `role:assign-menu` → `role:assign_menu`, `role:assign-permission` → `role:assign_permission`
  - `department/index.vue`: `department:assign-menu` → `department:assign_menu`
  - `user/index.vue`: `user:assign-role` → `user:assign_role`, `user:assign-department` → `user:assign_department`, `user:assign-menu` → `user:assign_menu`, `user:reset-password` → `user:reset_password`

### BUG-006：管理员专属菜单权限未定义 ✅ 已修复
- **严重程度**：🟡 中
- **模块**：管理员管理
- **问题描述**：前端使用 `user:assign_menu` 权限控制"专属菜单"按钮，但后端 DataSeeder 中没有初始化该权限
- **修复内容**：在 `DataSeeder.cs` 中添加权限 `user:assign_menu`

### BUG-007：部门管理 - 分配菜单功能异常 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：部门管理
- **问题描述**：同 BUG-001，由于后端接口缺失，无法获取部门已分配的菜单
- **修复内容**：见 BUG-001

### BUG-008：管理员管理 - 无法查看用户详情 ✅ 已修复
- **严重程度**：🟡 中
- **模块**：管理员管理
- **问题描述**：列表页面无法直观看到用户的角色、部门信息
- **修复内容**：依赖 BUG-003 修复

---

## 四、数据展示问题

### BUG-009：管理员列表 - 角色标签不显示 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：管理员管理
- **问题描述**：角色列的 `el-tag` 无法正确渲染
- **修复内容**：见 BUG-003

### BUG-010：管理员列表 - 部门名称可能为空 ✅ 已确认正常
- **严重程度**：🟡 中
- **模块**：管理员管理
- **问题描述**：部门列可能显示为空
- **确认结果**：后端 `AdminUserService` 已正确 Include Department 并填充 `DepartmentName`

### BUG-011：管理员列表 - 表头与数据列错位 ✅ 已修复
- **严重程度**：🔴 高
- **模块**：管理员管理
- **问题描述**：表格表头和实际内容对应不上
- **修复内容**：依赖 BUG-003、BUG-004 修复

### BUG-012：管理员表单 - 邮箱不应该是必填项 ✅ 已确认正常
- **严重程度**：🟢 低
- **模块**：管理员管理
- **问题描述**：新增/编辑管理员时，邮箱字段不应该是必填的
- **确认结果**：前端 `formRules` 中 `email` 字段只有格式验证，没有 `required: true`

### BUG-013：部门表单 - 新增时残留上次数据 ✅ 已修复
- **严重程度**：🟡 中
- **模块**：部门管理
- **问题描述**：点击"新增部门"按钮时，表单中会显示上一次新增/编辑的数据
- **修复内容**：在 `el-dialog` 添加 `:destroy-on-close="true"` 属性

---

## 五、修复清单

### 后端修改 ✅

1. ✅ **DepartmentController.cs** - 添加获取部门菜单接口 `GET /{id}/menus`
2. ✅ **IDepartmentService.cs** - 添加 `GetMenuIdsAsync` 方法声明
3. ✅ **DepartmentService.cs** - 实现 `GetMenuIdsAsync` 方法
4. ✅ **AdminUserQueryRequest.cs** - 添加 `Keyword` 字段，移除分开的字段
5. ✅ **AdminUserService.cs** - 修改查询逻辑支持 `Keyword` 模糊搜索
6. ✅ **AdminUserDto.cs** - 添加 `Roles` 属性和 `AdminUserRoleDto` 类
7. ✅ **AdminUserService.cs** - 修改映射逻辑填充 `Roles`
8. ✅ **DataSeeder.cs** - 添加 `user:assign_menu` 权限

### 前端修改 ✅

1. ✅ **role/index.vue** - 权限编码改为下划线格式
2. ✅ **department/index.vue** - 权限编码改为下划线格式，添加 `destroy-on-close`
3. ✅ **user/index.vue** - 权限编码改为下划线格式，时间字段名修改
4. ✅ **adminUser.ts** - 修改 `AdminUser` 接口，`lastLoginAt` → `lastLoginTime`

---

## 六、测试验证

修复完成后需要验证：

- [ ] 角色管理 - 分配菜单能正确加载已勾选项
- [ ] 角色管理 - 分配菜单能正确保存
- [ ] 角色管理 - 分配权限能正确加载和保存
- [ ] 部门管理 - 分配菜单能正确加载已勾选项
- [ ] 部门管理 - 分配菜单能正确保存
- [ ] 管理员管理 - 列表搜索功能正常
- [ ] 管理员管理 - 角色列正确显示
- [ ] 管理员管理 - 部门列正确显示
- [ ] 管理员管理 - 最后登录时间正确显示
- [ ] 管理员管理 - 分配角色能正确加载和保存
- [ ] 管理员管理 - 分配部门能正确加载和保存
- [ ] 管理员管理 - 分配专属菜单能正确加载和保存
- [ ] 新增管理员功能正常
- [ ] 编辑管理员功能正常
