From 6f81691ab09d586470426ee0bfa99cec83797f7b Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期一, 23 六月 2025 15:52:24 +0800
Subject: [PATCH] 实验运行模块 图片换真实上传

---
 laboratory/src/components/SignatureCanvas.vue |   71 ++++++++++++++++++++++++++---------
 1 files changed, 52 insertions(+), 19 deletions(-)

diff --git a/laboratory/src/components/SignatureCanvas.vue b/laboratory/src/components/SignatureCanvas.vue
index 38570e1..6127630 100644
--- a/laboratory/src/components/SignatureCanvas.vue
+++ b/laboratory/src/components/SignatureCanvas.vue
@@ -32,6 +32,8 @@
 </template>
 
 <script>
+import { customUploadRequest, getFullUrl } from '@/utils/utils'
+import {editSignPicture} from './service'
 export default {
   name: 'SignatureCanvas',
   props: {
@@ -163,30 +165,61 @@
       this.drawDashedBorder()
     },
 
+    // 新增:base64转blob
+    dataURLtoBlob(dataurl) {
+      const arr = dataurl.split(',');
+      const mime = arr[0].match(/:(.*?);/)[1];
+      const bstr = atob(arr[1]);
+      let n = bstr.length;
+      const u8arr = new Uint8Array(n);
+      while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+      }
+      return new Blob([u8arr], { type: mime });
+    },
+
+    // 修改:确认签名时上传图片
     confirmSignature() {
-      const canvas = this.$refs.signatureCanvas
-      const ctx = this.context
-      
+      const canvas = this.$refs.signatureCanvas;
+      const ctx = this.context;
       // 保存当前画布内容
-      const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)
-      
+      const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
       // 先填充背景色
-      ctx.fillStyle = 'rgba(239, 248, 250, 1)'
-      ctx.fillRect(0, 0, canvas.width, canvas.height)
-      
+      ctx.fillStyle = 'rgba(239, 248, 250, 1)';
+      ctx.fillRect(0, 0, canvas.width, canvas.height);
       // 创建一个临时画布来保存签名内容
-      const tempCanvas = document.createElement('canvas')
-      tempCanvas.width = canvas.width
-      tempCanvas.height = canvas.height
-      const tempCtx = tempCanvas.getContext('2d')
-      tempCtx.putImageData(imageData, 0, 0)
-      
+      const tempCanvas = document.createElement('canvas');
+      tempCanvas.width = canvas.width;
+      tempCanvas.height = canvas.height;
+      const tempCtx = tempCanvas.getContext('2d');
+      tempCtx.putImageData(imageData, 0, 0);
       // 将签名内容绘制到主画布上
-      ctx.drawImage(tempCanvas, 0, 0)
-      
-      // 导出图片
-      const signatureImage = canvas.toDataURL('image/png')
-      this.$emit('confirm', signatureImage)
+      ctx.drawImage(tempCanvas, 0, 0);
+      // 导出图片为base64
+      const base64Data = canvas.toDataURL('image/png');
+      // base64转blob
+      const blob = this.dataURLtoBlob(base64Data);
+      // 新增:生成带时间戳的文件名
+      const timestamp = Date.now();
+      const fileName = `signature_${timestamp}.png`;
+      const file = new File([blob], fileName, { type: blob.type });
+      // 上传
+      customUploadRequest({
+        file,
+        onSuccess: (res) => {
+          // 假设返回的图片路径为 res.url
+          const url = res.msg || res.data || res
+          editSignPicture({signPicture:res.msg}).then(res=>{
+            if(res.code==200){
+              this.$message.success('签名成功');
+              this.$emit('confirm', url);
+            }
+          })
+        },
+        onError: (err) => {
+          this.$message && this.$message.error ? this.$message.error('上传签名失败') : alert('上传签名失败');
+        }
+      });
     }
   },
   beforeDestroy() {

--
Gitblit v1.7.1