diff --git a/egovframe-template-simple-react-contribution/src/api/egovFetch.js b/egovframe-template-simple-react-contribution/src/api/egovFetch.js
index 4d3e989..f634fb1 100644
--- a/egovframe-template-simple-react-contribution/src/api/egovFetch.js
+++ b/egovframe-template-simple-react-contribution/src/api/egovFetch.js
@@ -10,6 +10,16 @@ export function getQueryString(params){
return `?${Object.entries(params).map(e => e.join('=')).join('&') }`
}
+export function convParams(params){
+ let str = "?"
+ for(let key in params){
+ if(params[key]){
+ str = str+key+"="+params[key]+"&";
+ }
+ }
+ return str;
+}
+
export function requestFetch(url, requestOptions, handler, errorHandler) {
console.groupCollapsed("requestFetch");
console.log("requestFetch [URL] : ", SERVER_URL + url);
diff --git a/egovframe-template-simple-react-contribution/src/components/commonCode/CheckBox.jsx b/egovframe-template-simple-react-contribution/src/components/commonCode/CheckBox.jsx
index d3c09ee..1d00e02 100644
--- a/egovframe-template-simple-react-contribution/src/components/commonCode/CheckBox.jsx
+++ b/egovframe-template-simple-react-contribution/src/components/commonCode/CheckBox.jsx
@@ -2,7 +2,7 @@ import React, {useCallback, useEffect, useState} from "react";
import Form from "react-bootstrap/Form";
import * as EgovNet from "api/egovFetch";
-function CheckBox({name, grpCd}){
+function CheckBox({name, grpCd, selectedValue}){
const [checkBox, setCheckBox] = useState();
@@ -10,6 +10,15 @@ function CheckBox({name, grpCd}){
getCodeItemList()
}, []);
+ useEffect(() => {
+ if(selectedValue){
+ const itemCdAry = selectedValue.split(',');
+ itemCdAry.forEach(function(itemCd){
+ document.querySelector(`#chkBox_${itemCd}`).checked = true;
+ })
+ }
+ }, [selectedValue]);
+
function getCodeItemList() {
EgovNet.requestFetch(
'/commonCode/code-item?grpCd='+grpCd,
@@ -25,8 +34,7 @@ function CheckBox({name, grpCd}){
id={`chkBox_${item.itemCd}`}
key={`chkBox_${item.itemCd}_${index}`}
name={name}
- defaultValue={item.itemCd}
- onChange={()=>{}}
+ value={item.itemCd}
/>
);
});
diff --git a/egovframe-template-simple-react-contribution/src/components/commonCode/SelectOption.jsx b/egovframe-template-simple-react-contribution/src/components/commonCode/SelectOption.jsx
index 4d07230..eb37263 100644
--- a/egovframe-template-simple-react-contribution/src/components/commonCode/SelectOption.jsx
+++ b/egovframe-template-simple-react-contribution/src/components/commonCode/SelectOption.jsx
@@ -5,10 +5,14 @@ import * as EgovNet from "api/egovFetch";
function SelectOption({name, grpCd, selectedValue}){
const [options, setOptions] = useState();
+ const [value, setValue] = useState(selectedValue)
useEffect(() => {
getCodeItemList()
}, []);
+ useEffect(() => {
+ setValue(selectedValue)
+ }, [selectedValue]);
function getCodeItemList(){
EgovNet.requestFetch(
@@ -33,7 +37,7 @@ function SelectOption({name, grpCd, selectedValue}){
}
return (
-
{}}>
+ {setValue(e.target.value)}}>
{options}
)
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 9dfa66b..bb23dc2 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,27 +1,27 @@
-import React, {useCallback, useEffect, useRef, useState} from 'react';
-import {Link, useLocation} from "react-router-dom";
+import React, {useCallback, useEffect, useState} from 'react';
+import {Link} from "react-router-dom";
import URL from "constants/url";
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
import EgovPaging from "components/EgovPaging";
import * as EgovNet from "api/egovFetch";
-import {itemIdxByPage} from "utils/calc";
import Modal from "react-bootstrap/Modal";
import UserInfoModal from "./UserInfoModal";
import CODE from "../../../constants/code";
-function List(props) {
+function List({}) {
- const location = useLocation();
+ const [searchCondition, setSearchCondition] = useState({
+ pageIndex: 1,
+ userSe: '',
+ searchCondition: 'id',
+ searchKeyword: ''
+ });
- const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { pageIndex: 1, searchCnd: '0', searchWrd: '' });// 기존 조회에서 접근 했을 시 || 신규로 접근 했을 시
const [listTag, setListTag] = useState([]);
const [paginationInfo, setPaginationInfo] = useState({});
- const cndRef = useRef();
- const wrdRef = useRef();
-
const [show, setShow] = useState(false);
const [modalBody, setModalBody] = useState();
@@ -29,7 +29,7 @@ function List(props) {
const handleShow = () => setShow(true);
const retrieveList = useCallback((searchCondition) => {
- const params = "?";
+ const params = EgovNet.convParams(searchCondition);
EgovNet.requestFetch(
'/admin/users/list'+params,
{
@@ -37,19 +37,11 @@ function List(props) {
},
(resp) => {
setPaginationInfo(resp.result.paginationInfo);
-
let mutListTag = [];
- const resultCnt = parseInt(resp.result.contentCnt);
- const currentPageNo = resp.result.paginationInfo.pageIndex;
- const pageSize = resp.result.paginationInfo.rowCnt;
-
setListTag([]);
// 리스트 항목 구성
resp.result.userList.forEach(function (item, index) {
-
- const listIdx = itemIdxByPage(resultCnt , currentPageNo, pageSize, index);
-
mutListTag.push(
{item.userSe}
@@ -75,12 +67,20 @@ function List(props) {
retrieveList(searchCondition);
}, []);
+ useEffect(() => {
+ retrieveList(searchCondition);
+ }, [searchCondition.pageIndex]);
+
+ const movePage = useCallback((passedPage) => {
+ setSearchCondition({...searchCondition, pageIndex: passedPage})
+ });
+
function userInfoModal(userSeq){
handleShow()
- setModalBody(
)
+ setModalBody(
)
}
- function removeUserInfo(seq){
+ const removeUserInfo = useCallback((seq)=>{
if(window.confirm("삭제하시겠습니까?\n복구할 수 없습니다.")){
EgovNet.requestFetch(
'/admin/users/info',
@@ -94,13 +94,14 @@ function List(props) {
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("삭제되었습니다.")
+ retrieveList(searchCondition)
}else{
alert("삭제를 실패하였습니다.")
}
}
)
}
- }
+ });
return (
@@ -128,18 +129,19 @@ function List(props) {
@@ -179,15 +175,7 @@ function List(props) {
- {
- retrieveList({
- ...searchCondition,
- pageIndex: passedPage,
- searchCnd: cndRef.current.value,
- searchWrd: wrdRef.current.value
- })
- }} />
+ {movePage(passedPage)}} />
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/users/UserInfoModal.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/users/UserInfoModal.jsx
index 95b1f72..c1e661a 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/users/UserInfoModal.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/users/UserInfoModal.jsx
@@ -9,7 +9,7 @@ import SelectOption from "components/commonCode/SelectOption";
import CheckBox from "components/commonCode/CheckBox";
import CODE from "../../../constants/code";
-function UserInfoModal({userSeq}){
+function UserInfoModal({userSeq, reloadFunction}){
const [userInfo, setUserInfo] = useState({ userSeq: '', userId: '', password: '', passwordChk: '', userNm: '', email: '', phoneNum: '', userSe:'', userRole:'', status:''});
@@ -78,6 +78,7 @@ function UserInfoModal({userSeq}){
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("저장되었습니다.")
+ reloadFunction();
}else if(Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)){
console.log("토큰 갱신중.")
}else{
@@ -91,19 +92,6 @@ function UserInfoModal({userSeq}){
getModalContent();
}, []);
- useEffect(()=>{
- const checkBoxDiv = document.querySelector("#ROLE_checkBoxDiv")
- const userRole = userInfo.userRole;
- if(userRole){
- checkBoxDiv.childNodes.forEach(function (div){
- const input = div.children[0];
- if(userRole.includes(input.value)){
- input.checked = true;
- }
- })
- }
- }, [userInfo]);
-
return (
<>
@@ -175,7 +163,7 @@ function UserInfoModal({userSeq}){
사용자 권한
-
+
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 dc69c89..dbf5abc 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
@@ -85,37 +85,35 @@ public class AdminUsersController extends BaseController {
@RequestMapping(method = RequestMethod.PUT, value = "/info")
public ResultVO modifyUserInfo(@RequestBody @Valid UserInfo info, Errors errors, @AuthenticationPrincipal LoginVO user) throws Exception{
ResultVO resultVO = new ResultVO();
- Map resultMap = new HashMap<>();
if(errors.hasErrors()){
StringBuilder msg = new StringBuilder();
for(FieldError error: errors.getFieldErrors()){
msg.append(error.getDefaultMessage());
msg.append("\n");
}
- resultMap.put("resultCode", ResponseCode.INPUT_CHECK_ERROR.getCode());
- resultMap.put("resultMessage", msg.toString());
+ resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode());
+ resultVO.setResultMessage(msg.toString());
}else if(!info.getPassword().equals(info.getPasswordChk())){
- resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
- resultMap.put("resultMessage", "비밀번호 확인이 잘못 입력되었습니다.");
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("비밀번호 확인이 잘못 입력되었습니다.");
}else {
Integer insertResult = adminUsersService.updateUserInfo(info, user.getId());
if(insertResult!=null){
if(insertResult==-1){
- resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
- resultMap.put("resultMessage", "수정 대상이 존재하지 않습니다.");
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("수정 대상이 존재하지 않습니다.");
}else if(insertResult==-2){
- resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
- resultMap.put("resultMessage", "가입된 이메일입니다.");
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("가입된 이메일입니다.");
}else{
- resultMap.put("resultCode", ResponseCode.SUCCESS.getCode());
- resultMap.put("resultMessage", "저장 되었습니다.");
+ resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
+ resultVO.setResultMessage("저장 되었습니다.");
}
}else{
- resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
- resultMap.put("resultMessage", "저장에 실패하였습니다.");
+ resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode());
+ resultVO.setResultMessage("저장에 실패하였습니다.");
}
}
- resultVO.setResult(resultMap);
return resultVO;
}
@@ -129,7 +127,7 @@ public class AdminUsersController extends BaseController {
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@RequestMapping(method = RequestMethod.DELETE, value = "/info", consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResultVO deleteUserInfo(UserInfo info) throws Exception{
+ public ResultVO deleteUserInfo(@RequestBody UserInfo info) throws Exception{
ResultVO resultVO = new ResultVO();
adminUsersService.deleteUserInfo(info.getUserSeq());
resultVO.setResultCode(ResponseCode.SUCCESS.getCode());
diff --git a/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml b/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml
index b6c4ac2..60cc896 100644
--- a/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml
+++ b/kcsc-back-end/src/main/resources/mybatisMapper/AdminUsersMapper.xml
@@ -31,17 +31,19 @@
and user_se = #{userSe}
-
- and user_id like '%'||#{searchKeyword}||'%'
-
-
- and user_nm like '%'||#{searchKeyword}||'%'
-
-
- and email like '%'||#{searchKeyword}||'%'
-
-
- and phone_num like '%'||#{searchKeyword}||'%'
+
+
+ and user_id like '%'||#{searchKeyword}||'%'
+
+
+ and user_nm like '%'||#{searchKeyword}||'%'
+
+
+ and email like '%'||#{searchKeyword}||'%'
+
+
+ and phone_num like '%'||#{searchKeyword}||'%'
+