diff --git a/schoolNewsServ/.bin/mysql/sql/createTablePermission.sql b/schoolNewsServ/.bin/mysql/sql/createTablePermission.sql index aeec940..47cc4ad 100644 --- a/schoolNewsServ/.bin/mysql/sql/createTablePermission.sql +++ b/schoolNewsServ/.bin/mysql/sql/createTablePermission.sql @@ -103,7 +103,8 @@ INSERT INTO `tb_sys_permission` (id,permission_id, name, code, description, crea ('2','perm_system_dept_manage', '系统部门查看', 'system:dept:manage', '系统部门查看权限', '1', now()), ('3','perm_system_menu_manage', '系统菜单查看', 'system:menu:manage', '系统菜单查看权限', '1', now()), ('4','perm_system_permission_manage', '系统权限查看', 'system:permission:manage', '系统权限查看权限', '1', now()), -('5','perm_system_role_manage', '系统角色查看', 'system:role:manage', '系统角色查看权限', '1', now()); +('5','perm_system_role_manage', '系统角色查看', 'system:role:manage', '系统角色查看权限', '1', now()), +('6','perm_system_user_manage', '系统用户查看', 'system:user:manage', '系统用户查看权限', '1', now()); -- 角色-权限关联 DROP TABLE IF EXISTS `tb_sys_role_permission`; @@ -126,7 +127,8 @@ INSERT INTO `tb_sys_role_permission` (id, role_id, permission_id, creator, creat ('2', 'admin', 'perm_system_dept_manage', '1', now()), ('3', 'admin', 'perm_system_menu_manage', '1', now()), ('4', 'admin', 'perm_system_permission_manage', '1', now()), -('5', 'admin', 'perm_system_role_manage', '1', now()); +('5', 'admin', 'perm_system_role_manage', '1', now()), +('6', 'admin', 'perm_system_user_manage', '1', now()); -- 菜单表 DROP TABLE IF EXISTS `tb_sys_menu`; @@ -153,12 +155,12 @@ CREATE TABLE `tb_sys_menu` ( -- Insert default menus INSERT INTO `tb_sys_menu` (id,menu_id, name, parent_id, url, component, icon, order_num, type, creator, create_time) VALUES -('1','menu_system_manage', '系统管理', NULL, '/manage/system/manage', 'manage/system/ManageView', 'el-icon-setting', 1, 1, '1', now()), +('1','menu_system_manage', '系统管理', NULL, '', '', 'el-icon-setting', 1, 1, '1', now()), ('2','menu_system_dept', '部门管理', 'menu_system_manage', '/manage/system/dept', 'manage/system/DeptManageView', 'el-icon-office-building', 2, 1, '1', now()), ('3','menu_system_menu', '菜单管理', 'menu_system_manage', '/manage/system/menu', 'manage/system/MenuManageView', 'el-icon-menu', 2, 1, '1', now()), ('4','menu_system_permission', '权限管理', 'menu_system_manage', '/manage/system/permission', 'manage/system/PermissionManageView', 'el-icon-key', 3, 1, '1', now()), -('5','menu_system_role', '角色管理', 'menu_system_manage', '/manage/system/role', 'manage/system/RoleManageView', 'el-icon-user', 4, 1, '1', now()); - +('5','menu_system_role', '角色管理', 'menu_system_manage', '/manage/system/role', 'manage/system/RoleManageView', 'el-icon-user', 4, 1, '1', now()), +('6','menu_system_user', '用户管理', 'menu_system_manage', '/manage/system/user', 'manage/system/UserManageView', 'el-icon-user', 5, 1, '1', now()); DROP TABLE IF EXISTS `tb_sys_menu_permission`; CREATE TABLE `tb_sys_menu_permission` ( `id` VARCHAR(50) NOT NULL COMMENT '菜单权限ID', @@ -179,4 +181,5 @@ INSERT INTO `tb_sys_menu_permission` (id, permission_id, menu_id, creator, creat ('2', 'perm_system_dept_manage', 'menu_system_dept', '1', now()), ('3', 'perm_system_menu_manage', 'menu_system_menu', '1', now()), ('4', 'perm_system_permission_manage', 'menu_system_permission', '1', now()), -('5', 'perm_system_role_manage', 'menu_system_role', '1', now()); \ No newline at end of file +('5', 'perm_system_role_manage', 'menu_system_role', '1', now()), +('6', 'perm_system_user_manage', 'menu_system_user', '1', now()); \ No newline at end of file diff --git a/schoolNewsServ/.bin/mysql/sql/createTableUser.sql b/schoolNewsServ/.bin/mysql/sql/createTableUser.sql index e6c4082..e8c7523 100644 --- a/schoolNewsServ/.bin/mysql/sql/createTableUser.sql +++ b/schoolNewsServ/.bin/mysql/sql/createTableUser.sql @@ -20,8 +20,8 @@ CREATE TABLE `tb_sys_user` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; -- 推荐:把默认 admin 密码替换为已哈希的值 -INSERT INTO `tb_sys_user` (id, username, password, email) VALUES -('1', 'admin', '$2a$10$/Bo2SXboVUpYfR6EA.y8puYQaMGBcuNYFY/EkQRY3w27IH56EuEcS', '3223905473@qq.com'); +INSERT INTO `tb_sys_user` (id, username, password, email, status) VALUES +('1', 'admin', '$2a$10$/Bo2SXboVUpYfR6EA.y8puYQaMGBcuNYFY/EkQRY3w27IH56EuEcS', '3223905473@qq.com', 0); -- 用户信息表 DROP TABLE IF EXISTS `tb_sys_user_info`; diff --git a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/dept/DepartmentService.java b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/dept/DepartmentService.java index 6ea8dec..20a216f 100644 --- a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/dept/DepartmentService.java +++ b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/dept/DepartmentService.java @@ -4,6 +4,8 @@ import java.util.List; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.dto.dept.TbSysDept; +import org.xyzh.common.dto.dept.TbSysDeptRole; +import org.xyzh.common.dto.role.TbSysRole; /** * @description DepartmentService.java文件描述 部门服务接口 @@ -21,6 +23,15 @@ public interface DepartmentService { * @since 2025-09-28 */ ResultDomain getAllDepartments(); + + /** + * @description 查询部门列表 + * @param filter 过滤条件 + * @return ResultDomain 部门列表 + * @author yslg + * @since 2025-10-06 + */ + ResultDomain getDeptList(TbSysDept filter); /** * @description 根据ID查询部门 @@ -76,4 +87,41 @@ public interface DepartmentService { * @since 2025-09-28 */ ResultDomain checkDepartmentNameExists(String deptName, String excludeId); + + /** + * @description 查询部门绑定角色 + * @param deptId 部门ID + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain getDeptByRole(String deptId); + + /** + * @description 查询部门绑定角色 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-06 + */ + ResultDomain getDeptByRoleList(); + + /** + * @description 绑定部门角色 + * @param deptIDs 部门ID列表 + * @param roleIDs 角色ID列表 + * @return ResultDomain 部门角色信息 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain bindDeptRole(List deptIDs, List roleIDs); + + /** + * @description 解绑部门角色 + * @param deptIDs 部门ID列表 + * @param roleIDs 角色ID列表 + * @return ResultDomain 部门角色信息 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain unbindDeptRole(List deptIDs, List roleIDs); } diff --git a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/role/RoleService.java b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/role/RoleService.java index e72e11c..d438997 100644 --- a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/role/RoleService.java +++ b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/role/RoleService.java @@ -1,7 +1,9 @@ package org.xyzh.api.system.role; import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.dto.permission.TbSysPermission; import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.dto.role.TbSysRolePermission; import org.xyzh.common.vo.DeptRoleVO; @@ -23,22 +25,13 @@ public interface RoleService { ResultDomain getAllRoles(); /** - * @description 根据角色ID查询角色 - * @param roleId 角色ID - * @return ResultDomain 角色信息 + * @description 根据过滤条件获取角色列表 + * @param filter 过滤条件 + * @return ResultDomain 角色列表 * @author yslg - * @since 2025-09-28 + * @since 2025-10-09 */ - ResultDomain getRoleById(String roleId); - - /** - * @description 根据用户ID查询部门角色列表 - * @param userId 用户ID - * @return ResultDomain 角色列表 - * @author yslg - * @since 2025-09-28 - */ - ResultDomain getDeptRolesByUserId(String userId); + ResultDomain getRoleList(TbSysRole filter); /** * @description 创建角色 @@ -65,7 +58,25 @@ public interface RoleService { * @author yslg * @since 2025-09-28 */ - ResultDomain deleteRole(String roleId); + ResultDomain deleteRole(TbSysRole role); + + /** + * @description 根据角色ID查询角色 + * @param roleId 角色ID + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain getRoleById(String roleId); + + /** + * @description 根据用户ID查询部门角色列表 + * @param userId 用户ID + * @return ResultDomain 角色列表 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain getDeptRolesByUserId(String userId); /** * @description 检查角色名称是否存在 @@ -86,4 +97,14 @@ public interface RoleService { * @since 2025-09-28 */ ResultDomain changeRoleStatus(String roleId, Integer status); + + /** + * @description 获取角色权限 + * @param roleId 角色ID + * @return ResultDomain 角色权限信息 + * @author yslg + * @since 2025-10-09 + */ + ResultDomain getRolePermission(String roleId); + } diff --git a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java index 522cf5c..a99b25c 100644 --- a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java +++ b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java @@ -5,7 +5,9 @@ import java.util.List; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.dto.user.TbSysUser; +import org.xyzh.common.dto.user.TbSysUserDeptRole; import org.xyzh.common.dto.user.TbSysUserInfo; +import org.xyzh.common.vo.UserDeptRoleVO; /** * @description UserRemoteService.java文件描述 用户远程服务接口 @@ -148,6 +150,35 @@ public interface UserService { */ ResultDomain resetPassword(String userId, String newPassword); + /** + * @description 绑定用户部门角色 + * @param filter + * @return ResultDomain 绑定结果 + * @author yslg + * @since 2025-10-09 + */ + ResultDomain getBindUserDeptRoleList(TbSysUserDeptRole filter); + + + /** + * @description 绑定用户部门角色 + * @param filter + * @return ResultDomain 绑定结果 + * @author yslg + * @since 2025-10-09 + */ + ResultDomain bindUserDeptRole(UserDeptRoleVO userDeptRoleVO); + + /** + * @description 解绑用户部门角色 + * @param filter + * @return ResultDomain 解绑结果 + * @author yslg + * @since 2025-10-09 + */ + ResultDomain unbindUserDeptRole(UserDeptRoleVO userDeptRoleVO); + + // ----------------用户信息相关-------------------------------- /** diff --git a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/service/UserDetailsServiceImpl.java b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/service/UserDetailsServiceImpl.java index 04bffa7..9fa99bf 100644 --- a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/service/UserDetailsServiceImpl.java +++ b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/service/UserDetailsServiceImpl.java @@ -43,7 +43,11 @@ public class UserDetailsServiceImpl implements UserDetailsService { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { TbSysUser filter = new TbSysUser(); filter.setUsername(username); - TbSysUser user = userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + throw new UsernameNotFoundException("用户不存在: " + username); + } + TbSysUser user = users.get(0); if (user == null) { throw new UsernameNotFoundException("用户不存在: " + username); @@ -62,7 +66,11 @@ public class UserDetailsServiceImpl implements UserDetailsService { public UserDetails loadUserByUserId(String userId) { TbSysUser filter = new TbSysUser(); filter.setID(userId); - TbSysUser user = userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + throw new UsernameNotFoundException("用户不存在: " + userId); + } + TbSysUser user = users.get(0); if (user == null) { throw new UsernameNotFoundException("用户不存在: " + userId); diff --git a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java index cc8c22a..16ed2fa 100644 --- a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java +++ b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java @@ -2,6 +2,9 @@ package org.xyzh.auth.strategy.impl; import org.springframework.stereotype.Component; import org.springframework.security.crypto.password.PasswordEncoder; + +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; import org.xyzh.auth.strategy.LoginStrategy; import org.xyzh.common.core.domain.LoginParam; @@ -39,7 +42,11 @@ public class EmailLoginStrategy implements LoginStrategy { public TbSysUser findUser(LoginParam loginParam) { TbSysUser filter = new TbSysUser(); filter.setEmail(loginParam.getEmail()); - return userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + return null; + } + return users.get(0); } @Override diff --git a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java index a53873a..23d8fd4 100644 --- a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java +++ b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java @@ -8,6 +8,9 @@ import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.common.utils.NonUtils; import org.xyzh.api.system.user.UserService; + +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,7 +62,11 @@ public class PasswordLoginStrategy implements LoginStrategy { if (NonUtils.isNotEmpty(loginParam.getPhone())) { filter.setPhone(loginParam.getPhone()); } - return userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + return null; + } + return users.get(0); } @Override diff --git a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java index 9f8b946..22abc74 100644 --- a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java +++ b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java @@ -8,6 +8,8 @@ import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.api.system.user.UserService; +import java.util.List; + /** * @description PhoneLoginStrategy.java文件描述 手机号登录策略 * @filename PhoneLoginStrategy.java @@ -39,7 +41,11 @@ public class PhoneLoginStrategy implements LoginStrategy { public TbSysUser findUser(LoginParam loginParam) { TbSysUser filter = new TbSysUser(); filter.setPhone(loginParam.getPhone()); - return userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + return null; + } + return users.get(0); } @Override diff --git a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java index cce144c..423fa72 100644 --- a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java +++ b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java @@ -8,6 +8,8 @@ import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.api.system.user.UserService; +import java.util.List; + /** * @description UsernameLoginStrategy.java文件描述 用户名登录策略 * @filename UsernameLoginStrategy.java @@ -39,7 +41,11 @@ public class UsernameLoginStrategy implements LoginStrategy { public TbSysUser findUser(LoginParam loginParam) { TbSysUser filter = new TbSysUser(); filter.setUsername(loginParam.getUsername()); - return userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + return null; + } + return users.get(0); } @Override diff --git a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java index 5b2c260..910a4a8 100644 --- a/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java +++ b/schoolNewsServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java @@ -7,6 +7,8 @@ import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.api.system.user.UserService; +import java.util.List; + /** * @description WechatLoginStrategy.java文件描述 微信登录策略 * @filename WechatLoginStrategy.java @@ -35,7 +37,11 @@ public class WechatLoginStrategy implements LoginStrategy { public TbSysUser findUser(LoginParam loginParam) { TbSysUser filter = new TbSysUser(); filter.setWechatID(loginParam.getWechatID()); - return userService.getUserByFilter(filter).getData(); + List users = userService.getUserByFilter(filter).getDataList(); + if(users.isEmpty()) { + return null; + } + return users.get(0); } @Override diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/dept/TbSysDeptRole.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/dept/TbSysDeptRole.java index 3ef309b..1a084f9 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/dept/TbSysDeptRole.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/dept/TbSysDeptRole.java @@ -40,6 +40,58 @@ public class TbSysDeptRole extends BaseDTO { */ public String updater; + public TbSysDeptRole() { + super(); + } + + public String getDeptID() { + return deptID; + } + + + + public void setDeptID(String deptID) { + this.deptID = deptID; + } + + + + public String getRoleID() { + return roleID; + } + + + + public void setRoleID(String roleID) { + this.roleID = roleID; + } + + + + public String getCreator() { + return creator; + } + + + + public void setCreator(String creator) { + this.creator = creator; + } + + + + public String getUpdater() { + return updater; + } + + + + public void setUpdater(String updater) { + this.updater = updater; + } + + + @Override public String toString() { return "TbSysDeptRole{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/DeptRoleVO.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/DeptRoleVO.java index c950784..0da35ec 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/DeptRoleVO.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/DeptRoleVO.java @@ -2,12 +2,19 @@ package org.xyzh.common.vo; import org.xyzh.common.dto.dept.TbSysDept; import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.dto.user.TbSysUser; + +import java.util.List; public class DeptRoleVO { private TbSysDept dept; private TbSysRole role; + private List depts; + private List roles; + private List users; + public TbSysDept getDept() { return dept; } @@ -23,4 +30,29 @@ public class DeptRoleVO { public void setRole(TbSysRole role) { this.role = role; } + + public List getDepts() { + return depts; + } + + public void setDepts(List depts) { + this.depts = depts; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } + } diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserDeptRoleVO.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserDeptRoleVO.java new file mode 100644 index 0000000..ce9e78e --- /dev/null +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/UserDeptRoleVO.java @@ -0,0 +1,51 @@ +package org.xyzh.common.vo; + +import java.util.List; + +import org.xyzh.common.dto.BaseDTO; +import org.xyzh.common.dto.dept.TbSysDept; +import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.dto.user.TbSysUser; +import org.xyzh.common.dto.user.TbSysUserDeptRole; + +public class UserDeptRoleVO extends BaseDTO{ + private TbSysUser user; + private List users; + private List depts; + private List roles; + private List userDeptRoles; + + public TbSysUser getUser() { + return user; + } + public void setUser(TbSysUser user) { + this.user = user; + } + public List getUsers() { + return users; + } + public void setUsers(List users) { + this.users = users; + } + public List getDepts() { + return depts; + } + public void setDepts(List depts) { + this.depts = depts; + } + public List getRoles() { + return roles; + } + public void setRoles(List roles) { + this.roles = roles; + } + public List getUserDeptRoles() { + return userDeptRoles; + } + public void setUserDeptRoles(List userDeptRoles) { + this.userDeptRoles = userDeptRoles; + } + + + +} diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/DeptController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/DeptController.java new file mode 100644 index 0000000..7260592 --- /dev/null +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/DeptController.java @@ -0,0 +1,151 @@ +package org.xyzh.system.controller; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.xyzh.api.system.dept.DepartmentService; +import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.dto.dept.TbSysDept; +import org.xyzh.common.dto.dept.TbSysDeptRole; +import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.vo.DeptRoleVO; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMapping; + +@RestController +@RequestMapping("/depts") +public class DeptController { + private static final Logger logger = LoggerFactory.getLogger(DeptController.class); + @Autowired + private DepartmentService deptService; + + /** + * @description 查询所有部门 + * @return ResultDomain 部门列表 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/all") + public ResultDomain getAllDepts() { + return deptService.getAllDepartments(); + } + + /** + * @description 查询部门列表 + * @param filter 过滤条件 + * @return ResultDomain 部门列表 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/list") + public ResultDomain getDeptList(@RequestBody TbSysDept filter) { + return deptService.getDeptList(filter); + } + + /** + * @description 查询部门 + * @param deptId 部门ID + * @return ResultDomain 部门信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/id") + public ResultDomain getDeptById(@RequestBody TbSysDept dept) { + return deptService.getDepartmentById(dept.getDeptID()); + } + + /** + * @description 创建部门 + * @param dept 部门信息 + * @return ResultDomain 部门信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/dept") + public ResultDomain createDept(@RequestBody TbSysDept dept) { + return deptService.createDepartment(dept); + } + + /** + * @description 更新部门 + * @param dept 部门信息 + * @return ResultDomain 部门信息 + * @author yslg + * @since 2025-10-06 + */ + @PutMapping("/dept") + public ResultDomain updateDept(@RequestBody TbSysDept dept) { + return deptService.updateDepartment(dept); + } + + /** + * @description 删除部门 + * @param dept 部门信息 + * @return ResultDomain 部门信息 + * @author yslg + * @since 2025-10-06 + */ + @DeleteMapping("/dept") + public ResultDomain deleteDept(@RequestBody TbSysDept dept) { + return deptService.deleteDepartment(dept.getDeptID()); + } + + /** + * @description 查询部门绑定角色 + * @param dept 部门信息 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/role") + public ResultDomain getDeptByRole(@RequestBody TbSysDept dept) { + return deptService.getDeptByRole(dept.getDeptID()); + } + + /** + * @description 查询部门绑定角色 + * @param dept 部门信息 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/role/list") + public ResultDomain getDeptByRoleList() { + return deptService.getDeptByRoleList(); + } + + /** + * @description 绑定部门角色 + * @param dept 部门信息 + * @return ResultDomain 部门角色信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/bind/role") + public ResultDomain bindDeptRole(@RequestBody DeptRoleVO deptRole) { + List deptIDs = deptRole.getDepts().stream().map(TbSysDept::getDeptID).collect(Collectors.toList()); + List roleIDs = deptRole.getRoles().stream().map(TbSysRole::getRoleID).collect(Collectors.toList()); + return deptService.bindDeptRole(deptIDs, roleIDs); + } + + /** + * @description 解绑部门角色 + * @param dept 部门信息 + * @return ResultDomain 部门角色信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/unbind/role") + public ResultDomain unbindDeptRole(@RequestBody DeptRoleVO deptRole) { + List deptIDs = deptRole.getDepts().stream().map(TbSysDept::getDeptID).collect(Collectors.toList()); + List roleIDs = deptRole.getRoles().stream().map(TbSysRole::getRoleID).collect(Collectors.toList()); + return deptService.unbindDeptRole(deptIDs, roleIDs); + } +} diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java index 6c79fc7..c1b1c92 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java @@ -3,12 +3,18 @@ package org.xyzh.system.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.xyzh.api.system.role.RoleService; import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.dto.permission.TbSysPermission; import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.dto.role.TbSysRolePermission; +import org.xyzh.common.vo.DeptRoleVO; /** * @description RoleController.java文件描述 角色控制器 @@ -35,4 +41,78 @@ public class RoleController { public ResultDomain all() { return roleService.getAllRoles(); } + + /** + * @description 根据角色ID获取角色 + * @param role 角色信息 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/id") + public ResultDomain getRoleById(@RequestBody TbSysRole role) { + return roleService.getRoleById(role.getRoleID()); + } + + /** + * @description 根据过滤条件获取角色列表 + * @param filter 过滤条件 + * @return ResultDomain 角色列表 + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/list") + public ResultDomain getRoleList(@RequestBody TbSysRole filter) { + return roleService.getRoleList(filter); + } + + /** + * @description 创建角色 + * @param role 角色信息 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/role") + public ResultDomain createRole(@RequestBody TbSysRole role) { + return roleService.createRole(role); + } + + /** + * @description 更新角色 + * @param role 角色信息 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-09 + */ + @PutMapping("/role") + public ResultDomain updateRole(@RequestBody TbSysRole role) { + return roleService.updateRole(role); + } + + /** + * @description 删除角色 + * @param role 角色信息 + * @return ResultDomain 角色信息 + * @author yslg + * @since 2025-10-09 + */ + @DeleteMapping("/role") + public ResultDomain deleteRole(@RequestBody TbSysRole role) { + return roleService.deleteRole(role); + } + + /** + * @description 获取角色权限 + * @param role 角色信息 + * @return ResultDomain 角色权限信息 + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/permission") + public ResultDomain getRolePermission(@RequestBody TbSysRole role) { + return roleService.getRolePermission(role.getRoleID()); + } + + } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/UserController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/UserController.java index a8186ed..1d5d7bb 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/UserController.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/UserController.java @@ -13,7 +13,10 @@ import org.xyzh.common.annotation.HttpLogin; import org.xyzh.common.core.domain.LoginDomain; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.dto.user.TbSysUser; +import org.xyzh.common.dto.user.TbSysUserDeptRole; import org.xyzh.common.dto.user.TbSysUserInfo; +import org.xyzh.common.vo.UserDeptRoleVO; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -25,7 +28,7 @@ import org.springframework.web.bind.annotation.GetMapping; * @ since 2025-10-06 */ @RestController -@RequestMapping("/user") +@RequestMapping("/users") public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); @@ -35,14 +38,93 @@ public class UserController { // ---------------- 用户 ---------------- - + /** + * @description 注册用户 + * @param + * @author yslg + * @since 2025-10-09 + */ @PostMapping("/register") public ResultDomain registerUser(@RequestBody TbSysUser user){ return userService.registerUser(user); } + /** + * @description 创建用户 + * @param user + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/user") + public ResultDomain createUser(@RequestBody TbSysUser user) { + return userService.createUser(user); + } + /** + * @description 更新用户 + * @param user + * @author yslg + * @since 2025-10-09 + */ + @PutMapping("/user") + public ResultDomain updateUser(@RequestBody TbSysUser user) { + return userService.updateUser(user); + } + /** + * @description 删除用户 + * @param user + * @author yslg + * @since 2025-10-09 + */ + @DeleteMapping("/user") + public ResultDomain deleteUser(@RequestBody TbSysUser user) { + return userService.deleteUser(user.getID()); + } + + /** + * @description 获取用户 + * @param filter + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/list") + public ResultDomain getUserList(@RequestBody TbSysUser filter) { + return userService.getUserByFilter(filter); + } + + /** + * @description 绑定用户部门角色 + * @param filter + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/bind/deptrole/list") + public ResultDomain getBindUserDeptRoleList(@RequestBody TbSysUserDeptRole filter) { + return userService.getBindUserDeptRoleList(filter); + } + + /** + * @description 绑定用户部门角色 + * @param filter + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/bind/deptrole") + public ResultDomain bindUserDeptRole(@RequestBody UserDeptRoleVO userDeptRoleVO) { + return userService.bindUserDeptRole(userDeptRoleVO); + } + + /** + * @description 解绑用户部门角色 + * @param filter + * @author yslg + * @since 2025-10-09 + */ + @PostMapping("/unbind/deptrole") + public ResultDomain unbindUserDeptRole(@RequestBody UserDeptRoleVO userDeptRoleVO) { + return userService.unbindUserDeptRole(userDeptRoleVO); + } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/department/service/impl/SysDepartmentServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/department/service/impl/SysDepartmentServiceImpl.java index ab80e3f..02bbcc1 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/department/service/impl/SysDepartmentServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/department/service/impl/SysDepartmentServiceImpl.java @@ -1,6 +1,5 @@ package org.xyzh.system.department.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -8,11 +7,17 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.dto.dept.TbSysDept; +import org.xyzh.common.dto.dept.TbSysDeptRole; +import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.common.utils.IDUtils; import org.xyzh.system.department.service.SysDepartmentService; import org.xyzh.system.mapper.DepartmentMapper; +import org.xyzh.system.mapper.DeptRoleMapper; +import org.xyzh.system.utils.LoginUtil; import java.util.List; +import java.util.ArrayList; import java.util.Date; /** @@ -30,18 +35,18 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { @Autowired private DepartmentMapper departmentMapper; + @Autowired + private DeptRoleMapper deptRoleMapper; + @Override public ResultDomain getAllDepartments() { ResultDomain resultDomain = new ResultDomain<>(); try { logger.info("开始查询所有部门"); - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysDept::getDeleted, false) - .orderByAsc(TbSysDept::getCreateTime); - - List departments = departmentMapper.selectList(queryWrapper); + TbSysDept filter = new TbSysDept(); + filter.setDeleted(false); + List departments = departmentMapper.selectDepts(filter); logger.info("查询所有部门完成,共找到{}个部门", departments.size()); resultDomain.success("查询成功", departments); @@ -54,6 +59,34 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { } } + + @Override + public ResultDomain getDeptList(TbSysDept filter) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始查询部门列表"); + List departments = departmentMapper.selectDepts(filter); + if (departments.isEmpty()) { + resultDomain.fail("未找到部门"); + return resultDomain; + } + resultDomain.success("查询成功", departments); + return resultDomain; + } catch (Exception e) { + logger.error("查询部门列表失败", e); + resultDomain.fail("查询部门列表失败:" + e.getMessage()); + return resultDomain; + } + } + + @Override + public ResultDomain getDeptByRoleList() { + ResultDomain resultDomain = new ResultDomain<>(); + List deptRoles = deptRoleMapper.selectDeptRoleList(); + resultDomain.success("查询成功", deptRoles); + return resultDomain; + } + @Override public ResultDomain getDepartmentById(String deptId) { ResultDomain resultDomain = new ResultDomain<>(); @@ -65,11 +98,10 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { return resultDomain; } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysDept::getDeptID, deptId) - .eq(TbSysDept::getDeleted, false); - - TbSysDept department = departmentMapper.selectOne(queryWrapper); + TbSysDept filter = new TbSysDept(); + filter.setDeptID(deptId); + List departments = departmentMapper.selectDepts(filter); + TbSysDept department = departments.isEmpty() ? null : departments.get(0); if (department == null) { logger.warn("未找到部门:{}", deptId); @@ -137,7 +169,7 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { department.setDeleted(false); // 插入数据库 - int result = departmentMapper.insert(department); + int result = departmentMapper.insertDept(department); if (result > 0) { logger.info("创建部门成功:{}", department.getName()); @@ -194,7 +226,7 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { department.setUpdateTime(new Date()); // 更新数据库 - int result = departmentMapper.updateById(department); + int result = departmentMapper.updateDept(department); if (result > 0) { logger.info("更新部门成功:{}", department.getDeptID()); @@ -243,7 +275,7 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { department.setDeleted(true); department.setDeleteTime(new Date()); - int result = departmentMapper.updateById(department); + int result = departmentMapper.deleteDept(department); if (result > 0) { logger.info("删除部门成功:{}", deptId); @@ -286,4 +318,91 @@ public class SysDepartmentServiceImpl implements SysDepartmentService { return resultDomain; } } + + @Override + public ResultDomain getDeptByRole(String deptId) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始查询部门绑定角色:{}", deptId); + List roles = deptRoleMapper.selectDeptRole(deptId); + resultDomain.success("查询成功", roles); + return resultDomain; + } catch (Exception e) { + logger.error("查询部门绑定角色失败", e); + resultDomain.fail("查询部门绑定角色失败:" + e.getMessage()); + return resultDomain; + } + } + + @Override + public ResultDomain bindDeptRole(List deptIDs, List roleIDs) { + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("当前用户未登录"); + return resultDomain; + } + try { + logger.info("开始绑定部门角色:{}", deptIDs); + List deptRoles = new ArrayList<>(); + Date now = new Date(); + for (String deptID : deptIDs) { + for (String roleID : roleIDs) { + TbSysDeptRole deptRole = new TbSysDeptRole(); + deptRole.setID(IDUtils.generateID()); + deptRole.setDeptID(deptID); + deptRole.setRoleID(roleID); + deptRole.setCreateTime(now); + deptRole.setDeleted(false); + deptRole.setCreator(user.getID()); + deptRoles.add(deptRole); + } + } + int result = deptRoleMapper.batchBindDeptRole(deptRoles); + if (result > 0) { + logger.info("绑定部门角色成功:{}", deptIDs); + resultDomain.success("绑定部门角色成功", deptRoles); + return resultDomain; + } else { + logger.warn("绑定部门角色失败:{}", deptIDs); + resultDomain.fail("绑定部门角色失败"); + return resultDomain; + } + } catch (Exception e) { + logger.error("绑定部门角色失败", e); + resultDomain.fail("绑定部门角色失败:" + e.getMessage()); + return resultDomain; + } + } + + @Override + public ResultDomain unbindDeptRole(List deptIDs, List roleIDs) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始解绑部门角色:{}", deptIDs); + List deptRoles = new ArrayList<>(); + for (String deptID : deptIDs) { + for (String roleID : roleIDs) { + TbSysDeptRole deptRole = new TbSysDeptRole(); + deptRole.setDeptID(deptID); + deptRole.setRoleID(roleID); + deptRoles.add(deptRole); + } + } + int result = deptRoleMapper.batchUnbindDeptRole(deptRoles); + if (result > 0) { + logger.info("解绑部门角色成功:{}", deptIDs); + resultDomain.success("解绑部门角色成功", deptRoles); + return resultDomain; + } else { + logger.warn("解绑部门角色失败:{}", deptIDs); + resultDomain.fail("解绑部门角色失败"); + return resultDomain; + } + } catch (Exception e) { + logger.error("解绑部门角色失败", e); + resultDomain.fail("解绑部门角色失败:" + e.getMessage()); + return resultDomain; + } + } } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DepartmentMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DepartmentMapper.java index d9b5952..d2c7430 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DepartmentMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DepartmentMapper.java @@ -17,6 +17,15 @@ import java.util.List; @Mapper public interface DepartmentMapper extends BaseMapper { + /** + * @description 查询部门列表 + * @param filter 过滤条件 + * @return List 部门列表 + * @author yslg + * @since 2025-10-06 + */ + List selectDepts(TbSysDept filter); + /** * @description 根据父部门ID查询子部门列表 * @param parentId 父部门ID @@ -54,12 +63,29 @@ public interface DepartmentMapper extends BaseMapper { List selectDeptTree(); /** - * @description 批量删除部门(逻辑删除) - * @param deptIds 部门ID列表 - * @param updater 更新人 + * @description 插入部门 + * @param department 部门 * @return int 影响行数 * @author yslg * @since 2025-09-28 */ - int batchDeleteByIds(@Param("deptIds") List deptIds, @Param("updater") String updater); + int insertDept(TbSysDept department); + + /** + * @description 更新部门 + * @param department 部门 + * @return int 影响行数 + * @author yslg + * @since 2025-09-28 + */ + int updateDept(TbSysDept department); + + /** + * @description 删除部门 + * @param department 部门 + * @return int 影响行数 + * @author yslg + * @since 2025-09-28 + */ + int deleteDept(TbSysDept department); } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DeptRoleMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DeptRoleMapper.java new file mode 100644 index 0000000..4009487 --- /dev/null +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/DeptRoleMapper.java @@ -0,0 +1,42 @@ +package org.xyzh.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.xyzh.common.dto.dept.TbSysDeptRole; +import org.xyzh.common.dto.role.TbSysRole; + +@Mapper +public interface DeptRoleMapper extends BaseMapper { + + /** + * @description 查询部门绑定角色 + * @param deptId 部门ID + * @return List 角色列表 + * @author yslg + * @since 2025-09-28 + */ + List selectDeptRole(String deptId); + + /** + * @description 查询部门绑定角色 + * @return List 部门角色列表 + * @author yslg + * @since 2025-10-06 + */ + List selectDeptRoleList(); + + /** + * @description 批量绑定部门角色 + * @param deptRoles 部门角色列表 + * @return int 影响行数 + * @author yslg + * @since 2025-09-28 + */ + int batchBindDeptRole(@Param("deptRoles") List deptRoles); + + int batchUnbindDeptRole(@Param("deptRoles") List deptRoles); +} diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java index 32cb74f..c89af2d 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java @@ -26,6 +26,42 @@ public interface RoleMapper extends BaseMapper { */ List selectAllRoles(); + /** + * @description 根据过滤条件查询角色列表 + * @param filter 过滤条件 + * @return List 角色列表 + * @author yslg + * @since 2025-10-09 + */ + List selectRole(TbSysRole filter); + + /** + * @description 插入角色 + * @param role 角色 + * @return int 影响行数 + * @author yslg + * @since 2025-10-09 + */ + int insertRole(TbSysRole role); + + /** + * @description 更新角色 + * @param role 角色 + * @return int 影响行数 + * @author yslg + * @since 2025-10-09 + */ + int updateRole(TbSysRole role); + + /** + * @description 删除角色 + * @param role 角色 + * @return int 影响行数 + * @author yslg + * @since 2025-10-09 + */ + int deleteRole(TbSysRole role); + /** * @description 根据用户ID查询角色列表 * @param userId 用户ID diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RolePermissionMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RolePermissionMapper.java index a2ad115..08f3b83 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RolePermissionMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RolePermissionMapper.java @@ -3,6 +3,7 @@ package org.xyzh.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.xyzh.common.dto.permission.TbSysPermission; import org.xyzh.common.dto.role.TbSysRolePermission; import java.util.List; @@ -53,7 +54,7 @@ public interface RolePermissionMapper extends BaseMapper { * @author yslg * @since 2025-10-07 */ - List selectByRoleId(@Param("roleId") String roleId); + List selectByRoleId(@Param("roleId") String roleId); /** * @description 根据权限ID查询角色关联列表 diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserDeptRoleMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserDeptRoleMapper.java index fc06eaf..5ffc6a0 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserDeptRoleMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserDeptRoleMapper.java @@ -1,10 +1,39 @@ package org.xyzh.system.mapper; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.xyzh.common.dto.user.TbSysUserDeptRole; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @Mapper public interface UserDeptRoleMapper extends BaseMapper { + /** + * @description 查询用户部门角色 + * @param userId 用户ID + * @return List 用户部门角色列表 + * @author yslg + * @since 2025-10-09 + */ + List selectByFilter(TbSysUserDeptRole filter); + + /** + * @description 绑定用户 + * @param userDeptRoles 用户角色列表 + * @return int 影响行数 + * @author yslg + * @since 2025-10-09 + */ + int bindUser(@Param("userDeptRoles") List userDeptRoles); + + /** + * @description 解绑用户 + * @param userDeptRoles 用户角色列表 + * @return int 影响行数 + * @author yslg + * @since 2025-10-09 + */ + int unbindUser(@Param("userDeptRoles") List userDeptRoles); } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserInfoMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserInfoMapper.java index a3f8ff9..b05d41b 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserInfoMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserInfoMapper.java @@ -1,10 +1,37 @@ package org.xyzh.system.mapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.xyzh.common.dto.user.TbSysUserInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @Mapper public interface UserInfoMapper extends BaseMapper { + /** + * @description 插入用户信息 + * @param userInfo 用户信息 + * @return int 影响行数 + * @author yslg + * @since 2025-10-06 + */ + int insertUserInfo(@Param("userInfo") TbSysUserInfo userInfo); + + /** + * @description 更新用户信息 + * @param userInfo 用户信息 + * @return int 影响行数 + * @author yslg + * @since 2025-10-06 + */ + int updateUserInfo(@Param("userInfo") TbSysUserInfo userInfo); + + /** + * @description 删除用户信息 + * @param userId 用户ID + * @return int 影响行数 + * @author yslg + * @since 2025-10-06 + */ + int deleteUserInfo(@Param("userID") String userId); } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserMapper.java index 21a7caa..398b8d6 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/UserMapper.java @@ -18,6 +18,33 @@ import java.util.List; @Mapper public interface UserMapper extends BaseMapper { + /** + * @description 插入用户 + * @param user 用户信息 + * @return int 影响行数 + * @author yslg + * @since 2025-10-06 + */ + int insertUser(@Param("user") TbSysUser user); + + /** + * @description 更新用户 + * @param user 用户信息 + * @return int 影响行数 + * @author yslg + * @since 2025-10-06 + */ + int updateUser(@Param("user") TbSysUser user); + + /** + * @description 删除用户 + * @param userID 用户ID + * @return int 影响行数 + * @author yslg + * @since 2025-10-06 + */ + int deleteUser(@Param("userID") String userID); + /** * @description 根据用户名查询用户 * @param username 用户名 @@ -52,7 +79,7 @@ public interface UserMapper extends BaseMapper { * @author yslg * @since 2025-09-28 */ - TbSysUser selectByFilter(@Param("filter") TbSysUser filter); + List selectByFilter(@Param("filter") TbSysUser filter); /** * @description 查询用户列表(分页) diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java index cf2774d..a6fc8d9 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java @@ -1,17 +1,18 @@ package org.xyzh.system.role.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.xyzh.common.core.domain.ResultDomain; -import org.xyzh.common.dto.dept.TbSysDeptRole; +import org.xyzh.common.dto.permission.TbSysPermission; import org.xyzh.common.dto.role.TbSysRole; import org.xyzh.common.utils.IDUtils; import org.xyzh.common.vo.DeptRoleVO; +import org.xyzh.system.mapper.RolePermissionMapper; import org.xyzh.system.mapper.RoleMapper; +import org.xyzh.system.mapper.UserDeptRoleMapper; import org.xyzh.system.role.service.SysRoleService; import java.util.Date; @@ -32,6 +33,12 @@ public class SysRoleServiceImpl implements SysRoleService { @Autowired private RoleMapper roleMapper; + @Autowired + private RolePermissionMapper rolePermissionMapper; + + @Autowired + private UserDeptRoleMapper userDeptRoleMapper; + @Override public ResultDomain getAllRoles() { ResultDomain resultDomain = new ResultDomain<>(); @@ -53,58 +60,19 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public ResultDomain getRoleById(String roleId) { + public ResultDomain getRoleList(TbSysRole filter) { ResultDomain resultDomain = new ResultDomain<>(); try { - logger.info("开始根据ID查询角色:{}", roleId); + logger.info("开始根据过滤条件查询角色列表:{}", filter); - if (!StringUtils.hasText(roleId)) { - resultDomain.fail("角色ID不能为空"); - return resultDomain; - } + List roles = roleMapper.selectRole(filter); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysRole::getRoleID, roleId) - .eq(TbSysRole::getDeleted, false); - - TbSysRole role = roleMapper.selectOne(queryWrapper); - - if (role == null) { - logger.warn("未找到角色:{}", roleId); - resultDomain.fail("未找到指定角色"); - return resultDomain; - } - - logger.info("根据ID查询角色完成:{}", roleId); - resultDomain.success("查询成功", role); - return resultDomain; - - } catch (Exception e) { - logger.error("根据ID查询角色失败:{}", roleId, e); - resultDomain.fail("查询角色失败:" + e.getMessage()); - return resultDomain; - } - } - - @Override - public ResultDomain getDeptRolesByUserId(String userId) { - ResultDomain resultDomain = new ResultDomain<>(); - try { - logger.info("开始根据用户ID查询部门角色列表:{}", userId); - - if (!StringUtils.hasText(userId)) { - resultDomain.fail("用户ID不能为空"); - return resultDomain; - } - - List roles = roleMapper.selectDeptRolesByUserId(userId); - - logger.info("根据用户ID查询部门角色列表完成,共找到{}个部门角色", roles.size()); + logger.info("查询角色列表完成,共找到{}个角色", roles.size()); resultDomain.success("查询成功", roles); return resultDomain; } catch (Exception e) { - logger.error("根据用户ID查询部门角色列表失败:{}", userId, e); + logger.error("根据过滤条件查询角色列表失败:{}", filter, e); resultDomain.fail("查询角色失败:" + e.getMessage()); return resultDomain; } @@ -141,7 +109,7 @@ public class SysRoleServiceImpl implements SysRoleService { role.setDeleted(false); // 插入数据库 - int result = roleMapper.insert(role); + int result = roleMapper.insertRole(role); if (result > 0) { logger.info("创建角色成功:{}", role.getName()); @@ -198,7 +166,7 @@ public class SysRoleServiceImpl implements SysRoleService { role.setUpdateTime(new Date()); // 更新数据库 - int result = roleMapper.updateById(role); + int result = roleMapper.updateRole(role); if (result > 0) { logger.info("更新角色成功:{}", role.getRoleID()); @@ -218,49 +186,100 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public ResultDomain deleteRole(String roleId) { + public ResultDomain deleteRole(TbSysRole role) { ResultDomain resultDomain = new ResultDomain<>(); try { - logger.info("开始删除角色:{}", roleId); + logger.info("开始删除角色:{}", role.getRoleID()); - if (!StringUtils.hasText(roleId)) { + if (!StringUtils.hasText(role.getRoleID())) { resultDomain.fail("角色ID不能为空"); return resultDomain; } // 检查角色是否存在 - ResultDomain existResult = getRoleById(roleId); + ResultDomain existResult = getRoleById(role.getRoleID()); if (!existResult.isSuccess()) { resultDomain.fail(existResult.getMessage()); return resultDomain; } - // TODO: 检查角色是否被用户使用,如果被使用则不能删除 - - // 逻辑删除 - TbSysRole role = existResult.getData(); - role.setDeleted(true); - role.setDeleteTime(new Date()); - - int result = roleMapper.updateById(role); + int result = roleMapper.deleteRole(role); if (result > 0) { - logger.info("删除角色成功:{}", roleId); + logger.info("删除角色成功:{}", role.getRoleID()); resultDomain.success("删除角色成功", role); return resultDomain; } else { - logger.warn("删除角色失败:{}", roleId); + logger.warn("删除角色失败:{}", role.getRoleID()); resultDomain.fail("删除角色失败"); return resultDomain; } } catch (Exception e) { - logger.error("删除角色异常:{}", roleId, e); + logger.error("删除角色异常:{}", role.getRoleID(), e); resultDomain.fail("删除角色失败:" + e.getMessage()); return resultDomain; } } + + @Override + public ResultDomain getRoleById(String roleId) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始根据ID查询角色:{}", roleId); + + if (!StringUtils.hasText(roleId)) { + resultDomain.fail("角色ID不能为空"); + return resultDomain; + } + TbSysRole filter = new TbSysRole(); + filter.setRoleID(roleId); + filter.setDeleted(false); + List roles = roleMapper.selectRole(filter); + TbSysRole role = roles.isEmpty() ? null : roles.get(0); + + if (role == null) { + logger.warn("未找到角色:{}", roleId); + resultDomain.fail("未找到指定角色"); + return resultDomain; + } + + logger.info("根据ID查询角色完成:{}", roleId); + resultDomain.success("查询成功", role); + return resultDomain; + + } catch (Exception e) { + logger.error("根据ID查询角色失败:{}", roleId, e); + resultDomain.fail("查询角色失败:" + e.getMessage()); + return resultDomain; + } + } + + @Override + public ResultDomain getDeptRolesByUserId(String userId) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始根据用户ID查询部门角色列表:{}", userId); + + if (!StringUtils.hasText(userId)) { + resultDomain.fail("用户ID不能为空"); + return resultDomain; + } + + List roles = roleMapper.selectDeptRolesByUserId(userId); + + logger.info("根据用户ID查询部门角色列表完成,共找到{}个部门角色", roles.size()); + resultDomain.success("查询成功", roles); + return resultDomain; + + } catch (Exception e) { + logger.error("根据用户ID查询部门角色列表失败:{}", userId, e); + resultDomain.fail("查询角色失败:" + e.getMessage()); + return resultDomain; + } + } + @Override public ResultDomain checkRoleNameExists(String roleName, String excludeId) { ResultDomain resultDomain = new ResultDomain<>(); @@ -312,7 +331,7 @@ public class SysRoleServiceImpl implements SysRoleService { TbSysRole role = existResult.getData(); role.setUpdateTime(new Date()); - int result = roleMapper.updateById(role); + int result = roleMapper.updateRole(role); if (result > 0) { logger.info("修改角色状态成功:{}", roleId); @@ -330,4 +349,28 @@ public class SysRoleServiceImpl implements SysRoleService { return resultDomain; } } + + @Override + public ResultDomain getRolePermission(String roleId) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始获取角色权限:{}", roleId); + + if (!StringUtils.hasText(roleId)) { + resultDomain.fail("角色ID不能为空"); + return resultDomain; + } + + List rolePermissions = rolePermissionMapper.selectByRoleId(roleId); + + logger.info("获取角色权限完成:{}", roleId); + resultDomain.success("获取角色权限成功", rolePermissions); + return resultDomain; + + } catch (Exception e) { + logger.error("获取角色权限异常:{}", roleId, e); + resultDomain.fail("获取角色权限失败:" + e.getMessage()); + return resultDomain; + } + } } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/user/service/impl/SysUserServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/user/service/impl/SysUserServiceImpl.java index 7295c2d..c8b863f 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/user/service/impl/SysUserServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/user/service/impl/SysUserServiceImpl.java @@ -1,6 +1,5 @@ package org.xyzh.system.user.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,13 +11,17 @@ import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.common.dto.user.TbSysUserDeptRole; import org.xyzh.common.dto.user.TbSysUserInfo; import org.xyzh.common.utils.IDUtils; +import org.xyzh.common.vo.UserDeptRoleVO; import org.xyzh.system.mapper.UserMapper; import org.xyzh.system.mapper.UserInfoMapper; import org.xyzh.system.mapper.UserDeptRoleMapper; import org.xyzh.system.user.service.SysUserService; +import org.xyzh.system.utils.LoginUtil; import java.util.Date; import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; /** * @description SysUserServiceImpl.java文件描述 系统用户服务实现类 @@ -54,22 +57,26 @@ public class SysUserServiceImpl implements SysUserService { resultDomain.fail("用户已存在"); return resultDomain; } + Date now = new Date(); + user.setID(IDUtils.generateID()); + user.setCreateTime(now); + user.setDeleted(false); // 创建用户信息 TbSysUserInfo userInfo = new TbSysUserInfo(); userInfo.setUserID(user.getID()); - userInfo.setCreateTime(new Date()); + userInfo.setCreateTime(now); userInfo.setAvatar("default"); TbSysUserDeptRole userDeptRole = new TbSysUserDeptRole(); userDeptRole.setUserID(user.getID()); userDeptRole.setDeptID("-1"); userDeptRole.setRoleID("freedom"); - userDeptRole.setCreateTime(new Date()); + userDeptRole.setCreateTime(now); - userMapper.insert(user); - userInfoMapper.insert(userInfo); - userDeptRoleMapper.insert(userDeptRole); - + userMapper.insertUser(user); + userInfoMapper.insertUserInfo(userInfo); + userDeptRoleMapper.bindUser(Arrays.asList(userDeptRole)); + resultDomain.success("注册用户成功", user); return resultDomain; } catch (Exception e) { logger.error("注册用户失败:{}", user.getUsername(), e); @@ -100,11 +107,8 @@ public class SysUserServiceImpl implements SysUserService { try { logger.info("开始查询所有用户"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysUser::getDeleted, false) - .orderByAsc(TbSysUser::getCreateTime); - - List users = userMapper.selectList(queryWrapper); + TbSysUser filter = new TbSysUser(); + List users = userMapper.selectByFilter(filter); logger.info("查询所有用户完成,共找到{}个用户", users.size()); resultDomain.success("查询成功", users); @@ -128,20 +132,20 @@ public class SysUserServiceImpl implements SysUserService { return resultDomain; } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysUser::getID, userId) - .eq(TbSysUser::getDeleted, false); + TbSysUser filter = new TbSysUser(); + filter.setID(userId); + filter.setDeleted(false); - TbSysUser user = userMapper.selectOne(queryWrapper); + List users = userMapper.selectByFilter(filter); - if (user == null) { + if (users.isEmpty()) { logger.warn("未找到用户:{}", userId); resultDomain.fail("未找到指定用户"); return resultDomain; } logger.info("根据ID查询用户完成:{}", userId); - resultDomain.success("查询成功", user); + resultDomain.success("查询成功", users.get(0)); return resultDomain; } catch (Exception e) { @@ -193,26 +197,26 @@ public class SysUserServiceImpl implements SysUserService { } // 检查至少有一个查询条件 - boolean hasFilter = StringUtils.hasText(filter.getID()) || - StringUtils.hasText(filter.getUsername()) || - StringUtils.hasText(filter.getEmail()) || - StringUtils.hasText(filter.getPhone()); + // boolean hasFilter = StringUtils.hasText(filter.getID()) || + // StringUtils.hasText(filter.getUsername()) || + // StringUtils.hasText(filter.getEmail()) || + // StringUtils.hasText(filter.getPhone()); - if (!hasFilter) { - resultDomain.fail("至少需要提供一个查询条件"); - return resultDomain; - } + // if (!hasFilter) { + // resultDomain.fail("至少需要提供一个查询条件"); + // return resultDomain; + // } - TbSysUser user = userMapper.selectByFilter(filter); + List users = userMapper.selectByFilter(filter); - if (user == null) { + if (users.isEmpty()) { logger.warn("未找到符合条件的用户:{}", filter); resultDomain.fail("未找到指定用户"); return resultDomain; } logger.info("根据过滤条件查询用户完成:{}", filter); - resultDomain.success("查询成功", user); + resultDomain.success("查询成功", users); return resultDomain; } catch (Exception e) { @@ -222,6 +226,7 @@ public class SysUserServiceImpl implements SysUserService { } } + @Transactional @Override public ResultDomain createUser(TbSysUser user) { ResultDomain resultDomain = new ResultDomain<>(); @@ -267,15 +272,15 @@ public class SysUserServiceImpl implements SysUserService { } // 插入数据库 - int result = userMapper.insert(user); + ResultDomain result = registerUser(user); - if (result > 0) { + if (result.isSuccess()) { logger.info("创建用户成功:{}", user.getUsername()); - resultDomain.success("创建用户成功", user); + resultDomain.success("创建用户成功", result.getData()); return resultDomain; } else { logger.warn("创建用户失败:{}", user.getUsername()); - resultDomain.fail("创建用户失败"); + resultDomain.fail("创建用户失败:" + result.getMessage()); } return resultDomain; @@ -337,7 +342,7 @@ public class SysUserServiceImpl implements SysUserService { user.setUpdateTime(new Date()); // 更新数据库 - int result = userMapper.updateById(user); + int result = userMapper.updateUser(user); if (result > 0) { logger.info("更新用户成功:{}", user.getID()); @@ -379,7 +384,7 @@ public class SysUserServiceImpl implements SysUserService { user.setDeleted(true); user.setDeleteTime(new Date()); - int result = userMapper.updateById(user); + int result = userMapper.updateUser(user); if (result > 0) { logger.info("删除用户成功:{}", userId); @@ -398,6 +403,74 @@ public class SysUserServiceImpl implements SysUserService { } } + @Override + public ResultDomain getBindUserDeptRoleList(TbSysUserDeptRole filter) { + ResultDomain resultDomain = new ResultDomain<>(); + List userDeptRoles = userDeptRoleMapper.selectByFilter(filter); + resultDomain.success("查询成功", userDeptRoles); + return resultDomain; + } + + @Transactional + @Override + public ResultDomain bindUserDeptRole(UserDeptRoleVO userDeptRoleVO) { + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser currentUser = LoginUtil.getCurrentUser(); + try { + List userDeptRoles = new ArrayList<>(); + logger.info("开始绑定用户部门角色:{}", userDeptRoleVO.getID()); + Date now = new Date(); + for (TbSysUser user : userDeptRoleVO.getUsers()) { + for(TbSysUserDeptRole userDeptRole : userDeptRoleVO.getUserDeptRoles()) { + userDeptRole.setID(IDUtils.generateID()); + userDeptRole.setUserID(user.getID()); + userDeptRole.setCreateTime(now); + userDeptRole.setCreator(currentUser.getID()); + userDeptRoles.add(userDeptRole); + } + } + + userDeptRoleMapper.bindUser(userDeptRoles); + + } catch (Exception e) { + logger.error("绑定用户部门角色异常:{}", userDeptRoleVO.getID(), e); + resultDomain.fail("绑定用户部门角色失败:" + e.getMessage()); + return resultDomain; + } + return resultDomain; + } + + @Transactional + @Override + public ResultDomain unbindUserDeptRole(UserDeptRoleVO userDeptRoleVO) { + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser currentUser = LoginUtil.getCurrentUser(); + try { + List userDeptRoles = new ArrayList<>(); + logger.info("开始解绑用户部门角色:{}", userDeptRoleVO.getID()); + Date now = new Date(); + for(TbSysUser user:userDeptRoleVO.getUsers()) { + for(TbSysUserDeptRole userDeptRole : userDeptRoleVO.getUserDeptRoles()) { + userDeptRole.setUserID(user.getID()); + userDeptRoles.add(userDeptRole); + } + } + int result = userDeptRoleMapper.unbindUser(userDeptRoles); + if(result > 0) { + logger.info("解绑用户部门角色成功:{}", userDeptRoleVO.getID()); + resultDomain.success("解绑用户部门角色成功", userDeptRoleVO); + } else { + logger.warn("解绑用户部门角色失败:{}", userDeptRoleVO.getID()); + resultDomain.fail("解绑用户部门角色失败"); + } + return resultDomain; + } catch (Exception e) { + logger.error("解绑用户部门角色异常:{}", userDeptRoleVO.getID(), e); + resultDomain.fail("解绑用户部门角色失败:" + e.getMessage()); + } + return resultDomain; + } + @Override public ResultDomain checkUsernameExists(String username, String excludeId) { ResultDomain resultDomain = new ResultDomain<>(); @@ -408,16 +481,15 @@ public class SysUserServiceImpl implements SysUserService { resultDomain.fail("用户名不能为空"); return resultDomain; } - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysUser::getUsername, username) - .eq(TbSysUser::getDeleted, false); - + + TbSysUser filter = new TbSysUser(); if (StringUtils.hasText(excludeId)) { - queryWrapper.ne(TbSysUser::getID, excludeId); + filter.setID(excludeId); } + filter.setUsername(username); + filter.setDeleted(false); - long count = userMapper.selectCount(queryWrapper); + long count = userMapper.selectByFilter(filter).size(); boolean exists = count > 0; logger.info("用户名存在性检查完成:{},存在:{}", username, exists); @@ -442,15 +514,15 @@ public class SysUserServiceImpl implements SysUserService { return resultDomain; } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysUser::getEmail, email) - .eq(TbSysUser::getDeleted, false); + TbSysUser filter = new TbSysUser(); + filter.setEmail(email); + filter.setDeleted(false); if (StringUtils.hasText(excludeId)) { - queryWrapper.ne(TbSysUser::getID, excludeId); + filter.setID(excludeId); } - long count = userMapper.selectCount(queryWrapper); + long count = userMapper.selectByFilter(filter).size(); boolean exists = count > 0; logger.info("邮箱存在性检查完成:{},存在:{}", email, exists); @@ -510,7 +582,7 @@ public class SysUserServiceImpl implements SysUserService { user.setStatus(status); user.setUpdateTime(new Date()); - int result = userMapper.updateById(user); + int result = userMapper.updateUser(user); if (result > 0) { logger.info("修改用户状态成功:{}", userId); @@ -557,7 +629,7 @@ public class SysUserServiceImpl implements SysUserService { user.setPassword(newPassword); user.setUpdateTime(new Date()); - int result = userMapper.updateById(user); + int result = userMapper.updateUser(user); if (result > 0) { logger.info("重置用户密码成功:{}", userId); diff --git a/schoolNewsServ/system/src/main/resources/mapper/DepartmentMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/DepartmentMapper.xml index e343f0b..385efbd 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/DepartmentMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/DepartmentMapper.xml @@ -39,6 +39,16 @@ + + + + @@ -92,7 +102,7 @@ delete_time = NOW(), updater = #{updater} WHERE deleted = 0 - AND id IN + AND dept_id IN #{deptId} @@ -134,7 +144,7 @@ updater = #{updater}, update_time = NOW() - WHERE id = #{id} AND deleted = 0 + WHERE dept_id = #{deptID} AND deleted = 0 @@ -142,7 +152,7 @@ UPDATE tb_sys_dept SET deleted = 1, delete_time = NOW() - WHERE id = #{id} AND deleted = 0 + WHERE dept_id = #{deptID} AND deleted = 0 diff --git a/schoolNewsServ/system/src/main/resources/mapper/DeptRoleMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/DeptRoleMapper.xml new file mode 100644 index 0000000..bc9f9c0 --- /dev/null +++ b/schoolNewsServ/system/src/main/resources/mapper/DeptRoleMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + id, dept_id, role_id, creator, updater, + create_time, update_time, delete_time, deleted + + + + deleted = 0 + + AND dept_id = #{deptID} + + + + + + + + + + + + + + INSERT INTO tb_sys_dept_role (id, dept_id, role_id, creator, create_time, deleted) + VALUES + + (#{deptRole.id}, #{deptRole.deptID}, #{deptRole.roleID}, #{deptRole.creator}, #{deptRole.createTime}, 0) + + + + + + + DELETE FROM tb_sys_dept_role + WHERE (dept_id, role_id) IN + + (#{deptRole.deptID}, #{deptRole.roleID}) + + + \ No newline at end of file diff --git a/schoolNewsServ/system/src/main/resources/mapper/MenuPermissionMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/MenuPermissionMapper.xml index 1922eb5..4f27b94 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/MenuPermissionMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/MenuPermissionMapper.xml @@ -33,13 +33,9 @@ DELETE FROM tb_sys_menu_permission - WHERE menu_id IN + WHERE (menu_id, permission_id) IN - #{menuPermission.menuID} - - AND permission_id IN - - #{menuPermission.permissionID} + (#{menuPermission.menuID}, #{menuPermission.permissionID}) AND deleted = 0 diff --git a/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml index cef3b20..3219d7b 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml @@ -58,14 +58,11 @@ deleted = 0 - - AND role_name LIKE CONCAT('%', #{roleName}, '%') + + AND role_id = #{roleID} - - AND role_code = #{roleCode} - - - AND status = #{status} + + AND name LIKE CONCAT('%', #{name}, '%') @@ -80,6 +77,36 @@ ORDER BY role_id, create_time ASC + + + + + + INSERT INTO tb_sys_role + (id, role_id, name, description, creator, create_time) + VALUES (#{id}, #{roleID}, #{name}, #{description}, #{creator}, #{createTime}) + + + + + UPDATE tb_sys_role + (name, description, updater, update_time) + VALUES (#{name}, #{description}, #{updater}, #{updateTime}) + WHERE role_id = #{roleID} + + + + + DELETE FROM tb_sys_role + WHERE role_id = #{roleID} + + - SELECT - - FROM tb_sys_role_permission - WHERE deleted = 0 - AND role_id = #{rolePermission.roleID} - ORDER BY create_time ASC + tsp.permission_id, + tsp.name, + tsp.code, + tsp.description, + tsp.creator, + tsp.updater, + tsp.create_time, + tsp.update_time + FROM tb_sys_role_permission tsrp + INNER JOIN tb_sys_permission tsp ON tsrp.permission_id = tsp.permission_id + WHERE tsrp.deleted = 0 AND tsp.deleted = 0 + AND tsrp.role_id = #{roleId} + ORDER BY tsrp.permission_id , tsrp.create_time ASC @@ -71,7 +93,7 @@ FROM tb_sys_role_permission WHERE deleted = 0 - AND permission_id = #{rolePermission.permissionID} + AND permission_id = #{permissionId} ORDER BY create_time ASC @@ -82,8 +104,8 @@ delete_time = NOW(), updater = #{updater} WHERE deleted = 0 - AND role_id = #{rolePermission.roleID} - AND permission_id = #{rolePermission.permissionID} + AND role_id = #{roleId} + AND permission_id = #{permissionId} diff --git a/schoolNewsServ/system/src/main/resources/mapper/UserDeptRoleMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/UserDeptRoleMapper.xml index abe4a44..4a12633 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/UserDeptRoleMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/UserDeptRoleMapper.xml @@ -1,4 +1,73 @@ + + + + + + + + + + + + + + + id, user_id, dept_id, role_id, creator, updater, create_time, update_time, delete_time, deleted + + + + + + id = #{id} + + + user_id = #{userID} + + + dept_id = #{deptID} + + + role_id = #{roleID} + + + creator = #{creator} + + + updater = #{updater} + + + create_time = #{createTime} + + + + + + + + + + INSERT INTO tb_sys_user_dept_role (id, user_id, dept_id, role_id, creator, create_time) + VALUES + + (#{userDeptRole.id}, #{userDeptRole.userID}, #{userDeptRole.deptID}, #{userDeptRole.roleID}, #{userDeptRole.creator}, #{userDeptRole.createTime}) + + + + + DELETE FROM tb_sys_user_dept_role + WHERE (user_id, dept_id, role_id) IN + + (#{userDeptRole.userID}, #{userDeptRole.deptID}, #{userDeptRole.roleID}) + + + \ No newline at end of file diff --git a/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml index 0ac6c33..abf72bb 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/UserInfoMapper.xml @@ -1,5 +1,52 @@ + + + + + + + + + + + + + + + + + id, user_id, avatar, gender, family_name, given_name, full_name, id_card, address, create_time, update_time, delete_time, deleted + + + + + INSERT INTO tb_sys_user_info (id, user_id, avatar, create_time) + VALUES (#{userInfo.id}, #{userInfo.userID}, #{userInfo.avatar}, #{userInfo.createTime}) + + + + + + UPDATE tb_sys_user_info + + avatar = #{userInfo.avatar}, + gender = #{userInfo.gender}, + family_name = #{userInfo.familyName}, + given_name = #{userInfo.givenName}, + full_name = #{userInfo.fullName}, + id_card = #{userInfo.idCard}, + address = #{userInfo.address}, + updater = #{userInfo.updater}, + update_time = #{userInfo.updateTime}, + + WHERE user_id = #{userInfo.userID} + + + + DELETE FROM tb_sys_user_info + WHERE user_id = #{userID} + \ No newline at end of file diff --git a/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml index fec4296..28b9a4f 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml @@ -124,7 +124,6 @@ AND wechat_id = #{filter.wechatID} - LIMIT 1 @@ -150,67 +149,50 @@ - + INSERT INTO tb_sys_user - id, - username, - password, - email, - phone, - avatar, - nickname, - gender, - birthday, - status, - last_login_time, - last_login_ip, - creator, - create_time, + id, + username, + password, + email, + phone, + wechat_id, + status, + create_time, deleted - - #{id}, - #{username}, - #{password}, - #{email}, - #{phone}, - #{avatar}, - #{nickname}, - #{gender}, - #{birthday}, - #{status}, - #{lastLoginTime}, - #{lastLoginIp}, - #{creator}, - #{createTime}, + VALUES + + #{user.id}, + #{user.username}, + #{user.password}, + #{user.email}, + #{user.phone}, + #{user.wechatID}, + #{user.status}, + #{user.createTime}, 0 - + UPDATE tb_sys_user - username = #{username}, - password = #{password}, - email = #{email}, - phone = #{phone}, - avatar = #{avatar}, - nickname = #{nickname}, - gender = #{gender}, - birthday = #{birthday}, - status = #{status}, - last_login_time = #{lastLoginTime}, - last_login_ip = #{lastLoginIp}, - updater = #{updater}, + username = #{user.username}, + password = #{user.password}, + email = #{user.email}, + phone = #{user.phone}, + wechat_id = #{user.wechatID}, + status = #{user.status}, update_time = NOW() - WHERE id = #{id} AND deleted = 0 + WHERE id = #{user.id} AND deleted = 0 - + UPDATE tb_sys_user SET deleted = 1, delete_time = NOW() diff --git a/schoolNewsWeb/src/apis/system/dept.ts b/schoolNewsWeb/src/apis/system/dept.ts new file mode 100644 index 0000000..21ef3ce --- /dev/null +++ b/schoolNewsWeb/src/apis/system/dept.ts @@ -0,0 +1,132 @@ +/** + * @description 部门相关API + * @author yslg + * @since 2025-10-06 + */ + +import { api } from '@/apis/index'; +import type { SysDept, SysRole, DeptRoleVO, SysDeptRole } from '@/types'; + +/** + * 部门API服务 + */ +export const deptApi = { + /** + * @description 查询所有部门 + * @returns Promise 部门列表 + * @author yslg + * @ since 2025-10-06 + */ + async getAllDepts(): Promise { + const response = await api.post('/depts/all'); + return response.data.dataList!; + }, + + /** + * @description 查询部门列表 + * @param filter 过滤条件 + * @returns Promise 部门列表 + * @author yslg + * @ since 2025-10-06 + */ + async getDeptList(filter: SysDept): Promise { + const response = await api.post('/depts/list', filter); + return response.data.dataList!; + }, + + /** + * @description 查询部门 + * @param dept 部门信息 + * @returns Promise 部门信息 + * @author yslg + * @ since 2025-10-06 + */ + async getDeptById(dept: SysDept): Promise { + const response = await api.post('/depts/id', dept); + return response.data.data!; + }, + + /** + * @description 创建部门 + * @param dept 部门信息 + * @returns Promise 部门信息 + * @author yslg + * @ since 2025-10-06 + */ + async createDept(dept: SysDept): Promise { + const response = await api.post('/depts/dept', dept); + return response.data.data!; + }, + + /** + * @description 更新部门 + * @param dept 部门信息 + * @returns Promise 部门信息 + * @author yslg + * @ since 2025-10-06 + */ + async updateDept(dept: SysDept): Promise { + const response = await api.put('/depts/dept', dept); + return response.data.data!; + }, + + /** + * @description 删除部门 + * @param dept 部门信息 + * @returns Promise 部门信息 + * @author yslg + * @ since 2025-10-06 + */ + async deleteDept(dept: SysDept): Promise { + const response = await api.delete('/depts/dept', dept); + return response.data.data!; + }, + + /** + * @description 查询部门绑定角色 + * @param dept 部门信息 + * @returns Promise 角色列表 + * @author yslg + * @ since 2025-10-06 + */ + async getDeptByRole(dept: SysDept): Promise { + const response = await api.post('/depts/role', dept); + return response.data.dataList!; + }, + + /** + * @description 查询部门角色列表 + * @param dept 部门角色信息 + * @returns Promise 部门角色列表 + * @author yslg + * @ since 2025-10-06 + */ + async getDeptRoleList(dept: SysDeptRole): Promise { + const response = await api.post('/depts/role/list', dept); + return response.data.dataList!; + }, + + /** + * @description 绑定部门角色 + * @param deptRole 部门角色VO + * @returns Promise 部门角色信息 + * @author yslg + * @ since 2025-10-06 + */ + async bindDeptRole(deptRole: DeptRoleVO): Promise { + const response = await api.post('/depts/bind/role', deptRole); + return response.data.data!; + }, + + /** + * @description 解绑部门角色 + * @param deptRole 部门角色VO + * @returns Promise 部门角色信息 + * @author yslg + * @ since 2025-10-06 + */ + async unbindDeptRole(deptRole: DeptRoleVO): Promise { + const response = await api.post('/depts/unbind/role', deptRole); + return response.data.data!; + } +}; diff --git a/schoolNewsWeb/src/apis/system/role.ts b/schoolNewsWeb/src/apis/system/role.ts index d78f08e..9007543 100644 --- a/schoolNewsWeb/src/apis/system/role.ts +++ b/schoolNewsWeb/src/apis/system/role.ts @@ -1,16 +1,96 @@ +/** + * @description 角色相关API + * @author yslg + * @since 2025-10-09 + */ + import { api } from '@/apis/index'; -import type { SysRole } from '@/types'; +import type { SysPermission, SysRole, SysRolePermission } from '@/types'; /** - * 菜单API服务 + * 角色API服务 */ export const roleApi = { - /** - * 获取所有角色列表 - * @returns Promise - */ - async getRoleList(): Promise { - const response = await api.post('/roles/all'); - return response.data.dataList!; - } -} \ No newline at end of file + /** + * @description 获取所有角色 + * @returns Promise 角色列表 + * @author yslg + * @ since 2025-10-09 + */ + async getAllRoles(): Promise { + const response = await api.post('/roles/all'); + return response.data.dataList!; + }, + + /** + * @description 根据角色ID获取角色 + * @param role 角色信息 + * @returns Promise 角色信息 + * @author yslg + * @ since 2025-10-09 + */ + async getRoleById(role: SysRole): Promise { + const response = await api.post('/roles/id', role); + return response.data.data!; + }, + + /** + * @description 根据过滤条件获取角色列表 + * @param filter 过滤条件 + * @returns Promise 角色列表 + * @author yslg + * @ since 2025-10-09 + */ + async getRoleList(filter: SysRole): Promise { + const response = await api.post('/roles/list', filter); + return response.data.dataList!; + }, + + /** + * @description 创建角色 + * @param role 角色信息 + * @returns Promise 角色信息 + * @author yslg + * @ since 2025-10-09 + */ + async createRole(role: SysRole): Promise { + const response = await api.post('/roles/role', role); + return response.data.data!; + }, + + /** + * @description 更新角色 + * @param role 角色信息 + * @returns Promise 角色信息 + * @author yslg + * @ since 2025-10-09 + */ + async updateRole(role: SysRole): Promise { + const response = await api.put('/roles/role', role); + return response.data.data!; + }, + + /** + * @description 删除角色 + * @param role 角色信息 + * @returns Promise 角色信息 + * @author yslg + * @ since 2025-10-09 + */ + async deleteRole(role: SysRole): Promise { + const response = await api.delete('/roles/role', role); + return response.data.data!; + }, + + /** + * @description 获取角色绑定权限列表 + * @param role 角色信息 + * @returns Promise 角色信息 + * @author yslg + * @ since 2025-10-09 + */ + async getRolePermission(role: SysRole): Promise { + const response = await api.post('/roles/permission', role); + return response.data.dataList!; + } +}; \ No newline at end of file diff --git a/schoolNewsWeb/src/apis/system/user.ts b/schoolNewsWeb/src/apis/system/user.ts index 4c5ee7a..629c554 100644 --- a/schoolNewsWeb/src/apis/system/user.ts +++ b/schoolNewsWeb/src/apis/system/user.ts @@ -5,7 +5,7 @@ */ import { api } from '@/apis/index'; -import type { SysUser, SysUserInfo, UserVO, PageDomain, PageParam } from '@/types'; +import type { SysUser, SysUserInfo, UserVO, UserDeptRoleVO, SysUserDeptRole } from '@/types'; /** * 用户API服务 @@ -16,7 +16,7 @@ export const userApi = { * @returns Promise */ async getCurrentUser(): Promise { - const response = await api.get('/user/current'); + const response = await api.get('/users/current'); return response.data.data!; }, @@ -26,7 +26,7 @@ export const userApi = { * @returns Promise */ async updateCurrentUser(user: SysUser): Promise { - const response = await api.put('/user/current', user); + const response = await api.put('/users/current', user); return response.data.data!; }, @@ -36,7 +36,7 @@ export const userApi = { * @returns Promise */ async updateUserInfo(userInfo: SysUserInfo): Promise { - const response = await api.put('/user/info', userInfo); + const response = await api.put('/users/info', userInfo); return response.data.data!; }, @@ -47,7 +47,7 @@ export const userApi = { * @returns Promise */ async changePassword(oldPassword: string, newPassword: string): Promise { - const response = await api.post('/user/change-password', { + const response = await api.post('/users/change-password', { oldPassword, newPassword }); @@ -55,55 +55,72 @@ export const userApi = { }, /** - * 获取用户列表(分页) - * @param pageParam 分页参数 - * @returns Promise> + * 获取用户列表 + * @param filter 过滤条件 + * @returns Promise */ - async getUserList(pageParam: PageParam): Promise> { - const response = await api.get('/user/list', { - params: pageParam - }); - return response.data.pageDomain!; - }, - - /** - * 根据ID获取用户 - * @param userId 用户ID - * @returns Promise - */ - async getUserById(userId: string): Promise { - const response = await api.get(`/user/${userId}`); - return response.data.data!; + async getUserList(filter: SysUser): Promise { + const response = await api.post('/users/list', filter); + return response.data.dataList!; }, /** * 创建用户 * @param user 用户信息 - * @returns Promise 返回用户ID + * @returns Promise */ - async createUser(user: SysUser): Promise { - const response = await api.post('/user', user); + async createUser(user: SysUser): Promise { + const response = await api.post('/users/user', user); return response.data.data!; }, /** * 更新用户 - * @param userId 用户ID * @param user 用户信息 - * @returns Promise + * @returns Promise */ - async updateUser(userId: string, user: SysUser): Promise { - const response = await api.put(`/user/${userId}`, user); + async updateUser(user: SysUser): Promise { + const response = await api.put('/users/user', user); return response.data.data!; }, /** * 删除用户 - * @param userId 用户ID - * @returns Promise + * @param user 用户信息 + * @returns Promise */ - async deleteUser(userId: string): Promise { - const response = await api.delete(`/user/${userId}`); + async deleteUser(user: SysUser): Promise { + const response = await api.delete('/users/user', user); + return response.data.data!; + }, + + /** + * 获取用户部门角色绑定信息 + * @param user 用户信息 + * @returns Promise + */ + async getUserDeptRole(user: SysUserDeptRole): Promise { + const response = await api.post('/users/bind/deptrole/list', user); + return response.data.dataList!; + }, + + /** + * 绑定用户部门角色 + * @param userDeptRoleVO 用户部门角色绑定信息 + * @returns Promise + */ + async bindUserDeptRole(userDeptRoleVO: UserDeptRoleVO): Promise { + const response = await api.post('/users/bind/deptrole', userDeptRoleVO); + return response.data.data!; + }, + + /** + * 解绑用户部门角色 + * @param userDeptRoleVO 用户部门角色解绑信息 + * @returns Promise + */ + async unbindUserDeptRole(userDeptRoleVO: UserDeptRoleVO): Promise { + const response = await api.post('/users/unbind/deptrole', userDeptRoleVO); return response.data.data!; }, @@ -113,7 +130,7 @@ export const userApi = { * @returns Promise */ async batchDeleteUsers(userIds: string[]): Promise { - const response = await api.post('/user/batch-delete', { userIds }); + const response = await api.post('/users/batch-delete', { userIds }); return response.data.data!; }, @@ -124,7 +141,7 @@ export const userApi = { * @returns Promise */ async changeUserStatus(userId: string, status: number): Promise { - const response = await api.patch(`/user/${userId}/status`, { status }); + const response = await api.patch(`/users/${userId}/status`, { status }); return response.data.data!; }, @@ -134,7 +151,7 @@ export const userApi = { * @returns Promise 返回新密码 */ async resetPassword(userId: string): Promise { - const response = await api.post(`/user/${userId}/reset-password`); + const response = await api.post(`/users/${userId}/reset-password`); return response.data.data!; }, @@ -146,7 +163,7 @@ export const userApi = { async uploadAvatar(file: File): Promise { const formData = new FormData(); formData.append('file', file); - const response = await api.upload('/user/avatar', formData); + const response = await api.upload('/users/avatar', formData); return response.data.data!; } }; diff --git a/schoolNewsWeb/src/types/dept/index.ts b/schoolNewsWeb/src/types/dept/index.ts index fafd83e..c08a537 100644 --- a/schoolNewsWeb/src/types/dept/index.ts +++ b/schoolNewsWeb/src/types/dept/index.ts @@ -23,6 +23,8 @@ export interface SysDept extends BaseDTO { creator?: string; /** 更新人 */ updater?: string; + /** 子部门列表(前端使用) */ + children?: SysDept[]; } /** @@ -33,12 +35,15 @@ export interface DeptRoleVO { dept?: SysDept; /** 角色信息 */ role?: SysRole; + depts?: SysDept[]; + roles?: SysRole[]; } /** * 部门角色关联 */ export interface SysDeptRole extends BaseDTO { + id?: string; /** 部门ID */ deptID?: string; /** 角色ID */ diff --git a/schoolNewsWeb/src/types/user/index.ts b/schoolNewsWeb/src/types/user/index.ts index 34d82a8..b0d0e00 100644 --- a/schoolNewsWeb/src/types/user/index.ts +++ b/schoolNewsWeb/src/types/user/index.ts @@ -5,7 +5,8 @@ */ import { BaseDTO } from '../base'; - +import { SysDept } from '../dept'; +import { SysRole } from '../role'; /** * 系统用户 */ @@ -88,3 +89,15 @@ export interface SysUserDeptRole extends BaseDTO { roleID?: string; } +export interface UserDeptRoleVO extends BaseDTO { + /** 单个用户信息 */ + user?: SysUser; + /** 用户列表 */ + users?: SysUser[]; + /** 部门列表 */ + depts?: SysDept[]; + /** 角色列表 */ + roles?: SysRole[]; + /** 用户部门角色关联列表 */ + userDeptRoles?: SysUserDeptRole[]; +} \ No newline at end of file diff --git a/schoolNewsWeb/src/views/manage/system/DeptManageView.vue b/schoolNewsWeb/src/views/manage/system/DeptManageView.vue index 0e34934..21990da 100644 --- a/schoolNewsWeb/src/views/manage/system/DeptManageView.vue +++ b/schoolNewsWeb/src/views/manage/system/DeptManageView.vue @@ -1,13 +1,572 @@ \ No newline at end of file diff --git a/schoolNewsWeb/src/views/manage/system/PermissionManageView.vue b/schoolNewsWeb/src/views/manage/system/PermissionManageView.vue index 6e6dbb5..1b0d999 100644 --- a/schoolNewsWeb/src/views/manage/system/PermissionManageView.vue +++ b/schoolNewsWeb/src/views/manage/system/PermissionManageView.vue @@ -346,7 +346,7 @@ async function handleBindRole(row: SysPermission) { bindList.value.roles = bindingResult.roles || []; // 获取所有角色 - roleList.value = await roleApi.getRoleList(); + roleList.value = await roleApi.getAllRoles(); // 设置已选中的角色 selectedRoles.value = bindList.value.roles.map(role => role.id).filter((id): id is string => !!id); diff --git a/schoolNewsWeb/src/views/manage/system/RoleManageView.vue b/schoolNewsWeb/src/views/manage/system/RoleManageView.vue index 6047f87..afc45b3 100644 --- a/schoolNewsWeb/src/views/manage/system/RoleManageView.vue +++ b/schoolNewsWeb/src/views/manage/system/RoleManageView.vue @@ -1,13 +1,530 @@ \ No newline at end of file diff --git a/schoolNewsWeb/src/views/manage/system/UserManageView.vue b/schoolNewsWeb/src/views/manage/system/UserManageView.vue new file mode 100644 index 0000000..08bc0d6 --- /dev/null +++ b/schoolNewsWeb/src/views/manage/system/UserManageView.vue @@ -0,0 +1,514 @@ + + + + +