feat: [employee] 사원관리 정렬 기능 추가 (입사일/퇴직일)

- 정렬 드롭다운 추가: 입사일 빠른순/최신순, 퇴직일 최신순/빠른순, 상태순
- 기본 정렬을 입사일 빠른순으로 설정
- JSON 컬럼(json_extra.hire_date, resign_date) 기반 정렬
This commit is contained in:
김보곤
2026-02-26 19:37:07 +09:00
parent 40e3f93f5c
commit ce942e8999
2 changed files with 30 additions and 2 deletions

View File

@@ -48,8 +48,25 @@ public function getEmployees(array $filters = [], int $perPage = 20): LengthAwar
}
// 정렬
$query->orderByRaw("FIELD(employee_status, 'active', 'leave', 'resigned')")
->orderBy('created_at', 'desc');
$sortBy = $filters['sort_by'] ?? 'hire_date_asc';
switch ($sortBy) {
case 'hire_date_asc':
$query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.hire_date')) ASC");
break;
case 'hire_date_desc':
$query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.hire_date')) DESC");
break;
case 'resign_date_asc':
$query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.resign_date')) ASC");
break;
case 'resign_date_desc':
$query->orderByRaw("JSON_UNQUOTE(JSON_EXTRACT(json_extra, '$.resign_date')) DESC");
break;
default:
$query->orderByRaw("FIELD(employee_status, 'active', 'leave', 'resigned')")
->orderBy('created_at', 'desc');
break;
}
return $query->paginate($perPage);
}

View File

@@ -75,6 +75,17 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 f
<option value="resigned" {{ request('status') === 'resigned' ? 'selected' : '' }}>퇴직</option>
</select>
</div>
<div style="flex: 0 1 160px;">
<label class="block text-xs text-gray-500 mb-1">정렬</label>
<select name="sort_by"
class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
<option value="hire_date_asc" {{ request('sort_by', 'hire_date_asc') === 'hire_date_asc' ? 'selected' : '' }}>입사일 빠른순</option>
<option value="hire_date_desc" {{ request('sort_by') === 'hire_date_desc' ? 'selected' : '' }}>입사일 최신순</option>
<option value="resign_date_desc" {{ request('sort_by') === 'resign_date_desc' ? 'selected' : '' }}>퇴직일 최신순</option>
<option value="resign_date_asc" {{ request('sort_by') === 'resign_date_asc' ? 'selected' : '' }}>퇴직일 빠른순</option>
<option value="default" {{ request('sort_by') === 'default' ? 'selected' : '' }}>상태순</option>
</select>
</div>
<div class="shrink-0">
<button type="submit"
hx-get="{{ route('api.admin.hr.employees.index') }}"