Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/7
5.2 KiB
Формы портала заявок — индекс
Каждая форма живёт в своей папке src/webparts/requestPortal/forms/<Форма>/ и имеет
рядом README.md — карточку с её бизнес-поведением (то, что не видно из кода
с первого взгляда). Здесь — общий индекс.
Правило (при добавлении формы)
- Папка
forms/<Форма>/+README.mdпо шаблону. - Строка в индексе ниже.
- Строка в
forms/registry.ts(ленивая форма) и, если есть режим согласующего, вforms/viewRegistry.ts. - Плитка в
data/requests.ts.
Формы больше не хардкодят RequestTypeId
Числовой id типа заявки во внешнем approval-route API (GET /api/request-types)
выдаётся сервером при регистрации типа в админке и непредсказуем заранее (в
старой pto-tracker у «отпуска» было 1, при заведении типа в новой админке он
получил id 11). Раньше каждая форма хардкодила это число константой вида
VACATION_REQUEST_TYPE_ID = 11; теперь — резолвит его в рантайме по своему
pageUrl (тот же rptype, что и id в data/requests.ts) через
useRequestTypeId(context, pageUrl) (shared/approval). Результат кешируется
на уровне модуля на время сессии (см. getRequestTypeIdByPageUrl в
approvalRoute.service.ts) — повторный вызов из другой формы не бьёт по сети заново.
- Форма подачи знает свой
pageUrlиз пропаrequestType.id. - Режим согласующего (
<Форма>View) получает его пропомformKey(см.IApprovalViewPropsвforms/viewRegistry.tsиApproveFeature.tsx).
Что НЕ дублируем в карточке (лежит в других местах)
- Колонки списков →
forms/<Форма>/provisioning.json. - Параметры ссылок (rptype/rpmode/rpid/rpsource) →
routing.md. - Как обращаться к спискам SP из кода →
sp-lists-frontend.md. - Общий жизненный цикл (черновик/upsert/блокировка/статусы), согласование, исполнение,
печать — одинаковы для всех форм (общие примитивы
shared/uiиshared/approval).
Карточка — только про то, чем эта форма отличается.
Индекс форм
| Ключ (rptype) | Форма | Категория | Согл. | Исп. | Просмотр | Фишки | Готово |
|---|---|---|---|---|---|---|---|
recruiting-selection |
Заявка на подбор | Рекрутинг | нет | нет | нет | много полей (~42), поля-люди (в т.ч. мульти) | ✅ |
recruiting-hire |
Заявка на прием | Рекрутинг | да | да | да | маска телефона, деньги, условное «взамен кого», источник для орг. места | ✅ |
it-workplace-setup |
Организация рабочего места | IT | да | да | да | префилл из «прием», поля ПО/доступы правит руководитель | ✅ |
it-1c-ticket |
Заявка в отдел 1С | IT | да | нет | да | контакты предзаполняются из Graph (/me); вместо фазы исполнения — карточка в Microsoft Planner (согласовано/сразу без согласования — рабочий бакет, отклонено — отдельный бакет) | ✅ |
clearance-form |
Обходной лист | Отдел кадров | да | нет | да | подаётся HR за увольняемого (People-picker); условие «IsManager» резолвится по должности из самой заявки; да/нет-поля (парковка, СКУД), сумма обучения | ✅ |
hr-transfer |
Перемещение сотрудников | Отдел кадров | — | — | — | — | ⏳ заглушка (плитка есть, форма не сделана) |
Легенда: Согл. — есть фаза согласования; Исп. — есть фаза исполнения;
Просмотр — есть режим согласующего (<Форма>View).