-
2차 프로젝트 어드민 페이지 구현!엘리스트랙 2024. 3. 16. 12:17728x90
이제 어드민 페이지에서 회원들의 정보를 보는 페이지를 만들어보자.
일반 회원으로 로그인하면 어드민 페이지 버튼이 뜨지 않는다
어드민으로 로그인 하면 어드민 페이지 버튼이 뜨고 회원 관리 창으로 갈 수 있다.
총 회원 수와 관리자 수가 뜨고
페이징 기능으로 회원이 10명씩 나오게 해 놨다.
async function insertUsers(page = 0, size = 10) { const usersResponse = await Api.get(`http://localhost:8080/users?page=${page}&size=${size}`); const users = usersResponse.content; const usersCount = await Api.get(`http://localhost:8080/users/count-user`); const adminCount = await Api.get(`http://localhost:8080/users/count-admin`); // 총 요약에 값 삽입 document.getElementById('usersCount').innerText = addCommas(usersCount); document.getElementById('adminCount').innerText = addCommas(adminCount); // 사용자 목록 초기화 (새 페이지 로드 시 이전 목록 삭제) usersContainer.innerHTML = ''; for (const user of users) { const { id, email, nickname, admin, createdAt } = user; const date = createdAt; usersContainer.insertAdjacentHTML( "beforeend", ` <div class="columns orders-item" id="user-${id}"> <div class="column is-2">${date}</div> <div class="column is-2">${email}</div> <div class="column is-2">${nickname}</div> <div class="column is-2"> <div class="select" > <select id="roleSelectBox-${id}"> <option class="has-background-link-light has-text-link" ${admin ? "selected" : ""} value="USER"> 일반사용자 </option> <option class="has-background-danger-light has-text-danger" ${admin ? "selected" : ""} value="ADMIN"> 관리자 </option> </select> </div> </div> <div class="column is-2"> <button class="button" id="deleteButton-${id}" >회원정보 삭제</button> </div> </div> ` ); const roleSelectBox = document.querySelector(`#roleSelectBox-${id}`); const deleteButton = document.querySelector(`#deleteButton-${id}`); roleSelectBox.addEventListener("change", async () => { if(roleSelectBox.value === "USER"){ alert("관리자는 일반 회원으로 바꿀 수 없습니다."); roleSelectBox.value = "ADMIN"; return; } const isAdmin = true; // api 요청 await Api.patch(`http://localhost:8080/users/${id}/role`,"", isAdmin); const usersCount = await Api.get(`http://localhost:8080/users/count-user`); const adminCount = await Api.get(`http://localhost:8080/users/count-admin`); document.getElementById('usersCount').innerText = addCommas(usersCount); document.getElementById('adminCount').innerText = addCommas(adminCount); }); deleteButton.addEventListener("click", () => { if(roleSelectBox.value === "ADMIN"){ alert("관리자 계정은 삭제할 수 없습니다."); return; } userIdToDelete = id; openModal(); }); } } // 페이지 변경 함수 function changePage(newPage) { insertUsers(newPage, 10); // 새 페이지 번호와 함께 사용자 목록을 다시 불러옴 } const prevPageButton = document.getElementById('page1'); const nextPageButton = document.getElementById('page2'); let currentPage = 0; prevPageButton.addEventListener('click', function() { if (currentPage > 0) { // 첫 페이지보다 클 때만 이전 페이지로 이동 currentPage -= 1; changePage(currentPage); } }); nextPageButton.addEventListener('click', function() { currentPage += 1; changePage(currentPage); }); // db에서 회원정보 삭제 async function deleteUserData(e) { e.preventDefault(); try { await Api.delete("http://localhost:8080/users", userIdToDelete); // 삭제 성공 alert("회원 정보가 삭제되었습니다."); // 삭제한 아이템 화면에서 지우기 const deletedItem = document.querySelector(`#user-${userIdToDelete}`); deletedItem.remove(); // 전역변수 초기화 userIdToDelete = ""; changePage(currentPage); closeModal(); } catch (err) { alert(`회원정보 삭제 과정에서 오류가 발생하였습니다: ${err}`); } }
728x90'엘리스트랙' 카테고리의 다른 글
메모리 복습! (1) 2024.03.22 2차 프로젝트를 끝내며! (0) 2024.03.22 2차 프로젝트 개인정보 페이지 구현! (0) 2024.03.16 2차 프로젝트 로그인 기능 구현! (0) 2024.03.03 2차 프로젝트 회원가입시 주소 api 사용! (0) 2024.03.03