# 手动进出场操作页面 — 设计文档 > 日期: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` 字段,页面后续可加拍照上传