From 24513434de516e7e8ef479376e06e111d3a50dc3 Mon Sep 17 00:00:00 2001 From: xzg <4727863@qq.com> Date: Wed, 26 Jun 2024 18:39:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dpda=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/img/load.gif | Bin 0 -> 9697 bytes src/components/webCameraIMG/webCamera.vue | 182 ++++++++++++++---- .../system/pdaversion/pdaversionManage.vue | 49 ++++- 3 files changed, 187 insertions(+), 44 deletions(-) create mode 100644 public/img/load.gif diff --git a/public/img/load.gif b/public/img/load.gif new file mode 100644 index 0000000000000000000000000000000000000000..0281430804635f28163f20f7e248c7874db35b4d GIT binary patch literal 9697 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 literal 0 HcmV?d00001 diff --git a/src/components/webCameraIMG/webCamera.vue b/src/components/webCameraIMG/webCamera.vue index 05501ff6..2f16ba6f 100644 --- a/src/components/webCameraIMG/webCamera.vue +++ b/src/components/webCameraIMG/webCamera.vue @@ -3,17 +3,35 @@
- 启动摄像头 - 关闭摄像头 - 点击拍摄 - 旋转摄像头 - 放大图片 - 缩小图像 + +
- 主摄像头 + 主摄像头 + +
+ + + + + + + + + +
@@ -36,18 +54,59 @@ const IMG_camera = ref(false); // 摄像头状态 const IMG_URL = 'http://127.0.0.1:38088/video=stream&camidx=0'; // 主摄像头地址 const IMG_VIEW = ref(null); // 主摄像头实例 const IMG_Thumbnail = ref(null); // 缩略图实例 -let IMG_API = reactive('/api/blade-resource/oss/endpoint/put-file'); -let zoom = reactive(5); //图片缩放等级 +const IMG_TITLE=ref('设备正在初始化中...') +let IMG_Trimming_edge = ref(false); //图片裁边 +let IMG_startUp = ref(false); //摄像头是否启动 +let IMG_API = ref('/api/blade-resource/oss/endpoint/put-file'); +let zoom = ref(5); //图片缩放等级 +const $emit = defineEmits(['upload-success']); + +// 获取设备状态 +const Getdevicestatus = () => {}; +//(开启/关闭)图像裁边 +const Opentrimming = () => { + IMG_Trimming_edge.value = !IMG_Trimming_edge.value; + if (IMG_Trimming_edge.value) { + ElMessage({ message: '图像裁边已开启', type: 'success' }); + mylog('图像裁边已开启'); + } else { + ElMessage({ message: '图像裁边已关闭', type: 'success' }); + mylog('图像裁边已关闭'); + } +}; +// 框选图片 +const FrameSelectImage = () => { + let data = { + filepath: '', // 是否保存本地,可选a,为空不保存本地,否则按路径保存 + left: 0, + top: 0, + right: 100, + bottom: 100, + }; + axios.post('/imgapi/select=imagearea', JSON.stringify(data)).then(res => { + console.log(res, '框选图片'); + }); +}; // 开启摄像头 const Deviceinitialization = () => { IMG_camera.value = true; // 摄像头打开 +// 这里需要判断设备是否在线 let TIME_IMG_VIEW = setTimeout(() => { if (IMG_VIEW.value) { + IMG_startUp.value = true; //摄像头已启动 IMG_VIEW.value.src = IMG_URL; // 主摄像头地址 + IMG_TITLE.value='' + ElMessage({ message: '摄像头已启动', type: 'success' }); + mylog('摄像头已启动'); } clearTimeout(TIME_IMG_VIEW); - }, 50); + }, 2000); }; +// 页面初始化加载 +const onLoad=()=>{ + Deviceinitialization();//初始化设备 +} +onLoad() // 打印日志 const mylog = val => { let element = document.getElementById('log'); @@ -57,17 +116,14 @@ const mylog = val => { }; // 图片缩放API -const zoomAPI = () => { +const zoomAPI = attribute => { let data = { - action: '0', - corp: zoom, + camidx: '0', // 摄像头,0:主头;1:副头 + corp: JSON.stringify(zoom.value), // 放大比例,取值0~9,0:原图,9最大显示 }; axios - .post('/imgapi/stream=zoominout', data) - .then(() => { - IMG_camera.value = false; // 摄像头打开 - Deviceinitialization() - }) + .post('/imgapi/stream=zoominout', JSON.stringify(data)) + .then(() => {}) .catch(error => { console.error('请求出错', error); }); @@ -75,26 +131,26 @@ const zoomAPI = () => { // 放大图片 const Enlargeimage = () => { - if (zoom == 9) { + if (zoom.value == 9) { ElMessage({ message: '已经最大了', type: 'warning', }); return; } - zoom += 1; + zoom.value += 1; zoomAPI(); }; // 缩小图片 const Reduceimage = () => { - if (zoom == 0) { + if (zoom.value == 0) { ElMessage({ message: '已经最小了', type: 'warning', }); return; } - zoom -= 1; + zoom.value -= 1; zoomAPI(); }; @@ -106,9 +162,10 @@ const Turnoffcamera = () => { axios .post('/imgapi/video=close', data) .then(() => { - if (IMG_VIEW.value) { - IMG_VIEW.value.src = ''; - } + IMG_VIEW.value.src = ''; //关闭地址 + IMG_startUp.value = false; //摄像头已关闭 + ElMessage({ message: '摄像头已关闭', type: 'success' }); + mylog('摄像头已关闭'); IMG_camera.value = false; // 关闭节点 }) .catch(error => { @@ -133,17 +190,32 @@ const base64ToBlob = (base64, mime) => { }; // 上传图片函数 -const Upload_Images = blob => { +const Upload_Images = file => { + // 创建一个FormData对象 const formData = new FormData(); - formData.append('file', blob); + + // 确保文件具有正确的文件名和类型 + const filename = file.name || 'image.jpg'; // 默认文件名 + const filetype = file.type || 'image/jpeg'; // 默认文件类型 + + // 使用File对象确保文件流具有正确的文件名和类型 + const fileBlob = new Blob([file], { type: filetype }); + const fileWithMetadata = new File([fileBlob], filename, { type: filetype }); + + // 将文件附加到FormData对象中 + formData.append('file', fileWithMetadata); + + // 使用axios发送POST请求 axios - .post(IMG_API, formData, { + .post(IMG_API.value, formData, { headers: { 'Content-Type': 'multipart/form-data', }, }) .then(res => { console.log(res, '图片上传成功'); + // 触发上传成功事件 + $emit('upload-success', res); }) .catch(error => { console.error('上传失败', error); @@ -165,10 +237,11 @@ const IMG_add = img_base64 => { mylog('添加缩略图成功'); } console.log(img, 'img'); - // Upload_Images(blob);//上传图片接口 + Upload_Images(blob); //上传图片接口 console.log(url, 'blob'); }; + // 旋转摄像头 const Rotatingcamera = angle => { // angle:角度 @@ -178,15 +251,17 @@ const Rotatingcamera = angle => { mylog('旋转摄像头成功'); }); }; + // 点击拍照 -let view1_scan = () => { +let view1_scan = async () => { let data = { - filepath: 'base64', - rotate: '0', - cutpage: '0', - camidx: '0', - ColorMode: '0', - quality: '3', + filepath: 'base64', //图片保存地址,传参类型:["", "D:\\1.jpg", "base64"] + rotate: '0', // 图像旋转角度,90的整数倍,默认:"0" + camidx: '0', // 摄像头索引,参数:0:主头;1:副头 + ColorMode: '0', // 色彩模式,图片保存本地时调用。0:彩色 1:灰色 2:黑白 3:白纸印章 4:去背景色(普通文件) 5:去背景色(身份证) + deskew: IMG_Trimming_edge.value ? '1' : '0', //纠偏(主头有效),参数:0:不纠偏;1:纠偏(裁边) + bAutoAdjust: '0', // 是否自动摆正: 0:不摆正 1:摆正 + quality: '2', //图片质量,图片保存本地调用。0:默认质量;1:高质量;2:较高质量;3:中质量;4:较低质量;5:低质量 }; axios.post('/imgapi/video=grabimage', JSON.stringify(data)).then(res => { console.log(res, '图片地址'); @@ -195,7 +270,7 @@ let view1_scan = () => { return ElMessage.error('拍摄失败请重新尝试'); } ElMessage({ message: '拍摄成功', type: 'success' }); - IMG_add(res.data.photoBase64); + IMG_add(res.data.photoBase64); //添加略缩图上传 }); }; @@ -226,10 +301,43 @@ let view1_scan = () => { width: 60%; height: 300px; border: 1px solid red; + position: relative; + background-color: #000; img { width: 100%; height: 100%; } + .el_icon { + position: absolute; + bottom: 10px; + left: 50%; + transform: translate(-50%, 0); + font-size: 25px; + color: #fff; + } + .el_icon { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + } + .el_icon i { + margin: 0 10px; + } + .el_icon i:active { + color: #2196f3; + } + .SwitchButton { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 25px; + color: #fff; + } + .SwitchButton:active { + color: #2196f3; + } } /* 缩略图 */ #suoluetu { diff --git a/src/views/system/pdaversion/pdaversionManage.vue b/src/views/system/pdaversion/pdaversionManage.vue index 37b5aded..938b4732 100644 --- a/src/views/system/pdaversion/pdaversionManage.vue +++ b/src/views/system/pdaversion/pdaversionManage.vue @@ -439,16 +439,51 @@ export default { uploadBefore(file, done, loading, column) { return true; // 返回 true 继续上传,返回 false 中止上传 }, - async customUploadRequest({file}){ - console.log(file,'文件上传'); - const response = await this.$fileslicing(this, file);//文件切换全局函数(初始) - if(response.code && response.code == 200){ - this.form.filelink = response.data.domain + response.data.name + async customUploadRequest({ file }) { + try { + console.log(file, '文件上传'); + const responses = await this.$fileslicing(this, file); // 文件切片上传的全局函数(初始) + console.log(responses, 'responses'); + let time= setTimeout(()=>{ + let response=responses + if (response && response.code === 200) { + // 确保 this.form.filelink 被初始化为一个数组 + if (!this.form.filelink) { + this.form.filelink = []; + console.log('初始化 this.form.filelink 为空数组'); + } + + // 确保数组的第一个元素存在且是一个对象,并初始化必需的嵌套结构 + if (!this.form.filelink[0]) { + this.form.filelink[0] = { response: { data: {} } }; + console.log('初始化 this.form.filelink[0] 为 { response: { data: {} } }'); + } else { + if (!this.form.filelink[0].response) { + this.form.filelink[0].response = { data: {} }; + console.log('初始化 this.form.filelink[0].response 为 { data: {} }'); + } + if (!this.form.filelink[0].response.data) { + this.form.filelink[0].response.data = {}; + console.log('初始化 this.form.filelink[0].response.data 为 {}'); + } + } + + console.log('在赋值之前的 this.form.filelink:', this.form.filelink); + this.form.filelink[0].response.data.link = response.data.domain + response.data.name; + console.log('赋值之后的 this.form.filelink:', this.form.filelink); + + } else { + console.error('文件上传失败或响应无效', response); } - console.log(response,'文件上传返回值'); - }, + clearTimeout(time) + },0) + } catch (error) { + console.error('文件上传过程中发生错误', error); + } +}, handleSubmit() { if (!this.form.id) { + console.log( this.form.filelink,' this.form.filelink'); this.form.link = this.form.filelink[0].response.data.link; this.form.versionCode = this.form.versionName.split('.').join(''); this.form.newTypes = this.form.link.indexOf('wgt') == -1 ? '1' : '2';