import React, { useState, useEffect, useRef } from 'react'; import { Link, useNavigate, 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 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(); 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 [modeInfo, setModeInfo] = useState({ mode: props.mode }); const [boardDetail, setBoardDetail] = useState({}); 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 requestOptions = { method: "POST", headers: { 'Content-type': 'application/json', }, body: JSON.stringify({ bbsId: bbsId }) } EgovNet.requestFetch(retrieveDetailURL, requestOptions, function (resp) { // 수정모드일 경우 조회값 세팅 if (modeInfo.mode === CODE.MODE_MODIFY) { setBoardDetail(resp.result.boardMasterVO); } } ); } const formValidator = (formData) => { if (formData.get('bbsNm') === null || formData.get('bbsNm') === "") { alert("게시판명은 필수 값입니다."); return false; } if (formData.get('bbsIntrcn') === null || formData.get('bbsIntrcn') === "") { 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) => { if(checkRef.current[0].value === ""){ alert("게시판명은 필수 값입니다."); return false; } if(checkRef.current[1].value === ""){ alert("게시판 소개는 필수 값입니다."); return false; } if(checkRef.current[2].value === "0"){ alert("첨부파일 가능 숫자는 필수 값입니다."); return false; } return true; }; const updateBoard = () => { let modeStr = modeInfo.mode === CODE.MODE_CREATE ? "POST" : "PUT"; 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]); } 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}}); } } ); }; } else { if (formObjValidator(checkRef)) { requestOptions = { method: modeStr, headers: { 'Content-type': 'application/json', }, body: JSON.stringify({...boardDetail}) } 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}}); } } ); } } }; const deleteBoardArticle = (bbsId) => { const deleteBoardURL = `/cop/bbs/deleteBBSMasterInfAPI/${bbsId}.do`; const requestOptions = { method: "PUT", headers: { 'Content-type': 'application/json', }, body: JSON.stringify({ bbsId: bbsId }) } EgovNet.requestFetch(deleteBoardURL, requestOptions, (resp) => { console.log("====>>> board delete= ", resp); if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) { alert("게시글이 삭제되었습니다.") navigate(URL.ADMIN_BOARD, { replace: true }); } else { alert("ERR : " + resp.resultMessage); } } ); } const getSelectedLabel = (objArray, findLabel = "") => { let foundValueLabelObj = objArray.find(o => o['value'] === findLabel); return foundValueLabelObj['label']; } useEffect(() => { initMode(); // 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 &&

게시판 수정

}
필수
setBoardDetail({ ...boardDetail, bbsNm: e.target.value })} ref={el => (checkRef.current[0] = el)} />
필수
게시판 유형필수
{/* 수정/조회 일때 변경 불가 */} {modeInfo.mode === CODE.MODE_CREATE && } {modeInfo.mode === CODE.MODE_MODIFY && {boardDetail.bbsTyCode && getSelectedLabel(bbsTyCodeOptions, boardDetail.bbsTyCode)} }
게시판 속성필수
{/* 등록 일때 변경 가능 */} {modeInfo.mode === CODE.MODE_CREATE && } {/* 수정/조회 일때 변경 불가 */} {modeInfo.mode === CODE.MODE_MODIFY && {boardDetail.bbsAttrbCode && getSelectedLabel(bbsAttrbCodeOptions, boardDetail.bbsAttrbCode)} }
답장가능여부필수
{/* 등록 일때 변경 가능 */} {modeInfo.mode === CODE.MODE_CREATE && setBoardDetail({ ...boardDetail, replyPosblAt: v })} /> } {/* 수정/조회 일때 변경 불가 */} {modeInfo.mode === CODE.MODE_MODIFY && {boardDetail.replyPosblAt && getSelectedLabel(replyPosblAtRadioGroup, boardDetail.replyPosblAt)} }
파일첨부가능여부필수
setBoardDetail({ ...boardDetail, fileAtchPosblAt: v })} />
필수
{/* */}
{modeInfo.mode === CODE.MODE_MODIFY && }
목록
{/* */}
{/* */}
); } export default EgovAdminBoardEdit;