diff --git a/egovframe-template-simple-react-contribution/.env.production b/egovframe-template-simple-react-contribution/.env.production index 60bab75..3864d32 100644 --- a/egovframe-template-simple-react-contribution/.env.production +++ b/egovframe-template-simple-react-contribution/.env.production @@ -4,7 +4,7 @@ NODE_PATH=src/ ## 절대경로 지정 -REACT_APP_EGOV_CONTEXT_URL=118.219.150.34:50688 +REACT_APP_EGOV_CONTEXT_URL=back.kcsc.dbnt.co.kr ## [보안] 소스맵 삭제 GENERATE_SOURCEMAP=false 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 ( <>