feat: [hr] 사원 등록 - 기존 직원 불러오기 기능 추가

- 검색 API (GET /api/admin/hr/employees/search-users)
- 테넌트 소속 + 사원 미등록 사용자 검색
- 기존 사용자 선택 시 Employee만 생성 (User 생성 건너뜀)
- Alpine.js 검색 UI (포커스시 목록, debounce 검색, 선택/해제)
This commit is contained in:
김보곤
2026-02-26 17:35:54 +09:00
parent 446b8787de
commit 9623256386
4 changed files with 264 additions and 36 deletions

View File

@@ -40,6 +40,19 @@ public function index(Request $request): JsonResponse|Response
]);
}
/**
* 기존 사용자 검색 (사원 미등록, 테넌트 소속)
*/
public function searchUsers(Request $request): JsonResponse
{
$users = $this->employeeService->searchTenantUsers($request->get('q', ''));
return response()->json([
'success' => true,
'data' => $users,
]);
}
/**
* 사원 통계
*/
@@ -58,9 +71,10 @@ public function stats(): JsonResponse
*/
public function store(Request $request): JsonResponse
{
$validated = $request->validate([
$rules = [
'existing_user_id' => 'nullable|integer|exists:users,id',
'name' => 'required|string|max:50',
'email' => 'nullable|email|max:100|unique:users,email',
'email' => 'nullable|email|max:100',
'phone' => 'nullable|string|max:20',
'password' => 'nullable|string|min:6',
'department_id' => 'nullable|integer|exists:departments,id',
@@ -75,7 +89,14 @@ public function store(Request $request): JsonResponse
'hire_date' => 'nullable|date',
'address' => 'nullable|string|max:200',
'emergency_contact' => 'nullable|string|max:100',
]);
];
// 신규 사용자일 때만 이메일 unique 검증
if (! $request->filled('existing_user_id')) {
$rules['email'] = 'nullable|email|max:100|unique:users,email';
}
$validated = $request->validate($rules);
try {
$employee = $this->employeeService->createEmployee($validated);