What to build: 建立驾驶舱自有静态资产目录、基础视觉 token 和占位图、图标、状态标签。正式设计资源后续可直接替换,不改变信息架构。
Blocked by: 01
Status: resolved Labels: ready-for-agent
请勿据标签重复接单:本票已完成并有走查记录,
Labels保留只是为了让面板不把它退化成needs-triage。
public/cockpit/README.md
资产目录说明:现在只有临时影像 aerial.webp(维护者提供、无地理配准,真底图归票 21);写清引用方式必须走 import.meta.env.BASE_URL 拼接(publicPath: './' 与 qiankun 注入路径下都要能取到,不许硬编码 /cockpit/...)与正式资源替换约定。
src/modules/cockpit/styles/tokens.css
唯一 token 来源,挂在 .cockpit-shell 上而不是 :root:--cyan / --text / --font / --muted 这类名字太通用,挂根元素会顺着全局样式漏进宿主应用与 src/plugins 的插件样式。含五类:底色/面板、主色与语义色(--lv1..--lv4 + --neutral)、文字、字体、字号 --fs-*、间距 --space-*、层级 --z-*、阴影。组件内的装饰性渐变/辉光仍是散落的 rgba(不属主题色),已在文件头注明。
src/modules/cockpit/domain/icons.js + src/modules/cockpit/components/CockpitIcon.vue
6 个内联 SVG 占位图标(brand / layers / points / event / resource / blank),currentColor 跟随文字色;未知图标渲染为空而不抛错——图标属视觉资源,缺失不该打断骨架渲染。数据与渲染分开,将来换图片或图标字体只改数据文件。
src/modules/cockpit/domain/statusTones.js + src/modules/cockpit/components/StatusTag.vue
色键 lv1..lv4 + neutral(与 ADR 0008 事件四级同调色板);标签是色块 + 文字而不是纯色点,因为 ADR 0006 要求状态不能只靠颜色区分;未知色键退回中性灰。文件里只定义「视觉可用的色键」,不定义业务映射(「报警 → lv1」这类判定归点位状态票),避免业务规则藏进样式。
src/modules/cockpit/components/PanelPlaceholder.vue
面板体占位(虚框 + 图标 + 面板占位 · <panelId> + 数据源提示),data-panel-id 便于后续走查定位。正式面板内容落地时只替换外壳插槽,标题与结构(panelCatalog.js)不动。
外壳改动
品牌位改用 CockpitIcon;面板体改用 PanelPlaceholder;--u 与主题色从内联样式迁到 tokens.css;地图图例的 1–4 级硬编码色块改用 StatusTag,顺手删掉重复的 .map-holo__chip.c1..c4(语义色第二次声明的地方);顶栏高度与所在网格轨道对齐(52 设计像素,此前 56 高却有 52 的轨道)。
node .scratch/cockpit-shell-panel-layout/verify/t06-assets.mjs → 15/15 通过(A 资产 2 · B token 4 · C 占位/图标/标签 5 · D 结构 2 · E 引用走查 1)。
src/modules/cockpit/**、src/pages/cockpit/** 全文无 public/plugins、/plugins/xxx、PLS、FES_APP_PLSNAME 命中。viewBox 合法、inner 非空、不含 <script);C4 色键集合固定且拒绝裸颜色名。panelCatalog.js 里不出现颜色值与图标名——结构不携带视觉,替换视觉资源不会牵动信息架构。node .scratch/cockpit-shell-panel-layout/verify/t01-panel-catalog.mjs → 通过(模式与面板映射 · 展开收放 · 筛选选项 · 地图生命周期 · Cesium 基址解析)。
浏览器走查 node .scratch/cockpit-shell-panel-layout/verify/t01-browser-walkthrough.mjs → 19/19 通过(A1–A16 含 A5 四模式、A14 地图实例不重建、A15/A16 Cesium 就绪与静态资源 200,A11 无页面级报错)。其中 A15/A16 是票 27 会话在工作区加的断言(票 27 的代码尚未提交,故本次提交的走查脚本是 17 项版本,单独跑过 17/17;19/19 是它在当前工作区里的结果)。
public/cockpit/ 下的资源与引用点(由 t06-assets.mjs 自动列出,缺引用即失败):
public/cockpit/aerial.webp ← src/modules/cockpit/components/MapCanvas.vue(${import.meta.env.BASE_URL}cockpit/aerial.webp,无硬编码绝对路径)public/cockpit/README.md —— 说明文档,不计入引用同一份代码在两次走查里 A12「页面铺满视口」先红后绿,差异来自开发环境的布局配置,不是代码:
y=54、main.bottom=992 > vh=950。页面顶部有 TvT 演示菜单「📀 预览演示 / 📜 源码地址 / 📚 说明文档」,而这些菜单只存在于 .fes.predev.js 与 .fes.predev.one.js(layout.navigation: 'top' + isFixedHeader: true)。Fes 布局 src/.fes/plugin-layout/views/BaseLayout.vue 走 'top' 分支渲染 54px 固定页头,把内容区顶到 top: 54px,外壳再按 100vh 铺就被挤出容器底部。pageHeaderH: 0、外壳 y=0 h=950、main.bottom=938 ≤ 950。服务跑的是 .fes.js 环境(layout.navigation: null),BaseLayout.vue 落到最后的 <template v-else>,只渲染 <FMain><router-view /></FMain>,没有页头。真实启动路径 yarn dev 与产品构建 yarn build 都是这个环境。维护者 2026-09-16 明确:真实应用环境不使用 predev 启动服务,故 predev 那条红与产品无关。.fes* 配置;把顶栏高度还原成改动前的 56 设计像素,main.bottom 仍是 992,即失败量与本次改动无因果关系。已做的加固:走查脚本头部写明「用 yarn dev,别用 yarn pre.dev / pre.dev.one」并注明维护者这条环境口径;A12 证据新增 pageHeaderH(null 布局为 0、predev 演示布局为 54),下次一眼可辨是环境还是回归。另立票 28,让外壳填满所在容器而不是硬用 100vh——这样在宿主套壳(预演站或将来 qiankun 主应用带页头的壳)时,驾驶舱也照样铺满可用区域。