vehicle-monitor/README.md

122 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.

# Central-Monitor-Flex | 数据大屏解决方案
![Vue3](https://img.shields.io/badge/Vue3-4FC08D?logo=vue.js) ![ECharts](https://img.shields.io/badge/ECharts-AA344D?logo=apache) ![Mock数据](https://img.shields.io/badge/MockData-100%Coverage-green) ![轮询优化](https://img.shields.io/badge/轮询延迟-1s以内-blue)
**企业级数据可视化大屏支持动态轮询、自动适配、高保真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/CDDocker镜像自动构建 |
| 适配方案 | 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/)
## 📸 效果预览
| 主页 | 数据分析 |
| ------------------------------------------------------------ | ---------------------------------------------- |
| ![image-20250602221902683](./images/image-20250602221902683.png) | ![QQ202562-22205](./images/QQ202562-22205.gif) |
![image-20250602224251164](./images/image-20250602224305427.png)
![image-20250602224239370](./images/image-20250602224239370.png)
![image-20250602224218621](./images/image-20250602224218621.png)
![image-20250602224204600](./images/image-20250602224204600.png)
## 🚀 快速启动
```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节点