From 725c120b19d6a9b1bf98d612f9452c76589c3fc0 Mon Sep 17 00:00:00 2001 From: MoonTestUse1 Date: Fri, 3 Jan 2025 02:47:56 +0600 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BC=D0=BE=D0=B4=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BE=D0=BA=D0=BE=D0=BD4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/routers/employees.py | 5 + backend/app/schemas/employee.py | 1 + .../components/admin/EditEmployeeModal.vue | 335 ++++++++++++++++++ .../src/components/admin/RequestsModal.vue | 33 +- 4 files changed, 373 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/admin/EditEmployeeModal.vue 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 @@ + + + + + \ 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) }