|
@@ -0,0 +1,129 @@
|
|
|
|
|
+# 手动进出场操作页面 — 设计文档
|
|
|
|
|
+
|
|
|
|
|
+> 日期:2026-07-16 | 优先级:P0-2
|
|
|
|
|
+
|
|
|
|
|
+## 1. 目标
|
|
|
|
|
+
|
|
|
|
|
+为岗亭操作员提供手动进出场操作页面,作为 RFID 自动识别的备用兜底。当 UHF 标签损坏、无标签车辆进入、或 RFID 系统故障时,操作员手动输入车牌/RFID 完成进出场。
|
|
|
|
|
+
|
|
|
|
|
+## 2. 使用场景
|
|
|
|
|
+
|
|
|
|
|
+- **主要场景**:RFID 不可用时的备用操作(低频)
|
|
|
|
|
+- **用户**:管理员(888)、操作员(618)
|
|
|
|
|
+- **菜单位置**:停车管理 → 进出场操作
|
|
|
|
|
+
|
|
|
|
|
+## 3. 页面结构
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+进出场操作
|
|
|
|
|
+├── Tab:车辆进场 | 车辆出场
|
|
|
|
|
+│
|
|
|
|
|
+├── 输入区
|
|
|
|
|
+│ ├── 车牌号输入框
|
|
|
|
|
+│ ├── RFID 标签输入框
|
|
|
|
|
+│ └── 查询按钮
|
|
|
|
|
+│
|
|
|
|
|
+├── 车辆详情卡片(查询后显示)
|
|
|
|
|
+│ ├── 车牌号、车辆类型、车主名
|
|
|
|
|
+│ ├── 当前在场状态
|
|
|
|
|
+│ └── 进场/出场特有信息
|
|
|
|
|
+│
|
|
|
|
|
+└── 操作区
|
|
|
|
|
+ ├── 进场:停车场下拉选择 + 确认进场按钮
|
|
|
|
|
+ └── 出场:费用信息 + 收费方式 + 确认出场按钮
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 4. 进场流程
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+输入车牌/RFID → 查询车辆
|
|
|
|
|
+ ├─ 找到车辆 → 显示详情,检查是否已入场
|
|
|
|
|
+ │ ├─ 已入场 → 提示"该车辆已在场内"
|
|
|
|
|
+ │ └─ 未入场 → 选择停车场 → 确认进场
|
|
|
|
|
+ └─ 未找到 → 提示"未找到车辆,将按临时车入场"
|
|
|
|
|
+ └─ 选择停车场 → 确认进场
|
|
|
|
|
+
|
|
|
|
|
+确认进场 → POST /vehicle/entry
|
|
|
|
|
+ ├─ 成功 → 提示"入场成功",显示入场时间,清空表单
|
|
|
|
|
+ └─ 失败 → 提示错误原因
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 涉及 API
|
|
|
|
|
+
|
|
|
|
|
+| 接口 | 用途 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `GET /vehicle/get-by-plate?plate_number=` | 根据车牌查询车辆信息 |
|
|
|
|
|
+| `GET /parking/lot/list` | 获取停车场下拉列表 |
|
|
|
|
|
+| `POST /vehicle/entry` | 执行入场 |
|
|
|
|
|
+
|
|
|
|
|
+## 5. 出场流程
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+输入车牌/RFID → 查询车辆
|
|
|
|
|
+ ├─ 找到车辆 → 检查是否有未出场记录
|
|
|
|
|
+ │ ├─ 无未出场记录 → 提示"该车辆不在场内"
|
|
|
|
|
+ │ └─ 有未出场记录 → 显示计费信息
|
|
|
|
|
+ │ ├─ 进场时间
|
|
|
|
|
+ │ ├─ 停留时长
|
|
|
|
|
+ │ ├─ 费用金额
|
|
|
|
|
+ │ ├─ 收费方式选择(现金/扫码/免密,本次先做现金)
|
|
|
|
|
+ │ └─ 确认出场
|
|
|
|
|
+ └─ 未找到 → 提示"未找到车辆信息"
|
|
|
|
|
+
|
|
|
|
|
+确认出场 → POST /vehicle/exit
|
|
|
|
|
+ ├─ 成功 → 提示"出场成功",显示费用,清空表单
|
|
|
|
|
+ └─ 失败 → 提示错误原因
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 涉及 API
|
|
|
|
|
+
|
|
|
|
|
+| 接口 | 用途 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `GET /vehicle/get-by-plate?plate_number=` | 根据车牌查询车辆信息 |
|
|
|
|
|
+| `POST /vehicle/exit` | 执行出场(返回 fee、stayTime、entryTime、exitTime) |
|
|
|
|
|
+
|
|
|
|
|
+## 6. 技术实现
|
|
|
|
|
+
|
|
|
|
|
+### 前端
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| 框架 | Vue 3 + Composition API |
|
|
|
|
|
+| 组件库 | Element Plus(el-tabs、el-form、el-input、el-select、el-button、el-descriptions) |
|
|
|
|
|
+| API 封装 | 复用 `src/api/vehicle.js` 已有的 `vehicleEntry`、`vehicleAppear`、`obtainVehicleLicense` |
|
|
|
|
|
+| 文件位置 | `frontend/src/view/parking/entryExit.vue` |
|
|
|
|
|
+| 路由 | 后端菜单表中新增记录,前端通过动态路由自动加载 |
|
|
|
|
|
+
|
|
|
|
|
+### 后端
|
|
|
|
|
+
|
|
|
|
|
+无需修改。已有 API 全部就绪:
|
|
|
|
|
+- `VehicleEntry` / `VehicleExit` handler 在 `internal/api/v1/vehicle/vehicle.go`
|
|
|
|
|
+- 计费逻辑在 `internal/service/vehicle/vehicle.go` 的 `calculateFee()`
|
|
|
|
|
+- `PassageService` 已抽取公共逻辑(`internal/service/parking/passage.go`)
|
|
|
|
|
+
|
|
|
|
|
+### 涉及文件变更
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 操作 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| `frontend/src/view/parking/entryExit.vue` | 新增 | 进出场操作页面 |
|
|
|
|
|
+| `frontend/src/api/vehicle.js` | 不改 | 已有 entry/exit API |
|
|
|
|
|
+| `internal/initialize/seed.go` | 修改 | 新增菜单记录 + Casbin 规则 |
|
|
|
|
|
+| 后端其他文件 | 不改 | API 已就绪 |
|
|
|
|
|
+
|
|
|
|
|
+## 7. 边界情况
|
|
|
|
|
+
|
|
|
|
|
+| 场景 | 处理方式 |
|
|
|
|
|
+|------|---------|
|
|
|
|
|
+| 输入为空时点查询 | 前端校验,至少填一个(车牌或 RFID) |
|
|
|
|
|
+| 车牌和 RFID 都填 | 优先用车牌号查询 |
|
|
|
|
|
+| 查到的车辆已进场 | 进场 Tab:提示"车辆已入场,请切换到出场";出场 Tab:正常显示费用 |
|
|
|
|
|
+| 查到的车辆不在场内 | 进场 Tab:允许入场;出场 Tab:提示"车辆不在场内" |
|
|
|
|
|
+| 车辆不存在(新临时车) | 进场 Tab:自动创建临时车记录后入场;出场 Tab:提示未找到 |
|
|
|
|
|
+| 未选停车场点确认进场 | 前端校验,提示"请选择停车场" |
|
|
|
|
|
+| API 调用失败 | 显示后端返回的错误信息 |
|
|
|
|
|
+
|
|
|
|
|
+## 8. 后续扩展预留
|
|
|
|
|
+
|
|
|
|
|
+- **关联 UHF 实时扫描**:页面预留"最近扫描"区域,显示 `DeviceManager` 推送的标签列表,点击自动填入
|
|
|
|
|
+- **收费方式**:当前写死现金,后续对接 P0-3 收费模块后,支持扫码/免密
|
|
|
|
|
+- **抓拍图片**:`VehicleEntry`/`VehicleExit` 已有 `EntryImage`/`ExitImage` 字段,页面后续可加拍照上传
|