From 74ff93863e3cd8c488a04315e6692ea868a3ba43 Mon Sep 17 00:00:00 2001
From: zhoulinf <2507241354@qq.com>
Date: Tue, 4 Aug 2026 16:12:41 +0800
Subject: [PATCH] =?UTF-8?q?CRM=5F26-08-05#story#9126,=E8=BD=A6=E8=BE=86?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=E3=80=81=E6=9C=8D=E5=8A=A1=E5=95=86=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E7=B3=BB=E7=BB=9F=E9=9C=80=E6=B1=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/CameraGuide.vue | 646 +++++++++++++++++++++++++++++++++
src/components/StepBar.vue | 136 +++++++
src/views/index/vehicleAdd.vue | 129 +++++--
3 files changed, 886 insertions(+), 25 deletions(-)
create mode 100644 src/components/CameraGuide.vue
create mode 100644 src/components/StepBar.vue
diff --git a/src/components/CameraGuide.vue b/src/components/CameraGuide.vue
new file mode 100644
index 00000000..f950d6e5
--- /dev/null
+++ b/src/components/CameraGuide.vue
@@ -0,0 +1,646 @@
+
+
+
+
+
+
+
+
+ {{ navTitle }}
+
+
+
+
+
+
+
+
{{ heroTitle }}
+
从卡套内拿出,避免反光
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 照片预览
+
+
+
![预览]()
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/StepBar.vue b/src/components/StepBar.vue
new file mode 100644
index 00000000..819e3bea
--- /dev/null
+++ b/src/components/StepBar.vue
@@ -0,0 +1,136 @@
+
+
+
+
+ ✓
+ {{ index + 1 }}
+
+
{{ step }}
+
+
+
+
+
+
+
+
diff --git a/src/views/index/vehicleAdd.vue b/src/views/index/vehicleAdd.vue
index 8b8347a0..1401a3c7 100644
--- a/src/views/index/vehicleAdd.vue
+++ b/src/views/index/vehicleAdd.vue
@@ -17,42 +17,54 @@
行驶证首页
-
+
行驶证副页
-
+
行驶证车辆照片页
-
+
@@ -454,6 +474,7 @@ import {vehicleTypeList,saveVehicle,getInfoById,supplierServiceTree, uploadImage
userOperationPermissions,saveSupplierApproval} from "@/api/mine"
import TwoCommonBtn from "@/components/twoBtnCommon.vue"
import CellGroup from "@/components/cellGroup.vue";
+import CameraGuide from "@/components/CameraGuide.vue";
export default {
name: "vehicleAdd",
mixins:[myMixins],
@@ -489,6 +510,8 @@ export default {
oldSupplierServiceList:[],
show:false,
imageUrl: require('@/assets/arr_right.png'),
+ cameraGuideVisible: false, // 拍摄引导弹层显示
+ cameraGuideType: 'front', // 当前拍摄槽位 front/back/car
vehicleLicenseFrontList: [],
vehicleLicenseBackList: [],
vehicleLicenseCarPhotoList: [],
@@ -920,6 +943,44 @@ export default {
console.log(`压缩后为:${mb1}M`)
return compressedFile;
},
+ isCameraSupported() { // 是否支持 getUserMedia(不支持则降级系统选择器)
+ return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)
+ },
+ onLicenseSlotClick(type) { // 行驶证三槽位点击拦截:支持相机进引导页,不支持降级原系统选择器
+ if (this.isCameraSupported()) {
+ this.cameraGuideType = type
+ this.cameraGuideVisible = true
+ } else {
+ this.triggerNativeUpload(type)
+ }
+ },
+ triggerNativeUpload(type) { // 主动触发对应 uploader 的原生文件选择
+ const refMap = { front: 'licenseFrontUploader', back: 'licenseBackUploader', car: 'licenseCarUploader' }
+ this.$nextTick(() => {
+ const uploader = this.$refs[refMap[type]]
+ const input = uploader && uploader.$el && uploader.$el.querySelector('.van-uploader__input')
+ if (input) input.click()
+ })
+ },
+ onCameraConfirm({ blob, dataURL }) { // 拍摄确认:构造 {file, content} 走现有压缩→上传→OCR 链路
+ this.cameraGuideVisible = false
+ const type = this.cameraGuideType
+ const file = new File([blob], `vehicle_license_${type}_${Date.now()}.jpg`, { type: 'image/jpeg' })
+ const handlerMap = {
+ front: 'vehicleLicenseFrontHandler',
+ back: 'vehicleLicenseBackHandler',
+ car: 'vehicleLicenseCarHandler'
+ }
+ this[handlerMap[type]]({ file, content: dataURL })
+ },
+ onCameraCancel() { // 返回放弃
+ this.cameraGuideVisible = false
+ },
+ onCameraFallback() { // 权限拒绝/相机不可用:降级为系统选择器
+ this.cameraGuideVisible = false
+ this.$toast('请允许使用相机权限')
+ this.triggerNativeUpload(this.cameraGuideType)
+ },
async vehicleLicenseFrontHandler(file) { // 上传 行驶证首页
console.log('file',file)
try {
@@ -1591,7 +1652,8 @@ export default {
},
components:{
CellGroup,
- TwoCommonBtn
+ TwoCommonBtn,
+ CameraGuide
}
}
@@ -1605,6 +1667,23 @@ export default {