kcscDev/egovframe-template-simple-r.../src/pages/admin/board/EgovAdminBoardEdit.jsx

268 lines
11 KiB
React
Raw Normal View History

2024-03-07 08:57:35 +00:00
import React, {useState, useEffect, useRef, useCallback} from 'react';
2024-02-05 05:51:06 +00:00
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';
2024-02-08 06:52:22 +00:00
import {Form} from "react-bootstrap";
2023-10-12 04:15:42 +00:00
2024-02-08 06:52:22 +00:00
function EgovAdminBoardEdit({props, reloadFunction}) {
2023-10-12 04:15:42 +00:00
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
let item = null;
2024-02-08 06:52:22 +00:00
item = props;
2024-02-05 05:51:06 +00:00
console.log("@@@ item : " + JSON.stringify(item));
2024-02-08 06:52:22 +00:00
const [modeInfo, setModeInfo] = useState(item != null ? {mode: 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
2024-03-07 08:57:35 +00:00
const [bbsTypeList, setBbsTypeList] = useState([]);
const [roleList, setRoleList] = useState([]);
const retrieveList = useCallback(() => {
const retrieveListURL = '/admin/boards/mgt/get-option-list';
2024-03-07 08:57:35 +00:00
const requestOptions = {
method: "GET",
headers: {
'Content-type': 'application/json',
},
body: JSON.stringify()
}
EgovNet.requestFetch(retrieveListURL,
requestOptions,
(resp) => {
setBbsTypeList(resp.result.bbsTypeList);
setRoleList(resp.result.roleList);
console.log("@@@ bbsTypeList : " + JSON.stringify(resp.result.bbsTypeList));
},
function (resp) {
console.log("err response : ", resp);
}
);
},[]);
2024-02-08 06:52:22 +00:00
useEffect(() => {
2024-03-07 08:57:35 +00:00
retrieveList();
2024-02-08 06:52:22 +00:00
initMode();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
2024-02-05 05:51:06 +00:00
2024-02-08 06:52:22 +00:00
const initMode = () => {
if (modeInfo.mode === CODE.MODE_MODIFY) {
setBoardDetail(item);
2023-10-12 04:15:42 +00:00
}
}
2024-02-08 06:52:22 +00:00
function editBoard(e) {
e.preventDefault();
e.stopPropagation();
const form = e.target;
const info = {
bbsId: form.bbsId.value,
bbsTitle: form.bbsTitle.value,
2024-03-07 08:57:35 +00:00
bbsDesc: form.bbsDesc.value,
bbsType: form.bbsType.value,
bbsAnsYn: bbsAnsYn,
bbsReplYn: bbsReplYn,
useYn: useYn,
readRole: form.readRole.value,
writeRole: form.writeRole.value
2023-10-12 04:15:42 +00:00
}
2024-02-08 06:52:22 +00:00
if (modeInfo.mode === CODE.MODE_MODIFY) {
info.bbsSeq = props.bbsSeq;
2023-10-12 04:15:42 +00:00
}
2024-02-08 06:52:22 +00:00
EgovNet.requestFetch(
'/admin/boards/mgt/board-mgt',
2024-02-08 06:52:22 +00:00
{
method: "PUT",
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(info)
2023-10-12 04:15:42 +00:00
},
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
2024-02-14 06:32:38 +00:00
alert("저장되었습니다.");
reloadFunction();
2024-02-08 06:52:22 +00:00
} else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
console.log("토큰 갱신중.")
2023-10-12 04:15:42 +00:00
} else {
2024-02-08 06:52:22 +00:00
alert(resp.result.resultMessage)
2023-10-12 04:15:42 +00:00
}
}
2024-02-08 06:52:22 +00:00
)
2023-10-12 04:15:42 +00:00
}
function deleteBoard(bbs){
if(window.confirm("삭제하시겠습니까?")) {
EgovNet.requestFetch(
'/admin/boards/mgt/board-mgt',
{
method: "DELETE",
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(bbs)
},
(resp) => {
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
reloadFunction();
} else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) {
console.log("토큰 갱신중.")
} else {
alert(resp.result.resultMessage)
}
}
)
}
}
2023-10-12 04:15:42 +00:00
console.log("------------------------------EgovAdminBoardEdit [End]");
console.groupEnd("EgovAdminBoardEdit");
2024-03-07 08:57:35 +00:00
const [bbsAnsYn, setBbsAnsYn] = useState(props?.bbsAnsYn || "N");
const [bbsReplYn, setBbsReplYn] = useState(props?.bbsReplYn || "N");
const [useYn, setUseYn] = useState(props?.useYn || "N");
2023-10-12 04:15:42 +00:00
return (
2024-02-05 05:51:06 +00:00
<>
{/* <!-- 본문 --> */}
2024-02-14 06:32:38 +00:00
<Modal.Header closeButton>
2024-02-05 05:51:06 +00:00
<Modal.Title>
{modeInfo.mode === CODE.MODE_CREATE && '게시판 생성'}
{modeInfo.mode === CODE.MODE_MODIFY && '게시판 수정'}
</Modal.Title>
</Modal.Header>
<Modal.Body>
<div className="board_view2">
2024-02-08 06:52:22 +00:00
<Form onSubmit={(e) => {editBoard(e)}} noValidate>
<dl>
<dt><label htmlFor="bbsId">게시판 ID</label><span className="req">필수</span></dt>
<dd>
<Form.Control className="f_input2 w_full" type="text" name="bbsId" placeholder="게시판 ID" required
defaultValue={props?.bbsId} readOnly={props!==undefined}/>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsTitle">게시판명</label><span className="req">필수</span></dt>
<dd>
<Form.Control className="f_input2 w_full" type="text" name="bbsTitle" placeholder="게시판명" required
defaultValue={props?.bbsTitle}/>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsDesc">게시판 소개</label><span className="req">필수</span></dt>
<dd>
<Form.Control className="f_txtar w_full h_100" as="textarea" name="bbsDesc" placeholder="게시판 소개" required
defaultValue={props?.bbsDesc}/>
</dd>
</dl>
2024-03-07 08:57:35 +00:00
<dl>
<dt><label htmlFor="bbsTitle">게시판 타입</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="bbsType">
{bbsTypeList.map((item) => (
<option key={item.itemCd} value={item.itemCd} selected={props?.bbsType === item.itemCd}>{item.itemNm}</option>
))}
</Form.Select>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsTitle">답글 여부</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
2024-03-08 08:56:00 +00:00
id="bbsAnsYnCheckbox"
2024-03-07 08:57:35 +00:00
label="사용"
checked={bbsAnsYn === 'Y'}
onChange={(e) => setBbsAnsYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsTitle">댓글 여부</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
2024-03-08 08:56:00 +00:00
id="bbsReplYnCheckbox"
2024-03-07 08:57:35 +00:00
label="사용"
checked={bbsReplYn === 'Y'}
onChange={(e) => setBbsReplYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsTitle">사용 여부</label><span className="req">필수</span></dt>
<dd>
<Form.Check
type="checkbox"
2024-03-08 08:56:00 +00:00
id="useYnCheckbox"
2024-03-07 08:57:35 +00:00
label="사용"
checked={useYn === 'Y'}
onChange={(e) => setUseYn(e.target.checked ? 'Y' : 'N')}
/>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsTitle">읽기 권한</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="readRole">
<option value="0">비회원</option>
2024-03-07 08:57:35 +00:00
{roleList.map((item) => (
<option key={item.itemCd} value={item.grpOrder} selected={props?.readRole === item.grpOrder}>{item.itemNm}</option>
))}
</Form.Select>
</dd>
</dl>
<dl>
<dt><label htmlFor="bbsTitle">쓰기 권한</label><span className="req">필수</span></dt>
<dd>
<Form.Select id="select1" name="writeRole">
{roleList.map((item) => (
<option key={item.itemCd} value={item.grpOrder} selected={props?.writeRole === item.grpOrder}>{item.itemNm}</option>
))}
</Form.Select>
</dd>
</dl>
2024-02-08 06:52:22 +00:00
{/* <!-- 버튼영역 --> */}
<div className="board_btn_area">
<div className="left_col btn1">
<button type="submit" className="btn btn_skyblue_h46 w_100">저장
</button>
{modeInfo.mode === CODE.MODE_MODIFY &&
<button type={"button"} className="btn btn_skyblue_h46 w_100" onClick={()=>{deleteBoard(props)}}>삭제</button>
2024-02-08 06:52:22 +00:00
}
</div>
<div className="right_col btn1">
2024-02-14 06:32:38 +00:00
<button type={"button"} className="btn btn_blue_h46 w_100" onClick={()=>{reloadFunction()}}>목록</button>
2024-02-08 06:52:22 +00:00
</div>
2024-02-05 05:51:06 +00:00
</div>
2024-02-08 06:52:22 +00:00
{/* <!--// 버튼영역 --> */}
</Form>
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;