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

@@ -6,7 +6,7 @@
'use client';
import { Label } from '@/components/ui/label';
import { Input } from '@/components/ui/input';
import { DatePicker } from '@/components/ui/date-picker';
import type { DynamicFieldRendererProps } from '../types';
export function DateField({
@@ -25,11 +25,9 @@ export function DateField({
{field.field_name}
{field.is_required && <span className="text-red-500"> *</span>}
</Label>
<Input
id={fieldKey}
type="date"
<DatePicker
value={stringValue}
onChange={(e) => onChange(e.target.value)}
onChange={(date) => onChange(date)}
disabled={disabled}
className={error ? 'border-red-500' : ''}
/>

View File

@@ -3,6 +3,7 @@
*/
import { Input } from '@/components/ui/input';
import { DatePicker } from '@/components/ui/date-picker';
import { Label } from '@/components/ui/label';
import { Checkbox } from '@/components/ui/checkbox';
import { Textarea } from '@/components/ui/textarea';
@@ -186,6 +187,8 @@ export function ProductCertificationSection({
setCertificationFile,
isSubmitting,
register,
setValue,
getValues,
}: Pick<ProductFormProps,
| 'remarks'
| 'setRemarks'
@@ -197,6 +200,8 @@ export function ProductCertificationSection({
| 'setCertificationFile'
| 'isSubmitting'
| 'register'
| 'setValue'
| 'getValues'
>) {
return (
<div className="pt-6 mt-6 border-t space-y-4">
@@ -221,20 +226,18 @@ export function ProductCertificationSection({
<div className="space-y-2">
<Label htmlFor="certificationStartDate"> </Label>
<Input
id="certificationStartDate"
type="date"
{...register('certificationStartDate')}
<DatePicker
value={getValues('certificationStartDate') || ''}
onChange={(date) => setValue('certificationStartDate', date)}
disabled={isSubmitting}
/>
</div>
<div className="space-y-2">
<Label htmlFor="certificationEndDate"> </Label>
<Input
id="certificationEndDate"
type="date"
{...register('certificationEndDate')}
<DatePicker
value={getValues('certificationEndDate') || ''}
onChange={(date) => setValue('certificationEndDate', date)}
disabled={isSubmitting}
/>
</div>

View File

@@ -348,6 +348,8 @@ export default function ItemForm({ mode, initialData, onSubmit }: ItemFormProps)
setCertificationFile={setCertificationFile}
isSubmitting={isSubmitting}
register={register}
setValue={setValue}
getValues={getValues}
/>
)}
</CardContent>