feat: 모바일 반응형 UI 개선 및 공휴일/일정 시스템 통합
- MobileCard 접기/펼치기(collapsible) 기능 추가 및 반응형 레이아웃 개선 - DatePicker 공휴일/세무일정 색상 코딩 통합, DateTimePicker 신규 추가 - useCalendarScheduleInit 훅으로 전역 공휴일/일정 데이터 캐싱 - 전 도메인 날짜 필드 DatePicker 표준화 (104 files) - 생산대시보드/작업지시 모바일 호환성 강화 - 견적서/주문관리 반응형 그리드 적용 - 회계 모듈 기능 개선 (매입상세 결재연동, 미수금현황 조회조건 등) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,7 +27,7 @@ import {
|
||||
type RowClickHandlers,
|
||||
type ListParams,
|
||||
} from '@/components/templates/UniversalListPage';
|
||||
import { ListMobileCard, InfoField } from '@/components/organisms/MobileCard';
|
||||
import { ListMobileCard } from '@/components/organisms/MobileCard';
|
||||
import { getPayments } from './actions';
|
||||
import { formatNumber } from '@/lib/utils/amount';
|
||||
import type { PaymentHistory, SortOption } from './types';
|
||||
@@ -188,21 +188,21 @@ export function PaymentHistoryClient({
|
||||
isSelected={false}
|
||||
onToggleSelection={() => {}}
|
||||
infoGrid={
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
<InfoField label="결제일" value={item.paymentDate} />
|
||||
<InfoField label="구독명" value={item.subscriptionName} />
|
||||
<InfoField label="결제 수단" value={item.paymentMethod} />
|
||||
<InfoField label="금액" value={`${formatNumber(item.amount)}원`} />
|
||||
<div className="col-span-2">
|
||||
<InfoField
|
||||
label="구독 기간"
|
||||
value={
|
||||
item.subscriptionPeriod.start && item.subscriptionPeriod.end
|
||||
? `${item.subscriptionPeriod.start} ~ ${item.subscriptionPeriod.end}`
|
||||
: '-'
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
<div className="space-y-1.5 text-sm">
|
||||
{[
|
||||
{ label: '결제일', value: item.paymentDate },
|
||||
{ label: '구독명', value: item.subscriptionName },
|
||||
{ label: '결제 수단', value: item.paymentMethod || '-' },
|
||||
{ label: '금액', value: `${formatNumber(item.amount)}원` },
|
||||
{ label: '구독 기간', value: item.subscriptionPeriod.start && item.subscriptionPeriod.end
|
||||
? `${item.subscriptionPeriod.start} ~ ${item.subscriptionPeriod.end}`
|
||||
: '-' },
|
||||
].map((field) => (
|
||||
<div key={field.label} className="flex justify-between items-center">
|
||||
<span className="text-muted-foreground">{field.label}</span>
|
||||
<span className="font-medium">{field.value}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
}
|
||||
actions={
|
||||
|
||||
@@ -157,17 +157,21 @@ export function PaymentHistoryManagement({
|
||||
isSelected={false}
|
||||
onToggleSelection={() => {}}
|
||||
infoGrid={
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
<InfoField label="결제일" value={item.paymentDate} />
|
||||
<InfoField label="구독명" value={item.subscriptionName} />
|
||||
<InfoField label="결제 수단" value={item.paymentMethod} />
|
||||
<InfoField label="금액" value={`${formatNumber(item.amount)}원`} />
|
||||
<div className="col-span-2">
|
||||
<InfoField
|
||||
label="구독 기간"
|
||||
value={`${item.subscriptionPeriod.start} ~ ${item.subscriptionPeriod.end}`}
|
||||
/>
|
||||
</div>
|
||||
<div className="space-y-1.5 text-sm">
|
||||
{[
|
||||
{ label: '결제일', value: item.paymentDate },
|
||||
{ label: '구독명', value: item.subscriptionName },
|
||||
{ label: '결제 수단', value: item.paymentMethod || '-' },
|
||||
{ label: '금액', value: `${formatNumber(item.amount)}원` },
|
||||
{ label: '구독 기간', value: item.subscriptionPeriod.start && item.subscriptionPeriod.end
|
||||
? `${item.subscriptionPeriod.start} ~ ${item.subscriptionPeriod.end}`
|
||||
: '-' },
|
||||
].map((field) => (
|
||||
<div key={field.label} className="flex justify-between items-center">
|
||||
<span className="text-muted-foreground">{field.label}</span>
|
||||
<span className="font-medium">{field.value}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
}
|
||||
actions={
|
||||
|
||||
@@ -165,7 +165,7 @@ export function PopupList({ initialData }: PopupListProps) {
|
||||
</div>
|
||||
<div className="flex-1 space-y-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-sm text-muted-foreground">#{globalIndex}</span>
|
||||
<span className="text-sm text-muted-foreground">{globalIndex}</span>
|
||||
<Badge variant={item.status === 'active' ? 'default' : 'secondary'}>
|
||||
{item.status === 'active' ? '사용함' : '사용안함'}
|
||||
</Badge>
|
||||
|
||||
Reference in New Issue
Block a user