v0.1.51 - 관리자 사용자 상세 조회 추가
This commit is contained in:
47
src/App.vue
47
src/App.vue
@@ -1719,6 +1719,8 @@ function clearAuthenticatedState() {
|
||||
adminMessage.value = ''
|
||||
adminUsers.value = []
|
||||
adminRecentLogins.value = []
|
||||
adminSelectedUserId.value = null
|
||||
adminUserDetail.value = null
|
||||
accountDeleteMessage.value = ''
|
||||
adminOverview.value = {
|
||||
totalUsers: 0,
|
||||
@@ -1761,6 +1763,8 @@ async function loadAdminDashboard() {
|
||||
if (!authToken.value || !isAdmin.value) {
|
||||
adminUsers.value = []
|
||||
adminRecentLogins.value = []
|
||||
adminSelectedUserId.value = null
|
||||
adminUserDetail.value = null
|
||||
adminMessage.value = ''
|
||||
return
|
||||
}
|
||||
@@ -1780,6 +1784,35 @@ async function loadAdminDashboard() {
|
||||
}
|
||||
}
|
||||
|
||||
async function loadAdminUserDetail(userId) {
|
||||
if (!authToken.value || !isAdmin.value) {
|
||||
return
|
||||
}
|
||||
|
||||
adminDetailBusy.value = true
|
||||
|
||||
try {
|
||||
const result = await fetchAdminUserDetail(authToken.value, userId)
|
||||
adminSelectedUserId.value = userId
|
||||
adminUserDetail.value = result
|
||||
adminMessage.value = ''
|
||||
} catch (error) {
|
||||
adminMessage.value = error.message || '사용자 상세 정보를 불러오지 못했습니다.'
|
||||
} finally {
|
||||
adminDetailBusy.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function selectAdminUser(user) {
|
||||
if (adminSelectedUserId.value === user.id && adminUserDetail.value) {
|
||||
adminSelectedUserId.value = null
|
||||
adminUserDetail.value = null
|
||||
return
|
||||
}
|
||||
|
||||
void loadAdminUserDetail(user.id)
|
||||
}
|
||||
|
||||
async function toggleAdminUserStatus(user) {
|
||||
const willDisable = !user.disabledAt
|
||||
const confirmed = window.confirm(
|
||||
@@ -1798,6 +1831,9 @@ async function toggleAdminUserStatus(user) {
|
||||
const result = await updateAdminUserStatus(authToken.value, user.id, willDisable)
|
||||
adminMessage.value = result.message || '계정 상태를 변경했습니다.'
|
||||
await loadAdminDashboard()
|
||||
if (adminSelectedUserId.value === user.id) {
|
||||
await loadAdminUserDetail(user.id)
|
||||
}
|
||||
} catch (error) {
|
||||
adminMessage.value = error.message || '계정 상태를 변경하지 못했습니다.'
|
||||
} finally {
|
||||
@@ -1818,6 +1854,9 @@ async function revokeAdminSessions(user) {
|
||||
const result = await revokeAdminUserSessions(authToken.value, user.id)
|
||||
adminMessage.value = result.message || '사용자 세션을 정리했습니다.'
|
||||
await loadAdminDashboard()
|
||||
if (adminSelectedUserId.value === user.id) {
|
||||
await loadAdminUserDetail(user.id)
|
||||
}
|
||||
} catch (error) {
|
||||
adminMessage.value = error.message || '사용자 세션을 종료하지 못했습니다.'
|
||||
} finally {
|
||||
@@ -1838,6 +1877,10 @@ async function removeAdminUser(user) {
|
||||
const result = await deleteAdminUser(authToken.value, user.id)
|
||||
adminMessage.value = result.message || '사용자 계정을 삭제했습니다.'
|
||||
await loadAdminDashboard()
|
||||
if (adminSelectedUserId.value === user.id) {
|
||||
adminSelectedUserId.value = null
|
||||
adminUserDetail.value = null
|
||||
}
|
||||
} catch (error) {
|
||||
adminMessage.value = error.message || '사용자 계정을 삭제하지 못했습니다.'
|
||||
} finally {
|
||||
@@ -3227,10 +3270,14 @@ onBeforeUnmount(() => {
|
||||
class="scrollbar-hide print-hidden xl:h-full xl:overflow-y-auto"
|
||||
:summary="adminOverview"
|
||||
:users="adminUsers"
|
||||
:selected-user-id="adminSelectedUserId"
|
||||
:user-detail="adminUserDetail"
|
||||
:recent-logins="adminRecentLogins"
|
||||
:busy="adminBusy"
|
||||
:action-busy-user-id="adminActionUserId"
|
||||
:detail-busy="adminDetailBusy"
|
||||
:message="adminMessage"
|
||||
@select-user="selectAdminUser"
|
||||
@toggle-user-status="toggleAdminUserStatus"
|
||||
@revoke-user-sessions="revokeAdminSessions"
|
||||
@delete-user="removeAdminUser"
|
||||
|
||||
Reference in New Issue
Block a user