Explorar o código

SSO用户管理功能

xyg %!s(int64=2) %!d(string=hai) anos
pai
achega
075a075d4a

+ 192 - 0
spring-cloud/commons/src/main/java/com/jd/entity/basic/SsoUser.java

@@ -0,0 +1,192 @@
+package com.jd.entity.basic;
+
+import java.util.Date;
+
+/**
+ * 统一身份认证用户
+ * @author Admin
+ */
+public class SsoUser {
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 业务系统ID
+     */
+    private Integer systemId;
+
+    /**
+     * 登录帐号
+     */
+    private String loginAccount;
+
+    /**
+     * 登录密码
+     */
+    private String loginPwd;
+
+    /**
+     * 用户状态(0:无效,1:有效)
+     */
+    private Integer userStatus;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 手机号
+     */
+    private String mobile;
+
+    /**
+     * 证件号
+     */
+    private String cardNo;
+
+    /**
+     * 证件类型
+     */
+    private String cardType;
+
+    /**
+     * 出生日期
+     */
+    private String birthday;
+
+    /**
+     * 通讯地址
+     */
+    private String address;
+
+    /**
+     * 最近一次登录时间
+     */
+    private Date lastLoginTime;
+
+    /**
+     * 最近一次更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 累计登录次数
+     */
+    private Integer loginNum;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Integer getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(Integer systemId) {
+        this.systemId = systemId;
+    }
+
+    public String getLoginAccount() {
+        return loginAccount;
+    }
+
+    public void setLoginAccount(String loginAccount) {
+        this.loginAccount = loginAccount;
+    }
+
+    public String getLoginPwd() {
+        return loginPwd;
+    }
+
+    public void setLoginPwd(String loginPwd) {
+        this.loginPwd = loginPwd;
+    }
+
+    public Integer getUserStatus() {
+        return userStatus;
+    }
+
+    public void setUserStatus(Integer userStatus) {
+        this.userStatus = userStatus;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(String birthday) {
+        this.birthday = birthday;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public Date getLastLoginTime() {
+        return lastLoginTime;
+    }
+
+    public void setLastLoginTime(Date lastLoginTime) {
+        this.lastLoginTime = lastLoginTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getLoginNum() {
+        return loginNum;
+    }
+
+    public void setLoginNum(Integer loginNum) {
+        this.loginNum = loginNum;
+    }
+}

+ 22 - 20
spring-cloud/server-basic/src/main/java/com/jd/controller/SsoSystemController.java

@@ -19,28 +19,30 @@ import io.swagger.annotations.ApiOperation;
 /**
  * SSO业务系统类
  * @author leihy
- *
  */
 @RestController
 @RequestMapping("ssoSystem")
 @Api(value = "SSO业务系统", tags = {"SSO业务系统"})
-public class SsoSystemController  {
-
-	@Autowired
-	private SsoSystemService ssoSystemService;
-
-	/**
-	 * 查询SSO业务系统列表
-	 * @return
-	 */
-	@GetMapping("/getSsoSystemList")
-	@ApiOperation(value = "查询SSO业务系统列表")
-	public Map<String, Object> getSsoSystemList(String userId) {
-		if (Blank.isEmpty(userId)) {
-			return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
-		}
-		Map<String, Object> map = new HashMap<>();
-		map.put("userId", userId);
-		return SendUtil.send(true, ConstString.RESULT_SUCCESS, ssoSystemService.getSsoSystemList(map));
-	}
+public class SsoSystemController {
+
+    private final SsoSystemService ssoSystemService;
+
+    public SsoSystemController(SsoSystemService ssoSystemService) {
+        this.ssoSystemService = ssoSystemService;
+    }
+
+    /**
+     * 查询SSO业务系统列表
+     * @return
+     */
+    @GetMapping("/getSsoSystemList")
+    @ApiOperation(value = "查询SSO业务系统列表")
+    public Map<String, Object> getSsoSystemList(String userId) {
+//        if (Blank.isEmpty(userId)) {
+//            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+//        }
+        Map<String, Object> map = new HashMap<>(4);
+        map.put("userId", userId);
+        return SendUtil.send(true, ConstString.RESULT_SUCCESS, ssoSystemService.getSsoSystemList(map));
+    }
 }

+ 92 - 1
spring-cloud/server-basic/src/main/java/com/jd/controller/SsoUserController.java

@@ -1,11 +1,14 @@
 package com.jd.controller;
 
 import com.jd.code.ConstString;
+import com.jd.entity.basic.SsoUser;
 import com.jd.service.SsoUserService;
 import com.jd.util.Blank;
 import com.jd.util.SendUtil;
 import io.swagger.annotations.Api;
+import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -30,17 +33,31 @@ public class SsoUserController {
         this.ssoUserService = ssoUserService;
     }
 
+    /**
+     * SSO用户登录
+     * @param loginAccount
+     * @param loginPwd
+     * @param clientId
+     * @param redirect
+     * @return
+     */
     @PostMapping("userLogin")
     @ApiOperation(value = "SSO用户登录")
     public Map<String, Object> ssoUserLogin(String loginAccount, String loginPwd, String clientId, String redirect) {
         if (Blank.isEmpty(loginAccount, loginPwd)) {
             return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
         }
-
         return ssoUserService.userLogin(loginAccount, loginPwd, clientId, redirect, oauth2Pwd);
     }
 
+    /**
+     * 根据登录帐号查询当前登录用户信息
+     * @param clientId
+     * @param loginAccount
+     * @return
+     */
     @PostMapping("getCurrentLoginInfo")
+    @ApiOperation(value = "根据登录帐号查询当前登录用户信息")
     public Map<String, Object> getCurrentLoginInfo(String clientId, String loginAccount) {
         if (Blank.isEmpty(clientId, loginAccount)) {
             return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
@@ -48,4 +65,78 @@ public class SsoUserController {
         return ssoUserService.getCurrentLoginInfo(clientId, loginAccount);
     }
 
+    /**
+     * 分页查询SSO用户列表
+     * @param page
+     * @param limit
+     * @return
+     */
+    @GetMapping("getSsoUserListByPage")
+    @ApiOperation(value = "分页查询SSO用户列表")
+    public Map<String, Object> getSsoUserListByPage(Integer page, Integer limit, String queryValue) {
+        if (Blank.isEmpty(page, limit)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        return ssoUserService.getSsoUserListByPage(page, limit, queryValue);
+    }
+
+    /**
+     * 新增SSO用户
+     * @param ssoUser
+     * @return
+     */
+    @PostMapping("insertSsoUser")
+    @ApiOperation(value = "新增SSO用户")
+    public Map<String, Object> insertSsoUser(SsoUser ssoUser) {
+        String[] params = new String[]{"systemId", "loginAccount", "loginPwd"};
+        if (!Blank.checkObjectParamNotNull(ssoUser, params)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        return ssoUserService.insertSsoUser(ssoUser);
+    }
+
+    /**
+     * 编辑SSO用户
+     * @param ssoUser
+     * @return
+     */
+    @PostMapping("updateSsoUser")
+    @ApiOperation(value = "编辑SSO用户")
+    public Map<String, Object> updateSsoUser(SsoUser ssoUser) {
+        String[] params = new String[]{"userId", "systemId", "loginAccount"};
+        if (!Blank.checkObjectParamNotNull(ssoUser, params)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        return ssoUserService.updateSsoUser(ssoUser);
+    }
+
+    /**
+     * 根据Id删除SSO用户
+     * @param userId
+     * @return
+     */
+    @PostMapping("deleteSsoUser")
+    @ApiOperation(value = "根据Id删除SSO用户")
+    public Map<String, Object> deleteSsoUser(Integer userId) {
+        if (Blank.isEmpty(userId)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        return ssoUserService.deleteSsoUser(userId);
+    }
+
+
+    /**
+     * 根据Id查询SSO用户详情
+     * @param userId
+     * @return
+     */
+    @GetMapping("getSsoUserInfo")
+    @ApiOperation(value = "根据Id查询SSO用户详情")
+    public Map<String, Object> getSsoUserInfo(Integer userId) {
+        if (Blank.isEmpty(userId)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        return ssoUserService.getSsoUserInfo(userId);
+    }
+
 }

+ 51 - 0
spring-cloud/server-basic/src/main/java/com/jd/mapper/SsoUserMapper.java

@@ -1,7 +1,9 @@
 package com.jd.mapper;
 
+import com.jd.entity.basic.SsoUser;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,4 +18,53 @@ public interface SsoUserMapper {
      * @return
      */
     Map<String, Object> getSsoUserInfoByAccount(@Param("loginAccount") String loginAccount, @Param("clientId") String clientId);
+
+    /**
+     * 查询SSO用户列表数量
+     * @param param
+     * @return
+     */
+    Integer getSsoUserListCount(Map<String, Object> param);
+
+    /**
+     * 分页查询SSO用户列表
+     * @param param
+     * @return
+     */
+    List<Map<String, Object>> getSsoUserListByPage(Map<String, Object> param);
+
+    /**
+     * 判断登录帐号是否已存在
+     * @param param 参数
+     * @return {@link Integer}
+     */
+    Integer getSsoUserCountByAccount(Map<String, Object> param);
+
+    /**
+     * 插入sso用户
+     * @param ssoUser 单点登录用户
+     * @return boolean
+     */
+    boolean insertSsoUser(SsoUser ssoUser);
+
+    /**
+     * 更新sso用户
+     * @param ssoUser 单点登录用户
+     * @return boolean
+     */
+    boolean updateSsoUser(SsoUser ssoUser);
+
+    /**
+     * 删除sso用户
+     * @param userId 用户id
+     * @return boolean
+     */
+    boolean deleteSsoUser(@Param("userId") Integer userId);
+
+    /**
+     * 获得sso用户信息
+     * @param userId 用户id
+     * @return {@link Map}<{@link String}, {@link Object}>
+     */
+    Map<String, Object> getSsoUserInfo(@Param("userId") Integer userId);
 }

+ 6 - 7
spring-cloud/server-basic/src/main/java/com/jd/service/SsoSystemService.java

@@ -6,14 +6,13 @@ import java.util.Map;
 /**
  * SSO业务系统接口类
  * @author leihy
- *
  */
 public interface SsoSystemService {
 
-	/**
-	 * 查询SSO业务系统列表
-	 * @param param
-	 * @return
-	 */
-	List<Map<String, Object>> getSsoSystemList(Map<String, Object> param);
+    /**
+     * 查询SSO业务系统列表
+     * @param param
+     * @return
+     */
+    List<Map<String, Object>> getSsoSystemList(Map<String, Object> param);
 }

+ 38 - 0
spring-cloud/server-basic/src/main/java/com/jd/service/SsoUserService.java

@@ -1,5 +1,7 @@
 package com.jd.service;
 
+import com.jd.entity.basic.SsoUser;
+
 import java.util.Map;
 
 /**
@@ -24,4 +26,40 @@ public interface SsoUserService {
      * @return
      */
     Map<String, Object> getCurrentLoginInfo(String clientId, String loginAccount);
+
+    /**
+     * 分页查询SSO用户列表
+     * @param page
+     * @param limit
+     * @return
+     */
+    Map<String, Object> getSsoUserListByPage(Integer page, Integer limit, String queryValue);
+
+    /**
+     * 插入sso用户
+     * @param ssoUser 单点登录用户
+     * @return {@link Map}<{@link String}, {@link Object}>
+     */
+    Map<String, Object> insertSsoUser(SsoUser ssoUser);
+
+    /**
+     * 更新sso用户
+     * @param ssoUser 单点登录用户
+     * @return {@link Map}<{@link String}, {@link Object}>
+     */
+    Map<String, Object> updateSsoUser(SsoUser ssoUser);
+
+    /**
+     * 删除sso用户
+     * @param userId 用户id
+     * @return {@link Map}<{@link String}, {@link Object}>
+     */
+    Map<String, Object> deleteSsoUser(Integer userId);
+
+    /**
+     * 获得sso用户信息
+     * @param userId 用户id
+     * @return {@link Map}<{@link String}, {@link Object}>
+     */
+    Map<String, Object> getSsoUserInfo(Integer userId);
 }

+ 7 - 8
spring-cloud/server-basic/src/main/java/com/jd/service/impl/SsoSystemServiceImpl.java

@@ -11,10 +11,9 @@ import com.jd.mapper.SsoSystemMapper;
 import com.jd.service.SsoSystemService;
 
 /**
-* SSO业务系统实现类
-*
-* @author leihy
-*/
+ * SSO业务系统实现类
+ * @author leihy
+ */
 @Service
 public class SsoSystemServiceImpl implements SsoSystemService {
 
@@ -22,10 +21,10 @@ public class SsoSystemServiceImpl implements SsoSystemService {
     private SsoSystemMapper ssoSystemMapper;
 
     /**
-	 * 查询SSO业务系统列表
-	 * @param param
-	 * @return
-	 */
+     * 查询SSO业务系统列表
+     * @param param
+     * @return
+     */
     @Override
     public List<Map<String, Object>> getSsoSystemList(Map<String, Object> param) {
         return ssoSystemMapper.getSsoSystemList(param);

+ 63 - 1
spring-cloud/server-basic/src/main/java/com/jd/service/impl/SsoUserServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.crypto.SecureUtil;
 import com.jd.client.AuthClient;
 import com.jd.code.ConstString;
+import com.jd.entity.basic.SsoUser;
 import com.jd.mapper.SsoSystemMapper;
 import com.jd.mapper.SsoUserMapper;
 import com.jd.service.SsoUserService;
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -75,6 +77,7 @@ public class SsoUserServiceImpl implements SsoUserService {
         result.put("token_type", tokenType);
         System.err.println("result::" + result);
         // 保存到Redis
+        redisTemplate.opsForValue().set(Convert.toStr(user.get("user_id")), result);
         redisTemplate.opsForValue().set(clientId + loginAccount, result);
         redisTemplate.opsForValue().set(tokenType + " " + accessToken, user.get("user_id"));
 
@@ -83,8 +86,67 @@ public class SsoUserServiceImpl implements SsoUserService {
 
     @Override
     public Map<String, Object> getCurrentLoginInfo(String clientId, String loginAccount) {
-
         Map<String, Object> map = Convert.convert(Map.class, redisTemplate.opsForValue().get(clientId + loginAccount));
         return SendUtil.send(true, ConstString.RESULT_SUCCESS, map);
     }
+
+    @Override
+    public Map<String, Object> getSsoUserListByPage(Integer page, Integer limit, String queryValue) {
+        Map<String, Object> param = new HashMap<>(8);
+        param.put("start", (page - 1) * limit);
+        param.put("limit", limit);
+        param.put("queryValue", queryValue);
+
+        Integer count = ssoUserMapper.getSsoUserListCount(param);
+        if (count < 1) {
+            return SendUtil.layuiTable(0, null);
+        } else {
+            List<Map<String, Object>> list = ssoUserMapper.getSsoUserListByPage(param);
+            return SendUtil.layuiTable(count, list);
+        }
+    }
+
+    @Override
+    public Map<String, Object> insertSsoUser(SsoUser ssoUser) {
+        //判断用户登录帐号是否已存在
+        Map<String, Object> param = new HashMap<>(8);
+        param.put("system_id", ssoUser.getSystemId());
+        param.put("login_account", ssoUser.getLoginAccount());
+        Integer count = ssoUserMapper.getSsoUserCountByAccount(param);
+        if (count > 0) {
+            return SendUtil.send(false, "登录帐号已存在");
+        }
+        // 密码加密
+        ssoUser.setLoginPwd(SecureUtil.md5(ssoUser.getLoginPwd()));
+        boolean flag = ssoUserMapper.insertSsoUser(ssoUser);
+        return SendUtil.send(flag);
+    }
+
+    @Override
+    public Map<String, Object> updateSsoUser(SsoUser ssoUser) {
+        // 是否更新密码
+        if (Blank.isNotEmpty(ssoUser.getLoginPwd())) {
+            // 密码加密
+            ssoUser.setLoginPwd(SecureUtil.md5(ssoUser.getLoginPwd()));
+        }
+        boolean flag = ssoUserMapper.updateSsoUser(ssoUser);
+        return SendUtil.send(flag);
+    }
+
+    @Override
+    public Map<String, Object> deleteSsoUser(Integer userId) {
+        // 判断是否删除当前登录用户
+        Map<String, Object> loginUser = Convert.toMap(String.class, Object.class, redisTemplate.opsForValue().get(Convert.toStr(userId)));
+        if (Blank.isNotEmpty(loginUser)) {
+            return SendUtil.send(false, "当前账号正在使用,不能删除");
+        }
+        boolean flag = ssoUserMapper.deleteSsoUser(userId);
+        return SendUtil.send(flag);
+    }
+
+    @Override
+    public Map<String, Object> getSsoUserInfo(Integer userId) {
+        Map<String, Object> map = ssoUserMapper.getSsoUserInfo(userId);
+        return SendUtil.send(true, ConstString.RESULT_SUCCESS, map);
+    }
 }

+ 11 - 3
spring-cloud/server-basic/src/main/resources/mapper/SsoSystemMapper.xml

@@ -4,11 +4,19 @@
 
     <!-- 查询SSO业务系统列表 -->
     <select id="getSsoSystemList" resultType="map" parameterType="map">
-        SELECT s.appid, s.`name`, s.title_img, s.redirect_url, us.login_account
+        SELECT
+            s.id,
+            s.appid,
+            s.`name`,
+            s.title_img,
+            s.redirect_url,
+            us.login_account
         FROM sso_system s,
-             sso_user_system us
+            sso_user_system us
         WHERE s.id = us.system_id
-          AND us.user_id = #{userId}
+        <if test="userId != null">
+            AND us.user_id = #{userId}
+        </if>
     </select>
 
     <select id="getSsoSystemByClient" resultType="java.util.Map">

+ 117 - 0
spring-cloud/server-basic/src/main/resources/mapper/SsoUserMapper.xml

@@ -1,6 +1,7 @@
 <?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" >
 <mapper namespace="com.jd.mapper.SsoUserMapper">
+    <!--根据登录帐号查询统一身份认证用户信息-->
     <select id="getSsoUserInfoByAccount" resultType="java.util.Map">
         SELECT su.*
         FROM sso_user su
@@ -8,4 +9,120 @@
         WHERE su.login_account = #{loginAccount}
         AND ss.appid = #{clientId}
     </select>
+
+    <!--查询SSO用户列表数量-->
+    <select id="getSsoUserListCount" resultType="java.lang.Integer">
+        SELECT COUNT(*)
+        FROM sso_user su
+        LEFT JOIN sso_system ss ON ss.id = su.system_id
+        <where>
+            <if test="queryValue != null and queryValue != ''">
+                AND su.login_account LIKE CONCAT('%', #{queryValue}, '%')
+            </if>
+        </where>
+    </select>
+
+    <!--分页查询SSO用户列表-->
+    <select id="getSsoUserListByPage" resultType="java.util.Map">
+        SELECT
+        su.user_id,
+        su.system_id,
+        su.login_account,
+        su.user_status,
+        su.create_time,
+        su.mobile,
+        su.card_no,
+        su.card_type,
+        su.birthday,
+        su.address,
+        su.last_login_time,
+        su.update_time,
+        su.login_num,
+        ss.name AS system_name
+        FROM sso_user su
+        LEFT JOIN sso_system ss ON ss.id = su.system_id
+        <where>
+            <if test="queryValue != null and queryValue != ''">
+                AND su.login_account LIKE CONCAT('%', #{queryValue}, '%')
+            </if>
+        </where>
+        LIMIT #{start}, #{limit}
+    </select>
+
+    <!--判断登录帐号是否已存在-->
+    <select id="getSsoUserCountByAccount" resultType="java.lang.Integer">
+        SELECT COUNT(*)
+        FROM sso_user
+        WHERE system_id = #{system_id}
+          AND login_account = #{login_account}
+          AND user_status = 1
+    </select>
+
+    <!--新增SSO用户-->
+    <insert id="insertSsoUser" useGeneratedKeys="true" keyProperty="userId">
+        INSERT INTO sso_user (
+            system_id,
+            login_account,
+            login_pwd,
+            create_time,
+            mobile,
+            card_no,
+            card_type,
+            birthday,
+            address
+        ) VALUES (
+            #{systemId},
+            #{loginAccount},
+            #{loginPwd},
+            NOW(),
+            #{mobile},
+            #{cardNo},
+            #{cardType},
+            #{birthday},
+            #{address}
+        )
+    </insert>
+
+    <!--编辑SSO用户-->
+    <update id="updateSsoUser">
+        UPDATE sso_user
+        <set>
+            <if test="loginPwd != null and loginPwd != ''">
+                login_pwd = #{loginPwd},
+            </if>
+            mobile = #{mobile},
+            card_no = #{cardNo},
+            card_type = #{cardType},
+            birthday = #{birthday},
+            address = #{address},
+            update_time = NOW()
+        </set>
+        WHERE user_id = #{userId}
+    </update>
+
+    <!--删除sso用户-->
+    <delete id="deleteSsoUser">
+        DELETE
+        FROM sso_user
+        WHERE user_id = #{userId}
+    </delete>
+
+    <!--根据Id查询SSO用户详情-->
+    <select id="getSsoUserInfo" resultType="java.util.Map">
+        SELECT user_id,
+               system_id,
+               login_account,
+               user_status,
+               create_time,
+               mobile,
+               card_no,
+               card_type,
+               birthday,
+               address,
+               last_login_time,
+               update_time,
+               login_num
+        FROM sso_user
+        WHERE user_id = #{userId} LIMIT 1
+    </select>
 </mapper>

+ 351 - 0
spring-cloud/server-page/src/main/resources/static/page/js/basic/ssoUser.js

@@ -0,0 +1,351 @@
+layui.config({
+    base: 'js/encryption/'
+}).use(['layer', 'form', 'jquery', 'table', 'ajax'], function () {
+    $ = layui.jquery;
+    ly = layui.ajax;
+    layer = layui.layer;
+    table = layui.table;
+    form = layui.form;
+
+    // 初始化下拉框
+    initSystemSelect();
+
+    // 主要表格
+    table.render({
+        elem: '#ssoUserTable',
+        url: PAGE_BASIC + '/ssoUser/getSsoUserListByPage',
+        toolbar: '#ssoUserTable_toolbar', //开启头部工具栏,并为其绑定左侧模板
+        page: true,
+        cols: [
+            [{
+                type: 'numbers',
+                title: '序号'
+            }, {
+                field: 'login_account',
+                title: '登录帐号',
+            }, {
+                field: 'system_name',
+                title: '业务系统',
+            }, {
+                field: 'create_time',
+                title: '创建时间',
+            }, {
+                fixed: 'right',
+                title: '操作',
+                toolbar: '#ssoUserTable_bar',
+                width: 150
+            }]
+        ]
+    });
+
+    //头工具栏事件(主要表格)
+    table.on('toolbar(ssoUserTable)', function (obj) {
+        switch (obj.event) {
+            case 'add': //新增
+                $(".main").addClass("layui-hide").removeClass("layui-show");
+                $(".add").addClass("layui-show").removeClass("layui-hide");
+                $('#ssoUserForm')[0].reset();
+                $(".add .header_title span").html("新增");
+                $('#submit').attr('submitType', 'insert');
+                $(".password .font-red").removeClass("layui-hide");
+                $('#loginAccount').attr('lay-verify', 'loginAccount');
+                $('#loginPwd').attr('lay-verify', 'loginPwd');
+                $('#rePassword').attr('lay-verify', 'rePassword');
+                break;
+        }
+    });
+
+    //监听行工具事件(主要表格)
+    table.on('tool(ssoUserTable)', function (obj) {
+        let data = obj.data;
+        if (obj.event === 'del') {
+            layer.confirm('确认删除', function (index) {
+                deleteUser(data.user_id)
+                layer.close(index);
+            });
+        } else if (obj.event === 'edit') {
+            // 页面初始化
+            $(".main").addClass("layui-hide").removeClass("layui-show");
+            $(".add").addClass("layui-show").removeClass("layui-hide");
+            $('#ssoUserForm')[0].reset();
+            $(".add .header_title span").html("编辑");
+            $('#submit').attr('submitType', 'update');
+            $('#loginAccount').css('pointer-events', 'none');
+            $(".password .font-red").addClass('layui-hide');
+            $('#loginPwd').attr('lay-verify', 'editPassword');
+            $('#rePassword').attr('lay-verify', 'editRePassword');
+
+            // 数据初始化
+            initUser(data.user_id);
+        }
+    });
+
+    form.verify({
+        loginAccount: function (value, item) {
+            if (!value.trim()) {
+                return '帐号不能为空!';
+            }
+            if (/\s/.test(value)) {
+                return "帐号中不能存在空格";
+            }
+            if (value.length < 5 || value.length > 20) {
+                return '帐号长度为5到20位';
+            }
+            if (!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)) {
+                return '帐号不能有特殊字符';
+            }
+        },
+        loginPwd: function (value, item) {
+            if (!value.trim()) {
+                return '密码不能为空!';
+            }
+            if (/\s/.test(value)) {
+                return "密码中不能存在空格";
+            }
+            if (value.length < 6 || value.length > 20) {
+                return '密码长度为6到20位';
+            }
+            if (!new RegExp("^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$)^.{6,20}$").test(value)) {
+                return '密码需包含数字、字母、特殊字符中至少两种';
+            }
+        },
+        rePassword: function (value, item) {
+            let pass = $('#loginPwd').val();
+            if (value != pass) {
+                return '两次输入的密码不一致';
+            }
+        },
+        systemId: function (value, item) {
+            if (!value.trim()) {
+                return '请选择业务系统'
+            }
+        },
+        editPassword: function (value, item) {
+            if (value.trim()) {
+                if (/\s/.test(value)) {
+                    return "密码中不能存在空格";
+                }
+                if (value.length < 6 || value.length > 20) {
+                    return '密码长度为6到20位';
+                }
+                if (!new RegExp("^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$)^.{6,20}$").test(value)) {
+                    return '密码需包含数字、字母、特殊字符中至少两种';
+                }
+            }
+        },
+        editRePassword: function (value, item) {
+            let pass = $('#loginPwd').val();
+            if (value.trim() && pass.trim() && value != pass) {
+                return '两次输入的密码不一致';
+            }
+        },
+        identity: function (value, item) {
+            if (value.trim()) {
+                if (!new RegExp(/(^\d{15}$)|(^\d{17}(x|X|\d)$)/).test(value)) {
+                    return '请输入正确的身份证号';
+                }
+            }
+        },
+        phone: function (value, item) {
+            if (value.trim()) {
+                if (!new RegExp(/^1[3-9]\d{9}$/).test(value)) {
+                    return '请输入正确的手机号';
+                }
+            }
+        }
+    });
+
+    // 监听提交按钮
+    form.on('submit(submit)', function (data) {
+        var submitType = data.elem.getAttribute("submitType");
+        // 新增
+        if (submitType == 'insert') {
+            addUser();
+            return false;
+        } else if (submitType == 'update') {
+            updateUser();
+            return false;
+        }
+    });
+
+    // 查询
+    $(".search_btn").click(function () {
+        let queryValue = $("#queryValue").val();
+        let params = {
+            "queryValue": queryValue
+        };
+        table.reload('ssoUserTable', {
+            where: params,
+            page: {
+                curr: 1 //重新从第 1 页开始
+            }
+        }); //只重载数据
+    });
+
+    //用户搜索回车事件
+    $('#queryUserName').bind('keypress', function (event) {
+        if (event.keyCode == "13") {
+            let queryValue = $("#queryValue").val();
+            let params = {
+                "queryValue": queryValue
+            };
+            table.reload('ssoUserTable', {
+                where: params,
+                page: {
+                    curr: 1 //重新从第 1 页开始
+                }
+            }); //只重载数据
+        }
+    });
+
+    // 返回
+    $(".back").click(function () {
+        $(".main").addClass("layui-show").removeClass("layui-hide");
+        $(".tree").addClass("layui-show").removeClass("layui-hide");
+        $(".add").addClass("layui-hide").removeClass("layui-show");
+    })
+
+})
+
+
+function addUser() {
+    let postData = form.val("ssoUserForm");
+    let index = layer.load(2);
+    ly.ajax({
+        type: 'POST',
+        url: PAGE_BASIC + '/ssoUser/insertSsoUser',
+        dataType: 'json',
+        data: postData,
+        success: function (json) {
+            layer.close(index);
+            if (json.result) {
+                layer.msg("新增成功");
+                $(".main").addClass("layui-show").removeClass("layui-hide");
+                $(".add").addClass("layui-hide").removeClass("layui-show");
+                reloadTable();
+            } else {
+                layer.msg("新增失败," + json.msg);
+            }
+        },
+        error: function (msg) {
+            layer.close(index);
+        }
+    });
+}
+
+function updateUser() {
+    let postData = form.val("ssoUserForm");
+    let index = layer.load(2);
+    ly.ajax({
+        type: 'POST',
+        url: PAGE_BASIC + '/ssoUser/updateSsoUser',
+        dataType: 'json',
+        data: postData,
+        success: function (json) {
+            layer.close(index);
+            if (json.result) {
+                layer.msg("编辑成功");
+                $(".main").addClass("layui-show").removeClass("layui-hide");
+                $(".add").addClass("layui-hide").removeClass("layui-show");
+                reloadTable();
+            } else {
+                layer.msg("修改失败");
+            }
+        },
+        error: function (msg) {
+            layer.close(index);
+        }
+    });
+}
+
+
+function initUser(userId) {
+    let index = layer.load(2);
+    ly.ajax({
+        type: 'GET',
+        url: PAGE_BASIC + '/ssoUser/getSsoUserInfo',
+        dataType: 'json',
+        data: {
+            "userId": userId,
+        },
+        success: function (json) {
+            layer.close(index);
+            if (json.result) {
+                // 页面数据初始化
+                $('#userId').empty().val(userId);
+                $('#loginAccount').val(json.data.login_account);
+                $('#systemId').val(json.data.system_id);
+                $('#mobile').val(json.data.mobile);
+                $('#cardType').val(json.data.card_type);
+                $('#cardNo').val(json.data.card_no);
+                $('#address').val(json.data.address);
+                form.render('select');
+            } else {
+                layer.msg("数据获取失败");
+            }
+        },
+        error: function (msg) {
+            layer.close(index);
+        }
+    });
+}
+
+/* 删除用户组 */
+function deleteUser(userId) {
+    let index = layer.load(2);
+    ly.ajax({
+        type: 'POST',
+        url: PAGE_BASIC + '/ssoUser/deleteSsoUser',
+        dataType: 'json',
+        data: {
+            "userId": userId
+        },
+        success: function (json) {
+            layer.close(index);
+            if (json.result) {
+                layer.msg("删除成功");
+                reloadTable();
+            } else {
+                layer.msg("删除失败," + json.msg);
+            }
+        },
+        error: function (msg) {
+            layer.close(index);
+        }
+    });
+}
+
+/* 表格重载 */
+function reloadTable() {
+    table.reload('ssoUserTable', {
+        page: {
+            curr: 1 //重新从第 1 页开始
+        }
+    }); //只重载数据
+}
+
+function initSystemSelect() {
+    let index = layer.load(2);
+    // 初始化用户组下拉框
+    ly.ajax({
+        type: 'GET',
+        url: PAGE_BASIC + '/ssoSystem/getSsoSystemList',
+        async: false,
+        dataType: 'json',
+        success: function (json) {
+            layer.close(index);
+            if (json.data) {
+                let str = '<option value="">' + '请选择业务系统' + '</option>';
+                let datas = json.data;
+                for (let i = 0; i < datas.length; i++) {
+                    str += '<option value="' + datas[i].id + '">' + datas[i].name + '</option>';
+                }
+                $('#systemId').empty().append(str);
+                form.render('select'); //刷新select选择框渲染
+            }
+        },
+        error: function (msg) {
+            layer.close(index);
+        }
+    });
+}

+ 122 - 0
spring-cloud/server-page/src/main/resources/static/page/ssoUserManagement.html

@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
+    <title>SSO用户管理</title>
+    <link rel="stylesheet" type="text/css" href="layui/css/layui.css"/>
+    <link rel="stylesheet" type="text/css" href="css/admin.css"/>
+    <link rel="stylesheet" type="text/css" href="css/common.css"/>
+    <link rel="stylesheet" type="text/css" href="css/animate.css"/>
+</head>
+
+<body>
+<!-- 主要内容 -->
+<div class="main fadeIn animated">
+    <div class="header_title"><span>SSO用户管理</span></div>
+    <div class="main_content">
+        <table class="layui-hide" id="ssoUserTable" lay-filter="ssoUserTable"></table>
+
+        <script type="text/html" id="ssoUserTable_toolbar">
+            {{# if (sessionStorage.getItem("menuid-" + sessionStorage.MENU_ID + "-add")  == 'add') { }}
+            <div class="layui-btn-container">
+                <button class="layui-btn layui-btn-sm main_head_btn" lay-event="add"><span class="iconfont">&#xe607;</span>新增</button>
+            </div>
+            {{# } }}
+        </script>
+
+        <script type="text/html" id="ssoUserTable_bar">
+            {{# if (sessionStorage.getItem("menuid-" + sessionStorage.MENU_ID + "-update") == 'update') { }}
+            <a class="main_tab_btn" lay-event="edit" style="color: #64ADF9;"><span class="iconfont">&#xe637;</span>编辑</a>
+            {{# } }}
+            {{# if (sessionStorage.getItem("menuid-" + sessionStorage.MENU_ID + "-delete") == 'delete') { }}
+            <a class="main_tab_btn" lay-event="del" style="color: #FC7D8C;"><span class="iconfont">&#xe78d;</span>删除</a>
+            {{# } }}
+        </script>
+
+        <div class="search_box">
+            <div class="layui-input-inline">
+                <input type="text" class="layui-input" id="queryValue" name="queryValue" autocomplete="off" placeholder="请输入登录帐号查询"/>
+            </div>
+            <button type="button" class="layui-btn layui-btn-sm search_btn">搜 索</button>
+        </div>
+    </div>
+</div>
+
+<!-- 新增 -->
+<div class="add layui-hide fadeIn animated">
+    <div class="header_title"><span>新增</span></div>
+    <div class="main_content">
+        <form class="layui-form" action="" id="ssoUserForm" lay-filter="ssoUserForm">
+            <input type="hidden" class="layui-hide" id="userId" name="userId" readonly=""/>
+            <div class="layui-form-item account">
+                <label class="layui-form-label"><span class="font-red">*</span>登录账号:</label>
+                <div class="layui-input-inline">
+                    <input type="text" class="layui-input" id="loginAccount" name="loginAccount" lay-verify="loginAccount" autocomplete="off" placeholder="请输入登录账号" maxlength="20">
+                </div>
+            </div>
+            <div class="layui-form-item password">
+                <label class="layui-form-label"><span class="font-red">*</span>登录密码:</label>
+                <div class="layui-input-inline">
+                    <input type="password" class="layui-input" id="loginPwd" name="loginPwd" lay-verify="loginPwd" autocomplete="new-password" placeholder="请输入登录密码" maxlength="20">
+                </div>
+            </div>
+            <div class="layui-form-item password">
+                <label class="layui-form-label"><span class="font-red">*</span>确认密码:</label>
+                <div class="layui-input-inline">
+                    <input type="password" class="layui-input" id="rePassword" name="rePassword" lay-verify="rePassword" autocomplete="off" placeholder="请再次输入登录密码" maxlength="20">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="font-red">*</span>业务系统:</label>
+                <div class="layui-input-inline">
+                    <select class="layui-select" id="systemId" name="systemId" lay-verify="systemId" lay-search="">
+                        <option value="">请选择业务系统</option>
+                    </select>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">手机号:</label>
+                <div class="layui-input-inline">
+                    <input type="text" class="layui-input" id="mobile" name="mobile" lay-verify="mobile" autocomplete="off" placeholder="请输入手机号" maxlength="11">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">证件类型:</label>
+                <div class="layui-input-inline">
+                    <select class="layui-select" id="cardType" name="cardType" lay-verify="cardType" lay-search="">
+                        <option value="">请选择证件类型</option>
+                        <option value="1">身份证</option>
+                    </select>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">证件号码:</label>
+                <div class="layui-input-inline">
+                    <input type="text" class="layui-input" id="cardNo" name="cardNo" lay-verify="identity" autocomplete="off" placeholder="请输入证件号码" maxlength="20">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">通讯地址:</label>
+                <div class="layui-input-inline">
+                    <input type="text" class="layui-input" id="address" name="address" lay-verify="address" autocomplete="off" placeholder="请输入通讯地址" maxlength="200">
+                </div>
+            </div>
+            <button type="submit" id="submit" class="layui-btn submit_btn" lay-submit="" lay-filter="submit" submitType="" style="margin-left: 50px;margin-top: 30px;">提交</button>
+            <button type="button" class="layui-btn layui-btn-primary back back_btn" style="margin-top: 30px;">返回</button>
+        </form>
+    </div>
+</div>
+
+<script src="layui/layui.js" type="text/javascript" charset="utf-8"></script>
+<script src="js/common.js" type="text/javascript" charset="utf-8"></script>
+<script src="js/constants.js" type="text/javascript" charset="utf-8"></script>
+<script src="js/js-util.js" type="text/javascript" charset="utf-8"></script>
+<script src="js/basic/ssoUser.js" type="text/javascript" charset="utf-8"></script>
+
+</body>
+
+</html>