diff --git a/src/api/boardApi.js b/src/api/boardApi.js index 3aba149..8bed804 100644 --- a/src/api/boardApi.js +++ b/src/api/boardApi.js @@ -58,6 +58,13 @@ export const boardApi = { recommenders(id) { return http.get(`/board/posts/${id}/recommenders`) }, + // 신고 (누적 5건 시 블라인드) + reportPost(id) { + return http.post(`/board/posts/${id}/report`) + }, + reportComment(commentId) { + return http.post(`/board/comments/${commentId}/report`) + }, block(id, reason) { return http.post(`/board/posts/${id}/block`, { reason }) }, diff --git a/src/views/board/BoardDetailView.vue b/src/views/board/BoardDetailView.vue index 1550f5f..4606fd0 100644 --- a/src/views/board/BoardDetailView.vue +++ b/src/views/board/BoardDetailView.vue @@ -126,6 +126,28 @@ async function removeComment(c) { } } +// ===== 신고 ===== +async function reportPost() { + if (!(await dialog.confirm('이 게시글을 신고하시겠어요?\n신고가 누적되면 자동으로 블라인드 처리됩니다.', { title: '게시글 신고', danger: true }))) return + try { + await boardApi.reportPost(postId) + await dialog.alert('신고가 접수되었습니다.') + await load() + } catch (e) { + alert(e.response?.data?.message || '신고에 실패했습니다.') + } +} +async function reportComment(c) { + if (!(await dialog.confirm('이 댓글을 신고하시겠어요?\n신고가 누적되면 자동으로 블라인드 처리됩니다.', { title: '댓글 신고', danger: true }))) return + try { + await boardApi.reportComment(c.id) + await dialog.alert('신고가 접수되었습니다.') + await refreshComments() + } catch (e) { + alert(e.response?.data?.message || '신고에 실패했습니다.') + } +} + // 댓글 목록만 새로고침 (다른 사람이 단 댓글·추천 반영) const refreshingComments = ref(false) async function refreshComments() { @@ -278,6 +300,11 @@ onMounted(load)