diff --git a/docs/superpowers/plans/2026-07-25-migu-outpost-ui-lock.md b/docs/superpowers/plans/2026-07-25-migu-outpost-ui-lock.md new file mode 100644 index 0000000..7fd69a9 --- /dev/null +++ b/docs/superpowers/plans/2026-07-25-migu-outpost-ui-lock.md @@ -0,0 +1,23 @@ +# 迷毂 Outpost UI 实现计划(P0–P1) + +> **面向 AI 代理的工作者:** 按任务顺序实现;规格见 `docs/superpowers/specs/2026-07-25-migu-outpost-ui-lock-design.md`。 + +## 文件 + +| 文件 | 职责 | +|---|---| +| `src/styles/themes.ts` | PRIMARY 三色 + LEGACY;默认 `outpost-light`;`data-shell` | +| `src/styles/theme.css` | 浅色壳选择器改 `data-shell="outpost"`;默认 token 贴近浅色 | +| `src/stores/ui.ts` | `availableThemes` / `legacyThemes`;未知 id 迁移 | +| `src/components/ThemeSwitcher.vue` | 仅精选 3 | +| `src/layouts/AppShell.vue` | 高级 → 兼容主题 | +| `src/views/LoginView.vue` | 弱化霓虹(P1) | +| 若干 Vue 内 `fame-lavender` 选择器 | 改为 `data-shell="outpost"` | + +## 任务 + +1. 重写 `themes.ts`(精选 + legacy + applyThemeVars 写 `data-shell`) +2. `theme.css` / 组件选择器:`fame-lavender` → `data-shell="outpost"` +3. `ui` store + ThemeSwitcher + AppShell 高级入口 +4. Login 弱化星空主导(能快则做) +5. `pnpm`/`npm` typecheck 或 build 验证 diff --git a/docs/superpowers/specs/2026-07-25-migu-outpost-ui-lock-design.md b/docs/superpowers/specs/2026-07-25-migu-outpost-ui-lock-design.md new file mode 100644 index 0000000..671ed75 --- /dev/null +++ b/docs/superpowers/specs/2026-07-25-migu-outpost-ui-lock-design.md @@ -0,0 +1,273 @@ +# 迷毂平台 UI · 锁定 Outpost 浅色设计规格 + +> 状态:待用户审查(主题策略已按反馈修订) +> 日期:2026-07-25 +> 参考站:[Outpost · Fairyland Technology](https://fairylandtech.amerc.ai) +> 决策:方案 1 壳层气质(Outpost)+ **主路径精选 3 套配色(浅色 / 紫色 / 蓝色)**;旧深色霓虹主题**保留并藏入高级** +> 范围前端:`Migu2.0/frontends/apps/simple-platform-vue` +> 不改:SimpleLite ImGui / CycleGUI 桌面壳、后端 API 契约 + +--- + +## 1. 目标与非目标 + +### 1.1 目标 + +- 迷毂 Web(登录 → AppShell → 业务页 → 地图编辑器 chrome)在视觉与壳层气质上对齐 Outpost。 +- **壳层统一为 Outpost 结构**:浅主区 + 深色纹理侧栏 + 纸白卡片 + 柔阴影;无默认霓虹 orb。 +- **主路径提供 3 套精选配色**(可一键切换):浅色(默认)、紫色、蓝色——同结构、不同主色/侧栏色相。 +- 旧深色霓虹主题(星云紫等)**代码保留**,放入「高级 / 兼容主题」,不进主切换列表。 +- 保留调度业务信息架构;**不**把 Outpost 会话列表硬套进调度导航。 +- 状态色(绿/琥珀/红/蓝/灰)与品牌色解耦,语义不变。 + +### 1.2 非目标 + +- 不重写业务逻辑、路由权限、Projection/SSE 协议。 +- 不第一阶段替换 Element Plus(以 CSS 变量 + 皮肤覆盖为主)。 +- 不强制 3D 画布(webVRender)改浅色底。 +- 不把 Outpost 的 Agent 对话 IA 迁移为迷毂主导航。 +- 主路径不堆砌过多主题(精选 3 + 高级兼容即可)。 + +--- + +## 2. 产品决策(已确认) + +| 项 | 决策 | +|---|---| +| 壳层气质 | Outpost:浅主区 + 深侧栏 + 纸白卡 + 柔阴影 | +| 主路径配色 | **3 套精选**:浅色(默认)/ 紫色 / 蓝色 | +| 旧深色主题 | **保留**,藏入用户菜单「高级 → 兼容主题」 | +| ThemeSwitcher | **保留在顶栏**,只列出精选 3 套;兼容主题在高级入口 | +| 登录页 | 跟当前精选主题(默认浅色 Outpost);去掉星空霓虹主导 | +| 地图编辑器 | Chrome 跟精选浅色壳;**3D 画布保持深色** | +| AI 助手抽屉 | 视觉跟 Outpost 对话区,不改后端权限 | + +--- + +## 3. 参考站提炼(Outpost) + +### 3.1 信息架构(借壳不借业务) + +``` +┌────────────┬──────────────────────────────────────┐ +│ Sidebar │ Top context (optional, light) │ +│ ~256px ├──────────────────────────────────────┤ +│ dark plum │ Main workspace │ +│ textured │ paper cards / lists / forms │ +│ brand+nav │ │ +└────────────┴──────────────────────────────────────┘ +``` + +迷毂映射: + +| Outpost | 迷毂 | +|---|---| +| Sidebar brand + list | `AppShell` 侧栏 logo + `el-menu` | +| Workspace | `el-main` + 各业务 View | +| Artifact / card | KPI 卡、列表卡、属性面板、抽屉 | +| Conversation chrome | AI 助手抽屉(仅视觉) | + +### 3.2 设计 Token(锁定值) + +来源:Outpost 线上 CSS(`color-scheme: light`)。 + +| Token | 值 | 用途 | +|---|---|---| +| `--op-page` | `#f6f3fb` | 应用主区底 | +| `--op-paper` | `#fffefd` | 卡片/面板底 | +| `--op-paper-soft` | `#fbf9fd` | 次级表面 | +| `--op-ink` | `#28213a` | 主文字 | +| `--op-muted` | `#756d85` | 次级文字 | +| `--op-faint` | `#9a93a7` | 弱化/占位 | +| `--op-line` | `#e8e2ef` | 分割线 | +| `--op-line-strong` | `#ddd4e8` | 强调边框 | +| `--op-violet` | `#7543e8` | 品牌主色 | +| `--op-violet-strong` | `#5d2ecb` | 主色按下/深 | +| `--op-violet-soft` | `#eee8ff` | 主色浅底 | +| `--op-mint` / `--op-amber` / `--op-danger` / `--op-blue` | 见参考站 | 仅作辅助;**业务状态仍用既有 `--mg-status-*`** | +| `--op-shadow` | `0 12px 35px rgba(54,35,78,.08)` | 默认浮起 | +| `--op-shadow-strong` | `0 22px 65px rgba(46,24,72,.18)` | 弹层/强调卡 | +| `--op-radius` | `16px` | 默认圆角 | +| Sidebar | `linear-gradient(160deg,#3f2454,#2c193c 45%,#241530)` + 细纹理 | 侧栏底 | +| Font | Inter + 系统无衬线;数据位保留 JetBrains Mono | 与现 `--mg-font-*` 对齐 | + +### 3.3 明确禁止(相对当前「星云紫」) + +- 主路径禁用:大面积霓虹 glow、多层 orb 背景、深色玻璃卡片作默认表面。 +- 主路径禁用:把品牌紫当 success/warning。 +- 避免再引入第三套互不兼容的色板命名;Outpost token **映射进**既有 `--mg-*`,业务组件继续只读 `--mg-*`。 + +--- + +## 4. 精选三套主题 + Token 映射 + +三套均遵守同一 Outpost 壳层规则(浅主区 / 纸白卡 / 柔阴影 / orb=0 / radius≈16),仅 **主色 + 侧栏色相 + 主区底轻微染色** 不同。 + +### 4.1 主路径精选(`PRIMARY_THEMES`) + +| id | 显示名 | 定位 | 主色 | 侧栏 | 主区底 | +|---|---|---|---|---|---| +| `outpost-light` | **浅色**(默认) | 最贴近参考站 | `#7543e8` | `#3f2454 → #241530`(plum) | `#f6f3fb` | +| `outpost-purple` | **紫色** | 同结构、更饱和紫品牌 | `#7c3aed` | `#2d1b69 → #1a1040` | `#f3eefc`(略偏紫) | +| `outpost-blue` | **蓝色** | 同结构、蓝科技感 | `#3c78d2` | `#0f2744 → #0a1a30` | `#f3f6fb`(略偏蓝) | + +共用表面: + +| `--mg-*` | 值 | +|---|---| +| `--mg-bg-card-rgb` | paper `255,254,253` | +| `--mg-text` 系 | ink `#28213a` / muted `#756d85`(浅底深字) | +| `--mg-glass-*` | 白卡片 + 细边 + 柔阴影(无强 blur glow) | +| `--mg-radius*` | 基准 16px | +| `--mg-orb-*-opacity` | **0** | +| 状态色 | 继续 `--mg-status-*`,不随主题主色改语义 | + +### 4.2 高级兼容主题(`LEGACY_THEMES`,保留) + +现有深色霓虹预设移入此列表(至少含): + +- `industrial-purple` 星云紫 +- `deep-azure` 深邃蓝 +- `emerald-forge` / `crimson-iron` / `graphite-steel` / `amber-forge`(若仍在代码中) +- 旧 `fame-lavender`:合并进 `outpost-purple` 或标 deprecated 后从主列表移除 + +入口:用户头像菜单 → **高级 → 兼容主题**(折叠)。主顶栏 `ThemeSwitcher` **只显示 3 个精选**。 + +### 4.3 默认与迁移 + +- `DEFAULT_THEME_ID = 'outpost-light'` +- `:root` 默认 CSS 与 `outpost-light` 一致,避免闪屏 +- localStorage 若为未知 / 已 deprecated id → 迁移到 `outpost-light` +- 若为 `LEGACY_THEMES` 中的 id → **尊重用户选择**(不强制踢回浅色) +- 登录页品牌区跟当前主题侧栏色;`--lg-*` 随精选主题切换或登录页固定跟 `outpost-light`(实现时二选一,推荐:**登录固定 outpost-light,进壳后再跟用户主题**) + +--- + +## 5. 壳层与页面改造要点 + +### 5.1 AppShell + +- 侧栏:纹理渐变(随主题色相)、品牌区分隔线、菜单选中用 soft 底或左侧高光条。 +- 主区装饰 orb:`opacity=0`。 +- 顶栏:浅底、细边、弱阴影;breadcrumb + **精选 ThemeSwitcher(3 项)** + 用户区。 +- 用户菜单增加「高级 → 兼容主题」子菜单(列出 `LEGACY_THEMES`)。 +- 底栏:弱化字色或并入顶栏次级信息(可选后续)。 +- `aside-footer`:版本号;可选极简当前主题名。 + +### 5.2 登录 / 配置向导 + +- 布局可保留左右分栏,但: + - 背景:浅底 + 可选极轻纹理,不用星空粒子主导。 + - 左:深色品牌板(默认跟 `outpost-light` 侧栏)。 + - 右:paper 表单卡 + 主色按钮。 +- 配置向导与登录同肤。 + +### 5.3 Element Plus 皮肤 + +统一覆盖(全局): + +- Button primary / default +- Card / Dialog / Drawer / MessageBox +- Table / Pagination +- Menu(侧栏已透明底,补选中态) +- Input / Select / Tabs / Tag + +原则:纸白表面、ink 文字、violet 主按钮、radius≈14–16、阴影用 `--op-shadow`。 + +### 5.4 业务页(渐进,同一皮肤) + +优先级: + +1. Dashboard / 地图监控 / 调度工作台 +2. 任务 / 告警 / 车辆中心 +3. OTA / 配置中心 / 服务状态 +4. AI 助手抽屉 + +统一模式:`page-header` + paper 卡片栅格 + 紫 CTA;清理页面内 `industrial-purple` 专用覆盖或改为仅在「兼容主题」下生效。 + +### 5.5 地图编辑器 + +| 层 | 皮肤 | +|---|---| +| EditTopBar / ToolRail / PropertyPanel / StatusBar / AI 侧栏 | Outpost 浅色 | +| Workspace3D / webVRender 画布 | **保持深色视口** | +| 与壳层交界 | 1px `--op-line`,避免深浅硬切刺眼 | + +### 5.6 主题列表处理 + +| 分组 | 主题 | 处理 | +|---|---|---| +| 精选 | `outpost-light` / `outpost-purple` / `outpost-blue` | 新建或由现有浅色主题改版;顶栏可切换 | +| 合并 | `fame-lavender` | 并入 `outpost-purple` 或启动时 remap | +| 高级兼容 | `industrial-purple`、`deep-azure`、绿/赤/钢/琥珀等 | 保留完整 vars,仅高级菜单可选 | +| 持久化 | 精选或 legacy id | 精选正常读写;未知 id → `outpost-light`;legacy id **不强制迁移** | + +--- + +## 6. 文件影响面(实现时) + +| 文件/目录 | 职责 | +|---|---| +| `src/styles/theme.css` | 默认 token、Element 覆盖、禁 orb | +| `src/styles/themes.ts` | `PRIMARY_THEMES`(3)+ `LEGACY_THEMES`;默认 `outpost-light` | +| `src/stores/ui.ts`(或等价) | 默认主题、未知 id 迁移、legacy 可选 | +| `src/components/ThemeSwitcher.vue` | 只渲染精选 3;样式 Outpost 化 | +| `src/layouts/AppShell.vue` | 侧栏/顶栏;用户菜单挂「兼容主题」 | +| `src/views/LoginView.vue` | 登录换肤 | +| `design-system/MASTER.md` | 产品风格改为 Outpost 浅色工作台 | +| `design-system/outpost.md` | Token 与组件规范(新建) | +| 各 View 内 `:root[data-theme="industrial-purple"]` 块 | 降级为 legacy 或删除 | +| 地图编辑器 chrome 组件 | 浅色适配 | + +--- + +## 7. 分阶段交付 + +| Phase | 内容 | 验收 | +|---|---|---| +| **P0** | 三套精选 token + 默认 `outpost-light` + legacy 分组 + 文档 | 冷启动浅色 Outpost;可切紫/蓝 | +| **P1** | AppShell + 登录 + Element 皮肤 + ThemeSwitcher(3) + 高级兼容入口 | 壳层/登录 Outpost 化;高级仍能开星云紫等 | +| **P2** | Dashboard / 监控 / 调度 / 列表页 | 主业务无霓虹玻璃默认态 | +| **P3** | 地图编辑器 chrome + AI 抽屉 | 外围浅、画布深;助手区纸白气泡 | +| **P4** | 清理 legacy 覆盖、MASTER 更新、回归清单 | 无残留 `industrial-purple` 主路径样式 | + +每阶段可独立合并;**不在本规格内自动改 SimpleLite 原生菜单皮肤**。 + +--- + +## 8. 风险与缓解 + +| 风险 | 缓解 | +|---|---| +| 深色主题下写死的白字/半透明在浅底不可读 | P0 强制迁移 + P2 逐页扫对比度 | +| 地图页信息密度高,浅色易显脏 | 卡片分区 + 表格紧凑密度,状态色保留 | +| Element 覆盖不全 | 先覆盖高频控件,缺口记入回归清单 | +| 用户 localStorage 旧主题 | 启动迁移 + 一次性提示(可选) | + +--- + +## 9. 验收清单(整站) + +- [ ] 未登录:登录页为 Outpost 浅色气质 +- [ ] 登录后:侧栏深紫纹理 + 主区 `#f6f3fb` + 纸白卡片 +- [ ] 顶栏可切换 **浅色 / 紫色 / 蓝色** 三套精选 +- [ ] 用户菜单「高级 → 兼容主题」仍能选星云紫等旧深色 +- [ ] 监控/调度/OTA/配置:纸白卡、ink 字、无默认霓虹 orb +- [ ] 地图编辑器:工具/属性浅色,3D 画布仍深色可读 +- [ ] 告警/成功/故障色不被品牌色替换 +- [ ] 刷新后主题保持;未知 id 回落 `outpost-light` + +--- + +## 10. 开放项(审查时确认) + +1. ~~旧深色主题~~ → **已确认:保留并藏入高级** +2. **底栏 footer**:保留弱化版,还是删除并入顶栏?(建议:P1 先弱化保留) +3. 实现计划:`Migu2.0/docs/superpowers/plans/2026-07-25-migu-outpost-ui-lock.md`(本规格通过后编写) + +--- + +## 11. 审查结论(请用户勾选) + +- [ ] 同意本规格(含精选三色 + 高级保留旧主题),可编写实现计划并开工 +- [ ] 需要修改:________ diff --git a/frontends/apps/simple-platform-vue/design-system/outpost.md b/frontends/apps/simple-platform-vue/design-system/outpost.md new file mode 100644 index 0000000..8be7959 --- /dev/null +++ b/frontends/apps/simple-platform-vue/design-system/outpost.md @@ -0,0 +1,22 @@ +# Outpost 视觉规范(迷毂壳层) + +> 权威决策见:`Migu2.0/docs/superpowers/specs/2026-07-25-migu-outpost-ui-lock-design.md` +> 参考:https://fairylandtech.amerc.ai + +## 一句话 + +Outpost 壳层:浅主区 + 深色纹理侧栏 + 纸白卡片 + 柔阴影。 +主路径精选三色:**浅色(默认)/ 紫色 / 蓝色**;旧深色霓虹主题保留在「高级 → 兼容主题」。 + +## 精选主题 id + +| id | 名称 | +|---|---| +| `outpost-light` | 浅色(默认) | +| `outpost-purple` | 紫色 | +| `outpost-blue` | 蓝色 | + +## 例外 + +- webVRender / 地图 3D 画布:保持深色视口。 +- 状态色:继续用 `--mg-status-*`。 diff --git a/frontends/apps/simple-platform-vue/index.html b/frontends/apps/simple-platform-vue/index.html index e4e1248..a632fdb 100644 --- a/frontends/apps/simple-platform-vue/index.html +++ b/frontends/apps/simple-platform-vue/index.html @@ -1,11 +1,14 @@ - +
+ 目标:{{ targetSummary }}。选择场景已有字段,再输入要批量写入的值(对齐 Ctrl+I)。 +
+
@@ -212,25 +205,6 @@ const rules: FormRules = {
const year = computed(() => new Date().getFullYear())
-// 生成 n 个随机分布、随机大小与闪烁节奏的小白点,营造梦幻星点。
-function makeStars(n: number): Record