From 0cb395f5e70939c09b9bdf44b8713cbcb45d85c9 Mon Sep 17 00:00:00 2001 From: Grog Date: Fri, 30 Oct 2026 10:26:31 +0300 Subject: [PATCH] =?UTF-8?q?aurora-1589,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D1=81=D1=85?= =?UTF-8?q?=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=20=D0=BC?= =?UTF-8?q?=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/App.css | 40 +++++++++++++++++++ web/src/components/CustomModalCloseIcon.tsx | 5 +++ web/src/components/GenericTable/DataTable.tsx | 2 +- web/src/layouts/ConsolidationsList.tsx | 2 + web/src/widgets/Admin/CreateUserModal.tsx | 3 ++ .../ArchiveCompanyGroupModal.tsx | 4 +- .../CompanyGroupForm/CompanyGroupForm.tsx | 5 ++- .../CatalogueJurForm/CatalogueJurForm.tsx | 5 ++- .../CatalogueJurMoveForm.tsx | 5 ++- .../CatalogueJurWithdrawForm.tsx | 4 +- .../ConsoleLegalEntities/ChecklistModal.tsx | 3 ++ .../ConsoleLegalEntities.tsx | 1 + .../ConsoleLegalEntities/checklist_utils.tsx | 2 +- .../widgets/ConsoleLegalEntities/config.tsx | 2 +- web/src/widgets/ConsoleTable/LockModal.tsx | 4 +- .../ConsolidatedOsv/CounterpartyMapModal.tsx | 3 ++ web/src/widgets/ConsolidatedOsv/OsvTabs.tsx | 9 ++++- .../CreateEntityPickerModal.tsx | 10 +---- .../widgets/DocumentReview/ChecksPanel.tsx | 4 ++ web/src/widgets/FilesDrawer/DeleteModal.tsx | 10 ++++- .../widgets/FilesDrawer/ReplaceDocModal.tsx | 4 ++ .../FilesDrawer/UploadDocumentsModal.tsx | 4 ++ .../NewConsoleModal/NewConsoleModal.tsx | 6 ++- .../DeleteRelatedGroupModal.tsx | 3 ++ .../RelatedGroupForm/RelatedGroupForm.tsx | 7 +++- .../StatusChangeModal/ChangeStatusModal.tsx | 5 ++- 26 files changed, 129 insertions(+), 23 deletions(-) create mode 100644 web/src/components/CustomModalCloseIcon.tsx diff --git a/web/src/App.css b/web/src/App.css index 606dd57..e729c53 100644 --- a/web/src/App.css +++ b/web/src/App.css @@ -5,3 +5,43 @@ box-shadow: inset 0 0 0 1px #2ea64b38 !important; border-radius: 999px !important; } + + +/* кастомные стили для модального окна */ +.ant-modal-container{ + padding: 0 !important; + +} +.ant-modal-header, .ant-modal-body, .ant-modal-footer{ + padding: 16px !important; +} +.ant-modal-header{ + border-bottom: 1px solid #f0f0f0 !important; +} + +.ant-modal-close{ + padding: 4px !important; + +} +/* */ + +/* стили кастомного сегмента */ +.customSegment .ant-segmented-item{ + margin-right: 8px; + padding: 5px 8px; +} +.customSegment .ant-segmented-item-selected { + background-color: #ecfdf3 !important; + color: #1f5f35 !important; + box-shadow: inset 0 0 0 1px #2ea64b38 !important; +} + +.customSegment .ant-segmented-thumb { + background-color: #ecfdf3 !important; + box-shadow: inset 0 0 0 1px #2ea64b38 !important; +} + +.customSegment .ant-segmented-item:focus-visible { + outline: none !important; +} +/* */ diff --git a/web/src/components/CustomModalCloseIcon.tsx b/web/src/components/CustomModalCloseIcon.tsx new file mode 100644 index 0000000..7fc1738 --- /dev/null +++ b/web/src/components/CustomModalCloseIcon.tsx @@ -0,0 +1,5 @@ +import { CloseOutlined } from '@ant-design/icons'; + +export default function CustomModalCloseIcon() { + return ; +} diff --git a/web/src/components/GenericTable/DataTable.tsx b/web/src/components/GenericTable/DataTable.tsx index a845548..9d7f390 100644 --- a/web/src/components/GenericTable/DataTable.tsx +++ b/web/src/components/GenericTable/DataTable.tsx @@ -55,7 +55,7 @@ export function DataTable>({ const opts: FilterOption[] = []; for (const r of allRows) { const v = r[key]; - if (!seen.has(v)) { + if (!seen.has(v) && v) { seen.add(v); opts.push({ label: String(v), value: v }); } diff --git a/web/src/layouts/ConsolidationsList.tsx b/web/src/layouts/ConsolidationsList.tsx index 4a26eee..f6da044 100644 --- a/web/src/layouts/ConsolidationsList.tsx +++ b/web/src/layouts/ConsolidationsList.tsx @@ -92,6 +92,7 @@ export function ConsolidationPage() { display: 'flex', flexDirection: 'column', minHeight: 0, + borderRadius:12 }}> {/* после «Взять в работу» перечитываем и панель «Организации»: в ней «Ответственный» */} setReloadKey((k) => k + 1)} /> @@ -106,6 +107,7 @@ export function ConsolidationPage() { display: 'flex', flexDirection: 'column', minHeight: 0, + borderRadius:12 }}> diff --git a/web/src/widgets/Admin/CreateUserModal.tsx b/web/src/widgets/Admin/CreateUserModal.tsx index 6db7af2..f281e68 100644 --- a/web/src/widgets/Admin/CreateUserModal.tsx +++ b/web/src/widgets/Admin/CreateUserModal.tsx @@ -3,6 +3,7 @@ import { useRef, useState } from 'react'; import { ApiError, api } from '../../api/client'; import type { AdminUser, BusinessSegment, RegionalOffice, Role, UserCreate } from '../../api/types'; import { useMountedRef, useNotifyError } from './hooks'; +import CustomModalCloseIcon from '../../components/CustomModalCloseIcon'; type Props = { open: boolean; @@ -97,7 +98,9 @@ export function CreateUserModal({ open, roles, offices, onClose, onCreated }: Pr confirmLoading={submitting} cancelButtonProps={{ disabled: submitting }} mask={{ closable: !submitting }} + centered // форма смонтирована всегда (forceRender), поэтому её можно очистить после закрытия окна + closeIcon={} forceRender afterClose={() => form.resetFields()}> form={form} layout='vertical' onFinish={submit} disabled={submitting}> diff --git a/web/src/widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx b/web/src/widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx index 65db289..899ecbf 100644 --- a/web/src/widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/ArchiveCompanyGroupModal/ArchiveCompanyGroupModal.tsx @@ -1,4 +1,5 @@ import { Modal } from 'antd'; +import CustomModalCloseIcon from '../../../components/CustomModalCloseIcon'; type Props = { open: boolean; @@ -19,7 +20,8 @@ export const ArchiveCompanyGroupModal: React.FC = ({ open, onCancel, onOk cancelText='Отмена' okButtonProps={isArchived ? undefined : { danger: true }} confirmLoading={loading} - centered> + centered + closeIcon={}>

{isArchived ? 'Группа компаний вернётся из архива в список действующих.' : 'Группа компаний будет перенесена в архив.'}

diff --git a/web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx index 8ddd91a..481be85 100644 --- a/web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CompanyGroupForm/CompanyGroupForm.tsx @@ -7,6 +7,7 @@ import { fetchOneCompanyGroup } from '../../../services/api/directories/company_ import type { CompanyGroupFormProps } from '../../../types/companyGroups/companyGroups'; import { useNotificationApi } from '../../../utils/useNotification'; import { loadOffices } from '../../Admin/UsersTable'; +import CustomModalCloseIcon from '../../../components/CustomModalCloseIcon'; type Props = { open: boolean; @@ -109,7 +110,9 @@ export const CompanyGroupForm: React.FC = ({ open, onCancel, onOk, compan destroyOnHidden loading={initialDataLoading} confirmLoading={confirmLoading} - width={720}> + width={720} + centered + closeIcon={}>
diff --git a/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx index bb98ed5..f6af4d0 100644 --- a/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx @@ -9,6 +9,7 @@ import type { RelatedGroupOut } from '../../../types/api'; import type { CatalogueJurFormProps } from '../../../types/catalogueJur/catalogueJur'; import { useNotificationApi } from '../../../utils/useNotification'; import { loadOffices } from '../../Admin/UsersTable'; +import CustomModalCloseIcon from '../../../components/CustomModalCloseIcon'; type Props = { open: boolean; @@ -163,7 +164,9 @@ export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId destroyOnHidden width={720} confirmLoading={confirmLoading} - loading={initialDataLoading}> + loading={initialDataLoading} + centered + closeIcon={}> diff --git a/web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx index bfe6db4..412cb0e 100644 --- a/web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurMoveForm/CatalogueJurMoveForm.tsx @@ -9,6 +9,7 @@ import { getCompanyGroupsThunk } from '../../../store/slices/companyGroupsSlice/ import { useAppDispatch, useAppSelector } from '../../../store/store'; import type { MoveCatalogueJurProps } from '../../../types/catalogueJur/catalogueJur'; import { useNotificationApi } from '../../../utils/useNotification'; +import CustomModalCloseIcon from '../../../components/CustomModalCloseIcon'; type FormValues = { name: string; @@ -94,7 +95,9 @@ export const MoveCatalogueJurForm: React.FC = ({ open, onCancel, onOk, ju cancelText='Отмена' destroyOnHidden loading={initialDataLoading} - confirmLoading={confirmLoading}> + confirmLoading={confirmLoading} + centered + closeIcon={}> diff --git a/web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx index bd776da..5f606cd 100644 --- a/web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurWithdrawForm/CatalogueJurWithdrawForm.tsx @@ -8,6 +8,7 @@ import { ApiError } from '../../../api/client'; import { fetchOneCatalogueJur } from '../../../services/api/directories/catalogue_jur'; import type { WithdrawCatalogueJurProps } from '../../../types/catalogueJur/catalogueJur'; import { useNotificationApi } from '../../../utils/useNotification'; +import CustomModalCloseIcon from '../../../components/CustomModalCloseIcon'; interface FormValues extends WithdrawCatalogueJurProps { name: string; @@ -87,7 +88,8 @@ export const WithdrawCatalogueJurForm: React.FC = ({ open, onCancel, onOk destroyOnHidden loading={initialDataLoading} confirmLoading={confirmLoading} - okButtonProps={{ danger: true }}> + okButtonProps={{ danger: true }} + centered closeIcon={}> diff --git a/web/src/widgets/ConsoleLegalEntities/ChecklistModal.tsx b/web/src/widgets/ConsoleLegalEntities/ChecklistModal.tsx index 43e0db7..848088d 100644 --- a/web/src/widgets/ConsoleLegalEntities/ChecklistModal.tsx +++ b/web/src/widgets/ConsoleLegalEntities/ChecklistModal.tsx @@ -5,6 +5,7 @@ import { ApiError } from '../../api/client'; import { getChecklist } from '../../services/api/consolidations'; import type { ChecklistBackendShape, IVersionCard } from '../../types/consolidations/version_members'; import { buildChecklistColumns, buildChecklistRows, getMarksItems } from './checklist_utils'; +import CustomModalCloseIcon from '../../components/CustomModalCloseIcon'; type ChecklistProps = { open: boolean; @@ -34,11 +35,13 @@ export default function ChecklistModal({ open, onDownload, consolidationData, on onCancel={onClose} title='Чеклист' destroyOnHidden + centered onOk={() => { onDownload(); onClose(); }} okText='Скачать чек-лист' + closeIcon={} okButtonProps={{ icon: }}>
{getMarksItems()} diff --git a/web/src/widgets/ConsoleLegalEntities/ConsoleLegalEntities.tsx b/web/src/widgets/ConsoleLegalEntities/ConsoleLegalEntities.tsx index cde77fa..0e68c84 100644 --- a/web/src/widgets/ConsoleLegalEntities/ConsoleLegalEntities.tsx +++ b/web/src/widgets/ConsoleLegalEntities/ConsoleLegalEntities.tsx @@ -98,6 +98,7 @@ export function ConsoleLegalEntitiesTable({ onDrawerOpen, reloadKey }: { onDrawe color: '#667085', justifyContent: 'center', borderTop: '1px solid #f1f5f9', + borderRadius:12, }}> Выберите консолидацию выше
diff --git a/web/src/widgets/ConsoleLegalEntities/checklist_utils.tsx b/web/src/widgets/ConsoleLegalEntities/checklist_utils.tsx index 143e2e8..bbc77d3 100644 --- a/web/src/widgets/ConsoleLegalEntities/checklist_utils.tsx +++ b/web/src/widgets/ConsoleLegalEntities/checklist_utils.tsx @@ -112,7 +112,7 @@ export function buildChecklistColumns(checklistData: ChecklistBackendShape): Tab ), }, - { key: 'balance', dataIndex: 'balance', title: 'БУХ.БАЛАНС', render: (v: FileStatus) => mapStatus(v) }, + { key: 'balance', dataIndex: 'balance', title: 'БУХ. БАЛАНС', render: (v: FileStatus) => mapStatus(v) }, { key: 'ofr', dataIndex: 'ofr', title: 'ОФР', render: (v: FileStatus) => mapStatus(v) }, { key: 'osv', diff --git a/web/src/widgets/ConsoleLegalEntities/config.tsx b/web/src/widgets/ConsoleLegalEntities/config.tsx index 92ad066..271d6b7 100644 --- a/web/src/widgets/ConsoleLegalEntities/config.tsx +++ b/web/src/widgets/ConsoleLegalEntities/config.tsx @@ -38,7 +38,7 @@ export const membersConfig: TableConfig = { { key: 'bb_status', - title: 'Бух.баланс', + title: 'Бух. баланс', features: { multiselect: true }, render: (v) => , }, diff --git a/web/src/widgets/ConsoleTable/LockModal.tsx b/web/src/widgets/ConsoleTable/LockModal.tsx index eb87156..8273717 100644 --- a/web/src/widgets/ConsoleTable/LockModal.tsx +++ b/web/src/widgets/ConsoleTable/LockModal.tsx @@ -6,6 +6,7 @@ import { getVersionCard, lockVersion } from '../../services/api/consolidations'; import type { LockOut } from '../../types/consolidations/common_types'; import { MAX_REASON_LENGTH, endSentence, isValidReason } from '../../utils/consolidations'; import { quarterShortLabel } from '../../utils/labels'; +import CustomModalCloseIcon from '../../components/CustomModalCloseIcon'; type LockModalProps = { versionId: string | null; @@ -114,7 +115,8 @@ export default function LockModal({ versionId, open, onOpenChange, currentUserId confirmLoading={submitting} cancelText='Отмена' onOk={handleOk} - cancelButtonProps={{ disabled: submitting }}> + cancelButtonProps={{ disabled: submitting }} + closeIcon={}> {loading && } {!loading && loadError && ( diff --git a/web/src/widgets/ConsolidatedOsv/CounterpartyMapModal.tsx b/web/src/widgets/ConsolidatedOsv/CounterpartyMapModal.tsx index ae8879f..f3651e3 100644 --- a/web/src/widgets/ConsolidatedOsv/CounterpartyMapModal.tsx +++ b/web/src/widgets/ConsolidatedOsv/CounterpartyMapModal.tsx @@ -19,6 +19,7 @@ import { mapResultText, pairCandidateRows, } from './counterpartyMapping'; +import CustomModalCloseIcon from '../../components/CustomModalCloseIcon'; const SEARCH_DELAY_MS = 300; @@ -229,6 +230,8 @@ export function CounterpartyMapModal({ versionId, row, onClose, onMapped, pairTa width={1040} footer={null} onCancel={onClose} + centered + closeIcon={} title={ <> Выбор организации для связи с {sourceName} diff --git a/web/src/widgets/ConsolidatedOsv/OsvTabs.tsx b/web/src/widgets/ConsolidatedOsv/OsvTabs.tsx index 5387a01..6024b66 100644 --- a/web/src/widgets/ConsolidatedOsv/OsvTabs.tsx +++ b/web/src/widgets/ConsolidatedOsv/OsvTabs.tsx @@ -13,6 +13,7 @@ import { resolveLeaveAfterFetch, } from '../../utils/consolidations'; import { pairsViewSearch } from './counterPairs'; +import CustomModalCloseIcon from '../../components/CustomModalCloseIcon'; const TAB_CONFIG = [ { key: 'osv', label: 'ОСВ' }, @@ -149,10 +150,11 @@ export function OsvTabs({ summary, versionId, status }: Props) { return ( <> } footer={[ , ]}>
- +
{headline}
{details}
diff --git a/web/src/widgets/CreateEntityPickerModal/CreateEntityPickerModal.tsx b/web/src/widgets/CreateEntityPickerModal/CreateEntityPickerModal.tsx index ea012bf..f257dfa 100644 --- a/web/src/widgets/CreateEntityPickerModal/CreateEntityPickerModal.tsx +++ b/web/src/widgets/CreateEntityPickerModal/CreateEntityPickerModal.tsx @@ -3,6 +3,7 @@ import { Modal } from 'antd'; import type React from 'react'; import type { CreateEntityKind } from '../../types/relatedGroup/relatedGroup'; import './CreateEntityPickerModal.css'; +import CustomModalCloseIcon from '../../components/CustomModalCloseIcon'; type Option = { key: CreateEntityKind; title: string; @@ -52,14 +53,7 @@ export const CreateEntityPickerModal: React.FC = ({ open, onCancel, onSel footer={null} centered destroyOnHidden - styles={{ - header: { - borderBottom: '1px solid #f0f0f0', - paddingBottom: 16, - marginBottom: 0, - }, - body: { paddingTop: 16, paddingBottom: 16 }, - }}> + closeIcon={}>
{OPTIONS.map((opt) => (