(() => {
const API_URL = DSDOENV.ApiConfig.DSDO_API + "/api/v1/post/dealer";
const tabItems = [
{ label: "서울", value: 1 },
{ label: "광역시", value: 2 },
{ label: "경기", value: 3 },
{ label: "강원", value: 4 },
{ label: "충북", value: 5 },
{ label: "충남", value: 6 },
{ label: "전북", value: 7 },
{ label: "전남", value: 8 },
{ label: "경북", value: 9 },
{ label: "경남", value: 10 },
{ label: "제주", value: 11 },
];
let currentPage = 1;
let selectedCategory = 1; // 초기 카테고리를 "서울"로 설정
const itemsPerPage = 10;
let totalPages = 0; // totalPages를 전역 변수로 설정
const fetchDealerData = async (
page = 1,
size = itemsPerPage,
category = null
) => {
try {
const categoryQuery = category ? `&dealerRegion=${category}` : "";
const response = await fetch(
`${API_URL}?page=${page - 1}&size=${size}${categoryQuery}`,
{
method: "GET",
headers: {
"Content-Type": "application/json",
},
}
);
if (!response.ok) {
throw new Error("API 요청 실패");
}
const data = await response.json();
if (!data.totalPages) {
console.error("API 응답에서 totalPages를 찾을 수 없습니다.");
return null;
}
return data;
} catch (error) {
console.error("API 요청 중 오류:", error);
return null;
}
};
const renderCategoryList = () => {
const categoryContainer = document.querySelector(".special-category-list");
categoryContainer.innerHTML = tabItems
.map(
(item) =>
``
)
.join("");
};
const renderTable = (content) => {
const tableContainer = document.querySelector(".special-list-table");
if (content.length === 0) {
tableContainer.innerHTML = `
데이터가 없습니다.
`;
return;
}
tableContainer.innerHTML = `
| 구분 |
특약점명 |
연락처 |
${content
.map(
(item) => `
| ${item.managementDistriction} |
${item.dealerName} |
${item.contact} |
`
)
.join("")}
`;
};
const renderPagination = () => {
const paginationContainer = document.querySelector(".pagination");
if (totalPages <= 1) {
paginationContainer.innerHTML = "";
return;
}
paginationContainer.innerHTML = `
${Array.from({ length: totalPages }, (_, index) => {
const page = index + 1;
return ``;
}).join("")}
`;
};
const loadData = async (page = 1, category = null) => {
const data = await fetchDealerData(page, itemsPerPage, category);
if (!data) {
alert("데이터 로드 중 오류가 발생했습니다.");
return;
}
const { content } = data;
totalPages = data.totalPages; // totalPages를 전역 변수에 저장
renderTable(content);
renderPagination();
};
const addEventListeners = () => {
// 카테고리 클릭 이벤트
document
.querySelector(".special-category-list")
.addEventListener("click", (event) => {
if (event.target.classList.contains("special-category-item")) {
selectedCategory = Number(event.target.dataset.value);
currentPage = 1;
renderCategoryList();
loadData(currentPage, selectedCategory);
}
});
// 페이징 클릭 이벤트
document.querySelector(".pagination").addEventListener("click", (event) => {
const target = event.target.closest(".pagination-button");
if (!target) return;
if (target.classList.contains("prev-page") && currentPage > 1) {
currentPage -= 1;
loadData(currentPage, selectedCategory);
} else if (
target.classList.contains("next-page") &&
currentPage < totalPages
) {
currentPage += 1;
loadData(currentPage, selectedCategory);
} else if (target.dataset.page) {
const page = Number(target.dataset.page);
if (page !== currentPage) {
currentPage = page;
loadData(currentPage, selectedCategory);
}
}
});
};
const initialize = () => {
renderCategoryList();
loadData(currentPage, selectedCategory);
addEventListeners();
};
initialize();
})();