## Why 当前登录接口只返回扁平的权限码列表 `permissions: []`,前端需要额外处理才能渲染侧边栏菜单(需要树形结构)和控制按钮显示(需要按钮权限列表)。这导致前端需要额外请求菜单接口或在本地维护菜单配置,增加了复杂度和请求次数。通过在登录时直接返回分类好的菜单树和按钮权限,前端可以一次性获取所有必要数据并存储到 localStorage,无需二次请求,简化前端实现并提升用户体验。 ## What Changes - 在 `LoginResponse` DTO 中新增两个字段: - `menus: []MenuNode` - 菜单树(树形结构) - `buttons: []string` - 按钮权限码列表(扁平) - 新增 `MenuNode` DTO 结构体,包含 `id`, `perm_code`, `name`, `url`, `sort`, `children` 字段 - 修改 `auth.Service.Login()` 方法,新增权限分类逻辑: - 基于 `perm_type` 字段分类(1=菜单权限,2=按钮权限) - 根据 `device` 参数过滤平台(`platform=web/h5/all`) - 构建菜单树(基于 `parent_id` 字段的递归结构) - 超级管理员返回所有菜单和按钮 - 保留原有 `permissions` 字段(向后兼容,包含所有权限码) - `GetMe` 接口保持不变(不返回菜单,避免频繁查询) ## Capabilities ### New Capabilities - `login-menu-button-response`: 登录接口返回菜单树和按钮权限,支持前端直接使用无需二次处理 ### Modified Capabilities (无现有能力被修改,这是新增功能) ## Impact **修改的文件**: - `internal/model/dto/auth_dto.go` - 新增 MenuNode 结构体,修改 LoginResponse 结构体 - `internal/service/auth/service.go` - 修改 Login() 方法,新增权限分类和菜单树构建逻辑 **API 变更**(向后兼容): - `POST /api/admin/login` - 响应体增加 `menus` 和 `buttons` 字段 - `POST /api/h5/login` - 响应体增加 `menus` 和 `buttons` 字段 - `GET /api/admin/me` - 保持不变(不返回菜单) - `GET /api/h5/me` - 保持不变(不返回菜单) **数据库影响**: - 无需修改数据库 schema(复用现有 `tb_permission` 表的 `perm_type`, `parent_id`, `platform` 字段) **前端影响**: - 可选升级:前端可以选择使用新的 `menus` 和 `buttons` 字段,也可以继续使用 `permissions` 字段(向后兼容) - 推荐使用方式:登录后将 `menus` 和 `buttons` 存储到 localStorage,页面刷新时从本地读取 **性能影响**: - 登录响应体增大(预计增加 5-10KB,取决于权限数量) - 菜单树构建计算量增加(O(n) 复杂度,n 为权限数量,通常 < 100) - 不影响 GetMe 接口性能(未修改)