Параллельные шаги (#3)

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/3
This commit was merged in pull request #3.
This commit is contained in:
2026-08-06 12:36:22 +00:00
parent 40f9ac6c03
commit df9d12622d
24 changed files with 967 additions and 175 deletions
+11 -5
View File
@@ -20,7 +20,9 @@ import * as React from 'react';
// перезагрузки страницы. useRoute() подписан и на popstate (кнопка «назад»),
// и на её собственное событие, поэтому реагирует на оба способа смены URL.
export type PortalMode = 'submit' | 'approve' | 'create';
// 'edit' — открыть СВОЮ незавершённую заявку (черновик / возвращённую /
// отклонённую) на редактирование в той же выезжающей панели, что и просмотр.
export type PortalMode = 'submit' | 'approve' | 'create' | 'edit';
/** Раздел бокового меню. */
export type NavSection = 'new' | 'approvals' | 'own' | 'search';
@@ -29,9 +31,9 @@ export interface IRoute {
mode: PortalMode;
/** Раздел бокового меню; сохраняется и когда поверх открыта заявка. */
nav: NavSection;
/** Ключ формы (тип заявки) — для 'approve' и 'create'. */
/** Ключ формы (тип заявки) — для 'approve', 'edit' и 'create'. */
formKey?: string;
/** Id заявки в списке данных — для 'approve'. */
/** Id заявки в списке данных — для 'approve' и 'edit'. */
itemId?: number;
/** Id исходной заявки для предзаполнения — для 'create' (напр. орг. места на основе прием). */
sourceId?: number;
@@ -59,6 +61,10 @@ export function parseRoute(search: string = window.location.search): IRoute {
if (mode === 'approve' && formKey && itemId && !isNaN(itemId)) {
return { mode: 'approve', nav, formKey, itemId };
}
// Редактирование собственной незавершённой заявки — та же панель, но с формой.
if (mode === 'edit' && formKey && itemId && !isNaN(itemId)) {
return { mode: 'edit', nav, formKey, itemId };
}
// Создание производной заявки с предзаполнением из исходной.
if (formKey && sourceId && !isNaN(sourceId)) {
return { mode: 'create', nav: 'new', formKey, sourceId };
@@ -78,8 +84,8 @@ function buildQuery(route: IRoute): string {
if (route.nav !== 'new') {
params.set('rpnav', route.nav);
}
if (route.mode === 'approve' && route.formKey && route.itemId) {
params.set('rpmode', 'approve');
if ((route.mode === 'approve' || route.mode === 'edit') && route.formKey && route.itemId) {
params.set('rpmode', route.mode);
params.set('rptype', route.formKey);
params.set('rpid', String(route.itemId));
} else if (route.mode === 'create' && route.formKey && route.sourceId) {