(() => { 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) => ` ` ) .join("")}
구분 특약점명 연락처
${item.managementDistriction} ${item.dealerName} ${item.contact}
`; }; 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(); })();