[SEN] 修复管理员登录后侧栏模块为空 #44

Closed
opened 2026-08-13 09:24:20 +08:00 by ila · 3 comments
Owner

当前状态:已完成

用户于 2026-08-14 明确验收通过。

基本信息

  • 类型:缺陷
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:主 agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 阶段:登录后导航缺陷修复

依赖与并行

  • 前置工单:#42
  • 是否允许与前置工单并行:是
  • 原因:#42 已完成实现并待验收;本缺陷在其分支上修复最新 Windows 包的菜单呈现。

子项目影响

  • 仅影响:Sense
  • 是否跨项目:否
  • 是否修改共享契约:否
  • write_paths:
    • Sense/ui/src/layout/AppLayout.vue
    • Sense/ui/src/layout/navigation.js
    • Sense/ui/tests/navigation.test.cjs
    • Sense/ui/package.json
    • docs/02-architecture-and-code-map.md(如入口说明需要,Wiki-first)
    • docs/06-troubleshooting.md(Wiki-first)
    • wiki-docs.json
    • docs/task/<本工单归档>.md
  • 本地重建但不提交:Sense/dist/sense-windows-amd64/**

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-13
  • 关键原话或脱敏摘要:“运行最新代码,进入看不到任何模块”。

要解决什么

管理员登录成功、后端返回完整权限,但前端侧栏没有任何业务模块,导致设备、视频、区域和权限页面均无法从导航进入。

只读诊断证据

  • 当前 demo 管理员登录与 /identity/me 均返回 administrator 和 9 项权限。
  • Vue Router getRoutes() 对嵌套路由返回多个 path === '/' 的规范化记录:工作台子路由可能排在父布局路由之前。
  • AppLayout.vue 使用 find(route.path === '/'),可能误选工作台记录;其 children 为 0,最终 navigation 为空。

做什么 / 不做什么

  • 做:稳定定位具有子路由的应用布局记录;将菜单派生提取为可测试函数;覆盖重复 / 记录、权限过滤、排序和路径输出;重新构建和打包。
  • 不做:不改变后端权限、角色、路由集合或菜单名称;不新增模块;不记录管理员凭据。

已确认方案

  • 菜单从 path === '/' 且确实包含 children 的布局记录派生,不依赖 getRoutes() 返回顺序。
  • 保留基于 meta.permission 的权限过滤和 meta.order 排序。
  • 若找不到布局记录,安全返回空列表,不暴露未授权路由。

验收标准

  • 管理员登录后显示工作台、设备管理、视频接入、视频服务、实时监看、区域与警戒线、用户与权限、操作记录。
  • 菜单不受重复 / 规范化路由记录顺序影响。
  • 权限不足角色仍看不到无权模块。
  • 前端 lint/build 和菜单回归测试通过。
  • Windows ZIP 重建,管理员实际登录后菜单数据非空。

验证方式

cd Sense\ui
corepack pnpm@9.15.1 test:navigation
corepack pnpm@9.15.1 lint
corepack pnpm@9.15.1 build
cd ..\..
cmd /c Sense\scripts\package-windows.bat

风险和回退

风险:错误选择布局路由可能展示不该出现的入口。通过权限过滤回归测试保护。回退:恢复 AppLayout 菜单派生实现并重新打包;不涉及数据迁移。

## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:缺陷 - 任务类型:单项目 - 主项目:Sense - 主 agent:主 agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 阶段:登录后导航缺陷修复 ## 依赖与并行 - 前置工单:#42 - 是否允许与前置工单并行:是 - 原因:#42 已完成实现并待验收;本缺陷在其分支上修复最新 Windows 包的菜单呈现。 ## 子项目影响 - 仅影响:Sense - 是否跨项目:否 - 是否修改共享契约:否 - write_paths: - `Sense/ui/src/layout/AppLayout.vue` - `Sense/ui/src/layout/navigation.js` - `Sense/ui/tests/navigation.test.cjs` - `Sense/ui/package.json` - `docs/02-architecture-and-code-map.md`(如入口说明需要,Wiki-first) - `docs/06-troubleshooting.md`(Wiki-first) - `wiki-docs.json` - `docs/task/<本工单归档>.md` - 本地重建但不提交:`Sense/dist/sense-windows-amd64/**` ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-13 - 关键原话或脱敏摘要:“运行最新代码,进入看不到任何模块”。 ## 要解决什么 管理员登录成功、后端返回完整权限,但前端侧栏没有任何业务模块,导致设备、视频、区域和权限页面均无法从导航进入。 ## 只读诊断证据 - 当前 demo 管理员登录与 `/identity/me` 均返回 `administrator` 和 9 项权限。 - Vue Router `getRoutes()` 对嵌套路由返回多个 `path === '/'` 的规范化记录:工作台子路由可能排在父布局路由之前。 - `AppLayout.vue` 使用 `find(route.path === '/')`,可能误选工作台记录;其 `children` 为 0,最终 navigation 为空。 ## 做什么 / 不做什么 - 做:稳定定位具有子路由的应用布局记录;将菜单派生提取为可测试函数;覆盖重复 `/` 记录、权限过滤、排序和路径输出;重新构建和打包。 - 不做:不改变后端权限、角色、路由集合或菜单名称;不新增模块;不记录管理员凭据。 ## 已确认方案 - 菜单从 `path === '/'` 且确实包含 children 的布局记录派生,不依赖 `getRoutes()` 返回顺序。 - 保留基于 `meta.permission` 的权限过滤和 `meta.order` 排序。 - 若找不到布局记录,安全返回空列表,不暴露未授权路由。 ## 验收标准 - [ ] 管理员登录后显示工作台、设备管理、视频接入、视频服务、实时监看、区域与警戒线、用户与权限、操作记录。 - [ ] 菜单不受重复 `/` 规范化路由记录顺序影响。 - [ ] 权限不足角色仍看不到无权模块。 - [ ] 前端 lint/build 和菜单回归测试通过。 - [ ] Windows ZIP 重建,管理员实际登录后菜单数据非空。 ## 验证方式 ```powershell cd Sense\ui corepack pnpm@9.15.1 test:navigation corepack pnpm@9.15.1 lint corepack pnpm@9.15.1 build cd ..\.. cmd /c Sense\scripts\package-windows.bat ``` ## 风险和回退 风险:错误选择布局路由可能展示不该出现的入口。通过权限过滤回归测试保护。回退:恢复 AppLayout 菜单派生实现并重新打包;不涉及数据迁移。
ila added the kind/taskproject/sensescope/independentpriority/p0area/ux labels 2026-08-13 09:24:20 +08:00
Author
Owner

状态:进行中(2026-08-13)nn根因已定位:Vue Router 规范化后存在多个 path === "/" 记录,原实现用首个记录派生菜单,实际选到无 children 的工作台记录。管理员后端会话为 administrator 且含 9 项权限,身份与 RBAC 正常。已改为选择具有 children 的布局记录,并新增重复根路径、权限过滤和隐藏入口回归测试。

## 状态:进行中(2026-08-13)`n`n根因已定位:Vue Router 规范化后存在多个 `path === "/"` 记录,原实现用首个记录派生菜单,实际选到无 children 的工作台记录。管理员后端会话为 administrator 且含 9 项权限,身份与 RBAC 正常。已改为选择具有 children 的布局记录,并新增重复根路径、权限过滤和隐藏入口回归测试。
Author
Owner

状态:待验收

  • 实现提交:048a6ec
  • 文档提交:62ed5cc
  • 回归测试提交:c4a799c
  • 归档登记提交:21624f6
  • 最终归档提交:5e5aa48
  • Pull Request:#45(堆叠于 #43)
  • Wiki revision:9647fffe7d8b

根因、修复和验证证据已归档。管理员菜单回归 3 项通过,覆盖预期八项模块;运行中的新包返回 administrator 与 9 项权限,并引用新前端脚本。ZIP SHA-256 0703B397D20EAAE54BCB6B5A83170EFF6816246A8C163276495CD93EEEB72B4F。

未验证部分:未用自动化真实浏览器断言侧栏 DOM;等待用户 Ctrl+F5 后人工确认。工单保持 open。

## 状态:待验收 - 实现提交:`048a6ec` - 文档提交:`62ed5cc` - 回归测试提交:`c4a799c` - 归档登记提交:`21624f6` - 最终归档提交:`5e5aa48` - Pull Request:https://git.ilapage.cn/ila/yovision/pulls/45(堆叠于 #43) - Wiki revision:`9647fffe7d8b` 根因、修复和验证证据已归档。管理员菜单回归 3 项通过,覆盖预期八项模块;运行中的新包返回 administrator 与 9 项权限,并引用新前端脚本。ZIP SHA-256 `0703B397D20EAAE54BCB6B5A83170EFF6816246A8C163276495CD93EEEB72B4F`。 **未验证部分**:未用自动化真实浏览器断言侧栏 DOM;等待用户 Ctrl+F5 后人工确认。工单保持 open。
Author
Owner

用户验收通过(2026-08-14)

用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision 3cf2036d04b8)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 explore 追溯。

此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 dev 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。

## 用户验收通过(2026-08-14) 用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision `3cf2036d04b8`)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 `explore` 追溯。 此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 `dev` 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。
ila closed this issue 2026-08-14 10:06:49 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#44