feat: [employee] 사원관리 정렬 옵션에 퇴직일자 추가 및 기본 정렬을 입사일 빠른순으로 변경

- 기본 정렬: 직급순 → 입사일 빠른순(hireDateAsc)
- 퇴직일자 최신순/빠른순 정렬 옵션 추가
- 정렬 옵션 순서 재배치 (입사일/퇴직일 우선)
This commit is contained in:
김보곤
2026-02-26 19:21:56 +09:00
parent a83a8298d2
commit 7aefbafb6f

View File

@@ -39,7 +39,7 @@ import { isNextRedirectError } from '@/lib/utils/redirect-error';
type FilterOption = 'all' | 'hasUserId' | 'noUserId' | 'active' | 'leave' | 'resigned';
// 정렬 옵션 타입
type SortOption = 'rank' | 'hireDateDesc' | 'hireDateAsc' | 'departmentAsc' | 'departmentDesc' | 'nameAsc' | 'nameDesc';
type SortOption = 'rank' | 'hireDateAsc' | 'hireDateDesc' | 'resignDateAsc' | 'resignDateDesc' | 'departmentAsc' | 'departmentDesc' | 'nameAsc' | 'nameDesc';
// 필터 옵션 레이블
const FILTER_OPTIONS: { value: FilterOption; label: string }[] = [
@@ -53,9 +53,11 @@ const FILTER_OPTIONS: { value: FilterOption; label: string }[] = [
// 정렬 옵션 레이블
const SORT_OPTIONS: { value: SortOption; label: string }[] = [
{ value: 'rank', label: '직급순' },
{ value: 'hireDateAsc', label: '입사일 빠른순' },
{ value: 'hireDateDesc', label: '입사일 최신순' },
{ value: 'hireDateAsc', label: '입사일 등록순' },
{ value: 'resignDateDesc', label: '퇴직일 최신순' },
{ value: 'resignDateAsc', label: '퇴직일 빠른순' },
{ value: 'rank', label: '직급순' },
{ value: 'departmentAsc', label: '부서 오름차순' },
{ value: 'departmentDesc', label: '부서 내림차순' },
{ value: 'nameAsc', label: '이름 오름차순' },
@@ -83,7 +85,7 @@ export function EmployeeManagement() {
// 필터 및 정렬 상태
const [filterOption, setFilterOption] = useState<FilterOption>('all');
const [sortOption, setSortOption] = useState<SortOption>('rank');
const [sortOption, setSortOption] = useState<SortOption>('hireDateAsc');
// 다이얼로그 상태
const [fieldSettingsOpen, setFieldSettingsOpen] = useState(false);
@@ -166,10 +168,14 @@ export function EmployeeManagement() {
// 직급 순서 정의 (높은 직급이 먼저)
const rankOrder: Record<string, number> = { '회장': 1, '사장': 2, '부사장': 3, '전무': 4, '상무': 5, '이사': 6, '부장': 7, '차장': 8, '과장': 9, '대리': 10, '주임': 11, '사원': 12 };
return (rankOrder[a.rank || ''] || 99) - (rankOrder[b.rank || ''] || 99);
case 'hireDateDesc':
return new Date(b.hireDate || 0).getTime() - new Date(a.hireDate || 0).getTime();
case 'hireDateAsc':
return new Date(a.hireDate || 0).getTime() - new Date(b.hireDate || 0).getTime();
case 'hireDateDesc':
return new Date(b.hireDate || 0).getTime() - new Date(a.hireDate || 0).getTime();
case 'resignDateAsc':
return new Date(a.resignationDate || 0).getTime() - new Date(b.resignationDate || 0).getTime();
case 'resignDateDesc':
return new Date(b.resignationDate || 0).getTime() - new Date(a.resignationDate || 0).getTime();
case 'departmentAsc':
const deptA = a.departmentPositions?.[0]?.departmentName || '';
const deptB = b.departmentPositions?.[0]?.departmentName || '';