fix: убрать заголовок «Заявка», вернуть стиль секции для сумм списания
Tests / frontend-test (pull_request) Successful in 1m10s
Tests / frontend-test (pull_request) Successful in 1m10s
Заменил CollapseSection на FormGrid (без заголовка/иконки) в Clearance, Dismissal, Vacation и UnpaidLeave — заголовок «Заявка» не нёс смысла и полностью убран, а не переименован. В Clearance «Суммы к списанию» вынесены в отдельную CollapseSection — тот же визуальный стиль заголовка, что раньше был у общей «Заявка», вместо самодельной подписи через RequestSection.module.scss (файл удалён как более не нужный).
This commit is contained in:
@@ -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,23 +90,28 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
|
||||
readOnly={hrRecordsEditable ? false : undefined}
|
||||
/>
|
||||
</FormField>
|
||||
{/* Суммы к списанию — TrainingAmount («Обучение: сумма») ПОДВЕДЕНА под
|
||||
тот же заголовок, что и 5 сумм ниже, — визуально одна группа «Суммы к
|
||||
списанию», хотя ДОСТУПНОСТЬ у них РАЗНАЯ:
|
||||
- TrainingAmount — как раньше: правит только КДП (hrRecordsEditable),
|
||||
без блокировки после ввода; хранится в WriteOffTrainingAmount (не
|
||||
одноимённой колонке, см. IFormData.TrainingAmount), но это деталь
|
||||
хранения, на форму не влияет;
|
||||
- WRITE_OFF_CATEGORIES (5 сумм) — заполнить может ЛЮБОЙ активный
|
||||
согласующий (не только профильный), но как только сумма указана,
|
||||
блокируется НАВСЕГДА для всех, поэтому у незаблокированных
|
||||
(writeOffEditableKeys.has(cat.key)) readOnly={false}, у остальных
|
||||
— обычное поведение FormMode. «За что конкретно» у них — своего
|
||||
поля нет: заполнил хоть одну сумму — обязательным становится
|
||||
СТАНДАРТНЫЙ комментарий решения в DecisionPanel («Ваше решение»),
|
||||
см. ClearanceView (commentRequired/commentPlaceholder). У
|
||||
TrainingAmount этого правила нет — комментарий не требует. */}
|
||||
{writeOffEditableKeys && <div className={styles.writeOffLabel}>Суммы к списанию</div>}
|
||||
</FormGrid>
|
||||
{/* Суммы к списанию — своя 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 задан). */}
|
||||
<CollapseSection title="Суммы к списанию" icon="calculator">
|
||||
<FormField label="Обучение" htmlFor="TrainingAmount">
|
||||
<MoneyInput
|
||||
id="TrainingAmount"
|
||||
@@ -129,13 +134,14 @@ export const RequestSection: React.FC<IRequestSectionProps> = ({
|
||||
</FormField>
|
||||
);
|
||||
})}
|
||||
{/* Есть только у листов, созданных автоматически по согласованному заявлению
|
||||
на увольнение (см. forms/Dismissal/createClearance.ts). */}
|
||||
<LinkField
|
||||
label="Заявление на увольнение"
|
||||
url={data.DismissalUrl}
|
||||
text="Открыть заявление, по которому создан этот лист"
|
||||
/>
|
||||
</CollapseSection>
|
||||
{/* Есть только у листов, созданных автоматически по согласованному заявлению
|
||||
на увольнение (см. forms/Dismissal/createClearance.ts). */}
|
||||
<LinkField
|
||||
label="Заявление на увольнение"
|
||||
url={data.DismissalUrl}
|
||||
text="Открыть заявление, по которому создан этот лист"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user