feat: 모바일 반응형 UI 개선 및 공휴일/일정 시스템 통합
- MobileCard 접기/펼치기(collapsible) 기능 추가 및 반응형 레이아웃 개선 - DatePicker 공휴일/세무일정 색상 코딩 통합, DateTimePicker 신규 추가 - useCalendarScheduleInit 훅으로 전역 공휴일/일정 데이터 캐싱 - 전 도메인 날짜 필드 DatePicker 표준화 (104 files) - 생산대시보드/작업지시 모바일 호환성 강화 - 견적서/주문관리 반응형 그리드 적용 - 회계 모듈 기능 개선 (매입상세 결재연동, 미수금현황 조회조건 등) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -205,74 +205,78 @@ export function AccountSubjectSettingModal({
|
||||
</DialogHeader>
|
||||
|
||||
{/* 추가 영역 */}
|
||||
<div className="flex items-end gap-2 p-3 bg-muted/50 rounded-lg">
|
||||
<FormField
|
||||
label="코드"
|
||||
value={newCode}
|
||||
onChange={setNewCode}
|
||||
placeholder="코드"
|
||||
className="flex-1"
|
||||
<div className="space-y-2 p-3 bg-muted/50 rounded-lg">
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<FormField
|
||||
label="코드"
|
||||
value={newCode}
|
||||
onChange={setNewCode}
|
||||
placeholder="코드"
|
||||
/>
|
||||
<FormField
|
||||
label="계정과목명"
|
||||
value={newName}
|
||||
onChange={setNewName}
|
||||
placeholder="계정과목명"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-end gap-2">
|
||||
<div className="flex-1">
|
||||
<label className="text-sm font-medium mb-1.5 block">분류</label>
|
||||
<Select
|
||||
value={newCategory}
|
||||
onValueChange={(v) => setNewCategory(v as AccountSubjectCategory)}
|
||||
>
|
||||
<SelectTrigger className="h-9 text-sm">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{ACCOUNT_CATEGORY_OPTIONS.map((opt) => (
|
||||
<SelectItem key={opt.value} value={opt.value}>
|
||||
{opt.label}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<Button size="sm" className="h-9" onClick={handleAdd} disabled={isAdding}>
|
||||
{isAdding ? (
|
||||
<Loader2 className="h-4 w-4 animate-spin" />
|
||||
) : (
|
||||
<>
|
||||
<Plus className="h-4 w-4 mr-1" />
|
||||
추가
|
||||
</>
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 검색/필터 영역 */}
|
||||
<div className="space-y-2 sm:space-y-0 sm:flex sm:items-center sm:gap-2">
|
||||
<Input
|
||||
placeholder="코드 또는 이름 검색"
|
||||
value={search}
|
||||
onChange={(e) => setSearch(e.target.value)}
|
||||
className="w-full sm:max-w-[250px] h-9 text-sm"
|
||||
/>
|
||||
<FormField
|
||||
label="계정과목명"
|
||||
value={newName}
|
||||
onChange={setNewName}
|
||||
placeholder="계정과목명"
|
||||
className="flex-1"
|
||||
/>
|
||||
<div className="flex-1">
|
||||
<label className="text-sm font-medium mb-1.5 block">분류</label>
|
||||
<Select
|
||||
value={newCategory}
|
||||
onValueChange={(v) => setNewCategory(v as AccountSubjectCategory)}
|
||||
>
|
||||
<SelectTrigger className="h-9 text-sm">
|
||||
<div className="flex items-center gap-2">
|
||||
<Select value={categoryFilter} onValueChange={setCategoryFilter}>
|
||||
<SelectTrigger className="min-w-[100px] w-auto h-9 text-sm">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{ACCOUNT_CATEGORY_OPTIONS.map((opt) => (
|
||||
{ACCOUNT_CATEGORY_FILTER_OPTIONS.map((opt) => (
|
||||
<SelectItem key={opt.value} value={opt.value}>
|
||||
{opt.label}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<span className="text-sm text-muted-foreground ml-auto">
|
||||
{filteredSubjects.length}개
|
||||
</span>
|
||||
</div>
|
||||
<Button size="sm" className="h-9" onClick={handleAdd} disabled={isAdding}>
|
||||
{isAdding ? (
|
||||
<Loader2 className="h-4 w-4 animate-spin" />
|
||||
) : (
|
||||
<>
|
||||
<Plus className="h-4 w-4 mr-1" />
|
||||
추가
|
||||
</>
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* 검색/필터 영역 */}
|
||||
<div className="flex items-center gap-2">
|
||||
<Input
|
||||
placeholder="코드 또는 이름 검색"
|
||||
value={search}
|
||||
onChange={(e) => setSearch(e.target.value)}
|
||||
className="max-w-[250px] h-9 text-sm"
|
||||
/>
|
||||
<Select value={categoryFilter} onValueChange={setCategoryFilter}>
|
||||
<SelectTrigger className="min-w-[100px] w-auto h-9 text-sm">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{ACCOUNT_CATEGORY_FILTER_OPTIONS.map((opt) => (
|
||||
<SelectItem key={opt.value} value={opt.value}>
|
||||
{opt.label}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<span className="text-sm text-muted-foreground ml-auto">
|
||||
{filteredSubjects.length}개
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* 테이블 */}
|
||||
|
||||
Reference in New Issue
Block a user