From 3c73c5a47a0e7b0ce65fa902273e891c2b3d065e Mon Sep 17 00:00:00 2001 From: chpark Date: Fri, 15 May 2026 10:59:44 +0900 Subject: [PATCH] =?UTF-8?q?fix(admin/orders):=20=EC=B6=9C=EA=B3=A0?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=E2=80=94=20=EC=84=B8=EA=B8=88=EA=B3=84?= =?UTF-8?q?=EC=82=B0=EC=84=9C=20=EB=B0=9C=ED=96=89=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20+=20=EA=B8=B0=EB=B3=B8=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EC=83=81=ED=83=9C=20'=EC=B6=9C=EA=B3=A0=EC=9A=94?= =?UTF-8?q?=EC=B2=AD+=EC=B6=9C=EA=B3=A0=EC=99=84=EB=A3=8C'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 출고처리 우측 상세에서 [세금계산서 발행] 버튼 제거 (계산서(면세) 만 유지) 업무 흐름: 출고요청 → 출고완료 → 입금완료 → 계산서 발행 → 전자세금계산서. 입금완료 후의 발행은 계산서 관리 메뉴에서 처리. - 검색조건 기본값: 'EDITABLE' (= REQUESTED + APPROVED) 두 상태만 노출. 드롭다운에 '출고요청+출고완료' 옵션 추가, 기존 '전체 상태'/개별상태 옵션 유지. - orders/list API: statuses?: string[] (IN) 파라미터 지원 (status 단일은 기존대로). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/(main)/m/admin/orders/page.tsx | 24 +++++++++--------------- src/app/api/m/orders/list/route.ts | 11 ++++++++--- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/app/(main)/m/admin/orders/page.tsx b/src/app/(main)/m/admin/orders/page.tsx index 86e8c7f..5798153 100644 --- a/src/app/(main)/m/admin/orders/page.tsx +++ b/src/app/(main)/m/admin/orders/page.tsx @@ -65,10 +65,11 @@ export default function AdminOrdersPage() { // URL 쿼리 우선: dateFrom/dateTo 키가 있으면 그 값 사용 (빈 문자열도 명시적 = 전체 기간). // 키가 없을 때 기본값 — 한 달 전 ~ 오늘 const initial = (() => { - if (typeof window === "undefined") return { status: "", dateFrom: oneMonthAgoStr(), dateTo: todayStr(), keyword: "" }; + // 기본 status = "EDITABLE" → REQUESTED + APPROVED (출고요청 + 출고완료) 두 건만 노출 + if (typeof window === "undefined") return { status: "EDITABLE", dateFrom: oneMonthAgoStr(), dateTo: todayStr(), keyword: "" }; const q = new URLSearchParams(window.location.search); return { - status: q.get("status") ?? "", + status: q.get("status") ?? "EDITABLE", dateFrom: q.has("dateFrom") ? (q.get("dateFrom") ?? "") : oneMonthAgoStr(), dateTo: q.has("dateTo") ? (q.get("dateTo") ?? "") : todayStr(), keyword: q.get("keyword") ?? "", @@ -92,7 +93,8 @@ export default function AdminOrdersPage() { const res = await fetch("/api/m/orders/list", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ - status: status || undefined, + status: status === "EDITABLE" ? undefined : (status || undefined), + statuses: status === "EDITABLE" ? ["REQUESTED", "APPROVED"] : undefined, dateFrom: dateFrom || undefined, dateTo: dateTo || undefined, keyword: keyword || undefined, @@ -273,7 +275,8 @@ export default function AdminOrdersPage() { setDateTo(e.target.value)} className="h-8 sm:h-9 px-2 rounded border border-slate-200 text-xs sm:text-sm min-w-0 flex-1 sm:flex-none sm:w-[140px]" /> @@ -285,8 +288,8 @@ export default function AdminOrdersPage() { className="h-8 sm:h-9 px-3 rounded bg-slate-800 text-white text-xs sm:text-sm font-bold hover:bg-slate-900 disabled:opacity-50"> 조회 - {(dateFrom !== oneMonthAgoStr() || dateTo !== todayStr() || status || keyword) && ( - @@ -1153,15 +1156,6 @@ function IssueEinvoiceButton({ order }: { order: DetailOrder }) { } return (
-