feat: 가맹몰 상세 목록의 버튼 구성을 시안대로 맞춘다
상단에 [+ 업체 등록]을 두고, 행 관리는 상세 유무와 관계없이 [수정][비활성|노출][삭제] 세 개로 통일한다(사용자 확정 — 동작보다 시안 우선). 상세는 기존 가맹점에만 붙어 여기서 업체를 만들 수 없으므로 [업체 등록]은 가맹점 관리로 가라는 안내만 띄운다. 상세 없는 행의 [비활성]·[삭제]는 백엔드가 NOT_FOUND로 거절해 사유가 토스트로 올라온다. Co-Authored-By: Claude Opus 5
@c5ad8335b83db38309600fe2a38d21ea6b85d936
--- app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-list.tsx
+++ app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-list.tsx
... | ... | @@ -55,8 +55,9 @@ |
| 55 | 55 |
/** |
| 56 | 56 |
* 가맹몰 상세 목록 — 기획 BO-MAL-001을 「관리자관리 > 가맹몰 상세 관리」로 옮긴 것. |
| 57 | 57 |
* |
| 58 |
- * 가맹점 전체가 오고 상세가 붙은 건만 상태·등록일이 있다. 기획의 [+ 업체 등록]은 없다 — |
|
| 59 |
- * 상세는 기존 가맹점에만 붙어 행의 [상세 등록]으로 들어간다(사용자 확정). |
|
| 58 |
+ * 가맹점 전체가 오고 상세가 붙은 건만 상태·등록일이 있다. 버튼 구성은 시안 그대로다 — |
|
| 59 |
+ * [+ 업체 등록]과 행의 [수정][비활성][삭제]를 모두 둔다(사용자 확정, 동작보다 시안 우선). |
|
| 60 |
+ * 상세는 기존 가맹점에만 붙으므로 등록은 행의 [수정]으로 들어간다. |
|
| 60 | 61 |
* |
| 61 | 62 |
* 이슈: 메뉴 건수 열은 목록 응답에 없어 `-`다(보고함). 카테고리·상태도 백엔드가 아직 주지 |
| 62 | 63 |
* 않아 대부분 `-`로 보인다. |
... | ... | @@ -364,6 +365,20 @@ |
| 364 | 365 |
disabled={isBusy || selectedIds.size === 0}
|
| 365 | 366 |
onAction={confirmBulkDelete}
|
| 366 | 367 |
/> |
| 368 |
+ {/* 시안 BO-MAL-001의 [+ 업체 등록]. 상세는 기존 가맹점에만 붙어 여기서 업체를 만들 수
|
|
| 369 |
+ 없다 — 자리는 시안대로 두고 누르면 가는 곳을 안내한다(사용자 확정). */} |
|
| 370 |
+ <FoxButton |
|
| 371 |
+ type="primary" |
|
| 372 |
+ size="md" |
|
| 373 |
+ leadingIcon={<i className="fox-ico fox-ico-Plus" aria-hidden="true" />}
|
|
| 374 |
+ label="업체 등록" |
|
| 375 |
+ onAction={() =>
|
|
| 376 |
+ showToast({
|
|
| 377 |
+ variant: 'info', |
|
| 378 |
+ message: '업체(가맹점)는 가맹점 관리에서 등록합니다. 여기서는 등록된 가맹점의 상세를 관리합니다.', |
|
| 379 |
+ }) |
|
| 380 |
+ } |
|
| 381 |
+ /> |
|
| 367 | 382 |
</> |
| 368 | 383 |
} |
| 369 | 384 |
page={currentPage}
|
--- app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-row-actions.tsx
+++ app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-row-actions.tsx
... | ... | @@ -17,8 +17,9 @@ |
| 17 | 17 |
} |
| 18 | 18 |
|
| 19 | 19 |
/** |
| 20 |
- * 기획 BO-MAL-001 관리 열 — [수정] [비활성|노출] [삭제]. 상세가 없는 가맹점은 [상세 등록] |
|
| 21 |
- * 하나뿐이다(상세는 기존 가맹점에만 붙는다 — 사용자 확정). |
|
| 20 |
+ * 기획 BO-MAL-001 관리 열 — 모든 행에 [수정] [비활성|노출] [삭제]. 상세가 없는 가맹점도 시안 |
|
| 21 |
+ * 그대로 세 버튼을 둔다(사용자 확정 — 동작보다 시안 우선). [수정]은 등록 화면으로 이어지고, |
|
| 22 |
+ * 나머지는 백엔드가 NOT_FOUND로 거절해 사유가 토스트로 올라온다. |
|
| 22 | 23 |
*/ |
| 23 | 24 |
export function MerchantDetailRowActions({ row }: MerchantDetailRowActionsProps) {
|
| 24 | 25 |
const router = useRouter(); |
... | ... | @@ -61,19 +62,6 @@ |
| 61 | 62 |
</FoxButtonGroup> |
| 62 | 63 |
), |
| 63 | 64 |
}); |
| 64 |
- } |
|
| 65 |
- |
|
| 66 |
- if (!row.hasDetail) {
|
|
| 67 |
- return ( |
|
| 68 |
- <FoxButtonGroup size="sm" align="center"> |
|
| 69 |
- <FoxButton |
|
| 70 |
- type="secondary" |
|
| 71 |
- size="sm" |
|
| 72 |
- label="상세 등록" |
|
| 73 |
- onAction={() => router.push(merchantDetailPath(row.id))}
|
|
| 74 |
- /> |
|
| 75 |
- </FoxButtonGroup> |
|
| 76 |
- ); |
|
| 77 | 65 |
} |
| 78 | 66 |
|
| 79 | 67 |
return ( |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?