From 4d4cb604132abd6506991c0e59b997a768847588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Fri, 5 Jan 2024 17:31:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=EC=A4=91.=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/EgovPaging.jsx | 64 +++++++++++++---- .../src/pages/admin/users/List.jsx | 71 ++++++++++--------- .../admin/users/AdminUsersController.java | 31 ++++++++ .../admin/users/mapper/AdminUsersMapper.java | 6 ++ .../users/service/AdminUsersService.java | 16 +++++ .../kcscbackend/auth/entity/UserInfo.java | 13 +++- .../config/common/BoardParams.java | 56 +++++++++++++++ .../mybatisMapper/AdminUsersMapper.xml | 40 +++++++++++ 8 files changed, 251 insertions(+), 46 deletions(-) create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/common/BoardParams.java diff --git a/egovframe-template-simple-react-contribution/src/components/EgovPaging.jsx b/egovframe-template-simple-react-contribution/src/components/EgovPaging.jsx index 0352bd0..57c564b 100644 --- a/egovframe-template-simple-react-contribution/src/components/EgovPaging.jsx +++ b/egovframe-template-simple-react-contribution/src/components/EgovPaging.jsx @@ -1,18 +1,55 @@ import React from 'react'; -function EgovPaging(props) { +function EgovPaging({pagination, moveToPage}) { console.groupCollapsed("EgovPaging"); - console.log("EgovPaging [props] : ", props); + console.log("EgovPaging [pagination] : ", pagination); let paginationTag = []; - if (props.pagination === undefined) { + if (pagination === undefined) { paginationTag = "-"; } else { - const currentPageNo = props.pagination.currentPageNo; - const pageSize = props.pagination.pageSize; - const totalRecordCount = props.pagination.totalRecordCount; - const recordCountPerPage = props.pagination.recordCountPerPage; + if(pagination.startNum>1){ + // 첫 페이지 이동 + paginationTag.push(
  • + +
  • ); + + // 이전 페이지 이동 + const prevPageIndex = pagination.pageIndex-10 < 0?1:(pagination.pageIndex-10) + paginationTag.push(
  • + +
  • ); + } + for (let i = pagination.startNum; i <= pagination.endNum; i++) { + if (i === pagination.pageIndex) { + // 현재 페이지 + paginationTag.push(
  • + +
  • ); + } else { + // 다른 페이지 + paginationTag.push(
  • + +
  • ); + } + } + if(pagination.endNum!=pagination.maxNum){ + // 다음 페이지 이동 + const nextPageIndex = pagination.pageIndex+10 < pagination.maxNum?pagination.maxNum:(pagination.pageIndex-10) + paginationTag.push(
  • + +
  • ); + + // 마지막 페이지 이동 + paginationTag.push(
  • + +
  • ); + } + /*const currentPageNo = pagination.currentPageNo; + const pageSize = pagination.pageSize; + const totalRecordCount = pagination.contentCnt; + const recordCountPerPage = pagination.rowCnt; const totalPageCount = Math.ceil(totalRecordCount / recordCountPerPage); const currentFirstPage = Math.floor((currentPageNo - 1) / pageSize) * pageSize + 1; @@ -22,13 +59,13 @@ function EgovPaging(props) { if (totalPageCount > pageSize) { // 첫 페이지 이동 const firstPageTag =
  • -
  • ; + ; paginationTag.push(firstPageTag); // 이전 페이지 이동 const prevPageIndex = (currentPageNo - 1 > 0) ? currentPageNo - 1 : 1; const previousPageTag =
  • -
  • ; + ; paginationTag.push(previousPageTag); } @@ -42,25 +79,26 @@ function EgovPaging(props) { } else { // 다른 페이지 const otherPage =
  • - +
  • ; console.log("@@@ otherpage : " + otherPage); paginationTag.push(otherPage); } } + if (totalPageCount > pageSize) { // 다음 페이지 이동 const nextPageIndex = (currentLastPage + 1 < totalPageCount) ? currentLastPage + 1 : totalPageCount; const nextPageTag =
  • - +
  • ; paginationTag.push(nextPageTag); // 마지막 페이지 이동 const lastPageTag =
  • -
  • ; + ; paginationTag.push(lastPageTag); - } + }*/ } console.log("paginationTag", paginationTag); console.groupEnd("EgovPaging"); diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/users/List.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/users/List.jsx index e35cae0..33b1ceb 100644 --- a/egovframe-template-simple-react-contribution/src/pages/admin/users/List.jsx +++ b/egovframe-template-simple-react-contribution/src/pages/admin/users/List.jsx @@ -1,15 +1,12 @@ import React, {useCallback, useEffect, useRef, useState} from 'react'; import {Link, useLocation} from "react-router-dom"; -import URL from "../../../constants/url"; -import Row from "react-bootstrap/Row"; -import Col from "react-bootstrap/Col"; +import URL from "constants/url"; import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin'; -import CODE from "../../../constants/code"; -import EgovPaging from "../../../components/EgovPaging"; -import * as EgovNet from "../../../api/egovFetch"; -import {itemIdxByPage} from "../../../utils/calc"; -import {NOTICE_BBS_ID} from "../../../config"; +import EgovPaging from "components/EgovPaging"; +import * as EgovNet from "api/egovFetch"; +import {itemIdxByPage} from "utils/calc"; +import Button from "react-bootstrap/Button"; function List(props) { @@ -24,33 +21,39 @@ function List(props) { const wrdRef = useRef(); const retrieveList = useCallback((searchCondition) => { - /* + const params = "?"; EgovNet.requestFetch( - '/cop/bbs/selectBoardListAPI.do', + '/admin/users/list'+params, { - method: "POST", - headers: { - 'Content-type': 'application/json', - }, - body: JSON.stringify(searchCondition) + method: "GET" }, (resp) => { - setPaginationInfo(resp.result.paginationInfo); let mutListTag = []; - const resultCnt = parseInt(resp.result.resultCnt); - const currentPageNo = resp.result.paginationInfo.currentPageNo; - const pageSize = resp.result.paginationInfo.pageSize; + const resultCnt = parseInt(resp.result.contentCnt); + const currentPageNo = resp.result.paginationInfo.pageIndex; + const pageSize = resp.result.paginationInfo.rowCnt; + setListTag([]); // 리스트 항목 구성 - resp.result.resultList.forEach(function (item, index) { - if (index === 0) mutListTag = []; // 목록 초기화 + resp.result.userList.forEach(function (item, index) { + const listIdx = itemIdxByPage(resultCnt , currentPageNo, pageSize, index); mutListTag.push( - + {item.userSe} + {item.userId} + {item.userNm} + {item.email} + {item.phoneNum} + {item.useYn} + + + ); + /*{item.frstRegisterNm}
    {item.frstRegisterPnttm}
    {item.inqireCo}
    - - ); + */ }); if(!mutListTag.length) mutListTag.push(

    검색된 결과가 없습니다.

    ); // 게시판 목록 초기값 setListTag(mutListTag); @@ -78,7 +80,6 @@ function List(props) { console.log("err response : ", resp); } ); - */ },[]); useEffect(() => { @@ -123,10 +124,10 @@ function List(props) { @@ -167,9 +168,15 @@ function List(props) {
    - { - retrieveList({ ...searchCondition, pageIndex: passedPage, searchCnd: cndRef.current.value, searchWrd: wrdRef.current.value }) - }} /> + { + retrieveList({ + ...searchCondition, + pageIndex: passedPage, + searchCnd: cndRef.current.value, + searchWrd: wrdRef.current.value + }) + }} />
    diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/AdminUsersController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/AdminUsersController.java index 9d18976..c59940c 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/AdminUsersController.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/AdminUsersController.java @@ -2,12 +2,21 @@ package com.dbnt.kcscbackend.admin.users; import com.dbnt.kcscbackend.admin.users.service.AdminUsersService; +import com.dbnt.kcscbackend.auth.entity.UserInfo; import com.dbnt.kcscbackend.config.common.BaseController; +import com.dbnt.kcscbackend.config.common.ResultVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; +import java.util.Map; + @RestController @RequiredArgsConstructor @RequestMapping("/admin/users") @@ -16,4 +25,26 @@ public class AdminUsersController extends BaseController { private final AdminUsersService adminUsersService; + @Operation( + summary = "사용자 목록 조회", + description = "사용자 목록 조회", + tags = {"AdminUsersController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.GET, value = "/list") + public ResultVO getUserList(UserInfo params) throws Exception{ + ResultVO resultVO = new ResultVO(); + Map resultMap = new HashMap<>(); + params.setQueryInfo(); + resultMap.put("userList", adminUsersService.selectUserList(params)); + params.setContentCnt(adminUsersService.selectUserListCnt(params)); + params.setPaginationInfo(); + resultMap.put("paginationInfo", params); + resultVO.setResult(resultMap); + return resultVO; + } + } diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/mapper/AdminUsersMapper.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/mapper/AdminUsersMapper.java index da54d96..df875ec 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/mapper/AdminUsersMapper.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/mapper/AdminUsersMapper.java @@ -1,8 +1,11 @@ package com.dbnt.kcscbackend.admin.users.mapper; import com.dbnt.kcscbackend.auth.entity.LoginVO; +import com.dbnt.kcscbackend.auth.entity.UserInfo; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 일반 로그인을 처리하는 비즈니스 구현 클래스 * @author 공통서비스 개발팀 박지욱 @@ -23,4 +26,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface AdminUsersMapper { + List selectUserList(UserInfo params); + + Integer selectUserListCnt(UserInfo params); } diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/service/AdminUsersService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/service/AdminUsersService.java index 9cb9b69..43ef4f9 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/service/AdminUsersService.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/users/service/AdminUsersService.java @@ -1,9 +1,25 @@ package com.dbnt.kcscbackend.admin.users.service; +import com.dbnt.kcscbackend.admin.users.mapper.AdminUsersMapper; +import com.dbnt.kcscbackend.auth.entity.UserInfo; +import com.dbnt.kcscbackend.auth.repository.UserInfoRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor public class AdminUsersService { + + private final UserInfoRepository userInfoRepository; + private final AdminUsersMapper usersMapper; + + public List selectUserList(UserInfo params) { + return usersMapper.selectUserList(params); + } + + public Integer selectUserListCnt(UserInfo params) { + return usersMapper.selectUserListCnt(params); + } } diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/UserInfo.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/UserInfo.java index 7e8614f..e7711f1 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/UserInfo.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/UserInfo.java @@ -1,5 +1,7 @@ package com.dbnt.kcscbackend.auth.entity; +import com.dbnt.kcscbackend.config.common.BoardParams; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -21,7 +23,7 @@ import java.util.Set; @DynamicInsert @DynamicUpdate @Table(name = "user_info") -public class UserInfo implements UserDetails{ +public class UserInfo extends BoardParams implements UserDetails{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_seq") @@ -34,8 +36,17 @@ public class UserInfo implements UserDetails{ private String email; @Column(name = "user_se") private String userSe; + @Column(name = "user_nm") + private String userNm; + @Column(name = "phone_num") + private String phoneNum; + @Column(name = "user_role") + private String userRole; + @Column(name = "use_yn") + private String useYn; @Override + @JsonIgnore public Collection getAuthorities() { Set roles = new HashSet<>(); for (String role : userSe.split(",")) { diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/common/BoardParams.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/common/BoardParams.java new file mode 100644 index 0000000..ecaef87 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/common/BoardParams.java @@ -0,0 +1,56 @@ +package com.dbnt.kcscbackend.config.common; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.Transient; +import java.io.Serializable; + +@Getter +@Setter +public class BoardParams implements Serializable { + @Transient + private String searchCondition; + @Transient + private String searchKeyword; + @Transient + private Integer pageIndex=1; //요청페이지 + @Transient + private Integer firstIndex=0; // 쿼리의 시작 row + @Transient + private Integer rowCnt=10; //한 페이지에 표현되는 row 수 + @Transient + private Integer startNum=1; // pagination 시작값 + @Transient + private Integer endNum=5; // pagination 마지막값 + @Transient + private Integer maxNum; // pagination 최대값 + @Transient + private Integer contentCnt=0; + + public void setQueryInfo(){ + setFirstIndex((getPageIndex()-1)*getRowCnt()); + } + public void setPaginationInfo(){ + int contentCnt = getContentCnt(); + int rowCnt = getRowCnt(); + int maxNum = (int)Math.ceil(((double)contentCnt)/rowCnt); + if (maxNum==0){ + maxNum = 1; + } + setMaxNum(maxNum); + + int pageIndex = getPageIndex(); + int startNum = pageIndex - 4; + if(startNum <= 0){ + startNum = 1; + } + setStartNum(startNum); + + int endNum = startNum + 9; + if(endNum>maxNum){ + endNum = maxNum; + } + setEndNum(endNum); + } +} diff --git a/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml b/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml index d3e40c7..42d1aac 100644 --- a/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml +++ b/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml @@ -3,4 +3,44 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + and user_se = #{userSe} + + + and user_id like '%'||#{searchKeyword}||'%' + + + and user_nm like '%'||#{searchKeyword}||'%' + + + and email like '%'||#{searchKeyword}||'%' + + + and phone_num like '%'||#{searchKeyword}||'%' + + + \ No newline at end of file