feat(WEB): 입력 컴포넌트 공통화 및 UI 개선

- 숫자/통화/전화번호/사업자번호 등 특수 입력 컴포넌트 추가
- MobileCard 컴포넌트 통합 (ListMobileCard 제거)
- IntegratedListTemplateV2 페이지네이션 버그 수정 (NaN 이슈)
- IntegratedDetailTemplate 타이틀 중복 수정
- 문서 시스템 컴포넌트 추가
- 헤더 벨 아이콘 포커스 스타일 개선

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-21 20:56:17 +09:00
parent cfa72fe19b
commit 835c06ce94
190 changed files with 8575 additions and 2354 deletions

View File

@@ -52,6 +52,7 @@ import {
} from '@/components/ui/dialog';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { PhoneInput } from '@/components/ui/phone-input';
import { VisuallyHidden } from '@radix-ui/react-visually-hidden';
import { IntegratedDetailTemplate } from '@/components/templates/IntegratedDetailTemplate';
import { shipmentConfig } from './shipmentConfig';
@@ -649,12 +650,12 @@ export function ShipmentDetail({ id }: ShipmentDetailProps) {
</div>
<div className="space-y-2">
<Label htmlFor="driverContact"> ()</Label>
<Input
<PhoneInput
id="driverContact"
placeholder="010-0000-0000"
value={statusFormData.driverContact}
onChange={(e) =>
setStatusFormData((prev) => ({ ...prev, driverContact: e.target.value }))
onChange={(value) =>
setStatusFormData((prev) => ({ ...prev, driverContact: value }))
}
/>
</div>

View File

@@ -11,6 +11,8 @@ import { useRouter } from 'next/navigation';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea';
import { CurrencyInput } from '@/components/ui/currency-input';
import { PhoneInput } from '@/components/ui/phone-input';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Alert, AlertDescription } from '@/components/ui/alert';
@@ -414,10 +416,9 @@ export function ShipmentEdit({ id }: ShipmentEditProps) {
</div>
<div className="space-y-2">
<Label></Label>
<Input
type="number"
value={formData.shippingCost || ''}
onChange={(e) => handleInputChange('shippingCost', parseInt(e.target.value) || undefined)}
<CurrencyInput
value={formData.shippingCost || 0}
onChange={(value) => handleInputChange('shippingCost', value ?? undefined)}
placeholder="0"
disabled={isSubmitting}
/>
@@ -435,9 +436,9 @@ export function ShipmentEdit({ id }: ShipmentEditProps) {
</div>
<div className="space-y-2">
<Label> </Label>
<Input
<PhoneInput
value={formData.driverContact || ''}
onChange={(e) => handleInputChange('driverContact', e.target.value)}
onChange={(value) => handleInputChange('driverContact', value)}
placeholder="010-0000-0000"
disabled={isSubmitting}
/>

View File

@@ -36,7 +36,7 @@ import {
type StatCard,
type ListParams,
} from '@/components/templates/UniversalListPage';
import { ListMobileCard, InfoField } from '@/components/organisms/ListMobileCard';
import { ListMobileCard, InfoField } from '@/components/organisms/MobileCard';
import { getShipments, getShipmentStats, getShipmentStatsByStatus } from './actions';
import {
SHIPMENT_STATUS_LABELS,