From 4f0f34f46064c743a923ab9b031ea74ae7474586 Mon Sep 17 00:00:00 2001 From: Huarch Date: Tue, 27 Oct 2026 17:56:38 +0800 Subject: [PATCH] feat: refine supply map layers and workbench branding --- docs/style-design-guide.md | 12 ++ src/app/app.e2e.ts | 4 +- .../components/workbench-top-bar.tsx | 6 +- .../workbench/hooks/use-workbench-map.ts | 2 +- src/features/workbench/map-workbench-page.tsx | 5 +- .../workbench/map/layer-group-style.ts | 10 +- .../workbench/map/layer-visibility.test.ts | 125 +++++++++++ .../workbench/map/layer-visibility.ts | 141 +++++++++++++ src/features/workbench/map/layers.test.ts | 45 ++-- src/features/workbench/map/layers.ts | 39 ++-- .../workbench/map/map-control-config.test.ts | 9 +- .../workbench/map/map-control-config.ts | 35 +-- .../workbench/map/map-layer-visuals.ts | 137 +++++++----- .../workbench/map/published-gis-layers.ts | 47 +++-- src/features/workbench/map/scada.ts | 30 +-- .../workbench/map/simulation-layers.ts | 11 +- .../workbench/map/supply-icons.test.ts | 16 ++ .../workbench/map/supply-style-expressions.ts | 11 + src/features/workbench/map/value-label.ts | 13 +- tests/browser/layer-visibility-fade.e2e.ts | 163 ++++++++++++++ tests/browser/map-scale-visibility.e2e.ts | 199 ++++++++++++++++++ tests/browser/scada-api-source.e2e.ts | 13 ++ .../browser/support/mock-pipe-vector-tiles.ts | 46 ++++ 23 files changed, 948 insertions(+), 171 deletions(-) create mode 100644 src/features/workbench/map/layer-visibility.test.ts create mode 100644 src/features/workbench/map/layer-visibility.ts create mode 100644 tests/browser/layer-visibility-fade.e2e.ts create mode 100644 tests/browser/map-scale-visibility.e2e.ts create mode 100644 tests/browser/support/mock-pipe-vector-tiles.ts diff --git a/docs/style-design-guide.md b/docs/style-design-guide.md index 8a3218a..659cbf5 100644 --- a/docs/style-design-guide.md +++ b/docs/style-design-guide.md @@ -77,6 +77,18 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/shared/ui/card"; 状态使用 `status-tone-neutral/info/success/warning/danger` 与共享 `StatusBadge`、`StatusIcon`、`StatusDot`,同时提供文字或图标。业务状态、交互选中和数据系列颜色各自独立;`material-tone-agent` 只标记 Agent 解释或建议,原始监测值和人工资料继续使用普通阅读面。 +地图中的管线一起显示,以管径对应的颜色和线宽体现差异。水库、泵站、水箱和水质监测点保持清晰;阀门、普通节点与常规 SCADA 使用随缩放连续变化的大小和透明度。密集设施的工程符号自动避让,底层保留轻量圆点以表达位置和支持点选。选中与异常分析标记单独突出,普通设施以连续变化为主;普通节点从 12 级、阀门从 13 级开始显示,图标、标注与命中范围同步限制。 + +管道透明度不随缩放变化,缩放渐变体现在管线与描边的宽度上,远看纤细、放大清晰;图层开关时仍使用透明度淡入淡出。 + +图层开关统一使用约 320ms 的透明度淡入淡出,覆盖管线、设施、监测点、GIS 原始数据和模拟结果。矢量瓦片可绘制后才开始淡入计时,避免加载期间耗尽过渡时间。淡入淡出只临时叠加透明度系数,结束后恢复图层原有样式;快速反向切换从当前进度继续。隐藏时立即关闭命中层与交互强调层,淡入结束后恢复;减少动态效果偏好下直接切换。管线用过滤器区分开关状态,透明度保持统一数值,避免逐帧重写属性表达式触发瓦片重算。 + +重要设施也使用连续缩放插值,但图标的最低透明度保持较高,衬底更轻,保证概览可辨识。按需开启的数值标签随缩放渐变字号与透明度;使用者设置的字号作为放大后的目标字号。 + +水质、压力和流量监测点统一从 11 级开始显示,图标、圆点、交互层和图层面板提示共用缩放起点。水质与压力监测点使用一致的圆点、衬底尺寸和图标屏幕像素宽度。图标缩放系数需结合原图尺寸换算,水质图标 128px、压力图标 96px,不直接使用相同系数。 + +GIS 原始图层与对应业务类型共用起始级别:GIS 管线与 DN100+ 台账从 8.5 级显示,流量仪从 11 级显示,消火栓、接水点、用户及非居民水表从 12 级显示,GIS 阀门与排水阀从 13 级显示。图层提示、图形和点击范围保持一致。 + Agent 使用 shadcn/ui 的实体表面和现有主题色,不将这种外观列为待迁移到 Acrylic 的差异。已有 Agent 专用配色、材质和控件 CSS 覆盖应在对应组件调整时收敛到本地 shadcn/ui 样式;是否完成以运行界面验收为准。 ## 4. 材质与层级 diff --git a/src/app/app.e2e.ts b/src/app/app.e2e.ts index 8c3f1bf..ad263d3 100644 --- a/src/app/app.e2e.ts +++ b/src/app/app.e2e.ts @@ -17,8 +17,8 @@ test("renders the migrated WebGIS workbench shell", async ({ page }) => { }); await page.goto("/"); - await expect(page.getByText("供水管网智能调度系统")).toBeVisible(); - await expect(page.getByText("调度工作台")).toBeVisible(); + await expect(page.getByText("供水管网智慧运维系统")).toBeVisible(); + await expect(page.getByText("运维工作台")).toBeVisible(); await expect(page.getByLabel("Agent 折叠栏")).toBeVisible(); await expect(page.getByLabel("Agent 命令面板")).toHaveCount(0); await page.getByRole("button", { name: /展开 Agent 助手面板/ }).click(); diff --git a/src/features/workbench/components/workbench-top-bar.tsx b/src/features/workbench/components/workbench-top-bar.tsx index 086af1e..4fcfbfb 100644 --- a/src/features/workbench/components/workbench-top-bar.tsx +++ b/src/features/workbench/components/workbench-top-bar.tsx @@ -117,11 +117,11 @@ export function WorkbenchTopBar({