-
+
+
일반게시판
+
@@ -62,6 +73,22 @@ import axios from '@api';
const generalList = ref([]);
const noticeList = ref([]);
const searchText = ref('');
+const selectedOrder = ref('');
+const sortDirection = ref('desc');
+const pagination = ref({
+ currentPage: 1,
+ pages: 1,
+ prePage: 0,
+ nextPage: 1,
+ isFirstPage: true,
+ isLastPage: false,
+ hasPreviousPage: false,
+ hasNextPage: false,
+ navigatePages: 10,
+ navigatepageNums: [1],
+ navigateFirstPage: 1,
+ navigateLastPage: 1
+});
// 상세 페이지 이동
const goDetail = (id) => {
@@ -71,86 +98,101 @@ const goDetail = (id) => {
// 검색 처리
const search = (e) => {
searchText.value = e.trim();
+ fetchGeneralPosts(1);
+ fetchNoticePosts(searchText.value);
};
-// 검색 결과 필터링(일반게시물)
-const filteredList = computed(() =>
- generalList.value.filter((item) =>
- item.title.toLowerCase().includes(searchText.value.toLowerCase())
- )
-);
-
-// 검색 결과 필터링(공지사항)
-const filteredList2 = computed(() =>
- noticeList.value.filter((item) =>
- item.title.toLowerCase().includes(searchText.value.toLowerCase())
- )
-);
-
-// 페이지네이션 상태
-const currentPage = ref(1); // 현재 페이지 번호
-const itemsPerPage = 10; // 한 페이지에 표시할 아이템 수
-
-// 현재 페이지 데이터 계산
-const paginatedList = computed(() => {
- const start = (currentPage.value - 1) * itemsPerPage;
- const end = start + itemsPerPage;
- return filteredList.value.slice(start, end);
-});
-
-// 총 페이지 수 계산
-const totalPages = computed(() => {
- return Math.ceil(filteredList.value.length / itemsPerPage);
-});
-
-// 페이지 변경 함수
-const changePage = (page) => {
- if (page >= 1 && page <= totalPages.value) {
- currentPage.value = page;
- }
+// 정렬 변경 핸들러
+const handleSortChange = (event) => {
+ const value = event.target.value;
+ if (value === 'view') {
+ selectedOrder.value = 'view';
+ sortDirection.value = 'desc';
+ } else if (value === 'date') {
+ selectedOrder.value = 'date';
+ sortDirection.value = 'desc';
+ } else {
+ selectedOrder.value = '';
+ sortDirection.value = 'desc';
+ };
+ fetchGeneralPosts(1);
};
// 게시물 데이터 로드(일반)
-const fetchPosts = async () => {
- const response = await axios.get("board/general");
+const fetchGeneralPosts = async (page = 1) => {
+ const response = await axios.get("board/general", {
+ params: {
+ page: page,
+ orderBy: selectedOrder.value,
+ sortDirection: sortDirection.value,
+ searchKeyword: searchText.value
+ }
+ });
- if (response.data && response.data.data && Array.isArray(response.data.data.list)) {
- generalList.value = response.data.data.list.map((post, index) => ({
+ if (response.data && response.data.data) {
+ const data = response.data.data;
+ // 게시물 리스트 업데이트
+ generalList.value = data.list.map((post, index) => ({
...post,
id: post.id || index,
img: post.img || null,
- likes: post.likes || 0,
- comments: post.comments || 0,
+ views: post.cnt || 0,
+ likes: post.likeCount || 0,
+ comments: post.commentCount || 0,
}));
+
+ // 페이지네이션 정보 업데이트
+ pagination.value = {
+ currentPage: data.pageNum,
+ pages: data.pages,
+ prePage: data.prePage,
+ nextPage: data.nextPage,
+ isFirstPage: data.isFirstPage,
+ isLastPage: data.isLastPage,
+ hasPreviousPage: data.hasPreviousPage,
+ hasNextPage: data.hasNextPage,
+ navigatePages: data.navigatePages,
+ navigatepageNums: data.navigatepageNums,
+ navigateFirstPage: data.navigateFirstPage,
+ navigateLastPage: data.navigateLastPage
+ };
} else {
console.error("데이터 오류:", response.data);
}
};
-const fetchPosts2 = async () => {
- const response = await axios.get("board/notices");
+// 게시물 데이터 로드(공지사항)
+const fetchNoticePosts = async () => {
+ const response = await axios.get("board/notices", {
+ params: {
+ searchKeyword: searchText.value
+ }
+ });
if (response.data && response.data.data && Array.isArray(response.data.data)) {
noticeList.value = response.data.data.map((post, index) => ({
...post,
id: post.id || index,
img: post.img || null,
- likes: post.likes || 0,
- comments: post.comments || 0,
+ views: post.cnt || 0,
+ likes: post.likeCount || 0,
+ comments: post.commentCount || 0,
}));
} else {
console.error("데이터 오류:", response.data);
}
};
+// 페이지 변경
+const handlePageChange = (page) => {
+ if (page !== pagination.value.currentPage) {
+ fetchGeneralPosts(page);
+ }
+};
+
// 데이터 로드
onMounted(() => {
- fetchPosts();
- fetchPosts2();
+ fetchGeneralPosts();
+ fetchNoticePosts();
});
-
-
-