Files
crawler-plugin/docs/specs/01-admin-shell-routing.md
T

3.1 KiB
Raw Blame History

01 后台前端壳层与路由

模块职责

提供所有后台页面共用的应用外壳,不承载业务列表和业务请求。负责侧边栏、顶栏、内容区、页面标题、全局错误展示、退出登录入口,以及 Vue Router 的页面容器。

依赖关系

上游:02-session-menu-permission.md 提供用户和菜单状态;10-static-deployment-and-nginx.md 提供 /admin-vue/ 基准路径和 History fallback。

下游:所有业务页面挂载到 AdminLayoutRouterViewPinia Session Store 提供菜单树和用户信息。

现有依赖:

  • backend/web_source/admin.html.admin-layout.admin-sidebar.admin-topbar.admin-content
  • backend/static/admin-interactions.js 的 loading、toast、confirm 横切行为。
  • 当前独立工程的 admin-frontend-vue/src/layout/AdminLayout.vuesrc/router/index.tssrc/styles/main.css

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

原实现 目标实现
admin.html 内嵌完整布局 AdminLayout.vue + 子组件
admin.js:activateAdminTab 通过 DOM 隐藏/显示面板 Vue Router 路由切换
admin.js:syncTabHash 使用 #tab History URL,如 /admin-vue/account/users
admin-interactions.js:showToast Element Plus ElMessage
admin-interactions.js:openConfirm Element Plus ElMessageBox
页面标题写死并由 DOM 更新 路由 meta.title 驱动

内部结构

AdminLayout
├── AdminSidebar
│   ├── 菜单分组
│   └── 菜单页面项
├── AdminTopbar
│   ├── 当前页面标题
│   ├── 当前用户名/角色
│   └── 退出登录
├── AdminContent
│   ├── 全局错误提示
│   └── RouterView
└── 全局 Element Plus 消息/确认能力

路由结构按业务域组织:

  • account/*
  • asin-center/*
  • shop-center/*
  • tasks/*
  • records/*

路由 path 不承担权限标识,权限判断使用路由元数据中的 menuKey 与后端菜单节点 key 对比。

类型映射

旧概念 目标类型
data-tab Vue route path
route_path 后端菜单 route
adminPageTitle RouteMeta.title
adminMenu DOM AdminMenuNode[]
adminCurrentUsername AdminUser.username
adminCurrentUserRole AdminUser.role

AdminMenuNode 至少包含 keyname、可选 route、可选 children

迁移/实现注意事项

  1. createWebHistory('/admin-vue/') 的基准路径必须和 Vite base、Nginx location 完全一致。
  2. 不实现旧 #tab=xxx 兼容;旧地址不属于目标契约。
  3. 不能把所有业务页面静态 import 到壳层;页面必须按路由异步加载。
  4. 侧边栏只渲染后端返回的菜单树,不根据角色在前端硬编码一份权限菜单。
  5. 页面级无权限时跳转到当前用户第一个可见页面;没有任何页面时展示无菜单状态。
  6. 视觉保持深色侧边栏、浅色内容区,但不得把旧 CSS 2.5 万行整体搬运进新工程。
  7. 全局 loading 只用于请求生命周期提示;业务页面仍需拥有自己的表格 loading 和空状态。