From 6d154b76081728a00833a7b182ae3845e6efd152 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Wed, 26 Aug 2026 15:06:06 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=83=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE=D0=BA=20=C2=AB?= =?UTF-8?q?=D0=97=D0=B0=D1=8F=D0=B2=D0=BA=D0=B0=C2=BB,=20=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BD=D1=83=D1=82=D1=8C=20=D1=81=D1=82=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=20=D1=81=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=81=D1=83=D0=BC=D0=BC=20=D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Заменил CollapseSection на FormGrid (без заголовка/иконки) в Clearance, Dismissal, Vacation и UnpaidLeave — заголовок «Заявка» не нёс смысла и полностью убран, а не переименован. В Clearance «Суммы к списанию» вынесены в отдельную CollapseSection — тот же визуальный стиль заголовка, что раньше был у общей «Заявка», вместо самодельной подписи через RequestSection.module.scss (файл удалён как более не нужный). --- .../requestPortal/forms/Clearance/README.md | 19 +++--- .../sections/RequestSection.module.scss | 16 ----- .../Clearance/sections/RequestSection.tsx | 60 ++++++++++--------- .../Dismissal/sections/RequestSection.tsx | 6 +- .../UnpaidLeave/sections/RequestSection.tsx | 6 +- .../Vacation/sections/RequestSection.tsx | 6 +- 6 files changed, 52 insertions(+), 61 deletions(-) delete mode 100644 src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss diff --git a/src/webparts/requestPortal/forms/Clearance/README.md b/src/webparts/requestPortal/forms/Clearance/README.md index c3eea21..048fa68 100644 --- a/src/webparts/requestPortal/forms/Clearance/README.md +++ b/src/webparts/requestPortal/forms/Clearance/README.md @@ -55,9 +55,9 @@ RequestTypeId» в `docs/forms.md`). Тип уже зарегистрирова заведённых руками, ссылки нет и поле не рендерится. ## Суммы к списанию (согласование) -Общий заголовок-подпись «СУММЫ К СПИСАНИЮ» (`RequestSection.module.scss`, -`.writeOffLabel`) объединяет визуально ДВЕ РАЗНЫЕ по правам вещи, идущие сразу -за подписью: +Отдельная `CollapseSection title="Суммы к списанию"` (в стиле бывшего общего +заголовка формы «Заявка», удалённого — см. `docs/forms.md`) объединяет +визуально ДВЕ РАЗНЫЕ по правам вещи: 1. **`TrainingAmount`** («Обучение») — доступность КАК И РАНЬШЕ: правит только КДП (`hrRecordsEditable`, `approverRights.ts`), сумма НЕ блокируется @@ -65,10 +65,10 @@ RequestTypeId» в `docs/forms.md`). Тип уже зарегистрирова (не требует комментария решения). Изменилась ТОЛЬКО колонка хранения — пишется и читается через `WriteOffTrainingAmount` (`ClearanceView.saveApproverFields`, `submit.ts.buildItem`, `load.ts`), а не через одноимённую `TrainingAmount` — - та осталась в схеме списка неиспользуемой. Заголовок рисуется независимо от - поля (`writeOffEditableKeys &&
…
`, а само поле — БЕЗ этого условия), - поэтому на форме подачи (`ClearanceForm`, `writeOffEditableKeys` не передан) - поле видно и без заголовка. + та осталась в схеме списка неиспользуемой. Секция видна независимо от + `writeOffEditableKeys` (само поле — без этого условия), поэтому на форме + подачи (`ClearanceForm`, `writeOffEditableKeys` не передан) поле видно и без + пяти сумм ниже. 2. **5 НЕЗАВИСИМЫХ сумм**, компактной сеткой (короткие подписи, обычная 2-колоночная сетка секции), колонки `WriteOff{Assets,Ppe,Accountable,Nma, Tmc}Amount` (см. `model.ts WRITE_OFF_CATEGORIES`): «ОС», «СИЗ», «Подотчётная @@ -103,8 +103,9 @@ RequestTypeId» в `docs/forms.md`). Тип уже зарегистрирова ## Секции формы RequestSection (сотрудник · должность · подразделение · дата расторжения · -парковочная карта · карта СКУД · «Суммы к списанию»: обучение + 5 сумм списания -компактно под общим заголовком · ссылка на заявление) +парковочная карта · карта СКУД — без заголовка, `FormGrid`) + отдельная +CollapseSection «Суммы к списанию» (обучение + 5 сумм списания) + ссылка на +заявление ## Точки входа - rptype: `clearance-form` diff --git a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss deleted file mode 100644 index 7110a9a..0000000 --- a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import '../../../../../styles/design-tokens'; - -// Заголовок группы полей ВНУТРИ секции (не отдельная CollapseSection) — нужен -// только затем, чтобы 6 сумм к списанию не читались продолжением полей выше -// (в частности — не путались с «Обучение: сумма», отдельным полем КДП чуть -// выше по форме: без подписи оба «Обучение» рядом выглядели одним и тем же). -.writeOffLabel { - grid-column: 1 / -1; - margin-top: $sp-2; - color: $gray-500; - font-family: $font-sans; - font-size: $fs-overline; - font-weight: 600; - letter-spacing: 1.4px; - text-transform: uppercase; -} diff --git a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx index 46ef9cb..9d1850f 100644 --- a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx +++ b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; -import { CollapseSection, FormField, TextInput, MoneyInput, Toggle, PeopleField, OrganizationField, LinkField } from '../../../shared/ui'; +import { FormGrid, CollapseSection, FormField, TextInput, MoneyInput, Toggle, PeopleField, OrganizationField, LinkField } from '../../../shared/ui'; import { ISectionProps, EMPLOYEE_PLACEHOLDER, WRITE_OFF_CATEGORIES } from '../model'; -import styles from './RequestSection.module.scss'; // Подразделение подтягивается автоматически при выборе сотрудника (см. // ClearanceForm.handleEmployeeChange — SharePoint User Profile) — свободный @@ -34,7 +33,8 @@ export const RequestSection: React.FC = ({ writeOffEditableKeys }) => { return ( - + <> + = ({ readOnly={hrRecordsEditable ? false : undefined} /> - {/* Суммы к списанию — TrainingAmount («Обучение: сумма») ПОДВЕДЕНА под - тот же заголовок, что и 5 сумм ниже, — визуально одна группа «Суммы к - списанию», хотя ДОСТУПНОСТЬ у них РАЗНАЯ: - - TrainingAmount — как раньше: правит только КДП (hrRecordsEditable), - без блокировки после ввода; хранится в WriteOffTrainingAmount (не - одноимённой колонке, см. IFormData.TrainingAmount), но это деталь - хранения, на форму не влияет; - - WRITE_OFF_CATEGORIES (5 сумм) — заполнить может ЛЮБОЙ активный - согласующий (не только профильный), но как только сумма указана, - блокируется НАВСЕГДА для всех, поэтому у незаблокированных - (writeOffEditableKeys.has(cat.key)) readOnly={false}, у остальных - — обычное поведение FormMode. «За что конкретно» у них — своего - поля нет: заполнил хоть одну сумму — обязательным становится - СТАНДАРТНЫЙ комментарий решения в DecisionPanel («Ваше решение»), - см. ClearanceView (commentRequired/commentPlaceholder). У - TrainingAmount этого правила нет — комментарий не требует. */} - {writeOffEditableKeys &&
Суммы к списанию
} +
+ {/* Суммы к списанию — своя CollapseSection (тот же стиль заголовка, что + раньше был у общего «Заявка»), объединяет визуально ДВЕ РАЗНЫЕ по + правам вещи: + - TrainingAmount («Обучение») — как раньше: правит только КДП + (hrRecordsEditable), без блокировки после ввода; хранится в + WriteOffTrainingAmount (не одноимённой колонке, см. + IFormData.TrainingAmount), но это деталь хранения, на форму не + влияет. Показывается всегда, даже без writeOffEditableKeys (форма + подачи). + - WRITE_OFF_CATEGORIES (5 сумм) — заполнить может ЛЮБОЙ активный + согласующий (не только профильный), но как только сумма указана, + блокируется НАВСЕГДА для всех, поэтому у незаблокированных + (writeOffEditableKeys.has(cat.key)) readOnly={false}, у остальных + — обычное поведение FormMode. «За что конкретно» у них — своего + поля нет: заполнил хоть одну сумму — обязательным становится + СТАНДАРТНЫЙ комментарий решения в DecisionPanel («Ваше решение»), + см. ClearanceView (commentRequired/commentPlaceholder). У + TrainingAmount этого правила нет — комментарий не требует. Сама + секция видна всегда (Обучение доступно и на форме подачи), а 5 + категорий — только на согласовании (writeOffEditableKeys задан). */} + = ({ ); })} - {/* Есть только у листов, созданных автоматически по согласованному заявлению - на увольнение (см. forms/Dismissal/createClearance.ts). */} - + {/* Есть только у листов, созданных автоматически по согласованному заявлению + на увольнение (см. forms/Dismissal/createClearance.ts). */} + + ); }; diff --git a/src/webparts/requestPortal/forms/Dismissal/sections/RequestSection.tsx b/src/webparts/requestPortal/forms/Dismissal/sections/RequestSection.tsx index 9d09fa2..3fe75c0 100644 --- a/src/webparts/requestPortal/forms/Dismissal/sections/RequestSection.tsx +++ b/src/webparts/requestPortal/forms/Dismissal/sections/RequestSection.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { CollapseSection, FormField, TextInput, TextArea, PhoneInput, PeopleField, LinkField } from '../../../shared/ui'; +import { FormGrid, FormField, TextInput, TextArea, PhoneInput, PeopleField, LinkField } from '../../../shared/ui'; import { ISectionProps, EMPLOYEE_PLACEHOLDER, MIN_NOTICE_MONTHS } from '../model'; import { isoDatePlusMonths } from '../../../shared/dateUtils'; import { OrganizationsTable } from './OrganizationsTable'; @@ -28,7 +28,7 @@ export const RequestSection: React.FC = ({ onRemoveOrganization, assetsAcceptorEditable }) => ( - + = ({ readOnly={assetsAcceptorEditable ? false : true} /> - + ); diff --git a/src/webparts/requestPortal/forms/UnpaidLeave/sections/RequestSection.tsx b/src/webparts/requestPortal/forms/UnpaidLeave/sections/RequestSection.tsx index 039fba1..a88f83a 100644 --- a/src/webparts/requestPortal/forms/UnpaidLeave/sections/RequestSection.tsx +++ b/src/webparts/requestPortal/forms/UnpaidLeave/sections/RequestSection.tsx @@ -1,11 +1,11 @@ import * as React from 'react'; -import { CollapseSection, FormField, TextInput, TextArea, PeopleField, OrganizationField } from '../../../shared/ui'; +import { FormGrid, FormField, TextInput, TextArea, PeopleField, OrganizationField } from '../../../shared/ui'; import { ISectionProps, EMPLOYEE_PLACEHOLDER, SUBSTITUTE_PLACEHOLDER, MIN_NOTICE_DAYS } from '../model'; import { isoDatePlusDays } from '../../../shared/dateUtils'; /** Единственная секция формы «Отпуск без содержания»: сотрудник, должность, период, основание, замещающий. */ export const RequestSection: React.FC = ({ data, set, context, onEmployeeChange }) => ( - + = ({ data, set, context, on placeholder={SUBSTITUTE_PLACEHOLDER} /> - + ); diff --git a/src/webparts/requestPortal/forms/Vacation/sections/RequestSection.tsx b/src/webparts/requestPortal/forms/Vacation/sections/RequestSection.tsx index 0b80dcb..abe6cba 100644 --- a/src/webparts/requestPortal/forms/Vacation/sections/RequestSection.tsx +++ b/src/webparts/requestPortal/forms/Vacation/sections/RequestSection.tsx @@ -1,11 +1,11 @@ import * as React from 'react'; -import { CollapseSection, FormField, TextInput, PeopleField, OrganizationField } from '../../../shared/ui'; +import { FormGrid, FormField, TextInput, PeopleField, OrganizationField } from '../../../shared/ui'; import { ISectionProps, EMPLOYEE_PLACEHOLDER, SUBSTITUTE_PLACEHOLDER, MIN_NOTICE_DAYS } from '../model'; import { isoDatePlusDays } from '../../../shared/dateUtils'; /** Единственная секция формы «Заявка на отпуск»: сотрудник, должность, даты. */ export const RequestSection: React.FC = ({ data, set, context, onEmployeeChange }) => ( - + = ({ data, set, context, on placeholder={SUBSTITUTE_PLACEHOLDER} /> - + );