From cf42e23fcbda7eb5d130443fb68805cf5535e054 Mon Sep 17 00:00:00 2001 From: PotapovaA Date: Thu, 13 Aug 2026 16:49:38 +0300 Subject: [PATCH 1/3] fix --- web/public/images/Program.svg | 10 +- web/public/images/Project.svg | 9 +- .../GroupByObject/GroupByObject.jsx | 2 +- .../SettingPanel/SettingPanel.jsx | 83 +++++++++++----- .../RealtimeTable/SettingPanel/ZoomSlider.jsx | 2 +- .../RealtimeTable/constants/FORM_1/AHR.js | 14 +-- .../constants/FORM_1/AHR_P_NO_LOCAL.js | 14 +-- .../RealtimeTable/constants/FORM_1/CAP.js | 12 +-- .../constants/FORM_1/CAP_NO_LOCAL.js | 12 +-- .../RealtimeTable/constants/FORM_1/OPER.js | 12 +-- .../RealtimeTable/constants/FORM_2/AHR.js | 98 +++++++++---------- .../constants/FORM_2/AHR_LIMIT.js | 10 +- .../RealtimeTable/constants/FORM_2/CAP.js | 14 +-- .../RealtimeTable/constants/FORM_2/OPER.js | 12 +-- .../RealtimeTable/constants/FORM_2/OTCH9F.js | 2 +- .../RealtimeTable/constants/FORM_4/AHR.js | 16 +-- .../RealtimeTable/constants/FORM_4/CAP.js | 16 +-- .../RealtimeTable/constants/FORM_4/OPER.js | 16 +-- .../constants/FORM_4/STRUCTURE.js | 14 +-- .../constants/PROJECT/CURRENT_EXPENSES.js | 8 +- .../RealtimeTable/constants/PROJECT/LIMIT.js | 16 +-- .../RealtimeTable/constants/headers/KV.js | 2 +- web/src/components/Stages/SettingModal.jsx | 2 +- web/src/components/common/PaginatedList.jsx | 4 +- web/src/components/common/icons/icons.jsx | 36 ++++++- .../components/AuditLogsFilters.jsx | 2 +- .../components/AuditLogsTable.jsx | 2 +- .../components/JsonViewModal.jsx | 2 +- .../SppsPage/ModalChangeUsersInSsp.jsx | 2 +- .../pages/AdminPanel/SppsPage/SspTable.jsx | 2 +- .../AdminPanel/UsersPage/ModalAddUsers.jsx | 4 +- .../UsersPage/UserTable/EditUserModal.jsx | 4 +- .../UsersPage/UserTable/GroupDeps.jsx | 2 +- .../UsersPage/UserTable/UserTable.jsx | 2 +- .../AdminPanel/UsersPage/UserTableForAdd.jsx | 2 +- web/src/pages/DictVspPage/DictVspPage.jsx | 4 +- .../DictVspPage/components/DictVspFilters.jsx | 2 +- .../components/Modals/Modal.style.jsx | 5 +- .../components/Modals/ModalEditAddVsp.jsx | 4 +- .../components/Modals/ModalExport.jsx | 6 +- .../DictVspPage/components/TableDictVsp.jsx | 6 +- .../DictsNavigatorPage/DictsNavigatorPage.jsx | 77 ++++++++------- .../components/EditModal/EditModal.jsx | 2 +- web/src/pages/ProjectsPage/ProjectsPage.jsx | 4 +- web/src/pages/TasksPage/TasksPage.jsx | 2 +- 45 files changed, 319 insertions(+), 253 deletions(-) diff --git a/web/public/images/Program.svg b/web/public/images/Program.svg index bcb350f..8063f20 100644 --- a/web/public/images/Program.svg +++ b/web/public/images/Program.svg @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + + + diff --git a/web/public/images/Project.svg b/web/public/images/Project.svg index 7f23978..b533e93 100644 --- a/web/public/images/Project.svg +++ b/web/public/images/Project.svg @@ -1,5 +1,4 @@ - - - \ No newline at end of file + + + + diff --git a/web/src/components/RealtimeTable/SettingPanel/GroupByObject/GroupByObject.jsx b/web/src/components/RealtimeTable/SettingPanel/GroupByObject/GroupByObject.jsx index 1940995..d02992d 100644 --- a/web/src/components/RealtimeTable/SettingPanel/GroupByObject/GroupByObject.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/GroupByObject/GroupByObject.jsx @@ -5,7 +5,7 @@ export const GroupByObject = ({ title, children }) => { return ( {title} - + {children} diff --git a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx index 6fc3538..1ac56c3 100644 --- a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx @@ -1,11 +1,24 @@ import { Divider, IconButton, Stack, Tooltip } from '@mui/material'; -import { useEffect, useState, useCallback } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { FORM_TYPE_OPTIONS } from '../../../constants/constants'; import { exportSheet, exportSheetProject } from '../../../utils/exportFile'; import { ExportDefaultButton } from '../../common/Buttons/ButtonsActions'; import CollapsibleTree from '../../common/CollapsibleTree'; import SearchComponent from '../../common/SearchComponent'; -import { AddLine, Eye, Minus, Pin, Plus, Program, Project, RemoveLine, Search } from '../../common/icons/icons'; +import { + AddLine, + AllStageColumns, + CurrentStageColumns, + HiddenExpenseItems, + Minus, + Pin, + Plus, + Program, + Project, + RemoveLine, + Search, + VisibleExpenseItems, +} from '../../common/icons/icons'; import { GroupByObject } from './GroupByObject/GroupByObject'; import { Panel } from './SettingPanel.style'; import ValidationErrorsAlert from './ValidationErrorsAlert'; @@ -13,6 +26,11 @@ import ZoomSlider from './ZoomSlider'; import { collectLeafColumns } from '../utils/columnUtils'; import { stageColumnsHiddenFromPicker } from '../../Stages/constants'; +const controlSx = { + minHeight: '2.5rem', + flex: '0 0 2.5rem', +}; + const SettingPanel = ({ selectedColumnId, columnPinning, @@ -86,21 +104,23 @@ const SettingPanel = ({ await exportSheet(formId, sheetName, direction); setIsExporting(false); }; - // Обработчик скрытия всех столбцов кроме текущего этапа - const handleShowOnlyCurrentStageColumns = useCallback(() => { + const leafColumns = useMemo(() => collectLeafColumns({ columns }), [columns]); + const stageColumnIds = useMemo(() => new Set([...stageColumnsHiddenFromPicker, ...columnsCurStage]), [columnsCurStage]); + const showOnlyCurrentStageColumns = useMemo(() => { + if (!columnsCurStage?.length || !leafColumns.length) return false; + return leafColumns.every((column) => stageColumnIds.has(column.id) ? columnVisibility[column.id] !== false : columnVisibility[column.id] === false); + }, [columnVisibility, columnsCurStage, leafColumns, stageColumnIds]); + + // Переключение между столбцами текущего этапа и всеми столбцами. + const handleToggleCurrentStageColumns = useCallback(() => { if (!columnsCurStage || columnsCurStage.length === 0) { console.warn('Нет столбцов для текущего этапа'); return; } - //колонки которые не относятся не к какому этапу - const allColumnVisible = [...stageColumnsHiddenFromPicker, ...columnsCurStage]; - const leafCols = collectLeafColumns({ columns: columns }); - for (const col of leafCols) { - const isColCurStage = allColumnVisible.includes(col.id); - onToggleColumnVisibility(col, isColCurStage || (!isColCurStage ^ columnVisibility[col.id])); + for (const column of leafColumns) { + onToggleColumnVisibility(column, showOnlyCurrentStageColumns || stageColumnIds.has(column.id)); } - - }, [columnsCurStage, columns, onToggleColumnVisibility, columnVisibility]); + }, [columnsCurStage, leafColumns, onToggleColumnVisibility, showOnlyCurrentStageColumns, stageColumnIds]); return ( <> @@ -112,6 +132,7 @@ const SettingPanel = ({ e.stopPropagation()} @@ -133,14 +154,14 @@ const SettingPanel = ({ {!isFormNoCanAddRow && ( <> - + - + @@ -149,14 +170,14 @@ const SettingPanel = ({ {formType === FORM_TYPE_OPTIONS[3] && ( <> - + - + @@ -165,9 +186,9 @@ const SettingPanel = ({ )} )} - - - + + + {showOnlyDepth2 ? : } @@ -179,24 +200,33 @@ const SettingPanel = ({ ) : ( '' )} - + - + {showOnlyCurrentStageColumns ? : } - + + + - + - + @@ -209,6 +239,7 @@ const SettingPanel = ({ onClick={handleExport} disabled={!formId || !sheetName || isExporting} text={isExporting ? 'Экспорт...' : 'Экспорт'} + sx={{ height: '2.5rem', minHeight: '2.5rem' }} /> @@ -218,4 +249,4 @@ const SettingPanel = ({ ); }; -export default SettingPanel; \ No newline at end of file +export default SettingPanel; diff --git a/web/src/components/RealtimeTable/SettingPanel/ZoomSlider.jsx b/web/src/components/RealtimeTable/SettingPanel/ZoomSlider.jsx index ac2d995..feb739a 100644 --- a/web/src/components/RealtimeTable/SettingPanel/ZoomSlider.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/ZoomSlider.jsx @@ -10,7 +10,7 @@ const ZoomSlider = ({ onChange, width = 200, curScale }) => { }; return ( - + 0)", + header: "ДФиП: увеличение плана (> 0)", accessorKey: "data.q2.revision_inc", columnLetter: "CH", size: 270, @@ -1862,7 +1862,7 @@ export const config = { }, }, { - header: "ДФиПCеквестр плана (< 0)", + header: "ДФиП: секвестр плана (< 0)", accessorKey: "data.q2.revision_seq", columnLetter: "CI", size: 250, @@ -1915,7 +1915,7 @@ export const config = { "2_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", columns: [ { - header: "Текущие (= 0)", + header: "Текущие корректировки (= 0)", accessorKey: "data.q2.adj_current", columnLetter: "CM", size: 150, @@ -1928,7 +1928,7 @@ export const config = { }, }, { - header: "Корректиз сметы ГО", + header: "Корректировка из сметы ГО", accessorKey: "data.q2.adj_ssp", columnLetter: "CN", size: 190, @@ -1941,7 +1941,7 @@ export const config = { }, }, { - header: "Корректиз резерва", + header: "Корректировка из резерва", accessorKey: "data.q2.adj_reserve", columnLetter: "CO", size: 180, @@ -2056,7 +2056,7 @@ export const config = { accessorKey: "2_kvartal_2026_goda_fakticheskie_raskhody", columns: [ { - header: "Бронь2 квартал", + header: "Бронь квартал", accessorKey: "data.q2.booking", columnLetter: "CX", size: 150, @@ -2069,7 +2069,7 @@ export const config = { }, }, { - header: "ФактАпрель", + header: "Факт ", accessorKey: "data.q2.actual_m1", columnLetter: "CY", size: 150, @@ -2082,7 +2082,7 @@ export const config = { }, }, { - header: "ФактМай", + header: "Факт ", accessorKey: "data.q2.actual_m2", columnLetter: "CZ", size: 150, @@ -2095,7 +2095,7 @@ export const config = { }, }, { - header: "ФактИюнь", + header: "Факт ", accessorKey: "data.q2.actual_m3", columnLetter: "DA", size: 150, @@ -2108,7 +2108,7 @@ export const config = { }, }, { - header: "Факт2 квартал", + header: "Факт квартал", accessorKey: "data.q2.actual_quarter", columnLetter: "DB", size: 150, @@ -2212,7 +2212,7 @@ export const config = { }, }, { - header: "Комментарий переноса в3 квартал", + header: "Комментарий переноса в 3 квартал", accessorKey: "data.q2.transfer_next_comment", columnLetter: "DJ", size: 320, @@ -2238,7 +2238,7 @@ export const config = { }, }, { - header: "Комментарий переноса в4 квартал", + header: "Комментарий переноса в 4 квартал", accessorKey: "data.q2.transfer_far_comment", columnLetter: "DL", size: 320, @@ -2302,7 +2302,7 @@ export const config = { columns: [ { header: - "Изменение целевого назначения перенесенной экономии (= 0)", + "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "data.q3.target_change", columnLetter: "DP", size: 250, @@ -2341,7 +2341,7 @@ export const config = { }, }, { - header: "ДФиПУвеличение плана (> 0)", + header: "ДФиП: увеличение плана (> 0)", accessorKey: "data.q3.revision_inc", columnLetter: "DS", size: 270, @@ -2354,7 +2354,7 @@ export const config = { }, }, { - header: "ДФиПCеквестр плана (< 0)", + header: "ДФиП: секвестр плана (< 0)", accessorKey: "data.q3.revision_seq", columnLetter: "DT", size: 250, @@ -2407,7 +2407,7 @@ export const config = { "3_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", columns: [ { - header: "Текущие (= 0)", + header: "Текущие корректировки (= 0)", accessorKey: "data.q3.adj_current", columnLetter: "DX", size: 150, @@ -2420,7 +2420,7 @@ export const config = { }, }, { - header: "Корректиз сметы ГО", + header: "Корректировка из сметы ГО", accessorKey: "data.q3.adj_ssp", columnLetter: "DY", size: 190, @@ -2433,7 +2433,7 @@ export const config = { }, }, { - header: "Корректиз резерва", + header: "Корректировка из резерва", accessorKey: "data.q3.adj_reserve", columnLetter: "DZ", size: 180, @@ -2548,7 +2548,7 @@ export const config = { accessorKey: "3_kvartal_2026_goda_fakticheskie_raskhody", columns: [ { - header: "Бронь3 квартал", + header: "Бронь квартал", accessorKey: "data.q3.booking", columnLetter: "EI", size: 150, @@ -2561,7 +2561,7 @@ export const config = { }, }, { - header: "ФактИюль", + header: "Факт ", accessorKey: "data.q3.actual_m1", columnLetter: "EJ", size: 150, @@ -2574,7 +2574,7 @@ export const config = { }, }, { - header: "ФактАвгуст", + header: "Факт ", accessorKey: "data.q3.actual_m2", columnLetter: "EK", size: 150, @@ -2587,7 +2587,7 @@ export const config = { }, }, { - header: "ФактСентябрь", + header: "Факт ", accessorKey: "data.q3.actual_m3", columnLetter: "EL", size: 150, @@ -2600,7 +2600,7 @@ export const config = { }, }, { - header: "Факт3 квартал", + header: "Факт квартал", accessorKey: "data.q3.actual_quarter", columnLetter: "EM", size: 150, @@ -2704,7 +2704,7 @@ export const config = { }, }, { - header: "Комментарий переноса в4 квартал", + header: "Комментарий переноса в 4 квартал", accessorKey: "data.q3.transfer_next_comment", columnLetter: "EU", size: 320, @@ -2768,7 +2768,7 @@ export const config = { columns: [ { header: - "Изменение целевого назначения перенесенной экономии (= 0)", + "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "data.q4.target_change", columnLetter: "EY", size: 250, @@ -2807,7 +2807,7 @@ export const config = { }, }, { - header: "ДФиПУвеличение плана (> 0)", + header: "ДФиП: увеличение плана (> 0)", accessorKey: "data.q4.revision_inc", columnLetter: "FB", size: 270, @@ -2820,7 +2820,7 @@ export const config = { }, }, { - header: "ДФиПCеквестр плана (< 0)", + header: "ДФиП: секвестр плана (< 0)", accessorKey: "data.q4.revision_seq", columnLetter: "FC", size: 250, @@ -2873,7 +2873,7 @@ export const config = { "4_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", columns: [ { - header: "Текущие (= 0)", + header: "Текущие корректировки (= 0)", accessorKey: "data.q4.adj_current", columnLetter: "FG", size: 150, @@ -2886,7 +2886,7 @@ export const config = { }, }, { - header: "Корректиз сметы ГО", + header: "Корректировка из сметы ГО", accessorKey: "data.q4.adj_ssp", columnLetter: "FH", size: 190, @@ -2899,7 +2899,7 @@ export const config = { }, }, { - header: "Корректиз резерва", + header: "Корректировка из резерва", accessorKey: "data.q4.adj_reserve", columnLetter: "FI", size: 180, @@ -3014,7 +3014,7 @@ export const config = { accessorKey: "4_kvartal_2026_goda_fakticheskie_raskhody", columns: [ { - header: "Бронь4 квартал", + header: "Бронь квартал", accessorKey: "data.q4.booking", columnLetter: "FR", size: 150, @@ -3027,7 +3027,7 @@ export const config = { }, }, { - header: "ФактОктябрь", + header: "Факт ", accessorKey: "data.q4.actual_m1", columnLetter: "FS", size: 150, @@ -3040,7 +3040,7 @@ export const config = { }, }, { - header: "ФактНоябрь", + header: "Факт ", accessorKey: "data.q4.actual_m2", columnLetter: "FT", size: 150, @@ -3053,7 +3053,7 @@ export const config = { }, }, { - header: "ФактДекабрь", + header: "Факт ", accessorKey: "data.q4.actual_m3", columnLetter: "FU", size: 150, @@ -3066,7 +3066,7 @@ export const config = { }, }, { - header: "СПОД (Январь)", + header: "СПОД (январь)", accessorKey: "data.q4.actual_spod", columnLetter: "FV", size: 150, @@ -3079,7 +3079,7 @@ export const config = { }, }, { - header: "Факт4 квартал (с уч СПОД)", + header: "Факт квартал (с учётом СПОД)", accessorKey: "data.q4.actual_quarter", columnLetter: "FW", size: 260, @@ -3092,7 +3092,7 @@ export const config = { }, }, { - header: "Остаток после брони 4 квартала (с уч СПОД)", + header: "Остаток после брони 4 квартала (с учётом СПОД)", accessorKey: "data.q4.residual_after_booking", columnLetter: "FX", size: 420, @@ -3105,7 +3105,7 @@ export const config = { }, }, { - header: "Остаток после факта 4 квартала (с уч СПОД)", + header: "Остаток после факта 4 квартала (с учётом СПОД)", accessorKey: "data.q4.residual_after_actual", columnLetter: "FY", size: 420, diff --git a/web/src/components/RealtimeTable/constants/FORM_2/AHR_LIMIT.js b/web/src/components/RealtimeTable/constants/FORM_2/AHR_LIMIT.js index 1113ec4..f91b09b 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/AHR_LIMIT.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/AHR_LIMIT.js @@ -61,7 +61,7 @@ export const config = { }, columns: [ { - header: 'N п/п', + header: '№ п/п', accessorKey: 'n_pp', columns: [ { @@ -179,7 +179,7 @@ export const config = { accessorKey: 'i_kvartal_2026_g', columns: [ { - header: 'Количество,в шт.', + header: 'Количество, в шт.', accessorKey: 'data.qty_q1', columnLetter: 'I', size: 170, @@ -217,7 +217,7 @@ export const config = { accessorKey: 'ii_kvartal_2026_g', columns: [ { - header: 'Количество,в шт.', + header: 'Количество, в шт.', accessorKey: 'data.qty_q2', columnLetter: 'L', size: 170, @@ -255,7 +255,7 @@ export const config = { accessorKey: 'iii_kvartal_2026_g', columns: [ { - header: 'Количество,в шт.', + header: 'Количество, в шт.', accessorKey: 'data.qty_q3', columnLetter: 'O', size: 170, @@ -293,7 +293,7 @@ export const config = { accessorKey: 'iv_kvartal_2026_g', columns: [ { - header: 'Количество,в шт.', + header: 'Количество, в шт.', accessorKey: 'data.qty_q4', columnLetter: 'R', size: 170, diff --git a/web/src/components/RealtimeTable/constants/FORM_2/CAP.js b/web/src/components/RealtimeTable/constants/FORM_2/CAP.js index 558e676..bc2746c 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/CAP.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/CAP.js @@ -1690,7 +1690,7 @@ export const config = { }, }, { - header: "Доп.соглашения, спецификации и пр. (реквизиты)", + header: "Доп. соглашения, спецификации и пр. (реквизиты)", accessorKey: "data.contract.addenda", columnLetter: "BK", size: 460, @@ -2359,7 +2359,7 @@ export const config = { accessorKey: "2_kvartal_2026", columns: [ { - header: "Изменение целевого назначения перенесенной экономии (= 0)", + header: "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "2_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0", columns: [ @@ -2423,7 +2423,7 @@ export const config = { }, }, { - header: "Cеквестр базового плана (< 0)", + header: "Секвестр базового плана (< 0)", accessorKey: "2_kvartal_2026_cekvestr_bazovogo_plana_0", columns: [ { @@ -2889,7 +2889,7 @@ export const config = { accessorKey: "3_kvartal_2026", columns: [ { - header: "Изменение целевого назначения перенесенной экономии (= 0)", + header: "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "3_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0", columns: [ @@ -2953,7 +2953,7 @@ export const config = { }, }, { - header: "Cеквестр базового плана (< 0)", + header: "Секвестр базового плана (< 0)", accessorKey: "3_kvartal_2026_cekvestr_bazovogo_plana_0", columns: [ { @@ -3406,7 +3406,7 @@ export const config = { accessorKey: "4_kvartal_2026", columns: [ { - header: "Изменение целевого назначения перенесенной экономии (= 0)", + header: "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "4_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0", columns: [ @@ -3470,7 +3470,7 @@ export const config = { }, }, { - header: "Cеквестр базового плана (< 0)", + header: "Секвестр базового плана (< 0)", accessorKey: "4_kvartal_2026_cekvestr_bazovogo_plana_0", columns: [ { diff --git a/web/src/components/RealtimeTable/constants/FORM_2/OPER.js b/web/src/components/RealtimeTable/constants/FORM_2/OPER.js index 0b76f5b..e090c93 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/OPER.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/OPER.js @@ -2359,7 +2359,7 @@ export const config = { accessorKey: "2_kvartal_2026", columns: [ { - header: "Изменение целевого назначения перенесенной экономии (= 0)", + header: "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "2_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0", columns: [ @@ -2423,7 +2423,7 @@ export const config = { }, }, { - header: "Cеквестр базового плана (< 0)", + header: "Секвестр базового плана (< 0)", accessorKey: "2_kvartal_2026_cekvestr_bazovogo_plana_0", columns: [ { @@ -2889,7 +2889,7 @@ export const config = { accessorKey: "3_kvartal_2026", columns: [ { - header: "Изменение целевого назначения перенесенной экономии (= 0)", + header: "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "3_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0", columns: [ @@ -2953,7 +2953,7 @@ export const config = { }, }, { - header: "Cеквестр базового плана (< 0)", + header: "Секвестр базового плана (< 0)", accessorKey: "3_kvartal_2026_cekvestr_bazovogo_plana_0", columns: [ { @@ -3406,7 +3406,7 @@ export const config = { accessorKey: "4_kvartal_2026", columns: [ { - header: "Изменение целевого назначения перенесенной экономии (= 0)", + header: "Изменение целевого назначения перенесённой экономии (= 0)", accessorKey: "4_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0", columns: [ @@ -3470,7 +3470,7 @@ export const config = { }, }, { - header: "Cеквестр базового плана (< 0)", + header: "Секвестр базового плана (< 0)", accessorKey: "4_kvartal_2026_cekvestr_bazovogo_plana_0", columns: [ { diff --git a/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js b/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js index 6184b7b..861e30a 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js @@ -399,7 +399,7 @@ export const config = { }, }, { - header: 'Перенесено на б/счет 604', + header: 'Перенесено на балансовый счёт 604', accessorKey: 'data.60415_pereneseno_na_bschet_604', columns: [ { diff --git a/web/src/components/RealtimeTable/constants/FORM_4/AHR.js b/web/src/components/RealtimeTable/constants/FORM_4/AHR.js index 2aff398..ee2ba0f 100644 --- a/web/src/components/RealtimeTable/constants/FORM_4/AHR.js +++ b/web/src/components/RealtimeTable/constants/FORM_4/AHR.js @@ -1050,7 +1050,7 @@ export const config = { }, }, { - header: 'Признак централиз. договора', + header: 'Признак централизованного договора', accessorKey: 'data.contract_summary.centralized_flag', columnLetter: 'T', size: 270, @@ -2355,7 +2355,7 @@ export const config = { accessorKey: '2_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '2_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2418,7 +2418,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '2_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -2883,7 +2883,7 @@ export const config = { accessorKey: '3_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '3_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2946,7 +2946,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '3_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3398,7 +3398,7 @@ export const config = { accessorKey: '4_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '4_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -3461,7 +3461,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '4_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3849,7 +3849,7 @@ export const config = { }, }, { - header: 'Остаток после факта 4 кв. 26 и СПОДов', + header: 'Остаток после факта 4 кв. 26 и СПОД', accessorKey: '4_kvartal_2026_ostatok_posle_fakta_4_kv_26_i_spodov', columns: [ { diff --git a/web/src/components/RealtimeTable/constants/FORM_4/CAP.js b/web/src/components/RealtimeTable/constants/FORM_4/CAP.js index 549d924..7dce7ca 100644 --- a/web/src/components/RealtimeTable/constants/FORM_4/CAP.js +++ b/web/src/components/RealtimeTable/constants/FORM_4/CAP.js @@ -1050,7 +1050,7 @@ export const config = { }, }, { - header: 'Признак централиз. договора', + header: 'Признак централизованного договора', accessorKey: 'data.contract_summary.centralized_flag', columnLetter: 'T', size: 270, @@ -2354,7 +2354,7 @@ export const config = { accessorKey: '2_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '2_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2417,7 +2417,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '2_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -2881,7 +2881,7 @@ export const config = { accessorKey: '3_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '3_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2944,7 +2944,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '3_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3395,7 +3395,7 @@ export const config = { accessorKey: '4_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '4_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -3458,7 +3458,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '4_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3845,7 +3845,7 @@ export const config = { }, }, { - header: 'Остаток после факта 4 кв. 26 и СПОДов', + header: 'Остаток после факта 4 кв. 26 и СПОД', accessorKey: '4_kvartal_2026_ostatok_posle_fakta_4_kv_26_i_spodov', columns: [ { diff --git a/web/src/components/RealtimeTable/constants/FORM_4/OPER.js b/web/src/components/RealtimeTable/constants/FORM_4/OPER.js index 97d816c..9158591 100644 --- a/web/src/components/RealtimeTable/constants/FORM_4/OPER.js +++ b/web/src/components/RealtimeTable/constants/FORM_4/OPER.js @@ -1050,7 +1050,7 @@ export const config = { }, }, { - header: 'Признак централиз. договора', + header: 'Признак централизованного договора', accessorKey: 'data.contract_summary.centralized_flag', columnLetter: 'T', size: 270, @@ -2353,7 +2353,7 @@ export const config = { accessorKey: '2_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '2_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2416,7 +2416,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '2_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -2880,7 +2880,7 @@ export const config = { accessorKey: '3_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '3_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2943,7 +2943,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '3_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3394,7 +3394,7 @@ export const config = { accessorKey: '4_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '4_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -3457,7 +3457,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '4_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3844,7 +3844,7 @@ export const config = { }, }, { - header: 'Остаток после факта 4 кв. 26 и СПОДов', + header: 'Остаток после факта 4 кв. 26 и СПОД', accessorKey: '4_kvartal_2026_ostatok_posle_fakta_4_kv_26_i_spodov', columns: [ { diff --git a/web/src/components/RealtimeTable/constants/FORM_4/STRUCTURE.js b/web/src/components/RealtimeTable/constants/FORM_4/STRUCTURE.js index a7677a8..4591461 100644 --- a/web/src/components/RealtimeTable/constants/FORM_4/STRUCTURE.js +++ b/web/src/components/RealtimeTable/constants/FORM_4/STRUCTURE.js @@ -2375,7 +2375,7 @@ export const config = { accessorKey: '2_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '2_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2438,7 +2438,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '2_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -2903,7 +2903,7 @@ export const config = { accessorKey: '3_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '3_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -2966,7 +2966,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '3_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3418,7 +3418,7 @@ export const config = { accessorKey: '4_kvartal_2026', columns: [ { - header: 'Изменение целевого назначения перенесенной экономии (= 0)', + header: 'Изменение целевого назначения перенесённой экономии (= 0)', accessorKey: '4_kvartal_2026_izmenenie_tselevogo_naznacheniya_perenesennoy_ekonomii_0', columns: [ { @@ -3481,7 +3481,7 @@ export const config = { }, }, { - header: 'Cеквестр базового плана (< 0)', + header: 'Секвестр базового плана (< 0)', accessorKey: '4_kvartal_2026_cekvestr_bazovogo_plana_0', columns: [ { @@ -3876,7 +3876,7 @@ export const config = { }, }, { - header: 'Остаток после факта 4 кв. 26 и СПОДов', + header: 'Остаток после факта 4 кв. 26 и СПОД', accessorKey: '4_kvartal_2026_ostatok_posle_fakta_4_kv_26_i_spodov', columns: [ { diff --git a/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js b/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js index 100f8c9..efe347d 100644 --- a/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js +++ b/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js @@ -368,7 +368,7 @@ export const config = { }, }, { - header: 'заМАРТ', + header: 'за ', accessorKey: 'data.q1.m3', columnLetter: 'J', size: 150, @@ -551,7 +551,7 @@ export const config = { }, }, { - header: 'заИЮНЬ', + header: 'за ', accessorKey: 'data.q2.m3', columnLetter: 'T', size: 150, @@ -734,7 +734,7 @@ export const config = { }, }, { - header: 'заСЕНТЯБРЬ', + header: 'за ', accessorKey: 'data.q3.m3', columnLetter: 'AD', size: 150, @@ -917,7 +917,7 @@ export const config = { }, }, { - header: 'заДЕКАБРЬ', + header: 'за ', accessorKey: 'data.q4.m3', columnLetter: 'AN', size: 150, diff --git a/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js b/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js index 940ff6d..c7c400e 100644 --- a/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js +++ b/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js @@ -271,7 +271,7 @@ export const config = { ], }, { - header: 'Отчет об исполнении лимита затрат, утвержденного Правлением Банка в I квартале', + header: 'Отчет об исполнении лимита затрат, утверждённого Правлением Банка в I квартале', accessorKey: 'otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_i_kvartale', columns: [ { @@ -368,7 +368,7 @@ export const config = { }, }, { - header: 'заМАРТ', + header: 'за ', accessorKey: 'data.q1.m3', columnLetter: 'J', size: 150, @@ -429,7 +429,7 @@ export const config = { ], }, { - header: 'Отчет об исполнении лимита затрат, утвержденного Правлением Банка в II квартале', + header: 'Отчет об исполнении лимита затрат, утверждённого Правлением Банка в II квартале', accessorKey: 'otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale', columns: [ { @@ -552,7 +552,7 @@ export const config = { }, }, { - header: 'заИЮНЬ', + header: 'за ', accessorKey: 'data.q2.m3', columnLetter: 'T', size: 150, @@ -613,7 +613,7 @@ export const config = { ], }, { - header: 'Отчет об исполнении лимита затрат, утвержденного Правлением Банка в III квартале', + header: 'Отчет об исполнении лимита затрат, утверждённого Правлением Банка в III квартале', accessorKey: 'otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale', columns: [ { @@ -736,7 +736,7 @@ export const config = { }, }, { - header: 'заСЕНТЯБРЬ', + header: 'за ', accessorKey: 'data.q3.m3', columnLetter: 'AD', size: 150, @@ -797,7 +797,7 @@ export const config = { ], }, { - header: 'Отчет об исполнении лимита затрат, утвержденного Правлением Банка в IV квартале', + header: 'Отчет об исполнении лимита затрат, утверждённого Правлением Банка в IV квартале', accessorKey: 'otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale', columns: [ { @@ -920,7 +920,7 @@ export const config = { }, }, { - header: 'заДЕКАБРЬ', + header: 'за ', accessorKey: 'data.q4.m3', columnLetter: 'AN', size: 150, diff --git a/web/src/components/RealtimeTable/constants/headers/KV.js b/web/src/components/RealtimeTable/constants/headers/KV.js index f9fe1c8..4f9eb90 100644 --- a/web/src/components/RealtimeTable/constants/headers/KV.js +++ b/web/src/components/RealtimeTable/constants/headers/KV.js @@ -540,7 +540,7 @@ export const columns = [ }, { accessorKey: 'data.contract_detail.additional_agreements', - header: 'Доп.соглашения, спецификации и пр. (реквизиты)', + header: 'Доп. соглашения, спецификации и пр. (реквизиты)', size: 250, }, { diff --git a/web/src/components/Stages/SettingModal.jsx b/web/src/components/Stages/SettingModal.jsx index 0fc4a36..8aa1cc7 100644 --- a/web/src/components/Stages/SettingModal.jsx +++ b/web/src/components/Stages/SettingModal.jsx @@ -139,7 +139,7 @@ export const SettingModal = ({ - Этапы + Этапы }> Добавить этап diff --git a/web/src/components/common/PaginatedList.jsx b/web/src/components/common/PaginatedList.jsx index 5e13437..2485e88 100644 --- a/web/src/components/common/PaginatedList.jsx +++ b/web/src/components/common/PaginatedList.jsx @@ -110,7 +110,7 @@ export function PaginatedList({ {!exportMode ? ( <> - setExportMode(true)} height='2.5rem' /> + setExportMode(true)} sx={{ height: '2.5rem' }} /> {extraActions} ) : ( @@ -119,7 +119,7 @@ export function PaginatedList({ text='Экспортировать' onClick={handleBulkExport} disabled={exportList.length === 0} - height='2.5rem' + sx={{ height: '2.5rem' }} /> setExportMode(false)} /> diff --git a/web/src/components/common/icons/icons.jsx b/web/src/components/common/icons/icons.jsx index b6c0f88..55effd2 100644 --- a/web/src/components/common/icons/icons.jsx +++ b/web/src/components/common/icons/icons.jsx @@ -227,6 +227,40 @@ export const Eye = styled.div` background-position: center; `; +export const HiddenExpenseItems = ({ size = 20 }) => ( + +); + +export const VisibleExpenseItems = ({ size = 20 }) => ( + +); + +export const CurrentStageColumns = ({ size = 20 }) => ( + +); + +export const AllStageColumns = ({ size = 20 }) => ( + +); + export const Trash = styled.div` background-image: url('images/Trash.svg'); width: 1.25rem; @@ -531,4 +565,4 @@ export const SummarySvg = ({ size = 16 }) => ( -); \ No newline at end of file +); diff --git a/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsFilters.jsx b/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsFilters.jsx index 55c3e97..f2ad81d 100644 --- a/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsFilters.jsx +++ b/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsFilters.jsx @@ -158,7 +158,7 @@ const AuditLogsFilters = ({ - + Сбросить фильтры diff --git a/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsTable.jsx b/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsTable.jsx index bd9309c..52591ac 100644 --- a/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsTable.jsx +++ b/web/src/pages/AdminPanel/AuditLogsPage/components/AuditLogsTable.jsx @@ -61,7 +61,7 @@ const AuditLogsTable = ({ logs, loading, totalCount, page, rowsPerPage, onPageCh size: 300, Cell: ({ cell, row }) => ( - + {row.original.user ? row.original.user.full_name + ' (' + row.original.user.email + ')' : '-'} diff --git a/web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx b/web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx index a3674f0..c770bf6 100644 --- a/web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx +++ b/web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx @@ -119,7 +119,7 @@ const JsonViewModal = ({ open, onClose, jsonData, eventType }) => { alignItems: 'center', mb: '.75rem', }}> - + Детали события: diff --git a/web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx b/web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx index 0b804a5..7e212bf 100644 --- a/web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx +++ b/web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx @@ -133,7 +133,7 @@ export const ModalChangeUsersInSsp = ({ open, onClose, ssp, onUsersCountChange } }> - + {loadingUsers ? ( ( - + {cell.getValue()} diff --git a/web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx b/web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx index 5bdd296..07a0f7a 100644 --- a/web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx +++ b/web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx @@ -75,10 +75,10 @@ export const ModalAddUsers = ({ open, onClose, onAddUser }) => { customSize={58.13} actions={ <> - + Отменить - + Сохранить diff --git a/web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx b/web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx index aa70ccd..59e69f5 100644 --- a/web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx +++ b/web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx @@ -326,10 +326,10 @@ export const EditUserModal = ({ isOpen, onClose, onConfirm, user, onEditSsp }) = justifyContent: 'end', paddingTop: '1.5rem', }}> - + Отмена - + Сохранить diff --git a/web/src/pages/AdminPanel/UsersPage/UserTable/GroupDeps.jsx b/web/src/pages/AdminPanel/UsersPage/UserTable/GroupDeps.jsx index 427a4b2..517b84e 100644 --- a/web/src/pages/AdminPanel/UsersPage/UserTable/GroupDeps.jsx +++ b/web/src/pages/AdminPanel/UsersPage/UserTable/GroupDeps.jsx @@ -21,7 +21,7 @@ const GroupDeps = ({ items, itemsPerRow, type }) => { return ( - {type} + {type} ( - + {row.original.full_name} handleDeleteUser(row.original.id)} sx={{ color: 'error.main' }}> {/* */} - - + + {user.role_id !== ROLES_NAME_ID.executor_rf && ( )} diff --git a/web/src/pages/DictVspPage/components/DictVspFilters.jsx b/web/src/pages/DictVspPage/components/DictVspFilters.jsx index b54ebde..2efbb68 100644 --- a/web/src/pages/DictVspPage/components/DictVspFilters.jsx +++ b/web/src/pages/DictVspPage/components/DictVspFilters.jsx @@ -38,7 +38,7 @@ const DictVspFilters = ({ ssps, selectedSsp = null, onSspChange }) => { mb: '1.5rem', }}> - + ( +export const ModalContainer = ({ children, sx }) => ( ( background: '#a8a8a8', }, }, + ...sx, }}> {children} diff --git a/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx b/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx index be78687..0847a43 100644 --- a/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx +++ b/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx @@ -243,7 +243,7 @@ const ModalEditAddVsp = ({ open, onClose, onSave, onDelete, initialData = null, customSize={'60'} actions={ showActions && ( - + {showDeleteButton && ( Удалить @@ -263,7 +263,7 @@ const ModalEditAddVsp = ({ open, onClose, onSave, onDelete, initialData = null, }> - + Код РФ { onClose={handleClose} customSize={'40'} actions={ - + Выбрано: {selectedCount} из {totalCount} @@ -94,13 +94,13 @@ const ModalExport = ({ open, onClose, ssps = [], loading = false }) => { }> - + ( - + {row.index + 1} ), @@ -74,7 +74,7 @@ const TableDictVsp = ({ data, onEdit, onDelete, onAdd, loading = false, ssps, se minSize: 50, maxSize: 100, Cell: ({ cell }) => ( - + {cell.getValue() || '-'} ), @@ -88,7 +88,7 @@ const TableDictVsp = ({ data, onEdit, onDelete, onAdd, loading = false, ssps, se minSize: 150, maxSize: 200, Cell: ({ cell }) => ( - + {cell.getValue() || '-'} ), diff --git a/web/src/pages/DictsNavigatorPage/DictsNavigatorPage.jsx b/web/src/pages/DictsNavigatorPage/DictsNavigatorPage.jsx index 86d9a33..c9921d2 100644 --- a/web/src/pages/DictsNavigatorPage/DictsNavigatorPage.jsx +++ b/web/src/pages/DictsNavigatorPage/DictsNavigatorPage.jsx @@ -73,46 +73,47 @@ const FeatureItem = styled.li` `; function DictsNavigatorPage() { - const navigate = useNavigate(); + const navigate = useNavigate(); - const handleNavigateToVSP = () => { - navigate('/dicts/dict-vsp'); - }; + const handleNavigateToVSP = () => { + navigate('/dicts/dict-vsp'); + }; - return ( - <> - - - - - - Справочник объектов ВСП - - Централизованное управление данными о внутренних структурных подразделениях. Ведите учет регистрационных номеров, адресов, - дат открытия, форм расположения и штатной численности всех ВСП организации. - - - Добавление и редактирование записей об объектах - Отслеживание метаданных филиалов - Удобная табличная форма представления данных - - - - -

Открыть справочник объектов

-
-
-
-
-
-
- - ); + return ( + <> + + + + + + Справочник объектов ВСП + + Централизованное управление данными о внутренних структурных подразделениях. Ведите учет регистрационных номеров, адресов, + дат открытия, форм расположения и штатной численности всех ВСП организации. + + + Добавление и редактирование записей об объектах + Отслеживание метаданных филиалов + Удобная табличная форма представления данных + + + + +

Открыть справочник объектов

+
+
+
+
+
+
+ + ); } export default DictsNavigatorPage; diff --git a/web/src/pages/ProjectPages/components/EditModal/EditModal.jsx b/web/src/pages/ProjectPages/components/EditModal/EditModal.jsx index 45fb87a..aa33fb3 100644 --- a/web/src/pages/ProjectPages/components/EditModal/EditModal.jsx +++ b/web/src/pages/ProjectPages/components/EditModal/EditModal.jsx @@ -135,7 +135,7 @@ const EditModal = ({ open, onClose, rowData, onSave }) => { alignItems: 'center', bgcolor: '#f8f9fa', }}> - + Редактирование строки diff --git a/web/src/pages/ProjectsPage/ProjectsPage.jsx b/web/src/pages/ProjectsPage/ProjectsPage.jsx index 38d4ad5..5f6097c 100644 --- a/web/src/pages/ProjectsPage/ProjectsPage.jsx +++ b/web/src/pages/ProjectsPage/ProjectsPage.jsx @@ -215,7 +215,7 @@ export default function ProjectsPage() { getItemId={(project) => project.id} getItemTitle={(project) => project.name || 'Проект'} extraActions={ - } height='2.5rem'> + } sx={{ height: '2.5rem' }}> Создать проект } @@ -240,7 +240,7 @@ export default function ProjectsPage() { sx={{ width: 200 }} renderInput={(params) => } /> - + {' '} Сбросить diff --git a/web/src/pages/TasksPage/TasksPage.jsx b/web/src/pages/TasksPage/TasksPage.jsx index 7742bb5..b3d719b 100644 --- a/web/src/pages/TasksPage/TasksPage.jsx +++ b/web/src/pages/TasksPage/TasksPage.jsx @@ -236,7 +236,7 @@ export default function TasksPage() { } extraActions={ user.role_id === ROLES_NAME_ID.admin && ( - } height={'2.5rem'}> + } sx={{ height: '2.5rem' }}> Создать задачу ) -- 2.47.2 From e11661a26b75569574f9e93eb5936a837738d1aa Mon Sep 17 00:00:00 2001 From: PotapovaA Date: Thu, 13 Aug 2026 17:14:23 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RealtimeTable/RealtimeTable.jsx | 4 +- .../SettingPanel/SettingPanel.jsx | 39 ++++++++----------- web/src/components/common/icons/icons.jsx | 17 -------- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/web/src/components/RealtimeTable/RealtimeTable.jsx b/web/src/components/RealtimeTable/RealtimeTable.jsx index e6a41ae..2cebd56 100644 --- a/web/src/components/RealtimeTable/RealtimeTable.jsx +++ b/web/src/components/RealtimeTable/RealtimeTable.jsx @@ -49,6 +49,8 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => { const { errors: validationErrors, isCellInvalid } = useValidationRules( data, columnsConfig?.columns, + formType, + sheetName, ); const [expanded, setExpanded] = useState(true); @@ -692,4 +694,4 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => { ); }; -export default React.memo(RealtimeTable); \ No newline at end of file +export default React.memo(RealtimeTable); diff --git a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx index 1ac56c3..9fd8baa 100644 --- a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx @@ -1,5 +1,5 @@ import { Divider, IconButton, Stack, Tooltip } from '@mui/material'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useEffect, useState, useCallback } from 'react'; import { FORM_TYPE_OPTIONS } from '../../../constants/constants'; import { exportSheet, exportSheetProject } from '../../../utils/exportFile'; import { ExportDefaultButton } from '../../common/Buttons/ButtonsActions'; @@ -7,7 +7,6 @@ import CollapsibleTree from '../../common/CollapsibleTree'; import SearchComponent from '../../common/SearchComponent'; import { AddLine, - AllStageColumns, CurrentStageColumns, HiddenExpenseItems, Minus, @@ -17,7 +16,6 @@ import { Project, RemoveLine, Search, - VisibleExpenseItems, } from '../../common/icons/icons'; import { GroupByObject } from './GroupByObject/GroupByObject'; import { Panel } from './SettingPanel.style'; @@ -104,23 +102,21 @@ const SettingPanel = ({ await exportSheet(formId, sheetName, direction); setIsExporting(false); }; - const leafColumns = useMemo(() => collectLeafColumns({ columns }), [columns]); - const stageColumnIds = useMemo(() => new Set([...stageColumnsHiddenFromPicker, ...columnsCurStage]), [columnsCurStage]); - const showOnlyCurrentStageColumns = useMemo(() => { - if (!columnsCurStage?.length || !leafColumns.length) return false; - return leafColumns.every((column) => stageColumnIds.has(column.id) ? columnVisibility[column.id] !== false : columnVisibility[column.id] === false); - }, [columnVisibility, columnsCurStage, leafColumns, stageColumnIds]); - - // Переключение между столбцами текущего этапа и всеми столбцами. - const handleToggleCurrentStageColumns = useCallback(() => { + // Обработчик скрытия всех столбцов кроме текущего этапа + const handleShowOnlyCurrentStageColumns = useCallback(() => { if (!columnsCurStage || columnsCurStage.length === 0) { console.warn('Нет столбцов для текущего этапа'); return; } - for (const column of leafColumns) { - onToggleColumnVisibility(column, showOnlyCurrentStageColumns || stageColumnIds.has(column.id)); + //колонки которые не относятся не к какому этапу + const allColumnVisible = [...stageColumnsHiddenFromPicker, ...columnsCurStage]; + const leafCols = collectLeafColumns({ columns: columns }); + for (const col of leafCols) { + const isColCurStage = allColumnVisible.includes(col.id); + onToggleColumnVisibility(col, isColCurStage || (!isColCurStage ^ columnVisibility[col.id])); } - }, [columnsCurStage, leafColumns, onToggleColumnVisibility, showOnlyCurrentStageColumns, stageColumnIds]); + + }, [columnsCurStage, columns, onToggleColumnVisibility, columnVisibility]); return ( <> @@ -186,9 +182,9 @@ const SettingPanel = ({ )} )} - - - {showOnlyDepth2 ? : } + + + @@ -200,16 +196,15 @@ const SettingPanel = ({ ) : ( '' )} - + - {showOnlyCurrentStageColumns ? : } + diff --git a/web/src/components/common/icons/icons.jsx b/web/src/components/common/icons/icons.jsx index 55effd2..4d33283 100644 --- a/web/src/components/common/icons/icons.jsx +++ b/web/src/components/common/icons/icons.jsx @@ -235,14 +235,6 @@ export const HiddenExpenseItems = ({ size = 20 }) => ( ); -export const VisibleExpenseItems = ({ size = 20 }) => ( - -); - export const CurrentStageColumns = ({ size = 20 }) => ( ); -export const AllStageColumns = ({ size = 20 }) => ( - -); - export const Trash = styled.div` background-image: url('images/Trash.svg'); width: 1.25rem; -- 2.47.2 From df6ea391945ccfbda70a720299495823cc2de40c Mon Sep 17 00:00:00 2001 From: PotapovaA Date: Thu, 13 Aug 2026 17:43:14 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=201-3=20=D0=BA=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RealtimeTable/constants/validation.js | 69 +++++++++++++++++-- .../RealtimeTable/hooks/useValidationRules.js | 16 +++-- .../RealtimeTable/utils/validationUtils.js | 15 ++++ 3 files changed, 89 insertions(+), 11 deletions(-) diff --git a/web/src/components/RealtimeTable/constants/validation.js b/web/src/components/RealtimeTable/constants/validation.js index d8eec05..ecb7b34 100644 --- a/web/src/components/RealtimeTable/constants/validation.js +++ b/web/src/components/RealtimeTable/constants/validation.js @@ -33,13 +33,25 @@ const bookingLessBalanceByColumn = new Map( ]), ); +//Бронь <= Остаток после брони для листов КВП и Опер 4 формы +const bookingLessBalance4From = [ + ["data.q4.booking", "data.q4.residual_after_booking"], +]; + +const bookingLessBalance4FormByColumn = new Map( + bookingLessBalance.flatMap(([bookingKey, balanceKey]) => [ + [bookingKey, { bookingKey, balanceKey }], + [balanceKey, { bookingKey, balanceKey }], + ]), +); + //Перенос в фонд экономии <= Всего const transferLessTotal = [ ["data.q1.transfer_econ", "data.q1.total"], ["data.q2.transfer_econ", "data.q2.total"], ["data.q3.transfer_econ", "data.q3.total"], ["data.q4.transfer_econ", "data.q4.total"], -] +]; const transferLessTotalByColumn = new Map( transferLessTotal.flatMap(([transferKey, totalKey]) => [ [transferKey, { transferKey: transferKey, totalKey: totalKey }], @@ -47,6 +59,15 @@ const transferLessTotalByColumn = new Map( ]), ); +// Область действия всех правил. Пары можно добавлять, удалять и изменять. +const bookingLessBalanceRuleScope = { + includedScopes: [], + excludedScopes: [ + { formType: "FORM_4", sheetName: "AHR" }, + { formType: "FORM_4", sheetName: "OPER" }, + ], +}; + export const validationRules = [ { id: "remaining-booking", @@ -72,6 +93,7 @@ export const validationRules = [ Number(value) !== 0, }, { + ...bookingLessBalanceRuleScope, id: "booking-less-balance", columnKeys: bookingLessBalance.flat(), errorColumnKeys: bookingLessBalance.map(([bookingKey]) => bookingKey), @@ -80,8 +102,41 @@ export const validationRules = [ const pair = bookingLessBalanceByColumn.get(columnKey); if (!pair) return false; - const booking = pair.bookingKey.split(".").reduce((value, key) => value?.[key], row); - const balance = pair.balanceKey.split(".").reduce((value, key) => value?.[key], row); + const booking = pair.bookingKey + .split(".") + .reduce((value, key) => value?.[key], row); + const balance = pair.balanceKey + .split(".") + .reduce((value, key) => value?.[key], row); + + return ( + booking !== null && + booking !== undefined && + booking !== "" && + balance !== null && + balance !== undefined && + balance !== "" && + Number.isFinite(Number(booking)) && + Number.isFinite(Number(balance)) && + Number(booking) > Number(balance) + ); + }, + }, + { + id: "booking-less-balance-4-form", + columnKeys: bookingLessBalance4From.flat(), + errorColumnKeys: bookingLessBalance4From.map(([bookingKey]) => bookingKey), + message: "Сумма бронирования превышает остаток после бронирования", + isInvalid: (_value, row, columnKey) => { + const pair = bookingLessBalance4FormByColumn.get(columnKey); + if (!pair) return false; + + const booking = pair.bookingKey + .split(".") + .reduce((value, key) => value?.[key], row); + const balance = pair.balanceKey + .split(".") + .reduce((value, key) => value?.[key], row); return ( booking !== null && @@ -105,8 +160,12 @@ export const validationRules = [ const pair = transferLessTotalByColumn.get(columnKey); if (!pair) return false; - const transfer = pair.transferKey.split(".").reduce((value, key) => value?.[key], row); - const total = pair.totalKey.split(".").reduce((value, key) => value?.[key], row); + const transfer = pair.transferKey + .split(".") + .reduce((value, key) => value?.[key], row); + const total = pair.totalKey + .split(".") + .reduce((value, key) => value?.[key], row); return ( transfer !== null && diff --git a/web/src/components/RealtimeTable/hooks/useValidationRules.js b/web/src/components/RealtimeTable/hooks/useValidationRules.js index 4007e47..c3be814 100644 --- a/web/src/components/RealtimeTable/hooks/useValidationRules.js +++ b/web/src/components/RealtimeTable/hooks/useValidationRules.js @@ -1,30 +1,34 @@ import { useCallback, useMemo } from 'react'; import { validationRules } from '../constants/validation'; -import { buildColumnHeaderPaths, collectInvalidErrors } from '../utils/validationUtils'; +import { buildColumnHeaderPaths, collectInvalidErrors, isValidationRuleEnabled } from '../utils/validationUtils'; -export const useValidationRules = (data = [], columns = []) => { +export const useValidationRules = (data = [], columns = [], formType, sheetName) => { const headerPaths = useMemo(() => buildColumnHeaderPaths(columns), [columns]); + const activeRules = useMemo( + () => validationRules.filter((rule) => isValidationRuleEnabled(rule, { formType, sheetName })), + [formType, sheetName], + ); const errors = useMemo(() => { const result = []; const seen = new Set(); - for (const rule of validationRules) { + for (const rule of activeRules) { collectInvalidErrors(data, rule, headerPaths, result, seen); } return result; - }, [data, headerPaths]); + }, [activeRules, data, headerPaths]); const isCellInvalid = useCallback( (columnId, value, row) => - validationRules.some( + activeRules.some( (rule) => rule.columnKeys.includes(columnId) && (!rule.appliesToRow || rule.appliesToRow(row)) && rule.isInvalid(value, row, columnId), ), - [], + [activeRules], ); return { errors, isCellInvalid }; diff --git a/web/src/components/RealtimeTable/utils/validationUtils.js b/web/src/components/RealtimeTable/utils/validationUtils.js index 3d12579..c17d470 100644 --- a/web/src/components/RealtimeTable/utils/validationUtils.js +++ b/web/src/components/RealtimeTable/utils/validationUtils.js @@ -1,6 +1,21 @@ // Достаёт вложенное поле из объекта строки таблицы export const getValueByPath = (row, path) => path.split('.').reduce((value, key) => value?.[key], row); +const matchesValidationScope = (scope, { formType, sheetName }) => + (!scope.formType || scope.formType === formType) && + (!scope.sheetName || scope.sheetName === sheetName); + +// Пустой includedScopes означает «работает везде»; исключения приоритетнее. +export const isValidationRuleEnabled = (rule, context = {}) => { + const includedScopes = rule.includedScopes || []; + const excludedScopes = rule.excludedScopes || []; + + if (excludedScopes.some((scope) => matchesValidationScope(scope, context))) return false; + if (includedScopes.length && !includedScopes.some((scope) => matchesValidationScope(scope, context))) return false; + + return true; +}; + // Строит пути заголовков колонок export const buildColumnHeaderPaths = (columns = [], path = [], map = {}) => { for (const column of columns) { -- 2.47.2