# Cockpit page file shape Type: grilling Status: resolved Labels: wayfinder:grilling Blocked by: None ## 进度:100% 已关闭。入口为 `src/pages/cockpit/index.vue`(薄);全部驾驶舱代码收在新建的 `src/modules/cockpit`;不使用 `layout.vue`。 ## Question Fes.js 约定下,驾驶舱入口文件是 `src/pages/cockpit.vue` 还是 `src/pages/cockpit/` 目录? 已知冲突: - ADR 0006 写 `src/pages/cockpit.vue` 与 `src/modules/cockpit` - ADR 0007 与 spec 写 `src/pages/cockpit` 与 `src/modules/cockpit` 需要决定唯一入口形态,以及模块代码是否全部放在 `src/modules/cockpit`。不要引入 TvT 插件目录作为交付主体。 ## Fes.js 路由事实(只读核实) 来源:`node_modules/@fesjs/preset-built-in/dist/plugins/core/route/index.mjs`。 - **两种入口都产出 `/cockpit`**:`src/pages/cockpit.vue`(文件名即路径段)与 `src/pages/cockpit/index.vue`(`index` 映射为空路径段,目录递归提供 `/cockpit` 前缀)。 - **两者不能并存**:同一 `routePath` 冲突时只取先遇到的一个并打警告,因此必须二选一。 - **pages 下的 `components` 目录不生成路由**:`isProcessDirectory` 明确排除 `components`。 - **不要用 `.fes.js` 的 `router.routes`**:该配置一旦非空,路由生成器直接返回它,整个应用的文件路由(`src/pages/index.vue`、`test.vue`、`app.jsx` 里 `/plugins` 那套)全部失效。 - **`layout.vue` 会生成 layout 路由**,供带子路由的目录使用;驾驶舱只有 `/cockpit` 一个路由,用不上。 - **`src/modules` 目前不存在**:现有顶层目录为 `.fes`、`common`、`components`、`images`、`models`、`pages`、`plugins`、`stores`。 - **`@` 别名指向 `src`**(`src/app.jsx` 已在用 `@/plugins/...`),因此 `@/modules/cockpit/...` 可解析。 ## Answer **入口形态(Q1=A):** `src/pages/cockpit/index.vue`,保持薄,只挂载外壳组件。目录形态给「入口薄 + 模块厚」留出位置,且改动文档面积最小。不采用 `src/pages/cockpit.vue`。**明确排除在 `.fes.js` 写 `router.routes`**:那会让全站文件路由失效。两种文件形态不得并存。 **模块归属(Q2=A):** 新建 `src/modules/cockpit` 作为驾驶舱唯一领域边界,收纳外壳、面板、地图服务、适配层与 mock。这是新增顶层目录,已在 ADR 0006/0007 记录。不放进 `src/common/cockpit`,也不拆到 `src/components/cockpit` 与 `src/stores/cockpit`。 **面板与外壳位置(Q3=A):** 全部放模块内,例如 `@/modules/cockpit/CockpitShell.vue` 与 `@/modules/cockpit/panels/...`。`CockpitShell` 是 spec 指定的公共测试 seam,与实现同址。面板不放 `src/pages/cockpit/components/`——虽然该目录已被路由排除、技术上安全,但会造成第二个边界并让导入方向别扭。 **不使用 `layout.vue`(Q4=A):** 外壳是模块里的 `CockpitShell.vue`,不是路由层 layout。 **文档同步:** ADR 0006 原写 `src/pages/cockpit.vue`,已改为 `src/pages/cockpit/index.vue`;ADR 0007 与 spec 的 `src/pages/cockpit` 表述补齐为 `src/pages/cockpit/index.vue`。