엘리스트랙
2차 프로젝트 어드민 페이지 구현!
Zmann
2024. 3. 16. 12:17
728x90
이제 어드민 페이지에서 회원들의 정보를 보는 페이지를 만들어보자.
일반 회원으로 로그인하면 어드민 페이지 버튼이 뜨지 않는다
어드민으로 로그인 하면 어드민 페이지 버튼이 뜨고 회원 관리 창으로 갈 수 있다.
총 회원 수와 관리자 수가 뜨고
페이징 기능으로 회원이 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