Files
赵忠林 6abb49c911 feat(delivery): 优化身份证及凭证图片上传和提交校验
- 在提交前新增必填图片校验,确保身份证正反面及其他凭证全部上传
- 优化图片上传占位样式,新增上传提示文案
- uploadImage函数增加上传中loading提示及成功失败反馈toast
- 格式化后端错误提示,过滤错误码尾巴,提升用户体验
- 明确图片字段标签,标注为“身份证正面(人像面)”等,增强用户指引
2026-07-26 14:09:31 +08:00

46 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-07-26
## 修复 `pages/order/delivery.vue` 身份证上传失败 Bug
**用户报告**:页面提交时弹"请上传身份证正面照片.FAILUREFP03333"。
**根因分析**
- 错误码 `FAILUREFP03333` 和提示文本"请上传身份证正面照片"都是后端 `POST /open/equipment/receipt` 返回的,前端代码无此内容。
- `orderSourceData` 数组下标与图片含义是固定绑定0=身份证正面、1=身份证反面、2=人车合照、3=车子照片、4=安装照片。
- 截图里只看到"其他"模块 3 张图,未见"身份证信息"模块——用户大概率跳过了身份证正反面上传就点了提交。
**修复内容**`pages/order/delivery.vue`
1.`handleSubmit` 提交前增加客户端必传校验5 个图片槽位任一为空就拦截,并按"身份证正面 > 身份证反面 > 其他"优先级提示用户补图。
2. 过滤后端返回的错误码尾巴(如 `.FAILUREFP03333`),新增 `formatErrorMsg()` 工具函数。
3. 优化占位图:未上传时显示"+ 点击上传身份证正面(人像面)"等说明,替代原来的灰色 `not-dealer.png` 占位。
4. `chooseImage``uni.showLoading` 上传中提示,成功/失败分别 toast 明确文案。
5. 字段标签明确化:"正面/反面"→"身份证正面(人像面)/身份证反面(国徽面)"。
**关于 `FAILUREFP03333` 的判断**
- 非前端错误码(前端 grep 无任何匹配)。
- 推测是后端在调用阿里云内容安全 / 第三方 OCRFace++、百度、腾讯云天御等)做身份证内容审核时返回的状态码。
- 真正根因在后端,前端只能加校验和友好提示,无法根本解决"图片本身被识别为非身份证"的场景。
- 建议后端同事确认 `/open/equipment/receipt` 接口的身份证正反面校验逻辑,以及是否依赖第三方图片识别服务。
## 后端 `yunxinwei-api` 同步修复FAILUREFP03333 根因)
**项目路径**`/Users/gxwebsoft/JAVA/yunxinwei-api`
**文件**`src/main/java/com/gxwebsoft/open/controller/OpenEquipmentController.java`
**根因确认**
- `receipt()` 接口(原 402-461 行)调用 `idcardService.verify(front, back)` 做阿里云市场 OCR`miitangs14.market.alicloudapi.com/v1/tools/ocr/idCard`),非 `FP00000` 时把 `verify.getMessage() + verify.getCode()` 直接拼进用户提示 → 用户看到"请上传身份证正面照片.FAILUREFP03333"。
- `idcardService.verify` 在 OCR 接口异常时返回 `null`,原代码紧接着 `verify.getCode()` 会 NPE → 500。
- `images.get(0/1)` 在图片不足 2 张时会 `IndexOutOfBounds`;用户跳过身份证上传只传 3 张其他图时,`images[0]` 被当成身份证人像面去 OCR → 失败但提示语仍是"请上传身份证正面照片"。
**修复内容**
1. 抽出私有方法 `verifyIdCard(orderSourceData, order)`,把身份证识别与实名回填逻辑内聚。
2. JSON 解析加 try-catch失败返回"身份证图片数据格式有误"。
3. 校验 `images` 至少 2 张且 `images[0]`/`images[1]` 非空,否则返回"请上传身份证正面和反面照片"(不再越界)。
4. `verify` 调用加 try-catch + `null` 判断,避免 NPEOCR 异常返回友好提示。
5. **内部错误码 `FAILUREFP03333` 不再回吐给用户**,仅 `log.warn` 记录;用户提示改为"身份证正面照片识别失败,请重新上传清晰的身份证人像面照片" / "身份证反面照片识别失败,请重新上传清晰的身份证国徽面照片"。
6. `userService.getById(...)``null` 防护,避免回填空指针。
**验证**`./mvnw -o -q compile` 离线编译通过EXIT=0依赖已本地缓存
**前后端配合结论**前端delivery.vue做提交前必传校验 + 友好占位后端OpenEquipmentController做空安全 + 内部码隔离 + 分正反面提示,两端共同消除该 Bug。