迷毂 · 前端 (frontends/)
产品代号 迷毂(Mí Gǔ),全称「迷毂 · 智能调度平台」。 单一 Vue 工程
simple-platform-vue承载 admin(管理员 / Platform)与 monitor(运营 / RCSMonitor)双视图; 通过路由前缀/admin/*与/monitor/*切换,后续可按 ARCHITECTURE.md §13 拆分为独立工程。落地范围与依据:本目录是 ARCHITECTURE.md v1.7 §6/§9/§13/§17/§18 中前端形态的初版骨架; 真实业务接入由
Platform.Server(同仓库新增的 .NET 8 工程)反代 SimpleLite 完成。品牌主色:默认 工业紫
#6a1b9a(6 套主题可切换),详见 ARCHITECTURE.md §17.7。 工程包名simple-platform-vue/ 仓库目录frontends/apps/simple-platform-vue保持不动,避免破坏 pnpm/CI 脚本,仅用户可见文案统一为「迷毂」。
目录结构
frontends/
├── package.json # workspace 根
├── pnpm-workspace.yaml # pnpm monorepo 占位(当前只有一个 app)
└── apps/
└── simple-platform-vue/
├── package.json
├── vite.config.ts # base=/ ;dev 时 /api 代理到 http://127.0.0.1:8080
├── index.html
├── env.d.ts
├── .env.development
├── public/
│ ├── favicon.svg # 紫色渐变方块 + 「迷」字
│ └── login-bg.jpg # 登录页背景图 (1.8MB,来源 C:\Tool\wallpapper\wall_Beach.jpg)
└── src/
├── main.ts # Pinia + applyCurrentTheme() + Element Plus
├── App.vue
├── styles/
│ ├── theme.css # --mg-* 玻璃令牌 + Element Plus 覆盖
│ └── themes.ts # 6 套主题预设 + applyThemeVars()
├── router/index.ts # /login /status /admin/* /monitor/* (title base="迷毂")
├── stores/ {auth, config, ui}.ts
├── api/ {http, auth, config, projection, ops}.ts
├── layouts/{AppShell, BlankLayout}.vue # 紫色渐变侧边栏 / 紫色三段渐变背景
├── components/
│ ├── Workspace3D.vue # ★ iframe 包 http://localhost:8223
│ ├── ThemeSwitcher.vue # 顶栏主题下拉(§17.7)
│ ├── ScopeSwitcher.vue
│ ├── PermissionGuard.vue
│ ├── DataTablePro.vue
│ └── ConfigPageBase.vue
├── views/
│ ├── LoginView.vue
│ ├── ServiceStatusView.vue # 复刻 §3.4 状态窗
│ ├── admin/
│ │ ├── DashboardView.vue
│ │ ├── MapMonitorView.vue # ★ 地图监控页(iframe 8223 + 实时车辆侧栏)
│ │ ├── MapEditorView.vue / TrackTableView.vue
│ │ ├── CarPanelView.vue / MissionEditorView.vue
│ │ ├── CadToolbarView.vue / PlaybackView.vue
│ │ └── config/ # 14 个配置中心页(§9)
│ └── monitor/
│ ├── MonitorDashboardView.vue
│ ├── MonitorMapView.vue # ★ 只读 iframe 8223 + 运维白名单
│ ├── OpsActionPanelView.vue
│ └── AnnotationView.vue
├── types/ {auth, map, car, mission, ops, config}.ts
└── mock/ {server.ts, data/*.ts}
启动
# 1) 安装依赖(首次)
cd frontends
pnpm install
# 2) 启动 Vite 开发服务器(默认 :5173)
pnpm dev
# 3) 打开浏览器
# http://localhost:5173/login
# 任意非空用户名 + 任意密码即可登录(鉴权全为 Mock)
# scope=Platform → /admin/map-monitor (★ 地图监控页)
# scope=RCSMonitor → /monitor/map (★ 只读地图监控页)
地图监控页与 webVRender
地图监控页(/admin/map-monitor 与 /monitor/map)通过 <Workspace3D> 组件以 iframe 嵌入
SimpleLite WebTerminal 提供的 webVRender,默认 URL:
http://localhost:8223/?scope=Platform&token=<jwt>&ro=0 # 管理员,可交互
http://localhost:8223/?scope=RCSMonitor&token=<jwt>&ro=1 # 运营,只读
可通过 .env.development 中的 VITE_VRENDER_HOST 覆盖默认主机,或直接给组件传 host 属性。
iframe 嵌入注意事项(CORS / X-Frame-Options)
- 当前 SimpleLite WebTerminal 暂未声明
X-Frame-Options/Content-Security-Policy: frame-ancestors, 浏览器多数情况下会按默认策略放行同源 / 局域网嵌入。 - 若浏览器控制台报「Refused to display 'http://localhost:8223/' in a frame」,请在 SimpleLite WebTerminal
侧加上
X-Frame-Options: ALLOWALL或Content-Security-Policy: frame-ancestors *(本轮代码未改动 SimpleLite)。 - 若需通过
Platform.Server走同源代理,可以让 iframe 指向http://localhost:8080/vr/,由 YARP 转发到http://127.0.0.1:8223/(见Platform.Server/appsettings.json的vrender-route)。
与后端联调
- Vite dev 模式下,所有
/api/*请求经 Vite proxy 转到http://127.0.0.1:8080,由Platform.Server处理:/api/auth/login→Platform.ServerAuthController(Mock JWT)/api/config/{section}→Platform.ServerConfigController(14 维度占位)/api/health→Platform.ServerHealthController/api/projection/*→Platform.ServerProjectionController(占位)/api/sl/*→ YARP 反代 SimpleLite WebAPIhttp://127.0.0.1:8222//api/sl/ops/execute与/api/sl/ops/audits→Platform.ServerOpsController(白名单网关占位)
Mock 开关:VITE_USE_MOCK
api/auth.ts、api/config.ts、api/ops.ts 读取 import.meta.env.VITE_USE_MOCK:
| 环境 | 文件 | 默认值 | 行为 |
|---|---|---|---|
dev (pnpm dev) |
.env.development |
true |
走 mock/server.ts,无后端也能跑通 UI |
prod (pnpm build) |
.env.production |
false |
强制打到 Platform.Server,没启后端会失败(这是期望行为) |
要在 dev 环境联调真实后端,把 .env.development 里的 VITE_USE_MOCK 注释掉或改为 false 即可。
不要再像旧版那样改源码里的 const MOCK = true —— 那条常量已经下线,统一由 env 控制。
其他
api/*.ts(如reflection.ts、projection.ts、workbench.ts)从一开始就直连真实 API, 不受VITE_USE_MOCK影响;它们后端必到位才能用。
生产构建
# 在 frontends 目录
pnpm --filter simple-platform-vue build # 产出 apps/simple-platform-vue/dist/
# 部署到 Platform.Server (一次拷贝,单一合并工程)
# Windows / PowerShell
Remove-Item ..\Platform.Server\wwwroot\* -Recurse -Force -ErrorAction SilentlyContinue
Copy-Item apps\simple-platform-vue\dist\* ..\Platform.Server\wwwroot\ -Recurse
部署完成后访问 http://localhost:8080/login、/admin/dashboard、/admin/map-monitor、/monitor/map,所有非 API 路径都会回退到 wwwroot/index.html,由 vue-router 内部解析。
已通过冒烟验证:
pnpm build通过 vue-tsc 严格类型检查 + Vite 生产构建(2412 模块、44 chunk),Platform.Server启动后/、/admin/map-monitor、/monitor/map、/api/health、/api/config/system与/assets/index-*.js均返回 200。
品牌与主题(v1.6.1 对齐 FRLD / ddms)
- 产品名「迷毂」全局可见文案:登录窗标题/副标题、
<title>、侧边栏顶部、favicon。 - 母公司 logo:
public/FRLD-logo-white.png(11.5 KB 展开态)+public/FRLD-logo-white-no_title.png(3.5 KB 折叠态)。来源E:\ddms\frontend\public,与法睿兰达 FAIRYLAND 运营管理引擎(FAME / ddms)共用同一品牌资产。 - 中英双标题:中文
迷 毂 · 智能调度平台、英文Mi Gu · Intelligent Dispatch Platform(首字母加粗)。 - 品牌主色
#7c3aed(Tailwind violet-600):通过src/styles/theme.css覆盖 Element Plus 的--el-color-primary与--el-color-primary-rgb(双重:root+html !important兜底)。配套--mg-primary-{50..950}阶梯、--mg-accent #a855f7、--mg-bg-aside-{1,2}侧栏深紫渐变。 - 登录卡:单列 460px,背景
linear-gradient(135deg, #2d1b69 0%, #7c3aed 100%)(ddms 同款),透明输入 + 白底紫字大按钮 + 双卡 scope 选择器。 - 侧边栏顶端 logo 块:FRLD logo 38px + 中英双标题居中(折叠时变 28px logo + 「迷毂」缩写)。
- 完整视觉规范与色卡见
../ARCHITECTURE.md§17。
相关文档
- ../ARCHITECTURE.md — v1.6 总体架构(§3 启动登录、§5 三端职责、§6 共享内核、§9 配置中心、§10 关键交互、§17 视觉规范)
- ../Platform.Server/README.md — 后端骨架启动说明