From 4db6bd3bbb67b735afaca86c8961f8a28053520c Mon Sep 17 00:00:00 2001 From: Junanjunan Date: Thu, 11 Jul 2024 18:25:23 +0900 Subject: [PATCH] =?UTF-8?q?[add]=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20>=20=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(board)/board/[bo_table]/write/page.js | 52 ++++++++++++++++++- src/components/FileUpload.js | 35 +++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/components/FileUpload.js diff --git a/src/app/(board)/board/[bo_table]/write/page.js b/src/app/(board)/board/[bo_table]/write/page.js index 5d8554b..445b3a6 100644 --- a/src/app/(board)/board/[bo_table]/write/page.js +++ b/src/app/(board)/board/[bo_table]/write/page.js @@ -10,6 +10,7 @@ import { useTheme } from '@mui/material/styles'; import { useAuth } from '@/components/AuthContext'; import { useBoardConfig } from '@/hooks/useBoardConfig'; import MenuItem from '@mui/material/MenuItem'; +import FileUpload from '@/components/FileUpload'; async function submitWrite(bo_table, formData, isLogin) { const url = `${process.env.NEXT_PUBLIC_API_BASE_URL}/api/v1/boards/${bo_table}/writes`; @@ -53,6 +54,7 @@ export default function WritePage({ params }) { const theme = useTheme(); const { isLogin, memberInfo } = useAuth(); const { boardConfig, loading, error: boardError } = useBoardConfig(bo_table); + let wr_id = null; // console.log(boardConfig); const [formValues, setFormValues] = useState({ @@ -75,6 +77,8 @@ export default function WritePage({ params }) { }); const [error, setError] = useState(''); + const [file1, setFile1] = useState(null); + const [file2, setFile2] = useState(null); useEffect(() => { if (memberInfo) { @@ -112,10 +116,40 @@ export default function WritePage({ params }) { } try { - await submitWrite(bo_table, formValues, isLogin); - router.push(`/board/${bo_table}`); + const response = await submitWrite(bo_table, formValues, isLogin); + + // 게시글이 작성된 후 wr_id를 받아서 file upload를 진행, upload할 파일이 없으면 게시글로 이동 + if (response.result === "created") { + wr_id = response.wr_id; + const fileUrl = `${process.env.NEXT_PUBLIC_API_BASE_URL}/api/v1/boards/${bo_table}/writes/${wr_id}/files`; + const formData = new FormData(); + file1 && formData.append('file1', file1); + file2 && formData.append('file2', file2); + if (file1 || file2) { + const fileResponse = await axios.post(fileUrl, formData, { + headers: { + 'Content-Type': 'multipart/form-data', + } + }); + if (fileResponse.data.result !== "uploaded") { + alert('게시글 작성 후 파일 업로드 중 오류가 발생했습니다.'); + console.log(fileResponse) + } + } + } else { + alert(response); + console.log(response); + } + router.push(`/board/${bo_table}/${wr_id}`); } catch (error) { console.error('Error submitting write:', error); + + // 게시글 작성은 성공했지만 파일 업로드 중 오류가 발생한 경우는 alert후 게시글로 이동 + if (wr_id) { + alert('게시글 작성 후 파일 업로드 중 오류가 발생했습니다.'); + router.push(`/board/${bo_table}/${wr_id}`); + } + if (error.response && error.response.data && error.response.data.detail) { // detail이 배열인 경우 모든 에러 메시지를 결합 if (Array.isArray(error.response.data.detail)) { @@ -403,6 +437,20 @@ export default function WritePage({ params }) { label="댓글 사용 여부" /> + { + boardConfig.board.bo_upload_level == 1 || boardConfig.board.bo_upload_level <= memberInfo?.mb_level + ? ( + <> + + setFile1(file)} /> + + + setFile2(file)} /> + + + ) + : null + } {error && {error}} + + + {fileName ? `Selected file: ${fileName}` : '선택된 파일이 없습니다.'} + + + ); +} \ No newline at end of file