fix: handle visit request Excel form upload
This commit is contained in:
@@ -115,7 +115,7 @@ export const DashboardPage: React.FC = () => {
|
||||
{insideIds.has(r.id) ? (
|
||||
<span className="badge badge-green">재실중</span>
|
||||
) : exitedIds.has(r.id) ? (
|
||||
<span className="badge badge-gray">퇴장</span>
|
||||
<span className="badge badge-gray">퇴실</span>
|
||||
) : (
|
||||
<span className={`badge badge-${STATUS_CLASS[r.status]}`}>{STATUS_LABEL[r.status]}</span>
|
||||
)}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { listReportVisits, listTodayAccess, reportDownloadUrl } from '../api';
|
||||
import { DatePickerField } from '../components/DatePickerField';
|
||||
import { AccessRecord, VisitRequestView } from '../types';
|
||||
import { AccessRecord, ReportVisitView } from '../types';
|
||||
import { STATUS_CLASS, STATUS_LABEL, formatDateTime } from '../status';
|
||||
|
||||
const pad = (n: number) => String(n).padStart(2, '0');
|
||||
@@ -20,7 +20,7 @@ function firstOfMonthISO(): string {
|
||||
export const ReportPage: React.FC = () => {
|
||||
const [from, setFrom] = useState(firstOfMonthISO());
|
||||
const [to, setTo] = useState(todayISO());
|
||||
const [items, setItems] = useState<VisitRequestView[]>([]);
|
||||
const [items, setItems] = useState<ReportVisitView[]>([]);
|
||||
const [accessRecords, setAccessRecords] = useState<AccessRecord[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
@@ -45,13 +45,19 @@ export const ReportPage: React.FC = () => {
|
||||
};
|
||||
|
||||
const accessById = new Map(accessRecords.map((r) => [r.visitRequestId, r]));
|
||||
const statusBadge = (r: VisitRequestView) => {
|
||||
const statusBadge = (r: ReportVisitView) => {
|
||||
const access = accessById.get(r.id);
|
||||
if (r.reportStatusLabel) {
|
||||
return {
|
||||
className: r.reportStatusLabel === '재실중' ? 'green' : r.reportStatusLabel === '퇴실' ? 'gray' : STATUS_CLASS[r.status],
|
||||
label: r.reportStatusLabel,
|
||||
};
|
||||
}
|
||||
if (access?.inside) {
|
||||
return { className: 'green', label: '재실중' };
|
||||
}
|
||||
if (access?.checkOutAt) {
|
||||
return { className: 'gray', label: '퇴장' };
|
||||
return { className: 'gray', label: '퇴실' };
|
||||
}
|
||||
return { className: STATUS_CLASS[r.status], label: STATUS_LABEL[r.status] };
|
||||
};
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import { Link, useNavigate } from 'react-router-dom';
|
||||
import { cancelVisitRequest, deleteVisitRequest, listTodayAccess, listVisitRequests, uploadVisitRequests } from '../api';
|
||||
import {
|
||||
cancelVisitRequest,
|
||||
deleteVisitRequest,
|
||||
listTodayAccess,
|
||||
listVisitRequests,
|
||||
uploadVisitRequests,
|
||||
visitRequestTemplateUrl,
|
||||
} from '../api';
|
||||
import { AccessRecord, VisitRequestView } from '../types';
|
||||
import { STATUS_CLASS, STATUS_LABEL, formatVisitRange } from '../status';
|
||||
import { Dialog } from '../components/Dialog';
|
||||
@@ -44,7 +51,7 @@ export const VisitRequestListPage: React.FC = () => {
|
||||
return { className: 'green', label: '재실중' };
|
||||
}
|
||||
if (access?.checkOutAt) {
|
||||
return { className: 'gray', label: '퇴장' };
|
||||
return { className: 'gray', label: '퇴실' };
|
||||
}
|
||||
return { className: STATUS_CLASS[r.status], label: STATUS_LABEL[r.status] };
|
||||
};
|
||||
@@ -97,7 +104,8 @@ export const VisitRequestListPage: React.FC = () => {
|
||||
<div className="page-head">
|
||||
<h2>출입 신청 목록</h2>
|
||||
<div className="head-actions">
|
||||
<button className="btn-ghost" onClick={() => fileRef.current?.click()}>엑셀 업로드</button>
|
||||
<a className="btn-ghost" href={visitRequestTemplateUrl()}>양식 다운로드</a>
|
||||
<button className="btn-ghost" onClick={() => fileRef.current?.click()}>작성 파일 업로드</button>
|
||||
<input ref={fileRef} type="file" accept=".xlsx" hidden onChange={onUpload} />
|
||||
<Link className="btn-primary" to="/visit-requests/new">+ 출입 신청</Link>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user