8.6 KiB
8.6 KiB
Портал заявок — план работ
Живая карта проекта: где мы, что осталось, как делать. Отмечай сделанное галочками.
1. Что это за проект (в одну строку)
SPFx web part: категории → плитки заявок → форма. Форма пишет данные в списки SharePoint; у части заявок есть согласование (маршрут утверждающих).
2. Что уже готово ✅
Каркас и общее
- UI-поток: категории → плитки → форма (центрированная колонка 1080px, full-width канвы)
- Переиспользуемые примитивы формы (
shared/ui): Button, FormCard, FormField, FormGrid, TextInput, TextArea, Select, Toggle, CollapseSection, FormActions, Alert, Icon, PeopleField / PeopleFieldMulti - Ленивая загрузка форм (реестр
forms/registry.ts, каждая форма — отдельный чанк) - PnPjs подключён (
shared/pnp/pnpjs.ts), клиент нацелен на сайт данныхDATA_SITE_URL
Провижининг (создание списков)
- Инструмент
provisioning/— изprovisioning.jsonсоздаёт списки/колонки идемпотентно - Поддержка типов: Text, Note, Number(точность), DateTime(только дата), Boolean, Choice, Lookup, User (одиночный/мульти, «только люди»)
- Доступ: приложение
Sites.Selected, заперто на сайт/sites/requests - Правило именования:
<Название заявки> — данные/<Название заявки> — согласование
Формы
- Заявка на подбор (
recruiting-selection) — 42 поля, пишет в SP. Без согласования. - Заявка на прием (
recruiting-hire) — с согласованием (сторона автора).
Согласование (shared/approval)
- Внешний API маршрутов (
approvalRoute.service.ts, AadHttpClient/SSO) - Матрица согласующих на форме (
ApprovalMatrix,useMatrixEditor) - Запись строк согласования в SP-список (
approvalList.service,approvalSubmission.service) - Сторона автора: «Сохранить черновик» / «Отправить на согласование»
3. Что НЕ готово ⏳ (главные пробелы)
- Экран согласующего — логика есть (
approverDecision.service.ts: согласовать/вернуть/ отклонить, делегирование, пересчёт статуса), но НЕТ UI и маршрутизации «мои согласования → открыть заявку → решение». - 8 форм ещё не сделаны (см. таблицу ниже).
- Деплой: web part пока только в workbench; не упакован в каталог приложений.
- Конфиг:
DATA_SITE_URLи id API захардкожены (потом — в property pane).
4. План по фазам (предлагаемый порядок)
Фаза A — Закрыть согласование целиком
Довести до конца одну сквозную вертикаль, чтобы механизм был полным.
- Экран «Мои согласования» (список заявок, ждущих моего решения)
- Режим просмотра заявки для согласующего (read-only форма + панель решения)
- Кнопки решения: Согласовать / Вернуть / Отклонить + комментарий
- (опц.) Делегирование
- Проверка статусов end-to-end на «Заявке на прием»
Фаза B — Согласование для «Заявки на подбор»
- Список «Заявка на подбор — согласование» (манифест + провижининг)
- Подключить матрицу и submit-поток к форме подбора (id типа = 4)
Фаза C — Остальные формы (конвейер)
Для каждой формы по «рецепту одной формы» (раздел 6). Порядок — по важности для бизнеса.
- IT: Организация рабочего места
- Бухгалтерия: Аванс
- Отдел кадров: Трудовой отпуск
- Отдел кадров: Отгул
- Отдел кадров: Увольнение
- Отдел кадров: Обходной лист
- Отдел кадров: БС
- Отдел кадров: Командировка
Фаза D — Развёртывание и настройки
- Вынести
DATA_SITE_URLи id API в property pane - Одобрить web API permission для approval API (SharePoint admin → API access)
- Упаковать (
heft package-solution) и выкатить в каталог приложений - Разместить web part на странице портала
5. Справочники
Формы и их статус
| Категория | Заявка | id (реестр) | id API | Форма | Согласование |
|---|---|---|---|---|---|
| Рекрутинг | Заявка на подбор | recruiting-selection | 4 | ✅ | ⏳ (Фаза B) |
| Рекрутинг | Заявка на прием | recruiting-hire | 5 | ✅ | ✅ автор / ⏳ согласующий |
| IT | Организация раб. места | it-workplace-setup | — | ⏳ | ? |
| Бухгалтерия | Аванс | accounting-advance | — | ⏳ | ? |
| Отдел кадров | Трудовой отпуск | hr-labor-leave | — | ⏳ | ? |
| Отдел кадров | Отгул | hr-day-off | — | ⏳ | ? |
| Отдел кадров | Увольнение | hr-dismissal | — | ⏳ | ? |
| Отдел кадров | Обходной лист | hr-clearance-sheet | — | ⏳ | ? |
| Отдел кадров | БС | hr-bs | — | ⏳ | ? |
| Отдел кадров | Командировка | hr-business-trip | — | ⏳ | ? |
«?» в согласовании — решить по каждой заявке: нужно ли ей согласование вообще.
Списки в SharePoint (/sites/requests)
Заявка на подбор — данные✅Прием на работу — данные✅Прием на работу — согласование✅
6. Рецепт одной формы (чеклист)
Как добавить новую заявку — всегда одни и те же шаги:
- Данные (список): создать
forms/<Форма>/provisioning.json(колонки) → прогнатьprovisioning/Provision-Lists.ps1→ появится список<Название> — данные. - Согласование (если нужно):
forms/<Форма>/approval/provisioning.json→ список<Название> — согласование. - Форма (UI):
forms/<Форма>/model.ts—IFormData(ключи = internalName колонок),EMPTY_DATAforms/<Форма>/sections/*.tsx— секции из примитивовshared/uiforms/<Форма>/<Форма>Form.tsx— сборка секций + валидация + кнопкиforms/<Форма>/submit.ts— запись в SP (маппинг типов, люди через ensureUser)
- Реестр: строка в
forms/registry.ts('<id>': React.lazy(...)). - Плитка: уже есть в
data/requests.ts(id совпадает с реестром). - Проверка:
heft build→ тест на hosted workbench сайта/sites/requests.
7. Открытые вопросы (решить по ходу)
- Каким заявкам нужно согласование, а каким нет?
- Порядок Фазы C (какие формы делаем первыми)?
- Нужен ли реестр/дашборд поданных заявок (просмотр своих заявок и их статусов)?