ㅋㅓ밋

This commit is contained in:
2026-01-04 21:31:45 +09:00
parent 0660ed3973
commit 93187f3809
13 changed files with 903 additions and 59 deletions

View File

@@ -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 = {