This commit is contained in:
高云鹏 2024-06-27 17:30:40 +08:00
commit a76ad92166
43 changed files with 246 additions and 136 deletions

View File

@ -24,6 +24,7 @@
<postgresql.version>42.7.3</postgresql.version>
<sa.version>1.38.0</sa.version>
<annotations.version>4.8.6</annotations.version>
</properties>
<dependencies>
@ -65,14 +66,6 @@
<version>${sa.version}</version>
</dependency>
<!-- hutool 的依赖配置-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-jackson</artifactId>
@ -108,7 +101,8 @@
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis.plus.spring.boot}</version>
</dependency>
<!--hutool-->
<!-- hutool 的依赖配置-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
@ -142,6 +136,14 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- 临时修复MAYBE枚举量未定义问题等待Spring6.2正式发行-->
<dependency>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-annotations</artifactId>
<version>${annotations.version}</version>
</dependency>
</dependencies>
<build>

View File

@ -2,11 +2,9 @@ package com.das.common.config;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.stereotype.Component;
import com.das.modules.auth.domain.vo.SysUserVo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

View File

@ -1,5 +1,7 @@
package com.das.common.result;
import lombok.Getter;
import lombok.Setter;
import org.springframework.lang.Nullable;
import java.io.Serial;
@ -10,6 +12,8 @@ import java.util.Optional;
* @author chenhaojie
* @Description 公共返回信息
*/
@Setter
@Getter
public class R<T> implements Serializable {
@Serial
@ -120,38 +124,6 @@ public class R<T> implements Serializable {
return flag ? success("操作成功") : fail("操作失败");
}
public int getCode() {
return this.code;
}
public boolean isSuccess() {
return this.success;
}
public T getData() {
return this.data;
}
public String getMsg() {
return this.msg;
}
public void setCode(final int code) {
this.code = code;
}
public void setSuccess(final boolean success) {
this.success = success;
}
public void setData(final T data) {
this.data = data;
}
public void setMsg(final String msg) {
this.msg = msg;
}
@Override
public String toString() {
return "R(code=" + this.getCode() + ", success=" + this.isSuccess() + ", data=" + this.getData() + ", msg=" + this.getMsg() + ")";

View File

@ -1,8 +1,8 @@
package com.das.common.utils;
import cn.hutool.http.HttpStatus;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpStatus;
import java.io.Serial;
import java.io.Serializable;
@ -52,7 +52,7 @@ public class PageDataInfo<T> implements Serializable {
public static <T> PageDataInfo<T> build(List<T> list, long total) {
PageDataInfo<T> rspData = new PageDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setCode(HttpStatus.OK.value());
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(total);
@ -61,7 +61,7 @@ public class PageDataInfo<T> implements Serializable {
public static <T> PageDataInfo<T> build(List<T> list) {
PageDataInfo<T> rspData = new PageDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setCode(HttpStatus.OK.value());
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(list.size());
@ -70,7 +70,7 @@ public class PageDataInfo<T> implements Serializable {
public static <T> PageDataInfo<T> build() {
PageDataInfo<T> rspData = new PageDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setCode(HttpStatus.OK.value());
rspData.setMsg("查询成功");
return rspData;
}

View File

@ -5,8 +5,6 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.das.common.exceptions.ServiceException;
import com.das.common.utils.SqlUtil;
import com.das.common.utils.StringUtils;
import lombok.Data;
import java.io.Serial;

View File

@ -6,9 +6,10 @@ import com.das.common.captcha.CaptchaUtils;
import com.das.common.captcha.CaptchaVO;
import com.das.common.result.R;
import com.das.common.utils.AdminRedisTemplate;
import com.das.modules.auth.domain.vo.LoginUserDetailsVo;
import com.das.modules.auth.domain.dto.ChangePasswordDto;
import com.das.modules.auth.domain.dto.LoginDto;
import com.das.modules.auth.domain.dto.RefreshTokenDto;
import com.das.modules.auth.domain.vo.LoginUserDetailsVo;
import com.das.modules.auth.domain.vo.LoginVo;
import com.das.modules.auth.service.LoginService;
import com.fasterxml.jackson.core.JsonProcessingException;
@ -17,7 +18,10 @@ import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
@ -56,12 +60,8 @@ public class LoginController {
*/
@PostMapping("/logout")
public R<?> logout(HttpServletRequest request) {
if (loginService.logout(request)) {
return R.success("退出成功");
} else {
return R.fail("退出失败");
}
loginService.logout(request);
return R.success("退出成功");
}
@PostMapping("/captchaImage")
@ -78,5 +78,13 @@ public class LoginController {
return R.success(loginVO);
}
@PostMapping("/changePassword")
public R<?> changePassword(@RequestBody ChangePasswordDto changePasswordDto) {
int result = loginService.changePassword(changePasswordDto);
if (result < 0) {
return R.fail("密码修改失败");
}
return R.success("密码修改成功");
}
}

View File

@ -5,7 +5,9 @@ import com.das.common.constant.SysAuthorityIds;
import com.das.common.result.R;
import com.das.common.utils.PageDataInfo;
import com.das.common.utils.PageQuery;
import com.das.modules.auth.domain.dto.*;
import com.das.modules.auth.domain.dto.DeleteDto;
import com.das.modules.auth.domain.dto.SysRoleDto;
import com.das.modules.auth.domain.dto.SysRoleQueryDto;
import com.das.modules.auth.domain.vo.SysRoleVo;
import com.das.modules.auth.service.SysRoleService;
import lombok.extern.slf4j.Slf4j;

View File

@ -0,0 +1,20 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
@Data
public class ChangePasswordDto {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String phone;
private String email;
private String userName;
private String newPassword;
}

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -7,5 +9,6 @@ import java.io.Serializable;
@Data
public class DeleteDto implements Serializable {
/** ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
}

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -8,6 +10,7 @@ import java.util.Date;
@Data
public class SysAuthorityDto implements Serializable {
/** 机构id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id ;
/** 权限编码 */
private String authorityCode;

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -8,6 +10,7 @@ import java.util.Date;
@Data
public class SysMenuDto implements Serializable {
/** 菜单ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id ;
/** 菜单名称 */
private String menuName ;
@ -20,8 +23,10 @@ public class SysMenuDto implements Serializable {
/** 菜单操作参数 */
private String funParam ;
/** 权限ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long authorityId ;
/** 上级菜单ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long parentMenuId ;
/** 乐观锁 */
private Integer revision ;

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -7,11 +9,13 @@ import java.io.Serializable;
@Data
public class SysMenuQueryDto implements Serializable {
/** 菜单ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id ;
/** 菜单名称 */
private String menuName ;
/** 上级菜单ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long parentMenuId ;
/** 是否是首次查询菜单 */

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -8,6 +10,7 @@ import java.util.Date;
@Data
public class SysOrgDto implements Serializable {
/** 机构id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id ;
/** 机构名称 */
private String name ;
@ -28,6 +31,7 @@ public class SysOrgDto implements Serializable {
/** 机构简称 */
private String aliasName;
/** 上级组织机构id */
@JsonSerialize(using = ToStringSerializer.class)
private Long parentOrgId ;
/** 乐观锁 */
private Integer revision ;

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -14,6 +16,8 @@ public class SysOrgQueryDto implements Serializable {
private String city ;
/** 区县 */
private String county ;
@JsonSerialize(using = ToStringSerializer.class)
private Long parentOrgId ;
/** 是否是首次查询机构 */
private Boolean recursive;

View File

@ -1,14 +1,16 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class SysRoleDto implements Serializable {
/** 主键id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id ;
/** 角色名称 */
private String roleName ;

View File

@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@ -39,6 +38,7 @@ public class SysUserDto implements Serializable {
/**
* 所属机构id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
/**
* 最后登录时间

View File

@ -1,5 +1,7 @@
package com.das.modules.auth.domain.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
@ -9,5 +11,9 @@ public class SysUserQueryDto implements Serializable {
/** 职员名称 */
private String userName ;
/** 组织机构id */
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId ;
/** 用户主键id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id ;
}

View File

@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class SysOrgVo implements Serializable {

View File

@ -1,7 +1,5 @@
package com.das.modules.auth.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.Version;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;

View File

@ -45,6 +45,11 @@ public class SysUserVo implements Serializable {
*/
private String phone;
/**
* 最后登录时间
*/
private String lastLogin;
/**
* E-Mail地址
*/

View File

@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.annotation.*;
import com.das.common.constant.BaseEntity;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;

View File

@ -1,9 +1,7 @@
package com.das.modules.auth.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.das.modules.auth.entity.SysAuthority;
import com.das.modules.auth.entity.SysRoleAuthority;
import org.apache.ibatis.annotations.Param;
/**

View File

@ -1,10 +1,10 @@
package com.das.modules.auth.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.das.modules.auth.domain.dto.SysUserQueryDto;
import com.das.modules.auth.domain.vo.SysUserVo;
import com.das.modules.auth.entity.SysUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -27,7 +27,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
long existUserByAccount(@Param("account") String account);
IPage<SysUserVo> queryUserList(IPage<SysUserVo> page, @Param("sysUser") SysUserQueryDto sysUserQueryDto);
long existUserByUserName(@Param("userName") String userName);
/**
* 根据用户id查询权限列表
* @param userId 用户id

View File

@ -1,7 +1,6 @@
package com.das.modules.auth.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.das.modules.auth.entity.SysRoleAuthority;
import com.das.modules.auth.entity.SysUserRole;

View File

@ -1,9 +1,11 @@
package com.das.modules.auth.service;
import com.das.modules.auth.domain.dto.ChangePasswordDto;
import com.das.modules.auth.domain.vo.LoginUserDetailsVo;
import com.das.modules.auth.domain.dto.LoginDto;
import com.das.modules.auth.domain.dto.RefreshTokenDto;
import com.das.modules.auth.domain.vo.LoginUserDetailsVo;
import com.das.modules.auth.domain.vo.LoginVo;
import com.fasterxml.jackson.core.JsonProcessingException;
import jakarta.servlet.http.HttpServletRequest;
@ -28,7 +30,7 @@ public interface LoginService {
* 退出登录
* @return 是否退出成功
*/
boolean logout(HttpServletRequest request);
void logout(HttpServletRequest request);
/**
* 刷新token
@ -36,4 +38,6 @@ public interface LoginService {
* @return
*/
LoginVo refreshToken(RefreshTokenDto refreshToken);
int changePassword(ChangePasswordDto changePasswordDto);
}

View File

@ -1,6 +1,5 @@
package com.das.modules.auth.service;
import com.das.modules.auth.domain.dto.SysAuthorityDto;
import com.das.modules.auth.entity.SysAuthority;
import java.util.List;

View File

@ -7,7 +7,6 @@ import com.das.modules.auth.domain.dto.SysMenuDto;
import com.das.modules.auth.domain.dto.SysMenuQueryDto;
import com.das.modules.auth.domain.vo.SysMenuVo;
import com.das.modules.auth.entity.SysMenu;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;

View File

@ -2,7 +2,9 @@ package com.das.modules.auth.service;
import com.das.common.utils.PageDataInfo;
import com.das.common.utils.PageQuery;
import com.das.modules.auth.domain.dto.*;
import com.das.modules.auth.domain.dto.DeleteDto;
import com.das.modules.auth.domain.dto.SysOrgDto;
import com.das.modules.auth.domain.dto.SysOrgQueryDto;
import com.das.modules.auth.entity.SysOrg;
import java.util.List;

View File

@ -2,10 +2,11 @@ package com.das.modules.auth.service;
import com.das.common.utils.PageDataInfo;
import com.das.common.utils.PageQuery;
import com.das.modules.auth.domain.dto.*;
import com.das.modules.auth.domain.dto.DeleteDto;
import com.das.modules.auth.domain.dto.SysRoleDto;
import com.das.modules.auth.domain.dto.SysRoleQueryDto;
import com.das.modules.auth.domain.vo.SysRoleAuthVo;
import com.das.modules.auth.domain.vo.SysRoleVo;
import com.das.modules.auth.entity.SysRole;
import java.util.List;

View File

@ -6,7 +6,6 @@ import com.das.modules.auth.domain.dto.DeleteDto;
import com.das.modules.auth.domain.dto.SysUserDto;
import com.das.modules.auth.domain.dto.SysUserQueryDto;
import com.das.modules.auth.domain.vo.SysUserVo;
import com.das.modules.auth.entity.SysUser;
public interface SysUserService {
SysUserDto createUser(SysUserDto sysUserDto);

View File

@ -8,10 +8,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.das.common.captcha.CaptchaUtils;
import com.das.common.config.SaTokenProperties;
import com.das.common.config.SessionUtil;
import com.das.common.exceptions.ServiceException;
import com.das.common.utils.AdminRedisTemplate;
import com.das.modules.auth.domain.dto.ChangePasswordDto;
import com.das.modules.auth.domain.vo.LoginUserDetailsVo;
import com.das.modules.auth.domain.dto.LoginDto;
import com.das.modules.auth.domain.dto.RefreshTokenDto;
import com.das.modules.auth.domain.vo.LoginUserDetailsVo;
import com.das.modules.auth.domain.vo.LoginVo;
import com.das.modules.auth.domain.vo.SysUserVo;
import com.das.modules.auth.entity.SysUser;
@ -22,8 +25,10 @@ import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.Duration;
import java.util.Date;
/**
* @author chenhaojie
@ -63,6 +68,9 @@ public class LoginServiceImpl implements LoginService {
loginInfo.setMsg("账号密码错误");
return loginInfo;
}
// 更新用户登录时间
sysUser.setLastLogin(new Date());
sysUserMapper.updateById(sysUser);
StpUtil.login(sysUser.getAccount());// 执行登录这里username为用户唯一标识
String refreshTokenUuid = IdUtil.fastSimpleUUID();
String token = StpUtil.getTokenValue().replace("-", "");
@ -93,11 +101,10 @@ public class LoginServiceImpl implements LoginService {
@Override
public boolean logout(HttpServletRequest request) {
public void logout(HttpServletRequest request) {
String token = request.getHeader("token");
adminRedisTemplate.del(token);
StpUtil.logoutByTokenValue(token);
return true;
}
@Override
@ -126,4 +133,25 @@ public class LoginServiceImpl implements LoginService {
}
@Override
public int changePassword(ChangePasswordDto changePasswordDto) {
if (changePasswordDto.getId() == null) {
throw new ServiceException("非法调用,参数缺失");
}
SysUser sysUser = sysUserMapper.selectById(changePasswordDto.getId());
if (sysUser == null) {
throw new ServiceException("用户不存在");
}
String newPassword ="";
if (!StringUtils.isEmpty(changePasswordDto.getNewPassword())) {
newPassword = BCrypt.hashpw(changePasswordDto.getNewPassword(), BCrypt.gensalt());
sysUser.setPassword(newPassword);
}
sysUser.setUserName(changePasswordDto.getUserName());
sysUser.setEmail(changePasswordDto.getEmail());
sysUser.setPhone(changePasswordDto.getPhone());
sysUser.setUpdatedTime(new Date());
return sysUserMapper.updateById(sysUser);
}
}

View File

@ -1,11 +1,10 @@
package com.das.modules.auth.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.das.common.utils.BeanCopyUtils;
import com.das.common.utils.SequenceUtils;
import com.das.common.utils.PageDataInfo;
import com.das.common.utils.PageQuery;
import com.das.common.utils.SequenceUtils;
import com.das.modules.auth.domain.dto.DeleteDto;
import com.das.modules.auth.domain.dto.SysMenuDto;
import com.das.modules.auth.domain.dto.SysMenuQueryDto;
@ -15,7 +14,6 @@ import com.das.modules.auth.mapper.SysMenuMapper;
import com.das.modules.auth.service.SysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.ArrayList;
import java.util.Date;

View File

@ -39,6 +39,7 @@ public class SysOrgServiceImpl implements SysOrgService {
public void updateOrg(SysOrgDto sysOrgDto) {
SysOrg sysOrg = new SysOrg();
BeanCopyUtils.copy(sysOrgDto,sysOrg);
sysOrg.setUpdatedTime(new Date());
sysOrgMapper.updateById(sysOrg);
}

View File

@ -135,6 +135,7 @@ public class SysRoleServiceImpl implements SysRoleService {
sysRole.setRoleName(sysRoleDto.getRoleName());
sysRole.setRoleCode(sysRoleDto.getRoleCode());
sysRole.setId(sysRoleDto.getId());
sysRole.setUpdatedTime(new Date());
this.sysRoleMapper.updateById(sysRole);
//验证权限有效性
String errorAuths = checkErrorAuthorities(sysRoleDto.getAuthList());

View File

@ -5,15 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.das.common.exceptions.ServiceException;
import com.das.common.utils.BeanCopyUtils;
import com.das.common.utils.SequenceUtils;
import com.das.common.utils.PageDataInfo;
import com.das.common.utils.PageQuery;
import com.das.common.utils.SequenceUtils;
import com.das.modules.auth.domain.dto.DeleteDto;
import com.das.modules.auth.domain.dto.SysUserDto;
import com.das.modules.auth.domain.dto.SysUserQueryDto;
import com.das.modules.auth.domain.vo.SysUserVo;
import com.das.modules.auth.entity.SysRole;
import com.das.modules.auth.entity.SysRoleAuthority;
import com.das.modules.auth.entity.SysUser;
import com.das.modules.auth.entity.SysUserRole;
import com.das.modules.auth.mapper.SysRoleMapper;
@ -58,7 +56,7 @@ public class SysUserServiceImpl implements SysUserService {
SysUser sysUser = new SysUser();
BeanCopyUtils.copy(sysUserDto,sysUser);
//密码加密
String passwordEncode = BCrypt.hashpw(sysUserDto.getPassword(), BCrypt.gensalt());
String passwordEncode = BCrypt.hashpw("123456789", BCrypt.gensalt());
sysUser.setId(SequenceUtils.generateId());
sysUser.setRevision(1);
sysUser.setCreatedTime(new Date());
@ -128,18 +126,19 @@ public class SysUserServiceImpl implements SysUserService {
if (sysUser == null) {
throw new ServiceException(String.format("账号 %d 不存在", sysUserDto.getId()));
}
if (StringUtils.hasText(sysUserDto.getUserName())) {
if (StringUtils.hasText(sysUserDto.getAccount())) {
//若与数据库中账户名相同 则表示未对名称进行修改
if (!sysUser.getUserName().equals(sysUserDto.getUserName())) {
if (!sysUser.getAccount().equals(sysUserDto.getAccount())) {
//判断账户名是否存在
long userCount = sysUserMapper.existUserByUserName(sysUserDto.getUserName());
long userCount = sysUserMapper.existUserByAccount(sysUserDto.getAccount());
if (userCount > 0) {
throw new ServiceException(String.format("账户名 %s 已存在", sysUserDto.getUserName()));
throw new ServiceException(String.format("账户名 %s 已存在", sysUserDto.getAccount()));
}
}
}
SysUser newSysUser = new SysUser();
BeanUtils.copyProperties(sysUserDto, newSysUser, "password");
newSysUser.setUpdatedTime(new Date());
sysUserMapper.updateById(newSysUser);
if (sysUserDto.getRoleList() != null) {

View File

@ -1,7 +1,7 @@
package com.das.modules.equipment.controller;
import com.das.common.result.R;
import com.das.common.constant.EquipmentTypeIds;
import com.das.common.result.R;
import com.das.modules.equipment.domain.vo.EquipmentTypeVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;

View File

@ -25,6 +25,7 @@
<result property="userName" column="user_name" jdbcType="VARCHAR"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
<result property="phone" column="phone" jdbcType="VARCHAR"/>
<result property="lastLogin" column="last_login" jdbcType="VARCHAR"/>
<result property="orgId" column="org_id" jdbcType="VARCHAR"/>
<result property="revision" column="revision" jdbcType="VARCHAR"/>
<collection property="roleList" column="id" ofType="com.das.modules.auth.domain.vo.SysUserRoleVo" select="queryRoleByUserId"/>
@ -42,10 +43,6 @@
select count(1) from sys_user t where t.account=#{account}
</select>
<select id="existUserByUserName" resultType="java.lang.Long">
select count(1) from sys_user t where t.user_name=#{userName}
</select>
<select id="queryRoleByUserId" resultMap="UserRoleRelationMap">
select sr.role_code,sr.role_name ,sr.id ,sr.revision from sys_role sr left join sys_r_user_role srur on sr.id = srur.role_id
where srur.user_id = #{id}
@ -61,6 +58,9 @@
<if test="sysUser.orgId != null and sysUser.orgId != ''">
and org_id = #{sysUser.orgId}
</if>
<if test="sysUser.id != null and sysUser.id != ''">
and id = #{sysUser.id}
</if>
</where>
</select>

View File

@ -5,9 +5,13 @@ ENV = 'development'
VITE_BASE_PATH = './'
# 代理配置(开发使用),必须在一行中
# 本地
# VITE_APP_PROXY=[["/api","http://192.168.130.12:8080/api"]]
# 线上
VITE_APP_PROXY=[["/api","http://192.168.109.195:8080/api"]]
# 开发环境下跨域代理请输入要跨域的api地址 - 尾部无需带'/'
# VITE_PROXY_URL = 'http://localhost:8000'
VITE_AXIOS_BASE_URL = 'http://localhost:1818'

View File

@ -37,7 +37,6 @@ export function menusTree(params: object = {}) {
})
}
// 菜单管理查询
export function menusQuery(params: object = {}) {
return createAxios({
@ -137,3 +136,11 @@ export function allRoleQuery(params: object = {}) {
})
}
// 获取绑定菜单
export function menuTree(params: object = {}) {
return createAxios({
url: '/api/menus/tree',
method: 'POST',
data: params,
})
}

View File

@ -25,6 +25,7 @@ import { BEFORE_RESIZE_LAYOUT } from '/@/stores/constant/cacheKey'
import { isEmpty } from 'lodash-es'
import { setNavTabsWidth } from '/@/utils/layout'
import { id } from 'element-plus/es/locales.mjs'
import { menuTree } from '/@/api/backend'
defineOptions({
components: { Default, Classic, Streamline, Double },
@ -350,7 +351,58 @@ const menu = [
},
]
function transformNode(menu: any) {
menu = menu.map((node: any) => {
return {
id: Number(node.id),
pid: node.parentMenuId,
type: node.children.length != 0 ? 'menu_dir' : 'menu',
title: node.menuName,
name: node.menuName,
path: node.menuName,
icon: node.menuIcon,
menu_type: node.children.length != 0 ? null : 'tab',
component: node.children.length != 0 ? '' : '/src/views/backend' + node.funParam,
extend: node.menuName,
keepalive: 0,
children: transformNode(node.children),
}
})
return menu
}
const init = () => {
menuTree().then((res: any) => {
console.log('🚀 ~ menusLoginTree ~ res:', res)
const menu = transformNode(res.data.children)
console.log('🚀 ~ menusLoginTree ~ menu:', menu)
handleAdminRoute(menu)
if (route.params.to) {
const lastRoute = JSON.parse(route.params.to as string)
if (lastRoute.path != adminBaseRoutePath) {
let query = !isEmpty(lastRoute.query) ? lastRoute.query : {}
routePush({ path: decodeURIComponent(lastRoute.path), query: query })
return
}
}
//
let firstRoute = getFirstRoute(navTabs.state.tabsViewRoutes)
if (firstRoute) routePush(firstRoute.path)
})
// handleAdminRoute(menu)
// if (route.params.to) {
// const lastRoute = JSON.parse(route.params.to as string)
// if (lastRoute.path != adminBaseRoutePath) {
// let query = !isEmpty(lastRoute.query) ? lastRoute.query : {}
// routePush({ path: lastRoute.path, query: query })
// return
// }
// }
// //
// let firstRoute = getFirstRoute(navTabs.state.tabsViewRoutes)
// if (firstRoute) routePush(firstRoute.path)
/**
* 后台初始化请求获取站点配置动态路由等信息
*/
@ -366,21 +418,9 @@ const init = () => {
// }
// if (res.data) {
handleAdminRoute(menu)
//
if (route.params.to) {
const lastRoute = JSON.parse(route.params.to as string)
if (lastRoute.path != adminBaseRoutePath) {
let query = !isEmpty(lastRoute.query) ? lastRoute.query : {}
routePush({ path: lastRoute.path, query: query })
return
}
}
//
let firstRoute = getFirstRoute(navTabs.state.tabsViewRoutes)
if (firstRoute) routePush(firstRoute.path)
// }
// })
}

View File

@ -90,13 +90,11 @@ function createAxios<Data = any, T = ApiPromise<Data>>(axiosConfig: AxiosRequest
if (config.method === 'post' && config.data) {
// 对data进行加密
// const formData = new FormData()
// formData.append('param')
console.log(config.data)
config.data = encrypt_aes(config.data, v)
} else if (config.method === 'get' && config.params) {
// 对params进行加密
// const formData = new FormData()
// formData.append('param')
console.log(config.params)
config.params = encrypt_aes(config.params, v)
}

View File

@ -1,6 +1,7 @@
import CryptoJS from 'crypto-js'
const key = 'b6967ee87b86d85a'
const ivv = '6920559358617460'
export function encrypt_aes(text: any, iv: string) {
let plaintText = text

View File

@ -65,9 +65,9 @@
:rules="rules"
style="padding: 24px 40px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-form-item label="菜单路径:" prop="funParam">
<!-- <el-form-item label="菜单路径:" prop="funParam">
<el-input v-model="fromUpDate.funParam" placeholder="" clearable />
</el-form-item>
</el-form-item> -->
<el-form-item label="菜单名称:" prop="menuName">
<el-input v-model="fromUpDate.menuName" placeholder="" clearable />
@ -90,11 +90,7 @@
</el-form-item>
<el-form-item label="&nbsp;&nbsp;动作参数:">
<el-input v-model="fromUpDate.funParam" :disabled="true">
<template #append>
<el-icon style="cursor: pointer; font-size: 23px" @click="clickParam"><Setting /></el-icon>
</template>
</el-input>
<el-input v-model="fromUpDate.funParam"> </el-input>
</el-form-item>
<el-form-item label="&nbsp;&nbsp;菜单权限:">
@ -112,7 +108,7 @@
</el-dialog>
<!-- 编辑页面的动作参数弹框 -->
<el-dialog v-model="visibleParam" title="选择页面" width="500" :before-close="handleCloseParam">
<!-- <el-dialog v-model="visibleParam" title="选择页面" width="500" :before-close="handleCloseParam">
<el-table :data="ParamTableData" style="width: 100%">
<el-table-column label="页面名称" width="180" />
<el-table-column label="页面路径" width="180" />
@ -135,7 +131,7 @@
<el-button type="primary" @click="visibleParam1"> 确定 </el-button>
</div>
</template>
</el-dialog>
</el-dialog> -->
<!-- 新增弹框 -->
<el-dialog v-model="visibleAdd" title="新增菜单" width="500" :before-close="handleCloseAdd">
<el-form
@ -145,9 +141,9 @@
:rules="rules"
style="padding: 24px 40px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-form-item label="菜单路径:" prop="funParam">
<!-- <el-form-item label="菜单路径:" prop="funParam">
<el-input v-model="formInlineAdd.funParam" placeholder="" clearable />
</el-form-item>
</el-form-item> -->
<el-form-item label="菜单名称:" prop="menuName">
<el-input v-model="formInlineAdd.menuName" placeholder="" clearable />
@ -170,11 +166,7 @@
</el-form-item>
<el-form-item label="&nbsp;&nbsp;动作参数:">
<el-input v-model="formInlineAdd.funParam" :disabled="true">
<template #append>
<el-icon style="cursor: pointer; font-size: 23px" @click="clickParam"><Setting /></el-icon>
</template>
</el-input>
<el-input v-model="formInlineAdd.funParam"> </el-input>
</el-form-item>
<el-form-item label="&nbsp;&nbsp;菜单权限:">
@ -191,7 +183,7 @@
</template>
</el-dialog>
<!-- 新增页面动作参数弹框 -->
<el-dialog v-model="visibleParam" title="选择页面" width="500" :before-close="handleCloseParam">
<!-- <el-dialog v-model="visibleParam" title="选择页面" width="500" :before-close="handleCloseParam">
<el-table :data="ParamTableData" style="width: 100%">
<el-table-column label="页面名称" width="180" />
<el-table-column label="页面路径" width="180" />
@ -213,7 +205,7 @@
<el-button type="primary" @click="visibleParam1"> 确定 </el-button>
</div>
</template>
</el-dialog>
</el-dialog> -->
<!-- 删除确认弹框 -->
<el-dialog v-model="dialogVisibleDelete" title="操作提示" width="500" :before-close="handleCloseDelete">
<span>确定是否删除?</span>
@ -278,14 +270,19 @@ const props = {
const loadNode = (node: Node, resolve: (data: Tree[]) => void) => {
if (node.level === 0) {
return resolve([])
}
if (node.level > 1) return resolve([])
setTimeout(() => {
const data: Tree[] = []
resolve(data)
}, 500)
const fromParameter = {
parentMenuId: node.data.id,
recursive: false,
}
menusTree(fromParameter)
.then((res: any) => {
return resolve(res.data)
})
.catch((err) => {
console.log(err)
})
}
//
const input2 = ref('')