vehicle-monitor/README.md

122 lines
4.8 KiB
Markdown
Raw Permalink Normal View History

2025-06-02 22:38:05 +08:00
# Central-Monitor-Flex | 数据大屏解决方案
2025-02-25 23:19:32 +08:00
2025-06-03 10:31:53 +08:00
![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)
2025-06-02 22:38:05 +08:00
**企业级数据可视化大屏支持动态轮询、自动适配、高保真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节点