From be4e2d7c2b330c3b8991a0286ea16cc1285b9ec0 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 08 May 2026 17:47:32 +0800
Subject: [PATCH] feat: 微信小程序支持上传头像

---
 src/subPackages/userDetail/infos/index.vue |   86 ++++++++++++++++---------------------------
 1 files changed, 32 insertions(+), 54 deletions(-)

diff --git a/src/subPackages/userDetail/infos/index.vue b/src/subPackages/userDetail/infos/index.vue
index 39d322f..2bec63c 100644
--- a/src/subPackages/userDetail/infos/index.vue
+++ b/src/subPackages/userDetail/infos/index.vue
@@ -38,6 +38,8 @@
 import {getEnvObj} from "@/utils/index.js";
 import {getUserInfo, updateInfo} from '@/api/user/index.js';
 import {useUserStore} from "@/store/index.js";
+import {ref} from "vue";
+import {onShow} from "@dcloudio/uni-app";
 
 const userInfo = ref({
   id: '',
@@ -55,7 +57,6 @@
   if (!phone) return true
   const phoneRegex = /^1[3-9]\d{9}$/
   if (!phoneRegex.test(phone)) {
-
     uni.showToast({
       title: '请输入正确的手机号码',
       icon: 'none',
@@ -108,7 +109,7 @@
 // 头像上传到服务器
 function uploadUtil(options) {
   const {formData, filePath, url} = options;
-
+  uni.showLoading({title: '上传中...'})
   return new Promise((resolve, reject) => {
     let accessToken = useUserStore()?.$state?.userInfo?.access_token;
     uni.uploadFile({
@@ -130,10 +131,35 @@
       },
       fail: (err) => {
         reject(err)
+      },
+      complete: () => {
+        uni.hideLoading()
       }
     });
   })
 }
+
+const handleUploadResult = (filePath, fileName) => {
+  uploadUtil({
+    filePath: filePath,
+    formData: {
+      fileName: fileName,
+      sn: 'avatar_upload'
+    },
+    url: '/blade-resource/oss/endpoint/put-file'
+  }).then(res => {
+    const resData = JSON.parse(res.data);
+    if (resData.code === 200 || resData.code === 0) {
+      // 更新头像显示
+      userInfo.value.avatar = resData.data.link || resData.data.url;
+      uni.showToast({title: '头像上传成功', icon: 'success'});
+    } else {
+      throw new Error(resData.message || '上传失败');
+    }
+  }).catch(err => {
+    uni.showToast({title: err.message || '上传失败', icon: 'none'});
+  });
+};
 
 // 上传头像功能
 const uploadAvatar = () => {
@@ -145,24 +171,8 @@
     maxDuration: 30,
     camera: 'back',
     success(res) {
-      uploadUtil({
-        filePath: res.tempFiles[0].tempFilePath,
-        formData: {
-          fileName: res.tempFiles[0].tempFilePath,
-          sn: 'avatar_upload'
-        },
-        url: '/blade-resource/oss/endpoint/put-file'
-      }).then(res => {
-        const resData = JSON.parse(res.data);
-        if (resData.code === 200 || resData.code === 0) {
-          // 更新头像显示
-          userInfo.value.avatar = resData.data.link || resData.data.url;
-          uni.hideLoading();
-          uni.showToast({title: '头像上传成功', icon: 'success'});
-        } else {
-          throw new Error(resData.message || '上传失败');
-        }
-      })
+      const filePath = res.tempFiles[0].tempFilePath;
+      handleUploadResult(filePath, filePath);
     }
   })
   // #endif
@@ -174,10 +184,7 @@
       const tempFile = res.tempFiles[0]; // 获取文件对象
       const filePath = tempFile.path || tempFile.tempFilePath;
       if (!filePath) {
-        uni.showToast({
-          title: '获取文件路径失败',
-          icon: 'none'
-        });
+        uni.showToast({title: '获取文件路径失败', icon: 'none'});
         return;
       }
       let fileName = tempFile.name;
@@ -185,37 +192,8 @@
         const pathWithoutProtocol = filePath.replace(/^file:\/\//, '');
         fileName = pathWithoutProtocol.split('/').pop() || 'unknown.png';
       }
-
-      // 显示加载中
-      uni.showLoading({
-        title: '上传中...'
-      });
-
       // 上传文件
-      uploadUtil({
-        filePath: filePath,
-        formData: {
-          fileName: fileName,
-          sn: 'avatar_upload'
-        },
-        url: '/blade-resource/oss/endpoint/put-file'
-      }).then(res => {
-        const resData = JSON.parse(res.data);
-        if (resData.code === 200 || resData.code === 0) {
-          // 更新头像显示
-          userInfo.value.avatar = resData.data.link || resData.data.url;
-          uni.hideLoading();
-          uni.showToast({title: '头像上传成功', icon: 'success'});
-        } else {
-          throw new Error(resData.message || '上传失败');
-        }
-      }).catch(err => {
-        uni.hideLoading();
-        uni.showToast({
-          title: err.message || '上传失败',
-          icon: 'none'
-        });
-      });
+      handleUploadResult(filePath, fileName);
     }
   });
   // #endif

--
Gitblit v1.9.3