Files
request-portal/src/webparts/requestPortal/forms/viewRegistry.ts
T
gorbenko.pavel e976b4e8d4
Tests / frontend-test (pull_request) Successful in 2m12s
feat: форма «Заявка на оплату» (СТ/потребность, счёт через OCR и ИИ)
Новая форма acc-payment-request в категории «Бухгалтерия»: основание —
согласованная СТ (сайт СТ) или потребность; из основания подставляются
получатель, раздел, вид работ, условия, общая сумма и позиции. Счёт (PDF)
сохраняется в библиотеку, уходит на OCR, ИИ достаёт реквизиты, суммы и позиции
и сверяет их с СТ. Подсвечиваются чужой получатель в счёте и превышение
общей суммы СТ всеми оплатами. Справочники 1С — общий DictionaryPicker.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 15:01:28 +05:00

90 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import * as React from 'react';
import type { WebPartContext } from '@microsoft/sp-webpart-base';
export interface IApprovalViewProps {
context: WebPartContext;
itemId: number;
/**
* Ключ формы (= pageUrl типа заявки в approval-route API) — тот же, что и
* rptype в ссылке (см. ApproveFeature). Нужен режиму согласующего, чтобы
* самому резолвить числовой RequestTypeId через useRequestTypeId (форма
* подачи получает готовый requestType.id, а View — только itemId/context).
*/
formKey: string;
/**
* Партиция (серверный url списка), где лежит именно ЭТА заявка — см.
* shared/approval/listPartitions.ts. Не задан — просмотр откатывается на
* текущую партицию типа заявки (старые ссылки без параметра).
*/
listId?: string;
/**
* Уведомление о загруженном уникальном коде заявки — нужен родителю
* (RequestPortal) для заголовка Drawer, который рендерится ДО того, как
* View успевает загрузить саму заявку и узнать её код.
*/
onCodeLoaded?: (code: string) => void;
}
type ViewComponent = React.ComponentType<IApprovalViewProps>;
/**
* Реестр форм «только для чтения» (режим согласующего): ключ формы → ленивый просмотр.
* Добавить просмотр = создать <Форма>View.tsx + строка здесь.
*/
const viewRegistry: Record<string, React.LazyExoticComponent<ViewComponent>> = {
'recruiting-selection': React.lazy(
() => import(/* webpackChunkName: 'view-recruiting-selection' */ './RecruitingSelection/RecruitingSelectionView')
),
'recruiting-hire': React.lazy(
() => import(/* webpackChunkName: 'view-recruiting-hire' */ './RecruitingHire/RecruitingHireView')
),
'recruiting-referral': React.lazy(
() => import(/* webpackChunkName: 'view-referral' */ './Referral/ReferralView')
),
'it-workplace-setup': React.lazy(
() => import(/* webpackChunkName: 'view-workplace-setup' */ './WorkplaceSetup/WorkplaceSetupView')
),
'it-1c-ticket': React.lazy(
() => import(/* webpackChunkName: 'view-1c-ticket' */ './Ticket1C/Ticket1CView')
),
'hr-vacation': React.lazy(
() => import(/* webpackChunkName: 'view-vacation' */ './Vacation/VacationView')
),
'hr-unpaid-leave': React.lazy(
() => import(/* webpackChunkName: 'view-unpaid-leave' */ './UnpaidLeave/UnpaidLeaveView')
),
'hr-skud-explanation': React.lazy(
() => import(/* webpackChunkName: 'view-skud-explanation' */ './SkudExplanation/SkudExplanationView')
),
'hr-business-trip': React.lazy(
() => import(/* webpackChunkName: 'view-business-trip' */ './BusinessTrip/BusinessTripView')
),
'wh-tmc-transfer': React.lazy(
() => import(/* webpackChunkName: 'view-tmc-transfer' */ './TmcTransfer/TmcTransferView')
),
'wh-service-request': React.lazy(
() => import(/* webpackChunkName: 'view-service-request' */ './ServiceRequest/ServiceRequestView')
),
'clearance-form': React.lazy(
() => import(/* webpackChunkName: 'view-clearance' */ './Clearance/ClearanceView')
),
'hr-dismissal': React.lazy(
() => import(/* webpackChunkName: 'view-dismissal' */ './Dismissal/DismissalView')
),
'hr-transfer': React.lazy(
() => import(/* webpackChunkName: 'view-employee-transfer' */ './EmployeeTransfer/EmployeeTransferView')
),
'acc-payment-request': React.lazy(
() => import(/* webpackChunkName: 'view-payment-request' */ './PaymentRequest/PaymentRequestView')
),
'wh-concrete-request': React.lazy(
() => import(/* webpackChunkName: 'view-concrete-request' */ './ConcreteRequest/ConcreteRequestView')
)
};
export function getViewComponent(
formKey: string
): React.LazyExoticComponent<ViewComponent> | undefined {
return viewRegistry[formKey];
}