diff --git a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss new file mode 100644 index 0000000..7110a9a --- /dev/null +++ b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.module.scss @@ -0,0 +1,16 @@ +@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 965d58f..22b72c4 100644 --- a/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx +++ b/src/webparts/requestPortal/forms/Clearance/sections/RequestSection.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { 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) — свободный @@ -100,29 +101,36 @@ export const RequestSection: React.FC = ({ /> {/* Суммы к списанию — 6 независимых сумм, компактной сеткой (обычная - 2-колоночная сетка секции, короткие подписи — без full). Каждую может - заполнить ЛЮБОЙ активный согласующий (не только профильный, в отличие - от отметок выше) — но как только сумма указана, блокируется навсегда - для всех, поэтому у незаблокированных (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} - /> - - ); - })} + 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} + /> + + ); + })} + + )} {/* Есть только у листов, созданных автоматически по согласованному заявлению на увольнение (см. forms/Dismissal/createClearance.ts). */}