瀏覽代碼

feat:调整admin、租户登录逻辑,不通租户数据逻辑隔离,前端租户页面优化、登录、退出逻辑优化等

韩帛霖 1 年之前
父節點
當前提交
1968524f5a

+ 25 - 1
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysLoginController.java

@@ -7,6 +7,8 @@ import com.zkqy.common.core.domain.entity.DataSource;
 import com.zkqy.common.core.domain.entity.SysTenant;
 import com.zkqy.framework.web.service.TokenService;
 import com.zkqy.system.service.IDataSourceService;
+import com.zkqy.system.service.ILoginPageConfigurationService;
+import com.zkqy.system.service.ISysTenantService;
 import com.zkqy.system.service.impl.SysTenantServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -54,6 +56,13 @@ public class SysLoginController {
     @Resource
     private TokenService tokenService;
 
+    @Resource
+    private ISysTenantService iSysTenantService;
+
+
+    @Autowired //登录页面配置信息
+    private ILoginPageConfigurationService loginPageConfigurationService;
+
     /**
      * 数据引擎切换数据源接口地址
      */
@@ -89,7 +98,7 @@ public class SysLoginController {
         // 校验租户状态?生成token
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
-        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+        String token = loginService.login(loginBody.getTenantID() + "¥¥¥" + loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
                 loginBody.getUuid());
 //        if (tokenService.getLoginUserIsAdminByToken(token)) {
 //            return AjaxResult.error("用户不存在!");
@@ -103,6 +112,21 @@ public class SysLoginController {
         return ajax;
     }
 
+    /**
+     * 验证租户i是否存在有效
+     *
+     * @param tenantCode 租户编号
+     * @return
+     */
+    @GetMapping("/isTenantExist")
+    public AjaxResult isTenantExist(String tenantCode) {
+        SysTenant sysTenantInfo = iSysTenantService.selectSysTenantByTenantCode(tenantCode);
+        if (sysTenantInfo != null) {
+            sysTenantInfo.setLoginPageConfiguration(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(tenantCode));
+            return AjaxResult.success(sysTenantInfo);
+        }
+        return AjaxResult.error("租户不存在");
+    }
 
     /**
      * 登录方法

+ 8 - 19
zkqy-common/src/main/java/com/zkqy/common/core/domain/entity/SysTenant.java

@@ -85,6 +85,8 @@ public class SysTenant extends BaseEntity {
      */
     private String tenantGrade;
 
+    private Object loginPageConfiguration;
+
     public String getTenantParentId() {
         return tenantParentId;
     }
@@ -201,24 +203,11 @@ public class SysTenant extends BaseEntity {
         this.dataSource = dataSource;
     }
 
-//    @Override
-//    public String toString() {
-//        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-//            .append("tenantId", getTenantId())
-//            .append("tenantName", getTenantName())
-//            .append("tenantCode", getTenantCode())
-//            .append("owner", getOwner())
-//            .append("contactInfo", getContactInfo())
-//            .append("address", getAddress())
-//            .append("isDel", getIsDel())
-//            .append("createBy", getCreateBy())
-//            .append("createTime", getCreateTime())
-//            .append("updateBy", getUpdateBy())
-//            .append("updateTime", getUpdateTime())
-//            .append("datasourceId",getTenantId())
-//            .append("dataSource",getDataSource())
-//            .toString();
-//    }
-
+    public Object getLoginPageConfiguration() {
+        return loginPageConfiguration;
+    }
 
+    public void setLoginPageConfiguration(Object loginPageConfiguration) {
+        this.loginPageConfiguration = loginPageConfiguration;
+    }
 }

+ 23 - 19
zkqy-common/src/main/java/com/zkqy/common/core/domain/model/LoginBody.java

@@ -5,11 +5,10 @@ import javax.validation.constraints.NotNull;
 
 /**
  * 用户登录对象
- * 
+ *
  * @author zkqy
  */
-public class LoginBody
-{
+public class LoginBody {
     /**
      * 用户名
      */
@@ -31,48 +30,53 @@ public class LoginBody
     @NotNull(message = "验证码不能为空")
     private String code;
 
+    /**
+     * 租户ID
+     */
+    private String tenantID;
+
     /**
      * 唯一标识
      */
     private String uuid;
 
-    public String getUsername()
-    {
+    public String getUsername() {
         return username;
     }
 
-    public void setUsername(String username)
-    {
+    public void setUsername(String username) {
         this.username = username;
     }
 
-    public String getPassword()
-    {
+    public String getPassword() {
         return password;
     }
 
-    public void setPassword(String password)
-    {
+    public void setPassword(String password) {
         this.password = password;
     }
 
-    public String getCode()
-    {
+    public String getCode() {
         return code;
     }
 
-    public void setCode(String code)
-    {
+    public void setCode(String code) {
         this.code = code;
     }
 
-    public String getUuid()
-    {
+    public String getUuid() {
         return uuid;
     }
 
-    public void setUuid(String uuid)
-    {
+    public void setUuid(String uuid) {
         this.uuid = uuid;
     }
+
+    public String getTenantID() {
+        return tenantID;
+    }
+
+    public void setTenantID(String tenantID) {
+        this.tenantID = tenantID;
+    }
 }

+ 1 - 1
zkqy-framework/src/main/java/com/zkqy/framework/config/SecurityConfig.java

@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage","/loginAdmin").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage","/loginAdmin","/isTenantExist").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 36 - 48
zkqy-framework/src/main/java/com/zkqy/framework/web/service/SysLoginService.java

@@ -45,8 +45,7 @@ import java.time.ZoneOffset;
  * @author zkqy
  */
 @Component
-public class SysLoginService
-{
+public class SysLoginService {
     @Autowired
     private TokenService tokenService;
 
@@ -70,40 +69,31 @@ public class SysLoginService
      *
      * @param username 用户名
      * @param password 密码
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      */
-    public String login(String username, String password, String code, String uuid)
-    {
+    public String login(String username, String password, String code, String uuid) {
         // 验证码校验
         validateCaptcha(username, code, uuid);
         // 登录前置校验
         loginPreCheck(username, password);
         // 用户验证
         Authentication authentication = null;
-        try
-        {
+        try {
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
             AuthenticationContextHolder.setContext(authenticationToken);
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager.authenticate(authenticationToken);
-        }
-        catch (Exception e)
-        {
-            if (e instanceof BadCredentialsException)
-            {
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                 throw new UserPasswordNotMatchException();
-            }
-            else
-            {
+            } else {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                 throw new ServiceException(e.getMessage());
             }
-        }
-        finally
-        {
+        } finally {
             AuthenticationContextHolder.clearContext();
         }
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
@@ -126,25 +116,21 @@ public class SysLoginService
      * 校验验证码
      *
      * @param username 用户名
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      */
-    public void validateCaptcha(String username, String code, String uuid)
-    {
+    public void validateCaptcha(String username, String code, String uuid) {
         boolean captchaEnabled = configService.selectCaptchaEnabled();
-        if (captchaEnabled)
-        {
+        if (captchaEnabled) {
             String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
             String captcha = redisCache.getCacheObject(verifyKey);
             redisCache.deleteObject(verifyKey);
-            if (captcha == null)
-            {
+            if (captcha == null) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
                 throw new CaptchaExpireException();
             }
-            if (!code.equalsIgnoreCase(captcha))
-            {
+            if (!code.equalsIgnoreCase(captcha)) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
                 throw new CaptchaException();
             }
@@ -153,35 +139,31 @@ public class SysLoginService
 
     /**
      * 登录前置校验
+     *
      * @param username 用户名
      * @param password 用户密码
      */
-    public void loginPreCheck(String username, String password)
-    {
+    public void loginPreCheck(String username, String password) {
         // 用户名或密码为空 错误
-        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password))
-        {
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null")));
             throw new UserNotExistsException();
         }
         // 密码如果不在指定范围内 错误
         if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
-                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
-        {
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             throw new UserPasswordNotMatchException();
         }
         // 用户名不在指定范围内 错误
         if (username.length() < UserConstants.USERNAME_MIN_LENGTH
-                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
-        {
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             throw new UserPasswordNotMatchException();
         }
         // IP黑名单校验
         String blackStr = configService.selectConfigByKey("sys.login.blackIPList");
-        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
-        {
+        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked")));
             throw new BlackListException();
         }
@@ -192,39 +174,45 @@ public class SysLoginService
      *
      * @param userId 用户ID
      */
-    public void recordLoginInfo(Long userId)
-    {
+    public void recordLoginInfo(Long userId) {
         SysUser sysUser = new SysUser();
         sysUser.setUserId(userId);
         sysUser.setLoginIp(IpUtils.getIpAddr());
         sysUser.setLoginDate(DateUtils.getNowDate());
         userService.updateUserProfile(sysUser);
     }
+
     public String checkTenantExpirationTime(LoginBody loginBody) {
         // 拿到当前用户
-        SysUser user = userService.selectUserByUserName(loginBody.getUsername());
+        SysUser user;
+        if (loginBody.getUsername().equals("admin")) {
+            user = userService.selectUserByUserName(loginBody.getUsername());
+        } else {
+            user = userService.selectUserByUserName(loginBody.getTenantID() + "¥¥¥" + loginBody.getUsername());
+        }
+
         //拿到当前登录用户
-        if(!user.getUserName().equals("admin")){
+        if (!user.getUserName().equals("admin")) {
             //根据租户id查询租户信息
             SysTenant sysTenant = sysTenantService.selectSysTenantByTenantId(user.getTenantId());
-            if(sysTenant==null){
+            if (sysTenant == null) {
                 return "未有此租户信息";
             }
-            if(sysTenant.getTenantExpirationTime()==null||sysTenant.getTenantExpirationTime().isEmpty()){
+            if (sysTenant.getTenantExpirationTime() == null || sysTenant.getTenantExpirationTime().isEmpty()) {
                 return "该用户租户信息并未激活";
             }
             SymmetricCrypto symmetricCrypto = new SymmetricCrypto(SymmetricAlgorithm.DES, "sgEsnN6QWq8W7j5H01020304".getBytes());
             //当前时间
-            LocalDateTime now=LocalDateTime.now();
+            LocalDateTime now = LocalDateTime.now();
             long nowSecond = now.toEpochSecond(ZoneOffset.ofHours(8));
             //到期时间
             String LastActiveTimeStr = symmetricCrypto.decryptStr(sysTenant.getTenantExpirationTime(), CharsetUtil.CHARSET_UTF_8);
             LocalDateTime LastActiveDateTime = DateUtils.toLocalDateTime(LastActiveTimeStr, "yyyy-MM-dd HH:mm:ss");
             long expirationTimeSecond = LastActiveDateTime.toEpochSecond(ZoneOffset.ofHours(8));
             //计算时间戳
-            long difference=expirationTimeSecond-nowSecond; //相差的时间数 后边减前边
+            long difference = expirationTimeSecond - nowSecond; //相差的时间数 后边减前边
             //如果是负数证明已经过期了
-            if(difference<0){
+            if (difference < 0) {
                 return "该用户租户信息已过期";
             }
         }

+ 19 - 21
zkqy-framework/src/main/java/com/zkqy/framework/web/service/UserDetailsServiceImpl.java

@@ -20,13 +20,12 @@ import com.zkqy.system.service.ISysUserService;
  * @author zkqy
  */
 @Service
-public class UserDetailsServiceImpl implements UserDetailsService
-{
+public class UserDetailsServiceImpl implements UserDetailsService {
     private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
 
     @Autowired
     private ISysUserService userService;
-    
+
     @Autowired
     private SysPasswordService passwordService;
 
@@ -34,23 +33,23 @@ public class UserDetailsServiceImpl implements UserDetailsService
     private SysPermissionService permissionService;
 
     @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
-    {
-        SysUser user = userService.selectUserByUserName(username);
-        if (StringUtils.isNull(user))
-        {
-            log.info("登录用户:{} 不存在.", username);
-            throw new ServiceException("登录用户:" + username + " 不存在");
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        String name;
+        if (!username.equals("admin")) {
+            name = username.split("¥¥¥")[1];
+        }else{
+            name = username;
         }
-        else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
-        {
-            log.info("登录用户:{} 已被删除.", username);
-            throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
-        }
-        else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
-        {
-            log.info("登录用户:{} 已被停用.", username);
-            throw new ServiceException("对不起,您的账号:" + username + " 已停用");
+        SysUser user = userService.selectUserByUserName(username);
+        if (StringUtils.isNull(user)) {
+            log.info("登录用户:{} 不存在.", name);
+            throw new ServiceException("登录用户:" + name + " 不存在");
+        } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
+            log.info("登录用户:{} 已被删除.", name);
+            throw new ServiceException("对不起,您的账号:" + name + " 已被删除");
+        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+            log.info("登录用户:{} 已被停用.", name);
+            throw new ServiceException("对不起,您的账号:" + name + " 已停用");
         }
 
         passwordService.validate(user);
@@ -58,8 +57,7 @@ public class UserDetailsServiceImpl implements UserDetailsService
         return createLoginUser(user);
     }
 
-    public UserDetails createLoginUser(SysUser user)
-    {
+    public UserDetails createLoginUser(SysUser user) {
         return new LoginUser(user.getUserId(), user.getDeptId(), user.getTenantId(), user, permissionService.getMenuPermission(user));
     }
 }

+ 8 - 0
zkqy-system/src/main/java/com/zkqy/system/mapper/SysTenantMapper.java

@@ -19,6 +19,14 @@ public interface SysTenantMapper {
      */
     public SysTenant selectSysTenantByTenantId(Long tenantId);
 
+    /**
+     * 查询租户信息
+     *
+     * @param tenantCode 租户信息编码
+     * @return 租户信息
+     */
+    public SysTenant selectSysTenantByTenantCode(String tenantCode);
+
     /**
      * 查询租户信息
      *

+ 9 - 0
zkqy-system/src/main/java/com/zkqy/system/mapper/SysUserMapper.java

@@ -44,6 +44,15 @@ public interface SysUserMapper
      */
     public SysUser selectUserByUserName(String userName);
 
+    /**
+     * 通过租户信息查询用户
+     *
+     * @param tenantId 租户id
+     * @param userName 用户名
+     * @return 用户对象信息
+     */
+    public SysUser selectUserByTenantInfo(@Param("tenantId") String tenantId, @Param("userName") String userName);
+
     /**
      * 通过用户ID查询用户
      * 

+ 8 - 0
zkqy-system/src/main/java/com/zkqy/system/service/ISysTenantService.java

@@ -20,6 +20,14 @@ public interface ISysTenantService {
      */
     public SysTenant selectSysTenantByTenantId(Long tenantId);
 
+    /**
+     * 查询租户信息
+     *
+     * @param tenantCode 租户信息编码
+     * @return 租户信息
+     */
+    public SysTenant selectSysTenantByTenantCode(String tenantCode);
+
     /**
      * 查询租户信息
      *

+ 4 - 0
zkqy-system/src/main/java/com/zkqy/system/service/impl/SysTenantServiceImpl.java

@@ -74,6 +74,10 @@ public class SysTenantServiceImpl implements ISysTenantService {
     public SysTenant selectSysTenantByTenantId(Long tenantId) {
         return sysTenantMapper.selectSysTenantByTenantId(tenantId);
     }
+    @Override
+    public SysTenant selectSysTenantByTenantCode(String tenantCode) {
+        return sysTenantMapper.selectSysTenantByTenantCode(tenantCode);
+    }
 
     @Override
     public List<SysTenant> selectSysTenantChildrenInfoByTenantId(Long tenantId) {

+ 89 - 136
zkqy-system/src/main/java/com/zkqy/system/service/impl/SysUserServiceImpl.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.validation.Validator;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,12 +33,11 @@ import com.zkqy.system.service.ISysUserService;
 
 /**
  * 用户 业务层处理
- * 
+ *
  * @author zkqy
  */
 @Service
-public class SysUserServiceImpl implements ISysUserService
-{
+public class SysUserServiceImpl implements ISysUserService {
     private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
 
     @Autowired
@@ -63,79 +63,77 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
     @Override
     @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectUserList(SysUser user)
-    {
+    public List<SysUser> selectUserList(SysUser user) {
         return userMapper.selectUserList(user);
     }
 
     /**
      * 根据条件分页查询已分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
     @Override
     @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectAllocatedList(SysUser user)
-    {
+    public List<SysUser> selectAllocatedList(SysUser user) {
         return userMapper.selectAllocatedList(user);
     }
 
     /**
      * 根据条件分页查询未分配用户角色列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */
     @Override
     @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SysUser> selectUnallocatedList(SysUser user)
-    {
+    public List<SysUser> selectUnallocatedList(SysUser user) {
         return userMapper.selectUnallocatedList(user);
     }
 
     /**
      * 通过用户名查询用户
-     * 
+     *
      * @param userName 用户名
      * @return 用户对象信息
      */
     @Override
-    public SysUser selectUserByUserName(String userName)
-    {
-        return userMapper.selectUserByUserName(userName);
+    public SysUser selectUserByUserName(String userName) {
+        if (userName.equals("admin")) {
+            return userMapper.selectUserByUserName(userName);
+        } else {
+            String info[] = userName.split("¥¥¥");
+            return userMapper.selectUserByTenantInfo(info[0], info[1]);
+        }
     }
 
     /**
      * 通过用户ID查询用户
-     * 
+     *
      * @param userId 用户ID
      * @return 用户对象信息
      */
     @Override
-    public SysUser selectUserById(Long userId)
-    {
+    public SysUser selectUserById(Long userId) {
         return userMapper.selectUserById(userId);
     }
 
     /**
      * 查询用户所属角色组
-     * 
+     *
      * @param userName 用户名
      * @return 结果
      */
     @Override
-    public String selectUserRoleGroup(String userName)
-    {
+    public String selectUserRoleGroup(String userName) {
         List<SysRole> list = roleMapper.selectRolesByUserName(userName);
-        if (CollectionUtils.isEmpty(list))
-        {
+        if (CollectionUtils.isEmpty(list)) {
             return StringUtils.EMPTY;
         }
         return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
@@ -143,16 +141,14 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 查询用户所属岗位组
-     * 
+     *
      * @param userName 用户名
      * @return 结果
      */
     @Override
-    public String selectUserPostGroup(String userName)
-    {
+    public String selectUserPostGroup(String userName) {
         List<SysPost> list = postMapper.selectPostsByUserName(userName);
-        if (CollectionUtils.isEmpty(list))
-        {
+        if (CollectionUtils.isEmpty(list)) {
             return StringUtils.EMPTY;
         }
         return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
@@ -160,17 +156,15 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验用户名称是否唯一
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
-    public boolean checkUserNameUnique(SysUser user)
-    {
+    public boolean checkUserNameUnique(SysUser user) {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
         SysUser info = userMapper.checkUserNameUnique(user.getUserName());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
+        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -183,12 +177,10 @@ public class SysUserServiceImpl implements ISysUserService
      * @return
      */
     @Override
-    public boolean checkPhoneUnique(SysUser user)
-    {
+    public boolean checkPhoneUnique(SysUser user) {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
         SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
+        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -201,12 +193,10 @@ public class SysUserServiceImpl implements ISysUserService
      * @return
      */
     @Override
-    public boolean checkEmailUnique(SysUser user)
-    {
+    public boolean checkEmailUnique(SysUser user) {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
         SysUser info = userMapper.checkEmailUnique(user.getEmail());
-        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
-        {
+        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -214,33 +204,28 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 校验用户是否允许操作
-     * 
+     *
      * @param user 用户信息
      */
     @Override
-    public void checkUserAllowed(SysUser user)
-    {
-        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
-        {
+    public void checkUserAllowed(SysUser user) {
+        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
             throw new ServiceException("不允许操作超级管理员用户");
         }
     }
 
     /**
      * 校验用户是否有数据权限
-     * 
+     *
      * @param userId 用户id
      */
     @Override
-    public void checkUserDataScope(Long userId)
-    {
-        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
-        {
+    public void checkUserDataScope(Long userId) {
+        if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
             SysUser user = new SysUser();
             user.setUserId(userId);
             List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
-            if (StringUtils.isEmpty(users))
-            {
+            if (StringUtils.isEmpty(users)) {
                 throw new ServiceException("没有权限访问用户数据!");
             }
         }
@@ -248,14 +233,13 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
     @Transactional
-    public int insertUser(SysUser user)
-    {
+    public int insertUser(SysUser user) {
         // 新增用户信息
         int rows = userMapper.insertUser(user);
         // 新增用户岗位关联
@@ -267,26 +251,24 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 注册用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
-    public boolean registerUser(SysUser user)
-    {
+    public boolean registerUser(SysUser user) {
         return userMapper.insertUser(user) > 0;
     }
 
     /**
      * 修改保存用户信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
     @Transactional
-    public int updateUser(SysUser user)
-    {
+    public int updateUser(SysUser user) {
         Long userId = user.getUserId();
         // 删除用户与角色关联
         userRoleMapper.deleteUserRoleByUserId(userId);
@@ -301,104 +283,94 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 用户授权角色
-     * 
-     * @param userId 用户ID
+     *
+     * @param userId  用户ID
      * @param roleIds 角色组
      */
     @Override
     @Transactional
-    public void insertUserAuth(Long userId, Long[] roleIds)
-    {
+    public void insertUserAuth(Long userId, Long[] roleIds) {
         userRoleMapper.deleteUserRoleByUserId(userId);
         insertUserRole(userId, roleIds);
     }
 
     /**
      * 修改用户状态
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
-    public int updateUserStatus(SysUser user)
-    {
+    public int updateUserStatus(SysUser user) {
         return userMapper.updateUser(user);
     }
 
     /**
      * 修改用户基本信息
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
-    public int updateUserProfile(SysUser user)
-    {
+    public int updateUserProfile(SysUser user) {
         return userMapper.updateUser(user);
     }
 
     /**
      * 修改用户头像
-     * 
+     *
      * @param userName 用户名
-     * @param avatar 头像地址
+     * @param avatar   头像地址
      * @return 结果
      */
     @Override
-    public boolean updateUserAvatar(String userName, String avatar)
-    {
+    public boolean updateUserAvatar(String userName, String avatar) {
         return userMapper.updateUserAvatar(userName, avatar) > 0;
     }
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param user 用户信息
      * @return 结果
      */
     @Override
-    public int resetPwd(SysUser user)
-    {
+    public int resetPwd(SysUser user) {
         return userMapper.updateUser(user);
     }
 
     /**
      * 重置用户密码
-     * 
+     *
      * @param userName 用户名
      * @param password 密码
      * @return 结果
      */
     @Override
-    public int resetUserPwd(String userName, String password)
-    {
+    public int resetUserPwd(String userName, String password) {
         return userMapper.resetUserPwd(userName, password);
     }
 
     /**
      * 新增用户角色信息
-     * 
+     *
      * @param user 用户对象
      */
-    public void insertUserRole(SysUser user)
-    {
+    public void insertUserRole(SysUser user) {
         this.insertUserRole(user.getUserId(), user.getRoleIds());
     }
 
     /**
      * 新增用户岗位信息
-     * 
+     *
      * @param user 用户对象
      */
-    public void insertUserPost(SysUser user)
-    {
+    public void insertUserPost(SysUser user) {
         Long[] posts = user.getPostIds();
-        if (StringUtils.isNotEmpty(posts))
-        {
+        if (StringUtils.isNotEmpty(posts)) {
             // 新增用户与岗位管理
             List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
-            for (Long postId : posts)
-            {
+            for (Long postId : posts) {
                 SysUserPost up = new SysUserPost();
                 up.setUserId(user.getUserId());
                 up.setPostId(postId);
@@ -410,18 +382,15 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 新增用户角色信息
-     * 
-     * @param userId 用户ID
+     *
+     * @param userId  用户ID
      * @param roleIds 角色组
      */
-    public void insertUserRole(Long userId, Long[] roleIds)
-    {
-        if (StringUtils.isNotEmpty(roleIds))
-        {
+    public void insertUserRole(Long userId, Long[] roleIds) {
+        if (StringUtils.isNotEmpty(roleIds)) {
             // 新增用户与角色管理
             List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
-            for (Long roleId : roleIds)
-            {
+            for (Long roleId : roleIds) {
                 SysUserRole ur = new SysUserRole();
                 ur.setUserId(userId);
                 ur.setRoleId(roleId);
@@ -433,14 +402,13 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 通过用户ID删除用户
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */
     @Override
     @Transactional
-    public int deleteUserById(Long userId)
-    {
+    public int deleteUserById(Long userId) {
         // 删除用户与角色关联
         userRoleMapper.deleteUserRoleByUserId(userId);
         // 删除用户与岗位表
@@ -450,16 +418,14 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 批量删除用户信息
-     * 
+     *
      * @param userIds 需要删除的用户ID
      * @return 结果
      */
     @Override
     @Transactional
-    public int deleteUserByIds(Long[] userIds)
-    {
-        for (Long userId : userIds)
-        {
+    public int deleteUserByIds(Long[] userIds) {
+        for (Long userId : userIds) {
             checkUserAllowed(new SysUser(userId));
             checkUserDataScope(userId);
         }
@@ -472,17 +438,15 @@ public class SysUserServiceImpl implements ISysUserService
 
     /**
      * 导入用户数据
-     * 
-     * @param userList 用户数据列表
+     *
+     * @param userList        用户数据列表
      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
-     * @param operName 操作用户
+     * @param operName        操作用户
      * @return 结果
      */
     @Override
-    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
-    {
-        if (StringUtils.isNull(userList) || userList.size() == 0)
-        {
+    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
+        if (StringUtils.isNull(userList) || userList.size() == 0) {
             throw new ServiceException("导入用户数据不能为空!");
         }
         int successNum = 0;
@@ -490,23 +454,18 @@ public class SysUserServiceImpl implements ISysUserService
         StringBuilder successMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
         String password = configService.selectConfigByKey("sys.user.initPassword");
-        for (SysUser user : userList)
-        {
-            try
-            {
+        for (SysUser user : userList) {
+            try {
                 // 验证是否存在这个用户
                 SysUser u = userMapper.selectUserByUserName(user.getUserName());
-                if (StringUtils.isNull(u))
-                {
+                if (StringUtils.isNull(u)) {
                     BeanValidators.validateWithException(validator, user);
                     user.setPassword(SecurityUtils.encryptPassword(password));
                     user.setCreateBy(operName);
                     userMapper.insertUser(user);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
-                }
-                else if (isUpdateSupport)
-                {
+                } else if (isUpdateSupport) {
                     BeanValidators.validateWithException(validator, user);
                     checkUserAllowed(u);
                     checkUserDataScope(u.getUserId());
@@ -515,28 +474,21 @@ public class SysUserServiceImpl implements ISysUserService
                     userMapper.updateUser(user);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
-                }
-                else
-                {
+                } else {
                     failureNum++;
                     failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
                 }
-            }
-            catch (Exception e)
-            {
+            } catch (Exception e) {
                 failureNum++;
                 String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
                 failureMsg.append(msg + e.getMessage());
                 log.error(msg, e);
             }
         }
-        if (failureNum > 0)
-        {
+        if (failureNum > 0) {
             failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
             throw new ServiceException(failureMsg.toString());
-        }
-        else
-        {
+        } else {
             successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
         }
         return successMsg.toString();
@@ -551,6 +503,7 @@ public class SysUserServiceImpl implements ISysUserService
     public int selectUserByUserIds(List<Long> userIds) {
         return userMapper.selectUserByUserIds(userIds);
     }
+
     @Override
     public boolean isExistUser(String userName) {
         int count = userMapper.queryCountUserName(userName);

+ 4 - 1
zkqy-system/src/main/resources/mapper/system/SysTenantMapper.xml

@@ -69,7 +69,10 @@
         <include refid="selectSysTenantVo"/>
         and tenant_id = #{tenantId}
     </select>
-
+    <select id="selectSysTenantByTenantCode" parameterType="string" resultMap="SysTenantResult">
+        <include refid="selectSysTenantVo"/>
+        and tenant_code = #{tenantCode}
+    </select>
     <select id="selectSysTenantChildrenInfoByTenantId" parameterType="Long" resultMap="SysTenantResult">
         <include refid="selectSysTenantVo"/>
         and tenant_parent_id = #{tenantId}

+ 372 - 308
zkqy-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -1,328 +1,392 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.system.mapper.SysUserMapper">
 
     <resultMap type="SysUser" id="SysUserResult">
-        <id     property="userId"       column="user_id"      />
-        <result property="deptId"       column="dept_id"      />
-		<result property="tenantId"     column="tenant_id"    />
-        <result property="userName"     column="user_name"    />
-        <result property="nickName"     column="nick_name"    />
-		<result property="userType"     column="user_type"    />
-        <result property="email"        column="email"        />
-        <result property="phonenumber"  column="phonenumber"  />
-        <result property="sex"          column="sex"          />
-        <result property="avatar"       column="avatar"       />
-        <result property="password"     column="password"     />
-        <result property="status"       column="status"       />
-        <result property="delFlag"      column="del_flag"     />
-        <result property="loginIp"      column="login_ip"     />
-        <result property="loginDate"    column="login_date"   />
-        <result property="createBy"     column="create_by"    />
-        <result property="createTime"   column="create_time"  />
-        <result property="updateBy"     column="update_by"    />
-        <result property="updateTime"   column="update_time"  />
-        <result property="remark"       column="remark"       />
-		<result property="tenantName"   column="tenant_name"  />
-        <association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
-		<association property="tenant"  column="tenant_id" javaType="SysTenant" resultMap="tenantResult" />
-        <collection  property="roles"   javaType="java.util.List"           resultMap="RoleResult" />
+        <id property="userId" column="user_id"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="nickName" column="nick_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="email" column="email"/>
+        <result property="phonenumber" column="phonenumber"/>
+        <result property="sex" column="sex"/>
+        <result property="avatar" column="avatar"/>
+        <result property="password" column="password"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="loginIp" column="login_ip"/>
+        <result property="loginDate" column="login_date"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+        <result property="tenantName" column="tenant_name"/>
+        <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
+        <association property="tenant" column="tenant_id" javaType="SysTenant" resultMap="tenantResult"/>
+        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
+    </resultMap>
+
+    <resultMap type="SysUser" id="SysUserInfoResult">
+        <id property="userId" column="user_id"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="nickName" column="nick_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="email" column="email"/>
+        <result property="phonenumber" column="phonenumber"/>
+        <result property="sex" column="sex"/>
+        <result property="avatar" column="avatar"/>
+        <result property="password" column="password"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="loginIp" column="login_ip"/>
+        <result property="loginDate" column="login_date"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
     </resultMap>
 
-	<resultMap type="SysUser" id="SysUserInfoResult">
-		<id     property="userId"       column="user_id"      />
-		<result property="deptId"       column="dept_id"      />
-		<result property="tenantId"     column="tenant_id"    />
-		<result property="userName"     column="user_name"    />
-		<result property="nickName"     column="nick_name"    />
-		<result property="userType"     column="user_type"    />
-		<result property="email"        column="email"        />
-		<result property="phonenumber"  column="phonenumber"  />
-		<result property="sex"          column="sex"          />
-		<result property="avatar"       column="avatar"       />
-		<result property="password"     column="password"     />
-		<result property="status"       column="status"       />
-		<result property="delFlag"      column="del_flag"     />
-		<result property="loginIp"      column="login_ip"     />
-		<result property="loginDate"    column="login_date"   />
-		<result property="createBy"     column="create_by"    />
-		<result property="createTime"   column="create_time"  />
-		<result property="updateBy"     column="update_by"    />
-		<result property="updateTime"   column="update_time"  />
-		<result property="remark"       column="remark"       />
-	</resultMap>
-	
     <resultMap id="deptResult" type="SysDept">
-        <id     property="deptId"    column="dept_id"     />
-        <result property="parentId"  column="parent_id"   />
-        <result property="deptName"  column="dept_name"   />
-        <result property="ancestors" column="ancestors"   />
-        <result property="orderNum"  column="order_num"   />
-        <result property="leader"    column="leader"      />
-        <result property="status"    column="dept_status" />
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="leader" column="leader"/>
+        <result property="status" column="dept_status"/>
+    </resultMap>
+
+    <resultMap id="tenantResult" type="SysTenant">
+        <id property="tenantId" column="tenant_id"/>
+        <result property="tenantName" column="tenant_name"/>
+        <result property="tenantCode" column="tenant_code"/>
+        <result property="owner" column="owner"/>
+        <association property="dataSource" column="datasource_id" javaType="DataSource" resultMap="dataSourceResult"/>
     </resultMap>
 
-	<resultMap id="tenantResult" type="SysTenant">
-		<id     property="tenantId"    column="tenant_id"     />
-		<result property="tenantName"  column="tenant_name"   />
-		<result property="tenantCode" column="tenant_code"   />
-		<result property="owner"  column="owner"   />
-		<association property="dataSource"    column="datasource_id" javaType="DataSource" resultMap="dataSourceResult" />
-	</resultMap>
+    <resultMap id="dataSourceResult" type="DataSource">
+        <id property="id" column="id"/>
+        <result property="databaseType" column="database_type"/>
+        <result property="databaseName" column="database_name"/>
+        <result property="databaseIp" column="database_ip"/>
+        <result property="username" column="dsusername"/>
+        <result property="password" column="dspassword"/>
+        <result property="portNumber" column="port_number"/>
+    </resultMap>
 
-	<resultMap id="dataSourceResult" type="DataSource">
-		<id     property="id"    column="id"     />
-		<result property="databaseType"  column="database_type"   />
-		<result property="databaseName"  column="database_name"   />
-		<result property="databaseIp"  column="database_ip"   />
-		<result property="username"  column="dsusername"   />
-		<result property="password"  column="dspassword"   />
-		<result property="portNumber"  column="port_number"   />
-	</resultMap>
-	
     <resultMap id="RoleResult" type="SysRole">
-        <id     property="roleId"       column="role_id"        />
-        <result property="roleName"     column="role_name"      />
-        <result property="roleKey"      column="role_key"       />
-        <result property="roleSort"     column="role_sort"      />
-        <result property="dataScope"     column="data_scope"    />
-        <result property="status"       column="role_status"    />
+        <id property="roleId" column="role_id"/>
+        <result property="roleName" column="role_name"/>
+        <result property="roleKey" column="role_key"/>
+        <result property="roleSort" column="role_sort"/>
+        <result property="dataScope" column="data_scope"/>
+        <result property="status" column="role_status"/>
     </resultMap>
-	
-	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
-        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
-		te.tenant_id, te.tenant_name, te.tenant_code, te.owner,
-        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,
-			   ds.id,ds.database_type,ds.database_name,ds.username as dsusername, ds.password as dspassword,ds.port_number,ds.database_ip
+
+    <sql id="selectUserVo">
+        select u.user_id,
+               u.dept_id,
+               u.user_name,
+               u.nick_name,
+               u.user_type,
+               u.email,
+               u.avatar,
+               u.phonenumber,
+               u.password,
+               u.sex,
+               u.status,
+               u.del_flag,
+               u.login_ip,
+               u.login_date,
+               u.create_by,
+               u.create_time,
+               u.remark,
+               d.dept_id,
+               d.parent_id,
+               d.ancestors,
+               d.dept_name,
+               d.order_num,
+               d.leader,
+               d.status    as dept_status,
+               te.tenant_id,
+               te.tenant_name,
+               te.tenant_code,
+               te.owner,
+               r.role_id,
+               r.role_name,
+               r.role_key,
+               r.role_sort,
+               r.data_scope,
+               r.status    as role_status,
+               ds.id,
+               ds.database_type,
+               ds.database_name,
+               ds.username as dsusername,
+               ds.password as dspassword,
+               ds.port_number,
+               ds.database_ip
         from sys_user u
-		    left join sys_dept d on u.dept_id = d.dept_id
-		    left join sys_tenant te on u.tenant_id = te.tenant_id
-		    left join sys_user_role ur on u.user_id = ur.user_id
-		    left join sys_role r on r.role_id = ur.role_id
-			left join data_source ds on te.datasource_id = ds.id
+                 left join sys_dept d on u.dept_id = d.dept_id
+                 left join sys_tenant te on u.tenant_id = te.tenant_id
+                 left join sys_user_role ur on u.user_id = ur.user_id
+                 left join sys_role r on r.role_id = ur.role_id
+                 left join data_source ds on te.datasource_id = ds.id
     </sql>
-    
+
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		SELECT
-		u.user_id,
-		u.dept_id,
-		u.nick_name,
-		u.user_name,
-		u.email,
-		u.avatar,
-		u.phonenumber,
-		u.sex,
-		u.STATUS,
-		u.del_flag,
-		u.login_ip,
-		u.login_date,
-		u.create_by,
-		u.create_time,
-		u.remark,
-		d.dept_name,
-		d.leader,
-		u.tenant_id,
-		t.tenant_name,
-		u.user_type
-		FROM
-		sys_user u
-		LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
-		LEFT JOIN  sys_tenant t ON u.tenant_id = t.tenant_id
-		WHERE
-		u.del_flag = '0'
-		<if test="userId != null and userId != 0">
-			AND u.user_id = #{userId}
-		</if>
-		<if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
-		</if>
-		<if test="tenantName != null and tenantName != ''">
-			AND t.tenant_name like concat('%', #{tenantName}, '%')
-		</if>
-		<if test="status != null and status != ''">
-			AND u.status = #{status}
-		</if>
-		<if test="phonenumber != null and phonenumber != ''">
-			AND u.phonenumber like concat('%', #{phonenumber}, '%')
-		</if>
-		<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-			AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-		</if>
-		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-			AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-		</if>
-		<if test="deptId != null and deptId != 0">
-			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
-		</if>
-		<if test="tenantId != null and tenantId != 0">
-			AND u.tenant_id = #{tenantId}
-		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
-	</select>
-	
-	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
-	    from sys_user u
-			 left join sys_dept d on u.dept_id = d.dept_id
-			 left join sys_user_role ur on u.user_id = ur.user_id
-			 left join sys_role r on r.role_id = ur.role_id
-	    where u.del_flag = '0' and r.role_id = #{roleId}
-	    <if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
-		</if>
-		<if test="phonenumber != null and phonenumber != ''">
-			AND u.phonenumber like concat('%', #{phonenumber}, '%')
-		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
-	</select>
-	
-	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
-	    from sys_user u
-			 left join sys_dept d on u.dept_id = d.dept_id
-			 left join sys_user_role ur on u.user_id = ur.user_id
-			 left join sys_role r on r.role_id = ur.role_id
-	    where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL)
-	    and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and ur.role_id = #{roleId})
-	    <if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
-		</if>
-		<if test="phonenumber != null and phonenumber != ''">
-			AND u.phonenumber like concat('%', #{phonenumber}, '%')
-		</if>
-		<if test="tenantId != null">
-			AND u.tenant_Id = #{tenantId}
-		</if>
-		<!-- 数据范围过滤 -->
-		${params.dataScope}
-	</select>
-	
-	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
-	    <include refid="selectUserVo"/>
-		where u.user_name = #{userName} and u.del_flag = '0'
-	</select>
-	
-	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
-		<include refid="selectUserVo"/>
-		where u.user_id = #{userId}
-	</select>
-	
-	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
-		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
-	</select>
-	
-	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
-		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
-	</select>
-	
-	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
-		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
-	</select>
-	
-	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
- 		insert into sys_user(
- 			<if test="userId != null and userId != 0">user_id,</if>
- 			<if test="deptId != null and deptId != 0">dept_id,</if>
- 			<if test="userName != null and userName != ''">user_name,</if>
- 			<if test="nickName != null and nickName != ''">nick_name,</if>
- 		    <if test="userType != null and userType != ''">user_type,</if>
- 			<if test="email != null and email != ''">email,</if>
- 			<if test="avatar != null and avatar != ''">avatar,</if>
- 			<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
- 			<if test="sex != null and sex != ''">sex,</if>
- 			<if test="password != null and password != ''">password,</if>
- 			<if test="status != null and status != ''">status,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
-		    <if test="tenantId != null and tenantId != 0">tenant_id,</if>
- 			create_time
- 		)values(
- 			<if test="userId != null and userId != ''">#{userId},</if>
- 			<if test="deptId != null and deptId != ''">#{deptId},</if>
- 			<if test="userName != null and userName != ''">#{userName},</if>
- 			<if test="nickName != null and nickName != ''">#{nickName},</if>
-			<if test="userType != null and userType != ''">#{userType},</if>
- 			<if test="email != null and email != ''">#{email},</if>
- 			<if test="avatar != null and avatar != ''">#{avatar},</if>
- 			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
- 			<if test="sex != null and sex != ''">#{sex},</if>
- 			<if test="password != null and password != ''">#{password},</if>
- 			<if test="status != null and status != ''">#{status},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			<if test="remark != null and remark != ''">#{remark},</if>
-		    <if test="tenantId != null">#{tenantId},</if>
- 			sysdate()
- 		)
-	</insert>
-	
-	<update id="updateUser" parameterType="SysUser">
- 		update sys_user
- 		<set>
- 			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
- 			<if test="userName != null and userName != ''">user_name = #{userName},</if>
- 			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
- 			<if test="email != null ">email = #{email},</if>
- 			<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
- 			<if test="sex != null and sex != ''">sex = #{sex},</if>
- 			<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
- 			<if test="password != null and password != ''">password = #{password},</if>
- 			<if test="status != null and status != ''">status = #{status},</if>
- 			<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
- 			<if test="loginDate != null">login_date = #{loginDate},</if>
- 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			<if test="remark != null">remark = #{remark},</if>
- 			update_time = sysdate()
- 		</set>
- 		where user_id = #{userId}
-	</update>
-	
-	<update id="updateUserStatus" parameterType="SysUser">
- 		update sys_user set status = #{status} where user_id = #{userId}
-	</update>
-	
-	<update id="updateUserAvatar" parameterType="SysUser">
- 		update sys_user set avatar = #{avatar} where user_name = #{userName}
-	</update>
-	
-	<update id="resetUserPwd" parameterType="SysUser">
- 		update sys_user set password = #{password} where user_name = #{userName}
-	</update>
-	
-	<delete id="deleteUserById" parameterType="Long">
- 		update sys_user set del_flag = '2' where user_id = #{userId}
- 	</delete>
- 	
- 	<delete id="deleteUserByIds" parameterType="Long">
- 		update sys_user set del_flag = '2' where user_id in
- 		<foreach collection="array" item="userId" open="(" separator="," close=")">
- 			#{userId}
-        </foreach> 
- 	</delete>
+        SELECT
+        u.user_id,
+        u.dept_id,
+        u.nick_name,
+        u.user_name,
+        u.email,
+        u.avatar,
+        u.phonenumber,
+        u.sex,
+        u.STATUS,
+        u.del_flag,
+        u.login_ip,
+        u.login_date,
+        u.create_by,
+        u.create_time,
+        u.remark,
+        d.dept_name,
+        d.leader,
+        u.tenant_id,
+        t.tenant_name,
+        u.user_type
+        FROM
+        sys_user u
+        LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
+        LEFT JOIN sys_tenant t ON u.tenant_id = t.tenant_id
+        WHERE
+        u.del_flag = '0'
+        <if test="userId != null and userId != 0">
+            AND u.user_id = #{userId}
+        </if>
+        <if test="userName != null and userName != ''">
+            AND u.user_name like concat('%', #{userName}, '%')
+        </if>
+        <if test="tenantName != null and tenantName != ''">
+            AND t.tenant_name like concat('%', #{tenantName}, '%')
+        </if>
+        <if test="status != null and status != ''">
+            AND u.status = #{status}
+        </if>
+        <if test="phonenumber != null and phonenumber != ''">
+            AND u.phonenumber like concat('%', #{phonenumber}, '%')
+        </if>
+        <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
+            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+        </if>
+        <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+        </if>
+        <if test="deptId != null and deptId != 0">
+            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId},
+            ancestors) ))
+        </if>
+        <if test="tenantId != null and tenantId != 0">
+            AND u.tenant_id = #{tenantId}
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
+        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
+        from sys_user u
+        left join sys_dept d on u.dept_id = d.dept_id
+        left join sys_user_role ur on u.user_id = ur.user_id
+        left join sys_role r on r.role_id = ur.role_id
+        where u.del_flag = '0' and r.role_id = #{roleId}
+        <if test="userName != null and userName != ''">
+            AND u.user_name like concat('%', #{userName}, '%')
+        </if>
+        <if test="phonenumber != null and phonenumber != ''">
+            AND u.phonenumber like concat('%', #{phonenumber}, '%')
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
+        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
+        from sys_user u
+        left join sys_dept d on u.dept_id = d.dept_id
+        left join sys_user_role ur on u.user_id = ur.user_id
+        left join sys_role r on r.role_id = ur.role_id
+        where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL)
+        and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and
+        ur.role_id = #{roleId})
+        <if test="userName != null and userName != ''">
+            AND u.user_name like concat('%', #{userName}, '%')
+        </if>
+        <if test="phonenumber != null and phonenumber != ''">
+            AND u.phonenumber like concat('%', #{phonenumber}, '%')
+        </if>
+        <if test="tenantId != null">
+            AND u.tenant_Id = #{tenantId}
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.user_name = #{userName} and u.del_flag = '0'
+    </select>
+    <select id="selectUserByTenantInfo" parameterType="String" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.tenant_id = #{tenantId} and u.user_name = #{userName} and u.del_flag = '0'
+    </select>
+
+    <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.user_id = #{userId}
+    </select>
+
+    <select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
+        select user_id, user_name
+        from sys_user
+        where user_name = #{userName}
+          and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
+        select user_id, phonenumber
+        from sys_user
+        where phonenumber = #{phonenumber}
+          and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
+        select user_id, email
+        from sys_user
+        where email = #{email}
+          and del_flag = '0' limit 1
+    </select>
+
+    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+        insert into sys_user(
+        <if test="userId != null and userId != 0">user_id,</if>
+        <if test="deptId != null and deptId != 0">dept_id,</if>
+        <if test="userName != null and userName != ''">user_name,</if>
+        <if test="nickName != null and nickName != ''">nick_name,</if>
+        <if test="userType != null and userType != ''">user_type,</if>
+        <if test="email != null and email != ''">email,</if>
+        <if test="avatar != null and avatar != ''">avatar,</if>
+        <if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
+        <if test="sex != null and sex != ''">sex,</if>
+        <if test="password != null and password != ''">password,</if>
+        <if test="status != null and status != ''">status,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        <if test="tenantId != null and tenantId != 0">tenant_id,</if>
+        create_time
+        )values(
+        <if test="userId != null and userId != ''">#{userId},</if>
+        <if test="deptId != null and deptId != ''">#{deptId},</if>
+        <if test="userName != null and userName != ''">#{userName},</if>
+        <if test="nickName != null and nickName != ''">#{nickName},</if>
+        <if test="userType != null and userType != ''">#{userType},</if>
+        <if test="email != null and email != ''">#{email},</if>
+        <if test="avatar != null and avatar != ''">#{avatar},</if>
+        <if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
+        <if test="sex != null and sex != ''">#{sex},</if>
+        <if test="password != null and password != ''">#{password},</if>
+        <if test="status != null and status != ''">#{status},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        <if test="tenantId != null">#{tenantId},</if>
+        sysdate()
+        )
+    </insert>
+
+    <update id="updateUser" parameterType="SysUser">
+        update sys_user
+        <set>
+            <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+            <if test="email != null ">email = #{email},</if>
+            <if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
+            <if test="sex != null and sex != ''">sex = #{sex},</if>
+            <if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
+            <if test="password != null and password != ''">password = #{password},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
+            <if test="loginDate != null">login_date = #{loginDate},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            update_time = sysdate()
+        </set>
+        where user_id = #{userId}
+    </update>
+
+    <update id="updateUserStatus" parameterType="SysUser">
+        update sys_user
+        set status = #{status}
+        where user_id = #{userId}
+    </update>
+
+    <update id="updateUserAvatar" parameterType="SysUser">
+        update sys_user
+        set avatar = #{avatar}
+        where user_name = #{userName}
+    </update>
+
+    <update id="resetUserPwd" parameterType="SysUser">
+        update sys_user
+        set password = #{password}
+        where user_name = #{userName}
+    </update>
+
+    <delete id="deleteUserById" parameterType="Long">
+        update sys_user
+        set del_flag = '2'
+        where user_id = #{userId}
+    </delete>
+
+    <delete id="deleteUserByIds" parameterType="Long">
+        update sys_user set del_flag = '2' where user_id in
+        <foreach collection="array" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+
+    <select id="selectAllUser" resultMap="SysUserInfoResult">
+        select *
+        from sys_user
+        where del_flag = '0'
+    </select>
 
-	<select id="selectAllUser" resultMap="SysUserInfoResult">
-		select * from sys_user where del_flag = '0'
-	</select>
+    <select id="selectUserIdByTenantIds" resultType="Long">
+        SELECT user_id FROM `sys_user` where del_flag = '0' and tenant_id in
+        <foreach collection="array" item="tenantId" open="(" close=")" separator=",">
+            #{tenantId}
+        </foreach>
+    </select>
 
-	<select id="selectUserIdByTenantIds" resultType="Long">
-		SELECT user_id FROM `sys_user` where del_flag = '0' and tenant_id in
-		<foreach collection="array" item="tenantId" open="(" close=")" separator=",">
-			#{tenantId}
-		</foreach>
-	</select>
+    <select id="selectUserByUserIds" resultType="int">
+        select count(1) from sys_user where `status` = '0' and del_flag = '0' and user_id in
+        <foreach collection="list" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </select>
+    <select id="queryCountUserName" resultType="int">
+        select count(1)
+        from sys_user
+        where user_name = #{userName}
+          and del_flag = '0'
+    </select>
 
-	<select id="selectUserByUserIds" resultType="int">
-		select count(1) from sys_user where `status` = '0' and del_flag = '0' and user_id in
-		<foreach collection="list" item="userId" open="(" close=")" separator=",">
-			#{userId}
-		</foreach>
-	</select>
-	<select id="queryCountUserName" resultType="int">
-		select count(1) from sys_user where user_name = #{userName} and del_flag = '0'
-	</select>
-	
 </mapper> 

+ 16 - 2
zkqy-ui/src/api/login.js

@@ -1,11 +1,12 @@
 import request from '@/utils/request'
 
 // 登录方法
-export function login(username, password, code, uuid) {
+export function login(username, password, code, tenantID, uuid) {
   const data = {
     username,
     password,
     code,
+    tenantID,
     uuid
   }
   return request({
@@ -17,6 +18,19 @@ export function login(username, password, code, uuid) {
     data: data
   })
 }
+
+// 验证租户是否存在
+export function isTenantExist(tenantCode) {
+  return request({
+    url: '/isTenantExist',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    params: tenantCode
+  })
+}
+
 export function adminLoginApi(username, password, code, uuid) {
   const data = {
     username,
@@ -72,4 +86,4 @@ export function getCodeImg() {
     method: 'get',
     timeout: 20000
   })
-}
+}

+ 3 - 2
zkqy-ui/src/layout/index.vue

@@ -108,6 +108,7 @@ export default {
       needTagsView: (state) => state.settings.tagsView,
       fixedHeader: (state) => state.settings.fixedHeader,
       username: (state) => state.user.name,
+      tenantInfo: (state) => state.user.tenant,
       ...mapGetters(["avatar"]),
     }),
     classObj() {
@@ -141,9 +142,9 @@ export default {
         type: "warning",
       })
         .then(() => {
-          window.sessionStorage.clear();
+          let tenantCode = this.tenantInfo.tenantCode;
           this.$store.dispatch("LogOut").then(() => {
-            location.href = "/index";
+            this.$router.push({path: "/login", query: {tenantCode: tenantCode}});
           });
         })
         .catch(() => {});

+ 2 - 2
zkqy-ui/src/router/index.js

@@ -34,7 +34,7 @@ export const constantRoutes = [
   // {
   //   path: '/data',
   //   component: data,
-  //   hidden: true, 
+  //   hidden: true,
   //   children: [
   //     {
   //       path: 'data',
@@ -155,7 +155,7 @@ export const constantRoutes = [
     component: () => {
       var url = new URL(window.location.href);
       var params = new URLSearchParams(url.search);
-      let temp = params.get('tenantId')
+      let temp = params.get('tenantCode')
       console.log(temp);
       if (temp) {
         return import('@/views/login')

+ 10 - 11
zkqy-ui/src/store/modules/user.js

@@ -1,6 +1,6 @@
-import { login, logout, getInfo, adminLoginApi } from '@/api/login'
-import { changeDatasource } from '@/api/dataEngine/index'
-import { getToken, setToken, removeToken } from '@/utils/auth'
+import {login, logout, getInfo, adminLoginApi} from '@/api/login'
+import {changeDatasource} from '@/api/dataEngine/index'
+import {getToken, setToken, removeToken} from '@/utils/auth'
 
 const user = {
   state: {
@@ -47,16 +47,15 @@ const user = {
 
   actions: {
     // 登录
-    Login({ commit }, userInfo) {
+    Login({commit}, userInfo) {
       const username = userInfo.username.trim()
       const password = userInfo.password
-
+      const tenantID = userInfo.tenantID
       const code = userInfo.code
       const uuid = userInfo.uuid
       return new Promise((resolve, reject) => {
-        login(username, password, code, uuid).then(res => {
+        login(username, password, code, tenantID, uuid).then(res => {
           commit('SET_NAME', username)
-
           setToken(res.token)
           commit('SET_TOKEN', res.token)
           resolve()
@@ -66,7 +65,7 @@ const user = {
       })
     },
     // admin登录
-    adminLogin({ commit }, userInfo) {
+    adminLogin({commit}, userInfo) {
       const username = userInfo.username.trim()
       const password = userInfo.password
 
@@ -86,7 +85,7 @@ const user = {
     },
 
     // 获取用户信息
-    GetInfo({ commit, state }) {
+    GetInfo({commit, state}) {
       return new Promise((resolve, reject) => {
         getInfo().then(res => {
           const user = res.user
@@ -116,7 +115,7 @@ const user = {
     },
 
     // 退出系统
-    LogOut({ commit, state }) {
+    LogOut({commit, state}) {
       return new Promise((resolve, reject) => {
         logout(state.token).then(() => {
           commit('SET_TOKEN', '')
@@ -133,7 +132,7 @@ const user = {
     },
 
     // 前端 登出
-    FedLogOut({ commit }) {
+    FedLogOut({commit}) {
       return new Promise(resolve => {
         commit('SET_TOKEN', '')
         removeToken()

+ 101 - 146
zkqy-ui/src/views/login.vue

@@ -16,7 +16,8 @@
           <div class="grid-content bg-purple-dark title">
             工业应用操作系统
             <!-- 智能制造平台 -->
-          </div></el-col
+          </div>
+        </el-col
         >
       </el-row>
       <el-row class="rowww">
@@ -27,6 +28,7 @@
           auto-complete="off"
           placeholder="账号"
           class="inputt"
+          @blur="handleBlur"
         />
       </el-row>
       <el-row class="roww">
@@ -59,7 +61,7 @@
           </el-col>
           <el-col :span="4" :offset="1">
             <div class="login-code">
-              <img :src="codeUrl" @click="getCode" class="login-code-img" />
+              <img :src="codeUrl" @click="getCode" class="login-code-img"/>
             </div>
           </el-col>
         </el-row>
@@ -70,7 +72,8 @@
           <img :src="codeUrl" @click="getCode" class="login-code-img" />
         </div> -->
         <el-checkbox v-model="loginForm.rememberMe" class="aaa"
-          >在这个设备上记住我</el-checkbox
+        >在这个设备上记住我
+        </el-checkbox
         >
       </el-row>
 
@@ -79,105 +82,28 @@
           class="logg"
           :loading="loading"
           @click.native.prevent="handleLogin"
-          >登录</el-col
+        >登录
+        </el-col
         >
       </el-row>
     </el-form>
-
-    <!-- <el-form
-      ref="loginForm"
-      :model="loginForm"
-      :rules="loginRules"
-      class="login-form"
-    >
-      <img src="../assets/images/comp.png" class="comlogo" />
-      <span class="title">智能制造平台</span>
-      <el-form-item prop="username">
-        <p style="line-height: 12px">用户名</p>
-        <el-input
-          v-model="loginForm.username"
-          type="text"
-          auto-complete="off"
-          placeholder="账号"
-          show-password
-        >
-          
-        </el-input>
-      </el-form-item>
-      <el-form-item prop="password">
-        <p style="line-height: 12px">密码</p>
-        <el-input
-          v-model="loginForm.password"
-          type="password"
-          auto-complete="off"
-          placeholder="密码"
-          @keyup.enter.native="handleLogin"
-          show-password
-        >
-         
-        </el-input>
-      </el-form-item>
-
-      <el-form-item prop="code" v-if="captchaEnabled">
-        <div style="line-height: 12px">验证码</div>
-        <el-input
-          v-model="loginForm.code"
-          auto-complete="off"
-          placeholder="验证码"
-          style="width: 63%"
-          @keyup.enter.native="handleLogin"
-          show-password
-        >
-        </el-input>
-        <div class="login-code">
-          <img :src="codeUrl" @click="getCode" class="login-code-img" />
-        </div>
-      </el-form-item>
-      <el-checkbox
-        v-model="loginForm.rememberMe"
-        class="a"
-        >在这个设备上记住我</el-checkbox
-      >
-
-      <el-form-item >
-        <el-button
-          :loading="loading"
-          size="medium"
-          type="primary"
-          @click.native.prevent="handleLogin"
-        >
-          <span v-if="!loading">登 录</span>
-          <span v-else>登 录 中...</span>
-        </el-button>
-        <div style="float: right" v-if="register">
-          <router-link class="link-type" :to="'/register'"
-            >立即注册</router-link
-          >
-        </div>
-      </el-form-item>
-    </el-form>
-  
-    <div class="el-login-footer">
-      <span>Copyright © 2018-2023 zkqy.vip All Rights Reserved.</span>
-    </div> -->
   </div>
 </template>
 
 <script>
-import { getCodeImg } from "@/api/login";
-import { changeDatasource } from "@/api/dataEngine";
+import {getCodeImg, isTenantExist} from "@/api/login";
+import {changeDatasource} from "@/api/dataEngine";
 import Cookies from "js-cookie";
-import { encrypt, decrypt } from "@/utils/jsencrypt";
-import { getLoginPageConfigurationInfo } from "@/api/system/configuration";
+import {encrypt, decrypt} from "@/utils/jsencrypt";
 
 export default {
   name: "Login",
   data() {
     return {
-      // 页面配置信息
-      config: {},
       codeUrl: "",
+      tenantId: "",
       loginForm: {
+        tenantCode: "", //租户编号
         username: "",
         password: "",
         // username: "admin",
@@ -185,15 +111,16 @@ export default {
         rememberMe: false,
         code: "",
         uuid: "",
+        tenantID: ""
       },
       loginRules: {
         username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" },
+          {required: true, trigger: "blur", message: "请输入您的账号"},
         ],
         password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" },
+          {required: true, trigger: "blur", message: "请输入您的密码"},
         ],
-        code: [{ required: true, trigger: "blur", message: "请输入验证码" }],
+        code: [{required: true, trigger: "blur", message: "请输入验证码"}],
       },
       loading: true,
       // 验证码开关
@@ -214,11 +141,51 @@ export default {
     },
   },
   created() {
-    this.getCode();
-    this.getCookie();
-    this.getConfig();
+    this.validateTenantId()
   },
   methods: {
+    handleBlur(event) {
+      if (event.target.value.toLowerCase() === 'admin') {
+        this.loginForm.username = '';
+        this.$message.warning("请使用当前租户下的账号登录!")
+      }
+      if (event.target.value.toLowerCase() === 'Admin') {
+        this.loginForm.username = '';
+        this.$message.warning("请使用当前租户下的账号登录!")
+      }
+    },
+    // 校验url
+    validateTenantId() {
+      let tenantCode = this.$route.query['tenantCode']
+      console.log("租户登录", tenantCode);
+      if (tenantCode != null) {
+        // 得到tenantId 查询裤中是否存在该租户
+        isTenantExist({tenantCode: tenantCode}).then(res => {
+          if (res.data?.tenantId) { // 判断当前编号是否存在库中
+            this.tenantId = res.data.tenantId;
+            this.loginForm.tenantID = this.tenantId;
+            // 得到租户的信息
+            this.config = res.data.loginPageConfiguration
+            this.setConfig();
+            // 如果当前租户没有配置登录页面则不可访问
+            if (this.config == null && this.config == undefined) {
+              // this.$router.push({path: "/404"})
+              this.getCode();
+              this.getCookie();
+            } else {
+              this.getCode();
+              this.getCookie();
+            }
+          } else {
+            // 当前访问链接中的租户编号不存在
+            this.$router.push({path: "/404"})
+          }
+        })
+      } else {
+        console.log('跳转')
+        this.$router.push({path: "/404"})
+      }
+    },
     setConfig() {
       let {
         loginPageTitle,
@@ -228,21 +195,27 @@ export default {
         windowTitle,
         windowLogo,
       } = this.config;
+
       // 设置背景图
       if (loginPageBackgroundImage) {
         let loginBgDom = document.getElementsByClassName("login");
         if (loginBgDom.length > 0) {
           loginBgDom[0].style.backgroundImage = `url(${
-            process.env.VUE_APP_BASE_API + loginPageBackgroundImage
+            process.env.VUE_APP_BASE_IMG_API + loginPageBackgroundImage
           })`;
+
+          console.log("" + `url(${
+            process.env.VUE_APP_BASE_IMG_API + loginPageBackgroundImage
+          })`)
         }
       }
+
       // 设置logo
       if (loginPageLogo) {
         let loginLogoDom = document.getElementsByClassName("comlogo");
         if (loginLogoDom.length > 0) {
           loginLogoDom[0].style.backgroundImage = `url(${
-            process.env.VUE_APP_BASE_API + loginPageLogo
+            process.env.VUE_APP_BASE_IMG_API + loginPageLogo
           })`;
         }
         window.sessionStorage.setItem("logo", loginPageLogo);
@@ -265,43 +238,8 @@ export default {
       if (loginPageDescription) {
         this.config.pageDescription = loginPageDescription;
       }
-      // 更换favicon.ico
-      // if (windowLogo) {
-      //   // let url = process.env.VUE_APP_BASE_API + windowLogo;
-      //   let url = "@/assets/images/favicon1.ico";
-      //   console.log(url);
-      //   var link = document.createElement("link"),
-      //     oldLink = document.getElementById("dynamic-favicon");
-      //   link.id = "dynamic-favicon";
-      //   link.rel = "shortcut icon";
-      //   link.href = url;
-      //   if (oldLink) {
-      //     document.head.removeChild(oldLink);
-      //   }
-      //   document.head.appendChild(link);
-      // }
-    },
-    // 获取登录页配置信息
-    async getConfig() {
-      let query = this.$route.query.tenantId;
-      try {
-        let res = await getLoginPageConfigurationInfo(query);
-        if (res.code === 200) {
-          if (res.data) {
-            this.config = res.data;
-            this.setConfig();
-          } else {
-            // this.$router.push("/404");
-            this.$message.error("获取页面信息失败,请检查url中的tenantId");
-          }
-        } else {
-          this.$message.error("获取页面信息失败,请检查tenantId");
-        }
-      } catch (error) {
-        this.$message.error("获取页面信息失败,请检查网络");
-      }
+
     },
-    forgetEvent() {},
     getCode() {
       getCodeImg().then((res) => {
         this.captchaEnabled =
@@ -323,12 +261,13 @@ export default {
         rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
       };
     },
+
     handleLogin() {
       this.$refs.loginForm.validate((valid) => {
         if (valid) {
           this.loading = true;
           if (this.loginForm.rememberMe) {
-            Cookies.set("username", this.loginForm.username, { expires: 30 });
+            Cookies.set("username", this.loginForm.username, {expires: 30});
             Cookies.set("password", encrypt(this.loginForm.password), {
               expires: 30,
             });
@@ -340,18 +279,20 @@ export default {
             Cookies.remove("password");
             Cookies.remove("rememberMe");
           }
-          this.$store
-            .dispatch("Login", this.loginForm)
-            .then(() => {
-              changeDatasource(); //切换数据源
-              this.$router.push({ path: this.redirect || "/" }).catch(() => {});
-            })
-            .catch(() => {
-              this.loading = false;
-              if (this.captchaEnabled) {
-                this.getCode();
-              }
+          let form = {
+            ...this.loginForm,
+            tenantID: this.tenantId
+          }
+          this.$store.dispatch("Login", form).then(() => {
+            // changeDatasource(); //切换数据源
+            this.$router.push({path: this.redirect || "/"}).catch(() => {
             });
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaEnabled) {
+              this.getCode();
+            }
+          });
         }
       });
     },
@@ -364,8 +305,10 @@ export default {
   height: 54px;
   line-height: 54px;
 }
+
 .login {
   position: relative;
+
   .page-description {
     position: absolute;
     left: 10%;
@@ -373,6 +316,7 @@ export default {
     transform: translateY(-100%);
     display: flex;
     flex-direction: column;
+
     .description {
       display: block;
       font-size: 38px;
@@ -387,6 +331,7 @@ export default {
       -webkit-line-clamp: 2;
       text-overflow: ellipsis;
     }
+
     .sub-description {
       font-size: 20px;
       color: #fff;
@@ -394,6 +339,7 @@ export default {
     }
   }
 }
+
 .logg {
   margin-top: 42px;
   margin-left: 196px;
@@ -404,9 +350,9 @@ export default {
   opacity: 1;
   border-radius: 27px;
   background: linear-gradient(
-    135deg,
-    rgba(79, 138, 255, 1) 0%,
-    rgba(75, 94, 255, 1) 100%
+      135deg,
+      rgba(79, 138, 255, 1) 0%,
+      rgba(75, 94, 255, 1) 100%
   );
   box-shadow: 0px 4px 16px rgba(179, 192, 231, 1);
   color: #fff;
@@ -414,6 +360,7 @@ export default {
   font-weight: 500;
   cursor: pointer;
 }
+
 .aaa {
   width: 248px;
   height: 24px;
@@ -426,22 +373,26 @@ export default {
   vertical-align: top;
   margin-top: 16px;
 }
+
 .bottomtext {
   margin-top: -5px !important;
   margin-left: 58px !important;
 }
+
 .rowww {
   width: 522px;
   height: 80px;
   margin-top: 25px;
   margin-left: 55px;
 }
+
 .roww {
   width: 522px;
   height: 80px;
   margin-top: 16px;
   margin-left: 55px;
 }
+
 .ppp {
   width: 522px;
   height: 24px;
@@ -455,6 +406,7 @@ export default {
   text-align: left;
   vertical-align: top;
 }
+
 .el-input__inner {
   width: 522px;
   /* height: 54px  !important; */
@@ -467,6 +419,7 @@ export default {
   border: 1px solid rgba(218, 224, 242, 1);
   margin-top: 2px;
 }
+
 .inputt input {
   width: 100%;
 }
@@ -482,6 +435,7 @@ export default {
   opacity: 1;
   background-size: cover;
 }
+
 .login {
   display: flex;
   justify-content: center;
@@ -526,6 +480,7 @@ export default {
   height: 54px;
   opacity: 1;
 }
+
 .el-col-18 {
   width: 66%;
 }

+ 51 - 63
zkqy-ui/src/views/system/tenant/index.vue

@@ -111,18 +111,17 @@
       lazy
       :load="load"
       :tree-props="{children: 'children', hasChildren:'hasChildren' }"
-      @cell-dblclick="copyText"
-    >
+      @cell-dblclick="copyText">
       <el-table-column label="租户ID" align="center" prop="tenantId"/>
-      <el-table-column label="租户名称" align="center" prop="tenantName"/>
       <el-table-column label="租户编号" align="center" prop="tenantCode"/>
-      <el-table-column label="负责人" align="center" prop="owner"/>
+      <el-table-column label="租户名称" align="center" prop="tenantName"/>
       <el-table-column label="联系方式" align="center" prop="contactInfo"/>
-      <el-table-column label="地址" align="center" prop="address"/>
-      <el-table-column label="租户父级ID" align="center" prop="tenantParentId"/>
+      <el-table-column label="租户地址" align="center" prop="address"/>
+      <el-table-column label="负责人" align="center" prop="owner"/>
+      <!--      <el-table-column label="租户父级ID" align="center" prop="tenantParentId"/>-->
       <el-table-column label="客户端访问地址" align="center" prop="tenantClientLoginUrl"/>
       <el-table-column label="工具端访问地址" align="center" prop="tenantToolLoginUrl"/>
-      <el-table-column label="租户等级" align="center" prop="tenantGrade"/>
+      <!--      <el-table-column label="租户等级" align="center" prop="tenantGrade"/>-->
       <el-table-column label="到期天数" align="center" prop="tenantExpirationTime"/>
       <el-table-column
         label="操作"
@@ -201,40 +200,49 @@
 
     <!-- 添加或修改租户信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="选择上级租户" prop="tenantParentId">
-          <el-cascader v-model="form.tenantParentId"
-                       :options="tenantAllList"
-                       :props="{ checkStrictly: true ,label:'tenantName',value:'tenantId' }" clearable
-                       filterable
-          ></el-cascader>
-        </el-form-item>
-        <el-form-item label="租户名称" prop="tenantName">
-          <el-input v-model="form.tenantName" placeholder="请输入租户名称"/>
-        </el-form-item>
-        <el-form-item label="租户编号" prop="tenantCode">
-          <el-input v-model="form.tenantCode" placeholder="请输入租户编号"/>
-        </el-form-item>
-        <el-form-item label="负责人" prop="owner">
-          <el-input v-model="form.owner" placeholder="请输入负责人"/>
-        </el-form-item>
-        <el-form-item label="联系方式" prop="contactInfo">
-          <el-input v-model="form.contactInfo" placeholder="请输入联系方式"/>
-        </el-form-item>
-        <el-form-item label="地址" prop="address">
-          <el-input v-model="form.address" placeholder="请输入地址"/>
-        </el-form-item>
+      <el-row :gutter="20">
+        <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+          <el-col :span="12">
+            <el-form-item label="上级租户" prop="tenantParentId">
+              <el-cascader v-model="form.tenantParentId"
+                           :options="tenantAllList"
+                           :props="{ checkStrictly: true ,label:'tenantName',value:'tenantId' }" clearable
+                           filterable
+                           style="width: 250px"
+              ></el-cascader>
+            </el-form-item>
 
-        <el-form-item label="客户端访问地址" prop="tenantClientLoginUrl">
-          <el-input v-model="form.tenantClientLoginUrl" placeholder="请输入地址"/>
-        </el-form-item>
-        <el-form-item label="工具端访问地址" prop="tenantToolLoginUrl">
-          <el-input v-model="form.tenantToolLoginUrl" placeholder="请输入地址"/>
-        </el-form-item>
-        <el-form-item label="租户等级" prop="tenantGrade">
-          <el-input v-model="form.tenantGrade" placeholder="请输入地址"/>
-        </el-form-item>
-      </el-form>
+            <el-form-item label="租户名称" prop="tenantName">
+              <el-input v-model="form.tenantName" placeholder="请输入租户名称"/>
+            </el-form-item>
+            <el-form-item label="租户编号" prop="tenantCode">
+              <el-input v-model="form.tenantCode" placeholder="请输入租户编号"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="租户地址" prop="address">
+              <el-input v-model="form.address" placeholder="请输入地址"/>
+            </el-form-item>
+            <el-form-item label="联系方式" prop="contactInfo">
+              <el-input v-model="form.contactInfo" placeholder="请输入联系方式"/>
+            </el-form-item>
+            <el-form-item label="负责人" prop="owner">
+              <el-input v-model="form.owner" placeholder="请输入负责人"/>
+            </el-form-item>
+          </el-col>
+
+
+          <!--        <el-form-item label="客户端访问地址" prop="tenantClientLoginUrl">-->
+          <!--          <el-input v-model="form.tenantClientLoginUrl" placeholder="请输入地址"/>-->
+          <!--        </el-form-item>-->
+          <!--        <el-form-item label="工具端访问地址" prop="tenantToolLoginUrl">-->
+          <!--          <el-input v-model="form.tenantToolLoginUrl" placeholder="请输入地址"/>-->
+          <!--        </el-form-item>-->
+          <!--        <el-form-item label="租户等级" prop="tenantGrade">-->
+          <!--          <el-input v-model="form.tenantGrade" placeholder="请输入地址"/>-->
+          <!--        </el-form-item>-->
+        </el-form>
+      </el-row>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
@@ -651,29 +659,7 @@ export default {
       },
       currentPage: '',
       // 已存在的数据库名称
-      databaseNameList: [],
-      tableData1: [{
-        id: 1,
-        date: '2016-05-02',
-        name: '王小虎',
-        address: '上海市普陀区金沙江路 1518 弄'
-      }, {
-        id: 2,
-        date: '2016-05-04',
-        name: '王小虎',
-        address: '上海市普陀区金沙江路 1517 弄'
-      }, {
-        id: 3,
-        date: '2016-05-01',
-        name: '王小虎',
-        address: '上海市普陀区金沙江路 1519 弄',
-        hasChildren: true
-      }, {
-        id: 4,
-        date: '2016-05-03',
-        name: '王小虎',
-        address: '上海市普陀区金沙江路 1516 弄'
-      }]
+      databaseNameList: []
     }
   },
   computed: {
@@ -991,6 +977,7 @@ export default {
     },
     /** 新增按钮操作 */
     handleAdd() {
+      // 获取所有租户信息¬
       this.getTenantAllList()
       this.reset();
       this.open = true
@@ -998,6 +985,7 @@ export default {
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
+      this.getTenantAllList()
       this.reset()
       const tenantId = row.tenantId || this.ids
       getTenant(tenantId).then((response) => {