Lesson 06 · 路由与窗口

路由、菜单、守卫与多窗口

「为什么我进不去这个页面」「为什么点了弹确认框」——答案都在这一课。

📋 这一课还没写正文,这是大纲

课 01–04 已经出正文,够你把项目跑起来、看懂一次请求、看懂页面和状态。 05–09 属于「能独立干活」阶段,需要能实际操作多窗口场景的环境(Excel 小窗需要真实数据才能验证会话传递)才能写得可靠。

下面的目录不是占位符 —— 每一条都已经在源码里核对过入口, 你现在就可以照着自己去读

为什么排在这个位置

前四课都在讲「一个页面内部」。这一课讲页面之间:谁能进、怎么进、进的时候被拦了什么。

排在第 6 位是因为它是排障的第二大来源 —— 用户报的问题里,「打不开」「点了没反应」有相当一部分根本不是业务逻辑,是守卫或窗口的事。

前置

会讲什么

  1. 路由表的两段结构。ConstantRouterMap(登录页等,静态)vs DynamicRouterMap(业务页,登录后注册),src/router/index.ts
  2. generateRoutes() 到底做了什么。src/store/modules/permission.ts:37-56 —— 只是 clone 一遍加个 404,零权限过滤。为什么「菜单看不见」≠「进不去」
  3. 菜单是怎么画出来的。meta.showMenucomponents/Menu/src/Menu.vue:47)和 meta.hiddenMenu/src/helper.ts:25)分别由谁消费 —— 为什么所有 *_edit 路由两个都写了
  4. 守卫的四件事。src/permission.tsbeforeEach:多窗口分流 docView()CONFIRM_ROUTES 拦截、_edit 页离开确认、token 检查
  5. 守卫里的 next() 重复调用问题。needConfirm 分支调完 next(false) 没有 return,后面继续跑
  6. 多窗口。表编辑页发 create-smallWinviews/GameEditor/Expert/index.vue:238)→ 主进程 createSmallWindow() → 会话靠 transfer-session-data IPC 传过去 → 小窗里的守卫走 docView() 分支
  7. Dashboard 弹窗式功能。GM 工具和地图转换不是路由,排障时怎么定位这类「地址栏不变」的功能
  8. 三档评级。hash 路由(✅ 桌面应用的合理选择)、零过滤的 generateRoutes(⚠️)、smallWindow 变量被覆写(❌)、小窗 setWindowOpenHandler 解构错字段(❌)

学完之后你应该能

在正文出来之前,你可以先做这些