diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/board/EgovAdminBoardEdit.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/board/EgovAdminBoardEdit.jsx
index 6551f96..4e6d3fc 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/board/EgovAdminBoardEdit.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/board/EgovAdminBoardEdit.jsx
@@ -1,11 +1,12 @@
-import React, { useState, useEffect, useRef } from 'react';
-import { Link, useNavigate, useLocation } from 'react-router-dom';
+import React, {useState, useEffect, useRef} from 'react';
+import {Link, useNavigate, useLocation, useParams} from 'react-router-dom';
+import Modal from "react-bootstrap/Modal";
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
import CODE from 'constants/code';
-import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
+import {default as EgovLeftNav} from 'components/leftmenu/EgovLeftNavAdmin';
import EgovRadioButtonGroup from 'components/EgovRadioButtonGroup';
@@ -16,64 +17,44 @@ function EgovAdminBoardEdit(props) {
const navigate = useNavigate();
const location = useLocation();
- const checkRef = useRef([]);
-
+ const checkRef = useRef([]);
+
console.log("EgovAdminBoardEdit [location] : ", location);
- const replyPosblAtRadioGroup = [{ value: "Y", label: "가능" }, { value: "N", label: "불가능" }];
- const fileAtchPosblAtRadioGroup = [{ value: "Y", label: "가능" }, { value: "N", label: "불가능" }];
- const bbsTyCodeOptions = [{ value: "", label: "선택" }, { value: "BBST01", label: "일반게시판" }, { value: "BBST03", label: "공지게시판" }];
- const bbsAttrbCodeOptions = [{ value: "", label: "선택" }, { value: "BBSA02", label: "갤러리" }, { value: "BBSA03", label: "일반게시판" }];
- const posblAtchFileNumberOptions = [{ value: 0, label: "선택하세요" }, { value: 1, label: "1개" }, { value: 2, label: "2개" }, { value: 3, label: "3개" }];
- const bbsId = location.state?.bbsId || "";
+ const replyPosblAtRadioGroup = [{value: "Y", label: "가능"}, {value: "N", label: "불가능"}];
+ const fileAtchPosblAtRadioGroup = [{value: "Y", label: "가능"}, {value: "N", label: "불가능"}];
+ const bbsTyCodeOptions = [{value: "", label: "선택"}, {value: "BBST01", label: "일반게시판"}, {value: "BBST03", label: "공지게시판"}];
+ const bbsAttrbCodeOptions = [{value: "", label: "선택"}, {value: "BBSA02", label: "갤러리"}, {value: "BBSA03", label: "일반게시판"}];
+ const posblAtchFileNumberOptions = [{value: 0, label: "선택하세요"}, {value: 1, label: "1개"}, {value: 2, label: "2개"}, {value: 3, label: "3개"}];
- const [modeInfo, setModeInfo] = useState({ mode: props.mode });
+ let item = null;
+ item = props.props;
+ console.log("@@@ item : " + JSON.stringify(item));
+
+
+
+ const [modeInfo, setModeInfo] = useState(item != null ? {mode: props.props.mode} : {mode: CODE.MODE_CREATE});
const [boardDetail, setBoardDetail] = useState({});
+ console.log("@@@ mode : " + modeInfo.mode);
const initMode = () => {
- switch (props.mode) {
- case CODE.MODE_CREATE:
- setModeInfo({
- ...modeInfo,
- modeTitle: "등록",
- editURL: '/cop/bbs/insertBBSMasterInfAPI.do'
- });
- break;
-
- case CODE.MODE_MODIFY:
- setModeInfo({
- ...modeInfo,
- modeTitle: "수정",
- editURL: `/cop/bbs/updateBBSMasterInfAPI/${bbsId}.do`
- });
- break;
- default:
- navigate({pathname: URL.ERROR}, {state: {msg : ""}});
- }
retrieveDetail();
}
const retrieveDetail = () => {
if (modeInfo.mode === CODE.MODE_CREATE) {// 조회/등록이면 조회 안함
- setBoardDetail({
- tmplatId: "TMPLAT_BOARD_DEFAULT", //Template 고정
- replyPosblAt: "Y", //답장가능여부 초기값
- fileAtchPosblAt: "Y" //파일첨부가능여부 초기값
- });
return;
}
- const retrieveDetailURL = '/cop/bbs/selectBBSMasterInfAPI.do';
-
+
+ const retrieveDetailURL = '/admin/boards/board';
+
const requestOptions = {
- method: "POST",
+ method: "GET",
headers: {
'Content-type': 'application/json',
-
- },
- body: JSON.stringify({
- bbsId: bbsId
- })
+
+ }
}
EgovNet.requestFetch(retrieveDetailURL,
@@ -81,18 +62,18 @@ function EgovAdminBoardEdit(props) {
function (resp) {
// 수정모드일 경우 조회값 세팅
if (modeInfo.mode === CODE.MODE_MODIFY) {
- setBoardDetail(resp.result.boardMasterVO);
+ setBoardDetail(item);
}
}
);
}
- const formValidator = (formData) => {
- if (formData.get('bbsNm') === null || formData.get('bbsNm') === "") {
+ const formValidator = (formData) => {
+ if (formData.get('bbsTitle') === null || formData.get('bbsTitle') === "") {
alert("게시판명은 필수 값입니다.");
return false;
}
- if (formData.get('bbsIntrcn') === null || formData.get('bbsIntrcn') === "") {
+ if (formData.get('bbsDesc') === null || formData.get('bbsDesc') === "") {
alert("게시판 소개는 필수 값입니다.");
return false;
}
@@ -112,15 +93,15 @@ function EgovAdminBoardEdit(props) {
};
const formObjValidator = (checkRef) => {
- if(checkRef.current[0].value === ""){
+ if (checkRef.current[0].value === "") {
alert("게시판명은 필수 값입니다.");
return false;
}
- if(checkRef.current[1].value === ""){
+ if (checkRef.current[1].value === "") {
alert("게시판 소개는 필수 값입니다.");
return false;
}
- if(checkRef.current[2].value === "0"){
+ if (checkRef.current[2].value === "0") {
alert("첨부파일 가능 숫자는 필수 값입니다.");
return false;
}
@@ -131,38 +112,37 @@ function EgovAdminBoardEdit(props) {
let modeStr = modeInfo.mode === CODE.MODE_CREATE ? "POST" : "PUT";
- let requestOptions ={};
+ let requestOptions = {};
if (modeStr === "POST") {
const formData = new FormData();
- for (let key in boardDetail) {
- formData.append(key, boardDetail[key]);
- //console.log("boardDetail [%s] ", key, boardDetail[key]);
+ for (let key in boardDetail) {
+ formData.append(key, boardDetail[key]);
+ //console.log("boardDetail [%s] ", key, boardDetail[key]);
+ }
+
+ if (formValidator(formData)) {
+
+ requestOptions = {
+ method: modeStr,
+ headers: {},
+ body: formData
}
- if (formValidator(formData)) {
-
- requestOptions = {
- method: modeStr,
- headers: {
-
- },
- body: formData
- }
-
- EgovNet.requestFetch(modeInfo.editURL,
- requestOptions,
- (resp) => {
- if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
- navigate({ pathname: URL.ADMIN_BOARD });
- } else {
- navigate({pathname: URL.ERROR}, {state: {msg : resp.resultMessage}});
- }
+ EgovNet.requestFetch(modeInfo.editURL,
+ requestOptions,
+ (resp) => {
+ if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
+ navigate({pathname: URL.ADMIN_BOARD});
+ } else {
+ navigate({pathname: URL.ERROR}, {state: {msg: resp.resultMessage}});
}
- );
- };
+ }
+ );
+ }
+ ;
} else {
if (formObjValidator(checkRef)) {
@@ -171,7 +151,7 @@ function EgovAdminBoardEdit(props) {
method: modeStr,
headers: {
'Content-type': 'application/json',
-
+
},
body: JSON.stringify({...boardDetail})
}
@@ -180,24 +160,24 @@ function EgovAdminBoardEdit(props) {
requestOptions,
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
- navigate({ pathname: URL.ADMIN_BOARD });
+ navigate({pathname: URL.ADMIN_BOARD});
} else {
- navigate({pathname: URL.ERROR}, {state: {msg : resp.resultMessage}});
+ navigate({pathname: URL.ERROR}, {state: {msg: resp.resultMessage}});
}
}
);
- }
+ }
}
};
const deleteBoardArticle = (bbsId) => {
const deleteBoardURL = `/cop/bbs/deleteBBSMasterInfAPI/${bbsId}.do`;
-
+
const requestOptions = {
method: "PUT",
headers: {
'Content-type': 'application/json',
-
+
},
body: JSON.stringify({
bbsId: bbsId
@@ -210,7 +190,7 @@ function EgovAdminBoardEdit(props) {
console.log("====>>> board delete= ", resp);
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
alert("게시글이 삭제되었습니다.")
- navigate(URL.ADMIN_BOARD, { replace: true });
+ navigate(URL.ADMIN_BOARD, {replace: true});
} else {
alert("ERR : " + resp.resultMessage);
}
@@ -225,206 +205,76 @@ function EgovAdminBoardEdit(props) {
useEffect(() => {
initMode();
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
console.log("------------------------------EgovAdminBoardEdit [End]");
console.groupEnd("EgovAdminBoardEdit");
return (
-
-
- {/* */}
-
-
- - Home
- - 사이트관리
- - 게시판생성 관리
-
-
- {/* */}
+ <>
+ {/* */}
+
+
+ {modeInfo.mode === CODE.MODE_CREATE && '게시판 생성'}
+ {modeInfo.mode === CODE.MODE_MODIFY && '게시판 수정'}
+
+
-
- {/* */}
-
- {/* */}
-
-
- {/* */}
-
-
-
사이트관리
-
-
- {modeInfo.mode === CODE.MODE_CREATE &&
-
게시판 생성
- }
-
- {modeInfo.mode === CODE.MODE_MODIFY &&
-
게시판 수정
- }
-
-
-
+
+ >
);
}
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/boards/List.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/boards/List.jsx
index bf22d7d..460f91b 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/boards/List.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/boards/List.jsx
@@ -3,11 +3,15 @@ import { Link, useLocation } from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
import URL from 'constants/url';
+import CODE from 'constants/code';
import { default as EgovLeftNav } from 'components/leftmenu/EgovLeftNavAdmin';
import EgovPaging from 'components/EgovPaging';
import { itemIdxByPage } from 'utils/calc';
+import MenuModal from "../config/menuMgt/MenuModal";
+import Modal from "react-bootstrap/Modal";
+import EgovAdminBoardEdit from "../board/EgovAdminBoardEdit";
function EgovAdminBoardList(props) {
console.group("EgovAdminBoardList");
@@ -20,10 +24,15 @@ function EgovAdminBoardList(props) {
// eslint-disable-next-line no-unused-vars
const [searchCondition, setSearchCondition] = useState(location.state?.searchCondition || { pageIndex: 1, searchCnd: '0', searchWrd: '' });// 기존 조회에서 접근 했을 시 || 신규로 접근 했을 시
const [paginationInfo, setPaginationInfo] = useState({});
-
const [listTag, setListTag] = useState([]);
+ const [show, setShow] = useState(false);
+ const [modalBody, setModalBody] = useState();
+ const handleClose = () => setShow(false);
+ const handleShow = () => setShow(true);
+
const retrieveList = useCallback(() => {
+ handleClose();
console.groupCollapsed("AdminBoardList.retrieveList()");
const retrieveListURL = '/admin/boards/board-list';
@@ -49,14 +58,15 @@ function EgovAdminBoardList(props) {
if (index === 0) mutListTag = []; // 목록 초기화
mutListTag.push(
-
+
{item.bbsSeq}
{item.bbsId}
{item.bbsTitle}
{item.frstCrtId}
{item.frstCrtDt}
{item.lastChgDt}
-
+
+
);
});
@@ -75,6 +85,14 @@ function EgovAdminBoardList(props) {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
+ function editBoard(item){
+ handleShow();
+ if(item != undefined) {
+ item.mode = CODE.MODE_MODIFY;
+ }
+ setModalBody(
)
+ }
+
console.log("------------------------------EgovAdminBoardList [End]");
console.groupEnd("EgovAdminBoardList");
return (
@@ -150,6 +168,7 @@ function EgovAdminBoardList(props) {
작성자
작성일
수정일
+
{listTag}
@@ -169,6 +188,9 @@ function EgovAdminBoardList(props) {
+
+ {modalBody}
+
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/logs/FileDownloadStatus.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/logs/FileDownloadStatus.jsx
index 6c272e0..2fe065b 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/logs/FileDownloadStatus.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/logs/FileDownloadStatus.jsx
@@ -1,4 +1,4 @@
-import React, {useState, useEffect, useCallback, useRef, PureComponent} from 'react';
+import React, {useState, useEffect, useCallback} from 'react';
import { Link, useLocation } from 'react-router-dom';
import {LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer} from 'recharts';
@@ -145,6 +145,7 @@ function FileConnections(props) {
}
);
// console.groupEnd("EgovAdminPrivacyList.retrieveList()");
+ // eslint-disable-next-line react-hooks/exhaustive-deps
},[listTag]);
const CustomTooltip = ({ active, payload, label }) => {
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/logs/MenuAccessInfo.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/logs/MenuAccessInfo.jsx
index 0815629..3a75376 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/logs/MenuAccessInfo.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/logs/MenuAccessInfo.jsx
@@ -1,4 +1,4 @@
-import React, {useState, useEffect, useCallback, useRef, PureComponent} from 'react';
+import React, {useState, useEffect, useCallback} from 'react';
import { Link, useLocation } from 'react-router-dom';
import {BarChart, Bar, Rectangle, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer} from 'recharts';
@@ -85,6 +85,7 @@ function MenuConnections(props) {
}
);
// console.groupEnd("EgovAdminPrivacyList.retrieveList()");
+ // eslint-disable-next-line react-hooks/exhaustive-deps
},[listTag]);
const CustomTooltip = ({ active, payload, label }) => {
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/logs/PrivacyLogs.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/logs/PrivacyLogs.jsx
index 86d95d6..0351568 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/logs/PrivacyLogs.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/logs/PrivacyLogs.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect, useCallback, useRef } from 'react';
+import React, { useState, useEffect, useCallback } from 'react';
import { Link, useLocation } from 'react-router-dom';
import * as EgovNet from 'api/egovFetch';
@@ -77,6 +77,7 @@ function PrivacyConnections(props) {
}
);
// console.groupEnd("EgovAdminPrivacyList.retrieveList()");
+ // eslint-disable-next-line react-hooks/exhaustive-deps
},[listTag]);
useEffect(() => {
diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/logs/UserConnections.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/logs/UserConnections.jsx
index 44ac15f..bcb57c9 100644
--- a/egovframe-template-simple-react-contribution/src/pages/admin/logs/UserConnections.jsx
+++ b/egovframe-template-simple-react-contribution/src/pages/admin/logs/UserConnections.jsx
@@ -1,4 +1,4 @@
-import React, {useState, useEffect, useCallback, useRef, PureComponent} from 'react';
+import React, {useState, useEffect, useCallback} from 'react';
import { Link, useLocation } from 'react-router-dom';
import {BarChart, Bar, Rectangle, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer} from 'recharts';
@@ -84,6 +84,7 @@ function UserConnections(props) {
}
);
// console.groupEnd("EgovAdminPrivacyList.retrieveList()");
+ // eslint-disable-next-line react-hooks/exhaustive-deps
},[listTag]);
const CustomTooltip = ({ active, payload, label }) => {
diff --git a/egovframe-template-simple-react-contribution/src/themes/palette.js b/egovframe-template-simple-react-contribution/src/themes/palette.js
index d20075f..0283899 100644
--- a/egovframe-template-simple-react-contribution/src/themes/palette.js
+++ b/egovframe-template-simple-react-contribution/src/themes/palette.js
@@ -51,7 +51,7 @@ const Palette = (mode) => {
divider: paletteColor.grey[200],
background: {
paper: paletteColor.grey[0],
- default: paletteColor.grey.A50
+ // default: paletteColor.grey.A50 // 뒷배경 색이 깔려서 주석처리함
}
}
});
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java
index 0d89bb4..ac9c550 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java
@@ -1,5 +1,6 @@
package com.dbnt.kcscbackend.admin.boards;
+import com.dbnt.kcscbackend.admin.boards.entity.TnBbs;
import com.dbnt.kcscbackend.admin.boards.service.AdminBoardsService;
import com.dbnt.kcscbackend.config.common.BaseController;
import com.dbnt.kcscbackend.config.common.ResultVO;
@@ -42,4 +43,25 @@ public class AdminBoardsController extends BaseController {
resultVO.setResult(resultMap);
return resultVO;
}
+
+ @Operation(
+ summary = "게시판 단건 조회",
+ description = "게시판 단건 조회",
+ tags = {"AdminBoardsController"}
+ )
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "조회 성공"),
+ @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
+ })
+ @RequestMapping(method = RequestMethod.GET, value = "/board", consumes = MediaType.APPLICATION_JSON_VALUE)
+ public ResultVO getBoard(TnBbs tnBbs) throws Exception {
+ ResultVO resultVO = new ResultVO();
+ Map resultMap = new HashMap<>();
+
+ System.out.println("@@@ : " + tnBbs.getBbsSeq());
+
+ resultMap.put("board", adminBoardsService.selectBoard(tnBbs.getBbsSeq()));
+ resultVO.setResult(resultMap);
+ return resultVO;
+ }
}
diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java
index c8c1d70..0255850 100644
--- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java
+++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java
@@ -7,6 +7,7 @@ import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.Optional;
@Service
@RequiredArgsConstructor
@@ -16,4 +17,6 @@ public class AdminBoardsService extends EgovAbstractServiceImpl {
public List selectBoardList() { return tnBbsRepository.findAll(); }
+ public Optional selectBoard(Long bbsSeq) { return tnBbsRepository.findById(bbsSeq); }
+
}