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

@@ -17,6 +17,8 @@ import {
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Button } from "@/components/ui/button";
import { NumberInput } from "@/components/ui/number-input";
import { CurrencyInput } from "@/components/ui/currency-input";
import {
Select,
SelectContent,
@@ -216,12 +218,11 @@ export function ItemAddDialog({
<Label htmlFor="width">
(mm) <span className="text-red-500">*</span>
</Label>
<Input
<NumberInput
id="width"
type="number"
placeholder="예: 7260"
value={form.width}
onChange={(e) => setForm({ ...form, width: e.target.value })}
value={parseFloat(form.width) || 0}
onChange={(value) => setForm({ ...form, width: String(value ?? 0) })}
/>
{errors.width && (
<p className="text-xs text-red-500">{errors.width}</p>
@@ -231,12 +232,11 @@ export function ItemAddDialog({
<Label htmlFor="height">
(mm) <span className="text-red-500">*</span>
</Label>
<Input
<NumberInput
id="height"
type="number"
placeholder="예: 2600"
value={form.height}
onChange={(e) => setForm({ ...form, height: e.target.value })}
value={parseFloat(form.height) || 0}
onChange={(value) => setForm({ ...form, height: String(value ?? 0) })}
/>
{errors.height && (
<p className="text-xs text-red-500">{errors.height}</p>
@@ -290,12 +290,11 @@ export function ItemAddDialog({
{/* 단가 */}
<div className="space-y-2">
<Label htmlFor="unitPrice"> ()</Label>
<Input
<CurrencyInput
id="unitPrice"
type="number"
placeholder="예: 8000000"
value={form.unitPrice}
onChange={(e) => setForm({ ...form, unitPrice: e.target.value })}
value={parseFloat(form.unitPrice) || 0}
onChange={(value) => setForm({ ...form, unitPrice: String(value ?? 0) })}
/>
</div>
</div>