# Tasks - 系统管理与认证授权模块对齐新设计 ## 阶段一:数据库与基础配置 - [x] Task 1: 切换数据库引擎为 PostgreSQL - [x] 在 server/package.json 安装 `pg`、`pg-hstore` 依赖 - [x] 修改 server/src/config/config.default.ts:sequelize dialect 改为 `postgres`,host/port(5432)/database(xintong)/username/password 环境变量(默认 postgres) - [x] 检查 config.local.ts 的 sync 配置合理性(表由 SQL 脚本创建,保持 sync: false 或按需调整) - [x] 验证:yarn build 通过,服务可连接 PostgreSQL - [x] Task 2: 补充 database/db_init.sql 初始数据 - [x] 补充 sys_menu 系统管理目录下的 5 个子菜单(用户管理/角色管理/菜单管理/数据字典/操作日志,含 menu_path/component/permission/sort_order) - [x] 补充 sys_user:admin/admin123456(用 Node bcryptjs 生成 hash 填入 password_hash,real_name=运营管理员) - [x] 补充 sys_user_role:admin → ADMIN 角色 - [x] 补充 sys_role_menu:ADMIN 绑定全部菜单;SALESMAN 绑定客户/项目/统计报表等业务菜单 - [x] 验证:在 PostgreSQL 中执行脚本无报错,各表初始数据条数正确 ## 阶段二:后端重构 - [x] Task 3: 重构系统域实体层(7 个实体) - [x] 新建 sysUser.entity.ts(sys_user:username/password_hash/real_name/phone/email/status/last_login_at) - [x] 新建 sysRole.entity.ts(sys_role:role_code/role_name/description/sort_order) - [x] 新建 sysUserRole.entity.ts(sys_user_role) - [x] 新建 sysMenu.entity.ts(sys_menu:parent_id/menu_name/menu_path/component/icon/sort_order/menu_type/permission/visible) - [x] 新建 sysRoleMenu.entity.ts(sys_role_menu) - [x] 新建 sysDict.entity.ts(sys_dict:dict_type/dict_label/dict_value/sort_order/status) - [x] 新建 sysOperationLog.entity.ts(sys_operation_log:user_id/module/action/method/params/ip/created_at) - [x] 删除旧实体 user/role/userRole/permission/rolePermission/operationLog 的 .entity.ts 文件 - [x] 验证:yarn build 通过 - [x] Task 4: 重构认证与 RBAC - [x] auth.service.ts:登录校验 sys_user.password_hash,更新 last_login_at;返回 accessToken/refreshToken/userInfo(id/username/realName)/roles(role_code 数组)/menus(菜单树) - [x] auth.controller.ts:登录/刷新/登出/当前用户接口适配 - [x] 新增菜单查询能力:permission.service(或新 menu.service)提供 getUserMenus(userId)(角色经 sys_role_menu 关联 sys_menu 的树)与 checkUserPermission(userId, code) - [x] rbac.middleware.ts:路径→权限标识映射改为基于 sys_menu.permission;ADMIN 角色放行;未授权返回 403 - [x] 验证:admin 登录返回 menus;无权限角色访问受保护接口返回 403 - [x] Task 5: 重构用户管理 - [x] user.service.ts:字段适配 real_name/phone/email(删除 nickname/avatar/last_login_ip),搜索条件更新,返回数据剔除 password_hash - [x] user.controller.ts:接口保持不变,入参字段对齐 - [x] dto/user.dto.ts:字段更新(realName/phone/email/roleIds) - [x] 验证:用户 CRUD 与角色分配联调通过 - [x] Task 6: 重构角色管理 - [x] role.service.ts:字段适配 role_code/role_name/sort_order(删除 status);权限接口改为菜单(getRoleMenus 返回角色已勾选菜单树、updateRoleMenus 批量写 sys_role_menu) - [x] role.controller.ts:权限相关接口改为 `/roles/:id/menus` - [x] dto/role.dto.ts:字段更新 - [x] 验证:角色列表、菜单勾选保存联调通过 - [x] Task 7: 新增菜单管理模块 - [x] 新建 menu.controller.ts + menu.service.ts:菜单树查询(含全部菜单供角色配置)、创建/编辑/删除目录或菜单、排序与可见性维护 - [x] 新建 dto/menu.dto.ts - [x] 验证:菜单树 CRUD 联调通过 - [x] Task 8: 新增数据字典模块 - [x] 新建 dict.controller.ts + dict.service.ts:分页列表、按 dict_type 分组查询、创建/编辑/删除 - [x] 新建 dto/dict.dto.ts - [x] 验证:字典 CRUD 与类型筛选联调通过 - [x] Task 9: 重构操作日志模块 - [x] log.service.ts / log.controller.ts:字段对齐(user_id/module/action/method/params/ip),查询支持按 user/module/时间范围筛选 - [x] log.middleware.ts:按新字段写入(params 存请求体),移除 url/user_agent/status_code/duration/error_message - [x] 验证:写操作自动记录日志,查询接口正常 - [x] Task 10: 移除系统设置模块 - [x] 删除 system.controller.ts / system.service.ts - [x] 清理 rbac/log 中间件及配置中 settings 相关映射 - [x] 验证:yarn build 通过,无残留引用 ## 阶段三:前端重构 - [x] Task 11: 前端 API 层适配 - [x] api/auth.ts:登录/当前用户返回类型更新(userInfo.realName、roles、menus) - [x] api/user.ts:字段更新(realName/phone/email) - [x] api/role.ts:角色字段更新;权限接口改为菜单接口(getRoleMenus/updateRoleMenus) - [x] 新增 api/menu.ts、api/dict.ts - [x] 删除 api/system.ts - [x] api/log.ts:字段与筛选参数更新 - [x] Task 12: 前端权限 Store 与动态路由 - [x] stores/permission.ts:UserInfo 更新(id/username/realName/roles/menus),提供 menus 状态 - [x] router/index.ts:移除 settings 路由;基于用户 menus 注册动态路由(menu_path→component 映射,缺失组件渲染"功能开发中"占位页);登录跳转仪表盘 - [x] layouts/index.vue:侧边栏菜单由 menus 动态渲染(目录→子菜单两级 + 图标),移除静态菜单与设置分组;用户名显示 realName - [x] 移除 v-permission 指令(directives/permission.ts)及引用 - [x] 验证:admin 登录后侧边栏显示全部菜单,业务占位页可访问 - [x] Task 13: 前端页面适配 - [x] views/system/user/index.vue:字段改为 realName/phone/email - [x] views/system/role/index.vue:权限配置弹窗改为菜单树勾选 - [x] 新增 views/system/menu/index.vue(树形表格 CRUD) - [x] 新增 views/system/dict/index.vue(列表 + 类型筛选 CRUD) - [x] views/log/operation.vue:字段与筛选更新 - [x] 删除 views/settings/basic.vue、views/settings/security.vue - [x] 验证:各页面构建通过、交互正常 ## 阶段四:联调与验证 - [ ] Task 14: 全流程联调 - [ ] 前端 yarn dev + 后端服务 + PostgreSQL 环境启动 - [ ] admin 登录 → 仪表盘 → 系统管理(用户/角色/菜单/字典/日志)全流程走通 - [ ] 业务员角色仅见授权菜单,未授权接口 403 - [ ] 日志自动记录写操作并可查询 - [ ] 边界检查:无菜单角色登录、删除被占用角色、重复用户名/角色编码 ## Task Dependencies - [Task 2] depends on [Task 1](PG 环境就绪后可执行 SQL) - [Task 3] 先行;[Task 4-10] depends on [Task 3](实体) - [Task 11] depends on [Task 5-9](接口就绪) - [Task 12] depends on [Task 11](API 类型) - [Task 13] depends on [Task 11] - [Task 14] depends on [Task 4-13]