| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | } |
| | | 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){ |
| | |
| | | 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(""))) |
| | |
| | | } |
| | | // 门店关联会维护员工归属信息,但不能覆盖编辑页明确选择的角色。 |
| | | // 必须在关联处理后写入,否则有门店的员工会被上面的兼容逻辑强制改回角色 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); |