Редактирование заявок у конкретного пользователя (#14)
Tests / frontend-test (push) Successful in 45s
Tests / backend-test (push) Successful in 7m18s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/14
This commit was merged in pull request #14.
This commit is contained in:
2026-08-19 12:58:07 +00:00
parent 82512eb1db
commit 1ee1b71e3e
36 changed files with 1862 additions and 333 deletions
+66 -2
View File
@@ -77,7 +77,8 @@ export const texts = {
requestTypes: 'Типы заявок',
routes: 'Маршруты',
resolve: 'Проверка маршрута',
manageRequests: 'Редактирование заявок'
manageRequests: 'Редактирование заявок',
manageByUser: 'Заявки по участнику'
},
app: {
@@ -106,6 +107,10 @@ export const texts = {
manageRequestsCard: {
title: 'Редактирование заявок',
description: 'Правка маршрута согласования конкретной заявки'
},
manageByUserCard: {
title: 'Заявки по участнику',
description: 'Массовая замена согласующего в заявках и шаблонах маршрутов'
}
},
@@ -347,7 +352,7 @@ export const texts = {
projectSearchPlaceholder: 'Поиск проекта по названию...',
projectClear: 'Без проекта',
projectDictionaryLoading: 'Справочник проектов ещё загружается.',
departmentLabel: 'Отдел (для шага «Руководитель указанного отдела»)',
departmentLabel: 'Отдел',
departmentHint: 'Заполните, если в маршруте есть шаг с типом руководителя «Руководитель указанного отдела».',
departmentPlaceholder: 'Не выбран',
departmentSearchPlaceholder: 'Поиск по названию отдела...',
@@ -440,6 +445,65 @@ export const texts = {
saveError: 'Не удалось сохранить'
},
manageByUser: {
breadcrumb: 'Заявки по участнику',
subtitle: 'Массовая замена согласующего/исполнителя',
title: 'Заявки по участнику',
employeeLabel: 'Сотрудник',
employeePlaceholder: 'Выберите сотрудника',
employeeHint: 'Покажет все его активные заявки (по всем типам и партициям) и все шаблонные шаги, где он назначен лично.',
replaceEverywhere: 'Заменить везде',
liveTitle: 'Активные заявки',
liveEmpty: 'Активных заявок нет.',
liveLoadError: 'Не удалось загрузить заявки',
columnRequestType: 'Тип заявки',
columnRequest: 'Заявка',
columnPosition: 'Должность',
columnStatus: 'Статус',
columnPhase: 'Фаза',
templatesTitle: 'Шаблоны маршрутов',
templatesEmpty: 'Шагов с этим исполнителем нет.',
templatesLoadError: 'Не удалось загрузить шаги маршрутов',
columnRoute: 'Маршрут',
columnStepStatus: 'Статус шага',
columnCondition: 'Условие',
replaceOne: 'Заменить',
selectAll: 'Выбрать все',
deselectAll: 'Снять выделение',
replaceSelected: (count: number): string => `Заменить выбранные (${count})`,
targetLabel: 'Заменить на',
targetPlaceholder: 'Выберите, кем заменить',
targetHint: 'Кого поставим вместо выбранного сотрудника. Пока не заполнено, кнопки замены выключены.',
targetClear: 'Не выбран',
swap: 'Поменять местами',
progressLabel: 'Заменяем…',
liveResult: (ok: number, fail: number, deleted: number, skipped: number): string => {
const parts = [`заменено ${ok}`];
if (deleted > 0) parts.push(`удалено дублей ${deleted}`);
if (skipped > 0) parts.push(`пропущено ${skipped}`);
if (fail > 0) parts.push(`не удалось ${fail}`);
return `Заявки: ${parts.join(', ')}.`;
},
templatesResult: (ok: number, fail: number, deleted: number, skipped: number): string => {
const parts = [`заменено ${ok}`];
if (deleted > 0) parts.push(`удалено дублей ${deleted}`);
if (skipped > 0) parts.push(`пропущено ${skipped}`);
if (fail > 0) parts.push(`не удалось ${fail}`);
return `Шаблоны: ${parts.join(', ')}.`;
},
duplicateModalTitle: 'Уже назначен на этом же шаге',
duplicateLiveMessage: (requestLabel: string, oldPosition: string, newEmail: string): string =>
`В заявке ${requestLabel} сотрудник ${newEmail} уже согласует/исполняет этот же шаг. ` +
`Заменить строку («${oldPosition || 'без должности'}») тоже на него нельзя — появится дубль. Удалить эту строку?`,
duplicateTemplateMessage: (routeLabel: string, orderNo: number, newEmail: string): string =>
`В маршруте «${routeLabel}» сотрудник ${newEmail} уже назначен на шаг с такими же параметрами. ` +
`Заменить шаг №${orderNo} на него нельзя — сервер вернул конфликт. Удалить этот шаг?`,
duplicateDelete: 'Да, удалить',
duplicateDeleteAll: 'Да для всех',
duplicateSkip: 'Нет, пропустить',
duplicateSkipAll: 'Нет для всех'
},
// Значения по умолчанию для переиспользуемых контролов выбора.
select: {
placeholder: 'Выберите значение',