feat: [hr] 사원 등록 - 기존 직원 불러오기 기능 추가
- 검색 API (GET /api/admin/hr/employees/search-users) - 테넌트 소속 + 사원 미등록 사용자 검색 - 기존 사용자 선택 시 Employee만 생성 (User 생성 건너뜀) - Alpine.js 검색 UI (포커스시 목록, debounce 검색, 선택/해제)
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user