From 27e156abf8bf1d833476ff56af8cae0a8c60b675 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Wed, 26 Aug 2026 14:22:47 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=C2=AB=D0=9E=D0=B1=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=C2=BB=20=D0=BF=D0=BE=D0=B4=D0=B2=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B4=20=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=BA=20=C2=AB=D0=A1=D1=83=D0=BC=D0=BC=D1=8B=20=D0=BA=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8E=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TrainingAmount («Обучение: сумма», правит только КДП, не блокируется после ввода) физически перенесено рядом с 5 суммами списания (правит любой активный согласующий, блокируются навсегда) — под один заголовок-подпись «СУММЫ К СПИСАНИЮ». Права и поведение остались разными (readOnly у TrainingAmount по-прежнему считается отдельно, hrRecordsEditable, а не writeOffEditableKeys), изменилось только визуальное соседство: раньше поле стояло сразу после «Дата расторжения договора», далеко от одноимённой группы, из которой недавно убрали дублирующее «Обучение». Заголовок группы рисуется независимо от TrainingAmount (только когда writeOffEditableKeys задан, т.е. в режиме просмотра) — само поле показывается и на форме подачи, без заголовка, как и раньше. Co-Authored-By: Claude Opus 5 --- .../requestPortal/forms/Clearance/README.md | 28 ++++--- .../Clearance/sections/RequestSection.tsx | 82 +++++++++---------- 2 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/webparts/requestPortal/forms/Clearance/README.md b/src/webparts/requestPortal/forms/Clearance/README.md index e6d71fc..9709ab2 100644 --- a/src/webparts/requestPortal/forms/Clearance/README.md +++ b/src/webparts/requestPortal/forms/Clearance/README.md @@ -55,13 +55,21 @@ RequestTypeId» в `docs/forms.md`). Тип уже зарегистрирова заведённых руками, ссылки нет и поле не рендерится. ## Суммы к списанию (согласование) -5 НЕЗАВИСИМЫХ сумм, компактной сеткой под подписью «СУММЫ К СПИСАНИЮ» (короткие -подписи, обычная 2-колоночная сетка секции), колонки -`WriteOff{Assets,Ppe,Accountable,Nma,Tmc}Amount` (см. `model.ts -WRITE_OFF_CATEGORIES`): «ОС», «СИЗ», «Подотчётная сумма», «НМА», «ТМЦ». -Обучение сюда НЕ входит — у него уже есть `TrainingAmount` (см. выше) с ДРУГИМ -поведением (правит только КДП); заводить второе одноимённое поле с иным -поведением рядом только путало. +Общий заголовок-подпись «СУММЫ К СПИСАНИЮ» (`RequestSection.module.scss`, +`.writeOffLabel`) объединяет визуально ДВЕ РАЗНЫЕ по правам вещи, идущие сразу +за подписью: + +1. **`TrainingAmount`** («Обучение: сумма») — уже существовавшее поле, правит + только КДП (`hrRecordsEditable`, `approverRights.ts`), сумма НЕ блокируется + после ввода. Заголовок рисуется независимо от него (`writeOffEditableKeys && +
…
`, а само поле — БЕЗ этого условия), поэтому на форме подачи + (`ClearanceForm`, `writeOffEditableKeys` не передан) поле видно и без заголовка. +2. **5 НЕЗАВИСИМЫХ сумм**, компактной сеткой (короткие подписи, обычная + 2-колоночная сетка секции), колонки `WriteOff{Assets,Ppe,Accountable,Nma, + Tmc}Amount` (см. `model.ts WRITE_OFF_CATEGORIES`): «ОС», «СИЗ», «Подотчётная + сумма», «НМА», «ТМЦ» — правит любой активный согласующий, см. ниже. Раньше + среди них было ещё и «Обучение» — убрали как дубль `TrainingAmount` с ДРУГИМ + поведением под тем же названием; общий заголовок группы остался. - **Не привязаны к должности**, в отличие от отметок выше: заполнить может ЛЮБОЙ согласующий, у которого сейчас активный шаг (`ClearanceView.canEditWriteOffs`, @@ -89,9 +97,9 @@ WRITE_OFF_CATEGORIES`): «ОС», «СИЗ», «Подотчётная сумм поведение существующего поля. ## Секции формы -RequestSection (сотрудник · должность · подразделение · дата расторжения · сумма -обучения · парковочная карта · карта СКУД · суммы к списанию (компактно) · -ссылка на заявление) +RequestSection (сотрудник · должность · подразделение · дата расторжения · +парковочная карта · карта СКУД · «Суммы к списанию»: обучение + 5 сумм списания +компактно под общим заголовком · ссылка на заявление) ## Точки входа - rptype: `clearance-form` diff --git a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx index 22b72c4..2dfca87 100644 --- a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx +++ b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx @@ -74,16 +74,6 @@ export const RequestSection: React.FC = ({ onChange={(v) => set('TerminationDate', v)} /> - {/* Явный readOnly={false} перебивает read-only контекст просмотра (профильный - согласующий правит своё поле); undefined — обычное поведение из FormMode. */} - - set('TrainingAmount', v)} - readOnly={hrRecordsEditable ? false : undefined} - /> - = ({ readOnly={hrRecordsEditable ? false : undefined} /> - {/* Суммы к списанию — 6 независимых сумм, компактной сеткой (обычная - 2-колоночная сетка секции, короткие подписи — без full). Заголовок - группы ОБЯЗАТЕЛЕН: без него «Обучение» здесь читается продолжением - «Обучение: сумма» чуть выше (разные поля — то принадлежит КДП, это - любому согласующему, см. README «Отдельный механизм от TrainingAmount»). - Каждую сумму может заполнить ЛЮБОЙ активный согласующий (не только - профильный, в отличие от отметок выше) — но как только сумма указана, - блокируется навсегда для всех, поэтому у незаблокированных - (writeOffEditableKeys.has(cat.key)) есть readOnly={false}, у остальных - — обычное поведение FormMode (просмотр — заблокировано и так). «За что - конкретно» — своего поля здесь нет: заполнил хоть одну сумму — - обязательным становится СТАНДАРТНЫЙ комментарий решения в DecisionPanel - («Ваше решение»), см. ClearanceView (commentRequired/commentPlaceholder). */} - {writeOffEditableKeys && ( - <> -
Суммы к списанию
- {WRITE_OFF_CATEGORIES.map((cat) => { - const editable = writeOffEditableKeys.has(cat.key); - return ( - - set(cat.amountField, v)} - readOnly={editable ? false : undefined} - /> - - ); - })} - - )} + {/* Суммы к списанию — TrainingAmount («Обучение: сумма», правит только + КДП) ПОДВЕДЕНА под тот же заголовок, что и 5 сумм ниже (правит любой + активный согласующий, см. WRITE_OFF_CATEGORIES) — визуально одна + группа «Суммы к списанию», хотя права на них разные. Без заголовка + «Обучение» из WRITE_OFF_CATEGORIES читалось бы дублем «Обучение: + сумма» — их когда-то было два похожих поля, оставили одно (TrainingAmount, + см. README «Отдельный механизм от TrainingAmount»), но заголовок группы + пригодился и без второго «Обучение». + Явный readOnly={false} у TrainingAmount перебивает read-only контекст + просмотра (профильный согласующий правит своё поле); undefined — + обычное поведение из FormMode. У сумм из WRITE_OFF_CATEGORIES — + заполнить может ЛЮБОЙ активный согласующий (не только профильный), но + как только сумма указана, блокируется навсегда для всех, поэтому у + незаблокированных (writeOffEditableKeys.has(cat.key)) readOnly={false}, + у остальных — обычное поведение FormMode. «За что конкретно» — своего + поля здесь нет: заполнил хоть одну сумму — обязательным становится + СТАНДАРТНЫЙ комментарий решения в DecisionPanel («Ваше решение»), см. + ClearanceView (commentRequired/commentPlaceholder). */} + {writeOffEditableKeys &&
Суммы к списанию
} + + set('TrainingAmount', v)} + readOnly={hrRecordsEditable ? false : undefined} + /> + + {writeOffEditableKeys && + WRITE_OFF_CATEGORIES.map((cat) => { + const editable = writeOffEditableKeys.has(cat.key); + return ( + + set(cat.amountField, v)} + readOnly={editable ? false : undefined} + /> + + ); + })} {/* Есть только у листов, созданных автоматически по согласованному заявлению на увольнение (см. forms/Dismissal/createClearance.ts). */}