From 9bcbf4398202139b31de1df6599e362915f15682 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期二, 22 九月 2026 10:05:21 +0800
Subject: [PATCH] bug:数据返回问题
---
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java | 33 +++++++++++++++++++++++++++++----
1 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
index 64a2b86..90bbaa7 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
@@ -153,6 +153,11 @@
User user = this.userService.getById(userId);
Role role = roleService.getById(user.getRoleid());
Dept dept = deptService.getById(user.getDeptid());
+ // 兼容历史账号:部分账号的登录手机号仅保存在 account 字段。
+ // 个人资料页必须能回显该绑定手机号,避免前端提交空值。
+ if (StringUtils.isEmpty(user.getPhone()) && !StringUtils.isEmpty(user.getAccount())) {
+ user.setPhone(user.getAccount());
+ }
user.setPhone(maskPhone(user.getPhone()));
user.setIdCard(maskIdCard(user.getIdCard()));
model.addAttribute(user);
@@ -214,6 +219,11 @@
User user = this.userService.getById(userId);
Role role = roleService.getById(user.getRoleid());
Dept dept = deptService.getById(user.getDeptid());
+ // 兼容历史账号:部分账号的登录手机号仅保存在 account 字段。
+ // 个人资料页必须能回显该绑定手机号,避免前端提交空值。
+ if (StringUtils.isEmpty(user.getPhone()) && !StringUtils.isEmpty(user.getAccount())) {
+ user.setPhone(user.getAccount());
+ }
user.setPhone(maskPhone(user.getPhone()));
user.setIdCard(maskIdCard(user.getIdCard()));
model.addAttribute(user);
@@ -434,9 +444,12 @@
}
User oldUser = userService.getById(user.getId());
// 判断是否更改电话
- if (user.getPhone() != null && user.getPhone().contains("*")) {
+ if (StringUtils.isEmpty(user.getPhone()) || user.getPhone().contains("*")) {
// The edit view displays a masked phone. Treat an unchanged masked
- // value as "keep original", never as a value to persist.
+ // value, or an omitted field, as "keep original", never as a
+ // value to persist. Some edit forms do not submit disabled or
+ // hidden fields; allowing an empty value through would erase the
+ // stored phone after deployment.
} else if (!Objects.equals(oldUser.getPhone(), user.getPhone())) {
User phone = userService.getOne(new QueryWrapper<User>().eq("phone", user.getPhone()));
if (phone == null){
@@ -448,7 +461,11 @@
oldUser.setName(user.getName());
oldUser.setBirthday(user.getBirthday());
oldUser.setDeptid(user.getDeptid());
- if (user.getIdCard() == null || !user.getIdCard().contains("*")) oldUser.setIdCard(user.getIdCard());
+ // 身份证号为空说明本次表单没有提交该字段,不能覆盖数据库中的历史值;
+ // 脱敏值同样只用于回显,不能写回数据库。
+ if (!StringUtils.isEmpty(user.getIdCard()) && !user.getIdCard().contains("*")) {
+ oldUser.setIdCard(user.getIdCard());
+ }
oldUser.setSex(user.getSex());
oldUser.setEmail(user.getEmail());
if (user.getAvatar()!=null && (!user.getAvatar().equals("")))
@@ -468,13 +485,21 @@
}
// 门店关联会维护员工归属信息,但不能覆盖编辑页明确选择的角色。
// 必须在关联处理后写入,否则有门店的员工会被上面的兼容逻辑强制改回角色 3。
- if (!StringUtils.isEmpty(user.getRoleid())) {
+ // 个人资料页不提供 roleid_ 回显控件时,旧版前端可能提交字符串
+ // "undefined";该值绝不能覆盖 sys_user.roleid。
+ if (isValidRoleId(user.getRoleid())) {
oldUser.setRoleid(user.getRoleid());
}
this.userService.updateById(oldUser);
return SUCCESS_TIP;
}
+ private boolean isValidRoleId(String roleId) {
+ return !StringUtils.isEmpty(roleId)
+ && !"undefined".equalsIgnoreCase(roleId)
+ && !"null".equalsIgnoreCase(roleId);
+ }
+
private String maskPhone(String value) {
if (value == null) return null;
return value.length() <= 7 ? stars(value.length()) : value.substring(0, 3) + "****" + value.substring(7);
--
Gitblit v1.7.1