From 3c00f5101ba91129b1e94ccb072d499fa1eb3bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EB=AF=BC=ED=98=95?= Date: Thu, 21 Mar 2024 17:48:09 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/admin/board/AdminPostMgtEdit.jsx | 92 +++++++++++++------ .../admin/boards/AdminBoardsController.java | 48 +++++++--- .../boards/service/AdminBoardsService.java | 70 +++++++++++++- 3 files changed, 169 insertions(+), 41 deletions(-) diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/board/AdminPostMgtEdit.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/board/AdminPostMgtEdit.jsx index 05ae684..c12a9a8 100644 --- a/egovframe-template-simple-react-contribution/src/pages/admin/board/AdminPostMgtEdit.jsx +++ b/egovframe-template-simple-react-contribution/src/pages/admin/board/AdminPostMgtEdit.jsx @@ -10,6 +10,7 @@ import {default as EgovLeftNav} from 'components/leftmenu/EgovLeftNavAdmin'; import EgovRadioButtonGroup from 'components/EgovRadioButtonGroup'; import {Form} from "react-bootstrap"; import RichTextEditor from "../../../components/editor/RichTextEditor"; +import AttachFile from "../../../components/file/AttachFile"; function AdminPostMgtEdit({props, reloadFunction}) { @@ -34,27 +35,31 @@ function AdminPostMgtEdit({props, reloadFunction}) { const [categoryList, setCategoryList] = useState([]); const retrieveList = useCallback(() => { - const retrieveListURL = '/admin/boards/get-category-list'; + const retrieveListURL = '/admin/boards/get-category-and-file-list'; const requestOptions = { - method: "GET", + method: "POST", headers: { 'Content-type': 'application/json', }, - body: JSON.stringify() + body: JSON.stringify(item ? item : {}) } EgovNet.requestFetch(retrieveListURL, requestOptions, (resp) => { setCategoryList(resp.result.categoryList); + if (resp.result.files) { + setServerFiles(resp.result.files); + console.log("@@@ files : " + JSON.stringify(resp.result.files)); + } console.log("@@@ categoryList : " + JSON.stringify(resp.result.categoryList)); }, function (resp) { console.log("err response : ", resp); } ); - },[]); + }, []); useEffect(() => { retrieveList(); @@ -65,33 +70,40 @@ function AdminPostMgtEdit({props, reloadFunction}) { const initMode = () => { if (modeInfo.mode === CODE.MODE_MODIFY) { setBoardDetail(item); + setSelectedBbsSeq(props?.bbsSeq); } } function editPost(e) { + const formData = new FormData(); e.preventDefault(); e.stopPropagation(); const form = e.target; - const info = { - fixedYn: defaultFixedYn, - secretYn: defaultSecretYn, - bbsId: form.bbsId.value, - bbsSeq: selectedBbsSeq, - bbsContTitle: form.bbsContTitle.value, - fileGrpId: form.fileGrpId.value, - bbsContents: text + formData.append('fixedYn', defaultFixedYn); + formData.append('secretYn', defaultSecretYn); + formData.append('bbsId', form.bbsId.value); + formData.append('bbsSeq', selectedBbsSeq); + formData.append('bbsContTitle', form.bbsContTitle.value); + formData.append('bbsContents', text); + //첨부파일 + if (files) { + for (let i = 0; i < files.length; i++) { + if (files[i].seq) { + // 살아남은 file의 seq 목록 서버로 보내면 서버가 알아서 기존파일을 정리해준다. + formData.append("survivingFiles", files[i].seq); + continue; + } + formData.append("files", files[i]); + } } if (modeInfo.mode === CODE.MODE_MODIFY) { - info.bbsContSeq = props.bbsContSeq; + formData.append('bbsContSeq', props.bbsContSeq); } EgovNet.requestFetch( '/admin/boards/post-mgt', { method: "PUT", - headers: { - 'Content-type': 'application/json' - }, - body: JSON.stringify(info) + body: formData }, (resp) => { if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) { @@ -106,8 +118,8 @@ function AdminPostMgtEdit({props, reloadFunction}) { ) } - function deletePost(post){ - if(window.confirm("삭제하시겠습니까?")) { + function deletePost(post) { + if (window.confirm("삭제하시겠습니까?")) { EgovNet.requestFetch( '/admin/boards/post-mgt', { @@ -145,6 +157,28 @@ function AdminPostMgtEdit({props, reloadFunction}) { setSelectedBbsSeq(selectedOption.bbsSeq); } + const fileTypes = ["JPG", "PNG", "GIF", "PDF", "HWP", "HWPX", "ZIP", "JPEG", "MP4", "TXT"]; + const [serverFiles, setServerFiles] = useState([]); + const [files, setFiles] = useState([]); + + // 첨부된 file을 삭제하는 요청 + const deleteFile = (fileSeq) => { + const deleteFileURL = `/contents/api/popup-manage/file/${fileSeq}`; + + const requestOptions = { + method: "DELETE", + headers: { + 'Content-type': 'application/json', + } + } + + EgovNet.requestFetch(deleteFileURL, + requestOptions, + (resp) => { + } + ); + } + return ( <>