fix: убрать заголовок «Заявка», вернуть стиль секции для сумм списания
Tests / frontend-test (pull_request) Successful in 1m10s

Заменил CollapseSection на FormGrid (без заголовка/иконки) в Clearance,
Dismissal, Vacation и UnpaidLeave — заголовок «Заявка» не нёс смысла
и полностью убран, а не переименован. В Clearance «Суммы к списанию»
вынесены в отдельную CollapseSection — тот же визуальный стиль
заголовка, что раньше был у общей «Заявка», вместо самодельной подписи
через RequestSection.module.scss (файл удалён как более не нужный).
This commit is contained in:
gorbenko.pavel
2026-08-26 15:06:06 +05:00
parent 4eaf133954
commit 6d154b7608
6 changed files with 52 additions and 61 deletions
@@ -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 && <div>…</div>`, а само поле — БЕЗ этого условия),
поэтому на форме подачи (`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`
@@ -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;
}
@@ -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<IRequestSectionProps> = ({
writeOffEditableKeys
}) => {
return (
<CollapseSection title="Заявка" icon="people">
<>
<FormGrid>
<FormField label="Сотрудник" htmlFor="Employee" required full>
<PeopleField
context={context}
@@ -90,13 +90,16 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
readOnly={hrRecordsEditable ? false : undefined}
/>
</FormField>
{/* Суммы к списанию — TrainingAmount («Обучение: сумма») ПОДВЕДЕНА под
тот же заголовок, что и 5 сумм ниже, — визуально одна группа «Суммы к
списанию», хотя ДОСТУПНОСТЬ у них РАЗНАЯ:
- TrainingAmount — как раньше: правит только КДП (hrRecordsEditable),
без блокировки после ввода; хранится в WriteOffTrainingAmount (не
одноимённой колонке, см. IFormData.TrainingAmount), но это деталь
хранения, на форму не влияет;
</FormGrid>
{/* Суммы к списанию — своя CollapseSection (тот же стиль заголовка, что
раньше был у общего «Заявка»), объединяет визуально ДВЕ РАЗНЫЕ по
правам вещи:
- TrainingAmount («Обучение») — как раньше: правит только КДП
(hrRecordsEditable), без блокировки после ввода; хранится в
WriteOffTrainingAmount (не одноимённой колонке, см.
IFormData.TrainingAmount), но это деталь хранения, на форму не
влияет. Показывается всегда, даже без writeOffEditableKeys (форма
подачи).
- WRITE_OFF_CATEGORIES (5 сумм) — заполнить может ЛЮБОЙ активный
согласующий (не только профильный), но как только сумма указана,
блокируется НАВСЕГДА для всех, поэтому у незаблокированных
@@ -105,8 +108,10 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
поля нет: заполнил хоть одну сумму — обязательным становится
СТАНДАРТНЫЙ комментарий решения в DecisionPanel («Ваше решение»),
см. ClearanceView (commentRequired/commentPlaceholder). У
TrainingAmount этого правила нет — комментарий не требует. */}
{writeOffEditableKeys && <div className={styles.writeOffLabel}>Суммы к списанию</div>}
TrainingAmount этого правила нет — комментарий не требует. Сама
секция видна всегда (Обучение доступно и на форме подачи), а 5
категорий — только на согласовании (writeOffEditableKeys задан). */}
<CollapseSection title="Суммы к списанию" icon="calculator">
<FormField label="Обучение" htmlFor="TrainingAmount">
<MoneyInput
id="TrainingAmount"
@@ -129,6 +134,7 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
</FormField>
);
})}
</CollapseSection>
{/* Есть только у листов, созданных автоматически по согласованному заявлению
на увольнение (см. forms/Dismissal/createClearance.ts). */}
<LinkField
@@ -136,6 +142,6 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
url={data.DismissalUrl}
text="Открыть заявление, по которому создан этот лист"
/>
</CollapseSection>
</>
);
};
@@ -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<IRequestSectionProps> = ({
onRemoveOrganization,
assetsAcceptorEditable
}) => (
<CollapseSection title="Заявка" icon="document">
<FormGrid>
<FormField label="Сотрудник" htmlFor="Employee" required full>
<PeopleField
context={context}
@@ -91,5 +91,5 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
readOnly={assetsAcceptorEditable ? false : true}
/>
</FormField>
</CollapseSection>
</FormGrid>
);
@@ -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<ISectionProps> = ({ data, set, context, onEmployeeChange }) => (
<CollapseSection title="Заявка" icon="people">
<FormGrid>
<FormField label="Сотрудник" htmlFor="Employee" required full>
<PeopleField
context={context}
@@ -41,5 +41,5 @@ export const RequestSection: React.FC<ISectionProps> = ({ data, set, context, on
placeholder={SUBSTITUTE_PLACEHOLDER}
/>
</FormField>
</CollapseSection>
</FormGrid>
);
@@ -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<ISectionProps> = ({ data, set, context, onEmployeeChange }) => (
<CollapseSection title="Заявка" icon="people">
<FormGrid>
<FormField label="Сотрудник" htmlFor="Employee" required full>
<PeopleField
context={context}
@@ -38,5 +38,5 @@ export const RequestSection: React.FC<ISectionProps> = ({ data, set, context, on
placeholder={SUBSTITUTE_PLACEHOLDER}
/>
</FormField>
</CollapseSection>
</FormGrid>
);