diff --git a/backend/app/routers/employees.py b/backend/app/routers/employees.py index 6d39338..e2170bc 100644 --- a/backend/app/routers/employees.py +++ b/backend/app/routers/employees.py @@ -63,6 +63,11 @@ def update_employee( # Обновляем данные update_data = employee_update.model_dump(exclude_unset=True) + + # Если передан пароль, хешируем его + if 'password' in update_data: + update_data['password'] = pwd_context.hash(update_data['password']) + for field, value in update_data.items(): setattr(db_employee, field, value) diff --git a/backend/app/schemas/employee.py b/backend/app/schemas/employee.py index e7fc793..178bbdc 100644 --- a/backend/app/schemas/employee.py +++ b/backend/app/schemas/employee.py @@ -17,6 +17,7 @@ class EmployeeUpdate(BaseModel): last_name: str | None = None department: str | None = None office: str | None = None + password: str | None = None model_config = ConfigDict(from_attributes=True) diff --git a/frontend/src/components/admin/EditEmployeeModal.vue b/frontend/src/components/admin/EditEmployeeModal.vue new file mode 100644 index 0000000..5c589bf --- /dev/null +++ b/frontend/src/components/admin/EditEmployeeModal.vue @@ -0,0 +1,335 @@ + + + + + Редактировать сотрудника + × + + + + + Имя + + + + + Фамилия + + + + + Отдел + + + + + Кабинет + + + + + Новый пароль (оставьте пустым, если не хотите менять) + + + + + + {{ isLoading ? 'Сохранение...' : 'Сохранить' }} + + + Отмена + + + + {{ error }} + + + + + + + + \ No newline at end of file diff --git a/frontend/src/components/admin/RequestsModal.vue b/frontend/src/components/admin/RequestsModal.vue index cdad63d..1c935ed 100644 --- a/frontend/src/components/admin/RequestsModal.vue +++ b/frontend/src/components/admin/RequestsModal.vue @@ -123,9 +123,40 @@ export default { const response = await axios.get('/api/requests', { headers: { Authorization: `Bearer ${localStorage.getItem('admin_token')}` + }, + validateStatus: function (status) { + return status < 500 + } + }) + + if (response.status === 307) { + const redirectUrl = response.headers.location + const finalResponse = await axios.get(redirectUrl, { + headers: { + Authorization: `Bearer ${localStorage.getItem('admin_token')}` + } + }) + this.requests = finalResponse.data + } else { + this.requests = response.data + } + + // Получаем информацию о сотрудниках для отображения имен + const employeesResponse = await axios.get('/api/employees', { + headers: { + Authorization: `Bearer ${localStorage.getItem('admin_token')}` + } + }) + const employees = employeesResponse.data + + // Добавляем имена сотрудников к заявкам + this.requests = this.requests.map(request => { + const employee = employees.find(emp => emp.id === request.employee_id) + return { + ...request, + employee_name: employee ? `${employee.last_name} ${employee.first_name}` : 'Неизвестный сотрудник' } }) - this.requests = response.data } catch (error) { console.error('Error fetching requests:', error) }
{{ error }}