From 8d8ecf8763da54df47b91c45867405c0d12f19cc Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Wed, 26 Nov 2025 12:03:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- schoolNewsServ/.bin/mysql/sql/createDB.sql | 2 +- .../.bin/mysql/sql/createTableUser.sql | 1 + .../org/xyzh/common/dto/user/TbSysUser.java | 2 +- .../xyzh/common/dto/user/TbSysUserInfo.java | 16 ++ .../main/java/org/xyzh/common/vo/UserVO.java | 7 + .../user/service/impl/SysUserServiceImpl.java | 10 +- .../main/resources/mapper/UserInfoMapper.xml | 4 +- .../src/main/resources/mapper/UserMapper.xml | 10 +- .../controller/UserProfileController.java | 33 ++- schoolNewsWeb/src/apis/index.ts | 2 +- schoolNewsWeb/src/apis/usercenter/profile.ts | 2 +- .../src/components/base/UserDropdown.vue | 3 +- schoolNewsWeb/src/types/system/user.ts | 4 + .../user/user-center/components/UserCard.vue | 3 +- .../user-center/profile/PersonalInfoView.vue | 192 ++++++++++++------ 15 files changed, 203 insertions(+), 88 deletions(-) diff --git a/schoolNewsServ/.bin/mysql/sql/createDB.sql b/schoolNewsServ/.bin/mysql/sql/createDB.sql index 1b0b531..3ede307 100644 --- a/schoolNewsServ/.bin/mysql/sql/createDB.sql +++ b/schoolNewsServ/.bin/mysql/sql/createDB.sql @@ -1,6 +1,6 @@ -- 修复字符编码问题 -- 删除现有数据库(如果存在) --- DROP DATABASE IF EXISTS `school_news`; +DROP DATABASE IF EXISTS `school_news`; -- 创建数据库,使用utf8mb4字符集 CREATE DATABASE IF NOT EXISTS `school_news` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/schoolNewsServ/.bin/mysql/sql/createTableUser.sql b/schoolNewsServ/.bin/mysql/sql/createTableUser.sql index bcb0cf6..e4bff0d 100644 --- a/schoolNewsServ/.bin/mysql/sql/createTableUser.sql +++ b/schoolNewsServ/.bin/mysql/sql/createTableUser.sql @@ -32,6 +32,7 @@ CREATE TABLE `tb_sys_user_info` ( `given_name` VARCHAR(50) DEFAULT NULL COMMENT '名', `full_name` VARCHAR(100) DEFAULT NULL COMMENT '全名', `level` INT(4) DEFAULT 1 COMMENT '等级', + `student_id` VARCHAR(50) DEFAULT NULL COMMENT '学号', `id_card` VARCHAR(50) DEFAULT NULL COMMENT '身份证号', `address` VARCHAR(255) DEFAULT NULL COMMENT '地址', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUser.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUser.java index d55777a..36d895b 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUser.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUser.java @@ -11,7 +11,7 @@ import org.xyzh.common.dto.BaseDTO; public class TbSysUser extends BaseDTO { private static final long serialVersionUID = 1L; - + /** * @description 用户名 * @author yslg diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUserInfo.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUserInfo.java index de9b5ce..dfb5539 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUserInfo.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/user/TbSysUserInfo.java @@ -62,6 +62,13 @@ public class TbSysUserInfo extends BaseDTO { */ private Float level; + /** + * @description 学号 + * @author yslg + * @since 2025-11-26 + */ + private String studentId; + /** * @description 身份证号 * @author yslg @@ -132,6 +139,14 @@ public class TbSysUserInfo extends BaseDTO { this.level = level; } + public String getStudentId() { + return studentId; + } + + public void setStudentId(String studentId) { + this.studentId = studentId; + } + public String getIdCard() { return idCard; } @@ -160,6 +175,7 @@ public class TbSysUserInfo extends BaseDTO { ", givenName='" + givenName + '\'' + ", fullName='" + fullName + '\'' + ", level=" + level + + ", studentId='" + studentId + '\'' + ", idCard='" + idCard + '\'' + ", address='" + address + '\'' + ", createTime=" + getCreateTime() + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserVO.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserVO.java index 3af215f..f00a926 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserVO.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserVO.java @@ -16,6 +16,7 @@ public class UserVO { private String givenName; private String fullName; private Float level; + private String studentId; private String idCard; private String address; private String deptID; @@ -138,6 +139,12 @@ public class UserVO { public void setLevel(Float level) { this.level = level; } + public String getStudentId() { + return studentId; + } + public void setStudentId(String studentId) { + this.studentId = studentId; + } public Date getCreateTime() { return createTime; } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/service/user/service/impl/SysUserServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/service/user/service/impl/SysUserServiceImpl.java index 574727f..28039f2 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/service/user/service/impl/SysUserServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/service/user/service/impl/SysUserServiceImpl.java @@ -611,12 +611,12 @@ public class SysUserServiceImpl implements SysUserService { filter.setEmail(email); filter.setDeleted(false); - if (StringUtils.hasText(excludeId)) { - filter.setID(excludeId); - } + // if (StringUtils.hasText(excludeId)) { + // filter.setID(excludeId); + // } - long count = userMapper.selectByFilter(filter, userDeptRoles).size(); - boolean exists = count > 0; + List userList = userMapper.selectByFilter(filter, userDeptRoles); + boolean exists = userList.size() >1 && (userList.size() == 1 && !userList.get(0).getID().equals(excludeId)); logger.info("邮箱存在性检查完成:{},存在:{}", email, exists); resultDomain.success("检查完成", exists); diff --git a/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml index 91ff50c..c730a49 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml @@ -10,6 +10,7 @@ + @@ -19,7 +20,7 @@ - id, user_id, avatar, gender, family_name, given_name, full_name, level, id_card, address, create_time, update_time, delete_time, deleted + id, user_id, avatar, gender, student_id, family_name, given_name, full_name, level, id_card, address, create_time, update_time, delete_time, deleted @@ -39,6 +40,7 @@ given_name = #{userInfo.givenName}, full_name = #{userInfo.fullName}, level = #{userInfo.level}, + student_id = #{userInfo.studentId}, id_card = #{userInfo.idCard}, address = #{userInfo.address}, updater = #{userInfo.updater}, diff --git a/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml index fd77c0e..fc1120a 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml @@ -50,6 +50,7 @@ + @@ -64,13 +65,13 @@ - id, user_id, avatar, gender, family_name, given_name, full_name, id_card, address, + id, user_id, avatar, gender, family_name, given_name, full_name, student_id,id_card, address, create_time, update_time, delete_time, deleted, status - id, user_id, avatar, gender, family_name, given_name, full_name, id_card, address, + id, user_id, avatar, gender, family_name, given_name, full_name, student_id,id_card, address, create_time, update_time, delete_time, deleted @@ -230,6 +231,7 @@ ui.given_name, ui.full_name, ui.level, + ui.student_id, ui.id_card, ui.address, udr.dept_id, @@ -349,6 +351,7 @@ ui.given_name, ui.full_name, ui.level, + ui.student_id, ui.id_card, ui.address, udr.dept_id, @@ -491,6 +494,8 @@ family_name = #{userInfo.familyName}, given_name = #{userInfo.givenName}, full_name = #{userInfo.fullName}, + level = #{userInfo.level}, + student_id = #{userInfo.studentId}, id_card = #{userInfo.idCard}, address = #{userInfo.address}, update_time = #{userInfo.updateTime} @@ -562,6 +567,7 @@ tus.email, tsui.avatar, tsui.gender, + tsui.student_id, (SELECT dept_path FROM dept_hierarchy WHERE parent_id IS NULL LIMIT 1) as dept_name, tsr.name as role_name, tsui.level, diff --git a/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserProfileController.java b/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserProfileController.java index 42b22bc..54d0aab 100644 --- a/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserProfileController.java +++ b/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserProfileController.java @@ -56,15 +56,34 @@ public class UserProfileController { * 更新个人信息 */ @PutMapping("/info/update") - public ResultDomain updateUserProfile(@HttpLogin LoginDomain loginDomain, @RequestBody TbSysUserInfo userInfo) { - // TODO: 实现更新个人信息(姓名、部门、联系方式等) - ResultDomain result = userService.updateUserInfo(userInfo); - if (result.isSuccess()) { + public ResultDomain updateUserProfile(@HttpLogin LoginDomain loginDomain, @RequestBody UserVO userVO) { + ResultDomain result = new ResultDomain<>(); + // 更新tb_sys_user + TbSysUser user = new TbSysUser(); + user.setID(userVO.getUserID()); + user.setUsername(userVO.getUsername()); + user.setEmail(userVO.getEmail()); + user.setPhone(userVO.getPhone()); + ResultDomain re = userService.updateUser(user); + if (!re.isSuccess()) { + result.fail(re.getMessage()); + return result; + } + + // 更新tb_sys_user_info + TbSysUserInfo userInfo = new TbSysUserInfo(); + userInfo.setUserID(userVO.getUserID()); + userInfo.setAvatar(userVO.getAvatar()); + userInfo.setGender(userVO.getGender()); + userInfo.setStudentId(userVO.getStudentId()); + + ResultDomain result1 = userService.updateUserInfo(userInfo); + if (result1.isSuccess()) { + result.success("个人信息更新成功", userVO); return result; } else { - ResultDomain result2 = new ResultDomain<>(); - result2.fail(result.getCode(), result.getMessage()); - return result2; + result.fail(result1.getCode(), result1.getMessage()); + return result; } } diff --git a/schoolNewsWeb/src/apis/index.ts b/schoolNewsWeb/src/apis/index.ts index 456a27c..54013cf 100644 --- a/schoolNewsWeb/src/apis/index.ts +++ b/schoolNewsWeb/src/apis/index.ts @@ -184,7 +184,7 @@ request.interceptors.response.use( case 401: ElMessage.error('认证失败,请重新登录'); TokenManager.removeToken(); - window.location.href = '/login'; + window.location.href = '/schoolNewsWeb/login'; break; case 403: ElMessage.error('没有权限访问该资源'); diff --git a/schoolNewsWeb/src/apis/usercenter/profile.ts b/schoolNewsWeb/src/apis/usercenter/profile.ts index e2c5583..c14fd73 100644 --- a/schoolNewsWeb/src/apis/usercenter/profile.ts +++ b/schoolNewsWeb/src/apis/usercenter/profile.ts @@ -31,7 +31,7 @@ export const userProfileApi = { * @param userInfo 用户信息 * @returns Promise> */ - async updateUserProfile(userInfo: any): Promise> { + async updateUserProfile(userInfo: UserVO): Promise> { const response = await api.put('/usercenter/profile/info/update', userInfo); return response.data; }, diff --git a/schoolNewsWeb/src/components/base/UserDropdown.vue b/schoolNewsWeb/src/components/base/UserDropdown.vue index 369fb89..38bda9d 100644 --- a/schoolNewsWeb/src/components/base/UserDropdown.vue +++ b/schoolNewsWeb/src/components/base/UserDropdown.vue @@ -89,6 +89,7 @@ import type { UserVO, SysMenu } from '@/types'; import { ChangeHome } from '@/components/base'; import userIcon from '@/assets/imgs/user.svg'; import settingsIcon from '@/assets/imgs/settings.svg'; +import { FILE_DOWNLOAD_URL } from '@/config'; // Props interface Props { user?: UserVO | null; @@ -118,7 +119,7 @@ const isLoggedIn = computed(() => { }); const userAvatar = computed(() => { - return props.user?.avatar || ''; + return props.user?.avatar ? FILE_DOWNLOAD_URL + props.user?.avatar : ''; }); const avatarText = computed(() => { diff --git a/schoolNewsWeb/src/types/system/user.ts b/schoolNewsWeb/src/types/system/user.ts index c23296a..9a3bab2 100644 --- a/schoolNewsWeb/src/types/system/user.ts +++ b/schoolNewsWeb/src/types/system/user.ts @@ -29,6 +29,9 @@ export interface SysUser extends BaseDTO { export interface SysUserInfo extends BaseDTO { /** 用户ID */ userID?: string; + /** 用户名(迁移到userInfo中,便于统一展示) */ + username?: string; + studentId?: string; /** 真实姓名 */ realName?: string; /** 昵称 */ @@ -51,6 +54,7 @@ export interface SysUserInfo extends BaseDTO { export interface UserVO extends BaseDTO { /** 用户ID(兼容字段) */ userID?: string; + studentId?: string; /** 用户名 */ username?: string; /** 邮箱 */ diff --git a/schoolNewsWeb/src/views/user/user-center/components/UserCard.vue b/schoolNewsWeb/src/views/user/user-center/components/UserCard.vue index 5c9e770..85f748b 100644 --- a/schoolNewsWeb/src/views/user/user-center/components/UserCard.vue +++ b/schoolNewsWeb/src/views/user/user-center/components/UserCard.vue @@ -13,7 +13,7 @@
@@ -57,6 +57,7 @@ import femaleIcon from '@/assets/imgs/female.svg'; import { ElMessage } from 'element-plus'; import { useRouter } from 'vue-router'; import { getLevelWordIconUrl } from '@/utils/iconUtils'; +import { FILE_DOWNLOAD_URL } from '@/config'; const router = useRouter(); const userInfo = ref(); diff --git a/schoolNewsWeb/src/views/user/user-center/profile/PersonalInfoView.vue b/schoolNewsWeb/src/views/user/user-center/profile/PersonalInfoView.vue index f48cc67..d810578 100644 --- a/schoolNewsWeb/src/views/user/user-center/profile/PersonalInfoView.vue +++ b/schoolNewsWeb/src/views/user/user-center/profile/PersonalInfoView.vue @@ -1,20 +1,21 @@