ㅋㅓ밋
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
|
||||
<div class="row" v-if="employee">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0">
|
||||
<i class="bi bi-person me-2"></i>직원 정보
|
||||
@@ -87,22 +87,58 @@
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<!-- 기본 활동 정보 -->
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<i class="bi bi-clock-history me-2"></i>활동 이력
|
||||
<i class="bi bi-info-circle me-2"></i>기본 정보
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-4">
|
||||
<h6 class="text-muted">최근 로그인</h6>
|
||||
<p class="mb-0">{{ employee.lastLoginAt ? formatDateTime(employee.lastLoginAt) : '-' }}</p>
|
||||
<div class="row">
|
||||
<div class="col-6 mb-3">
|
||||
<small class="text-muted d-block">등록일</small>
|
||||
<span>{{ formatDateTime(employee.createdAt) }}</span>
|
||||
</div>
|
||||
<div class="col-6 mb-3">
|
||||
<small class="text-muted d-block">최종 수정</small>
|
||||
<span>{{ formatDateTime(employee.updatedAt) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<h6 class="text-muted">등록일</h6>
|
||||
<p class="mb-0">{{ formatDateTime(employee.createdAt) }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="text-muted">최종 수정</h6>
|
||||
<p class="mb-0">{{ formatDateTime(employee.updatedAt) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 로그인 이력 -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="bi bi-clock-history me-2"></i>로그인 이력
|
||||
<small class="text-muted ms-2">(최근 20건)</small>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>로그인 시간</th>
|
||||
<th>IP</th>
|
||||
<th>로그아웃</th>
|
||||
<th style="width: 80px">상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-if="loginHistory.length === 0">
|
||||
<td colspan="4" class="text-center text-muted py-3">로그인 이력이 없습니다.</td>
|
||||
</tr>
|
||||
<tr v-for="h in loginHistory" :key="h.historyId">
|
||||
<td>{{ formatDateTime(h.loginAt) }}</td>
|
||||
<td><code class="small">{{ h.loginIp || '-' }}</code></td>
|
||||
<td>{{ h.logoutAt ? formatDateTime(h.logoutAt) : '-' }}</td>
|
||||
<td>
|
||||
<span v-if="h.logoutAt" class="badge bg-secondary">로그아웃</span>
|
||||
<span v-else-if="h.isCurrentSession" class="badge bg-success">접속중</span>
|
||||
<span v-else class="badge bg-warning text-dark">세션만료</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -122,6 +158,7 @@ const router = useRouter()
|
||||
const route = useRoute()
|
||||
|
||||
const employee = ref<any>(null)
|
||||
const loginHistory = ref<any[]>([])
|
||||
const isLoading = ref(true)
|
||||
const isSubmitting = ref(false)
|
||||
|
||||
@@ -148,8 +185,9 @@ onMounted(async () => {
|
||||
async function loadEmployee() {
|
||||
isLoading.value = true
|
||||
try {
|
||||
const res = await $fetch<{ employee: any }>(`/api/employee/${route.params.id}/detail`)
|
||||
const res = await $fetch<{ employee: any, loginHistory: any[] }>(`/api/employee/${route.params.id}/detail`)
|
||||
employee.value = res.employee
|
||||
loginHistory.value = res.loginHistory || []
|
||||
|
||||
const e = res.employee
|
||||
form.value = {
|
||||
|
||||
Reference in New Issue
Block a user