скрипт

This commit is contained in:
gorbenko.pavel
2026-08-17 13:19:43 +05:00
parent 364835eaf7
commit e2c7f96021
37 changed files with 377 additions and 198 deletions
@@ -0,0 +1,60 @@
import { RequestTypeId } from '../models/types';
/**
* ЕДИНЫЙ источник имён списков SharePoint.
*
* Раньше каждая форма объявляла свои DATA_LIST_TITLE/APPROVAL_LIST_TITLE строковыми
* литералами — 20 копий имён по 7 формам. Имена стали нумерованными (под архивацию:
* когда список данных упирается в порог элементов, рядом появляется пара с номером
* N+1), и с литералами каждый номер пришлось бы править по всем формам руками.
*
* Конвенция — ровно та же, что у провижинера (provisioning/Provision-Lists.ps1,
* функция Get-NumberedListTitle):
* «<База> <N> — данные» / «<База> <N> — согласование»
*
* Номер СТРОГО перед суффиксом: имя списка согласования выводится из имени списка
* данных регексом /\s*—\s*данные\s*$/, привязанным к КОНЦУ строки (см.
* features/myRequests/myRequests.service.ts и approval-route
* frontend/.../approvalAdmin/services/requestManageService.ts). Имя вида
* «… — данные 1» этот регекс не матчит, и список согласования перестаёт находиться.
*/
/** База имени по типу заявки. Ключи — те же, что в реестре форм (forms/registry.ts). */
const LIST_TITLE_BASE: Record<RequestTypeId, string> = {
'clearance-form': 'Обходной лист',
'hr-vacation': 'Заявка на отпуск',
'it-1c-ticket': 'Заявка в отдел 1С',
'it-workplace-setup': 'Организация рабочего места',
'recruiting-hire': 'Прием на работу',
'recruiting-selection': 'Заявка на подбор',
'wh-tmc-transfer': 'СЗ на перемещение ТМЦ'
};
/**
* Номер текущей пары списков. Пока единый для всех типов заявок — архивных пар ещё
* нет, все формы работают с парой №1.
*
* Когда архивация заработает, номер будет приходить из approval-route (эндпоинт
* «текущий список по типу заявки») и заполняться один раз при старте web part, до
* загрузки чанка любой формы. Сигнатуры функций ниже при этом не меняются — поэтому
* вызовы по формам править второй раз не придётся.
*/
const CURRENT_LIST_NUMBER = 1;
function listTitleBase(id: RequestTypeId): string {
const base = LIST_TITLE_BASE[id];
if (!base) {
throw new Error(`Неизвестный тип заявки «${id}»: нет базы имени списка в LIST_TITLE_BASE`);
}
return base;
}
/** Имя списка данных заявок этого типа. */
export function dataListTitle(id: RequestTypeId): string {
return `${listTitleBase(id)} ${CURRENT_LIST_NUMBER} — данные`;
}
/** Имя списка согласования заявок этого типа. */
export function approvalListTitle(id: RequestTypeId): string {
return `${listTitleBase(id)} ${CURRENT_LIST_NUMBER} — согласование`;
}