fix: correct access dashboard status counts
This commit is contained in:
@@ -6,9 +6,26 @@ import {
|
||||
searchApprovedForCheckIn,
|
||||
} from '../api';
|
||||
import { AccessRecord, VisitRequestView } from '../types';
|
||||
import { formatShort } from '../status';
|
||||
import { STATUS_CLASS, STATUS_LABEL, formatShort } from '../status';
|
||||
import { VisitRequestDetailDialog } from '../components/VisitRequestDetailDialog';
|
||||
|
||||
const hasEnteredToday = (r: AccessRecord) => Boolean(r.checkInAt);
|
||||
const hasExitedToday = (r: AccessRecord) => Boolean(r.checkOutAt);
|
||||
|
||||
function accessBadge(record: AccessRecord): { className: string; label: string } {
|
||||
if (record.inside) {
|
||||
return { className: 'green', label: '재실중' };
|
||||
}
|
||||
if (hasExitedToday(record)) {
|
||||
return { className: 'gray', label: '퇴실' };
|
||||
}
|
||||
const status = record.status ?? 'APPROVED';
|
||||
if (status === 'APPROVED') {
|
||||
return { className: 'amber', label: '입장대기' };
|
||||
}
|
||||
return { className: STATUS_CLASS[status], label: STATUS_LABEL[status] };
|
||||
}
|
||||
|
||||
/**
|
||||
* Staff access console (login: 담당자/보안/관리자). Name search → force check-in/out,
|
||||
* plus today's full access log (신청 입/퇴장 + 실제 입/퇴장, 퇴실자 포함).
|
||||
@@ -36,7 +53,7 @@ export const AccessConsolePage: React.FC = () => {
|
||||
|
||||
const insideIds = new Set(records.filter((r) => r.inside).map((r) => r.visitRequestId));
|
||||
// Entered and already left today → no re-entry allowed.
|
||||
const exitedIds = new Set(records.filter((r) => !r.inside).map((r) => r.visitRequestId));
|
||||
const exitedIds = new Set(records.filter(hasExitedToday).map((r) => r.visitRequestId));
|
||||
|
||||
const wrap = async (fn: () => Promise<void>) => {
|
||||
setError(null);
|
||||
@@ -184,12 +201,13 @@ export const AccessConsolePage: React.FC = () => {
|
||||
<td>{formatShort(r.checkInAt)}</td>
|
||||
<td>{formatShort(r.checkOutAt)}</td>
|
||||
<td>
|
||||
<span className={`badge badge-${r.inside ? 'green' : 'gray'}`}>
|
||||
{r.inside ? '재실중' : '퇴실'}
|
||||
</span>
|
||||
{(() => {
|
||||
const badge = accessBadge(r);
|
||||
return <span className={`badge badge-${badge.className}`}>{badge.label}</span>;
|
||||
})()}
|
||||
</td>
|
||||
<td>
|
||||
{r.inside && (
|
||||
{r.inside && hasEnteredToday(r) && (
|
||||
<button
|
||||
className="btn-danger"
|
||||
disabled={busy}
|
||||
|
||||
@@ -213,6 +213,7 @@ export interface AccessRecord {
|
||||
zoneName?: string;
|
||||
visitFrom: string;
|
||||
visitTo: string;
|
||||
status?: VisitStatus;
|
||||
checkInAt?: string;
|
||||
checkOutAt?: string;
|
||||
inside: boolean;
|
||||
|
||||
Reference in New Issue
Block a user