Files

143 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 频谱监测性能实验台 UI Spec
_实现约束与验收基准 · Web / Vue · 2026-08-04_
---
## 📋 需求拆解
| 项目 | 定义 |
| --- | --- |
| 页面类型 | 高密度工程监测台 |
| 目标用户 | 频谱监测、无线电和前端性能工程师 |
| 核心任务 | 调整负载参数并观察曲线、瀑布及性能指标 |
| 首屏主信息 | 运行状态、FPS、数据率、渲染耗时、频谱视图 |
| 次要信息 | GPU 内存估算、丢帧、端到端延迟、选区结果 |
| 平台 | 桌面 Web 优先,平板可查看,移动端仅用于诊断 |
| 数据源 | Web Worker 模拟二进制强度帧 |
必须包含正常、暂停、配置应用中、WebGL 不支持和 Worker 异常状态。页面不包含营销内容,不使用装饰型卡片;控制条和性能条保持紧凑,主区域用于频谱数据。
## 🎯 页面规格
```yaml
screen:
name: 频谱监测性能实验台
surface: web
type: dashboard
goal: 测量全频或多窗口曲线与瀑布图的浏览器性能边界
target_users:
- 频谱监测工程师
- 前端性能工程师
primary_task: 配置数据规模并在交互过程中判断是否满足性能目标
information_density: high
visual_style: 安静、专业、偏仪器界面
platform:
stack: Vue 3 + TypeScript + Web Worker + WebGL2
existing_components:
- lucide-vue-next
state_management: Vue Composition API local state
routing_or_navigation: 单页面
design_system: 项目内紧凑变量与原生表单控件
layout:
shell: 固定标题与控制区、性能状态条、可滚动频谱区域
max_width_or_device_rule: 桌面占满可用宽度,最小支持 768px
background: 中性深灰仪器背景
content_container: 全宽无装饰外卡片
regions:
- id: control_bar
name: 测试控制
priority: high
position: 顶部
adaptive_behavior: 窄屏换行
- id: metrics_bar
name: 性能指标
priority: high
position: 控制区下方
adaptive_behavior: 自动换列
- id: spectrum_surface
name: 频谱与瀑布
priority: high
position: 主内容区
adaptive_behavior: 1 至 4 列响应式网格
- id: selection_feedback
name: 选区结果
priority: medium
position: 性能条右侧
adaptive_behavior: 窄屏独占一行
interactions:
- name: 应用负载配置
trigger: 点击应用按钮
result: 重建 Worker 数据规模和 GPU 纹理
feedback: 指标归零并显示运行状态
risk: none
- name: 暂停数据流
trigger: 点击暂停按钮
result: Worker 停止生成帧
feedback: 状态显示已暂停
risk: none
- name: 调整阈值
trigger: 拖动阈值滑块
result: 所有曲线更新阈值线和超限颜色
feedback: 实时显示 dBm 数值
risk: none
- name: 框选频率区域
trigger: 在任一窗口按下并拖动
result: 显示矩形和频率范围
feedback: 性能条显示窗口编号与起止频率
risk: none
tokens:
color_style: 中性深色背景,青绿数据,黄色阈值,红色告警
primary: "#2dd4bf"
success: "#55d187"
warning: "#f5c451"
danger: "#ff735f"
background: "#101416"
typography: 系统无衬线字体与等宽数字
spacing: 4/8/12/16/24
radius: 4px
elevation_or_shadow: 无大面积阴影,仅使用边框分层
density: compact
adaptive:
desktop: 1440px 以上显示四列频率窗口
tablet: 768 至 1199px 显示两列
mobile: 低于 768px 显示单列并允许控制条换行
text_scale: 支持浏览器 125% 缩放且不重叠
orientation: 桌面横向优先
accessibility:
semantics: Canvas 具有描述文本,每个频率窗口具有可访问名称
focus_order: 配置控件、运行控制、频谱窗口
labels: 图标按钮必须提供 aria-label 和 title
contrast: 文本和状态色满足深色背景可读性
motion: prefers-reduced-motion 下关闭非必要过渡
touch_targets: 交互控件最小高度 32px
```
## ✅ 验收标准
1. 支持 1、8、16、32、64 个窗口以及 512 至 8192 FFT 点
2. 每个窗口同时出现当前曲线、阈值线和瀑布历史
3. 参数应用后不刷新页面,指标和纹理正确重置
4. 框选后显示频率范围,选择层不改变 Canvas 尺寸
5. 实时显示 FPS、接收频率、吞吐、上传、绘制、延迟、丢帧和纹理内存
6. FFT TypedArray 不进入 Vue 深层响应式状态
7. 桌面、平板和移动宽度无文本重叠或水平溢出
8. WebGL2 初始化失败时显示明确错误,而不是空白画布
## 🔍 待实测问题
- 目标设备在 64 × 4096 × 20 Hz 下的 Worker 生成能力
- 不同 GPU 对 `R8 texture2DArray` 连续行上传的耗时差异
- 画布高度、设备像素比和多窗口布局对填充率的影响
- 8192 点曲线使用原始 `LINE_STRIP` 时是否需要屏幕空间 LOD
---
_最后更新:2026-08-04_