Files
crawler-plugin/docs/specs/03-account-permission-pages.md

3.7 KiB

03 账号与权限页面

模块职责

覆盖首批账号与权限页面:用户管理、菜单管理、数据权限分组。负责列表、筛选、分页、编辑/新增入口、菜单树展示和分组管理入口,但权限粒度仍只到页面菜单。

依赖关系

上游:02-session-menu-permission.md 的用户和菜单状态;Java AdminUserControllerPermissionMenuController、分组相关管理接口。

下游:AdminLayout 路由;后续业务页面使用用户选择器、分组数据。

旧页面来源:

  • admin.html#panel-users
  • admin.html#panel-columns
  • admin.html#panel-group-manage
  • admin.js:loadUsersbindUserActions
  • admin.js:loadColumnsbindColumnActions
  • admin.js:loadShopManageGroupsinitShopManageGroupPanel

核心接口:原实现 → 目标实现

功能 原实现 目标实现
用户列表 Flask list_users / Java AdminUserController.listUsers UsersPage.vue 调用 GET /api/admin/users
新建用户 create_user / AdminUserController.createUser UsersPage 的 Element Plus Dialog + POST /api/admin/user
编辑用户 update_user / AdminUserController.updateUser Dialog 表单 + PUT /api/admin/user/{uid}
删除用户 delete_user / AdminUserController.deleteUser ElMessageBox 确认 + DELETE /api/admin/user/{uid}
菜单列表 admin.js:loadColumns MenusPage.vue + GET /api/admin/permission-menus?menuType=admin
菜单新增/编辑/删除 Flask/Java 菜单 CRUD Element Plus Dialog/Tree + 对应 permission-menus API
菜单排序 bindColumnDragSortpersistColumnOrder 菜单树同级排序组件 + POST /api/admin/column/reorder
用户菜单授权 旧用户编辑中的权限树 用户编辑时调用 GET/PUT /api/admin/permission-users/{uid}/column-permissions
分组列表 loadShopManageGroups GroupsPage.vue + /api/admin/shop-manage-groups

内部结构

AccountPageGroup
├── UsersPage
│   ├── UserFilterBar
│   ├── UserTable
│   ├── UserEditorDialog
│   └── UserPermissionTree
├── MenusPage
│   ├── MenuTreeTable
│   ├── MenuEditorDialog
│   └── SameLevelSortInteraction
└── GroupsPage
    ├── GroupFilter/summary
    ├── GroupTable
    └── GroupEditorDialog

页面级状态必须局部化:

  • 当前页数据。
  • 筛选条件。
  • 分页。
  • Dialog/Drawer 可见状态。
  • 表单草稿。
  • 保存中的 loading。

Pinia 不保存这些业务表格状态。

类型映射

原字段/概念 目标类型
userListBody AdminUser[]
userPagination PaginationState
columnTree AdminMenuNode[] / PermissionMenuItem[]
column_id number
created_by_id `number
role 联合字面量或后端枚举映射
grant_menu_routes number[] 的菜单 ID 授权请求

迁移/实现注意事项

  1. 用户接口分页字段要按 Java 实际 VO 归一化,不能直接假设 Flask 字段命名。
  2. 删除、创建、编辑继续保留后端权限校验;前端不添加按钮级权限体系。
  3. 菜单管理必须区分 admin 菜单和 app 菜单,默认只操作 menuType=admin
  4. 菜单分组节点不应被当作可进入页面;叶子页面才产生 Router route。
  5. 用户授权更新必须提交菜单 ID,而不是前端路由字符串,除非后端 API 明确支持 route。
  6. 菜单迁移后 column_key 保持稳定,页面 URL 通过 route_path 变化。
  7. 数据权限分组的业务 API 若仍以旧字段返回,必须在 api/groups.ts 适配为稳定的前端 DTO,禁止把兼容逻辑散落在表格模板中。