Merge branch 'board_comment5'

This commit is contained in:
nevermoregb 2025-03-17 09:21:25 +09:00
commit 5c39cb3dad
3 changed files with 96 additions and 30 deletions

View File

@ -0,0 +1,44 @@
/*
작성자 : 박성용
작성일 : 2025-03-14
수정자 :
수정일 :
설명 : 게시글 수정 비밀번호 적재용.
*/
import { ref, computed, watch } from 'vue';
import { defineStore } from 'pinia';
export const useBoardAccessStore = defineStore(
'access',
() => {
const password = ref('');
if (localStorage.getItem('tempPassword')) {
// 저장된 값을 불러와 상태에 할당
const storedState = JSON.parse(localStorage.getItem('tempPassword'));
password.value = storedState;
}
watch(password, newValue => {
localStorage.setItem('tempPassword', JSON.stringify(newValue.value));
});
function setBoardPassword(input) {
password.value = input;
}
function $reset() {
password.value = '';
localStorage.removeItem('tempPassword', newValue);
}
return {
password,
setBoardPassword,
$reset,
};
},
{
persist: true,
},
);

View File

@ -85,11 +85,13 @@
import { ref, onMounted, computed, watch, inject } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useToastStore } from '@s/toastStore';
import { useBoardAccessStore } from '@s/useBoardAccessStore';
import axios from '@api';
//
const $common = inject('common');
const toastStore = useToastStore();
const accessStore = useBoardAccessStore();
//
const title = ref('');
@ -117,22 +119,30 @@
//
const fetchBoardDetails = async () => {
try {
const response = await axios.get(`board/${currentBoardId.value}`);
const data = response.data.data;
//
const password = accessStore.password.value;
const params = {
password: password || '',
};
console.log('params: ', params);
//const response = await axios.get(`board/${currentBoardId.value}`);
const { data } = await axios.post(`board/${currentBoardId.value}`, params);
//
if (data.hasAttachment && data.attachments.length > 0) {
attachFiles.value = addDisplayFileName([...data.attachments]);
}
//
title.value = data.title || '제목 없음';
content.value = data.content || '내용 없음';
contentLoaded.value = true;
} catch (error) {
console.error('게시물 가져오기 오류:', error.response || error.message);
if (data.code !== 200) {
toastStore.onToast(data.message, 'e');
router.go(-1);
return;
}
const boardData = data.data;
//
if (boardData.hasAttachment && boardData.attachments.length > 0) {
attachFiles.value = addDisplayFileName([...boardData.attachments]);
}
//
title.value = boardData.title || '제목 없음';
content.value = boardData.content || '내용 없음';
contentLoaded.value = true;
};
//
@ -254,7 +264,7 @@
};
//
onMounted(() => {
onMounted(async () => {
if (currentBoardId.value) {
fetchBoardDetails();
} else {

View File

@ -139,6 +139,7 @@
import { useRoute, useRouter } from 'vue-router';
import { useUserInfoStore } from '@/stores/useUserInfoStore';
import { useToastStore } from '@s/toastStore';
import { useBoardAccessStore } from '@s/useBoardAccessStore';
import axios from '@api';
const $common = inject('common');
@ -161,6 +162,8 @@
const router = useRouter();
const userStore = useUserInfoStore();
const toastStore = useToastStore();
const accessStore = useBoardAccessStore();
const currentBoardId = ref(Number(route.params.id));
const unknown = computed(() => profileName.value === '익명');
const currentUserId = computed(() => userStore?.user?.id); // id
@ -242,21 +245,25 @@
//
const fetchBoardDetails = async () => {
const response = await axios.get(`board/${currentBoardId.value}`);
const data = response.data.data;
profileName.value = data.author || '익명';
authorId.value = data.authorId;
boardTitle.value = data.title || '제목 없음';
boardContent.value = data.content || '';
profileImg.value = data.profileImg || '';
date.value = data.date || '';
views.value = data.cnt || 0;
likes.value = data.likeCount || 0;
dislikes.value = data.dislikeCount || 0;
attachment.value = data.hasAttachment || null;
commentNum.value = data.commentCount || 0;
attachments.value = data.attachments || [];
const { data } = await axios.get(`board/${currentBoardId.value}`);
if (data?.data) {
const boardData = data.data;
profileName.value = boardData.author || '익명';
authorId.value = boardData.authorId;
boardTitle.value = boardData.title || '제목 없음';
boardContent.value = boardData.content || '';
profileImg.value = boardData.profileImg || '';
date.value = boardData.date || '';
views.value = boardData.cnt || 0;
likes.value = boardData.likeCount || 0;
dislikes.value = boardData.dislikeCount || 0;
attachment.value = boardData.hasAttachment || null;
commentNum.value = boardData.commentCount || 0;
attachments.value = boardData.attachments || [];
} else {
toastStore.onToast(data.message, 'e');
router.back();
}
};
// ,
@ -609,14 +616,19 @@
});
if (response.data.code === 200 && response.data.data === true) {
accessStore.setBoardPassword(password);
console.log('password: ', password.value);
console.log('accessStore.password: ', accessStore.password.value);
boardPasswordAlert.value = '';
isPassword.value = false;
if (lastClickedButton.value === 'edit') {
router.push({ name: 'BoardEdit', params: { id: currentBoardId.value } });
return;
} else if (lastClickedButton.value === 'delete') {
await deletePost();
}
accessStore.$reset();
lastClickedButton.value = null;
} else {
boardPasswordAlert.value = '비밀번호가 일치하지 않습니다.';