2024-02-05 05:51:06 +00:00
|
|
|
import React, {useState, useEffect, useRef} from 'react';
|
|
|
|
|
import {Link, useNavigate, useLocation, useParams} from 'react-router-dom';
|
|
|
|
|
import Modal from "react-bootstrap/Modal";
|
2023-10-12 04:15:42 +00:00
|
|
|
|
|
|
|
|
import * as EgovNet from 'api/egovFetch';
|
|
|
|
|
import URL from 'constants/url';
|
|
|
|
|
import CODE from 'constants/code';
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
import {default as EgovLeftNav} from 'components/leftmenu/EgovLeftNavAdmin';
|
2023-10-12 04:15:42 +00:00
|
|
|
import EgovRadioButtonGroup from 'components/EgovRadioButtonGroup';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function EgovAdminBoardEdit(props) {
|
|
|
|
|
console.group("EgovAdminBoardEdit");
|
|
|
|
|
console.log("[Start] EgovAdminBoardEdit ------------------------------");
|
|
|
|
|
console.log("EgovAdminBoardEdit [props] : ", props);
|
|
|
|
|
|
|
|
|
|
const navigate = useNavigate();
|
|
|
|
|
const location = useLocation();
|
2024-02-05 05:51:06 +00:00
|
|
|
const checkRef = useRef([]);
|
|
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
console.log("EgovAdminBoardEdit [location] : ", location);
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
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개"}];
|
|
|
|
|
|
|
|
|
|
let item = null;
|
|
|
|
|
item = props.props;
|
|
|
|
|
console.log("@@@ item : " + JSON.stringify(item));
|
|
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
|
|
|
|
|
const [modeInfo, setModeInfo] = useState(item != null ? {mode: props.props.mode} : {mode: CODE.MODE_CREATE});
|
2023-10-12 04:15:42 +00:00
|
|
|
const [boardDetail, setBoardDetail] = useState({});
|
2024-02-05 05:51:06 +00:00
|
|
|
console.log("@@@ mode : " + modeInfo.mode);
|
2023-10-12 04:15:42 +00:00
|
|
|
|
|
|
|
|
const initMode = () => {
|
|
|
|
|
retrieveDetail();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const retrieveDetail = () => {
|
|
|
|
|
if (modeInfo.mode === CODE.MODE_CREATE) {// 조회/등록이면 조회 안함
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
|
|
|
|
|
const retrieveDetailURL = '/admin/boards/board';
|
|
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
const requestOptions = {
|
2024-02-05 05:51:06 +00:00
|
|
|
method: "GET",
|
2023-10-12 04:15:42 +00:00
|
|
|
headers: {
|
|
|
|
|
'Content-type': 'application/json',
|
2024-02-05 05:51:06 +00:00
|
|
|
|
|
|
|
|
}
|
2023-10-12 04:15:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EgovNet.requestFetch(retrieveDetailURL,
|
|
|
|
|
requestOptions,
|
|
|
|
|
function (resp) {
|
|
|
|
|
// 수정모드일 경우 조회값 세팅
|
|
|
|
|
if (modeInfo.mode === CODE.MODE_MODIFY) {
|
2024-02-05 05:51:06 +00:00
|
|
|
setBoardDetail(item);
|
2023-10-12 04:15:42 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
const formValidator = (formData) => {
|
|
|
|
|
if (formData.get('bbsTitle') === null || formData.get('bbsTitle') === "") {
|
2023-10-12 04:15:42 +00:00
|
|
|
alert("게시판명은 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2024-02-05 05:51:06 +00:00
|
|
|
if (formData.get('bbsDesc') === null || formData.get('bbsDesc') === "") {
|
2023-10-12 04:15:42 +00:00
|
|
|
alert("게시판 소개는 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (formData.get('bbsTyCode') === null || formData.get('bbsTyCode') === "") {
|
|
|
|
|
alert("게시판 유형은 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (formData.get('bbsAttrbCode') === null || formData.get('bbsAttrbCode') === "") {
|
|
|
|
|
alert("게시판 속성은 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (formData.get('posblAtchFileNumber') === null || formData.get('posblAtchFileNumber') === "") {
|
|
|
|
|
alert("첨부파일 가능 숫자는 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const formObjValidator = (checkRef) => {
|
2024-02-05 05:51:06 +00:00
|
|
|
if (checkRef.current[0].value === "") {
|
2023-10-12 04:15:42 +00:00
|
|
|
alert("게시판명은 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2024-02-05 05:51:06 +00:00
|
|
|
if (checkRef.current[1].value === "") {
|
2023-10-12 04:15:42 +00:00
|
|
|
alert("게시판 소개는 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2024-02-05 05:51:06 +00:00
|
|
|
if (checkRef.current[2].value === "0") {
|
2023-10-12 04:15:42 +00:00
|
|
|
alert("첨부파일 가능 숫자는 필수 값입니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const updateBoard = () => {
|
|
|
|
|
|
|
|
|
|
let modeStr = modeInfo.mode === CODE.MODE_CREATE ? "POST" : "PUT";
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
let requestOptions = {};
|
2023-10-12 04:15:42 +00:00
|
|
|
|
|
|
|
|
if (modeStr === "POST") {
|
|
|
|
|
|
|
|
|
|
const formData = new FormData();
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
for (let key in boardDetail) {
|
|
|
|
|
formData.append(key, boardDetail[key]);
|
|
|
|
|
//console.log("boardDetail [%s] ", key, boardDetail[key]);
|
|
|
|
|
}
|
2023-10-12 04:15:42 +00:00
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
if (formValidator(formData)) {
|
2023-10-12 04:15:42 +00:00
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
requestOptions = {
|
|
|
|
|
method: modeStr,
|
|
|
|
|
headers: {},
|
|
|
|
|
body: formData
|
|
|
|
|
}
|
2023-10-12 04:15:42 +00:00
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
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}});
|
2023-10-12 04:15:42 +00:00
|
|
|
}
|
2024-02-05 05:51:06 +00:00
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
;
|
2023-10-12 04:15:42 +00:00
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
if (formObjValidator(checkRef)) {
|
|
|
|
|
|
|
|
|
|
requestOptions = {
|
|
|
|
|
method: modeStr,
|
|
|
|
|
headers: {
|
|
|
|
|
'Content-type': 'application/json',
|
2024-02-05 05:51:06 +00:00
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
},
|
|
|
|
|
body: JSON.stringify({...boardDetail})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EgovNet.requestFetch(modeInfo.editURL,
|
|
|
|
|
requestOptions,
|
|
|
|
|
(resp) => {
|
|
|
|
|
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
|
2024-02-05 05:51:06 +00:00
|
|
|
navigate({pathname: URL.ADMIN_BOARD});
|
2023-10-12 04:15:42 +00:00
|
|
|
} else {
|
2024-02-05 05:51:06 +00:00
|
|
|
navigate({pathname: URL.ERROR}, {state: {msg: resp.resultMessage}});
|
2023-10-12 04:15:42 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
2024-02-05 05:51:06 +00:00
|
|
|
}
|
2023-10-12 04:15:42 +00:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const deleteBoardArticle = (bbsId) => {
|
|
|
|
|
const deleteBoardURL = `/cop/bbs/deleteBBSMasterInfAPI/${bbsId}.do`;
|
2024-02-05 05:51:06 +00:00
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
const requestOptions = {
|
|
|
|
|
method: "PUT",
|
|
|
|
|
headers: {
|
|
|
|
|
'Content-type': 'application/json',
|
2024-02-05 05:51:06 +00:00
|
|
|
|
2023-10-12 04:15:42 +00:00
|
|
|
},
|
|
|
|
|
body: JSON.stringify({
|
|
|
|
|
bbsId: bbsId
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EgovNet.requestFetch(deleteBoardURL,
|
|
|
|
|
requestOptions,
|
|
|
|
|
(resp) => {
|
|
|
|
|
console.log("====>>> board delete= ", resp);
|
|
|
|
|
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
|
|
|
|
|
alert("게시글이 삭제되었습니다.")
|
2024-02-05 05:51:06 +00:00
|
|
|
navigate(URL.ADMIN_BOARD, {replace: true});
|
2023-10-12 04:15:42 +00:00
|
|
|
} else {
|
|
|
|
|
alert("ERR : " + resp.resultMessage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const getSelectedLabel = (objArray, findLabel = "") => {
|
|
|
|
|
let foundValueLabelObj = objArray.find(o => o['value'] === findLabel);
|
|
|
|
|
return foundValueLabelObj['label'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
initMode();
|
2024-02-05 05:51:06 +00:00
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
2023-10-12 04:15:42 +00:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
console.log("------------------------------EgovAdminBoardEdit [End]");
|
|
|
|
|
console.groupEnd("EgovAdminBoardEdit");
|
|
|
|
|
|
|
|
|
|
return (
|
2024-02-05 05:51:06 +00:00
|
|
|
<>
|
|
|
|
|
{/* <!-- 본문 --> */}
|
|
|
|
|
<Modal.Header>
|
|
|
|
|
<Modal.Title>
|
|
|
|
|
{modeInfo.mode === CODE.MODE_CREATE && '게시판 생성'}
|
|
|
|
|
{modeInfo.mode === CODE.MODE_MODIFY && '게시판 수정'}
|
|
|
|
|
</Modal.Title>
|
|
|
|
|
</Modal.Header>
|
|
|
|
|
|
|
|
|
|
<Modal.Body>
|
|
|
|
|
<div className="board_view2">
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><label htmlFor="bbsId">게시판ID</label><span className="req">필수</span></dt>
|
|
|
|
|
<dd>
|
|
|
|
|
<input className="f_input2 w_full" type="text" name="bbsId" title="" id="bbsId" placeholder=""
|
|
|
|
|
defaultValue={boardDetail?.bbsId}
|
|
|
|
|
onChange={e => setBoardDetail({...boardDetail, bbsId: e.target.value})}
|
|
|
|
|
ref={el => (checkRef.current[0] = el)}
|
|
|
|
|
/>
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><label htmlFor="bbsTitle">게시판명</label><span className="req">필수</span></dt>
|
|
|
|
|
<dd>
|
|
|
|
|
<input className="f_input2 w_full" type="text" name="bbsTitle" title="" id="bbsTitle" placeholder=""
|
|
|
|
|
defaultValue={boardDetail?.bbsTitle}
|
|
|
|
|
onChange={e => setBoardDetail({...boardDetail, bbsTitle: e.target.value})}
|
|
|
|
|
ref={el => (checkRef.current[0] = el)}
|
|
|
|
|
/>
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><label htmlFor="bbsDesc">게시판 소개</label><span className="req">필수</span></dt>
|
|
|
|
|
<dd>
|
|
|
|
|
<textarea className="f_txtar w_full h_100" name="bbsDesc" id="bbsDesc" cols="30" rows="10" placeholder=""
|
|
|
|
|
defaultValue={boardDetail?.bbsDesc}
|
|
|
|
|
onChange={e => setBoardDetail({...boardDetail, bbsDesc: e.target.value})}
|
|
|
|
|
ref={el => (checkRef.current[1] = el)}
|
2023-10-12 04:15:42 +00:00
|
|
|
></textarea>
|
2024-02-05 05:51:06 +00:00
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
|
|
|
|
|
{/* <!-- 버튼영역 --> */}
|
|
|
|
|
<div className="board_btn_area">
|
|
|
|
|
<div className="left_col btn1">
|
|
|
|
|
<button className="btn btn_skyblue_h46 w_100"
|
|
|
|
|
onClick={() => updateBoard()}>저장
|
|
|
|
|
</button>
|
|
|
|
|
{modeInfo.mode === CODE.MODE_MODIFY &&
|
|
|
|
|
<button className="btn btn_skyblue_h46 w_100" onClick={() => {
|
|
|
|
|
deleteBoardArticle(boardDetail?.bbsId);
|
|
|
|
|
}}>삭제</button>
|
|
|
|
|
}
|
2023-10-12 04:15:42 +00:00
|
|
|
</div>
|
|
|
|
|
|
2024-02-05 05:51:06 +00:00
|
|
|
<div className="right_col btn1">
|
|
|
|
|
<Link to={URL.ADMIN_BOARD} className="btn btn_blue_h46 w_100">목록</Link>
|
|
|
|
|
</div>
|
2023-10-12 04:15:42 +00:00
|
|
|
</div>
|
2024-02-05 05:51:06 +00:00
|
|
|
{/* <!--// 버튼영역 --> */}
|
2023-10-12 04:15:42 +00:00
|
|
|
</div>
|
2024-02-05 05:51:06 +00:00
|
|
|
</Modal.Body>
|
|
|
|
|
</>
|
2023-10-12 04:15:42 +00:00
|
|
|
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default EgovAdminBoardEdit;
|