From a4496effae93ff4d5e677a6715d2e91b1cf7c46d Mon Sep 17 00:00:00 2001 From: H1d3rOne Date: Sun, 8 Mar 2026 22:52:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E5=8F=B7=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=95=B0=E6=8D=AE=E4=B8=8E=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=8C=E5=89=8D=E5=90=8E=E7=AB=AFAPI?= =?UTF-8?q?=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端实现: - UserController已有/user/info接口,返回用户完整信息 - 包含userId、username、nickname、phone、avatarUrl等字段 - 数据与user_info表对应 前端实现: - 修改account.vue页面 - loadUserInfo方法改为从后端API获取数据 - 添加更多用户字段:nickname、vipLevel、coins、streakDays - 绑定手机号后同步更新本地存储 - 优化用户名显示逻辑:优先username,其次nickname API优化: - api.js新增userApi.getInfo方法 - 与getUserInfo方法功能相同 功能特点: - 页面显示时从后端获取最新用户数据 - 数据与数据库保持同步 - 绑定手机号后更新本地缓存 - 错误处理更友好 --- xuan-deduct-uniapp/src/pages/mine/account.vue | 37 ++++++++++++++----- xuan-deduct-uniapp/src/utils/api.js | 7 ++++ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/xuan-deduct-uniapp/src/pages/mine/account.vue b/xuan-deduct-uniapp/src/pages/mine/account.vue index 339a4a9..5b428c9 100644 --- a/xuan-deduct-uniapp/src/pages/mine/account.vue +++ b/xuan-deduct-uniapp/src/pages/mine/account.vue @@ -3,7 +3,7 @@ - {{ userInfo.username || '玄机用户' }} + {{ userInfo.username || userInfo.nickname || '玄机用户' }} ID: {{ userInfo.userId || '100001' }} @@ -56,37 +56,56 @@ export default { userId: '', username: '玄机用户', avatarUrl: '', - phone: '' - } + phone: '', + nickname: '', + vipLevel: 0, + coins: 0, + streakDays: 0 + }, + defaultAvatar: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0' } }, onShow() { this.loadUserInfo() }, methods: { - loadUserInfo() { + async loadUserInfo() { const userInfoStr = uni.getStorageSync('userInfo') if (userInfoStr) { - this.userInfo = JSON.parse(userInfoStr) + const localUserInfo = JSON.parse(userInfoStr) + try { + const res = await api.userApi.getInfo(localUserInfo.userId) + if (res.success && res.data) { + this.userInfo = res.data + uni.setStorageSync('userInfo', JSON.stringify(res.data)) + } else { + this.userInfo = localUserInfo + } + } catch (e) { + console.error('获取用户信息失败:', e) + this.userInfo = localUserInfo + } } }, - bindPhone() { + async bindPhone() { uni.showModal({ title: '绑定手机号', editable: true, placeholderText: '请输入手机号', success: async (res) => { if (res.confirm && res.content) { - this.userInfo.phone = res.content try { - await api.userApi.updatePhone(this.userInfo.userId, this.userInfo.phone) + await api.userApi.updatePhone(this.userInfo.userId, res.content) + this.userInfo.phone = res.content + uni.setStorageSync('userInfo', JSON.stringify(this.userInfo)) uni.showToast({ title: '绑定成功', icon: 'success' }) } catch (e) { + console.error('绑定手机号失败:', e) uni.showToast({ - title: '绑定失败', + title: '绑定失败:' + (e.message || '未知错误'), icon: 'none' }) } diff --git a/xuan-deduct-uniapp/src/utils/api.js b/xuan-deduct-uniapp/src/utils/api.js index 3e1d1e5..ce09d5c 100644 --- a/xuan-deduct-uniapp/src/utils/api.js +++ b/xuan-deduct-uniapp/src/utils/api.js @@ -346,6 +346,13 @@ const userApi = { data: { userId: userId } }) }, + getInfo: (userId) => { + return request({ + url: '/user/info', + method: 'GET', + data: { userId: userId } + }) + }, updateVipLevel: (userId, vipLevel) => { return request({ url: '/user/vip',