feat(WEB): 리스트 페이지 UI 레이아웃 표준화

- 공통 레이아웃 패턴 적용: [달력] → [프리셋] → [검색창] → [버튼들]
- beforeTableContent → headerActions + createButton 마이그레이션
- DateRangeSelector extraActions prop 활용하여 검색창 통합
- PricingListClient 테이블 행 클릭 → 상세 이동 기능 추가
- 회계 관련 페이지 (입금/출금/매입/매출/어음/카드/예상지출 등) 정리
- 건설 관련 페이지 검색 영역 정리
- 부모 메뉴 리다이렉트 컴포넌트 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-26 22:04:36 +09:00
parent ff93ab7fa2
commit 1f6b592b9f
65 changed files with 1974 additions and 503 deletions

View File

@@ -14,8 +14,10 @@ export interface TabChipProps {
label: string;
/** 카운트 숫자 */
count?: number;
/** 활성 상태 */
/** 활성 상태 (active 또는 isActive 둘 다 지원) */
active?: boolean;
/** 활성 상태 (active의 별칭) */
isActive?: boolean;
/** 클릭 이벤트 */
onClick?: () => void;
/** 색상 테마 */
@@ -28,26 +30,30 @@ export function TabChip({
label,
count,
active = false,
isActive,
onClick,
color = "blue",
className = "",
}: TabChipProps) {
// isActive가 전달되면 isActive 사용, 아니면 active 사용
const isActiveState = isActive ?? active;
return (
<button
onClick={onClick}
className={`
flex items-center gap-2 px-4 py-2.5 rounded-full border transition-all
${
active
? "border-primary bg-primary/5"
: "border-gray-200 hover:border-gray-300 hover:bg-gray-50"
isActiveState
? "border-primary bg-primary text-white shadow-sm"
: "border-gray-200 bg-white hover:border-gray-300 hover:bg-gray-50"
}
${className}
`}
>
<span
className={`text-sm ${
active ? "text-primary font-medium" : "text-gray-600 font-normal"
isActiveState ? "text-white font-medium" : "text-gray-600 font-normal"
}`}
>
{label}
@@ -55,7 +61,7 @@ export function TabChip({
{count !== undefined && (
<span
className={`text-sm font-semibold ${
active ? "text-primary" : "text-gray-900"
isActiveState ? "text-white" : "text-gray-900"
}`}
>
{count}