From 5c8fcce3870b2f5c8f881cbd996ef792ba050b98 Mon Sep 17 00:00:00 2001 From: H1d3rOne Date: Sun, 8 Mar 2026 23:17:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=94=A8=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=BF=AE=E6=94=B9=E5=90=8C=E6=AD=A5=E5=88=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端实现: - UserInfoService新增updateUsername和updateAvatarUrl方法 - UserController新增/updateUsername和/updateAvatar接口 - 支持修改用户名和头像URL - 数据同步保存到user_info表 前端实现: - api.js新增updateUsername和updateAvatar方法 - “我的”页面editUsername方法改为调用后端API - 修改成功后同步更新本地缓存 - 错误处理更友好 功能特点: - 修改用户名实时同步到数据库 - 更新本地缓存确保数据一致性 - “我的账号”页面自动加载最新用户信息 - 所有页面数据来源统一 --- .../java/xuan/controller/UserController.java | 48 +++++++++++++++++++ .../java/xuan/service/UserInfoService.java | 18 +++++++ xuan-deduct-uniapp/src/pages/mine/mine.vue | 31 +++++++++--- xuan-deduct-uniapp/src/utils/api.js | 16 ++++++- 4 files changed, 105 insertions(+), 8 deletions(-) diff --git a/src/main/java/xuan/controller/UserController.java b/src/main/java/xuan/controller/UserController.java index 8f7ccee..702ae75 100644 --- a/src/main/java/xuan/controller/UserController.java +++ b/src/main/java/xuan/controller/UserController.java @@ -156,6 +156,54 @@ public class UserController { return result; } + @PostMapping("/updateUsername") + public Map updateUsername(@RequestBody Map params) { + Map result = new HashMap<>(); + try { + String userId = params.get("userId").toString(); + String username = params.get("username").toString(); + + UserInfo user = userInfoService.updateUsername(userId, username); + if (user != null) { + Map data = new HashMap<>(); + data.put("username", user.getUsername()); + result.put("success", true); + result.put("data", data); + } else { + result.put("success", false); + result.put("error", "用户不存在"); + } + } catch (Exception e) { + result.put("success", false); + result.put("error", e.getMessage()); + } + return result; + } + + @PostMapping("/updateAvatar") + public Map updateAvatar(@RequestBody Map params) { + Map result = new HashMap<>(); + try { + String userId = params.get("userId").toString(); + String avatarUrl = params.get("avatarUrl").toString(); + + UserInfo user = userInfoService.updateAvatarUrl(userId, avatarUrl); + if (user != null) { + Map data = new HashMap<>(); + data.put("avatarUrl", user.getAvatarUrl()); + result.put("success", true); + result.put("data", data); + } else { + result.put("success", false); + result.put("error", "用户不存在"); + } + } catch (Exception e) { + result.put("success", false); + result.put("error", e.getMessage()); + } + return result; + } + @PostMapping("/permissionLog") public Map addPermissionLog(@RequestBody Map params) { Map result = new HashMap<>(); diff --git a/src/main/java/xuan/service/UserInfoService.java b/src/main/java/xuan/service/UserInfoService.java index 601c068..2f53ce5 100644 --- a/src/main/java/xuan/service/UserInfoService.java +++ b/src/main/java/xuan/service/UserInfoService.java @@ -63,6 +63,24 @@ public class UserInfoService { return null; } + public UserInfo updateUsername(String userId, String username) { + UserInfo user = userInfoRepository.findByUserId(userId); + if (user != null) { + user.setUsername(username); + return userInfoRepository.save(user); + } + return null; + } + + public UserInfo updateAvatarUrl(String userId, String avatarUrl) { + UserInfo user = userInfoRepository.findByUserId(userId); + if (user != null) { + user.setAvatarUrl(avatarUrl); + return userInfoRepository.save(user); + } + return null; + } + private String generateUsername() { String prefix = "玄机用户"; String suffix = generateRandomString(6); diff --git a/xuan-deduct-uniapp/src/pages/mine/mine.vue b/xuan-deduct-uniapp/src/pages/mine/mine.vue index ccb7145..3f9767c 100644 --- a/xuan-deduct-uniapp/src/pages/mine/mine.vue +++ b/xuan-deduct-uniapp/src/pages/mine/mine.vue @@ -173,14 +173,31 @@ export default { editable: true, placeholderText: '请输入用户名', content: this.username, - success: (res) => { + success: async (res) => { if (res.confirm && res.content) { - this.username = res.content - uni.setStorageSync('username', res.content) - uni.showToast({ - title: '修改成功', - icon: 'success' - }) + try { + await api.userApi.updateUsername(this.userId, res.content) + this.username = res.content + uni.setStorageSync('username', res.content) + + const userInfoStr = uni.getStorageSync('userInfo') + if (userInfoStr) { + const userInfo = JSON.parse(userInfoStr) + userInfo.username = res.content + uni.setStorageSync('userInfo', JSON.stringify(userInfo)) + } + + uni.showToast({ + title: '修改成功', + icon: 'success' + }) + } catch (e) { + console.error('修改用户名失败:', e) + uni.showToast({ + title: '修改失败:' + (e.message || '未知错误'), + icon: 'none' + }) + } } } }) diff --git a/xuan-deduct-uniapp/src/utils/api.js b/xuan-deduct-uniapp/src/utils/api.js index ce09d5c..4cb6527 100644 --- a/xuan-deduct-uniapp/src/utils/api.js +++ b/xuan-deduct-uniapp/src/utils/api.js @@ -369,10 +369,24 @@ const userApi = { }, updatePhone: (userId, phone) => { return request({ - url: '/user/phone', + url: '/user/updatePhone', method: 'POST', data: { userId: userId, phone: phone } }) + }, + updateUsername: (userId, username) => { + return request({ + url: '/user/updateUsername', + method: 'POST', + data: { userId: userId, username: username } + }) + }, + updateAvatar: (userId, avatarUrl) => { + return request({ + url: '/user/updateAvatar', + method: 'POST', + data: { userId: userId, avatarUrl: avatarUrl } + }) } }