## 단가관리 (Pricing Management) - 단가 목록 페이지 (IntegratedListTemplateV2 공통 템플릿 적용) - 단가 등록/수정 폼 (원가/마진 자동 계산) - 이력 조회, 수정 이력, 최종 확정 다이얼로그 - 판매관리 > 단가관리 네비게이션 메뉴 추가 ## HR 관리 (Human Resources) - 사원관리 (목록, 등록, 수정, 상세, CSV 업로드) - 부서관리 (트리 구조) - 근태관리 (기본 구조) ## 품목관리 개선 - Radix UI Select controlled mode 버그 수정 (key prop 적용) - DynamicItemForm 파일 업로드 지원 - 수정 페이지 데이터 로딩 개선 ## 문서화 - 단가관리 마이그레이션 체크리스트 - HR 관리 구현 체크리스트 - Radix UI Select 버그 수정 가이드 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
'use client';
|
|
|
|
import { Button } from '@/components/ui/button';
|
|
import { Card, CardContent } from '@/components/ui/card';
|
|
import { Calendar, FileSpreadsheet, UserPlus, Mail, Settings } from 'lucide-react';
|
|
|
|
interface EmployeeToolbarProps {
|
|
dateRange: { from?: Date; to?: Date };
|
|
onDateRangeChange: (range: { from?: Date; to?: Date }) => void;
|
|
onAddEmployee: () => void;
|
|
onCSVUpload: () => void;
|
|
onUserInvite: () => void;
|
|
onFieldSettings: () => void;
|
|
}
|
|
|
|
export function EmployeeToolbar({
|
|
dateRange,
|
|
onDateRangeChange,
|
|
onAddEmployee,
|
|
onCSVUpload,
|
|
onUserInvite,
|
|
onFieldSettings,
|
|
}: EmployeeToolbarProps) {
|
|
return (
|
|
<Card>
|
|
<CardContent className="p-4">
|
|
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
|
|
{/* 날짜 필터 */}
|
|
<div className="flex items-center gap-2">
|
|
<Calendar className="w-4 h-4 text-muted-foreground" />
|
|
<span className="text-sm text-muted-foreground">기간:</span>
|
|
<Button variant="outline" size="sm">
|
|
{dateRange.from && dateRange.to
|
|
? `${dateRange.from.toLocaleDateString('ko-KR')} - ${dateRange.to.toLocaleDateString('ko-KR')}`
|
|
: '전체 기간'
|
|
}
|
|
</Button>
|
|
</div>
|
|
|
|
{/* 액션 버튼들 */}
|
|
<div className="flex flex-wrap items-center gap-2">
|
|
<Button
|
|
variant="outline"
|
|
size="sm"
|
|
onClick={onFieldSettings}
|
|
className="gap-1"
|
|
>
|
|
<Settings className="w-4 h-4" />
|
|
<span className="hidden sm:inline">필드 설정</span>
|
|
</Button>
|
|
<Button
|
|
variant="outline"
|
|
size="sm"
|
|
onClick={onCSVUpload}
|
|
className="gap-1"
|
|
>
|
|
<FileSpreadsheet className="w-4 h-4" />
|
|
<span className="hidden sm:inline">CSV 일괄등록</span>
|
|
</Button>
|
|
<Button
|
|
variant="outline"
|
|
size="sm"
|
|
onClick={onUserInvite}
|
|
className="gap-1"
|
|
>
|
|
<Mail className="w-4 h-4" />
|
|
<span className="hidden sm:inline">사용자 초대</span>
|
|
</Button>
|
|
<Button
|
|
size="sm"
|
|
onClick={onAddEmployee}
|
|
className="gap-1"
|
|
>
|
|
<UserPlus className="w-4 h-4" />
|
|
<span>사원 등록</span>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
} |