fix(ServiceRequest): убрать лишний FormGrid внутри CollapseSection

CollapseSection.body у @tnsu/ui-kit уже сам является 2-колоночным грид-
контейнером (._body{grid-template-columns:1fr 1fr}) — FormGrid внутри
неё создавал ВЛОЖЕННЫЙ грид, который занимал только ОДНУ из двух колонок
родителя (как единственный grid-item без явного grid-column), а его
собственные две колонки делили уже урезанную пополам ширину. Из-за этого
«Объём работ», «Итого объёмы работ» и «Общие замечания» рендерились на
половине ширины карточки, хотя место было.

FormField кладём прямо в CollapseSection, без обёртки FormGrid — так уже
сделано во всех остальных формах (см. Clearance/RequestSection.tsx).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-09-01 16:37:58 +05:00
parent 97fb71036b
commit a3d3983d78
2 changed files with 56 additions and 60 deletions
@@ -1,20 +1,18 @@
import * as React from 'react'; import * as React from 'react';
import { CollapseSection, FormGrid, FormField, TextArea } from '../../../shared/ui'; import { CollapseSection, FormField, TextArea } from '../../../shared/ui';
import { ISectionProps } from '../model'; import { ISectionProps } from '../model';
/** Общие замечания — отдельный блок бумажной формы, не относится к объёму работ. */ /** Общие замечания — отдельный блок бумажной формы, не относится к объёму работ. */
export const RemarksSection: React.FC<ISectionProps> = ({ data, set }) => ( export const RemarksSection: React.FC<ISectionProps> = ({ data, set }) => (
<CollapseSection title="Общие замечания" icon="info"> <CollapseSection title="Общие замечания" icon="info">
<FormGrid> <FormField label="Общие замечания" htmlFor="GeneralRemarks" full>
<FormField label="Общие замечания" htmlFor="GeneralRemarks" full> <TextArea
<TextArea id="GeneralRemarks"
id="GeneralRemarks" value={data.GeneralRemarks}
value={data.GeneralRemarks} onChange={(v) => set('GeneralRemarks', v)}
onChange={(v) => set('GeneralRemarks', v)} rows={4}
rows={4} placeholder="Особые условия, ссылки на нормативы, порядок приёмки скрытых работ…"
placeholder="Особые условия, ссылки на нормативы, порядок приёмки скрытых работ…" />
/> </FormField>
</FormField>
</FormGrid>
</CollapseSection> </CollapseSection>
); );
@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import styles from './ScopeSection.module.scss'; import styles from './ScopeSection.module.scss';
import { CollapseSection, FormGrid, FormField, TextInput, TextArea } from '../../../shared/ui'; import { CollapseSection, FormField, TextInput, TextArea } from '../../../shared/ui';
import { CostGroupsEditor } from './CostGroupsEditor'; import { CostGroupsEditor } from './CostGroupsEditor';
import { ISectionProps } from '../model'; import { ISectionProps } from '../model';
@@ -24,57 +24,55 @@ export const ScopeSection: React.FC<ISectionProps> = ({ data, set }) => {
return ( return (
<CollapseSection title="Описание требований" icon="helmet"> <CollapseSection title="Описание требований" icon="helmet">
<FormGrid> <FormField label="Объём работ" htmlFor="ScopeOfWork" required full>
<FormField label="Объём работ" htmlFor="ScopeOfWork" required full> <TextArea
<TextArea id="ScopeOfWork"
id="ScopeOfWork" value={data.ScopeOfWork}
value={data.ScopeOfWork} onChange={(v) => set('ScopeOfWork', v)}
onChange={(v) => set('ScopeOfWork', v)} rows={12}
rows={12} placeholder="Состав и объёмы работ, ссылки на рабочую документацию, требования к исполнительной документации…"
placeholder="Состав и объёмы работ, ссылки на рабочую документацию, требования к исполнительной документации…" />
/> </FormField>
</FormField>
<div className={styles.volumesBlock}> <div className={styles.volumesBlock}>
<span className={styles.volumesLabel}>Итого объёмы работ</span> <span className={styles.volumesLabel}>Итого объёмы работ</span>
<CostGroupsEditor <CostGroupsEditor
groups={data.WorkVolumes} groups={data.WorkVolumes}
onChange={(groups) => set('WorkVolumes', groups)} onChange={(groups) => set('WorkVolumes', groups)}
totalLabel="Итого" totalLabel="Итого"
emptyReadOnlyText="Объёмы работ не заполнены" emptyReadOnlyText="Объёмы работ не заполнены"
/> />
</div> </div>
<FormField label="Предлагаемые поставщики" htmlFor="SuggestedSuppliers" full> <FormField label="Предлагаемые поставщики" htmlFor="SuggestedSuppliers" full>
<TextArea <TextArea
id="SuggestedSuppliers" id="SuggestedSuppliers"
value={data.SuggestedSuppliers} value={data.SuggestedSuppliers}
onChange={(v) => set('SuggestedSuppliers', v)} onChange={(v) => set('SuggestedSuppliers', v)}
rows={3} rows={3}
placeholder="Требования к подрядчику и/или конкретные организации из утверждённого перечня" placeholder="Требования к подрядчику и/или конкретные организации из утверждённого перечня"
/> />
</FormField> </FormField>
<FormField label="Предполагаемая дата начала" htmlFor="EstimatedStartDate"> <FormField label="Предполагаемая дата начала" htmlFor="EstimatedStartDate">
<TextInput <TextInput
id="EstimatedStartDate" id="EstimatedStartDate"
type="date" type="date"
value={data.EstimatedStartDate} value={data.EstimatedStartDate}
onChange={(v) => set('EstimatedStartDate', v)} onChange={(v) => set('EstimatedStartDate', v)}
/> />
</FormField> </FormField>
<FormField label="Предполагаемая дата окончания" htmlFor="EstimatedFinishDate"> <FormField label="Предполагаемая дата окончания" htmlFor="EstimatedFinishDate">
<TextInput <TextInput
id="EstimatedFinishDate" id="EstimatedFinishDate"
type="date" type="date"
value={data.EstimatedFinishDate} value={data.EstimatedFinishDate}
onChange={(v) => set('EstimatedFinishDate', v)} onChange={(v) => set('EstimatedFinishDate', v)}
min={data.EstimatedStartDate || undefined} min={data.EstimatedStartDate || undefined}
/> />
</FormField> </FormField>
{days !== undefined && <div className={styles.duration}>Продолжительность: {days} кал. дн.</div>} {days !== undefined && <div className={styles.duration}>Продолжительность: {days} кал. дн.</div>}
</FormGrid>
</CollapseSection> </CollapseSection>
); );
}; };