diff --git a/src/main/java/com/xuxd/kafka/console/beans/dto/SysUserDTO.java b/src/main/java/com/xuxd/kafka/console/beans/dto/SysUserDTO.java index 79beb7c..2363bb2 100644 --- a/src/main/java/com/xuxd/kafka/console/beans/dto/SysUserDTO.java +++ b/src/main/java/com/xuxd/kafka/console/beans/dto/SysUserDTO.java @@ -20,6 +20,8 @@ public class SysUserDTO { private String roleIds; + private Boolean resetPassword = false; + public SysUserDO toDO() { SysUserDO userDO = new SysUserDO(); userDO.setId(this.id); diff --git a/src/main/java/com/xuxd/kafka/console/beans/vo/SysUserVO.java b/src/main/java/com/xuxd/kafka/console/beans/vo/SysUserVO.java index 91c7c2c..199495d 100644 --- a/src/main/java/com/xuxd/kafka/console/beans/vo/SysUserVO.java +++ b/src/main/java/com/xuxd/kafka/console/beans/vo/SysUserVO.java @@ -18,6 +18,8 @@ public class SysUserVO { private String roleIds; + private String roleNames; + public static SysUserVO from(SysUserDO userDO) { SysUserVO userVO = new SysUserVO(); userVO.setId(userDO.getId()); diff --git a/src/main/java/com/xuxd/kafka/console/service/impl/UserManageServiceImpl.java b/src/main/java/com/xuxd/kafka/console/service/impl/UserManageServiceImpl.java index 80fb316..eaa6a5c 100644 --- a/src/main/java/com/xuxd/kafka/console/service/impl/UserManageServiceImpl.java +++ b/src/main/java/com/xuxd/kafka/console/service/impl/UserManageServiceImpl.java @@ -15,12 +15,15 @@ import com.xuxd.kafka.console.dao.SysPermissionMapper; import com.xuxd.kafka.console.dao.SysRoleMapper; import com.xuxd.kafka.console.dao.SysUserMapper; import com.xuxd.kafka.console.service.UserManageService; +import com.xuxd.kafka.console.utils.RandomStringUtil; import com.xuxd.kafka.console.utils.UUIDStrUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Service; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -64,8 +67,18 @@ public class UserManageServiceImpl implements UserManageService { @Override public ResponseData addOrUpdateUser(SysUserDTO userDTO) { + if (userDTO.getId() == null) { + if (StringUtils.isEmpty(userDTO.getPassword())) { + userDTO.setPassword(RandomStringUtil.random6Str()); + } SysUserDO userDO = userDTO.toDO(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(true, "username", userDO.getUsername()); + SysUserDO exist = userMapper.selectOne(queryWrapper); + if (exist != null) { + return ResponseData.create().failed("用户已存在:" + userDO.getUsername()); + } userDO.setSalt(UUIDStrUtil.random()); userDO.setPassword(UUIDStrUtil.generate(userDTO.getPassword(), userDO.getSalt())); userMapper.insert(userDTO.toDO()); @@ -76,14 +89,16 @@ public class UserManageServiceImpl implements UserManageService { return ResponseData.create().failed("Unknown User."); } // 判断是否更新密码 - String oldPass = UUIDStrUtil.generate(userDO.getPassword(), userDO.getSalt()); - if (!userDTO.getPassword().equals(oldPass)) { + if (userDTO.getResetPassword()) { + userDTO.setPassword(RandomStringUtil.random6Str()); userDO.setSalt(UUIDStrUtil.random()); userDO.setPassword(UUIDStrUtil.generate(userDTO.getPassword(), userDO.getSalt())); } + userDO.setRoleIds(userDTO.getRoleIds()); + userDO.setUsername(userDTO.getUsername()); userMapper.updateById(userDO); } - return ResponseData.create().success(); + return ResponseData.create().data(userDTO.getPassword()).success(); } @Override @@ -151,7 +166,16 @@ public class UserManageServiceImpl implements UserManageService { public ResponseData selectUser() { QueryWrapper queryWrapper = new QueryWrapper<>(); List userDOS = userMapper.selectList(queryWrapper); - return ResponseData.create().data(userDOS.stream().map(SysUserVO::from).collect(Collectors.toList())).success(); + List roleDOS = roleMapper.selectList(null); + Map roleDOMap = roleDOS.stream().collect(Collectors.toMap(SysRoleDO::getId, Function.identity(), (e1, e2) -> e1)); + List voList = userDOS.stream().map(SysUserVO::from).collect(Collectors.toList()); + voList.forEach(vo -> { + if (vo.getRoleIds() != null) { + Long roleId = Long.valueOf(vo.getRoleIds()); + vo.setRoleNames(roleDOMap.containsKey(roleId) ? roleDOMap.get(roleId).getRoleName() : null); + } + }); + return ResponseData.create().data(voList).success(); } @Override diff --git a/src/main/java/com/xuxd/kafka/console/utils/RandomStringUtil.java b/src/main/java/com/xuxd/kafka/console/utils/RandomStringUtil.java new file mode 100644 index 0000000..4280f8c --- /dev/null +++ b/src/main/java/com/xuxd/kafka/console/utils/RandomStringUtil.java @@ -0,0 +1,26 @@ +package com.xuxd.kafka.console.utils; + +import java.util.Random; + +/** + * @author: xuxd + * @date: 2023/5/8 9:19 + **/ +public class RandomStringUtil { + + private final static String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + + public static String random6Str() { + return generateRandomString(6); + } + + public static String generateRandomString(int length) { + Random random = new Random(); + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + int index = random.nextInt(ALLOWED_CHARS.length()); + sb.append(ALLOWED_CHARS.charAt(index)); + } + return sb.toString(); + } +} diff --git a/ui/src/views/components/MessageBox.vue b/ui/src/views/components/MessageBox.vue new file mode 100644 index 0000000..540ed99 --- /dev/null +++ b/ui/src/views/components/MessageBox.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/ui/src/views/user/CreateUser.vue b/ui/src/views/user/CreateUser.vue index 6346c2f..829a154 100644 --- a/ui/src/views/user/CreateUser.vue +++ b/ui/src/views/user/CreateUser.vue @@ -95,7 +95,7 @@ export default { this.loading = false; if (res.code == 0) { this.$message.success(res.msg); - this.$emit("closeCreateUserDialog", { refresh: true }); + this.$emit("closeCreateUserDialog", { refresh: true, data: res.data }); } else { notification.error({ message: "error", diff --git a/ui/src/views/user/UpdateUserRole.vue b/ui/src/views/user/UpdateUserRole.vue new file mode 100644 index 0000000..2c78034 --- /dev/null +++ b/ui/src/views/user/UpdateUserRole.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/ui/src/views/user/User.vue b/ui/src/views/user/User.vue index 9000cf0..e0eab23 100644 --- a/ui/src/views/user/User.vue +++ b/ui/src/views/user/User.vue @@ -53,8 +53,22 @@ >删除 - 重置密码 + + 重置密码 + + + 分配角色 @@ -62,6 +76,16 @@ @closeCreateUserDialog="closeCreateUserDialog" :visible="showCreateUserDialog" > + + @@ -72,10 +96,12 @@ import request from "@/utils/request"; import notification from "ant-design-vue/lib/notification"; import { UserManageApi } from "@/utils/api"; import CreateUser from "@/views/user/CreateUser.vue"; +import MessageBox from "@/views/components/MessageBox.vue"; +import UpdateUserRole from "@/views/user/UpdateUserRole.vue"; export default { name: "User", - components: { CreateUser }, + components: { CreateUser, MessageBox, UpdateUserRole }, props: { topicList: { type: Array, @@ -89,6 +115,10 @@ export default { filteredData: [], filterUsername: "", showCreateUserDialog: false, + showMessageBox: false, + showUpdateUserRole: false, + messageBoxContent: "", + selectUser: {}, columns: [ { title: "用户名", @@ -97,8 +127,8 @@ export default { }, { title: "角色", - dataIndex: "roleIds", - key: "roleIds", + dataIndex: "roleNames", + key: "roleNames", }, { title: "操作", @@ -150,8 +180,23 @@ export default { this.showCreateUserDialog = false; if (p.refresh) { this.refresh(); + this.messageBoxContent = "用户初始密码:" + p.data; + this.showMessageBox = true; } }, + openUpdateUserRoleDialog(user) { + this.selectUser = user; + this.showUpdateUserRole = true; + }, + closeUpdateUserRoleDialog(p) { + this.showUpdateUserRole = false; + if (p.refresh) { + this.refresh(); + } + }, + closeMessageBox() { + this.showMessageBox = false; + }, deleteUser(user) { this.loading = true; request({ @@ -169,6 +214,27 @@ export default { } }); }, + resetPassword(record) { + this.loading = true; + const params = Object.assign({}, record); + params.resetPassword = true; + request({ + url: UserManageApi.addOrUpdateUser.url, + method: UserManageApi.addOrUpdateUser.method, + data: params, + }).then((res) => { + this.loading = false; + if (res.code == 0) { + this.messageBoxContent = "密码重置成功,新密码:" + res.data; + this.showMessageBox = true; + } else { + notification.error({ + message: "error", + description: res.msg, + }); + } + }); + }, }, created() { this.handleSearch(); @@ -222,4 +288,8 @@ export default { margin-bottom: 5px; margin-top: 5px; } + +.operation-btn { + margin-right: 3%; +}