当前位置: 首页 > news >正文

第9讲用户信息修改实现

用户信息修改实现

后端修改用户昵称:

/*** 更新用户昵称* @param wxUserInfo* @param token* @return*/
@RequestMapping("/updateNickName")
public R updateNickName(@RequestBody WxUserInfo wxUserInfo,@RequestHeader String token){if(StringUtil.isNotEmpty(wxUserInfo.getNickName())) {Claims claims = JwtUtils.validateJWT(token).getClaims();wxUserInfoService.update(new UpdateWrapper<WxUserInfo>().eq("openid", claims.getId()).set("nick_name", wxUserInfo.getNickName()));}return R.ok();
}

前端修改用户昵称:

<input type="nickname"  placeholder="请输入昵称" v-model="userInfo.nickName" @blur="onChangeNickName"/>
			onChangeNickName:async function(e){console.log(e.detail.value);let nickName=e.detail.value;if(!isEmpty(nickName)){const result=await requestUtil({url:"/user/updateNickName",data:{nickName:nickName},method:"post"});}}
export const isEmpty=(str)=>{if(str === '' || str.trim().length === 0 ){return true}else{return false;}
}

头像上传 后端:

定义上传路径:

userImagesFilePath: D://uniapp/userImgs/
@Value("${userImagesFilePath}")
private String userImagesFilePath;
/*** 上传用户头像图片* @param userImage* @return* @throws Exception*/
@RequestMapping("/uploadUserImage")
public Map<String,Object> uploadUserImage(MultipartFile userImage, @RequestHeader String token)throws Exception{System.out.println("filename:"+userImage.getName());Map<String,Object> resultMap=new HashMap<>();if(!userImage.isEmpty()){// 获取文件名String originalFilename = userImage.getOriginalFilename();String suffixName=originalFilename.substring(originalFilename.lastIndexOf("."));String newFileName= DateUtil.getCurrentDateStr()+suffixName;FileUtils.copyInputStreamToFile(userImage.getInputStream(),new File(userImagesFilePath+newFileName));resultMap.put("code",0);resultMap.put("msg","上传成功");resultMap.put("userImageFileName",newFileName);// 更新到数据库UpdateWrapper<WxUserInfo> updateWrapper=new UpdateWrapper<>();Claims claims = JwtUtils.validateJWT(token).getClaims();updateWrapper.eq("openid",claims.getId()).set("avatar_url",newFileName);wxUserInfoService.update(new UpdateWrapper<WxUserInfo>().eq("openid",claims.getId()).set("avatar_url",newFileName));}return resultMap;
}

前端头像实现:

button上加下 open-type=“chooseAvatar”
在这里插入图片描述

		onChooseAvatar:function(e){console.log(e.detail.avatarUrl)uni.uploadFile({header:{token:uni.getStorageSync("token")},url:getBaseUrl()+"/user/uploadUserImage",filePath:e.detail.avatarUrl,name:"userImage",success: (res) => {let result=JSON.parse(res.data);if(result.code==0){this.userInfo.avatarUrl=result.userImageFileName;}}})},

my.vue

<template><view class="user_center"><!-- 用户信息开始 --><view class="user_info_wrap"><!--获取头像--><button class="user_image" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"><image :src="this.baseUrl+'/image/userAvatar/'+userInfo.avatarUrl"></image></button> <view class="user_name"><input type="nickname" placeholder="请输入昵称" v-model="userInfo.nickName" @blur="onChangeNickName"></view></view><!-- 用户信息结束 --><!-- 用户菜单开始 --><view class="user_menu_wrap"><view class="user_menu_item" ><text>我创建的投票</text></view><view class="user_menu_item"   ><text>我参与的投票</text></view></view><!-- 用户菜单结束 --><!-- 用户信息修改开始 --><view class="user_info_modify_wrap"><view class="user_info_modify_wrap_item" ><text>联系小锋老师</text></view></view><!-- 用户信息修改结束 --></view>
</template><script>import {getBaseUrl,requestUtil} from "../../util/requestUtil.js"import {isEmpty} from "../../util/stringUtil.js"export default{data(){return{userInfo:{nickName:'',avatarUrl:''},baseUrl:''}},onShow() {this.getUserInfo()this.baseUrl=getBaseUrl();},methods:{getUserInfo:async function(){const result=await requestUtil({url:'/user/getUserInfo',method:'get'});console.log("result="+result)this.userInfo=result.currentUser;},onChangeNickName:async function(e){console.log(e.detail.value)let nickName=e.detail.value;if(!isEmpty(nickName)){const result=await requestUtil({url:'/user/updateNickName',data:{nickName:nickName},method:'post'});}},onChooseAvatar:function(e){console.log(e.detail.avatarUrl);uni.uploadFile({header:{token:uni.getStorageSync("token")},url:getBaseUrl()+"/user/updateUserImage",filePath:e.detail.avatarUrl,name:"userImage",success: (res) => {let result=JSON.parse(res.data);if(result.code==0){this.userInfo.avatarUrl=result.userImageFileName}}})}}}
</script><style lang="scss">.user_center{.user_info_wrap{width: 100%;height: 120rpx;display: flex;flex-direction: row;background-color: white;padding-left: 50rpx;.user_image{width: 100rpx;height: 100rpx;text-align: center;padding: 0rpx;margin: 0rpx;image{width: 90rpx;height: 90rpx;}}.user_name{display: flex;flex-direction: column;justify-content: center;padding-left: 20rpx;padding-bottom: 15rpx;}}.user_menu_wrap{margin: 15rpx;margin-top: 20rpx;background-color: #fff;.user_menu_item{padding: 20rpx;padding-left: 35rpx;border-bottom: 5rpx solid #F6F6F4;}}.user_info_modify_wrap{margin: 15rpx;margin-top: 20rpx;background-color: #fff;padding: 20rpx 0;padding-left: 35rpx;}}
</style>

注意 id

weixin:jscode2sessionUrl: https://api.weixin.qq.com/sns/jscode2sessionappid: 自己的secret: 自己的userImagesFilePath: D://uniapp/userImgs/

用户信息问题

在这里插入图片描述

http://www.lryc.cn/news/298798.html

相关文章:

  • powershell 离线安装Posh-SSH
  • linux系统下vscode portable版本的c++/Cmake环境搭建002:使用 VSIX 安装VSCODE插件(暂记)
  • PHP特性知识点总结
  • 数据库基本操作
  • 【51单片机】矩阵键盘(江科大)
  • Go语言教学(一)起源
  • 口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
  • ChatGPT高效提问—prompt常见用法(续篇三)
  • IAR报错:Error[Pa045]: function “halUartInit“ has no prototype
  • C++三剑客之std::optional(一) : 使用详解
  • 网络安全漏洞管理十大度量指标
  • Swift Combine 发布者订阅者操作者 从入门到精通二
  • python 笔记:shapely(形状篇)
  • 开源的JS动画框架库介绍
  • MATLAB实现随机森林回归算法
  • 时间序列预测——BiGRU模型
  • django中实现数据库操作
  • 使用 FFmpeg 将视频转换为 GIF 动画的技巧
  • 2024春晚纸牌魔术原理----环形链表的约瑟夫问题
  • HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-静态内存
  • 什么是vite,如何使用
  • 基于大语言模型的AI Agents
  • 23种设计模式之抽象工厂模式
  • 飞天使-linux操作的一些技巧与知识点9-zabbix6.0 容器之纸飞机告警设置
  • 京东组件移动端库的使用 Nut-UI
  • 用Python来实现2024年春晚刘谦魔术
  • TestNG基础教程
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • Android 9.0 任务栏中清除掉播放器的进程,状态栏仍有音乐播放器状态问题的解决
  • 【笔记】Helm-5 Chart模板指南-13 调是模版