日期:2026-07-20 | 优先级:P2
升级现有仪表盘为停车监控大屏。登录后首页展示车位余量、在场车辆、今日收入、今日进出等关键指标,以及通道设备在线状态。
┌─────────────────────────────────────────────────────┐
│ 智慧停车监控 2026-07-20 10:30 │
├──────────┬──────────┬──────────┬────────────────────┤
│ 车位余量 │ 在场车辆 │ 今日收入 │ 今日进出 │
│ 48/50 │ 15 │ ¥1,250 │ 进32 出28 │
├──────────┴──────────┴──────────┴────────────────────┤
│ 设备状态 │
│ ┌─────────────────────────────────────────────────┐│
│ │ ● 入口通道 1 设备1 [在线] │ ● 出口通道 1 ... ││
│ └─────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘
GET /dashboard/monitor
{
"total_spaces": 50,
"used_spaces": 15,
"in_park": 12,
"today_income": 1250.00,
"today_entry": 32,
"today_exit": 28,
"devices": [
{
"channel_name": "入口通道1",
"direction": "in",
"device_name": "入口设备1",
"device_status": "online"
}
]
}
数据来源:
| 字段 | SQL |
|------|-----|
| total_spaces | SUM(parking_lot.capacity) |
| used_spaces | total - COUNT(record WHERE exit_time IS NULL) |
| in_park | COUNT(vehicle_record WHERE exit_time IS NULL) |
| today_income | SUM(payment_record.amount WHERE today) |
| today_entry | COUNT(vehicle_record WHERE entry_time >= today) |
| today_exit | COUNT(vehicle_record WHERE exit_time >= today) |
| devices | channel LEFT JOIN uhf_reader |
| 文件 | 操作 | 说明 |
|---|---|---|
frontend/src/view/dashboard/index.vue |
修改 | 替换现有仪表盘内容 |
frontend/src/api/dashboard.js |
修改/新增 | 加 getMonitor API |
setInterval 10 秒轮询 GET /dashboard/monitoronUnmounted 清除定时器el-statistic 组件(已在收费记录页用过,项目已有此组件)| 文件 | 操作 | 说明 |
|---|---|---|
internal/api/v1/system/sys_dashboard.go |
新增/修改 | GetMonitor handler |
internal/service/system/sys_dashboard.go |
新增/修改 | MonitorData service |
internal/router/system/sys_dashboard.go |
修改 | 注册路由 |
放在 system 模块下(与现有仪表盘接口同位置)。
不新增菜单,直接替换现有仪表盘页面(view/dashboard/index.vue)。原路由 /dashboard 不变。
| 场景 | 处理 |
|---|---|
| 无车辆在场 | used_spaces 和 in_park 显示 0 |
| 设备全部离线 | 设备卡片标红,数字卡片正常显示 |
| 无停车场数据 | total_spaces = 0,显示"未配置" |
| API 异常 | 保留上次数据,不刷新;卡片显示 "--" |