From 18a203ce899007feb4820ae85f894d899a55b6bb Mon Sep 17 00:00:00 2001
From: jhzh <1628036192@qq.com>
Date: Fri, 14 Nov 2025 11:47:13 +0800
Subject: [PATCH] 1

---
 src/page/authentication/index.vue |   84 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 74 insertions(+), 10 deletions(-)

diff --git a/src/page/authentication/index.vue b/src/page/authentication/index.vue
index 4b322cd..e06cc50 100644
--- a/src/page/authentication/index.vue
+++ b/src/page/authentication/index.vue
@@ -187,6 +187,7 @@
       imgStatus: false,
       imgStatus2: false,
       messFlag: this.$store.state.userInfo.isActive == 3 ? true : false,
+      tempImg2Url: null, // Store temporary image URL for cleanup
     };
   },
   created() {
@@ -194,6 +195,10 @@
   },
 
   beforeDestroy() {
+    // Clean up temporary image URLs to avoid memory leaks
+    if (this.tempImg2Url) {
+      URL.revokeObjectURL(this.tempImg2Url);
+    }
     if (this.$state.theme == "red") {
       document.body.classList.remove("red-bg");
       document.body.classList.add("black-bg");
@@ -208,17 +213,44 @@
   methods: {
     handleAvatarSuccess(res, file) {
       this.imgStatus = false;
-      this.form.img1key = res.data.url;
+      // Ensure using network URL instead of temporary URL
+      if (res && res.data && res.data.url) {
+        this.form.img1key = res.data.url;
+      } else {
+        console.error('Upload response data format error:', res);
+        Toast(this.$t("hj209") || "Upload failed");
+      }
     },
     beforeAvatarUpload(file) {
       this.imgStatus = true;
     },
     handleError() {
       this.imgStatus = false;
+      // Ensure temporary URL is not retained on upload failure
+      if (this.form.img1key && this.form.img1key.startsWith('blob:')) {
+        URL.revokeObjectURL(this.form.img1key);
+        this.form.img1key = '';
+      }
     },
     handleAvatarSuccess2(res, file) {
       this.imgStatus2 = false;
-      this.form.img2key = res.data.url; // URL.createObjectURL(file.raw);
+      // Clean up temporary URL if exists
+      if (this.tempImg2Url) {
+        URL.revokeObjectURL(this.tempImg2Url);
+        this.tempImg2Url = null;
+      }
+      // Ensure using network URL instead of temporary URL
+      if (res && res.data && res.data.url) {
+        this.form.img2key = res.data.url;
+      } else {
+        console.error('Upload response data format error:', res);
+        Toast(this.$t("hj209") || "Upload failed");
+        // Clear temporary URL on upload failure
+        if (this.form.img2key && this.form.img2key.startsWith('blob:')) {
+          URL.revokeObjectURL(this.form.img2key);
+          this.form.img2key = '';
+        }
+      }
     },
     beforeAvatarUpload2(file) {
       this.imgStatus2 = true;
@@ -226,22 +258,36 @@
       if (!isLt10M) {
         this.$message.error(this.$t("hj205"));
         return false;
-      } else {
-        this.form.img2key = URL.createObjectURL(file);
+      }
+      // Don't set form.img2key here to avoid submitting temporary URL
+      // Use a separate preview variable if preview is needed on UI
+      // Only create temporary URL for compression if needed
+      if (compress) {
         compress(file, function (val) {});
       }
+      return true;
     },
     handleError2() {
       this.imgStatus2 = false;
+      // Clean up temporary URL on upload failure
+      if (this.tempImg2Url) {
+        URL.revokeObjectURL(this.tempImg2Url);
+        this.tempImg2Url = null;
+      }
+      // Clear temporary URL if form.img2key is a temporary URL
+      if (this.form.img2key && this.form.img2key.startsWith('blob:')) {
+        URL.revokeObjectURL(this.form.img2key);
+        this.form.img2key = '';
+      }
     },
     handleAvatarSuccess3(res, file) {
       this.form.img3key = res.data.url; // URL.createObjectURL(file.raw);
     },
     async getUserInfo() {
-      // 获取用户信息
+      // Get user information
       let data = await api.getUserInfodata();
       if (data.status === 0) {
-        // 判断是否登录
+        // Check if logged in
         this.$store.commit("dialogVisible", false);
         this.$store.state.userInfo = data.data;
         this.userInfo = data.data;
@@ -258,12 +304,12 @@
         }
       } else {
         //this.$store.commit('dialogVisible',true);
-        //跳转到login
+        //Redirect to login
         this.$router.push({ path: "/login" });
       }
     },
     beforeAvatarUpload3(file) {},
-    // 上传
+    // Upload
     handleFile: function (e) {
       // var that = this
       let $target = e.target || e.srcElement;
@@ -286,7 +332,7 @@
       }
     },
     toSure() {
-      // 实名认证弹框
+      // Real name authentication dialog
       if (isNull(this.form.name)) {
         Toast(this.$t("hj207"));
       } else if (isNull(this.form.idCard)) {
@@ -296,7 +342,25 @@
       } else if (!this.form.img2key) {
         Toast(this.$t("hj209"));
       } else {
-        // 显示确认弹窗
+        // Verify if image URL is a temporary URL
+        if (this.form.img1key && this.form.img1key.startsWith('blob:')) {
+          Toast(this.$t("hj209") || "Image 1 is still uploading");
+          return;
+        }
+        if (this.form.img2key && this.form.img2key.startsWith('blob:')) {
+          Toast(this.$t("hj209") || "Image 2 is still uploading");
+          return;
+        }
+        // Ensure image URL is a network URL (http:// or https://)
+        if (this.form.img1key && !this.form.img1key.startsWith('http')) {
+          Toast(this.$t("hj209") || "Image 1 URL is invalid");
+          return;
+        }
+        if (this.form.img2key && !this.form.img2key.startsWith('http')) {
+          Toast(this.$t("hj209") || "Image 2 URL is invalid");
+          return;
+        }
+        // Show confirmation dialog
         this.toAuthentication();
       }
     },

--
Gitblit v1.9.3