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

@@ -15,6 +15,7 @@ import { useState, useEffect, useCallback, useMemo } from "react";
import { useDaumPostcode } from "@/hooks/useDaumPostcode";
import { useClientList } from "@/hooks/useClientList";
import { Input } from "@/components/ui/input";
import { DatePicker } from "@/components/ui/date-picker";
import { Textarea } from "@/components/ui/textarea";
import { Button } from "@/components/ui/button";
import { QuantityInput } from "@/components/ui/quantity-input";
@@ -730,13 +731,12 @@ export function OrderRegistration({
<Label>
<span className="text-red-500">*</span>
</Label>
<Input
type="date"
<DatePicker
value={form.deliveryRequestDate}
onChange={(e) => {
onChange={(date) => {
setForm((prev) => ({
...prev,
deliveryRequestDate: e.target.value,
deliveryRequestDate: date,
}));
clearFieldError("deliveryRequestDate");
}}
@@ -750,13 +750,12 @@ export function OrderRegistration({
<div className="space-y-2">
<Label></Label>
<Input
type="date"
<DatePicker
value={form.expectedShipDate}
onChange={(e) =>
onChange={(date) =>
setForm((prev) => ({
...prev,
expectedShipDate: e.target.value,
expectedShipDate: date,
}))
}
disabled={form.expectedShipDateUndecided}

View File

@@ -13,6 +13,7 @@
import { useState, useEffect, useMemo, useCallback } from "react";
import { useRouter } from "next/navigation";
import { Input } from "@/components/ui/input";
import { DatePicker } from "@/components/ui/date-picker";
import { Textarea } from "@/components/ui/textarea";
import { PhoneInput } from "@/components/ui/phone-input";
import { Checkbox } from "@/components/ui/checkbox";
@@ -414,22 +415,20 @@ export function OrderSalesDetailEdit({ orderId }: OrderSalesDetailEditProps) {
<Label>
<span className="text-red-500">*</span>
</Label>
<Input
type="date"
<DatePicker
value={form.deliveryRequestDate}
onChange={(e) =>
setForm({ ...form, deliveryRequestDate: e.target.value })
onChange={(date) =>
setForm({ ...form, deliveryRequestDate: date })
}
/>
</div>
<div className="space-y-2">
<Label></Label>
<Input
type="date"
<DatePicker
value={form.expectedShipDate}
onChange={(e) =>
setForm({ ...form, expectedShipDate: e.target.value })
onChange={(date) =>
setForm({ ...form, expectedShipDate: date })
}
disabled={form.expectedShipDateUndecided}
/>