diff --git a/apps/nowait-user/.gitignore b/apps/nowait-user/.gitignore index a547bf36..0682c867 100644 --- a/apps/nowait-user/.gitignore +++ b/apps/nowait-user/.gitignore @@ -10,6 +10,8 @@ lerna-debug.log* node_modules dist dist-ssr +.env.development +.env.production *.local # Editor directories and files diff --git a/apps/nowait-user/src/api/order.ts b/apps/nowait-user/src/api/order.ts index 2c428898..c3c71fa8 100644 --- a/apps/nowait-user/src/api/order.ts +++ b/apps/nowait-user/src/api/order.ts @@ -13,7 +13,6 @@ export const api = axios.create({ const API_URI = import.meta.env.VITE_SERVER_URI; - //주문 생성 export const createOrder = async ( storeId: number, @@ -29,14 +28,14 @@ export const getOrderDetails = async ( storeId: number | undefined, tableId: number ): Promise => { - const res = await api.get(`${API_URI}/orders/items/${storeId}/${tableId}`); + const res = await api.get(`/orders/items/${storeId}/${tableId}`); return res.data; }; //주점 QR, 계좌번호 조회 export const getStorePayments = async (storeId: number) => { try { - const res = await api.get( + const res = await axios.get( `${API_URI}/v1/store-payments/${storeId}` ); return res.data; diff --git a/apps/nowait-user/src/components/common/SuccessMessagePage.tsx b/apps/nowait-user/src/components/common/SuccessMessagePage.tsx index a44e6809..86eafe1c 100644 --- a/apps/nowait-user/src/components/common/SuccessMessagePage.tsx +++ b/apps/nowait-user/src/components/common/SuccessMessagePage.tsx @@ -36,7 +36,9 @@ const SuccessMessagePage = ({ navigate(`/${storeId}/orderDetails`)} + onClick={() => + navigate(`/${storeId}/orderDetails`, { replace: true }) + } > 주문내역 확인 diff --git a/apps/nowait-user/src/pages/order/orderDetails/OrderDetailsPage.tsx b/apps/nowait-user/src/pages/order/orderDetails/OrderDetailsPage.tsx index 7c88d782..16def8a8 100644 --- a/apps/nowait-user/src/pages/order/orderDetails/OrderDetailsPage.tsx +++ b/apps/nowait-user/src/pages/order/orderDetails/OrderDetailsPage.tsx @@ -25,25 +25,25 @@ const OrderDetailsPage = () => { const { storeId } = useParams(); const tableId = localStorage.getItem("tableId"); - const { data, isLoading } = useQuery({ - queryKey: ["orderDetails", storeId, tableId], - queryFn: () => getOrderDetails(Number(storeId), Number(tableId!)), - select: (data) => data.response, + const { data: orderDetails, isLoading } = useQuery({ + queryKey: ["orderDetails", storeId], + queryFn: () => getOrderDetails(Number(storeId!), Number(tableId!)), + select: (data) => data?.response, }); - + console.log(orderDetails); if (isLoading) return ; //주문내역 없을 시 - if (!data || data?.length < 1) return ; + if (!orderDetails || orderDetails?.length < 1) return ; return (

- 주문내역 {data.length}건 + 주문내역 {orderDetails.length}건

    - {data.map((order) => { + {orderDetails?.map((order) => { // 주문 상태에 따른 값 보여주기 const statusData = statusMap[order?.status as OrderStatus]; return ( diff --git a/apps/nowait-user/src/pages/order/orderSuccess/OrderSuccessPage.tsx b/apps/nowait-user/src/pages/order/orderSuccess/OrderSuccessPage.tsx index eb727b13..0cb715d0 100644 --- a/apps/nowait-user/src/pages/order/orderSuccess/OrderSuccessPage.tsx +++ b/apps/nowait-user/src/pages/order/orderSuccess/OrderSuccessPage.tsx @@ -1,6 +1,6 @@ import { useNavigate, useParams } from "react-router-dom"; import SuccessMessagePage from "../../../components/common/SuccessMessagePage"; -import OrderSuccess from "../../../assets/orderSuccess.webp" +import OrderSuccess from "../../../assets/orderSuccess.webp"; const OrderSuccessPage = () => { const navigate = useNavigate(); @@ -12,7 +12,7 @@ const OrderSuccessPage = () => { imageAlt="주문 완료 이미지" title="주문이 접수되었어요!" message={`입금 확인 후 조리를 진행할게요.\n조금만 기다려 주세요.`} - onClick={() => navigate(`/${storeId}`)} + onClick={() => navigate(`/${storeId}`, { replace: true })} buttonText="확인" /> ); diff --git a/apps/nowait-user/src/pages/order/remittance/RemittancePage.tsx b/apps/nowait-user/src/pages/order/remittance/RemittancePage.tsx index 3bdfdf95..4c4b24fc 100644 --- a/apps/nowait-user/src/pages/order/remittance/RemittancePage.tsx +++ b/apps/nowait-user/src/pages/order/remittance/RemittancePage.tsx @@ -23,7 +23,7 @@ const RemittancePage = () => { const { cart } = useCartStore(); const [payer, setPayer] = useState(""); const [errorMessage, setErrorMessage] = useState(""); - const [remitValue, setRemitValue] = useState(""); + const [remitValue, setRemitValue] = useState(""); const totalPrice = sumTotalPrice(cart); const payerFocus = useRef(null); @@ -33,7 +33,12 @@ const RemittancePage = () => { enabled: !!storeId, select: (data) => data?.response, }); - console.log(remittance); + // 정보 없으면 홈으로 이동 + useEffect(() => { + if (cart.length === 0) { + navigate(`/${storeId}`, { replace: true }); + } + }, []); // 기본 선택 값 지정하기 useEffect(() => { if (!remittance) return; @@ -41,8 +46,8 @@ const RemittancePage = () => { if (!(remittance.kakaoPayUrl === "")) setRemitValue("kakao"); else if (!(remittance.tossUrl === "")) setRemitValue("toss"); else if (!(remittance.naverPayUrl === "")) setRemitValue("naver"); - else if (!(remittance.accountNumber === "")) setRemitValue("remit"); - }, []); + else if (!(remittance.accountNumber === "")) setRemitValue("direct"); + }, [remittance]); const orderHandleButton = () => { //입금자명을 입력하지 않고 이체 버튼 클릭 시 입금자명 input으로 포커스 diff --git a/apps/nowait-user/src/pages/order/remittance/components/Radio.tsx b/apps/nowait-user/src/pages/order/remittance/components/Radio.tsx index dcc2d629..1a0dbdc9 100644 --- a/apps/nowait-user/src/pages/order/remittance/components/Radio.tsx +++ b/apps/nowait-user/src/pages/order/remittance/components/Radio.tsx @@ -3,6 +3,7 @@ import React from "react"; interface PropsType { children: React.ReactNode; logo?: React.ReactNode; + remitValue: string; value: string; name: string; defaultChecked?: boolean | undefined; @@ -12,6 +13,7 @@ interface PropsType { const Radio = ({ children, logo, + remitValue, value, name, defaultChecked, @@ -33,6 +35,7 @@ const Radio = ({ type="radio" name={name} value={value} + checked={remitValue === value} defaultChecked={defaultChecked} onChange={onChange} className="peer sr-only" diff --git a/apps/nowait-user/src/pages/order/remittance/components/remitOptions/DirectRemitOption.tsx b/apps/nowait-user/src/pages/order/remittance/components/remitOptions/DirectRemitOption.tsx index 80435f95..6ab44c91 100644 --- a/apps/nowait-user/src/pages/order/remittance/components/remitOptions/DirectRemitOption.tsx +++ b/apps/nowait-user/src/pages/order/remittance/components/remitOptions/DirectRemitOption.tsx @@ -45,6 +45,7 @@ const DirectRemitOption = ({ setRemitValue(e.target.value)} > 계좌로 직접 이체하기 diff --git a/apps/nowait-user/src/pages/order/remittance/components/remitOptions/EasyPayOptions.tsx b/apps/nowait-user/src/pages/order/remittance/components/remitOptions/EasyPayOptions.tsx index 4a284113..8b42f8d2 100644 --- a/apps/nowait-user/src/pages/order/remittance/components/remitOptions/EasyPayOptions.tsx +++ b/apps/nowait-user/src/pages/order/remittance/components/remitOptions/EasyPayOptions.tsx @@ -8,19 +8,33 @@ interface PropsType { kakao?: string; toss?: string; naver?: string; + remitValue: string; setRemitValue: React.Dispatch>; } -const EasyPayOptions = ({ kakao, toss, naver, setRemitValue }: PropsType) => { +const EasyPayOptions = ({ + kakao, + toss, + naver, + remitValue, + setRemitValue, +}: PropsType) => { return (
    {kakao && ( } + logo={ + 카카오 이미지 + } name="remit" value="kakao" - defaultChecked + remitValue={remitValue} onChange={(e) => setRemitValue(e.target.value)} > 카카오페이 @@ -28,9 +42,12 @@ const EasyPayOptions = ({ kakao, toss, naver, setRemitValue }: PropsType) => { )} {toss && ( } + logo={ + 토스 이미지 + } name="remit" value="toss" + remitValue={remitValue} onChange={(e) => setRemitValue(e.target.value)} > 토스 @@ -38,9 +55,17 @@ const EasyPayOptions = ({ kakao, toss, naver, setRemitValue }: PropsType) => { )} {naver && ( } + logo={ + 네이버 이미지 + } name="remit" value="naver" + remitValue={remitValue} onChange={(e) => setRemitValue(e.target.value)} > 네이버페이 diff --git a/apps/nowait-user/src/pages/order/remittance/components/remitOptions/RemitOptions.tsx b/apps/nowait-user/src/pages/order/remittance/components/remitOptions/RemitOptions.tsx index 8127dd30..395a4183 100644 --- a/apps/nowait-user/src/pages/order/remittance/components/remitOptions/RemitOptions.tsx +++ b/apps/nowait-user/src/pages/order/remittance/components/remitOptions/RemitOptions.tsx @@ -24,7 +24,6 @@ const RemitOptions = ({ account, isLoading, }: PropsType) => { - if (isLoading) return ; return ( @@ -38,6 +37,7 @@ const RemitOptions = ({ kakao={kakao} toss={toss} naver={naver} + remitValue={remitValue} setRemitValue={setRemitValue} /> ) : null} diff --git a/apps/nowait-user/src/pages/order/remittenceWait/RemittanceWaitPage.tsx b/apps/nowait-user/src/pages/order/remittenceWait/RemittanceWaitPage.tsx index 73f117f8..312fb46c 100644 --- a/apps/nowait-user/src/pages/order/remittenceWait/RemittanceWaitPage.tsx +++ b/apps/nowait-user/src/pages/order/remittenceWait/RemittanceWaitPage.tsx @@ -7,6 +7,7 @@ import remittanceWait from "../../../assets/remittanceWait.webp"; import CenteredContentLayout from "../../../components/layout/CenteredContentLayout"; import BackOnlyHeader from "../../../components/BackOnlyHeader"; import LoadingSpinner from "../../../components/LoadingSpinner"; +import { useToastStore } from "../../../stores/toastStore"; const RemittanceWaitPage = () => { const navigate = useNavigate(); @@ -15,6 +16,7 @@ const RemittanceWaitPage = () => { const { storeId } = useParams(); const tableId = localStorage.getItem("tableId"); const { cart, clearCart } = useCartStore(); + const { showToast } = useToastStore(); const totalPrice = sumTotalPrice(cart); const [isLoading, setIsLoading] = useState(false); @@ -40,11 +42,12 @@ const RemittanceWaitPage = () => { localStorage.setItem("depositorName", res.response.depositorName); //장바구니 비우기 clearCart(); - navigate(`/${storeId}/order/success`); + navigate(`/${storeId}/order/success`, { replace: true }); } else { // 서버가 success:false 반환한 경우 console.error("주문 실패:", res); - alert("주문 처리에 실패했습니다. 다시 시도해주세요."); + showToast("주문에 실패했습니다. 다시 시도해 주세요"); + return; } } catch (error) { console.log(error); diff --git a/apps/nowait-user/src/pages/waiting/boothMap/MapManagePage.tsx b/apps/nowait-user/src/pages/waiting/boothMap/MapManagePage.tsx index 4d4f4663..0b014729 100644 --- a/apps/nowait-user/src/pages/waiting/boothMap/MapManagePage.tsx +++ b/apps/nowait-user/src/pages/waiting/boothMap/MapManagePage.tsx @@ -23,13 +23,15 @@ const MapManagePage = () => { const x = e.clientX - rect.left; const y = e.clientY - rect.top; - // = offsetWidth, offsetHeight - const width = rect.width; - const height = rect.height; + // 실제 지도 크기 + const MAP_WIDTH = 1100; + const MAP_HEIGHT = 1100; // 비율로 변환 - const left = ((x / width) * 100).toFixed(1); - const top = ((y / height) * 100).toFixed(1); + const left = ((x / rect.width) * 100 * (rect.width / MAP_WIDTH)).toFixed(3); + const top = ((y / rect.height) * 100 * (rect.height / MAP_HEIGHT)).toFixed( + 3 + ); const newMarker = { storeId: Number(inputId), @@ -41,14 +43,12 @@ const MapManagePage = () => { }; return ( -
    +
    { }} alt="맵 생성" /> - - {markers.map((marker) => ( -
    - -
    - ))} +
      + {markers.map((marker) => ( +
    • + +
    • + ))} +
    + @@ -124,7 +122,7 @@ const MapPage = () => { {selectedBooth !== null ? ( ) : ( - + )}
    ); diff --git a/apps/nowait-user/src/pages/waiting/boothMap/components/BoothList.tsx b/apps/nowait-user/src/pages/waiting/boothMap/components/BoothList.tsx index 2fb5756b..d842ae43 100644 --- a/apps/nowait-user/src/pages/waiting/boothMap/components/BoothList.tsx +++ b/apps/nowait-user/src/pages/waiting/boothMap/components/BoothList.tsx @@ -7,7 +7,7 @@ import { getInfiniteAllStores } from "../../../../api/reservation"; const snapPoints = [0, -400]; // 0: 닫힘, -400: 열림 -const BoothList = () => { +const BoothList = ({ totalBooth }: { totalBooth: number | undefined }) => { const y = useMotionValue(0); const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading } = useInfiniteQuery({ @@ -79,7 +79,7 @@ const BoothList = () => {

    부스 리스트

    - {stores.length}개의 부스 + {totalBooth}개의 부스

    {!isLoading && stores.length > 0 && ( diff --git a/apps/nowait-user/src/pages/waiting/boothMap/constants/boothPosition.ts b/apps/nowait-user/src/pages/waiting/boothMap/constants/boothPosition.ts index 677f8c55..19fd1da7 100644 --- a/apps/nowait-user/src/pages/waiting/boothMap/constants/boothPosition.ts +++ b/apps/nowait-user/src/pages/waiting/boothMap/constants/boothPosition.ts @@ -1,3 +1,6 @@ export const boothPosition: Record = { - 1: { top: "45.12%", left: "60.52%" }, +1 : {top:"52.5%",left:"52.0%"}, +2 : {top:"41.2%",left:"50.8%"}, +3 : {top:"64.6%",left:"53.0%"} + }; diff --git a/apps/nowait-user/src/utils/accountFormat.ts b/apps/nowait-user/src/utils/accountFormat.ts index 4fddca15..88ec5da1 100644 --- a/apps/nowait-user/src/utils/accountFormat.ts +++ b/apps/nowait-user/src/utils/accountFormat.ts @@ -3,7 +3,7 @@ // 3. 짝대기 추가 const format: Record = { - "IBK 기업": [3, 6, 2], + IBK기업: [3, 6, 2], 국민은행: [6, 2], 신한은행: [3, 3], 하나은행: [3, 6], @@ -18,6 +18,7 @@ export const accountFormat = (bank: string, accountNumber: string) => { if (!rule) return accountNumber; let result = []; let start = 0; + //은행 포맷에 맞게 - 추가 for (let i = 0; i < rule.length; i++) { const end = start + rule[i]; const number = accountNumber.slice(start, end);