diff --git a/apps/nowait-admin/src/hooks/Reservation/useUpdateReservationStatus.tsx b/apps/nowait-admin/src/hooks/Reservation/useUpdateReservationStatus.tsx index 742452e0..5dee5c5f 100644 --- a/apps/nowait-admin/src/hooks/Reservation/useUpdateReservationStatus.tsx +++ b/apps/nowait-admin/src/hooks/Reservation/useUpdateReservationStatus.tsx @@ -1,18 +1,21 @@ import { useMutation } from "@tanstack/react-query"; import AdminApi from "../../utils/AdminApi"; +interface UpdateReservationParams { + storeId: number; + userId: number; + status: "WAITING" | "CALLING" | "CONFIRMED" | "CANCELLED" | "NO_SHOW"; +} + export const useUpdateReservationStatus = () => { return useMutation({ mutationFn: async ({ - reservationId, + storeId, + userId, status, - }: { - reservationId: number; - status: "WAITING" | "CALLING" | "CONFIRMED" | "CANCELLED" | "NO_SHOW"; - }) => { + }: UpdateReservationParams) => { const res = await AdminApi.patch( - `/reservations/admin/updates/${reservationId}`, - { status } + `/reservations/admin/update/${storeId}/${userId}/${status}` ); return res.data; }, diff --git a/apps/nowait-admin/src/pages/AdminAnalytics/AdminAnalytics.tsx b/apps/nowait-admin/src/pages/AdminAnalytics/AdminAnalytics.tsx index b76bde79..000fa152 100644 --- a/apps/nowait-admin/src/pages/AdminAnalytics/AdminAnalytics.tsx +++ b/apps/nowait-admin/src/pages/AdminAnalytics/AdminAnalytics.tsx @@ -57,7 +57,7 @@ const boothData: BoothRanking[] = [ const AdminAnalytics = () => { // const { data, isLoading, isError } = useGetTopSales(); return ( -
+
diff --git a/apps/nowait-admin/src/pages/AdminAnalytics/components/BoothSalesRankingCard .tsx b/apps/nowait-admin/src/pages/AdminAnalytics/components/BoothSalesRankingCard .tsx index 4f182cd8..8f3770d2 100644 --- a/apps/nowait-admin/src/pages/AdminAnalytics/components/BoothSalesRankingCard .tsx +++ b/apps/nowait-admin/src/pages/AdminAnalytics/components/BoothSalesRankingCard .tsx @@ -20,7 +20,7 @@ const BoothSalesRankingCard: React.FC = ({ data, }) => { return ( -
+

부스별 판매순위

@@ -43,21 +43,24 @@ const BoothSalesRankingCard: React.FC = ({ : "" }`} > -
+
{item.rank}
-
- {item.name} +
+ + {item.name} + {item.department}
-
- +
+
+ {item.salesCount}건 diff --git a/apps/nowait-admin/src/pages/AdminAnalytics/components/HeaderStatus.tsx b/apps/nowait-admin/src/pages/AdminAnalytics/components/HeaderStatus.tsx index e44a7c7d..7a9cd503 100644 --- a/apps/nowait-admin/src/pages/AdminAnalytics/components/HeaderStatus.tsx +++ b/apps/nowait-admin/src/pages/AdminAnalytics/components/HeaderStatus.tsx @@ -4,7 +4,7 @@ import TotalSalesCard from "./TotalSalesCard"; const HeaderStatus = () => { return ( -
+
{/* 오늘 매출 */} = ({ today, previous }) => { {/* 이전,다음 이동 버튼 */} + {/* 이전 버튼: 오늘 매출일 때만 활성화 */} setIsHoverBack(true)} - onMouseLeave={() => setIsHoverBack(false)} - onClick={() => setShowToday(false)} + src={ + showToday ? activeBackIcon : backIcon // 비활성 이미지로 고정 + } + className={`h-5 w-5 cursor-pointer`} + onMouseEnter={() => showToday && setIsHoverBack(true)} + onMouseLeave={() => showToday && setIsHoverBack(false)} + onClick={() => showToday && setShowToday(false)} /> + + {/* 다음 버튼: 이전 매출일 때만 활성화 */} setIsHoverForward(true)} - onMouseLeave={() => setIsHoverForward(false)} - onClick={() => setShowToday(true)} + src={!showToday ? activeForwardIcon : forwardIcon} + className={`h-5 w-5 cursor-pointer `} + onMouseEnter={() => !showToday && setIsHoverForward(true)} + onMouseLeave={() => !showToday && setIsHoverForward(false)} + onClick={() => !showToday && setShowToday(true)} />
@@ -66,10 +71,12 @@ const SalesCard: React.FC = ({ today, previous }) => { )}
-

- 어제보다 {today.diffAmount.toLocaleString()}원{" "} - {today.diffAmount >= 0 ? "더 벌었어요!" : "덜 벌었어요!"} -

+ {showToday && ( +

+ 어제보다 {today.diffAmount.toLocaleString()}원{" "} + {today.diffAmount >= 0 ? "더 벌었어요!" : "덜 벌었어요!"} +

+ )}
); diff --git a/apps/nowait-admin/src/pages/AdminBooth/AdminBooth.tsx b/apps/nowait-admin/src/pages/AdminBooth/AdminBooth.tsx index fdd11fd0..0584055b 100644 --- a/apps/nowait-admin/src/pages/AdminBooth/AdminBooth.tsx +++ b/apps/nowait-admin/src/pages/AdminBooth/AdminBooth.tsx @@ -315,7 +315,7 @@ const MenuSection = () => { const BoothForm = () => { const width = useWindowWidth(); const isTablet = width >= 768 && width <= 1024; - const [activeTab, setActiveTab] = useState<"booth" | "menu">("booth"); + const [activeTab, setActiveTab] = useState<"booth" | "menu">("menu"); const [boothName, setBoothName] = useState(""); const [boothIntro, setBoothIntro] = useState(""); const [isFocused, setIsFocused] = useState(false); diff --git a/apps/nowait-admin/src/pages/AdminHome/AdminHome.tsx b/apps/nowait-admin/src/pages/AdminHome/AdminHome.tsx index eae8aebd..408be5ca 100644 --- a/apps/nowait-admin/src/pages/AdminHome/AdminHome.tsx +++ b/apps/nowait-admin/src/pages/AdminHome/AdminHome.tsx @@ -13,6 +13,7 @@ type WaitingStatus = "WAITING" | "CALLING" | "CONFIRMED" | "CANCELLED"; interface Reservation { id: number; + userId: number; time: string; requestedAt: string; waitMinutes: number; @@ -36,7 +37,7 @@ const AdminHome = () => { const { data: completedList } = useGetCompletedList(storeId); //canceled, conformed console.log(waitingList); - + console.log(completedList); const toggle = () => setIsOn((prev) => !prev); //대기 중 카드 개수 const waitingCount = reservations.filter( @@ -84,15 +85,14 @@ const AdminHome = () => { }, [reservations, activeTab]); // 호출 버튼 클릭 이벤트 - const handleCall = (id: number) => { - // 상태 변화 api 호출 --> 성공시 --> reservation status 변경(호출 시간 calledAt추가해야 됨) + const handleCall = (userId: number) => { updateStatus( - { reservationId: id, status: "CALLING" }, + { storeId, userId, status: "CALLING" }, { onSuccess: () => { setReservations((prev) => prev.map((res) => - res.id === id + res.id === userId ? { ...res, status: "CALLING", @@ -109,14 +109,14 @@ const AdminHome = () => { ); }; - const handleEnter = (id: number) => { + const handleEnter = (userId: number) => { updateStatus( - { reservationId: id, status: "CONFIRMED" }, + { storeId, userId, status: "CONFIRMED" }, { onSuccess: () => { setReservations((prev) => prev.map((res) => - res.id === id ? { ...res, status: "CONFIRMED" } : res + res.id === userId ? { ...res, status: "CONFIRMED" } : res ) ); }, @@ -124,14 +124,14 @@ const AdminHome = () => { ); }; - const handleClose = (id: number) => { + const handleClose = (userId: number) => { updateStatus( - { reservationId: id, status: "CANCELLED" }, + { storeId, userId, status: "CANCELLED" }, { onSuccess: () => { setReservations((prev) => prev.map((res) => - res.id === id ? { ...res, status: "CANCELLED" } : res + res.id === userId ? { ...res, status: "CANCELLED" } : res ) ); }, @@ -152,9 +152,11 @@ const AdminHome = () => { const normalize = (res: any): Reservation => { const requested = new Date(res.createdAt ?? ""); - const called = new Date(res.calledAt ?? ""); + const calledAtValid = res.calledAt && !isNaN(Date.parse(res.calledAt)); + const called = calledAtValid ? new Date(res.calledAt) : undefined; return { id: Number(res.id), + userId: Number(res.userId), requestedAt: res.createdAt, time: requested.toLocaleTimeString("ko-KR", { hour: "2-digit", @@ -166,7 +168,8 @@ const AdminHome = () => { name: res.userName, phone: "010-****-****", status: res.status, - calledAt: res.status === "CALLING" ? called.toISOString() : undefined, + calledAt: + res.status === "CALLING" && called ? called.toISOString() : undefined, }; }; @@ -253,10 +256,10 @@ const AdminHome = () => { phone="010-1234-1234" status={res.status} calledAt={res.calledAt} - isNoShow={noShowIds.includes(res.id)} - onCall={() => handleCall(res.id)} - onEnter={() => handleEnter(res.id)} - onClose={() => handleClose(res.id)} + isNoShow={noShowIds.includes(res.userId)} + onCall={() => handleCall(res.userId)} + onEnter={() => handleEnter(res.userId)} + onClose={() => handleClose(res.userId)} onDelete={() => setShowModal(true)} onNoShow={() => handleNoShow(res.id)} /> diff --git a/apps/nowait-admin/src/pages/AdminHome/components/WaitingCard.tsx b/apps/nowait-admin/src/pages/AdminHome/components/WaitingCard.tsx index f21601e7..e3f48e3b 100644 --- a/apps/nowait-admin/src/pages/AdminHome/components/WaitingCard.tsx +++ b/apps/nowait-admin/src/pages/AdminHome/components/WaitingCard.tsx @@ -23,7 +23,7 @@ interface WaitingCardProps { onDelete: () => void; } const truncateName = (name: string, maxLength: number = 3) => { - return name.length > maxLength ? name.slice(0, maxLength) + "..." : name; + return name?.length > maxLength ? name.slice(0, maxLength) + "..." : name; }; export function WaitingCard({ @@ -137,13 +137,13 @@ export function WaitingCard({ <> @@ -155,7 +155,7 @@ export function WaitingCard({
@@ -163,13 +163,13 @@ export function WaitingCard({ ))} {status === "CANCELLED" && ( -
+
취소된 입장
)} {status === "CONFIRMED" && ( -
+
완료된 입장
)}