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

3.8 KiB
Raw Permalink Blame History

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. chooseImageuni.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) 做阿里云市场 OCRmiitangs14.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。