Files
supplier-dispatch-h5/.kaifa/调度App H5行驶证拍摄取景引导框.md
T

30 KiB
Raw Blame History

调度App H5行驶证拍摄取景引导框 — 需求文档


需求文档摘要

一句话概括:在调度App H5车辆管理页(vehicleAdd.vue)的行驶证上传流程中,拦截现有 van-uploader 的点击事件,先进入自定义拍摄引导页(WebRTC取景+浅色背景+灰色边框引导框+蓝色角标+Hero提示卡+取景要点卡+预览确认),拍摄确认后将照片传回现有的压缩→上传→OCR流程,实现拍摄环节的引导增强。

核心要点

维度 内容
背景 调度App H5车辆管理页行驶证上传使用 van-uploader 直接调起系统选择器,无拍摄规范提示,导致卡套反光、证件歪斜、文字模糊等问题频发
目标 拦截行驶证槽位点击,进入拍摄引导页(浅色背景+相机预览+引导框+Hero提示卡+取景要点卡),拍摄后预览确认,确认后回到现有压缩→上传→OCR流程
现有流程 van-uploader 点击 → 系统选择器 → after-read 回调 → compressFileItem 压缩 → uploadImage 上传 → ocrHandler OCR识别
改造方案 行驶证槽位点击 → 拍摄引导页(新增) → 预览确认(新增)→ compressFileItem 压缩 → uploadImage 上传 → ocrHandler OCR识别
界面改动 新增拍摄引导页组件 + 预览确认页组件;改造 vehicleAdd.vue 中行驶证三个槽位的点击逻辑
数据规则 无新增字段;引导框样式与文案为前端静态资源;后端接口完全不变
原型 调度App-H5行驶证拍摄取景引导原型.html

技术要点

  • 后端:无需变更,复用现有 POST /order/uploadImagePOST /agg-api/tencent-ocr/unifiedOCR
  • 前端:supplier-dispatch-h5 项目 vehicleAdd.vue 改造 + 新增拍摄引导组件
  • 数据库:无需变更

一、基本信息

项目 内容
需求名称 调度App H5行驶证拍摄取景引导框
提出人
产品负责人 宋志领
所属模块 调度App H5 - 车辆管理(vehicleAdd.vue- 行驶证上传
需求类型 优化
目标版本
紧急程度

二、需求背景

2.1 现有流程

调度App H5车辆管理页面(https://crm1.sino-assist.com/h5/supplier/dispatch/vehicleManage)中,用户在录入或修改车辆信息时,需要上传行驶证主页、副页、车辆照片页。

当前上传流程基于 Vant van-uploader 组件实现:

用户点击 van-uploader 上传槽位
    │
    ▼
系统调起相册/相机选择器(accept="image/*"
    │
    ▼
after-read 回调触发(vehicleLicenseFrontHandler / vehicleLicenseBackHandler / vehicleLicenseCarHandler
    │
    ▼
compressFileItem() 前端压缩(目标 < 5MBJPEG 格式)
    │
    ▼
uploadImage() 上传 → POST /order/uploadImagemultipart/form-data
    │
    ▼
ocrHandler() OCR 识别 → POST /agg-api/tencent-ocr/unifiedOCR
    │
    ▼
回填识别结果到表单字段(车牌号、车架号、所有人等)

现有代码位置

文件 关键方法/组件
supplier-dispatch-h5/src/views/index/vehicleAdd.vue van-uploader 组件(行驶证三个槽位)
supplier-dispatch-h5/src/views/index/vehicleAdd.vue vehicleLicenseFrontHandler() — 行驶证主页上传
supplier-dispatch-h5/src/views/index/vehicleAdd.vue vehicleLicenseBackHandler() — 行驶证副页上传
supplier-dispatch-h5/src/views/index/vehicleAdd.vue vehicleLicenseCarHandler() — 行驶证车辆照片上传
supplier-dispatch-h5/src/views/index/vehicleAdd.vue compressFileItem() — 图片压缩
supplier-dispatch-h5/src/api/mine.js uploadImage() — 上传接口
supplier-dispatch-h5/src/api/mine.js ocrHandler() — OCR 识别接口

2.2 问题分析

当前流程中,用户点击上传槽位后直接调起系统相册/相机选择器,没有任何拍摄规范提示。实际采集到的照片普遍存在以下问题:

  1. 卡套/保护膜未取出:证件装在透明卡套或覆膜中拍摄,塑料/玻璃表面反光,遮盖号牌、车架号等关键字段,导致OCR无法识别。
  2. 摆放不规整:歪斜、弯曲、四角缺角、未对准画面中央,导致自动识别定位失败或字段错位。
  3. 反光与阴影:在强光或灯光直射下拍摄,出现高光斑、阴影遮挡文字,造成文字模糊。

上述问题直接造成行驶证OCR识别失败、审核驳回率升高,服务商需反复重传,拉长车辆录入周期。

2.3 改造方向

参考业界成熟的证件拍摄方案(如银行卡、身份证识别),在拍摄预览界面上叠加半透明取景引导框,配合文字提示,能从源头规范用户拍摄行为,显著提升照片合格率。

改造原则:仅改造拍摄环节(系统选择器 → 自定义拍摄引导页),后续的压缩→上传→OCR流程完全保持不变。


三、需求目标

  1. 用户点击行驶证任一上传槽位时,不再直接调起系统选择器,而是进入自定义拍摄引导页。
  2. 拍摄引导页在相机预览画面上自动叠加半透明取景引导框,框的形状和比例匹配行驶证实际尺寸。
  3. 引导框区域显示明确的文字提示:「请将行驶证从卡套内取出后拍摄,避免反光」「请将证件对准框内,确保边缘完整、文字清晰」。
  4. 引导框适配不同手机屏幕尺寸,在主流移动端设备上显示正常。
  5. 用户点击拍摄后,引导框消失,进入照片预览确认步骤,支持重拍或确认使用。
  6. 用户确认使用后,照片传回现有的 compressFileItemuploadImageocrHandler 流程,后续逻辑完全不变。
  7. 车头照、保单等非行驶证槽位保持现有 van-uploader 直接调起选择器的逻辑,不受影响。

四、功能说明

功能点 1:拦截行驶证槽位点击,进入拍摄引导页

功能概述

项目 内容
功能名称 行驶证槽位点击拦截
涉及页面 vehicleAdd.vue — 行驶证主页、副页、车辆照片页的 van-uploader 组件
触发条件 用户在车辆管理页点击行驶证任一上传槽位(首次上传或重新上传)时触发
处理逻辑 拦截 van-uploader 的默认点击行为(调起系统选择器),改为打开拍摄引导页组件
输出结果 进入拍摄引导页,展示相机预览 + 引导框

改造前后对比

步骤 改造前(现有流程) 改造后
1 点击 van-uploader 槽位 点击 van-uploader 槽位
2 系统调起相册/相机选择器 拦截点击 → 进入拍摄引导页(新增)
3 选择/拍摄照片 相机预览 + 引导框 + 文字提示
4 after-read 回调 点击拍摄 → 预览确认页(新增)
5 compressFileItem 压缩 确认使用 → 构造 file 对象,触发 after-read 回调
6 uploadImage 上传 compressFileItem 压缩(不变
7 ocrHandler OCR 识别 uploadImage 上传(不变
8 回填表单 ocrHandler OCR 识别(不变)→ 回填表单

关键改造点:拍摄引导页确认使用后,需将 Canvas 捕获的图片 Blob 构造为 van-uploaderafter-read 回调所期望的 { file: File, content: dataURL } 格式,从而无缝衔接现有的压缩→上传→OCR流程。


功能点 2:拍摄引导页 — 相机预览 + 引导框

功能概述

项目 内容
功能名称 拍摄取景引导框
涉及页面 新增拍摄引导页组件
触发条件 从行驶证槽位点击进入
处理逻辑 使用 WebRTC getUserMedia 获取摄像头视频流,在 video 元素上全屏展示;叠加浅色背景层(#F5F5F5+ 中央镂空引导框(灰色实线边框 #C2C8D2 + 蓝色 L 形角标 #354D93 + 入场渐显动画)+ 顶部 Hero 提示卡(白底+蓝色图标)+ 取景要点图标卡(do/don't)+ 底部白色拍摄栏
输出结果 用户在规范引导下完成拍摄

界面设计(拍摄引导页示意):

┌─────────────────────────────────────────┐
│  ←  拍摄行驶证主页                       │  ← 顶部导航栏(深蓝 #2C395F)
├─────────────────────────────────────────┤
│                                         │
│  ┌───────────────────────────────────┐  │  ← Hero 提示卡(白底+蓝色图标)
│  │ [📁] 请将行驶证从卡套内取出后拍摄  │  │
│  │       避免反光,确保文字清晰        │  │
│  └───────────────────────────────────┘  │
│                                         │
│  ┌───────────────────────────────────┐  │
│  │└──                            ──┘ │  │  ← 蓝色 L 形角标(#354D93)
│  │  中华人民共和国机动车行驶证         │  │  ← 证件标题轮廓(半透明蓝色)
│  │                                    │  │
│  │                                    │  │  ← 页面其余区域空白
│  │                                    │  │
│  │  ▢ 印章                            │  │  ← 印章位置轮廓(红色方形)
│  │└──                            ──┘ │  │
│  └───────────────────────────────────┘  │  ← 灰色实线边框(#C2C8D2)
│                                         │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐ │  ← 取景要点图标卡(白底)
│  │  [✓]    │  │  [✓]    │  │  [✗]    │ │
│  │ 边缘完整 │  │ 文字清晰 │  │ 避免反光 │ │
│  └─────────┘  └─────────┘  └─────────┘ │
│                                         │
├─────────────────────────────────────────┤
│              ┌──────────┐              │
│              │  ◉ 拍摄  │              │  ← 拍摄按钮(蓝色 #354D93)
│              └──────────┘              │  ← 底部白色拍摄栏
└─────────────────────────────────────────┘

说明:全屏相机预览(video 元素)作为底层背景,整体页面背景为浅色(#F5F5F5),营造明亮的拍摄环境。屏幕中央为镂空透明区域(匹配行驶证宽高比约 1.43:1),镂空区域外围为浅色背景(区别于镂空区域的相机预览画面)。镂空区域外圈增加灰色实线边框(#C2C8D2,3px,带入场渐显动画),四角显示蓝色 L 形角标(#354D93,带入场渐显动画),辅助用户对齐证件边缘。引导框上方设置 Hero 提示卡(白底圆角卡片+蓝色图标+主标题"请将行驶证从卡套内取出后拍摄"+副标题"避免反光,确保文字清晰"),引导框下方设置取景要点图标卡(3 个白底小卡片,分别用 ✓/✗ 图标标注"边缘完整""文字清晰""避免反光")。引导框内叠加极简证件模板轮廓(半透明蓝色,透明度约 20%-35%):主页仅展示顶部一行标题"中华人民共和国机动车行驶证"和左下角红色方形印章,其余区域空白;副页仅展示右下角条形码图案(长度与真实条形码一致)及数字编号,其余区域空白。底部为白色拍摄栏,居中放置蓝色圆形拍摄按钮。

操作按钮

按钮 触发条件 操作结果
拍摄 点击 通过 Canvas 捕获当前 video 帧,生成图片 Blob,进入预览确认页
返回(左上角) 点击 关闭相机流,退出拍摄引导页,返回车辆管理页,不上传照片
点击背景区(非引导框内) 点击 无响应,保持拍摄引导页(防止误触)

功能点 3:三页差异化引导

功能概述

项目 内容
功能名称 分页面差异化引导
涉及页面 行驶证主页、副页、车辆照片页拍摄引导页
触发条件 按用户点击的具体槽位进入对应拍摄引导页
处理逻辑 三页共用相同的引导框比例和通用提示文案;差异体现在页面标题和引导框内的证件模板轮廓
输出结果 用户明确知道当前拍摄的是行驶证的哪一页,并能按模板轮廓对齐证件内容

各页引导差异

页面 对应槽位 对应 Handler 页面标题 模板轮廓内容
行驶证主页 vehicleLicenseFrontList vehicleLicenseFrontHandler 拍摄行驶证主页 仅展示:顶部一行标题"中华人民共和国机动车行驶证" + 左下红色方形印章
行驶证副页 vehicleLicenseBackList vehicleLicenseBackHandler 拍摄行驶证副页 仅展示:右下角条形码图案(长度与真实条形码一致)+ 条形码数字编号
行驶证车辆照片 vehicleLicenseCarPhotoList vehicleLicenseCarHandler 拍摄行驶证车辆照片 "车辆照片"标题 + 车辆SVG轮廓(车身/车窗/车轮),引导居中拍摄

说明:引导框内的证件模板轮廓为半透明叠层(透明度约 20%-35%),仅作视觉对齐辅助,不遮挡相机预览画面。模板轮廓使用 CSS/SVG 静态实现,不依赖后端数据。三种模板通过 renderLicenseTemplate(type) 函数根据槽位类型动态切换。


功能点 4:照片预览确认

功能概述

项目 内容
功能名称 照片预览确认
涉及页面 拍摄完成后进入的预览确认页
触发条件 用户在拍摄引导页点击"拍摄"按钮后触发
处理逻辑 展示刚拍摄的照片,提供"重拍"和"确认使用"两个操作
输出结果 确认使用 → 照片传回 van-uploaderafter-read 回调,走现有压缩→上传→OCR流程;重拍则返回拍摄引导页

界面设计(预览确认页示意):

┌─────────────────────────────────────────┐
│  ←  返回                                │
├─────────────────────────────────────────┤
│                                         │
│     ┌─────────────────────────────┐     │
│     │                             │     │
│     │      刚拍摄的照片预览        │     │
│     │      (全宽自适应展示)       │     │
│     │                             │     │
│     └─────────────────────────────┘     │
│                                         │
│                                         │
│        ┌──────────┐ ┌──────────┐       │
│        │  重拍    │ │ 确认使用 │       │
│        └──────────┘ └──────────┘       │
│                                         │
└─────────────────────────────────────────┘

操作按钮

按钮 触发条件 操作结果
重拍 点击 返回拍摄引导页,重新进入相机预览
确认使用 点击 将照片 Blob 构造为 { file: File, content: dataURL } 格式,调用对应槽位的 after-read Handler(如 vehicleLicenseFrontHandler),进入现有压缩→上传→OCR流程
返回 点击 关闭相机流,返回车辆管理页,不保存照片

数据衔接说明

确认使用后,需构造以下对象传给现有的 Handler 方法:

{
  file: new File([blob], `vehicle_license_${type}_${Date.now()}.jpg`, { type: 'image/jpeg' }),
  content: dataURL  // base64 格式,供 van-uploader 预览使用
}

传入后,现有的 compressFileItem()uploadImage()ocrHandler() 链路完全不变。


五、业务规则

规则 1:触发范围

引导框仅对 vehicleAdd.vue 中标题含"行驶证"的三个 van-uploader 槽位生效(主页、副页、车辆照片);车头照vehicleFrontPhotoList)、保单insurancePictureFiles)等其他槽位不进入拍摄引导页,保持现有 van-uploader 直接调起选择器的交互。

规则 2:引导框比例

引导框的宽高比固定为行驶证实物比例(约 1.43:1,横向),在不同屏幕尺寸下按屏幕宽度自适应缩放(宽度约为屏幕宽度的 80%),左右留白均匀,确保用户无需过度调整手机位置即可将证件放入框内。

规则 3:后续流程不变

引导框仅做"拍摄环节的视觉辅助",不改变原上传与OCR识别流程。用户确认使用后,照片传入现有的 compressFileItemuploadImageocrHandler 链路,识别失败仍按现有方式提示重传。

规则 4:屏幕适配

引导框在竖屏模式下以横向矩形展示(行驶证为横向证件)。若用户将手机横置,引导框应自适应旋转为纵向矩形以匹配证件方向。优先保证竖屏体验,横屏为可选适配。

规则 5:降级策略

若设备不支持 WebRTC getUserMedia(部分低版本 Android WebView 或非 HTTPS 环境),降级为现有的 van-uploader 直接调起系统选择器,不阻断用户上传流程。降级时引导框不展示,用户走原有流程。


六、边界与异常场景

场景编号 场景描述 预期处理
1 用户未对准引导框就点击拍摄 系统不拦截,正常拍摄并进入预览;用户在预览页可点击"重拍"重新对准
2 相机权限未授权 拍摄引导页加载前检测权限;未授权时提示"请允许使用相机权限",并提供"从相册选择"降级入口
3 弱光/暗光环境拍摄 引导框正常展示;若设备支持,可自动开启屏幕补光(或提示用户到光线充足处拍摄)
4 用户旋转手机(横竖屏切换) 引导框自适应旋转,保持与行驶证方向一致;拍摄按钮和提示文字跟随屏幕方向调整位置
5 小屏幕手机(如 iPhone SE 引导框按比例缩小,提示文字自动换行,确保所有元素在可视区域内完整展示
6 大屏幕手机(如 iPhone Pro Max 引导框按比例放大,不超过屏幕安全区域,保持舒适的单手操作距离
7 设备不支持 getUserMedia 自动降级为 van-uploader 直接调起系统选择器,不展示引导框
8 iOS 微信内置浏览器权限受限 检测到微信环境且 getUserMedia 不可用时,降级为系统选择器
9 拍摄后未进入预览(相机被中断) 检测到相机关闭/中断事件,自动返回车辆管理页,不上传照片
10 非行驶证槽位(如车头照)点击 不进入拍摄引导页,维持现有 van-uploader 直接调起选择器的交互
11 修改车辆时重新上传行驶证 同样进入拍摄引导页,拍摄确认后替换原照片,走现有压缩→上传→OCR流程

七、影响范围

前端

文件 变更类型 变更内容
supplier-dispatch-h5/src/views/index/vehicleAdd.vue 改造 行驶证三个 van-uploader 槽位(vehicleLicenseFrontList/vehicleLicenseBackList/vehicleLicenseCarPhotoList)增加点击拦截逻辑:点击时打开拍摄引导页组件,而非直接调起系统选择器;拍摄确认后将照片传回现有的 vehicleLicenseFrontHandler/vehicleLicenseBackHandler/vehicleLicenseCarHandler
supplier-dispatch-h5/src/views/index/vehicleAdd.vue 改造 车头照(vehicleFrontPhotoList)、保单(insurancePictureFiles)槽位不变,保持现有 van-uploader 直接调起选择器的逻辑
supplier-dispatch-h5/src/components/CameraGuide.vue 新增 拍摄引导页组件:WebRTC 相机预览 + 浅色背景层(#F5F5F5+ 镂空引导框 + 灰色实线边框(#C2C8D2,入场渐显动画) + 四角蓝色 L 形角标(#354D93,入场渐显动画) + Hero 提示卡(白底+蓝色图标) + 取景要点图标卡(do/don't + 证件模板轮廓叠层(主页/副页/车辆照片三种模板动态切换) + 底部白色拍摄栏(蓝色圆形拍摄按钮)
supplier-dispatch-h5/src/components/CameraGuide.vue 新增 预览确认页:照片展示 + 重拍按钮 + 确认使用按钮
supplier-dispatch-h5/src/api/mine.js 不变 uploadImage()ocrHandler() 完全复用
supplier-dispatch-h5/src/utils/ 不变 compressFileItem() 等工具方法完全复用

后端

文件 变更内容
无需变更,复用现有 POST /order/uploadImagePOST /agg-api/tencent-ocr/unifiedOCR

数据库

表名 变更内容
无需变更

八、验收标准

8.1 拍摄引导页展示

  • 点击行驶证主页/副页/车辆照片任一上传槽位,进入拍摄引导页(非直接调起系统选择器)
  • 拍摄引导页展示全屏相机预览背景(video 元素实时画面)
  • 屏幕中央显示镂空引导框,框的宽高比约 1.43:1(横向)
  • 引导框外围为浅色背景(#F5F5F5),与镂空区域的相机预览画面形成对比
  • 引导框外圈显示灰色实线边框(#C2C8D23px,带入场渐显动画)
  • 引导框四角显示蓝色 L 形定位角标(#354D93,带入场渐显动画)
  • 引导框上方显示 Hero 提示卡(白底圆角卡片+蓝色图标),主标题"请将行驶证从卡套内取出后拍摄",副标题"避免反光,确保文字清晰"
  • 引导框下方显示取景要点图标卡(3 个白底小卡片):边缘完整(✓ 蓝色)、文字清晰(✓ 蓝色)、避免反光(✗ 红色)
  • 页面底部显示白色拍摄栏,居中放置蓝色圆形拍摄按钮(#354D93),按钮样式醒目、易于点击
  • 页面标题根据槽位类型显示对应文字("拍摄行驶证主页"/"拍摄行驶证副页"/"拍摄行驶证车辆照片"
  • 引导框内显示证件模板轮廓(半透明,不遮挡相机预览)
  • 主页模板包含:顶部一行标题"中华人民共和国机动车行驶证" + 左下红色方形印章,其余区域空白
  • 副页模板包含:右下角条形码图案(长度与真实条形码一致)+ 条形码数字编号,其余区域空白
  • 车辆照片模板包含:车辆SVG轮廓(车身/车窗/车轮)
  • 切换不同槽位时,模板轮廓自动切换为对应内容

8.2 预览确认页展示

  • 点击"拍摄"后进入预览确认页,展示刚拍摄的照片
  • 预览页提供"重拍"按钮,点击后返回拍摄引导页
  • 预览页提供"确认使用"按钮,点击后照片传入现有的 after-read Handler
  • 预览页左上角提供"返回"按钮,点击后放弃当前照片,返回车辆管理页

8.3 现有流程衔接

  • 确认使用后,照片经 compressFileItem() 压缩(目标 < 5MB
  • 压缩后经 uploadImage() 上传到服务器(POST /order/uploadImage
  • 上传后经 ocrHandler() 进行 OCR 识别(POST /agg-api/tencent-ocr/unifiedOCR
  • OCR 识别结果正确回填到表单字段(车牌号、车架号、所有人等)
  • 上传槽位显示拍摄的照片缩略图

8.4 非行驶证槽位不受影响

  • 点击车头照上传槽位,保持现有 van-uploader 直接调起系统选择器的逻辑
  • 点击保单上传槽位,保持现有 van-uploader 直接调起系统选择器的逻辑
  • 车头照上传后的 ocrCarFrontHandler() OCR 识别正常

8.5 屏幕适配

  • 在 iPhone 各型号(SE/标准版/Plus/Pro Max)上引导框比例正确、文字完整显示
  • 在 Android 主流机型(华为/小米/OPPO/vivo 等)上引导框比例正确、文字完整显示
  • 竖屏模式下引导框为横向矩形,横屏模式下自适应为纵向矩形

8.6 降级场景

  • 设备不支持 getUserMedia 时,降级为 van-uploader 直接调起系统选择器
  • 降级后压缩→上传→OCR流程正常
  • iOS 微信内置浏览器权限受限时,降级为系统选择器

九、非功能要求

  • 性能:拍摄引导页从点击槽位到展示引导框的耗时 < 500ms;拍摄按钮响应 < 200msCanvas 捕获帧 < 100ms。
  • 兼容性:支持 iOS Safari 12+、Android Chrome 80+、微信/企业微信内置浏览器;需兼容 WebView 环境。
  • 适配性:支持屏幕宽度 320px - 430px 的主流手机;引导框和文字在不同尺寸下自适应,不出现截断或重叠。
  • 安全性:引导内容为纯前端静态展示,不涉及用户照片上传前的任何数据采集与存储;相机流在页面关闭时立即释放。
  • 降级方案:若设备不支持 WebRTC/getUserMedia,降级为现有的 van-uploader 直接调起系统选择器,不阻断用户上传流程。

流程图

改造后完整流程

用户在 vehicleAdd.vue 点击上传槽位
        │
        ▼
┌─────────────────────┐
│ 是否为行驶证三个    │
│ 槽位之一?          │
│ (主页/副页/车辆照片)│
└─────────────────────┘
   │              │
   否             是
   │              ▼
   │    ┌─────────────────────┐
   │    │ 检测设备是否支持    │
   │    │ getUserMedia      │
   │    └─────────────────────┘
   │       │           │
   │      否          是
   │       │           │
   │       ▼           ▼
   │    降级:      进入拍摄引导页
   │    van-uploader  WebRTC相机预览 +
   │    直接调起      浅色背景 + 引导框 +
   │    系统选择器    Hero卡 + 要点卡 + 角标)
   │       │           │
   │       │    ┌──────┼──────┐
   │       │    ▼      ▼      ▼
   │       │   返回   拍摄   点击
   │       │   车辆   按钮   背景
   │       │   管理页  │    (无响应)
   │       │          ▼
   │       │   ┌──────────────┐
   │       │   │ 照片预览确认  │
   │       │   │ 页面          │
   │       │   └──────────────┘
   │       │          │
   │       │    ┌─────┼─────┐
   │       │    ▼     ▼     ▼
   │       │   重拍  确认  返回
   │       │    │     使用  车辆
   │       │    │     │     管理页
   │       │    │     ▼
   │       │    │  构造 { file, content }
   │       │    │  传入 after-read Handler
   │       │    │     │
   ▼       ▼    ▼     ▼
┌─────────────────────────┐
│ 现有流程(完全不变)     │
│ compressFileItem() 压缩  │
│       │                 │
│       ▼                 │
│ uploadImage() 上传       │
│ POST /order/uploadImage  │
│       │                 │
│       ▼                 │
│ ocrHandler() OCR识别     │
│ POST /agg-api/           │
│   tencent-ocr/unifiedOCR │
│       │                 │
│       ▼                 │
│ 回填表单字段             │
│ (车牌号/车架号/所有人等) │
└─────────────────────────┘

影响范围说明

维度 影响说明
功能 仅新增行驶证拍摄前的取景引导层,不改变车辆管理页其他功能和OCR识别流程
数据 无新增业务数据;不修改现有上传接口的入参和出参
接口 无接口变更,复用现有 POST /order/uploadImagePOST /agg-api/tencent-ocr/unifiedOCR
配置 无变更
用户习惯 用户上传行驶证时多了一步引导页+预览确认,但流程轻量,拍摄确认后无缝衔接现有压缩→上传→OCR流程,整体体验提升

测试关注点

测试类型 关注点
功能测试 三页槽位均正确进入拍摄引导页;引导框比例正确;提示文字完整显示;拍摄后进入预览确认;确认后正确回填到 van-uploader 并触发现有 Handler
流程衔接测试 确认使用后 compressFileItem 压缩正常;uploadImage 上传成功;ocrHandler OCR 识别结果正确回填表单;行驶证主页 OCR 回填车牌号/车架号/所有人等;行驶证副页 OCR 回填档案编号/核载人数等
兼容测试 iPhone SE/标准版/Plus/Pro Max;华为/小米/OPPO/vivo 主流机型;微信/企业微信内置浏览器;Safari/Chrome
回归测试 车头照等非行驶证槽位保持原有直接调选择器逻辑;车辆管理页其他功能不受影响;OCR 识别与审核流程正常;修改车辆时重新上传行驶证正常
降级测试 不支持 getUserMedia 的设备降级为 van-uploader 系统选择器;降级后压缩→上传→OCR 流程正常
适配测试 竖屏/横屏切换;320px 窄屏与 430px 宽屏的显示效果;文字不截断、按钮可点击