仪表盘开发
管理界面 evs-dash 的技术栈、目录、约定和检查。改界面、加页面之前读一遍。
技术栈
Vue 3.5(<script setup> + TypeScript 严格模式)、Vite、Element Plus(墨松主题)、ECharts(按需引入)、Pinia、Vue Router、vue-i18n、dayjs。回放、看板栅格、Markdown 渲染、日期面板、ECharts 都是异步分包,只在用到时加载。
目录
text
evs-dash/src/
├── modules.ts 模块注册表的前端副本(与服务端 api/modules.json 对照)
├── api/ 全部接口调用:信封、错误、请求头
├── stores/ 会话、工作区(地址栏镜像)、Agent、偏好
├── router/ 路由表(分析页由注册表生成)与守卫
├── layouts/ 空白、工作台、设置三种布局
├── components/ shell · card · chart · data · feedback · form · nav · agent · board
├── composables/ 取数、外观、语言、快捷键、书签……
├── charts/ ECharts 注册、主题、option 生成
├── views/ setup · login · stat · board · agent · system · me
├── locales/ zh-CN.ts、en.ts(键完全一致)
└── styles/ tokens.css(设计变量唯一来源)、element.scss、base.css约定
- 地址栏是状态的唯一来源:项目、日期、对比、筛选、页签都在 query 里;改条件就改 query,刷新和分享得到同一张图。
- 页面不直接调接口、不写 ECharts option:接口走
src/api/,图表走src/components/chart/。 - 不写中英文句子字面量:文案放进
src/locales/zh-CN.ts与en.ts,用t();ESLint 的本地规则会挡住字面量。 - 颜色只用
var(--evs-*):十六进制色值只能出现在src/styles/tokens.css;Stylelint 会检查。官网有一份同名同值的副本,改变量时两边一起改(evs-test的T-D11核对)。 - 数字、时长、日期一律用
utils/format.ts,日期按项目时区(utils/timezone.ts)。 - 给端到端测试用的元素加稳定的
data-testid,浏览器场景在evs-test/dash/。 - 公共组件改动要有测试:同目录的
*.spec.ts里写快照或行为测试。
加一个页面
新的分析模块先按 新增一个统计模块 改服务端和 modules.ts,然后:
- 在
src/views/stat/写页面组件,取数用composables/useModuleData.ts,卡片用components/card/ChartCard.vue。 - 在
src/router/routes.ts里把模块键映射到这个组件(通用排行页复用RankView.vue)。 - 在
src/views/stat/moduleViews.ts补表格列与空态。 - 在
src/components/shell/nav.ts放进侧栏分组,在locales里补nav.<键>。
本机开发与检查
bash
cd evs-dash
yarn install
yarn dev # http://localhost:51322,接口代理到 127.0.0.1:51321
yarn run check # lint、stylelint、typecheck、test、build、size 依次跑;不能省略 run
yarn test:registry # 与 ../evs-aggr/api/modules.json、config-keys.json 对照包体积有预算:首屏 JS(gzip,不含 ECharts)不超过 250KB,ECharts 按需包不超过 250KB,yarn size 检查。
打进二进制
bash
make build-dash # 在仓库根:构建并复制到 evs-aggr/internal/httpserver/dist/
make build # 再编译 build/evstatsdist/ 除 .gitkeep 外不提交,发版时由流水线构建。