From 6758388f88e0373cc8f32335e9f3d327b0b3648b Mon Sep 17 00:00:00 2001 From: hajimi Date: Mon, 3 Aug 2026 17:47:50 +0800 Subject: [PATCH] fix: send token when uploading user avatar --- docs/业务进度管理.md | 13 ++++++++ uniapp/src/pages/user_data/user_data.vue | 40 +++++++++++++++--------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/docs/业务进度管理.md b/docs/业务进度管理.md index 33dcabad..7cbf2a14 100644 --- a/docs/业务进度管理.md +++ b/docs/业务进度管理.md @@ -13,6 +13,19 @@ ## 一、已完成事项 +### 129. 个人资料头像上传鉴权修复 + +- 状态:代码已完成,待 H5 验收 - 时间:2026-08-03 + +完成内容: + +- 头像上传改为复用统一上传请求封装和缓存 token 读取方式,修复上传接口缺少 token 的问题。 +- 上传过程增加登录态判断、加载反馈和失败提示;头像预览优先展示用户当前头像。 + +涉及模块: + +- `uniapp/src/pages/user_data/user_data.vue` + ### 128. 社区发帖分类与多标签选择 - 状态:代码已完成,待 H5 验收 - 时间:2026-08-03 diff --git a/uniapp/src/pages/user_data/user_data.vue b/uniapp/src/pages/user_data/user_data.vue index f0114819..ba46ec6b 100644 --- a/uniapp/src/pages/user_data/user_data.vue +++ b/uniapp/src/pages/user_data/user_data.vue @@ -125,15 +125,21 @@ import { ref, shallowRef, computed } from 'vue' import { onShow, onUnload } from '@dcloudio/uni-app' import { getUserInfo, userEdit, userBindMobile, userMnpMobile } from '@/api/user' -import { getVerifyInfo } from '@/api/app' +import { getVerifyInfo, uploadImage } from '@/api/app' import { FieldType } from '@/enums/appEnums' import { useAppStore } from '@/stores/app' +import { getToken } from '@/utils/auth' const appStore = useAppStore() // 用户信息 const userInfo = ref({}) const defaultAvatar = computed(() => { + const avatar = userInfo.value?.avatar + if (avatar) { + if (avatar.startsWith('http')) return avatar + return `${appStore.config?.domain || ''}${avatar}` + } const logo = appStore.config?.website?.shop_logo if (!logo) return '/static/images/avatar.png' if (logo.startsWith('http')) return logo @@ -145,22 +151,26 @@ const chooseAvatar = () => { count: 1, sizeType: ['compressed'], sourceType: ['album', 'camera'], - success: (res) => { + success: async (res) => { const tempFilePath = res.tempFilePaths[0] - uni.uploadFile({ - url: (appStore.config?.domain || '') + '/api/upload/image', - filePath: tempFilePath, - name: 'file', - header: { - token: uni.getStorageSync('token') - }, - success: (uploadRes) => { - const data = JSON.parse(uploadRes.data) - if (data.code === 1 && data.data?.uri) { - handleAvatarChange(data.data.uri) - } + const token = getToken() + if (!token) { + uni.navigateTo({ url: '/pages/login/login' }) + return + } + uni.showLoading({ title: '上传中...' }) + try { + const data: any = await uploadImage(tempFilePath, token) + if (!data?.uri) { + uni.$u.toast('头像上传失败,请重试') + return } - }) + handleAvatarChange(data.uri) + } catch (error) { + uni.$u.toast('头像上传失败,请重试') + } finally { + uni.hideLoading() + } } }) }