diff --git a/src/components/AdminManagement.js b/src/components/AdminManagement.js index 880a2db..896865a 100644 --- a/src/components/AdminManagement.js +++ b/src/components/AdminManagement.js @@ -20,6 +20,8 @@ const AdminManagement = () => { const [isAuthorized, setIsAuthorized] = useState(true); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); + const [pageGroup, setPageGroup] = useState(0); + const pagesPerGroup = 10; const itemsPerPage = 10; useEffect(() => { @@ -50,24 +52,41 @@ const AdminManagement = () => { const fetchAdmins = async (page) => { try { - const token = localStorage.getItem("token").replace("Bearer ", "").trim(); + const token = localStorage + .getItem("token") + ?.replace("Bearer ", "") + .trim(); const response = await axios.get( `${API_BASE_URL}/list?page=${page - 1}&size=${itemsPerPage}`, - { - headers: { Authorization: `Bearer ${token}` }, - } + { headers: { Authorization: `Bearer ${token}` } } ); - setAdmins(response.data.content); - setTotalPages(response.data.totalPages); + console.log("πŸ“Œ API 응닡 데이터:", response.data); + + let fetchedAdmins = []; + if (Array.isArray(response.data)) { + fetchedAdmins = response.data; + } else if (response.data && Array.isArray(response.data.content)) { + fetchedAdmins = response.data.content; + } else { + console.warn("⚠️ API 응닡이 μ˜ˆμƒκ³Ό 닀름. κΈ°λ³Έκ°’ [] μ„€μ •"); + fetchedAdmins = []; + } + + setAdmins(fetchedAdmins); + setTotalPages(response.data.totalPages || 1); } catch (error) { console.error("❌ κ΄€λ¦¬μž λͺ©λ‘ 뢈러였기 μ‹€νŒ¨:", error); + setAdmins([]); } }; const fetchAdminByEmail = async (email) => { try { - const token = localStorage.getItem("token").replace("Bearer ", "").trim(); + const token = localStorage + .getItem("token") + ?.replace("Bearer ", "") + .trim(); const response = await axios.get( `${API_BASE_URL}/search?email=${email}`, { @@ -75,13 +94,21 @@ const AdminManagement = () => { } ); - if (response.data) { + console.log("πŸ“Œ 검색 API 응닡 데이터:", response.data); + + if (Array.isArray(response.data)) { + setAdmins(response.data); + } else if (response.data) { setAdmins([response.data]); - setTotalPages(1); + } else { + console.warn("⚠️ 검색 κ²°κ³Ό μ—†μŒ"); + setAdmins([]); } + + setTotalPages(1); } catch (error) { console.error("❌ κ΄€λ¦¬μž 검색 μ‹€νŒ¨:", error); - alert("ν•΄λ‹Ή μ΄λ©”μΌμ˜ κ΄€λ¦¬μžλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."); + alert("⚠️ ν•΄λ‹Ή μ΄λ©”μΌμ˜ κ΄€λ¦¬μžλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."); } }; @@ -103,6 +130,23 @@ const AdminManagement = () => { setCurrentPage(page); }; + const handlePrevPageGroup = () => { + if (pageGroup > 0) { + setPageGroup(pageGroup - 1); + } + }; + + const handleNextPageGroup = () => { + if ((pageGroup + 1) * pagesPerGroup < totalPages) { + setPageGroup(pageGroup + 1); + } + }; + + const pageNumbers = Array.from( + { length: pagesPerGroup }, + (_, i) => pageGroup * pagesPerGroup + i + 1 + ).filter((page) => page <= totalPages); + const closeModal = () => { setIsEditModalOpen(false); setIsDeleteModalOpen(false); @@ -155,10 +199,8 @@ const AdminManagement = () => { alert("βœ… κ΄€λ¦¬μž μΆ”κ°€ μ™„λ£Œ!"); setNewAdmin({ email: "", password: "", role: "NORMAL" }); - const response = await axios.get(`${API_BASE_URL}/list`, { - headers: { Authorization: `Bearer ${token}` }, - }); - setAdmins(response.data); + setCurrentPage(1); + await fetchAdmins(1); closeModal(); } catch (error) { console.error("❌ κ΄€λ¦¬μž μΆ”κ°€ μ‹€νŒ¨:", error); @@ -169,23 +211,23 @@ const AdminManagement = () => { const handleSaveRoleChange = async (e) => { e.preventDefault(); try { - const token = localStorage.getItem("token").replace("Bearer ", "").trim(); + const token = localStorage + .getItem("token") + ?.replace("Bearer ", "") + .trim(); await axios.patch( `${API_BASE_URL}/${selectedAdmin.id}/role`, { role: selectedAdmin.role }, { headers: { Authorization: `Bearer ${token}` } } ); - alert("κ΄€λ¦¬μž κΆŒν•œ λ³€κ²½ 성곡!"); + alert("βœ… κ΄€λ¦¬μž κΆŒν•œ λ³€κ²½ 성곡!"); closeModal(); - const response = await axios.get(`${API_BASE_URL}/list`, { - headers: { Authorization: `Bearer ${token}` }, - }); - setAdmins(response.data); + fetchAdmins(currentPage); } catch (error) { console.error("❌ κ΄€λ¦¬μž κΆŒν•œ λ³€κ²½ μ‹€νŒ¨:", error); - alert("κΆŒν•œ 변경에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."); + alert("⚠️ κΆŒν•œ 변경에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."); } }; @@ -210,49 +252,59 @@ const AdminManagement = () => {

κ΄€λ¦¬μž λͺ©λ‘

- {admins.map((admin) => ( -
-

- {admin.email} ( - {admin.role === "SUPER" ? "졜고 κ΄€λ¦¬μž" : "일반 κ΄€λ¦¬μž"}) -

-
- - {admin.role !== "SUPER" && ( + {Array.isArray(admins) && admins.length > 0 ? ( + admins.map((admin) => ( +
+

+ {admin.email} ( + {admin.role === "SUPER" ? "졜고 κ΄€λ¦¬μž" : "일반 κ΄€λ¦¬μž"}) +

+
- )} + {admin.role !== "SUPER" && ( + + )} +
-
- ))} + )) + ) : ( +

κ΄€λ¦¬μž λͺ©λ‘μ„ λΆˆλŸ¬μ˜€λŠ” 쀑...

+ )}
{totalPages > 1 && (
- {[...Array(totalPages)].map((_, index) => ( + {pageGroup > 0 && } + + {pageNumbers.map((page) => ( ))} + + {(pageGroup + 1) * pagesPerGroup < totalPages && ( + + )}
)} diff --git a/src/components/ClientManagement.js b/src/components/ClientManagement.js index 9fc7d1e..2be2e25 100644 --- a/src/components/ClientManagement.js +++ b/src/components/ClientManagement.js @@ -106,11 +106,28 @@ const ClientManagement = () => { console.log("πŸ” 검색 κ²°κ³Ό 응닡 데이터:", data); - const updatedClients = (data.content || data.contents || []).map( - (client) => ({ - ...client, - regionAddress: client.regionAddress || "μ£Όμ†Œ μ—†μŒ", - roadAddress: client.roadAddress || "μ£Όμ†Œ μ—†μŒ", + // βœ… μ’Œν‘œ λ³€ν™˜ μΆ”κ°€ + const updatedClients = await Promise.all( + (data.content || data.contents || []).map(async (client) => { + let lat = client.y ?? null; + let lng = client.x ?? null; + + if (!lat || !lng) { + console.log(`πŸ“ 고객(${client.name}) μ’Œν‘œ λ³€ν™˜ μ‹œλ„...`); + const coords = await fetchCoordinates( + client.roadAddress || client.regionAddress + ); + lat = coords.lat; + lng = coords.lng; + } + + return { + ...client, + regionAddress: client.regionAddress || "μ£Όμ†Œ μ—†μŒ", + roadAddress: client.roadAddress || "μ£Όμ†Œ μ—†μŒ", + lat, + lng, + }; }) ); @@ -150,6 +167,13 @@ const ClientManagement = () => { }; const handleClientSelect = async (client) => { + let genderValue = client.gender; + if (genderValue === "MALE") { + genderValue = "λ‚¨μž"; + } else if (genderValue === "FEMALE") { + genderValue = "μ—¬μž"; + } + console.log("πŸ“Œ μ„ νƒλœ 고객:", client); let updatedClient = { @@ -163,18 +187,20 @@ const ClientManagement = () => { client.latestRoadAddress || client.roadAddress || "μ£Όμ†Œ μ—†μŒ", gender: client.gender, age: client.age, - lat: client.x || client.lat || null, - lng: client.y || client.lng || null, + lat: client.y ?? client.lat ?? null, // βœ… y β†’ lat + lng: client.x ?? client.lng ?? null, // βœ… x β†’ lng }; + console.log("πŸ“Œ [μ„ νƒλœ 고객 ID]:", updatedClient.id); + let addressToSearch = updatedClient.roadAddress !== "μ£Όμ†Œ μ—†μŒ" ? updatedClient.roadAddress : updatedClient.regionAddress; + // βœ… μ’Œν‘œκ°€ μ—†μœΌλ©΄ Kakao APIλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€ν™˜ if (!updatedClient.lat || !updatedClient.lng) { console.log("πŸ“ 지도 μ’Œν‘œ μ—†μŒ, Kakao API둜 λ³€ν™˜ μ‹œλ„..."); - try { let coords = await fetchCoordinates(addressToSearch); console.log("πŸ“Œ λ³€ν™˜λœ Kakao μ’Œν‘œ:", coords); @@ -349,57 +375,32 @@ const ClientManagement = () => { }; const fetchCoordinates = async (address) => { - return new Promise(async (resolve, reject) => { - if (!REST_API_KEY) { - console.error("🚨 Kakao REST API ν‚€κ°€ μ„€μ •λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€!"); - reject("Kakao API ν‚€ 였λ₯˜"); - return; - } + if (!REST_API_KEY || !address) return { lat: 37.5665, lng: 126.978 }; - console.log(`πŸ“‘ Kakao API μ£Όμ†Œ 검색 μš”μ²­: ${address}`); - - const fetchFromKakaoAPI = async (query) => { - const response = await fetch( - `https://dapi.kakao.com/v2/local/search/address.json?query=${encodeURIComponent( - query.trim() - )}`, - { - method: "GET", - headers: { - Authorization: `KakaoAK ${REST_API_KEY}`, - "Content-Type": "application/json", - }, - } - ); - return response.json(); - }; - - try { - let data = await fetchFromKakaoAPI(address); - - if (!data.documents || data.documents.length === 0) { - console.warn("⚠️ λ„λ‘œλͺ… μ£Όμ†Œ λ³€ν™˜ μ‹€νŒ¨. μ§€λ²ˆ μ£Όμ†Œλ‘œ μž¬μ‹œλ„..."); - data = await fetchFromKakaoAPI(address); + try { + const response = await fetch( + `https://dapi.kakao.com/v2/local/search/address.json?query=${encodeURIComponent( + address + )}`, + { + method: "GET", + headers: { Authorization: `KakaoAK ${REST_API_KEY}` }, } + ); - if (data.documents && data.documents.length > 0) { - const coords = { - lat: parseFloat(data.documents[0].y), - lng: parseFloat(data.documents[0].x), - }; - console.log( - `πŸ“Œ λ³€ν™˜λœ Kakao μ’Œν‘œ: lat=${coords.lat}, lng=${coords.lng}` - ); - resolve(coords); - } else { - console.warn("⚠️ Kakao API 응닡 μ—†μŒ. κΈ°λ³Έ μ’Œν‘œ λ°˜ν™˜"); - resolve({ lat: 37.5665, lng: 126.978 }); - } - } catch (error) { - console.error("🚨 Kakao API μš”μ²­ μ‹€νŒ¨", error); - resolve({ lat: 37.5665, lng: 126.978 }); + const data = await response.json(); + if (data.documents?.length > 0) { + return { + lat: parseFloat(data.documents[0].y), + lng: parseFloat(data.documents[0].x), + }; + } else { + return { lat: 37.5665, lng: 126.978 }; } - }); + } catch (error) { + console.error("🚨 Kakao API μš”μ²­ μ‹€νŒ¨", error); + return { lat: 37.5665, lng: 126.978 }; + } }; const handleAddClient = async (e) => { @@ -412,13 +413,17 @@ const ClientManagement = () => { console.log("πŸ“Œ μΆ”κ°€ν•  고객 정보 (전솑 μ „):", newClient); + let convertedGender = newClient.gender; + if (newClient.gender === "MALE") convertedGender = "λ‚¨μž"; + if (newClient.gender === "FEMALE") convertedGender = "μ—¬μž"; + const userData = { name: newClient.name, email: newClient.email, phoneNumber: newClient.phone.replace(/-/g, ""), regionAddress: newClient.regionAddress || null, roadAddress: newClient.roadAddress || null, - gender: newClient.gender, + gender: convertedGender, age: parseInt(newClient.age, 10), }; @@ -465,11 +470,11 @@ const ClientManagement = () => { selectedClient.lat, selectedClient.lng ); - + console.log(selectedClient); console.log( "πŸ“Œ μ£Όμ†Œ 정보:", - selectedClient.road_Address, - selectedClient.region_Address + selectedClient.roadAddress, + selectedClient.regionAddress ); if ( @@ -534,10 +539,7 @@ const ClientManagement = () => { }; const handleOpenEditModal = () => { - setEditedClient({ - ...selectedClient, - gender: selectedClient.gender === "λ‚¨μž" ? "MALE" : "FEMALE", - }); + setEditedClient({ ...selectedClient }); setIsEditModalOpen(true); }; @@ -550,39 +552,79 @@ const ClientManagement = () => { setEditedClient((prev) => ({ ...prev, [name]: value })); }; - const handleSaveEdit = async () => { + const fetchUpdatedClient = async (clientId) => { try { let token = localStorage.getItem("token")?.trim(); + if (!token) throw new Error("둜그인이 ν•„μš”ν•©λ‹ˆλ‹€."); + const response = await fetch(`${API_BASE_URL}/api/users/${clientId}`, { + method: "GET", + headers: { Authorization: token }, + }); + + if (!response.ok) throw new Error("μ΅œμ‹  고객 정보λ₯Ό κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€."); + + const updatedClient = await response.json(); + + // Kakao μ’Œν‘œ λ³€ν™˜ 적용 + let coords = { lat: updatedClient.lat, lng: updatedClient.lng }; + if (!updatedClient.lat || !updatedClient.lng) { + console.log("πŸ“ Kakao APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ’Œν‘œ λ³€ν™˜ μ‹œλ„..."); + coords = await fetchCoordinates( + updatedClient.roadAddress || updatedClient.regionAddress + ); + } + + return { ...updatedClient, lat: coords.lat, lng: coords.lng }; + } catch (error) { + console.error("🚨 고객 정보 μ—…λ°μ΄νŠΈ 쀑 였λ₯˜ λ°œμƒ:", error); + return null; + } + }; + + const sanitizeRequestBody = (requestBody) => { + return Object.fromEntries( + Object.entries(requestBody).filter( + ([_, value]) => value !== null && value !== undefined + ) + ); + }; + + const handleSaveEdit = async () => { + try { + let token = localStorage.getItem("token")?.trim(); if (!token) { alert("둜그인이 ν•„μš”ν•©λ‹ˆλ‹€."); return; } - if (!token.startsWith("Bearer ")) { token = `Bearer ${token}`; } - console.log("πŸ” μ΅œμ’… JWT Token:", `"${token}"`); - - let transformedGender = editedClient.gender; - if (transformedGender === "MALE") { - transformedGender = "λ‚¨μž"; - } else if (transformedGender === "FEMALE") { - transformedGender = "μ—¬μž"; + console.log("πŸ“Œ μˆ˜μ • μš”μ²­ μ‚¬μš©μž ID:", editedClient?.id); + if (!editedClient?.id) { + console.error("🚨 였λ₯˜: μ‚¬μš©μž IDκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ"); + alert("였λ₯˜ λ°œμƒ: μ‚¬μš©μž IDκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); + return; } - const requestBody = { - name: editedClient.name, - email: editedClient.email, - phoneNumber: editedClient.phoneNumber, - regionAddress: - editedClient.regionAddress || selectedClient?.regionAddress, - roadAddress: editedClient.roadAddress || selectedClient?.roadAddress, - gender: transformedGender, - age: editedClient.age, + let convertedGender = editedClient.gender; + if (editedClient.gender === "MALE") convertedGender = "λ‚¨μž"; + if (editedClient.gender === "FEMALE") convertedGender = "μ—¬μž"; + + let requestBody = { + name: editedClient.name?.trim(), + email: editedClient.email?.trim(), + phoneNumber: editedClient.phoneNumber?.replace(/-/g, "").trim(), + regionAddress: editedClient.regionAddress?.trim() || null, + roadAddress: editedClient.roadAddress?.trim() || null, + gender: convertedGender, + age: Number(editedClient.age), }; + // βœ… λΆˆν•„μš”ν•œ null/undefined κ°’ 제거 + requestBody = sanitizeRequestBody(requestBody); + console.log( "πŸ“€ 고객 μˆ˜μ • μš”μ²­ 데이터:", JSON.stringify(requestBody, null, 2) @@ -603,40 +645,61 @@ const ClientManagement = () => { if (!response.ok) { const errorText = await response.text(); console.error("🚨 μ„œλ²„ 응닡 였λ₯˜:", errorText); - alert(`❌ μ„œλ²„ 응닡 였λ₯˜: ${errorText}`); + + if (response.status === 404) { + alert("❌ ν•΄λ‹Ή μ‚¬μš©μžλŠ” μ‚­μ œλ˜μ—ˆκ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."); + } else { + alert(`❌ μ„œλ²„ 응닡 였λ₯˜: ${errorText}`); + } + throw new Error(`❌ 고객 정보 μˆ˜μ • μ‹€νŒ¨ (status: ${response.status})`); } console.log("βœ… 고객 정보 μˆ˜μ • 성곡!"); + alert("고객 정보가 μ„±κ³΅μ μœΌλ‘œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); - let updatedLat = selectedClient.lat; - let updatedLng = selectedClient.lng; + setSelectedClient((prevClient) => ({ + ...prevClient, + ...requestBody, + })); - if ( - editedClient.roadAddress !== selectedClient.roadAddress || - editedClient.regionAddress !== selectedClient.regionAddress - ) { - console.log("πŸ“Œ μ£Όμ†Œκ°€ 변경됨! Kakao API둜 μƒˆ μ’Œν‘œ μš”μ²­"); + const updatedClient = await fetchUpdatedClient(editedClient.id); - const newCoords = await fetchCoordinates( - editedClient.roadAddress || editedClient.regionAddress - ); - console.log("πŸ“Œ μƒˆ μ’Œν‘œ:", newCoords); + console.log("πŸ“Œ μ„œλ²„μ—μ„œ κ°€μ Έμ˜¨ μ΅œμ‹  고객 데이터:", updatedClient); + + let lat = updatedClient.y ?? updatedClient.lat ?? null; + let lng = updatedClient.x ?? updatedClient.lng ?? null; - if (newCoords.lat && newCoords.lng) { - updatedLat = newCoords.lat; - updatedLng = newCoords.lng; + if (!lat || !lng) { + console.log("πŸ“ Kakao APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ’Œν‘œ λ³€ν™˜ μ‹œλ„..."); + try { + const coords = await fetchCoordinates( + updatedClient.roadAddress || updatedClient.regionAddress + ); + lat = coords.lat; + lng = coords.lng; + console.log(`πŸ“Œ λ³€ν™˜λœ Kakao μ’Œν‘œ: lat=${lat}, lng=${lng}`); + } catch (error) { + console.error("🚨 Kakao API μ’Œν‘œ λ³€ν™˜ μ‹€νŒ¨:", error); + lat = 37.5665; + lng = 126.978; } } - setSelectedClient((prev) => ({ - ...prev, - ...editedClient, - lat: updatedLat, - lng: updatedLng, - regionAddress: editedClient.regionAddress || prev.regionAddress, - roadAddress: editedClient.roadAddress || prev.roadAddress, - })); + console.log(`πŸ“ μ΅œμ’… μ„€μ •λœ μ’Œν‘œ: lat=${lat}, lng=${lng}`); + + setSelectedClient((prevClient) => { + const newClient = { + ...prevClient, + ...updatedClient, + lat, + lng, + }; + console.log("🟒 `selectedClient` μ—…λ°μ΄νŠΈλ¨:", newClient); + return newClient; + }); + + fetchClients(); setIsEditModalOpen(false); } catch (error) { @@ -763,8 +826,14 @@ const ClientManagement = () => { 이름: {selectedClient.name}

- 성별: {selectedClient.gender} + 성별:{" "} + {selectedClient.gender === "MALE" + ? "λ‚¨μž" + : selectedClient.gender === "FEMALE" + ? "μ—¬μž" + : selectedClient.gender}

+

λ‚˜μ΄: {selectedClient.age}

diff --git a/src/components/KakaoMap.js b/src/components/KakaoMap.js index 927118d..8c6faa4 100644 --- a/src/components/KakaoMap.js +++ b/src/components/KakaoMap.js @@ -24,16 +24,39 @@ const KakaoMap = ({ lat, lng, width = "100%", height = "400px" }) => { console.log("πŸ“‘ λ°±μ—”λ“œμ—μ„œ μœ„μΉ˜ 정보 κ°€μ Έμ˜€λŠ” 쀑..."); const fetchClientLocation = async () => { try { - const response = await fetch(`${API_BASE_URL}/api/users/location`); - if (!response.ok) throw new Error("μœ„μΉ˜ 정보λ₯Ό λΆˆλŸ¬μ˜€μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€."); + let token = localStorage.getItem("token")?.trim(); + if (!token) { + throw new Error("둜그인이 ν•„μš”ν•©λ‹ˆλ‹€."); + } - const locationData = await response.json(); - console.log("πŸ“Œ κ°€μ Έμ˜¨ μœ„μΉ˜ 데이터:", locationData); + if (!token.startsWith("Bearer ")) { + token = `Bearer ${token}`; + } - setPosition({ - lat: locationData.x || 37.5665, - lng: locationData.y || 126.978, + console.log("πŸ“‘ μœ„μΉ˜ 정보 κ°€μ Έμ˜€λŠ” 쀑..."); + + const response = await fetch(`${API_BASE_URL}/api/users/location`, { + method: "GET", + headers: { + Authorization: token, // βœ… μ˜¬λ°”λ₯Έ 인증 헀더 μΆ”κ°€ + "Content-Type": "application/json", + }, }); + + if (response.status === 401) { + console.error("🚨 401 Unauthorized - 둜그인 ν•„μš”"); + alert("둜그인이 λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ λ‘œκ·ΈμΈν•΄μ£Όμ„Έμš”."); + return; + } + + if (!response.ok) { + throw new Error("μœ„μΉ˜ 정보λ₯Ό λΆˆλŸ¬μ˜€μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€."); + } + + const data = await response.json(); + console.log("πŸ“Œ λ°±μ—”λ“œμ—μ„œ 받은 μœ„μΉ˜ 정보:", data); + + return data; } catch (error) { console.error("🚨 μœ„μΉ˜ 정보 κ°€μ Έμ˜€κΈ° 였λ₯˜:", error); } diff --git a/src/pages/test.html b/src/data/test.html similarity index 100% rename from src/pages/test.html rename to src/data/test.html diff --git a/src/styles/AdminManagement.css b/src/styles/AdminManagement.css index f5cf92d..2187084 100644 --- a/src/styles/AdminManagement.css +++ b/src/styles/AdminManagement.css @@ -1,11 +1,13 @@ .admin-container { width: 900px; + height: 100%; margin: 40px auto; padding: 20px; background: white; border-radius: 12px; box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1); text-align: center; + margin-top: 0%; } .search-container { @@ -93,6 +95,11 @@ .admin-list { text-align: left; overflow-y: auto; + height: 65%; +} + +.pagination button { + margin-top: 50px; } .admin-item { diff --git a/src/styles/ClientManagement.css b/src/styles/ClientManagement.css index 8812f49..e47a84a 100644 --- a/src/styles/ClientManagement.css +++ b/src/styles/ClientManagement.css @@ -496,7 +496,7 @@ display: flex; justify-content: center; align-items: center; - margin-top: -10px; + margin-top: -40px; gap: 8px; } diff --git a/src/styles/MyPage.css b/src/styles/MyPage.css index 0a34c82..f82829b 100644 --- a/src/styles/MyPage.css +++ b/src/styles/MyPage.css @@ -95,7 +95,7 @@ h2 { border-radius: 6px; } -.modal-content button { +.modal-content /button { margin-top: 5px; width: 340px; padding: 10px; @@ -113,7 +113,7 @@ h2 { .close-modal-btn { margin-top: -10px !important; - margin-right: -155px; + margin-right: 0px !important; background: red; color: white; padding: 8px;