Merge branch 'boardmodify3'
This commit is contained in:
commit
9c01a84749
@ -16,7 +16,7 @@
|
|||||||
@updateReaction="handleUpdateReaction"
|
@updateReaction="handleUpdateReaction"
|
||||||
/>
|
/>
|
||||||
<!-- 댓글 비밀번호 입력창 (익명일 경우) -->
|
<!-- 댓글 비밀번호 입력창 (익명일 경우) -->
|
||||||
<div v-if="currentPasswordCommentId === comment.commentId && unknown" class="mt-3 w-25 ms-auto">
|
<div v-if="currentPasswordCommentId === comment.commentId && unknown && comment.author == '익명'" class="mt-3 w-25 ms-auto">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input
|
<input
|
||||||
type="password"
|
type="password"
|
||||||
@ -52,11 +52,7 @@
|
|||||||
|
|
||||||
<!-- 대댓글 -->
|
<!-- 대댓글 -->
|
||||||
<ul v-if="comment.children && comment.children.length" class="list-unstyled">
|
<ul v-if="comment.children && comment.children.length" class="list-unstyled">
|
||||||
<li
|
<li v-for="child in comment.children" :key="child.commentId" class="mt-8 pt-6 ps-10 border-top">
|
||||||
v-for="child in comment.children"
|
|
||||||
:key="child.commentId"
|
|
||||||
class="mt-8 pt-6 ps-10 border-top"
|
|
||||||
>
|
|
||||||
<BoardComment
|
<BoardComment
|
||||||
:comment="child"
|
:comment="child"
|
||||||
:unknown="child.author === '익명'"
|
:unknown="child.author === '익명'"
|
||||||
@ -112,11 +108,11 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
isEditTextarea: {
|
isEditTextarea: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false,
|
||||||
},
|
},
|
||||||
isDeleted: {
|
isDeleted: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false,
|
||||||
},
|
},
|
||||||
isCommentPassword: {
|
isCommentPassword: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -124,18 +120,27 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
passwordCommentAlert: {
|
passwordCommentAlert: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: '',
|
||||||
},
|
},
|
||||||
currentPasswordCommentId: {
|
currentPasswordCommentId: {
|
||||||
type: Number
|
type: Number,
|
||||||
},
|
},
|
||||||
password: {
|
password: {
|
||||||
type: String
|
type: String,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// emits 정의
|
// emits 정의
|
||||||
const emit = defineEmits(['submitComment', 'updateReaction', 'editClick', 'deleteClick', 'submitPassword', 'submitEdit', 'cancelEdit', 'update:password']);
|
const emit = defineEmits([
|
||||||
|
'submitComment',
|
||||||
|
'updateReaction',
|
||||||
|
'editClick',
|
||||||
|
'deleteClick',
|
||||||
|
'submitPassword',
|
||||||
|
'submitEdit',
|
||||||
|
'cancelEdit',
|
||||||
|
'update:password',
|
||||||
|
]);
|
||||||
|
|
||||||
const localEditedContent = ref(props.comment.content);
|
const localEditedContent = ref(props.comment.content);
|
||||||
|
|
||||||
@ -146,19 +151,18 @@ const toggleComment = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 부모 컴포넌트에 대댓글 추가 요청
|
// 부모 컴포넌트에 대댓글 추가 요청
|
||||||
const submitComment = (newComment) => {
|
const submitComment = newComment => {
|
||||||
emit('submitComment', { parentId: props.comment.commentId, ...newComment, LOCBRDTYP: newComment.LOCBRDTYP });
|
emit('submitComment', { parentId: props.comment.commentId, ...newComment, LOCBRDTYP: newComment.LOCBRDTYP });
|
||||||
isComment.value = false;
|
isComment.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 좋아요, 싫어요
|
// 좋아요, 싫어요
|
||||||
const handleUpdateReaction = (reactionData) => {
|
const handleUpdateReaction = reactionData => {
|
||||||
emit('updateReaction', {
|
emit('updateReaction', {
|
||||||
boardId: props.comment.boardId,
|
boardId: props.comment.boardId,
|
||||||
commentId: props.comment.commentId || reactionData.commentId,
|
commentId: props.comment.commentId || reactionData.commentId,
|
||||||
...reactionData,
|
...reactionData,
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 비밀번호 확인
|
// 비밀번호 확인
|
||||||
@ -166,11 +170,14 @@ const logPasswordAndEmit = () => {
|
|||||||
emit('submitPassword', props.comment, props.password);
|
emit('submitPassword', props.comment, props.password);
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(() => props.comment.isEditTextarea, (newVal) => {
|
watch(
|
||||||
|
() => props.comment.isEditTextarea,
|
||||||
|
newVal => {
|
||||||
if (newVal) {
|
if (newVal) {
|
||||||
localEditedContent.value = props.comment.content;
|
localEditedContent.value = props.comment.content;
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|
||||||
// watch(() => props.comment.isDeleted, () => {
|
// watch(() => props.comment.isDeleted, () => {
|
||||||
// console.log("BoardComment - isDeleted 상태 변경됨:", newVal);
|
// console.log("BoardComment - isDeleted 상태 변경됨:", newVal);
|
||||||
@ -188,10 +195,9 @@ const submitEdit = () => {
|
|||||||
|
|
||||||
const handleEditClick = () => {
|
const handleEditClick = () => {
|
||||||
emit('editClick', props.comment);
|
emit('editClick', props.comment);
|
||||||
}
|
};
|
||||||
|
|
||||||
const handleReplyEditClick = (comment) => {
|
const handleReplyEditClick = comment => {
|
||||||
emit('editClick', comment);
|
emit('editClick', comment);
|
||||||
}
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
</div> -->
|
</div> -->
|
||||||
<!-- 텍스트박스 -->
|
<!-- 텍스트박스 -->
|
||||||
<div class="w-100">
|
<div class="w-100">
|
||||||
<textarea class="form-control" placeholder="댓글 달기" rows="3" v-model="comment"></textarea>
|
<textarea class="form-control" placeholder="댓글 달기" rows="3" :maxlength="maxLength" v-model="comment"></textarea>
|
||||||
<span v-if="commentAlert" class="invalid-feedback d-block text-start ms-2">{{ commentAlert }}</span>
|
<span v-if="commentAlert" class="invalid-feedback d-block text-start ms-2">{{ commentAlert }}</span>
|
||||||
<span v-else class="invalid-feedback d-block text-start ms-2">{{ textAlert }}</span>
|
<span v-else class="invalid-feedback d-block text-start ms-2">{{ textAlert }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -71,6 +71,10 @@ const props = defineProps({
|
|||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
maxLength: {
|
||||||
|
type: Number,
|
||||||
|
default: 500,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const $common = inject('common');
|
const $common = inject('common');
|
||||||
@ -122,7 +126,6 @@ watch(
|
|||||||
if (!props.passwordAlert) {
|
if (!props.passwordAlert) {
|
||||||
resetCommentForm();
|
resetCommentForm();
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<ul class="list-unstyled mt-10">
|
<ul class="list-unstyled mt-10">
|
||||||
<li
|
<li v-for="comment in comments" :key="comment.commentId" class="mt-6 border-bottom pb-6">
|
||||||
v-for="comment in comments"
|
|
||||||
:key="comment.commentId"
|
|
||||||
class="mt-6 border-bottom pb-6"
|
|
||||||
>
|
|
||||||
<BoardComment
|
<BoardComment
|
||||||
:unknown="unknown"
|
:unknown="unknown"
|
||||||
:comment="comment"
|
:comment="comment"
|
||||||
@ -21,7 +17,7 @@
|
|||||||
@submitComment="submitComment"
|
@submitComment="submitComment"
|
||||||
@submitEdit="handleSubmitEdit"
|
@submitEdit="handleSubmitEdit"
|
||||||
@cancelEdit="handleCancelEdit"
|
@cancelEdit="handleCancelEdit"
|
||||||
@updateReaction="(reactionData) => handleUpdateReaction(reactionData, comment.commentId, comment.boardId)"
|
@updateReaction="reactionData => handleUpdateReaction(reactionData, comment.commentId, comment.boardId)"
|
||||||
@update:password="updatePassword"
|
@update:password="updatePassword"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
@ -30,13 +26,13 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineProps, defineEmits } from 'vue';
|
import { defineProps, defineEmits } from 'vue';
|
||||||
import BoardComment from './BoardComment.vue'
|
import BoardComment from './BoardComment.vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
comments: {
|
comments: {
|
||||||
type: Array,
|
type: Array,
|
||||||
required: true,
|
required: true,
|
||||||
default: () => []
|
default: () => [],
|
||||||
},
|
},
|
||||||
unknown: {
|
unknown: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -60,19 +56,28 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
passwordCommentAlert: {
|
passwordCommentAlert: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: '',
|
||||||
},
|
},
|
||||||
currentPasswordCommentId: {
|
currentPasswordCommentId: {
|
||||||
type: Number
|
type: Number,
|
||||||
},
|
},
|
||||||
password: {
|
password: {
|
||||||
type: String
|
type: String,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['submitComment', 'updateReaction', 'editClick', 'deleteClick', 'submitPassword', 'clearPassword','submitEdit', 'update:password']);
|
const emit = defineEmits([
|
||||||
|
'submitComment',
|
||||||
|
'updateReaction',
|
||||||
|
'editClick',
|
||||||
|
'deleteClick',
|
||||||
|
'submitPassword',
|
||||||
|
'clearPassword',
|
||||||
|
'submitEdit',
|
||||||
|
'update:password',
|
||||||
|
]);
|
||||||
|
|
||||||
const submitComment = (replyData) => {
|
const submitComment = replyData => {
|
||||||
emit('submitComment', replyData);
|
emit('submitComment', replyData);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -84,13 +89,13 @@ const handleUpdateReaction = (reactionData, commentId, boardId) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
emit('updateReaction', updatedReactionData);
|
emit('updateReaction', updatedReactionData);
|
||||||
}
|
};
|
||||||
|
|
||||||
const submitPassword = (comment, password) => {
|
const submitPassword = (comment, password) => {
|
||||||
emit('submitPassword', comment, password);
|
emit('submitPassword', comment, password);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleEditClick = (comment) => {
|
const handleEditClick = comment => {
|
||||||
if (comment.parentId) {
|
if (comment.parentId) {
|
||||||
emit('editClick', comment); // 대댓글
|
emit('editClick', comment); // 대댓글
|
||||||
} else {
|
} else {
|
||||||
@ -99,10 +104,10 @@ const handleEditClick = (comment) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleSubmitEdit = (comment, editedContent) => {
|
const handleSubmitEdit = (comment, editedContent) => {
|
||||||
emit("submitEdit", comment, editedContent);
|
emit('submitEdit', comment, editedContent);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDeleteClick = (comment) => {
|
const handleDeleteClick = comment => {
|
||||||
if (comment.parentId) {
|
if (comment.parentId) {
|
||||||
emit('deleteClick', comment); // 대댓글 삭제
|
emit('deleteClick', comment); // 대댓글 삭제
|
||||||
} else {
|
} else {
|
||||||
@ -110,7 +115,7 @@ const handleDeleteClick = (comment) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCancelEdit = (comment) => {
|
const handleCancelEdit = comment => {
|
||||||
if (comment.parentId) {
|
if (comment.parentId) {
|
||||||
emit('cancelEdit', comment); // 대댓글 수정 취소
|
emit('cancelEdit', comment); // 대댓글 수정 취소
|
||||||
} else {
|
} else {
|
||||||
@ -118,7 +123,7 @@ const handleCancelEdit = (comment) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const updatePassword = (newPassword) => {
|
const updatePassword = newPassword => {
|
||||||
emit('update:password', newPassword);
|
emit('update:password', newPassword);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -40,7 +40,7 @@
|
|||||||
const defaultProfile = '/img/icons/icon.png';
|
const defaultProfile = '/img/icons/icon.png';
|
||||||
|
|
||||||
// 서버의 이미지 경로 (Vue 환경 변수 사용 가능)
|
// 서버의 이미지 경로 (Vue 환경 변수 사용 가능)
|
||||||
const baseUrl = 'http://localhost:10325/'; // API 서버 URL
|
const baseUrl = import.meta.env.VITE_SERVER; // API 서버 URL
|
||||||
|
|
||||||
// Props 정의
|
// Props 정의
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -92,6 +92,7 @@
|
|||||||
:unknown="unknown"
|
:unknown="unknown"
|
||||||
:commentAlert="commentAlert"
|
:commentAlert="commentAlert"
|
||||||
:passwordAlert="passwordAlert"
|
:passwordAlert="passwordAlert"
|
||||||
|
:maxLength="500"
|
||||||
@submitComment="handleCommentSubmit"
|
@submitComment="handleCommentSubmit"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -237,7 +238,6 @@
|
|||||||
const data = response.data.data;
|
const data = response.data.data;
|
||||||
|
|
||||||
profileName.value = data.author || '익명';
|
profileName.value = data.author || '익명';
|
||||||
console.log(data.author);
|
|
||||||
authorId.value = data.authorId;
|
authorId.value = data.authorId;
|
||||||
boardTitle.value = data.title || '제목 없음';
|
boardTitle.value = data.title || '제목 없음';
|
||||||
boardContent.value = data.content || '';
|
boardContent.value = data.content || '';
|
||||||
@ -580,7 +580,7 @@
|
|||||||
LOCBRDPWD: password.value,
|
LOCBRDPWD: password.value,
|
||||||
LOCBRDSEQ: currentBoardId.value,
|
LOCBRDSEQ: currentBoardId.value,
|
||||||
});
|
});
|
||||||
console.log('response: ', response);
|
|
||||||
if (response.data.code === 200 && response.data.data === true) {
|
if (response.data.code === 200 && response.data.data === true) {
|
||||||
password.value = '';
|
password.value = '';
|
||||||
isPassword.value = false;
|
isPassword.value = false;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user