From fa788fa6c0968c2fee0191d3f405e1ff5827ef74 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Mon, 17 Aug 2026 16:46:25 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- .../Tnsu.ApprovalRoute.Api/appsettings.json | 4 +++- .../approvalAdmin/ApprovalAdminWebPart.ts | 22 ++++++++++++++----- .../components/screens/DashboardScreen.tsx | 6 +++++ .../hooks/useRequestTypeListsAll.ts | 10 +++++++++ frontend/src/webparts/approvalAdmin/texts.ts | 4 ++++ 6 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 frontend/src/webparts/approvalAdmin/hooks/useRequestTypeListsAll.ts diff --git a/.gitignore b/.gitignore index 4f8ee7c..b449280 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ frontend/.idea/ workspace.xml **/bin/ **/obj/ -.DS_Store \ No newline at end of file +.DS_Store +logs/ \ No newline at end of file diff --git a/backend/Tnsu.ApprovalRoute.Api/appsettings.json b/backend/Tnsu.ApprovalRoute.Api/appsettings.json index ce4c776..647b8ab 100644 --- a/backend/Tnsu.ApprovalRoute.Api/appsettings.json +++ b/backend/Tnsu.ApprovalRoute.Api/appsettings.json @@ -3,7 +3,9 @@ "MinimumLevel": { "Default": "Information", "Override": { - "Microsoft.AspNetCore": "Warning" + "Microsoft.AspNetCore": "Warning", + "Microsoft.EntityFrameworkCore": "Warning", + "Hangfire": "Warning" } } }, diff --git a/frontend/src/webparts/approvalAdmin/ApprovalAdminWebPart.ts b/frontend/src/webparts/approvalAdmin/ApprovalAdminWebPart.ts index 554cd1a..16a8e9b 100644 --- a/frontend/src/webparts/approvalAdmin/ApprovalAdminWebPart.ts +++ b/frontend/src/webparts/approvalAdmin/ApprovalAdminWebPart.ts @@ -1,7 +1,7 @@ import * as React from 'react'; import * as ReactDom from 'react-dom'; import { Version } from '@microsoft/sp-core-library'; -import { type IPropertyPaneConfiguration, PropertyPaneTextField } from '@microsoft/sp-property-pane'; +import { type IPropertyPaneConfiguration, PropertyPaneDropdown, PropertyPaneTextField } from '@microsoft/sp-property-pane'; import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base'; import ApprovalAdmin from './components/ApprovalAdmin'; @@ -13,6 +13,13 @@ export interface IApprovalAdminWebPartProps { portalBaseUrl: string; } +// Единственные два адреса, которыми реально пользуются (прод и локальный backend, +// см. backend/Tnsu.ApprovalRoute.Api/Properties/launchSettings.json) — селект +// вместо текстового поля, чтобы переключаться одним кликом, а не перепечатывать +// url и рисковать опечаткой в проде. +const API_BASE_URL_PROD = 'https://api.tnsu.kz/approval-route'; +const API_BASE_URL_LOCAL = 'http://localhost:5080'; + export default class ApprovalAdminWebPart extends BaseClientSideWebPart { public render(): void { @@ -28,9 +35,8 @@ export default class ApprovalAdminWebPart extends BaseClientSideWebPart { // Прод-адрес по умолчанию: пакуем именно под прод (heft package-solution --production). - // Для локальной разработки переопределите значение в панели свойств веб-части - // (например, на http://localhost:5080 — порт из backend/.../launchSettings.json). - this.properties.apiBaseUrl = this.properties.apiBaseUrl || 'https://api.tnsu.kz/approval-route'; + // Для локальной разработки переключите в панели свойств веб-части на «Локально». + this.properties.apiBaseUrl = this.properties.apiBaseUrl || API_BASE_URL_PROD; this.properties.aadResourceId = this.properties.aadResourceId || 'api://9232d9e2-9807-4753-808f-07250e5474b0'; this.properties.portalBaseUrl = this.properties.portalBaseUrl || 'https://api.tnsu.kz'; return Promise.resolve(); @@ -55,9 +61,13 @@ export default class ApprovalAdminWebPart extends BaseClientSideWebPart = ({ api, onNaviga description={texts.dashboard.resolveCard.description} onClick={() => onNavigate('resolve')} /> + onNavigate('manageRequests')} + /> ); diff --git a/frontend/src/webparts/approvalAdmin/hooks/useRequestTypeListsAll.ts b/frontend/src/webparts/approvalAdmin/hooks/useRequestTypeListsAll.ts new file mode 100644 index 0000000..87b63a5 --- /dev/null +++ b/frontend/src/webparts/approvalAdmin/hooks/useRequestTypeListsAll.ts @@ -0,0 +1,10 @@ +import * as React from 'react'; +import { RequestTypeListSeries } from '../models'; +import { ApprovalRouteApi } from '../services/api'; +import { AsyncList, useAsyncList } from './useAsyncList'; + +/** Серии партиций списков сразу по всем типам заявок — сейчас нужен только дашборду (счётчик партиций). */ +export function useRequestTypeListsAll(api: ApprovalRouteApi): AsyncList { + const load = React.useCallback(() => api.requestTypes.listsAll(), [api]); + return useAsyncList(load); +} diff --git a/frontend/src/webparts/approvalAdmin/texts.ts b/frontend/src/webparts/approvalAdmin/texts.ts index fa8ab54..2b76a51 100644 --- a/frontend/src/webparts/approvalAdmin/texts.ts +++ b/frontend/src/webparts/approvalAdmin/texts.ts @@ -102,6 +102,10 @@ export const texts = { resolveCard: { title: 'Проверка маршрута', description: 'Как разрешится маршрут для конкретного пользователя' + }, + manageRequestsCard: { + title: 'Редактирование заявок', + description: 'Правка маршрута согласования конкретной заявки' } },