16 KiB
16 KiB
LN-BI UI 优化待办清单
生成日期:2026-09-20 来源:全局外壳/导航、数据看板与图表、业务操作页面三路 UI/UX 审查汇总 用法:
- [ ]为未完成,- [x]为已完成;每条附文件:行号证据,完成后建议连同代码一起提交。 关联文档:../LN-BI-项目分析报告.md§11.4、../LN-BI-重构方案.md阶段 5/6
P0 可用性与数据信任(最优先)
可访问性:下拉组件
- SearchSelect 键盘/读屏不可用:补
role="combobox"+aria-expanded+ listbox/option 语义、↑↓/Enter/Escape,或直接替换 Headless UI / Radix Combobox —src/components/SearchSelect.tsx:47-68 - MultiSearchSelect 同上,且焦点环颜色与单选版不一致(emerald vs blue)—
src/components/MultiSearchSelect.tsx:59-85 - mileage SearchableSelect 选项为裸 div,键盘不可达 —
src/modules/mileage/monitoring/components/SearchableSelect.tsx:60-72 - 排序表头补
aria-sort;三张 div 模拟表格中期换成真<table>—src/modules/mileage/daily-report/VehicleTable.tsx:220-271、GroupRow.tsx:86-132、ElectricDaily.tsx:124-186、HydrogenDaily.tsx:192-272
可访问性:弹窗/全屏
- 抽共用 Modal/BottomSheet 壳:统一
role="dialog" aria-modal、Escape 关闭、遮罩点击关闭、焦点圈禁与还原、滚动锁定、移动端安全区 — 参考src/components/feedback/FeedbackModal.tsx:59-66、FeedbackHistoryDrawer.tsx:67-83 - 全屏监控/全屏表格补 aria-label + Escape 关闭 + 打开时焦点移到关闭按钮 —
src/modules/mileage/monitoring/components/FullscreenMonitoring.tsx:111-119、src/modules/mileage/statistics/FullscreenTargetTable.tsx:49-60 - 抽
useScrollLockhook,统一锁定 body 滚动(VehicleDetailModal/FlowDetailModal/NotificationHistory 目前未锁)—src/modules/assets/components/VehicleDetailModal.tsx:47、FlowDetailModal.tsx:33、src/modules/scheduling/NotificationHistory.tsx:122 - 移动端底栏分组弹层:修溢出屏幕(定位约束)、加遮罩点击关闭、活动项补
aria-current—src/components/Shell.tsx:194-206 - 全部图标按钮补
aria-label/title(监控工具栏等)—src/modules/mileage/monitoring/components/MonitoringToolbar.tsx:88-93 - 移动端卡片用 span 冒充可点击元素:改
<button type="button">+ 稳定业务 key —src/modules/assets/components/overview/AssetSummaryMobileCards.tsx:60-63、InventoryMobileList.tsx:50,93
数据可信
- 全屏监控筛选口径与普通视图静默不一致:全屏复用同一
monitoringQuery,或在全屏头部明示"以下筛选未生效:项目/主体/里程区间" —src/modules/mileage/monitoring/query-model.ts:92-96、MonitoringView.tsx:108-110 - 热力图刷新期间旧数据无标识:请求期间地图区加半透明遮罩 + spinner,或 KPI/热力层
opacity-50过渡(两个热力图文件同步改)—src/modules/vehicle-heatmap/VehicleHeatmapModule.tsx:73-92,143-147、src/modules/hydrogen-heatmap/HydrogenHeatmapModule.tsx - 洞察卡片"月度动能"对进行中当月做按天折算或加"本月未完整"标注;正收益改用 TrendingUp/CheckCircle 图标 —
src/modules/energy/hydrogen-overview/model.ts:64-66、components/InsightCards.tsx:77-79 - 区分"无数据"与"数据未就绪"两种空态文案;未就绪时隐藏 KPI 行 —
src/modules/energy/ElectricDaily.tsx:62,101-119、HydrogenDaily.tsx:91-109
写操作防错与反馈
- 「登记干预」加二次确认弹层(复用 BatchConfirmModal 底部弹模式,展示 原车牌→候选车牌+客户)—
src/modules/scheduling/SwapPreview.tsx:33-40,155-163 - 批量干预成功后保持
resp.message可见(弹窗延迟关闭或页面 Toast),失败才留在弹窗内 —src/modules/scheduling/SchedulingModule.tsx:142-144、scheduling-module/BatchConfirmModal.tsx:59-61 - 替换全部原生 alert/confirm 为统一 Toast/内联错误 —
src/modules/scheduling/SwapPreview.tsx:44-47、NotificationHistory.tsx:109-110
上传/导入工作流
- UploadDropzone 前置校验扩展名/大小并内联报错;uploading 期间禁用点击/拖入防并发 —
src/modules/ele/import-page/UploadDropzone.tsx:42-58、EleImportPage.tsx:77-95 - 大文件上传给进度反馈(XMLHttpRequest 进度),成功后状态改"✓ 已导入,点击重新上传" —
src/modules/ele/EleImportPage.tsx:77-95 - 导入记录表分页或"加载更多",修 total 与可见 50 条脱节;搜索改防抖即时生效或显式搜索按钮;输入框加清除按钮 —
src/modules/ele/EleImportPage.tsx:58、import-page/RecordFilters.tsx:30 - 空态区分"无记录"与"筛选无结果" —
src/modules/ele/import-page/RecordTable.tsx:46
P1 明显体验缺陷
加载/刷新范式统一(目标:氢能总览为模板)
- 日报已有数据时改顶部进度条 + 内容淡化(去掉全屏遮罩),取消或缩短 280ms 强制延迟;全屏遮罩仅留首次加载 —
src/modules/mileage/DailyReportView.tsx:24,134-136、MileageLoadingOverlay.tsx:13 - 统计报表补骨架屏 + ErrorState + 重试,不再静默吞错 —
src/modules/mileage/StatisticsView.tsx:39-100 - 电能/氢能"每日"页补首屏骨架屏 —
src/modules/energy/ElectricDaily.tsx:131-132、HydrogenDaily.tsx:208-209 - 电能总览 LoadingState 单卡片升级为骨架屏 —
src/modules/energy/ElectricOverview.tsx:31
布局错位与遮挡
- 监控 KPI 吸顶条按断点修正 sticky 偏移(导航 62px + 顶栏 48px),375px 与 1440px 实机滚动验证 —
src/modules/mileage/monitoring/components/MonitoringSummary.tsx:27、src/modules/mileage/MileageModule.tsx:33 - 面包屑遮罩与页面内容重叠:
<main>加md:pt-12或 PageFrame 桌面顶距提至 ≥56px —src/components/Shell.tsx:159-164、src/components/ui/surface.tsx:34 - 面包屑纳入子 tab(如
羚牛氢能 BI / 里程管理 / 统计报表),结构化 breadcrumb 标记;移动端补子 tab 位置指示 —src/components/Shell.tsx:160-163、src/modules/energy/useHashSubTab.ts:30-35
移动端专项
- 热力图移动端图例不直接隐藏:折叠为渐变条按钮,点击展开 —
src/modules/vehicle-heatmap/VehicleHeatmapModule.tsx:220、src/modules/hydrogen-heatmap/HydrogenHeatmapModule.tsx:206 - VehicleDetailModal 客户视图 13 列在移动端改卡片列表(借鉴 FlowDetailModal 模式)—
src/modules/assets/components/VehicleDetailModal.tsx:194-236 - 库存统计筛选弹层加遮罩点击关闭或改底部弹层 —
src/modules/assets/components/overview/InventoryStatisticsSection.tsx:85 - 地图点击查询打临时 Marker 或二次确认,避免误点覆盖概览 —
src/modules/vehicle-heatmap/VehicleHeatmapModule.tsx:94-103 - 热力图 ToolBar/Scale 避免与底部详情面板重叠(改左上或随面板状态调整)—
src/modules/vehicle-heatmap/AmapHeatmapCanvas.tsx:88-89
视觉一致性
- 次级文字对比度整改:定义对比度达标的语义色 token(slate-500 起步),全站替换 9–12px 的
text-slate-400/300关键文字 —src/components/ui/surface.tsx:137,181,269、src/components/Shell.tsx:122,154,186 - 全站字号下限 10–11px,清掉 7–8px —
src/modules/mileage/monitoring/components/VehicleList.tsx:77-126、FullscreenMonitoring.tsx:159-318、MonitoringSummary.tsx:30-44 - SearchSelect/MultiSearchSelect 统一到 slate 系 +
rounded-xl+ 统一 focus ring,尺寸默认值移入组件内部 —src/components/SearchSelect.tsx:34,48、MultiSearchSelect.tsx:46 - 资产域表格数字列统一右对齐 +
tabular-nums,表头随列对齐 —src/modules/assets/components/overview/AssetSummaryDesktopTable.tsx:22-34,87-192、InventoryDesktopTable.tsx:36,76(对齐标准:src/modules/ele/import-page/BatchTable.tsx:27-47) - 分组大表表头 sticky + 容器右缘渐变阴影提示可横滑 —
src/modules/assets/components/overview/AssetSummaryDesktopTable.tsx:16-17
筛选/标签交互
- ActiveFilterTags 默认日期区间不进"已选条件"标签(区间降级为统计周期信息条)—
src/modules/mileage/monitoring/components/ActiveFilterTags.tsx:90-97、MonitoringView.tsx:68-69 searchTerm死筛选:工具栏补搜索框,或删除该状态 —src/modules/mileage/MonitoringView.tsx:43、query-model.ts:44- 筛选统一即时生效(防抖),删除 filterMileageRange/appliedMileageRange 双状态 —
src/modules/mileage/monitoring/components/FilterPanel.tsx:259-267、MonitoringView.tsx:64-65 - 筛选 tag 清除热区扩至 24px+,tag 整片可点清除 —
src/modules/scheduling/scheduling-module/ActiveFilterTags.tsx:15-20 - 多选模式补"全选当前筛选结果";不可选项加
title="已干预,不可重复登记"—src/modules/scheduling/SuggestionList.tsx:85-103 - 监控工具栏快速区间补"近7天" —
src/modules/mileage/monitoring/components/MonitoringToolbar.tsx:149-155
小 Bug 集群(改动极小,顺手修)
- TargetDetailPanel:徽标硬编码"在线"改随
isOnline;ChevronDown 条件旋转;非法类名bg-slate-50/50/50—src/modules/mileage/statistics/TargetDetailPanel.tsx:90-95,213,216-218 - 图表车型长名截断加
title悬浮完整名,复用 shortTargetName 缩写规则 —src/modules/mileage/daily-report/ReportCharts.tsx:111、GroupRow.tsx:94 - 热力图默认日期兜底改为"近 30 天"由当前日期推导 —
src/modules/vehicle-heatmap/VehicleHeatmapModule.tsx:9-10、src/modules/hydrogen-heatmap/HydrogenHeatmapModule.tsx:9-10 - 堆叠柱 radius 接缝缺口 —
src/modules/mileage/daily-report/ReportCharts.tsx:114-115 - ReportDatePicker 补点击外部/Esc 关闭;日期加业务下界 —
src/modules/mileage/daily-report/ReportDatePicker.tsx:56-110、ReportHeader.tsx:45-53 - FullscreenTargetTable 行 key 改业务值、补空态、刷新按钮转动反馈 —
src/modules/mileage/statistics/FullscreenTargetTable.tsx:49-54,86 - 电能每日表月份分组行环比列留空问题;氢能每日图 Y 轴
k与 Kg 混淆 —src/modules/energy/ElectricDaily.tsx:124-153、HydrogenDaily.tsx:155 - forceLandscape 监听 resize/orientationchange —
src/modules/mileage/MonitoringView.tsx:298-308 - ReportInsights key 撞车改 index 或 id —
src/modules/mileage/daily-report/ReportInsights.tsx:26 - DailyRangeControls 去掉 onChange+onInput 重复触发、加 max 限制未来日期 —
src/modules/energy/daily-range/DailyRangeControls.tsx:56-72 - ETC 占位页里程碑与 meta 文案矛盾统一 —
src/modules/energy/EtcModule.tsx:12、ETCView.tsx:50 - FeedbackHistoryDrawer 死 prop
onBack移除;截图链接补aria-label;状态文案"已忽略"改"暂不处理" —src/components/FeedbackHistoryDrawer.tsx:44,135-136、FeedbackFab.tsx:169 - MultiSearchSelect 标签移除按钮补
aria-label—src/components/MultiSearchSelect.tsx:40 - SearchSelect 容器 onClick 与 input onFocus 双触发误关问题;清理不可达的 placeholder 分支 —
src/components/SearchSelect.tsx:35,40,45 - FeedbackAdminPage 反馈列表 limit=200 静默截断:加分页或溢出说明;tab 计数改后端聚合 —
src/modules/admin/FeedbackAdminPage.tsx:79,124-171 - VehicleDetailModal 周明细表补空态行;footer 计数口径区分"本周流转 n 台/共 n 台" —
src/modules/assets/components/VehicleDetailModal.tsx:158-178,267 - BatchTable 补空态占位;上传成功后最新批次高亮或加"新"徽标 —
src/modules/ele/import-page/BatchTable.tsx:12 - FlowDateRangePicker 超出 370 天日期直接置灰,而非事后报错 —
src/modules/assets/components/overview/FlowDateRangePicker.tsx:18-19,110 - NotificationHistory 增加相对时间(x 小时/天前);待执行超 48h 加"滞留"警示徽标;"近7天"过滤改后端参数化 —
src/modules/scheduling/NotificationHistory.tsx:67-72,222-228 - SuggestionDetail 当前车摘要 sticky;保留滚动条或滚动阴影 —
src/modules/scheduling/SuggestionDetail.tsx:145-169 - FeedbackFab 改走统一 api-client(401 触发全局登出)—
src/components/FeedbackFab.tsx:16-25(同类:EleImportPage.tsx:23-33、FeedbackAdminPage.tsx:52-53) - 全局补
:focus-visible兜底样式 — 目前仅 4 处模块组件有 - SegmentedNav 的
layoutId加useId()前缀防同页撞车 —src/components/ui/surface.tsx:202-243
P2 体系化改进(对应重构方案阶段 5/6)
- 设计令牌化:
index.css用 Tailwind 4@theme定义语义 token(--color-ink-secondary、--shadow-card、--shadow-nav、--color-surface-bg),替换散落 arbitrary value;删除无人引用的--panel-bg/--hairline—src/index.css:3-7、src/components/ui/surface.tsx:41、src/App.tsx:49、src/components/Shell.tsx:103 - 统一格式化层:
fmtKm三套实现合并到 shared;TrendBadge 环比小数位统一 —src/modules/mileage/daily-report/utils.ts:54、src/modules/mileage/statistics/model.ts:48、src/modules/energy/TrendBadge.tsx:21 - 统一"今天"定义与日期区间预设:日报按上海自然日 / 监控按本地 05:00 / 电能按本地自然日,收敛为一套 —
src/modules/mileage/daily-report/utils.ts:13-24、monitoring/date-range.ts:11-15、energy/daily-range/model.ts:22-39 - 配置化硬编码:高里程告警规则(写死车型名+800km)挪后端或配置常量 —
src/modules/mileage/MonitoringView.tsx:36-40;站点横幅硬编码 —src/modules/energy/ElectricOverview.tsx:50-52 - z-index 分层约定:定义
z-modal/z-overlay等 token,替换z-[1000]/z-[80]/z-[60]随意值 —src/modules/assets/components/FlowDetailModal.tsx:33、VehicleDetailModal.tsx:47、src/modules/scheduling/SwapPreview.tsx:58、NotificationHistory.tsx:122,262 - 错误呈现统一:表单内联错误用统一
FormError组件 +role="alert",对齐 ErrorState —src/components/feedback/FeedbackFormStep.tsx:145、FeedbackHistoryDrawer.tsx:107 - 深色模式显式决策:短期写进设计约定;中期按 令牌化 → Shell/surface → 图表 palette → 地图底图 顺序评估
- 导航扩容策略:一级模块超过 5 个时收口为"更多"抽屉;分组首点直达第一个子模块 —
src/components/Shell.tsx:117,173,183 - PageFrame 拆分:
hideHeader/compactInfo布尔分叉拆成 PageHeader 与 CompactHeader 两个组合 —src/components/ui/surface.tsx:46-110 - 死代码清理:移除 69 处 no-op
<Blur>包裹与DemoModeProvider enabled={false}—src/components/Blur.tsx:13-16、Shell.tsx:93 - 杂项:
cn.ts换 clsx + tailwind-merge —src/lib/cn.ts;RotatingFooterHint keyframes 移入 index.css —src/components/RotatingFooterHint.tsx:43-48;UnauthorizedPage 英文 eyebrow 中文化 —src/auth/UnauthorizedPage.tsx:10;简化 index.css 双层滚动容器 —src/index.css:9-26;相对时间relativeNow5s 整表重渲染优化 —src/modules/mileage/MonitoringView.tsx:131-134;Top5 榜 Y 轴刻度与 width 解耦 —src/modules/energy/hydrogen-overview/components/DistributionCharts.tsx:31-36,62;饼图 >9 区域颜色循环失真 — 同文件 :15-19,109;水印时间戳随会话刷新 —src/components/Shell.tsx:86-90
已确认的正面实践(保持,勿回退)
- 氢能总览:骨架屏 + 非打断 RefreshOverlay(全站推广模板)
- VehicleTable 可点行:role/tabIndex/aria-pressed/键盘支持、吸顶首列 + 右侧阴影
- GroupRow 的 aria-expanded;日报日期写回 URL 可刷新恢复
- BatchTable 数字右对齐 + tabular-nums(资产域对齐目标)
- FlowDetailModal 移动端卡片模式(VehicleDetailModal 降级参考)
- 动效克制(layoutId 弹簧/FadeIn/shimmer 均为 transform/opacity 级)
建议实施顺序
| 阶段 | 内容 |
|---|---|
| 第 1 周 | P0 写操作反馈 / 上传工作流 / 数据可信 / 小 Bug 集群 |
| 第 2 周 | P0 可访问性(Modal 壳 + useScrollLock + 下拉组件)+ 加载范式统一 + 布局错位 |
| 第 3 周 | P1 移动端专项 + 视觉一致性 |
| 持续 | P2 令牌化 → 格式化/日期层 → 配置化(重构方案阶段 5/6) |