📚 更新文档内容
This commit is contained in:
parent
51cda5a8be
commit
40e74a645b
116
README.md
116
README.md
|
@ -1,4 +1,114 @@
|
||||||
# vehicle-monitor
|
# AgvVision-Web | 工业级数据大屏解决方案
|
||||||
|
|
||||||
智慧智能监管中心
|
   
|
||||||
车辆监控中心
|
|
||||||
|
**企业级数据可视化大屏,支持动态轮询、自动适配、高保真UI还原**
|
||||||
|
|
||||||
|
## 🌟 核心功能
|
||||||
|
|
||||||
|
- **5大动态页面**:停车场、数据分析、大数据、社区、经营监管
|
||||||
|
- 登录页(UI无登录逻辑):`/login`
|
||||||
|
- **智能屏幕适配**:
|
||||||
|
- 支持 `postcss-px-to-viewport`(精准vw单位)
|
||||||
|
- 支持 `autofit`(百分比缩放,兼容不同分辨率)
|
||||||
|
- **高性能轮询**:
|
||||||
|
- 全接口Mock(`vite-plugin-fake-server`)
|
||||||
|
- 1秒级数据刷新
|
||||||
|
- **图表黑科技**:
|
||||||
|
- 饼图自动轮播高亮(无感hover效果)
|
||||||
|
- ECharts动态渲染优化
|
||||||
|
|
||||||
|
### **📌 大屏项目核心功能总结**
|
||||||
|
|
||||||
|
✅ **5大页面**(Vue3 + ECharts + 轮询Mock数据)
|
||||||
|
- **登录页**(无逻辑,纯UI)
|
||||||
|
- **主页**(导航跳转:停车场、数据分析、大数据、社区、经营监管)
|
||||||
|
- **停车场**(动态数据刷新)
|
||||||
|
- **数据分析**(饼图轮播 + 自动高亮)
|
||||||
|
- **大数据**(动态图表)
|
||||||
|
- **社区**(动态数据)
|
||||||
|
- **经营监管**(静态页面)
|
||||||
|
|
||||||
|
✅ **关键技术点**
|
||||||
|
- **屏幕适配**:支持 `postcss-px-to-viewport-8-plugin`(vw方案)和 `autofit`(百分比缩放)
|
||||||
|
- **数据Mock**:`vite-plugin-fake-server` 模拟动态接口(GET请求,1秒刷新)
|
||||||
|
- **图表交互**:
|
||||||
|
- 饼图自动轮播高亮(`dispatchAction` 控制 `highlight/downplay`)
|
||||||
|
- 所有图表(除经营监管)支持实时刷新
|
||||||
|
|
||||||
|
## 🛠️ 技术栈
|
||||||
|
| 领域 | 技术选型 |
|
||||||
|
| -------- | ------------------------------------------------------------ |
|
||||||
|
| 前端 | Vue3 + Pinia + ECharts + Web Workers(数据压缩) |
|
||||||
|
| 后端模拟 | vite-plugin-fake-server(零成本Mock) |
|
||||||
|
| 工程化 | Vite + GitLab CI/CD(Docker镜像自动构建) |
|
||||||
|
| 适配方案 | postcss-px-to-viewport-8-plugin / autofit.js(双模式可切换) |
|
||||||
|
|
||||||
|
## 🎬 智能路由动画系统
|
||||||
|
### 特性
|
||||||
|
- **开箱即用**:全局默认淡入淡出动画(`animate.css`驱动)
|
||||||
|
- **灵活覆盖**:支持页面级定制动画效果(如弹跳、缩放等)
|
||||||
|
- **零性能损耗**:`animate__faster`模式+`mode="out-in"`防止渲染冲突
|
||||||
|
|
||||||
|
✅ **精细化路由动画控制**
|
||||||
|
|
||||||
|
- 默认全局动画:`fadeInLeft/fadeOutLeft`(平滑渐进)
|
||||||
|
- 支持页面级定制:通过`route.meta.transition`覆盖默认效果(如案例中的`bounceInUp`)
|
||||||
|
- 性能优化:`animate__faster`强制开启硬件加速,避免页面切换卡顿
|
||||||
|
|
||||||
|
✅ **开发者友好设计**
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 任意路由快速配置动画
|
||||||
|
meta: {
|
||||||
|
transition: {
|
||||||
|
enter: 'animate__zoomIn', // 进入动画
|
||||||
|
leave: 'animate__zoomOut' // 离开动画
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 如何使用?
|
||||||
|
1. **全局默认动画**:无需配置,自动生效
|
||||||
|
2. **自定义动画**:在路由中定义`meta.transition`
|
||||||
|
```ts
|
||||||
|
{
|
||||||
|
path: '/your-route',
|
||||||
|
meta: {
|
||||||
|
transition: {
|
||||||
|
enter: 'animate__zoomIn', // 进入效果
|
||||||
|
leave: 'animate__zoomOut' // 离开效果
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**动画库扩展**:直接使用[animate.css官方类名](https://animate.style/)
|
||||||
|
|
||||||
|
## 📸 效果预览
|
||||||
|
|
||||||
|
| 主页 | 数据分析 |
|
||||||
|
| ------------------------------------------------------------ | ---------------------------------------------- |
|
||||||
|
|  |  |
|
||||||
|
|
||||||
|
## 🚀 快速启动
|
||||||
|
```bash
|
||||||
|
# 开发模式(autofit适配)
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# 生产构建(vw适配)
|
||||||
|
VITE_POST_CSS_PX_TO_VIEWPORT8_PLUGIN=true npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🤔 技术决策
|
||||||
|
### 为什么选择轮询而非WebSocket?
|
||||||
|
- **业务适配**:数据更新频率为1秒/次,轮询足够且更稳定
|
||||||
|
- **企业兼容性**:部分内网禁用WebSocket,轮询通用性更强
|
||||||
|
- **扩展性**:代码预留WebSocket升级接口(`/src/libs/ws.ts`)
|
||||||
|
|
||||||
|
## 📈 性能优化
|
||||||
|
- **轮询防抖**:避免频繁请求导致内存泄漏
|
||||||
|
- **ECharts实例池**:复用图表DOM节点
|
||||||
|
|
||||||
|
## 📜 开源协议
|
||||||
|
MIT License
|
Binary file not shown.
After Width: | Height: | Size: 287 KiB |
Binary file not shown.
After Width: | Height: | Size: 515 KiB |
|
@ -13,14 +13,14 @@ const option: EChartsOption = {
|
||||||
tooltip: { position: 'right', trigger: 'item' },
|
tooltip: { position: 'right', trigger: 'item' },
|
||||||
legend: {
|
legend: {
|
||||||
orient: 'horizontal', // 垂直排列
|
orient: 'horizontal', // 垂直排列
|
||||||
right: 0, // 距离右侧10px
|
right: 0,
|
||||||
left: 240,
|
left: 240,
|
||||||
top: 'center', // 垂直居中
|
top: 'center', // 垂直居中
|
||||||
align: 'left', // 文本左对齐
|
align: 'left', // 文本左对齐
|
||||||
icon: 'circle', // 圆形图标
|
icon: 'circle', // 圆形图标
|
||||||
itemGap: 50, // 图例项间隔
|
itemGap: 50, // 图例项间隔
|
||||||
itemWidth: 10, // 图例标记宽度
|
itemWidth: 14, // 图例标记宽度
|
||||||
itemHeight: 10, // 图例标记高度
|
itemHeight: 14, // 图例标记高度
|
||||||
textStyle: { color: '#fff', fontSize: 14 },
|
textStyle: { color: '#fff', fontSize: 14 },
|
||||||
formatter(name) {
|
formatter(name) {
|
||||||
const series = myChart.getOption().series;
|
const series = myChart.getOption().series;
|
||||||
|
|
Loading…
Reference in New Issue