13 KiB
亚克力设计类别与组件使用清单
本文档记录当前前端的亚克力材质体系及实际使用位置。样式定义以 src/styles.css 为准,组件映射以 src/features/ 下的现有代码为准。
总览
当前材质体系分为 3 组,共 13 个语义类:
| 分组 | 数量 | 类别 | 是否使用背景模糊 |
|---|---|---|---|
| 外层亚克力与临时玻璃 | 4 | 导航、面板、独立控件、临时任务浮层 | 是 |
| 内部实体表面 | 4 | Dock、控件面、内容凹槽、阅读面 | 否 |
| 语义状态表面 | 5 | 信息、正常、警告、危险、Agent 推理 | 否 |
只有第一组属于真正的亚克力或玻璃外壳。第二组用于亚克力壳层内部,保证文字、表单和密集数据不受底图干扰。第三组只表达业务状态,不承担界面层级。
1. 外层亚克力与临时玻璃
这组样式包含冷色半透明底色、饱和度、明度混合、细噪点、边框和阴影,并使用 backdrop-filter。同一区域只应保留一个带模糊的外层壳体,内部子元素应改用实体表面。
acrylic-navigation
- 用途:全局导航栏。
- 模糊:使用面板级模糊,默认 22px,浅色底图 24px,卫星底图 20px。
- 特征:保留底部分隔和下投影,不使用顶部高光。
- 当前组件:
WorkbenchTopBar,工作台顶部 Header。
- 文件:
src/features/workbench/components/workbench-top-bar.tsx。
acrylic-panel
- 用途:承载持续显示或需要集中阅读的主要浮动面板。
- 模糊:使用面板级模糊,20px 至 24px。
- 当前组件:
AgentCommandPanel,Agent 命令面板外壳。AgentCollapsedRail,Agent 收起状态侧栏。ScheduledConditionFeed,预约任务与工况面板,通过MAP_TOOL_PANEL_SURFACE_CLASS_NAME间接使用。LayerControl、ControlPanel、Legend、BaseLayersControl,地图工具面板,通过共享材质常量间接使用。FeaturePopover,要素详情浮层,通过MAP_FOCUS_SURFACE_CLASS_NAME间接使用。FeatureInsightPanel,要素洞察面板。MapDevPanel,地图开发调试面板。AlertMenu、ScenarioMenu、UserMenu,顶部导航下拉菜单。MapNotice,地图通知。
- 直接或间接涉及文件:
src/features/agent/components/agent-command-panel.tsxsrc/features/agent/components/agent-collapsed-rail.tsxsrc/features/map/core/components/map-control-styles.tssrc/features/map/core/components/notice.tsxsrc/features/workbench/components/scheduled-condition-feed.tsxsrc/features/workbench/components/feature-popover.tsxsrc/features/workbench/components/feature-insight-panel.tsxsrc/features/workbench/components/map-dev-panel.tsxsrc/features/workbench/components/workbench-top-bar-menus.tsx
acrylic-control
- 用途:始终悬浮在地图上的紧凑型独立控件。
- 模糊:使用控件级模糊,默认 18px,浅色底图 20px,卫星底图 16px。
- 当前组件:
Toolbar,地图主工具栏。DrawToolbar,绘制工具栏。ZoomControl,缩放控件。ScaleLine,比例尺。BaseLayersControl,底图切换入口与预览控件。map-workbench-page.tsx中的浮动地图控制入口。
- 使用方式:上述组件主要通过
MAP_CONTROL_SURFACE_CLASS_NAME间接引用。 - 共享定义:
src/features/map/core/components/map-control-styles.ts。
glass-transient
- 用途:短时出现、需要突出当前任务状态的玻璃浮层。
- 模糊:沿用控件级模糊,16px 至 20px。
- 当前组件:
AgentTaskTicker的活动任务卡片。
- 文件:
src/features/workbench/components/agent-task-ticker.tsx。 - 约束:仅用于活动任务浮条,非活动堆叠卡改用
surface-control。
2. 内部实体表面
这组样式不使用 backdrop-filter。它们用于亚克力外壳内部,通过不透明度和背景层级提高可读性,避免出现嵌套模糊。
surface-dock
- 用途:预留给固定 Dock 或侧边停靠区域。
- 当前状态:已在
src/styles.css中定义,暂无组件直接使用。 - 适用组件:
- 桌面端固定展开的 Agent 侧栏,前提是它从地图浮层改为占据稳定布局宽度的 Dock。
- 固定展开的预约工况详情侧栏或图层管理侧栏,前提是侧栏长期贴边并参与工作区布局。
- 后续可能增加的对象目录、调度队列等常驻侧栏。
- 不适用:临时弹层、悬浮工具面板、下拉菜单和可覆盖地图的短时侧栏。这些组件仍应使用
acrylic-panel。
surface-control
- 用途:面板内部的 Header、输入区域、筛选器、按钮、紧凑控制区和任务堆叠卡。
- 当前组件范围:
- Agent 收起侧栏条目、Agent 操作摘要按钮、命令面板快捷入口。
- 图层、量测和通用控制面板中的交互控件。
- 预约任务面板与工况详情中的筛选器、元信息块和次级操作。
- 任务浮条的非活动卡片。
- 要素洞察面板的内部按钮。
- Header 下拉菜单的内部控制区。
- 通用
IconButton。
- 主要文件:
src/features/agent/components/agent-collapsed-rail.tsxsrc/features/agent/components/agent-command-panel.tsxsrc/features/agent/components/agent-operational-brief.tsxsrc/features/map/core/components/control-panel.tsxsrc/features/map/core/components/layer-control.tsxsrc/features/map/core/components/measure-panel.tsxsrc/features/workbench/components/agent-task-ticker.tsxsrc/features/workbench/components/scheduled-condition-feed.tsxsrc/features/workbench/components/scheduled-condition-detail-panel.tsxsrc/features/workbench/components/feature-insight-panel.tsxsrc/features/workbench/components/workbench-top-bar-menus.tsx
surface-well
- 用途:低密度内容区、空白支撑区、未选中的面板条目和内部凹槽。
- 当前组件:
LayerPanel、LayerControl的未激活条目。MeasurePanel、DrawToolbar、AnnotationPanel的内部区域。ControlPanel、Legend、BaseLayersControl的分组与空白区域。- Header 下拉菜单的普通菜单项。
- 使用方式:部分组件直接引用,部分通过
MAP_READABLE_SURFACE_CLASS_NAME间接引用。
surface-reading
- 用途:消息、报告、表单、属性列表、时间线内容和其他密集阅读区域。
- 当前组件范围:
- Agent 消息详情、操作摘要、UI Envelope 内容和命令面板空状态。
- 预约任务列表、工况详情、KPI、报告内容与下拉列表。
- 要素洞察、属性列表和底图名称标签。
- Header 下拉菜单中的详情块与空状态。
- 主要文件:
src/features/agent/components/agent-command-panel.tsxsrc/features/agent/components/agent-message-details.tsxsrc/features/agent/components/agent-operational-brief.tsxsrc/features/agent/components/agent-ui-envelope-renderer.tsxsrc/features/workbench/components/scheduled-condition-feed.tsxsrc/features/workbench/components/scheduled-condition-detail-panel.tsxsrc/features/workbench/components/feature-insight-panel.tsxsrc/features/workbench/components/feature-property-list.tsxsrc/features/workbench/components/workbench-top-bar-menus.tsxsrc/features/map/core/components/base-layers-control.tsx
3. 语义状态表面
语义状态表面不使用模糊,只表达业务含义。它们不能替代 acrylic-panel、surface-control 或 surface-reading 来建立界面层级。
| 类名 | 含义 | 当前使用位置 |
|---|---|---|
material-tone-info |
信息、液位等蓝色状态 | FeatureInsightPanel 的雷达液位区块 |
material-tone-normal |
正常、健康、流量或水质状态 | FeatureInsightPanel 的水质、综合监测等区块 |
material-tone-warning |
风险、告警、超声流量等橙色状态 | FeatureInsightPanel 的告警与超声流量区块 |
material-tone-danger |
严重故障或事故状态 | 已定义,建议用于严重事故、关键设备故障和高风险工况内容块 |
material-tone-agent |
Agent 推理或模型建议 | 已定义,建议用于 Agent 解释、推理结论和建议动作内容块 |
未使用样式的建议落点
surface-dock
建议用于参与页面布局的常驻停靠区,而不是覆盖在地图上的浮层。现有组件中,以下场景适合在布局调整后使用:
AgentCommandPanel的桌面常驻模式。只有当面板固定贴左、占据稳定宽度并推动地图安全区时才使用。ScheduledConditionFeed或ConditionDetailPanel的常驻右侧模式。适用于调度员持续对照地图与工况详情的工作流。LayerPanel的常驻图层目录模式。适用于图层较多、需要持续管理的专业工作台。
如果组件仍然悬浮在地图上、可以随时关闭或与其他浮层替换,应继续使用 acrylic-panel。
material-tone-danger
建议用于已经确认的严重业务状态,不用于普通校验失败或短暂接口错误。现有组件中适合的落点包括:
FeatureInsightPanel:要素状态为critical、严重故障、爆管或关键设备失效时的状态说明区块。ScheduledConditionDetailPanel:工况风险等级为critical,或任务状态为error且代表真实运行事故时的风险摘要和影响范围区块。MapNotice:仅在需要持续强调严重运行事故时用于通知内容区,不替换通知最外层的acrylic-panel。- Agent 权限或确认卡片:仅当待执行动作具有明确的高风险业务后果时使用,不能仅因提交失败就使用。
不应使用在网络请求失败、加载失败、表单校验错误等通用技术错误上。这类错误继续使用局部红色图标、边框或文字即可,避免把技术故障误读为管网事故。
material-tone-agent
建议用于明确由 Agent 或模型生成的内容,帮助用户区分事实数据、业务状态与机器推理。现有组件中适合的落点包括:
FeatureInsightPanel的“Agent 解释”区块。该区块目前使用material-tone-warning,如果内容只是解释或推理而非风险告警,更适合改用material-tone-agent。AgentOperationalBrief:Agent 生成的任务判断、建议动作或需要人工确认的结论区块。AgentMessageDetails:推理摘要、模型结论、建议方案等非原始证据内容。AgentUiEnvelopeRenderer:由 Agent 返回的建议面板或注册组件中的结论区块。ScheduledConditionDetailPanel:Agent 针对工况生成的处置建议区块。
原始监测值、设备属性、人工录入内容和系统事实不应使用该样式。即使这些内容出现在 Agent 面板内,也应继续使用 surface-reading 或对应的业务状态色。
共享类映射
地图核心组件通过 src/features/map/core/components/map-control-styles.ts 复用材质类,避免在各组件中重复写样式值。
| 共享常量 | 实际材质类 | 典型用途 |
|---|---|---|
MAP_CONTROL_SURFACE_CLASS_NAME |
acrylic-control border |
工具栏、缩放、比例尺、底图入口 |
MAP_TOOL_PANEL_SURFACE_CLASS_NAME |
acrylic-panel border |
图层、图例、控制和预约任务面板 |
MAP_FOCUS_SURFACE_CLASS_NAME |
acrylic-panel border |
要素详情等焦点浮层 |
MAP_READABLE_SURFACE_CLASS_NAME |
surface-well border |
面板内部低密度区域 |
MAP_READABLE_SURFACE_STRONG_CLASS_NAME |
surface-control border |
面板内部高可读控制区 |
自适应与无障碍规则
data-basemap-tone="light"会提高部分面板模糊强度,并降低导航、控件和任务浮条的背景不透明度。data-basemap-tone="satellite"会提高背景不透明度、轮廓和阴影强度,压制卫星底图纹理。prefers-reduced-transparency: reduce下,亚克力和玻璃表面会切换到接近不透明的背景并关闭模糊。- 不支持
backdrop-filter的浏览器使用同样的高不透明度回退。 forced-colors: active下,材质背景和边框改用系统颜色,并关闭背景图与阴影。
使用约束
- 一个浮动区域只允许最外层使用
acrylic-*或glass-transient。 - 外层亚克力内部使用
surface-control、surface-well或surface-reading,不要叠加第二层模糊。 - 密集文字、表格、属性和值必须落在
surface-reading等高可读表面上。 material-tone-*只表达状态,不表达层级,也不添加模糊。- 新增地图控件时优先复用
map-control-styles.ts中的共享常量。 - 组件只负责布局、圆角和交互状态,材质颜色、边框和阴影由全局语义类统一维护。
当前待清理项
surface-dock可在固定 Dock 落地时启用。如果产品不计划引入参与布局的常驻侧栏,可以移除该样式。material-tone-danger应等待明确的严重业务状态落点,不要为了消除未使用状态而套用到通用错误提示。material-tone-agent可优先用于FeatureInsightPanel的“Agent 解释”和 Agent 建议内容,替代不准确的警告语义。- Agent 面板仍有少量局部类直接使用
--surface-control、--surface-reading或自定义透明背景。后续统一材质语义时,应评估是否迁移到对应的surface-*类。