feat: migrated 1c form
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { AadHttpClient, HttpClientResponse } from '@microsoft/sp-http';
|
||||
import { WebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { APPROVAL_API_CLIENT_ID, APPROVAL_API_BASE_URL } from '../config';
|
||||
import { ApprovalStatus, IApiResponse, IRequestType, IResolvedRoute } from './models/IApprovalRouteApi';
|
||||
import { ApprovalStatus, IApiResponse, IRequestType, IResolvedRoute, IResolveFieldValue } from './models/IApprovalRouteApi';
|
||||
|
||||
// Все обращения к внешнему approval-route API — только здесь.
|
||||
// Клиент авторизуется через AadHttpClient (SSO по текущему пользователю).
|
||||
@@ -30,12 +30,18 @@ export async function getRequestTypes(context: WebPartContext): Promise<IRequest
|
||||
// 'Approval' — согласующие (кто одобряет),
|
||||
// 'Execution' — исполнители (кто выполняет после согласования).
|
||||
// Один и тот же маршрут, разные наборы шагов.
|
||||
//
|
||||
// fieldValues — условие видимости шагов (см. IResolveFieldValue): для форм с
|
||||
// шагами, зависящими от значения колонки списка (напр. WorkType), передать
|
||||
// текущее значение поля здесь. Формы без условных шагов его не передают —
|
||||
// бэкенд получает пустой массив, как раньше.
|
||||
export async function resolveRoute(
|
||||
context: WebPartContext,
|
||||
requestTypeId: number,
|
||||
userEmail: string,
|
||||
status: ApprovalStatus = 'Approval',
|
||||
departmentId: string | null = null
|
||||
departmentId: string | null = null,
|
||||
fieldValues: IResolveFieldValue[] = []
|
||||
): Promise<IResolvedRoute> {
|
||||
const c = await client(context);
|
||||
const url = `${APPROVAL_API_BASE_URL}/api/template-routes/resolve`;
|
||||
@@ -51,7 +57,7 @@ export async function resolveRoute(
|
||||
userEmail,
|
||||
projectId: null,
|
||||
status,
|
||||
fieldValues: [],
|
||||
fieldValues,
|
||||
departmentId: departmentId || null
|
||||
})
|
||||
});
|
||||
|
||||
@@ -2,7 +2,7 @@ import { WebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { resolveRoute } from './approvalRoute.service';
|
||||
import { ApprovalListService, IApproverToWrite } from './approvalList.service';
|
||||
import { IMatrixRow } from './models/IMatrixRow';
|
||||
import { ApprovalStatus } from './models/IApprovalRouteApi';
|
||||
import { ApprovalStatus, IResolveFieldValue } from './models/IApprovalRouteApi';
|
||||
import { APPROVAL_PHASE, REQUEST_STATUS } from './models/statuses';
|
||||
|
||||
// Планируемый маршрут для НОВОЙ заявки: resolve по email инициатора → строки матрицы.
|
||||
@@ -15,10 +15,11 @@ export async function getPlannedMatrix(
|
||||
userEmail: string,
|
||||
approval: ApprovalListService,
|
||||
status: ApprovalStatus = 'Approval',
|
||||
departmentId?: string | null
|
||||
departmentId?: string | null,
|
||||
fieldValues?: IResolveFieldValue[]
|
||||
): Promise<IMatrixRow[]> {
|
||||
if (!userEmail) return [];
|
||||
const route = await resolveRoute(context, requestTypeId, userEmail, status, departmentId);
|
||||
const route = await resolveRoute(context, requestTypeId, userEmail, status, departmentId, fieldValues);
|
||||
const phase = status === 'Execution' ? APPROVAL_PHASE.execution : APPROVAL_PHASE.approval;
|
||||
const ordered = route.steps.slice().sort((a, b) => a.orderNo - b.orderNo);
|
||||
return Promise.all(
|
||||
|
||||
@@ -16,6 +16,7 @@ export type {
|
||||
IRequestType,
|
||||
IResolvedRoute,
|
||||
IResolvedRouteStep,
|
||||
IResolveFieldValue,
|
||||
} from './models/IApprovalRouteApi';
|
||||
|
||||
export { getRequestTypes, resolveRoute } from './approvalRoute.service';
|
||||
|
||||
@@ -20,6 +20,16 @@ export interface IApiResponse<T> {
|
||||
data: T;
|
||||
}
|
||||
|
||||
// Условие видимости шага маршрута (настраивается в админке маршрутов —
|
||||
// «Показывать шаг только при выполнении условия», сравнение «Поле списка»/
|
||||
// «Оператор»/«Значение»). fieldName — внутреннее имя колонки списка (напр.
|
||||
// "WorkType"), value — фактическое значение из формы (напр. "Создание
|
||||
// пользователя в 1С"), с которым бэкенд сравнивает эту колонку.
|
||||
export interface IResolveFieldValue {
|
||||
fieldName: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
// GET /api/template-routes/resolve → data
|
||||
export interface IResolvedRoute {
|
||||
routeId: number;
|
||||
|
||||
Reference in New Issue
Block a user