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 extends GrantedAuthority> 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