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

Springboot3+vue3实现个人中心、修改密码

个人中心

前端常见报错

出现下面这个报错,去找xxx.username看xxx是不是没有定义

屏幕截图 2026-02-25 104308

main 部分的数据传递

Person.vue

<template><div class="card" style="width: 50%"><div style="font-size: 15px">个人中心</div><el-form ref="formRef":model="data.user" label-width="80px" style="padding: 20px 30px 10px 0"><el-form-item prop="username" label="账号"><el-input v-model="data.user.username" autocomplete="off" placeholder="请输入账号"/></el-form-item><el-form-item prop="name" label="名称"><el-input v-model="data.user.name" autocomplete="off" placeholder="请输入名称"/></el-form-item><el-form-item prop="phone" label="电话"><el-input v-model="data.user.phone" autocomplete="off" placeholder="请输入电话"/></el-form-item><el-form-item prop="email" label="邮箱"><el-input v-model="data.user.email" autocomplete="off" placeholder="请输入邮箱"/></el-form-item><el-form-item prop="avatar" label="头像"><el-uploadaction = "http://localhost:9999/files/upload":headers="{ token:data.user.token}":on-success="handleFileSuccess"list-type="picture"><el-button type="primary">上传头像</el-button></el-upload></el-form-item></el-form><div style="text-align: center"><el-button type="primary" style="padding: 18px 35px" @click="update">保存</el-button></div></div>
</template>
<script setup>
import {reactive} from "vue";
import request from "@/utils/request.js";
import {ElMessage} from "element-plus";
import {formToJSON} from "axios";const data = reactive({user:JSON.parse(localStorage.getItem('code_user') || '{}'),
})const handleFileSuccess = (res) => {data.user.avatar = res.data
}const emit = defineEmits(['updateUser'])const update = () => {let urlif (data.user.role === 'ADMIN'){url = '/admin/update'}if (data.user.role === 'USER'){url  = '/user/update'}request.put(url,data.user).then(res =>{if (res.code === '200'){ElMessage.success('更新成功')localStorage.setItem("code_user",JSON.stringify(data.user))emit('updateUser')}})
}
</script>

Manager.vue

<RouterView @updateUser="updateUser"/>const updateUser = () => {data.user = JSON.parse(localStorage.getItem("code_user") || "{}")
}

修改密码

UpdatePassword.vue

<template><div class="card" style="width: 50%"><div style="font-size: 15px">修改密码</div><el-form ref="formRef" :rules="data.rules" :model="data.user" label-width="80px" style="padding: 20px 30px 10px 0"><el-form-item prop="password" label="原密码"><el-input show-password v-model="data.user.password" autocomplete="off" prefix-icon="Lock" placeholder="请输入密码"/></el-form-item><el-form-item prop="newPassword" label="新密码"><el-input show-password v-model="data.user.newPassword" autocomplete="off" prefix-icon="Lock" placeholder="请输入密码"/></el-form-item><el-form-item prop="new2Password" label="确认密码"><el-input size="large" show-password v-model="data.user.new2Password" autocomplete="off" prefix-icon="Lock" placeholder="请输入密码"/></el-form-item></el-form><div style="text-align: center"><el-button type="primary" style="padding: 18px 35px" @click="updatePassword">保存</el-button></div></div>
</template><script setup>
import {reactive,ref} from "vue";
import request from "@/utils/request.js";
import {ElMessage} from "element-plus";const data = reactive({user:JSON.parse(localStorage.getItem('code_user') || '{}'),rules:{password:[{required:true,message:'请填写原密码',trigger:'blur'}],newPassword:[{required:true,message:'请填写新密码',trigger:'blur'}],new2Password:[{required:true,message:'请确认新密码',trigger:'blur'}],}
})
const formRef = ref()const updatePassword = () => {formRef.value.validate(valid => {if (valid){request.post('/updatePassword',data.user).then(res => {if (res.code === '200'){ElMessage.success('修改成功')setInterval(() =>{localStorage.removeItem('code_user')location.href = '/login'},500)}else{ElMessage.error(res.msg)}})}})
}
</script>

在 Account 里面添加相关字段和 get、set 方法

屏幕截图 2026-02-25 133308

屏幕截图 2026-02-25 133710

service.java

public void updatePassWord(Account account) {//先判断新密码和确认密码是否一致if (!account.getNewPassword().equals(account.getNew2Password())) {throw new CustomerException("500","您两次输入的密码不一致");}//校验原密码是否正确Account currentUser = TokenUtils.getCurrentUser();if (!account.getPassword().equals(currentUser.getPassword())){throw new CustomerException("500","原密码输入错误");}//开始更新密码User user = userMapper.selectById(account.getId().toString());user.setPassword(account.getNewPassword());userMapper.updateById(user);}

WebController.java

 @PostMapping("/updatePassword")public Result updatePassword(@RequestBody Account account){if ("ADMIN".equals(account.getRole())){adminService.updatePassword(account);}if ("USER".equals(account.getRole())){userService.updatePassWord(account);}return Result.success();}

添加路由

index.js

import { createRouter, createWebHistory } from 'vue-router'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: '/',redirect:'/manager/home'},{ path: '/manager', component: () => import('../views/Manager.vue'),children:[{path:'home',meta:{name:'主页'},component:() => import('../views/Home.vue')},{path:'admin',meta:{name:'管理员信息'},component:() => import('../views/Admin.vue')},{path:'user',meta:{name:'普通用户信息'},component:() => import('../views/User.vue')},{path:'person',meta:{name:'个人中心'},component:() => import('../views/Person.vue')},{path:'updatePassword',meta:{name:'修改密码'},component:() => import('../views/UpdatePassword.vue')},]},{ path: '/login', component: () => import('../views/Login.vue'),},{ path: '/register', component: () => import('../views/Register.vue'),},{ path: '/notFound', component: () => import('../views/404.vue'),},{ path: '/:pathMatch(.*)', redirect:'/notFound'},],
})export default router
http://www.jsqmd.com/news/410940/

相关文章:

  • 去掉千问 文心 元宝 KImi 文本星号 - DS随心转小程序
  • 科杰技术口碑如何,技术实力、用户群体及产品安全性大揭秘 - 工业品牌热点
  • 盘点2026年广东性价比高的跑步机,速沛服务好的跑步机不容错过 - 工业推荐榜
  • 2026更新版!AI论文写作软件 千笔AI VS WPS AI,研究生专属高效工具!
  • 2026年广告灯箱实力厂商排行榜,这5家入选国内TOP5口碑推荐榜单 - 资讯焦点
  • 儿童洗发水哪个牌子最安全最好用?2026成分党妈妈首选榜单:这5款通过国际认证零添加! - 资讯焦点
  • Mac mini 专用、超简单、直接复制就能用的「自检+修复+保活」全套指令,立刻确认: ✅ WhatsApp 是否在线
  • 三维设计私有云平台解决方案 ——以点量三维云设计系统为核心的企业级云化设计架构
  • 2026年性价比高的环保一次性吸管推荐,你知道几家 - mypinpai
  • 2026年广告灯箱实力厂商排行榜,这5家入选国内TOP5口碑推荐榜单. - 资讯焦点
  • 2026最新云南家庭亲子游定制社top9推荐!芒市+瑞丽+腾冲/西双版纳/昆明+大理+丽江+香格里拉+泸沽湖/昆大丽香泸优质公司权威榜单发布 - 十大品牌榜
  • 蓝牙各版本协议以及适用场景
  • AI最新资讯(2.22)
  • 盘点2026年线下UX设计培训,靠谱机构排名出炉 - 工业品网
  • 探讨2026年留学申请机构哪个好,热门地区靠谱机构怎么选 - 工业设备
  • 实测2026防脱洗发水TOP10!全维度量化评分,全能款用户零差评封神 - 资讯焦点
  • 基于 Essential Macleod 与 VirtualLab Unity 的光学薄膜设计技术 线下课程
  • 2026权威实测控油去屑洗发水测评TOP榜,精准头皮痛点,根源抑菌 - 资讯焦点
  • 支招可靠的UX设计培训班怎么选,效果有保障吗 - 工业品网
  • 辨析专业的港澳留学申请团队,怎么选择不踩坑 - myqiye
  • 爆炸式增长:2019 NLP技术年度回顾
  • 讲讲苏州室内装修服务哪个好,高性价比企业TOP10 - 工业推荐榜
  • ChipAgents完成7,400万美元融资,加速拓展Agentic AI平台,推动芯片设计创新提速
  • 辨析交互设计培训机构,效果好且性价比高的选哪家 - 工业设备
  • 爱尔兰移民公司怎么选?五大评判标准让你选得更放心 - 资讯焦点
  • SSC顺利接管REI Super会员管理业务
  • 迎竹刀市场受欢迎度高吗,深圳性价比高的品牌顾问公司排名 - myqiye
  • 2026年东莞口碑好的GEO生成式引擎优化排名公司排名 - mypinpai
  • 顶刊IEEE TPE论文算法复现,用于永磁同步电机转速调节的抗干扰滑模控制器,代码
  • 改稿速度拉满!千笔·专业降AI率智能体,本科生降重首选