ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2차 프로젝트 어드민 페이지 구현!
    엘리스트랙 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
Designed by Tistory.