752 lines
17 KiB
Markdown
752 lines
17 KiB
Markdown
|
|
# Dashboard 前端项目技术架构方案
|
|||
|
|
|
|||
|
|
## 1. 方案定位
|
|||
|
|
|
|||
|
|
本文档面向一个全新的 Dashboard 前端项目,不考虑当前商城后台已有技术架构、目录结构和历史包袱。
|
|||
|
|
|
|||
|
|
目标是建设一个适合老板手机查看的 H5 经营驾驶舱,覆盖经营分析、BI 报表、风险预警和数据下钻。项目应具备快速交付、长期可维护、强类型、易扩展、易联调和可独立部署的能力。
|
|||
|
|
|
|||
|
|
## 2. 架构目标
|
|||
|
|
|
|||
|
|
- 支持经营驾驶舱、日报、快报、趋势分析、排行榜、风险预警等 BI 场景。
|
|||
|
|
- 优先支持 H5 移动端展示,适配手机浏览器、企业微信内置浏览器和移动端 WebView。
|
|||
|
|
- 在 PC 浏览器访问时以手机宽度居中展示,不优先建设 PC 后台版。
|
|||
|
|
- 前端可先独立使用 Mock 数据完成页面确认,不依赖后端开发进度。
|
|||
|
|
- 接口契约稳定后,平滑从 Mock 切换到真实 API。
|
|||
|
|
- 支持权限、菜单、主题、国际化、错误边界、埋点和性能监控。
|
|||
|
|
- 支持独立构建、独立部署、独立版本发布。
|
|||
|
|
|
|||
|
|
## 3. 推荐技术栈
|
|||
|
|
|
|||
|
|
### 3.1 核心框架
|
|||
|
|
|
|||
|
|
- 前端框架:`React 19`
|
|||
|
|
- 开发语言:`TypeScript`
|
|||
|
|
- 构建工具:`Vite`
|
|||
|
|
- 包管理器:`pnpm`
|
|||
|
|
- 路由:`React Router`
|
|||
|
|
- 服务端状态:`TanStack Query`
|
|||
|
|
- 客户端状态:`Zustand`
|
|||
|
|
- HTTP 请求:`Axios`
|
|||
|
|
- 图表:`Apache ECharts`
|
|||
|
|
- UI 组件库:`Vant React` 或等价移动端组件库
|
|||
|
|
- 样式方案:`CSS Modules` + `CSS Variables`
|
|||
|
|
- 代码规范:`ESLint` + `Prettier`,或统一采用 `Biome`
|
|||
|
|
- 单元测试:`Vitest`
|
|||
|
|
- 组件测试:`React Testing Library`
|
|||
|
|
- E2E 测试:`Playwright`
|
|||
|
|
- Mock:`MSW`
|
|||
|
|
|
|||
|
|
### 3.2 技术选型理由
|
|||
|
|
|
|||
|
|
`React + TypeScript + Vite` 适合从 0 建设独立 BI Dashboard,生态成熟、类型安全、启动和构建速度快。
|
|||
|
|
|
|||
|
|
`Vant React` 更适合 H5 移动端经营驾驶舱场景,提供移动端表单、弹层、Tab、日期选择、列表、Toast、Dialog 等基础能力,能降低手机端交互开发成本。如果团队最终选用其他 React 移动端组件库,也应满足同等移动端触控和适配能力。
|
|||
|
|
|
|||
|
|
`ECharts` 适合经营分析中的复杂图表需求,包括折线图、柱状图、饼图、仪表盘、热力图和双轴图。移动端使用时需要封装触控友好的 tooltip、缩放和空态,不直接套用 PC 大图表配置。
|
|||
|
|
|
|||
|
|
`TanStack Query` 负责接口数据、缓存、刷新、重试和加载状态,避免把接口数据塞进全局状态。
|
|||
|
|
|
|||
|
|
`Zustand` 只管理前端本地状态,例如主题、底部 Tab、筛选条件、当前快报版本、用户偏好。
|
|||
|
|
|
|||
|
|
## 4. 总体架构
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
Browser[浏览器] --> App[Dashboard App]
|
|||
|
|
App --> Router[路由层]
|
|||
|
|
App --> Layout[H5 布局层]
|
|||
|
|
App --> FeatureModules[业务模块]
|
|||
|
|
App --> Shared[共享能力]
|
|||
|
|
|
|||
|
|
FeatureModules --> BossDashboard[老板驾驶舱]
|
|||
|
|
FeatureModules --> DailyReport[经营日报]
|
|||
|
|
FeatureModules --> TodaySnapshot[今日节点快报]
|
|||
|
|
FeatureModules --> RiskCenter[风险预警中心]
|
|||
|
|
FeatureModules --> DataDrill[数据下钻]
|
|||
|
|
|
|||
|
|
Shared --> ApiClient[API Client]
|
|||
|
|
Shared --> QueryLayer[TanStack Query]
|
|||
|
|
Shared --> Store[Zustand Store]
|
|||
|
|
Shared --> ChartKit[Chart Kit]
|
|||
|
|
Shared --> Permission[权限与移动端导航]
|
|||
|
|
Shared --> Theme[主题系统]
|
|||
|
|
|
|||
|
|
ApiClient --> Backend[BI API 服务]
|
|||
|
|
QueryLayer --> ApiClient
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5. 项目目录设计
|
|||
|
|
|
|||
|
|
建议目录:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
dashboard-frontend/
|
|||
|
|
public/
|
|||
|
|
src/
|
|||
|
|
app/
|
|||
|
|
App.tsx
|
|||
|
|
providers/
|
|||
|
|
router/
|
|||
|
|
layouts/
|
|||
|
|
assets/
|
|||
|
|
components/
|
|||
|
|
common/
|
|||
|
|
charts/
|
|||
|
|
kpi/
|
|||
|
|
list/
|
|||
|
|
feedback/
|
|||
|
|
features/
|
|||
|
|
boss-dashboard/
|
|||
|
|
daily-report/
|
|||
|
|
today-snapshot/
|
|||
|
|
risk-center/
|
|||
|
|
data-drill/
|
|||
|
|
services/
|
|||
|
|
api/
|
|||
|
|
http/
|
|||
|
|
mock/
|
|||
|
|
stores/
|
|||
|
|
hooks/
|
|||
|
|
utils/
|
|||
|
|
types/
|
|||
|
|
styles/
|
|||
|
|
tests/
|
|||
|
|
.env.development
|
|||
|
|
.env.production
|
|||
|
|
package.json
|
|||
|
|
vite.config.ts
|
|||
|
|
tsconfig.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.1 `app`
|
|||
|
|
|
|||
|
|
承载项目启动、全局 Provider、路由、布局和全局配置。
|
|||
|
|
|
|||
|
|
包含:
|
|||
|
|
|
|||
|
|
- 路由初始化
|
|||
|
|
- QueryClient 初始化
|
|||
|
|
- 移动端 UI ConfigProvider
|
|||
|
|
- 权限上下文
|
|||
|
|
- 主题上下文
|
|||
|
|
- 全局错误边界
|
|||
|
|
|
|||
|
|
### 5.2 `features`
|
|||
|
|
|
|||
|
|
按业务功能拆分模块,避免所有页面堆在 `views` 下。
|
|||
|
|
|
|||
|
|
建议模块:
|
|||
|
|
|
|||
|
|
- `boss-dashboard`:老板驾驶舱首页
|
|||
|
|
- `daily-report`:昨日/历史经营日报
|
|||
|
|
- `today-snapshot`:今日 10:15、14:55 快报
|
|||
|
|
- `risk-center`:风险预警列表与处理
|
|||
|
|
- `data-drill`:用户、订单、商品、团队等下钻页
|
|||
|
|
|
|||
|
|
每个模块内部建议结构:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
features/boss-dashboard/
|
|||
|
|
pages/
|
|||
|
|
components/
|
|||
|
|
hooks/
|
|||
|
|
api.ts
|
|||
|
|
types.ts
|
|||
|
|
constants.ts
|
|||
|
|
mock.ts
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.3 `components`
|
|||
|
|
|
|||
|
|
放跨模块复用组件。
|
|||
|
|
|
|||
|
|
建议拆分:
|
|||
|
|
|
|||
|
|
- `common`:页面标题、空状态、加载状态、错误状态
|
|||
|
|
- `charts`:折线图、柱状图、饼图、双轴图、仪表盘
|
|||
|
|
- `kpi`:指标卡、指标组、同比环比组件
|
|||
|
|
- `table`:统一表格封装
|
|||
|
|
- `feedback`:异常提示、状态标签、风险等级标签
|
|||
|
|
|
|||
|
|
### 5.4 `services`
|
|||
|
|
|
|||
|
|
承载接口、HTTP 客户端、Mock 和数据适配。
|
|||
|
|
|
|||
|
|
核心职责:
|
|||
|
|
|
|||
|
|
- 统一请求拦截
|
|||
|
|
- 统一响应解包
|
|||
|
|
- 统一错误提示
|
|||
|
|
- 统一登录态处理
|
|||
|
|
- Mock 与真实 API 切换
|
|||
|
|
- 后端字段到前端视图模型的适配
|
|||
|
|
|
|||
|
|
### 5.5 `types`
|
|||
|
|
|
|||
|
|
放全局类型和跨模块共享类型。
|
|||
|
|
|
|||
|
|
原则:
|
|||
|
|
|
|||
|
|
- 接口响应类型和页面视图类型分开。
|
|||
|
|
- 后端 DTO 不直接污染页面组件。
|
|||
|
|
- 金额、日期、枚举、状态统一定义。
|
|||
|
|
|
|||
|
|
## 6. 模块架构设计
|
|||
|
|
|
|||
|
|
### 6.1 老板驾驶舱
|
|||
|
|
|
|||
|
|
职责:
|
|||
|
|
|
|||
|
|
- 展示昨日经营总览。
|
|||
|
|
- 展示今日 10:15 / 14:55 节点快报。
|
|||
|
|
- 展示趋势图、排行榜、风险预警。
|
|||
|
|
- 提供下钻入口。
|
|||
|
|
|
|||
|
|
页面结构:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
BossDashboardPage
|
|||
|
|
MobileStickyHeader
|
|||
|
|
MobileDateFilterSheet
|
|||
|
|
KpiOverview
|
|||
|
|
TodaySnapshotPanel
|
|||
|
|
TrendSection
|
|||
|
|
RankSection
|
|||
|
|
RiskAlertSection
|
|||
|
|
BottomTabBar
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
H5 展示要求:
|
|||
|
|
|
|||
|
|
- 首屏优先展示 4 个核心 KPI 和今日快报状态。
|
|||
|
|
- 其他 KPI 使用折叠区或分组卡片承载。
|
|||
|
|
- 页面采用单列信息流,不使用 PC 两列 Dashboard。
|
|||
|
|
- 排行榜默认展示 Top 5,点击进入完整列表。
|
|||
|
|
- 筛选条件使用弹层、分段控件或底部 ActionSheet。
|
|||
|
|
|
|||
|
|
### 6.2 经营日报
|
|||
|
|
|
|||
|
|
职责:
|
|||
|
|
|
|||
|
|
- 查看昨日、近 7 天、近 30 天和自定义日期经营数据。
|
|||
|
|
- 支持日报导出。
|
|||
|
|
- 支持历史日期切换。
|
|||
|
|
|
|||
|
|
### 6.3 今日节点快报
|
|||
|
|
|
|||
|
|
职责:
|
|||
|
|
|
|||
|
|
- 展示 10:15 快报。
|
|||
|
|
- 展示 14:55 快报。
|
|||
|
|
- 标识快报状态:待生成、已生成、生成失败、临时数据。
|
|||
|
|
- 支持与昨日同节点或昨日全天对比。
|
|||
|
|
|
|||
|
|
### 6.4 风险预警中心
|
|||
|
|
|
|||
|
|
职责:
|
|||
|
|
|
|||
|
|
- 展示资金、订单、商品、用户、数据质量风险。
|
|||
|
|
- 支持风险等级筛选。
|
|||
|
|
- 支持跳转明细。
|
|||
|
|
- 支持风险状态流转:未处理、处理中、已处理、已忽略。
|
|||
|
|
|
|||
|
|
### 6.5 数据下钻
|
|||
|
|
|
|||
|
|
职责:
|
|||
|
|
|
|||
|
|
- 从 KPI、图表、排行和风险项跳转到明细视图。
|
|||
|
|
- 支持携带筛选条件。
|
|||
|
|
- 支持返回驾驶舱时保留上下文。
|
|||
|
|
|
|||
|
|
## 7. 数据流设计
|
|||
|
|
|
|||
|
|
### 7.1 数据流原则
|
|||
|
|
|
|||
|
|
- 接口数据归 `TanStack Query` 管。
|
|||
|
|
- 页面交互状态归组件本地状态或 `Zustand` 管。
|
|||
|
|
- 复杂筛选条件可以进入 URL Query,方便分享和刷新恢复。
|
|||
|
|
- 图表组件只接收标准化后的数据,不直接请求接口。
|
|||
|
|
|
|||
|
|
### 7.2 数据流示意
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Page as 页面
|
|||
|
|
participant Hook as Query Hook
|
|||
|
|
participant API as API Service
|
|||
|
|
participant Adapter as Data Adapter
|
|||
|
|
participant Chart as Chart/KPI 组件
|
|||
|
|
participant Backend as BI API
|
|||
|
|
|
|||
|
|
Page->>Hook: 传入日期、快报版本、筛选条件
|
|||
|
|
Hook->>API: 请求接口
|
|||
|
|
API->>Backend: HTTP Request
|
|||
|
|
Backend-->>API: DTO Response
|
|||
|
|
API->>Adapter: 字段转换与默认值处理
|
|||
|
|
Adapter-->>Hook: ViewModel
|
|||
|
|
Hook-->>Page: data/loading/error
|
|||
|
|
Page->>Chart: 传入标准图表数据
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 8. 接口契约设计
|
|||
|
|
|
|||
|
|
### 8.1 前端视图模型
|
|||
|
|
|
|||
|
|
前端不直接依赖后端原始字段,统一转换为页面视图模型。
|
|||
|
|
|
|||
|
|
核心模型:
|
|||
|
|
|
|||
|
|
- `DashboardOverview`
|
|||
|
|
- `KpiMetric`
|
|||
|
|
- `TodaySnapshot`
|
|||
|
|
- `TrendSeries`
|
|||
|
|
- `RankItem`
|
|||
|
|
- `RiskAlert`
|
|||
|
|
- `DrillLink`
|
|||
|
|
|
|||
|
|
### 8.2 接口分层
|
|||
|
|
|
|||
|
|
建议接口:
|
|||
|
|
|
|||
|
|
- `GET /dashboard/overview`
|
|||
|
|
- `GET /dashboard/today-snapshot`
|
|||
|
|
- `GET /dashboard/trends`
|
|||
|
|
- `GET /dashboard/ranks`
|
|||
|
|
- `GET /dashboard/risks`
|
|||
|
|
- `GET /dashboard/drill-options`
|
|||
|
|
|
|||
|
|
前端可以先使用相同结构的 Mock 数据,后端上线后只替换请求来源。
|
|||
|
|
|
|||
|
|
### 8.3 错误处理
|
|||
|
|
|
|||
|
|
接口错误分三层:
|
|||
|
|
|
|||
|
|
- 页面级错误:整个模块无法加载。
|
|||
|
|
- 区块级错误:某个图表或榜单失败。
|
|||
|
|
- 字段级兜底:单个指标缺失时显示 `--`。
|
|||
|
|
|
|||
|
|
老板驾驶舱首页不应因为某一个模块失败而整页不可用。
|
|||
|
|
|
|||
|
|
## 9. 状态管理方案
|
|||
|
|
|
|||
|
|
### 9.1 Server State
|
|||
|
|
|
|||
|
|
由 `TanStack Query` 管理:
|
|||
|
|
|
|||
|
|
- 接口缓存
|
|||
|
|
- 自动刷新
|
|||
|
|
- 重试
|
|||
|
|
- loading / error 状态
|
|||
|
|
- 后台静默刷新
|
|||
|
|
- 请求去重
|
|||
|
|
|
|||
|
|
适用数据:
|
|||
|
|
|
|||
|
|
- KPI 数据
|
|||
|
|
- 趋势数据
|
|||
|
|
- 排行数据
|
|||
|
|
- 风险列表
|
|||
|
|
- 快报快照
|
|||
|
|
|
|||
|
|
### 9.2 Client State
|
|||
|
|
|
|||
|
|
由 `Zustand` 管理:
|
|||
|
|
|
|||
|
|
- 当前主题
|
|||
|
|
- 底部 Tab 当前选中状态
|
|||
|
|
- 筛选弹层打开状态
|
|||
|
|
- 当前公司
|
|||
|
|
- 当前快报版本
|
|||
|
|
- 用户偏好
|
|||
|
|
- 全局筛选草稿
|
|||
|
|
|
|||
|
|
### 9.3 URL State
|
|||
|
|
|
|||
|
|
建议进入 URL 的状态:
|
|||
|
|
|
|||
|
|
- 日期范围
|
|||
|
|
- 快报版本
|
|||
|
|
- 风险等级
|
|||
|
|
- 团队 ID
|
|||
|
|
- 下钻来源
|
|||
|
|
|
|||
|
|
这样可以支持刷新恢复和链接分享。
|
|||
|
|
|
|||
|
|
## 10. 图表体系
|
|||
|
|
|
|||
|
|
### 10.1 图表库
|
|||
|
|
|
|||
|
|
推荐使用 `Apache ECharts`。
|
|||
|
|
|
|||
|
|
原因:
|
|||
|
|
|
|||
|
|
- 适合 BI 场景。
|
|||
|
|
- 支持复杂组合图。
|
|||
|
|
- 支持大数据量渲染优化。
|
|||
|
|
- 国内开发者熟悉度高。
|
|||
|
|
- 主题定制能力强。
|
|||
|
|
|
|||
|
|
### 10.2 图表封装原则
|
|||
|
|
|
|||
|
|
不要在业务页面直接写大量 ECharts option。
|
|||
|
|
|
|||
|
|
建议封装:
|
|||
|
|
|
|||
|
|
- `LineTrendChart`
|
|||
|
|
- `BarCompareChart`
|
|||
|
|
- `PieRatioChart`
|
|||
|
|
- `DualAxisChart`
|
|||
|
|
- `GaugeMetricChart`
|
|||
|
|
- `RankBarChart`
|
|||
|
|
|
|||
|
|
业务页面只传入标准数据:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
{
|
|||
|
|
title,
|
|||
|
|
xAxis,
|
|||
|
|
series,
|
|||
|
|
unit,
|
|||
|
|
loading,
|
|||
|
|
empty
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 10.3 图表状态
|
|||
|
|
|
|||
|
|
每个图表必须支持:
|
|||
|
|
|
|||
|
|
- loading
|
|||
|
|
- empty
|
|||
|
|
- error
|
|||
|
|
- normal
|
|||
|
|
- fullscreen
|
|||
|
|
|
|||
|
|
## 11. 权限与安全
|
|||
|
|
|
|||
|
|
### 11.1 权限模型
|
|||
|
|
|
|||
|
|
建议分三层:
|
|||
|
|
|
|||
|
|
- 路由权限:是否能访问驾驶舱。
|
|||
|
|
- 模块权限:是否能看资金、奖金、团队等模块。
|
|||
|
|
- 字段权限:是否脱敏手机号、姓名、金额。
|
|||
|
|
|
|||
|
|
### 11.2 前端安全
|
|||
|
|
|
|||
|
|
- Token 不写死。
|
|||
|
|
- 请求统一携带认证信息。
|
|||
|
|
- 敏感字段按权限展示。
|
|||
|
|
- 不在前端保存数据库连接信息。
|
|||
|
|
- 不在 Mock 数据中使用真实手机号、真实姓名、真实金额。
|
|||
|
|
|
|||
|
|
### 11.3 敏感信息展示
|
|||
|
|
|
|||
|
|
老板角色可以看完整金额。
|
|||
|
|
|
|||
|
|
普通管理角色建议:
|
|||
|
|
|
|||
|
|
- 手机号脱敏。
|
|||
|
|
- 用户姓名部分脱敏。
|
|||
|
|
- 大额资金需要权限。
|
|||
|
|
- 导出需要二次确认。
|
|||
|
|
|
|||
|
|
## 12. Mock 与联调
|
|||
|
|
|
|||
|
|
### 12.1 Mock 优先
|
|||
|
|
|
|||
|
|
第一阶段必须支持无后端运行。
|
|||
|
|
|
|||
|
|
推荐使用 `MSW`:
|
|||
|
|
|
|||
|
|
- 拦截浏览器请求。
|
|||
|
|
- Mock 真实接口。
|
|||
|
|
- 与后端接口格式保持一致。
|
|||
|
|
- 联调时可以逐个接口关闭 Mock。
|
|||
|
|
|
|||
|
|
### 12.2 Mock 数据场景
|
|||
|
|
|
|||
|
|
至少覆盖:
|
|||
|
|
|
|||
|
|
- 昨日经营正常。
|
|||
|
|
- 昨日经营下滑。
|
|||
|
|
- 今日 10:15 已生成。
|
|||
|
|
- 今日 14:55 待生成。
|
|||
|
|
- 今日快报生成失败。
|
|||
|
|
- 风险为空。
|
|||
|
|
- 风险包含红黄灰三级。
|
|||
|
|
- 某个图表接口失败。
|
|||
|
|
- 某个 KPI 缺失。
|
|||
|
|
|
|||
|
|
### 12.3 联调策略
|
|||
|
|
|
|||
|
|
前端接口层设置数据源模式:
|
|||
|
|
|
|||
|
|
- `mock`
|
|||
|
|
- `api`
|
|||
|
|
- `hybrid`
|
|||
|
|
|
|||
|
|
`hybrid` 用于部分接口接真实 API,部分接口继续使用 Mock。
|
|||
|
|
|
|||
|
|
## 13. 样式与主题
|
|||
|
|
|
|||
|
|
### 13.1 设计方向
|
|||
|
|
|
|||
|
|
老板驾驶舱应偏“手机经营简报”风格:信息聚焦、数字醒目、可快速滑动浏览,并兼顾老板在企业微信或手机浏览器内查看的可读性。
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
- 默认浅色主题。
|
|||
|
|
- 后续可支持深色移动端主题。
|
|||
|
|
- 金额、风险、增长下降用统一颜色。
|
|||
|
|
- 卡片信息密度高但不拥挤。
|
|||
|
|
- 关键数字明显大于说明文字。
|
|||
|
|
- 手机首屏必须能看见昨日经营核心结论。
|
|||
|
|
- 底部导航和顶部筛选不遮挡内容。
|
|||
|
|
|
|||
|
|
### 13.1.1 H5 布局要求
|
|||
|
|
|
|||
|
|
- 核心适配宽度:360px、375px、390px、414px。
|
|||
|
|
- PC 浏览器访问时,内容区最大宽度建议 430px 并居中。
|
|||
|
|
- 使用单列信息流。
|
|||
|
|
- KPI 使用 2 列卡片,重点金额卡片可跨 2 列。
|
|||
|
|
- 图表单列展示,高度建议 220px 到 280px。
|
|||
|
|
- 底部 TabBar 需要适配 `safe-area-inset-bottom`。
|
|||
|
|
- 点击热区不小于 44px。
|
|||
|
|
- 不允许页面出现横向滚动条。
|
|||
|
|
|
|||
|
|
### 13.2 主题变量
|
|||
|
|
|
|||
|
|
统一管理:
|
|||
|
|
|
|||
|
|
- 主色
|
|||
|
|
- 第一版确定使用参考图中的活力橙/珊瑚橙作为主色调,主色建议接近 `#ff5b36`,辅色使用橙黄 `#ffb000`,用于核心按钮、选中态、关键图表主线和高亮数字。
|
|||
|
|
- 成功色
|
|||
|
|
- 警告色
|
|||
|
|
- 危险色
|
|||
|
|
- 背景色
|
|||
|
|
- 卡片背景
|
|||
|
|
- 字体颜色
|
|||
|
|
- 边框颜色
|
|||
|
|
- 图表色板
|
|||
|
|
|
|||
|
|
## 14. 性能方案
|
|||
|
|
|
|||
|
|
### 14.1 加载性能
|
|||
|
|
|
|||
|
|
- 路由懒加载。
|
|||
|
|
- 图表组件懒加载。
|
|||
|
|
- 大模块按需加载。
|
|||
|
|
- 首屏接口并行请求。
|
|||
|
|
- 非核心模块延迟加载。
|
|||
|
|
- 移动端首屏优先加载 KPI 和快报,排行榜、风险列表可延迟加载。
|
|||
|
|
|
|||
|
|
### 14.2 渲染性能
|
|||
|
|
|
|||
|
|
- 大表格虚拟滚动。
|
|||
|
|
- 图表数据降采样。
|
|||
|
|
- 趋势图默认展示合理时间窗口。
|
|||
|
|
- 避免父组件频繁重渲染图表。
|
|||
|
|
- ECharts 实例销毁和 resize 管理统一封装。
|
|||
|
|
|
|||
|
|
### 14.3 数据刷新
|
|||
|
|
|
|||
|
|
- 昨日数据不频繁刷新。
|
|||
|
|
- 今日快报按节点刷新。
|
|||
|
|
- 风险预警可设置 1 到 5 分钟刷新。
|
|||
|
|
- 页面不可见时暂停自动刷新。
|
|||
|
|
|
|||
|
|
## 15. 测试策略
|
|||
|
|
|
|||
|
|
### 15.1 单元测试
|
|||
|
|
|
|||
|
|
覆盖:
|
|||
|
|
|
|||
|
|
- 数据适配器
|
|||
|
|
- 金额格式化
|
|||
|
|
- 日期范围计算
|
|||
|
|
- 风险等级映射
|
|||
|
|
- KPI 状态计算
|
|||
|
|
|
|||
|
|
### 15.2 组件测试
|
|||
|
|
|
|||
|
|
覆盖:
|
|||
|
|
|
|||
|
|
- KPI 卡片不同状态展示。
|
|||
|
|
- 今日快报待生成/已生成/失败状态。
|
|||
|
|
- 风险列表空态和多级风险。
|
|||
|
|
- 图表空数据和错误状态。
|
|||
|
|
|
|||
|
|
### 15.3 E2E 测试
|
|||
|
|
|
|||
|
|
覆盖关键路径:
|
|||
|
|
|
|||
|
|
- 打开老板驾驶舱。
|
|||
|
|
- 切换昨日、近 7 天、近 30 天。
|
|||
|
|
- 切换 10:15 / 14:55 快报。
|
|||
|
|
- 点击 KPI 下钻。
|
|||
|
|
- 点击风险项查看明细。
|
|||
|
|
- 导出日报。
|
|||
|
|
|
|||
|
|
## 16. 部署架构
|
|||
|
|
|
|||
|
|
### 16.1 独立部署
|
|||
|
|
|
|||
|
|
推荐 Dashboard 前端独立部署为静态站点。
|
|||
|
|
|
|||
|
|
部署目标:
|
|||
|
|
|
|||
|
|
- Nginx
|
|||
|
|
- OSS/CDN
|
|||
|
|
- Docker + Nginx
|
|||
|
|
- 企业内网静态服务
|
|||
|
|
|
|||
|
|
### 16.2 环境划分
|
|||
|
|
|
|||
|
|
建议环境:
|
|||
|
|
|
|||
|
|
- `local`
|
|||
|
|
- `development`
|
|||
|
|
- `staging`
|
|||
|
|
- `production`
|
|||
|
|
|
|||
|
|
环境变量:
|
|||
|
|
|
|||
|
|
- `VITE_APP_ENV`
|
|||
|
|
- `VITE_API_BASE_URL`
|
|||
|
|
- `VITE_MOCK_ENABLED`
|
|||
|
|
- `VITE_SENTRY_DSN`
|
|||
|
|
- `VITE_BUILD_VERSION`
|
|||
|
|
|
|||
|
|
### 16.3 版本发布
|
|||
|
|
|
|||
|
|
每次构建写入:
|
|||
|
|
|
|||
|
|
- 构建版本
|
|||
|
|
- Git Commit
|
|||
|
|
- 构建时间
|
|||
|
|
- 环境名称
|
|||
|
|
|
|||
|
|
页面底部或调试面板可查看当前版本,便于排查问题。
|
|||
|
|
|
|||
|
|
## 17. 监控与可观测性
|
|||
|
|
|
|||
|
|
建议接入:
|
|||
|
|
|
|||
|
|
- 前端错误监控
|
|||
|
|
- 页面性能监控
|
|||
|
|
- API 请求耗时统计
|
|||
|
|
- 白屏监控
|
|||
|
|
- 用户行为埋点
|
|||
|
|
|
|||
|
|
关键埋点:
|
|||
|
|
|
|||
|
|
- 老板驾驶舱访问次数
|
|||
|
|
- 日期范围切换
|
|||
|
|
- 今日快报查看
|
|||
|
|
- KPI 点击下钻
|
|||
|
|
- 风险项点击
|
|||
|
|
- 导出日报
|
|||
|
|
|
|||
|
|
## 18. CI/CD
|
|||
|
|
|
|||
|
|
推荐流水线:
|
|||
|
|
|
|||
|
|
1. 安装依赖
|
|||
|
|
2. 类型检查
|
|||
|
|
3. Lint
|
|||
|
|
4. 单元测试
|
|||
|
|
5. 构建
|
|||
|
|
6. 产物上传
|
|||
|
|
7. 部署到目标环境
|
|||
|
|
8. 冒烟测试
|
|||
|
|
|
|||
|
|
质量门禁:
|
|||
|
|
|
|||
|
|
- TypeScript 不允许类型错误。
|
|||
|
|
- Lint 不允许错误。
|
|||
|
|
- 核心测试必须通过。
|
|||
|
|
- 构建产物大小超限需要提醒。
|
|||
|
|
|
|||
|
|
## 19. 开发流程
|
|||
|
|
|
|||
|
|
### 19.1 第一阶段:前端原型
|
|||
|
|
|
|||
|
|
目标:快速给老板确认。
|
|||
|
|
|
|||
|
|
内容:
|
|||
|
|
|
|||
|
|
- 初始化项目。
|
|||
|
|
- 接入 UI 组件库。
|
|||
|
|
- 完成路由和布局。
|
|||
|
|
- 完成老板驾驶舱 Mock 页面。
|
|||
|
|
- 完成 KPI、趋势图、快报、排行、风险预警。
|
|||
|
|
- 完成 H5 底部 Tab、吸顶 Header、筛选弹层和手机端适配。
|
|||
|
|
|
|||
|
|
### 19.2 第二阶段:接口契约
|
|||
|
|
|
|||
|
|
目标:冻结前后端字段。
|
|||
|
|
|
|||
|
|
内容:
|
|||
|
|
|
|||
|
|
- 输出接口字段文档。
|
|||
|
|
- 前端 Mock 与接口文档保持一致。
|
|||
|
|
- 后端按契约实现。
|
|||
|
|
- 前端通过数据适配器兼容后端字段差异。
|
|||
|
|
|
|||
|
|
### 19.3 第三阶段:真实联调
|
|||
|
|
|
|||
|
|
目标:替换 Mock。
|
|||
|
|
|
|||
|
|
内容:
|
|||
|
|
|
|||
|
|
- 接入真实 API。
|
|||
|
|
- 保留 Mock 作为开发和演示能力。
|
|||
|
|
- 校验金额、日期、趋势、风险口径。
|
|||
|
|
- 完成下钻联动。
|
|||
|
|
|
|||
|
|
### 19.4 第四阶段:上线增强
|
|||
|
|
|
|||
|
|
目标:稳定可用。
|
|||
|
|
|
|||
|
|
内容:
|
|||
|
|
|
|||
|
|
- 权限控制。
|
|||
|
|
- 错误监控。
|
|||
|
|
- 性能优化。
|
|||
|
|
- 导出能力。
|
|||
|
|
- 深色移动端主题。
|
|||
|
|
|
|||
|
|
## 20. 推荐里程碑
|
|||
|
|
|
|||
|
|
- 第 1 到 2 天:项目初始化、H5 路由、移动端布局、主题、Mock 框架。
|
|||
|
|
- 第 3 到 5 天:老板驾驶舱 H5 核心页面,包括 KPI、今日快报、趋势、排行、风险。
|
|||
|
|
- 第 6 到 7 天:老板确认与页面调整。
|
|||
|
|
- 第 8 到 10 天:接口契约冻结,接入第一批真实 API。
|
|||
|
|
- 第 11 到 14 天:完整联调、权限、错误处理、基础测试。
|
|||
|
|
- 第 15 天以后:快照、导出、监控、深色主题和必要的 PC 预览适配。
|
|||
|
|
|
|||
|
|
## 21. 不建议第一版做的事
|
|||
|
|
|
|||
|
|
- 不做复杂自定义 BI 报表编辑器。
|
|||
|
|
- 不做多租户平台化架构。
|
|||
|
|
- 不做拖拽式大屏搭建。
|
|||
|
|
- 不做 PC 后台完整版本。
|
|||
|
|
- 不做全量数据仓库前端建模。
|
|||
|
|
- 不把所有历史后台功能重新做一遍。
|
|||
|
|
- 不在前端处理复杂财务计算,前端只展示后端已确认口径的数据。
|
|||
|
|
|
|||
|
|
## 22. 最终建议
|
|||
|
|
|
|||
|
|
建议采用:
|
|||
|
|
|
|||
|
|
- `React 19 + TypeScript + Vite`
|
|||
|
|
- `Vant React` 或等价移动端组件库
|
|||
|
|
- `TanStack Query + Zustand`
|
|||
|
|
- `ECharts`
|
|||
|
|
- `MSW`
|
|||
|
|
- `Vitest + Testing Library + Playwright`
|
|||
|
|
|
|||
|
|
第一版以“老板在手机上能看懂、能确认、能下钻”为核心,先交付独立 H5 Mock Dashboard。确认后再接真实接口和快照数据,避免后端先做大量数据聚合后发现展示口径需要重改。
|