feat(WEB): DatePicker 공통화 및 공정관리/작업자화면 대폭 개선

DatePicker 공통화:
- date-picker.tsx 공통 컴포넌트 신규 추가
- 전체 폼 컴포넌트 DatePicker 통일 적용 (50+ 파일)
- DateRangeSelector 개선

공정관리:
- RuleModal 대폭 리팩토링 (-592줄 → 간소화)
- ProcessForm, StepForm 개선
- ProcessDetail 수정, actions 확장

작업자화면:
- WorkerScreen 기능 대폭 확장 (+543줄)
- WorkItemCard 개선
- types 확장

회계/인사/영업/품질:
- BadDebtDetail, BillDetail, DepositDetail, SalesDetail 등 DatePicker 적용
- EmployeeForm, VacationDialog 등 DatePicker 적용
- OrderRegistration, QuoteRegistration DatePicker 적용
- InspectionCreate, InspectionDetail DatePicker 적용

공사관리/CEO대시보드:
- BiddingDetail, ContractDetail, HandoverReport 등 DatePicker 적용
- ScheduleDetailModal, TodayIssueSection 개선

기타:
- WorkOrderCreate/Edit/Detail/List 개선
- ShipmentCreate/Edit, ReceivingDetail 개선
- calendar, calendarEvents 수정
- datepicker 마이그레이션 체크리스트 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-06 15:48:00 +09:00
parent e453753bdd
commit c2ed71540f
68 changed files with 1436 additions and 1134 deletions

View File

@@ -5,6 +5,7 @@ import { useRouter } from 'next/navigation';
import { Plus, X } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { DatePicker } from '@/components/ui/date-picker';
import { Label } from '@/components/ui/label';
import { CurrencyInput } from '@/components/ui/currency-input';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
@@ -301,11 +302,9 @@ export function BillDetail({ billId, mode }: BillDetailProps) {
<Label htmlFor="issueDate">
<span className="text-red-500">*</span>
</Label>
<Input
id="issueDate"
type="date"
<DatePicker
value={issueDate}
onChange={(e) => setIssueDate(e.target.value)}
onChange={setIssueDate}
disabled={isViewMode}
/>
</div>
@@ -315,11 +314,9 @@ export function BillDetail({ billId, mode }: BillDetailProps) {
<Label htmlFor="maturityDate">
<span className="text-red-500">*</span>
</Label>
<Input
id="maturityDate"
type="date"
<DatePicker
value={maturityDate}
onChange={(e) => setMaturityDate(e.target.value)}
onChange={setMaturityDate}
disabled={isViewMode}
/>
</div>
@@ -399,12 +396,10 @@ export function BillDetail({ billId, mode }: BillDetailProps) {
<TableRow key={inst.id}>
<TableCell>{index + 1}</TableCell>
<TableCell>
<Input
type="date"
<DatePicker
value={inst.date}
onChange={(e) => handleUpdateInstallment(inst.id, 'date', e.target.value)}
onChange={(date) => handleUpdateInstallment(inst.id, 'date', date)}
disabled={isViewMode}
className="w-full"
/>
</TableCell>
<TableCell>

View File

@@ -5,6 +5,7 @@ import { useRouter } from 'next/navigation';
import { Plus, X } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { DatePicker } from '@/components/ui/date-picker';
import { Label } from '@/components/ui/label';
import { CurrencyInput } from '@/components/ui/currency-input';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
@@ -369,11 +370,9 @@ export function BillDetailV2({ billId, mode }: BillDetailProps) {
<Label htmlFor="issueDate">
<span className="text-red-500">*</span>
</Label>
<Input
id="issueDate"
type="date"
<DatePicker
value={formData.issueDate}
onChange={(e) => updateField('issueDate', e.target.value)}
onChange={(date) => updateField('issueDate', date)}
disabled={isViewMode}
/>
</div>
@@ -383,11 +382,9 @@ export function BillDetailV2({ billId, mode }: BillDetailProps) {
<Label htmlFor="maturityDate">
<span className="text-red-500">*</span>
</Label>
<Input
id="maturityDate"
type="date"
<DatePicker
value={formData.maturityDate}
onChange={(e) => updateField('maturityDate', e.target.value)}
onChange={(date) => updateField('maturityDate', date)}
disabled={isViewMode}
/>
</div>
@@ -471,12 +468,10 @@ export function BillDetailV2({ billId, mode }: BillDetailProps) {
<TableRow key={inst.id}>
<TableCell>{index + 1}</TableCell>
<TableCell>
<Input
type="date"
<DatePicker
value={inst.date}
onChange={(e) => handleUpdateInstallment(inst.id, 'date', e.target.value)}
onChange={(date) => handleUpdateInstallment(inst.id, 'date', date)}
disabled={isViewMode}
className="w-full"
/>
</TableCell>
<TableCell>