стили

This commit is contained in:
PotapovaA 2026-05-21 11:09:31 +03:00
parent 188189534b
commit b8a1427cf6
29 changed files with 3847 additions and 4022 deletions

View File

@ -1,13 +1,31 @@
<!DOCTYPE html> <!doctype html>
<html lang="ru-RU"> <html lang="ru">
<head>
<meta charset="utf-8" /> <head>
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta charset="UTF-8" />
<meta name="theme-color" content="#000000" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>Пример React-приложения</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head> <title>ДФиП/ССП — Табличный редактор</title>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript> <script>
<div id="root"></div> (function () {
</body> const isLocal =
window.location.hostname === 'localhost' ||
window.location.hostname === '127.0.0.1' ||
window.location.hostname.includes('local') ||
window.location.port === '3000';
if (isLocal) {
const base = document.createElement('base');
base.href = '/';
document.head.insertBefore(base, document.head.firstChild);
}
})();
</script>
</head>
<body>
<div id="root"></div>
</body>
</html> </html>

View File

@ -3,7 +3,7 @@ import api from './client';
export const FormsSheetApi = { export const FormsSheetApi = {
get(form, sheetName) { get(form, sheetName) {
return api return api
.get(`/form/${4}/sheet/${sheetName}?direction=Support`) .get(`/form/${4}/sheet/${sheetName}`)
// .get(`/forms/${form}/sheet/${sheetName}`) // .get(`/forms/${form}/sheet/${sheetName}`)
.then((r) => r.data); .then((r) => r.data);
}, },

View File

@ -18,7 +18,7 @@ export const FormsApi = {
.then((r) => r.data); .then((r) => r.data);
}, },
formsList() { formsList() {
return api.get('/forms/all').then((r) => r.data.result); return api.get('/form/').then((r) => r.data.result);
}, },
formTablesList(formId, isTemplate) { formTablesList(formId, isTemplate) {
return api return api

View File

@ -2,10 +2,10 @@ import api from './client';
export const TasksApi = { export const TasksApi = {
list(params = {}) { list(params = {}) {
return api.get('/tasks/', { params }).then((r) => r.data.result); return api.get('/form/', { params }).then((r) => r.data);
}, },
getTask(taskId) { getSheets(taskId) {
return api.get(`/tasks/${taskId}`).then((r) => r.data); return api.get(`/form/${taskId}/sheets`).then((r) => r.data);
}, },
getTaskStages(taskId) { getTaskStages(taskId) {
return api.get(`/tasks/${taskId}/stages`).then((r) => r.data); return api.get(`/tasks/${taskId}/stages`).then((r) => r.data);

View File

@ -25,8 +25,7 @@ export const PrivateRoute = () => {
<CircularProgress />; <CircularProgress />;
} }
// return isAuthenticated ? <Outlet /> : <Navigate to="/login" replace />; return isAuthenticated ? <Outlet /> : <Navigate to="/login" replace />;
return <Outlet />;
}; };
export const AppRoutes = () => { export const AppRoutes = () => {

View File

@ -22,6 +22,7 @@ import {
const RealtimeTable = ({ form, sheetName }) => { const RealtimeTable = ({ form, sheetName }) => {
const { data, setData } = useRealtimeData(form, sheetName); const { data, setData } = useRealtimeData(form, sheetName);
const [isLoading, setIsLoading] = useState(true);
const [globalFilter, setGlobalFilter] = useState(''); const [globalFilter, setGlobalFilter] = useState('');
const [showColumnFilters, setShowColumnFilters] = useState(false); const [showColumnFilters, setShowColumnFilters] = useState(false);
const [selectedColumn, setSelectedColumn] = useState(); const [selectedColumn, setSelectedColumn] = useState();
@ -40,10 +41,11 @@ const RealtimeTable = ({ form, sheetName }) => {
handleToggleColumnVisibility, handleToggleColumnVisibility,
} = useColumnSettings(); } = useColumnSettings();
const { sizeMult, setSizeMult, tableScaleStyle, tableWrapperStyle } =
useTableScale();
const { headerPortalRef, containerRef } = useHeaderPortal(); const { headerPortalRef, containerRef } = useHeaderPortal();
const { sizeMult, setSizeMult, tableScaleStyle, tableWrapperStyle } =
useTableScale(containerRef);
const [columnsConfig, setColumnsConfig] = useState(null); const [columnsConfig, setColumnsConfig] = useState(null);
useEffect(() => { useEffect(() => {

View File

@ -3,11 +3,11 @@ import { GroupByObjectTitle } from './GroupByObject.style';
export const GroupByObject = ({ title, children }) => { export const GroupByObject = ({ title, children }) => {
return ( return (
<> <Stack direction="column" spacing={0.375}>
<GroupByObjectTitle>{title}</GroupByObjectTitle> <GroupByObjectTitle>{title}</GroupByObjectTitle>
<Stack direction="row" sx={{ gap: '.75rem' }}> <Stack direction="row" sx={{gap: ".75rem"}}>
{children} {children}
</Stack> </Stack>
</> </Stack>
); );
}; };

View File

@ -114,7 +114,13 @@ const HeaderCell = ({ header, table, onClick, hightlight, onChangeWidth }) => {
const isPinned = isColumnPin(table, header); const isPinned = isColumnPin(table, header);
const leftOffset = calculateLeftOffset(table, header); const leftOffset = calculateLeftOffset(table, header);
const backgroundColor = hightlight ? '#cbccce' : 'rgba(243, 244, 246, 1)'; // Получаем цвет из muiTableHeadCellProps
const customBgColor = column.columnDef?.muiTableHeadCellProps?.sx?.backgroundColor;
// Определяем итоговый цвет: если есть кастомный - используем его, иначе стандартный
const backgroundColor = customBgColor
? customBgColor
: (hightlight ? '#cbccce' : 'rgba(243, 244, 246, 1)');
const handleChangeWidth = (deltaWidth) => { const handleChangeWidth = (deltaWidth) => {
const size = header.getSize(); const size = header.getSize();
@ -178,6 +184,7 @@ const HeaderCell = ({ header, table, onClick, hightlight, onChangeWidth }) => {
textAlign: 'center', textAlign: 'center',
position: 'sticky', position: 'sticky',
left: getTextLeftOffset(), left: getTextLeftOffset(),
right: 0,
paddingRight: '0.5rem', paddingRight: '0.5rem',
paddingLeft: '0.5rem', paddingLeft: '0.5rem',
backgroundColor: backgroundColor, backgroundColor: backgroundColor,

File diff suppressed because it is too large Load Diff

View File

@ -1,259 +1,263 @@
import {
import { greenColumn,
greenColumn, whiteColumn,
whiteColumn, orangeColumn,
orangeColumn, yellowColumn,
yellowColumn, redColumn,
redColumn, blueColumn,
blueColumn, } from "../columnColors";
} from '../columnColors'; export const config = {
export const config = { config: {
"config":{ colors: {
"colors":{ n_pp_n_pp: {
"n_pp_n_pp":{ color_type: whiteColumn,
"color_type":whiteColumn, accessorKey: "n_pp_n_pp",
"accessorKey":"n_pp_n_pp"
}, },
"id_stati_gruppy_nomenklatury_id_stati_gruppy_nomenklatury":{ id_stati_gruppy_nomenklatury_id_stati_gruppy_nomenklatury: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"id_stati_gruppy_nomenklatury_id_stati_gruppy_nomenklatury" accessorKey:
"id_stati_gruppy_nomenklatury_id_stati_gruppy_nomenklatury",
}, },
"naimenovanie_statey_raskhodov_naimenovanie_statey_raskhodov":{ naimenovanie_statey_raskhodov_naimenovanie_statey_raskhodov: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"naimenovanie_statey_raskhodov_naimenovanie_statey_raskhodov" accessorKey:
"naimenovanie_statey_raskhodov_naimenovanie_statey_raskhodov",
}, },
"normiruemaya_edinitsa_normiruemaya_edinitsa":{ normiruemaya_edinitsa_normiruemaya_edinitsa: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"normiruemaya_edinitsa_normiruemaya_edinitsa" accessorKey: "normiruemaya_edinitsa_normiruemaya_edinitsa",
}, },
"limit_v_rubs_uchetom_nds_limit_v_rubs_uchetom_nds":{ limit_v_rubs_uchetom_nds_limit_v_rubs_uchetom_nds: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"limit_v_rubs_uchetom_nds_limit_v_rubs_uchetom_nds" accessorKey: "limit_v_rubs_uchetom_nds_limit_v_rubs_uchetom_nds",
}, },
"limit_v_rubbez_ucheta_nds_limit_v_rubbez_ucheta_nds":{ limit_v_rubbez_ucheta_nds_limit_v_rubbez_ucheta_nds: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"limit_v_rubbez_ucheta_nds_limit_v_rubbez_ucheta_nds" accessorKey: "limit_v_rubbez_ucheta_nds_limit_v_rubbez_ucheta_nds",
}, },
"i_kvartal_2026_g_kolichestvov_sht":{ i_kvartal_2026_g_kolichestvov_sht: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"i_kvartal_2026_g_kolichestvov_sht" accessorKey: "i_kvartal_2026_g_kolichestvov_sht",
}, },
"i_kvartal_2026_g_raskhody_v_smetu_v_rublyakh":{ i_kvartal_2026_g_raskhody_v_smetu_v_rublyakh: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"i_kvartal_2026_g_raskhody_v_smetu_v_rublyakh" accessorKey: "i_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
}, },
"ii_kvartal_2026_g_kolichestvov_sht":{ ii_kvartal_2026_g_kolichestvov_sht: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"ii_kvartal_2026_g_kolichestvov_sht" accessorKey: "ii_kvartal_2026_g_kolichestvov_sht",
}, },
"ii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh":{ ii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"ii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh" accessorKey: "ii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
}, },
"iii_kvartal_2026_g_kolichestvov_sht":{ iii_kvartal_2026_g_kolichestvov_sht: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"iii_kvartal_2026_g_kolichestvov_sht" accessorKey: "iii_kvartal_2026_g_kolichestvov_sht",
}, },
"iii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh":{ iii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"iii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh" accessorKey: "iii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
}, },
"iv_kvartal_2026_g_kolichestvov_sht":{ iv_kvartal_2026_g_kolichestvov_sht: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"iv_kvartal_2026_g_kolichestvov_sht" accessorKey: "iv_kvartal_2026_g_kolichestvov_sht",
},
iv_kvartal_2026_g_raskhody_v_smetu_v_rublyakh: {
color_type: whiteColumn,
accessorKey: "iv_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
}, },
"iv_kvartal_2026_g_raskhody_v_smetu_v_rublyakh":{
"color_type":whiteColumn,
"accessorKey":"iv_kvartal_2026_g_raskhody_v_smetu_v_rublyakh"
}
}, },
"columns":[ columns: [
{ {
"header":"N п\\/п", header: "N п/п",
"accessorKey":"n_pp", accessorKey: "n_pp",
"columns":[ columns: [
{ {
"header":"N п\\/п", header: "N п/п",
"accessorKey":"n_pp_n_pp", accessorKey: "n_pp_n_pp",
"exampleValue":"1", exampleValue: "1",
"size":150, size: 150,
"filterFn":"contains" filterFn: "contains",
} },
] ],
}, },
{ {
"header":"ID статьи \\/ группы номенклатуры", header: "ID статьи / группы номенклатуры",
"accessorKey":"id_stati_gruppy_nomenklatury", accessorKey: "id_stati_gruppy_nomenklatury",
"columns":[ columns: [
{ {
"header":"ID статьи \\/ группы номенклатуры", header: "ID статьи / группы номенклатуры",
"accessorKey":"id_stati_gruppy_nomenklatury_id_stati_gruppy_nomenklatury", accessorKey:
"size":150, "id_stati_gruppy_nomenklatury_id_stati_gruppy_nomenklatury",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"Наименование статей расходов", header: "Наименование статей расходов",
"accessorKey":"naimenovanie_statey_raskhodov", accessorKey: "naimenovanie_statey_raskhodov",
"columns":[ columns: [
{ {
"header":"Наименование статей расходов", header: "Наименование статей расходов",
"accessorKey":"naimenovanie_statey_raskhodov_naimenovanie_statey_raskhodov", accessorKey:
"exampleValue":"Телефонные, почтовые, телеграфные расходы и др. услуги связи", "naimenovanie_statey_raskhodov_naimenovanie_statey_raskhodov",
"size":150, exampleValue:
"filterFn":"contains" "Телефонные, почтовые, телеграфные расходы и др. услуги связи",
} size: 150,
] filterFn: "contains",
},
],
}, },
{ {
"header":"Нормируемая единица", header: "Нормируемая единица",
"accessorKey":"normiruemaya_edinitsa", accessorKey: "normiruemaya_edinitsa",
"columns":[ columns: [
{ {
"header":"Нормируемая единица", header: "Нормируемая единица",
"accessorKey":"normiruemaya_edinitsa_normiruemaya_edinitsa", accessorKey: "normiruemaya_edinitsa_normiruemaya_edinitsa",
"size":150, size: 150,
"filterFn":"contains" filterFn: "contains",
} },
] ],
}, },
{ {
"header":"Лимит, в руб.\\n(с учетом НДС)", header: "Лимит, в руб.(с учетом НДС)",
"accessorKey":"limit_v_rubs_uchetom_nds", accessorKey: "limit_v_rubs_uchetom_nds",
"columns":[ columns: [
{ {
"header":"Лимит, в руб.\\n(с учетом НДС)", header: "Лимит, в руб.(с учетом НДС)",
"accessorKey":"limit_v_rubs_uchetom_nds_limit_v_rubs_uchetom_nds", accessorKey: "limit_v_rubs_uchetom_nds_limit_v_rubs_uchetom_nds",
"size":150, size: 150,
"filterFn":"contains" filterFn: "contains",
} },
] ],
}, },
{ {
"header":"Лимит, в руб.\\n(без учета НДС)", header: "Лимит, в руб.(без учета НДС)",
"accessorKey":"limit_v_rubbez_ucheta_nds", accessorKey: "limit_v_rubbez_ucheta_nds",
"columns":[ columns: [
{ {
"header":"Лимит, в руб.\\n(без учета НДС)", header: "Лимит, в руб.(без учета НДС)",
"accessorKey":"limit_v_rubbez_ucheta_nds_limit_v_rubbez_ucheta_nds", accessorKey: "limit_v_rubbez_ucheta_nds_limit_v_rubbez_ucheta_nds",
"size":150, size: 150,
"filterFn":"contains" filterFn: "contains",
} },
] ],
}, },
{ {
"header":"I квартал 2026 г.", header: "I квартал 2026 г.",
"accessorKey":"i_kvartal_2026_g", accessorKey: "i_kvartal_2026_g",
"columns":[ columns: [
{ {
"header":"Количество,\\nв шт.", header: "Количество,в шт.",
"accessorKey":"i_kvartal_2026_g_kolichestvov_sht", accessorKey: "i_kvartal_2026_g_kolichestvov_sht",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
}, },
{ {
"header":"Расходы в смету, \\nв рублях", header: "Расходы в смету, в рублях",
"accessorKey":"i_kvartal_2026_g_raskhody_v_smetu_v_rublyakh", accessorKey: "i_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
} },
] ],
}, },
{ {
"header":"II квартал 2026 г.", header: "II квартал 2026 г.",
"accessorKey":"ii_kvartal_2026_g", accessorKey: "ii_kvartal_2026_g",
"columns":[ columns: [
{ {
"header":"Количество,\\nв шт.", header: "Количество,в шт.",
"accessorKey":"ii_kvartal_2026_g_kolichestvov_sht", accessorKey: "ii_kvartal_2026_g_kolichestvov_sht",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
}, },
{ {
"header":"Расходы в смету, \\nв рублях", header: "Расходы в смету, в рублях",
"accessorKey":"ii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh", accessorKey: "ii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
} },
] ],
}, },
{ {
"header":"III квартал 2026 г.", header: "III квартал 2026 г.",
"accessorKey":"iii_kvartal_2026_g", accessorKey: "iii_kvartal_2026_g",
"columns":[ columns: [
{ {
"header":"Количество,\\nв шт.", header: "Количество,в шт.",
"accessorKey":"iii_kvartal_2026_g_kolichestvov_sht", accessorKey: "iii_kvartal_2026_g_kolichestvov_sht",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
}, },
{ {
"header":"Расходы в смету, \\nв рублях", header: "Расходы в смету, в рублях",
"accessorKey":"iii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh", accessorKey: "iii_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
} },
] ],
}, },
{ {
"header":"IV квартал 2026 г.", header: "IV квартал 2026 г.",
"accessorKey":"iv_kvartal_2026_g", accessorKey: "iv_kvartal_2026_g",
"columns":[ columns: [
{ {
"header":"Количество,\\nв шт.", header: "Количество,в шт.",
"accessorKey":"iv_kvartal_2026_g_kolichestvov_sht", accessorKey: "iv_kvartal_2026_g_kolichestvov_sht",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
}, },
{ {
"header":"Расходы в смету, \\nв рублях", header: "Расходы в смету, в рублях",
"accessorKey":"iv_kvartal_2026_g_raskhody_v_smetu_v_rublyakh", accessorKey: "iv_kvartal_2026_g_raskhody_v_smetu_v_rublyakh",
"size":150, size: 150,
"filterFn":"contains", filterFn: "contains",
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#A5A5A5" backgroundColor: "#FFFFFF",
} },
} },
} },
] ],
} },
] ],
} },
} };

View File

@ -125,19 +125,19 @@
}, },
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp", "accessorKey":"pp",
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp_pp", "accessorKey":"pp_pp",
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp_pp_pp", "accessorKey":"pp_pp_pp",
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp_pp_pp_pp", "accessorKey":"pp_pp_pp_pp",
"size":150, "size":150,
"filterFn":"contains" "filterFn":"contains"
@ -161,13 +161,13 @@
"accessorKey":"adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya", "accessorKey":"adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya",
"columns":[ "columns":[
{ {
"header":"(заполняется авто из табл. \\"INFO\\" в зависимости от выбранного объекта)", "header":"(заполняется авто из табл. \"INFO\" в зависимости от выбранного объекта)",
"accessorKey":"adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya_zapolnyaetsya_avto_iz_tabl_info_v_zavisimosti_ot_vybrannogo_obekta", "accessorKey":"adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya_adres_arenduemogo_pomescheniya_zapolnyaetsya_avto_iz_tabl_info_v_zavisimosti_ot_vybrannogo_obekta",
"size":150, "size":150,
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -196,7 +196,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -225,7 +225,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -248,13 +248,13 @@
"accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora", "accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora",
"columns":[ "columns":[
{ {
"header":"в формате \\"месяц.год\\"", "header":"в формате \"месяц.год\"",
"accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_v_formate_mesyatsgod", "accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_v_formate_mesyatsgod",
"size":150, "size":150,
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -399,7 +399,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -482,7 +482,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -565,7 +565,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -648,7 +648,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }

View File

@ -121,19 +121,19 @@
}, },
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp", "accessorKey":"pp",
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp_pp", "accessorKey":"pp_pp",
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp_pp_pp", "accessorKey":"pp_pp_pp",
"columns":[ "columns":[
{ {
"header":"№ п\\/п", "header":"№ п/п",
"accessorKey":"pp_pp_pp_pp", "accessorKey":"pp_pp_pp_pp",
"size":150, "size":150,
"filterFn":"contains" "filterFn":"contains"
@ -157,13 +157,13 @@
"accessorKey":"adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta", "accessorKey":"adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta",
"columns":[ "columns":[
{ {
"header":"(заполняется авто из табл. \\"INFO\\" в зависимости от выбранного объекта)", "header":"(заполняется авто из табл. \"INFO\" в зависимости от выбранного объекта)",
"accessorKey":"adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta_zapolnyaetsya_avto_iz_tabl_info_v_zavisimosti_ot_vybrannogo_obekta", "accessorKey":"adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta_adres_okhranyaemogo_obekta_zapolnyaetsya_avto_iz_tabl_info_v_zavisimosti_ot_vybrannogo_obekta",
"size":150, "size":150,
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -192,7 +192,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -243,13 +243,13 @@
"accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora", "accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora",
"columns":[ "columns":[
{ {
"header":"в формате \\"месяц.год\\"", "header":"в формате \"месяц.год\"",
"accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_v_formate_mesyatsgod", "accessorKey":"srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_srok_okonchaniya_dogovora_v_formate_mesyatsgod",
"size":150, "size":150,
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -366,7 +366,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -449,7 +449,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -532,7 +532,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -615,7 +615,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#D8D8D8" "backgroundColor":"#FFFFFF"
} }
} }
} }

View File

@ -1,463 +1,514 @@
import {
import { greenColumn,
greenColumn, whiteColumn,
whiteColumn, orangeColumn,
orangeColumn, yellowColumn,
yellowColumn, redColumn,
redColumn, blueColumn,
blueColumn, } from "../columnColors";
} from '../columnColors'; export const config = {
export const config = { config: {
"config":{ colors: {
"colors":{ pp_pp_pp: {
"pp_pp_pp":{ color_type: whiteColumn,
"color_type":whiteColumn, accessorKey: "pp_pp_pp",
"accessorKey":"pp_pp_pp"
}, },
"perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat":{ perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat:
"color_type":whiteColumn, {
"accessorKey":"perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat" color_type: whiteColumn,
accessorKey:
"perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat",
},
raskhody_planiruemye_rf_na_2026_god_i_kvartal_i_kvartal: {
color_type: whiteColumn,
accessorKey: "raskhody_planiruemye_rf_na_2026_god_i_kvartal_i_kvartal",
}, },
"raskhody_planiruemye_rf_na_2026_god_i_kvartal_i_kvartal":{ raskhody_planiruemye_rf_na_2026_god_ii_kvartal_ii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_i_kvartal_i_kvartal" accessorKey:
"raskhody_planiruemye_rf_na_2026_god_ii_kvartal_ii_kvartal",
}, },
"raskhody_planiruemye_rf_na_2026_god_ii_kvartal_ii_kvartal":{ raskhody_planiruemye_rf_na_2026_god_iii_kvartal_iii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_ii_kvartal_ii_kvartal" accessorKey:
"raskhody_planiruemye_rf_na_2026_god_iii_kvartal_iii_kvartal",
}, },
"raskhody_planiruemye_rf_na_2026_god_iii_kvartal_iii_kvartal":{ raskhody_planiruemye_rf_na_2026_god_iv_kvartal_iv_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_iii_kvartal_iii_kvartal" accessorKey:
"raskhody_planiruemye_rf_na_2026_god_iv_kvartal_iv_kvartal",
}, },
"raskhody_planiruemye_rf_na_2026_god_iv_kvartal_iv_kvartal":{ v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka_itogopodderzhka:
"color_type":whiteColumn, {
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_iv_kvartal_iv_kvartal" color_type: whiteColumn,
accessorKey:
"v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka_itogopodderzhka",
},
v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka_itogopodderzhka:
{
color_type: whiteColumn,
accessorKey:
"v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka_itogopodderzhka",
},
v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka_itogopodderzhka:
{
color_type: whiteColumn,
accessorKey:
"v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka_itogopodderzhka",
},
v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal_iv_kvartal:
{
color_type: whiteColumn,
accessorKey:
"v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal_iv_kvartal",
},
utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal_i_kvartal: {
color_type: whiteColumn,
accessorKey:
"utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal_i_kvartal",
}, },
"v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka_itogopodderzhka":{ utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal_ii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka_itogopodderzhka" accessorKey:
"utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal_ii_kvartal",
}, },
"v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka_itogopodderzhka":{ utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal_iii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka_itogopodderzhka" accessorKey:
"utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal_iii_kvartal",
}, },
"v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka_itogopodderzhka":{ utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal_iv_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka_itogopodderzhka" accessorKey:
"utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal_iv_kvartal",
}, },
"v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal_iv_kvartal":{ fakticheskie_raskhody_za_2026_god_i_kvartal_i_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal_iv_kvartal" accessorKey: "fakticheskie_raskhody_za_2026_god_i_kvartal_i_kvartal",
}, },
"utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal_i_kvartal":{ fakticheskie_raskhody_za_2026_god_ii_kvartal_ii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal_i_kvartal" accessorKey: "fakticheskie_raskhody_za_2026_god_ii_kvartal_ii_kvartal",
}, },
"utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal_ii_kvartal":{ fakticheskie_raskhody_za_2026_god_iii_kvartal_iii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal_ii_kvartal" accessorKey:
"fakticheskie_raskhody_za_2026_god_iii_kvartal_iii_kvartal",
}, },
"utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal_iii_kvartal":{ fakticheskie_raskhody_za_2026_god_iv_kvartal_iv_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal_iii_kvartal" accessorKey: "fakticheskie_raskhody_za_2026_god_iv_kvartal_iv_kvartal",
}, },
"utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal_iv_kvartal":{ skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal_ii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal_iv_kvartal" accessorKey:
"skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal_ii_kvartal",
}, },
"fakticheskie_raskhody_za_2026_god_i_kvartal_i_kvartal":{ skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal_iii_kvartal: {
"color_type":whiteColumn, color_type: whiteColumn,
"accessorKey":"fakticheskie_raskhody_za_2026_god_i_kvartal_i_kvartal" accessorKey:
"skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal_iii_kvartal",
}, },
"fakticheskie_raskhody_za_2026_god_ii_kvartal_ii_kvartal":{
"color_type":whiteColumn,
"accessorKey":"fakticheskie_raskhody_za_2026_god_ii_kvartal_ii_kvartal"
},
"fakticheskie_raskhody_za_2026_god_iii_kvartal_iii_kvartal":{
"color_type":whiteColumn,
"accessorKey":"fakticheskie_raskhody_za_2026_god_iii_kvartal_iii_kvartal"
},
"fakticheskie_raskhody_za_2026_god_iv_kvartal_iv_kvartal":{
"color_type":whiteColumn,
"accessorKey":"fakticheskie_raskhody_za_2026_god_iv_kvartal_iv_kvartal"
},
"skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal_ii_kvartal":{
"color_type":whiteColumn,
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal_ii_kvartal"
},
"skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal_iii_kvartal":{
"color_type":whiteColumn,
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal_iii_kvartal"
}
}, },
"columns":[ columns: [
{ {
"header":" ", header: " ",
"columns":[ columns: [
{ {
"header":"№ п\\/п", header: "№ п/п",
"accessorKey":"pp", accessorKey: "pp",
"columns":[ columns: [
{ {
"header":"№ п\\/п", header: "№ п/п",
"accessorKey":"pp_pp", accessorKey: "pp_pp",
"columns":[ columns: [
{ {
"header":"№ п\\/п", header: "№ п/п",
"accessorKey":"pp_pp_pp", accessorKey: "pp_pp_pp",
"size":150, size: 150,
"filterFn":"contains" filterFn: "contains",
} },
] ],
} },
] ],
} },
], ],
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#f5f5f5" backgroundColor: "#f5f5f5",
} },
} },
}, },
{ {
"header":" ", header: " ",
"columns":[ columns: [
{ {
"header":"Перечень расходов и затрат", header: "Перечень расходов и затрат",
"accessorKey":"perechen_raskhodov_i_zatrat", accessorKey: "perechen_raskhodov_i_zatrat",
"columns":[ columns: [
{ {
"header":"Перечень расходов и затрат", header: "Перечень расходов и затрат",
"accessorKey":"perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat", accessorKey:
"columns":[ "perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat",
columns: [
{ {
"header":"Перечень расходов и затрат", header: "Перечень расходов и затрат",
"accessorKey":"perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat", accessorKey:
"size":150, "perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat_perechen_raskhodov_i_zatrat",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
} ],
},
], ],
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#f5f5f5" backgroundColor: "#f5f5f5",
} },
} },
}, },
{ {
"header":" ", header: " ",
"columns":[ columns: [
{ {
"header":"Расходы, планируемые РФ на 2026 год", header: "Расходы, планируемые РФ на 2026 год",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god", accessorKey: "raskhody_planiruemye_rf_na_2026_god",
"columns":[ columns: [
{ {
"header":"I квартал", header: "I квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_i_kvartal", accessorKey: "raskhody_planiruemye_rf_na_2026_god_i_kvartal",
"columns":[ columns: [
{ {
"header":"I квартал", header: "I квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_i_kvartal_i_kvartal", accessorKey:
"size":150, "raskhody_planiruemye_rf_na_2026_god_i_kvartal_i_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_ii_kvartal", accessorKey: "raskhody_planiruemye_rf_na_2026_god_ii_kvartal",
"columns":[ columns: [
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_ii_kvartal_ii_kvartal", accessorKey:
"size":150, "raskhody_planiruemye_rf_na_2026_god_ii_kvartal_ii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_iii_kvartal", accessorKey: "raskhody_planiruemye_rf_na_2026_god_iii_kvartal",
"columns":[ columns: [
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_iii_kvartal_iii_kvartal", accessorKey:
"size":150, "raskhody_planiruemye_rf_na_2026_god_iii_kvartal_iii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_iv_kvartal", accessorKey: "raskhody_planiruemye_rf_na_2026_god_iv_kvartal",
"columns":[ columns: [
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"raskhody_planiruemye_rf_na_2026_god_iv_kvartal_iv_kvartal", accessorKey:
"size":150, "raskhody_planiruemye_rf_na_2026_god_iv_kvartal_iv_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
} ],
},
], ],
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#f5f5f5" backgroundColor: "#f5f5f5",
} },
} },
}, },
{ {
"header":"в тыс. рублей", header: "в тыс. рублей",
"accessorKey":"v_tys_rubley", accessorKey: "v_tys_rubley",
"columns":[ columns: [
{ {
"header":"Расходы, планируемые РФ на 2026 год", header: "Расходы, планируемые РФ на 2026 год",
"accessorKey":"v_tys_rubley_raskhody_planiruemye_rf_na_2026_god", accessorKey: "v_tys_rubley_raskhody_planiruemye_rf_na_2026_god",
"columns":[ columns: [
{ {
"header":"ИТОГО\\nПоддержка", header: "ИТОГОПоддержка",
"accessorKey":"v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka", accessorKey:
"columns":[ "v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka",
columns: [
{ {
"header":"ИТОГО\\nПоддержка", header: "ИТОГОПоддержка",
"accessorKey":"v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka_itogopodderzhka", accessorKey:
"size":150, "v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka_itogopodderzhka",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
],
}, },
{ {
"header":"Утвержденные базовые расходы на 2026 год", header: "Утвержденные базовые расходы на 2026 год",
"accessorKey":"v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god", accessorKey:
"columns":[ "v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god",
columns: [
{ {
"header":"ИТОГО\\nПоддержка", header: "ИТОГОПоддержка",
"accessorKey":"v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka", accessorKey:
"columns":[ "v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka",
columns: [
{ {
"header":"ИТОГО\\nПоддержка", header: "ИТОГОПоддержка",
"accessorKey":"v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka_itogopodderzhka", accessorKey:
"size":150, "v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka_itogopodderzhka",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
],
}, },
{ {
"header":"Фактические расходы за 2026 год", header: "Фактические расходы за 2026 год",
"accessorKey":"v_tys_rubley_fakticheskie_raskhody_za_2026_god", accessorKey: "v_tys_rubley_fakticheskie_raskhody_za_2026_god",
"columns":[ columns: [
{ {
"header":"ИТОГО\\nПоддержка", header: "ИТОГОПоддержка",
"accessorKey":"v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka", accessorKey:
"columns":[ "v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka",
columns: [
{ {
"header":"ИТОГО\\nПоддержка", header: "ИТОГОПоддержка",
"accessorKey":"v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka_itogopodderzhka", accessorKey:
"size":150, "v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka_itogopodderzhka",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
],
}, },
{ {
"header":"Скорректированная смета расходов на 2026 год", header: "Скорректированная смета расходов на 2026 год",
"accessorKey":"v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god", accessorKey:
"columns":[ "v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god",
columns: [
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal", accessorKey:
"columns":[ "v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal",
columns: [
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal_iv_kvartal", accessorKey:
"size":150, "v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal_iv_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
} ],
] },
],
}, },
{ {
"header":" ", header: " ",
"columns":[ columns: [
{ {
"header":"Утвержденные базовые расходы на 2026 год", header: "Утвержденные базовые расходы на 2026 год",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god", accessorKey: "utverzhdennye_bazovye_raskhody_na_2026_god",
"columns":[ columns: [
{ {
"header":"I квартал", header: "I квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal", accessorKey:
"columns":[ "utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal",
columns: [
{ {
"header":"I квартал", header: "I квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal_i_kvartal", accessorKey:
"size":150, "utverzhdennye_bazovye_raskhody_na_2026_god_i_kvartal_i_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal", accessorKey:
"columns":[ "utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal",
columns: [
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal_ii_kvartal", accessorKey:
"size":150, "utverzhdennye_bazovye_raskhody_na_2026_god_ii_kvartal_ii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal", accessorKey:
"columns":[ "utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal",
columns: [
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal_iii_kvartal", accessorKey:
"size":150, "utverzhdennye_bazovye_raskhody_na_2026_god_iii_kvartal_iii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal", accessorKey:
"columns":[ "utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal",
columns: [
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal_iv_kvartal", accessorKey:
"size":150, "utverzhdennye_bazovye_raskhody_na_2026_god_iv_kvartal_iv_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
} ],
},
], ],
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#f5f5f5" backgroundColor: "#f5f5f5",
} },
} },
}, },
{ {
"header":" ", header: " ",
"columns":[ columns: [
{ {
"header":"Фактические расходы за 2026 год", header: "Фактические расходы за 2026 год",
"accessorKey":"fakticheskie_raskhody_za_2026_god", accessorKey: "fakticheskie_raskhody_za_2026_god",
"columns":[ columns: [
{ {
"header":"I квартал", header: "I квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_i_kvartal", accessorKey: "fakticheskie_raskhody_za_2026_god_i_kvartal",
"columns":[ columns: [
{ {
"header":"I квартал", header: "I квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_i_kvartal_i_kvartal", accessorKey:
"size":150, "fakticheskie_raskhody_za_2026_god_i_kvartal_i_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_ii_kvartal", accessorKey: "fakticheskie_raskhody_za_2026_god_ii_kvartal",
"columns":[ columns: [
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_ii_kvartal_ii_kvartal", accessorKey:
"size":150, "fakticheskie_raskhody_za_2026_god_ii_kvartal_ii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_iii_kvartal", accessorKey: "fakticheskie_raskhody_za_2026_god_iii_kvartal",
"columns":[ columns: [
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_iii_kvartal_iii_kvartal", accessorKey:
"size":150, "fakticheskie_raskhody_za_2026_god_iii_kvartal_iii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_iv_kvartal", accessorKey: "fakticheskie_raskhody_za_2026_god_iv_kvartal",
"columns":[ columns: [
{ {
"header":"IV квартал", header: "IV квартал",
"accessorKey":"fakticheskie_raskhody_za_2026_god_iv_kvartal_iv_kvartal", accessorKey:
"size":150, "fakticheskie_raskhody_za_2026_god_iv_kvartal_iv_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
} ],
},
], ],
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#f5f5f5" backgroundColor: "#f5f5f5",
} },
} },
}, },
{ {
"header":" ", header: " ",
"columns":[ columns: [
{ {
"header":"Скорректированная смета расходов на 2026 год", header: "Скорректированная смета расходов на 2026 год",
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god", accessorKey: "skorrektirovannaya_smeta_raskhodov_na_2026_god",
"columns":[ columns: [
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal", accessorKey:
"columns":[ "skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal",
columns: [
{ {
"header":"II квартал", header: "II квартал",
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal_ii_kvartal", accessorKey:
"size":150, "skorrektirovannaya_smeta_raskhodov_na_2026_god_ii_kvartal_ii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
],
}, },
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal", accessorKey:
"columns":[ "skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal",
columns: [
{ {
"header":"III квартал", header: "III квартал",
"accessorKey":"skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal_iii_kvartal", accessorKey:
"size":150, "skorrektirovannaya_smeta_raskhodov_na_2026_god_iii_kvartal_iii_kvartal",
"filterFn":"contains" size: 150,
} filterFn: "contains",
] },
} ],
] },
} ],
},
], ],
"muiTableHeadCellProps":{ muiTableHeadCellProps: {
"sx":{ sx: {
"backgroundColor":"#f5f5f5" backgroundColor: "#f5f5f5",
} },
} },
} },
] ],
} },
} };

File diff suppressed because it is too large Load Diff

View File

@ -15,87 +15,87 @@
"accessorKey":"eslilevsimvb1713b17eslid170stsepitc17_d17c17" "accessorKey":"eslilevsimvb1713b17eslid170stsepitc17_d17c17"
}, },
"kod_razdela_kod_razdela_kod_razdela":{ "kod_razdela_kod_razdela_kod_razdela":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"kod_razdela_kod_razdela_kod_razdela" "accessorKey":"kod_razdela_kod_razdela_kod_razdela"
}, },
"id_stati_id_stati_id_stati":{ "id_stati_id_stati_id_stati":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"id_stati_id_stati_id_stati" "accessorKey":"id_stati_id_stati_id_stati"
}, },
"id_gruppy_nomenklatury_id_gruppy_nomenklatury_id_gruppy_nomenklatury":{ "id_gruppy_nomenklatury_id_gruppy_nomenklatury_id_gruppy_nomenklatury":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury_id_gruppy_nomenklatury" "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury_id_gruppy_nomenklatury"
}, },
"naimenovanie_oborudovaniya_naimenovanie_oborudovaniya_naimenovanie_oborudovaniya":{ "naimenovanie_oborudovaniya_naimenovanie_oborudovaniya_naimenovanie_oborudovaniya":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"naimenovanie_oborudovaniya_naimenovanie_oborudovaniya_naimenovanie_oborudovaniya" "accessorKey":"naimenovanie_oborudovaniya_naimenovanie_oborudovaniya_naimenovanie_oborudovaniya"
}, },
"60401_60404_vkhodyaschiy_ostatok_kol_vo_sht":{ "60401_60404_vkhodyaschiy_ostatok_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60401_60404_vkhodyaschiy_ostatok_kol_vo_sht" "accessorKey":"60401_60404_vkhodyaschiy_ostatok_kol_vo_sht"
}, },
"60401_60404_vkhodyaschiy_ostatok_summa_tys_rub":{ "60401_60404_vkhodyaschiy_ostatok_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60401_60404_vkhodyaschiy_ostatok_summa_tys_rub" "accessorKey":"60401_60404_vkhodyaschiy_ostatok_summa_tys_rub"
}, },
"60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht":{ "60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht" "accessorKey":"60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht"
}, },
"60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub":{ "60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub" "accessorKey":"60401_60404_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub"
}, },
"60401_60404_vybytie_v_otchetnom_mesyatse_kol_vo_sht":{ "60401_60404_vybytie_v_otchetnom_mesyatse_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60401_60404_vybytie_v_otchetnom_mesyatse_kol_vo_sht" "accessorKey":"60401_60404_vybytie_v_otchetnom_mesyatse_kol_vo_sht"
}, },
"60401_60404_vybytie_v_otchetnom_mesyatse_summa_tys_rub":{ "60401_60404_vybytie_v_otchetnom_mesyatse_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60401_60404_vybytie_v_otchetnom_mesyatse_summa_tys_rub" "accessorKey":"60401_60404_vybytie_v_otchetnom_mesyatse_summa_tys_rub"
}, },
"60415_vkhodyaschiy_ostatok_kol_vo_sht":{ "60415_vkhodyaschiy_ostatok_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60415_vkhodyaschiy_ostatok_kol_vo_sht" "accessorKey":"60415_vkhodyaschiy_ostatok_kol_vo_sht"
}, },
"60415_vkhodyaschiy_ostatok_summa_tys_rub":{ "60415_vkhodyaschiy_ostatok_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60415_vkhodyaschiy_ostatok_summa_tys_rub" "accessorKey":"60415_vkhodyaschiy_ostatok_summa_tys_rub"
}, },
"60415_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht":{ "60415_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60415_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht" "accessorKey":"60415_fakticheski_priobreteno_v_otchetnom_mesyatse_kol_vo_sht"
}, },
"60415_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub":{ "60415_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60415_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub" "accessorKey":"60415_fakticheski_priobreteno_v_otchetnom_mesyatse_summa_tys_rub"
}, },
"60415_pereneseno_na_bschet_604_kol_vo_sht":{ "60415_pereneseno_na_bschet_604_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60415_pereneseno_na_bschet_604_kol_vo_sht" "accessorKey":"60415_pereneseno_na_bschet_604_kol_vo_sht"
}, },
"60415_pereneseno_na_bschet_604_summa_tys_rub":{ "60415_pereneseno_na_bschet_604_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"60415_pereneseno_na_bschet_604_summa_tys_rub" "accessorKey":"60415_pereneseno_na_bschet_604_summa_tys_rub"
}, },
"itogo_fakticheski_priobreteno_v_otchetnom_mesyatse_tys_rub":{ "itogo_fakticheski_priobreteno_v_otchetnom_mesyatse_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"itogo_fakticheski_priobreteno_v_otchetnom_mesyatse_tys_rub" "accessorKey":"itogo_fakticheski_priobreteno_v_otchetnom_mesyatse_tys_rub"
}, },
"itogo_sredstva_tolko_po_balansuiz_go_so_znakom_tys_rub":{ "itogo_sredstva_tolko_po_balansuiz_go_so_znakom_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"itogo_sredstva_tolko_po_balansuiz_go_so_znakom_tys_rub" "accessorKey":"itogo_sredstva_tolko_po_balansuiz_go_so_znakom_tys_rub"
}, },
"itogo_vybytie_v_otchetnom_mesyatse_tys_rub":{ "itogo_vybytie_v_otchetnom_mesyatse_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"itogo_vybytie_v_otchetnom_mesyatse_tys_rub" "accessorKey":"itogo_vybytie_v_otchetnom_mesyatse_tys_rub"
}, },
"itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_kol_vo_sht":{ "itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_kol_vo_sht":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_kol_vo_sht" "accessorKey":"itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_kol_vo_sht"
}, },
"itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_summa_tys_rub":{ "itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_summa_tys_rub":{
"color_type":orangeColumn, "color_type":whiteColumn,
"accessorKey":"itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_summa_tys_rub" "accessorKey":"itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_itogo_osnovnye_sredstva_na_balanse_na_otchetnuyu_datu_summa_tys_rub"
} }
}, },
@ -107,11 +107,16 @@
"header":" ", "header":" ",
"columns":[ "columns":[
{ {
"header":"=ЕСЛИ(ЛЕВСИМВ(B17;1)=\\"3\\";B17;ЕСЛИ(D17<>0;СЦЕПИТЬ(C17;\\"_\\";D17);C17))", "header":"=ЕСЛИ(ЛЕВСИМВ(B17;1)="3";B17;ЕСЛИ(D17<>0;СЦЕПИТЬ(C17;"_";D17);C17))",
"accessorKey":"eslilevsimvb1713b17eslid170stsepitc17_d17c17", "accessorKey":"eslilevsimvb1713b17eslid170stsepitc17_d17c17",
"exampleValue":"3.00.", "exampleValue":"3.00.",
"size":150, "size":150,
"filterFn":"contains" "filterFn":"contains",
"muiTableHeadCellProps":{
"sx":{
"backgroundColor":"#FFFFFF"
}
}
} }
], ],
"exampleValue":"3.00.", "exampleValue":"3.00.",
@ -222,7 +227,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -233,7 +238,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -250,7 +255,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -261,7 +266,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -278,7 +283,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -289,7 +294,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -312,7 +317,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -323,7 +328,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -340,7 +345,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -351,14 +356,14 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
] ]
}, },
{ {
"header":"Перенесено на б\\/счет 604", "header":"Перенесено на б/счет 604",
"accessorKey":"60415_pereneseno_na_bschet_604", "accessorKey":"60415_pereneseno_na_bschet_604",
"columns":[ "columns":[
{ {
@ -368,7 +373,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -379,7 +384,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -402,14 +407,14 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
] ]
}, },
{ {
"header":"средства только по балансу\\n(из ГО) со знаком \\" - \\"", "header":"средства только по балансу(из ГО) со знаком " - "",
"accessorKey":"itogo_sredstva_tolko_po_balansuiz_go_so_znakom", "accessorKey":"itogo_sredstva_tolko_po_balansuiz_go_so_znakom",
"columns":[ "columns":[
{ {
@ -436,7 +441,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }
@ -459,7 +464,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
}, },
@ -470,7 +475,7 @@
"filterFn":"contains", "filterFn":"contains",
"muiTableHeadCellProps":{ "muiTableHeadCellProps":{
"sx":{ "sx":{
"backgroundColor":"#FABF8F" "backgroundColor":"#FFFFFF"
} }
} }
} }

View File

@ -1,47 +1,47 @@
export const greenColumn = { export const greenColumn = {
ROOT: '#C2D59A', ROOT: "#C2D59A",
GROUP: '#D7E3BC', GROUP: "#D7E3BC",
ITEM: '#EAF0DD', ITEM: "#EAF0DD",
SUB_ITEM: '#FFFFFF', SUB_ITEM: "#FFFFFF",
INPUT: '#FFFFFF', INPUT: "#FFFFFF",
}; };
export const orangeColumn = { export const orangeColumn = {
ROOT: '#F1C297', ROOT: "#F1C297",
GROUP: '#F6D6B9', GROUP: "#F6D6B9",
ITEM: '#FAEBDC', ITEM: "#FAEBDC",
SUB_ITEM: '#FFFFFF', SUB_ITEM: "#FFFFFF",
INPUT: '#FFFFFF', INPUT: "#FFFFFF",
}; };
export const whiteColumn = { export const whiteColumn = {
ROOT: '#FFFFFF', ROOT: "#FFFFFF",
GROUP: '#FFFFFF', GROUP: "#FFFFFF",
ITEM: '#FFFFFF', ITEM: "#FFFFFF",
SUB_ITEM: '#FFFFFF', SUB_ITEM: "#FFFFFF",
INPUT: '#FFFFFF', INPUT: "#FFFFFF",
}; };
export const redColumn = { export const redColumn = {
ROOT: '#FFFFFF', ROOT: "#933634", // самый темный
GROUP: '#FFFFFF', GROUP: "#D89493", // средний
ITEM: '#FFFFFF', ITEM: "#E5B7B6", // самый светлый
SUB_ITEM: '#FFFFFF', SUB_ITEM: "#FFFFFF",
INPUT: '#FFFFFF', INPUT: "#FFFFFF",
}; };
export const blueColumn = { export const blueColumn = {
ROOT: '#FFFFFF', ROOT: "#538DD4", // самый темный
GROUP: '#FFFFFF', GROUP: "#8DB3E2", // средний
ITEM: '#FFFFFF', ITEM: "#C5D8F0", // самый светлый
SUB_ITEM: '#FFFFFF', SUB_ITEM: "#FFFFFF",
INPUT: '#FFFFFF', INPUT: "#FFFFFF",
}; };
export const yellowColumn = { export const yellowColumn = {
ROOT: '#FFFFFF', ROOT: "#FFFF66",
GROUP: '#FFFFFF', GROUP: "#FFFF99",
ITEM: '#FFFFFF', ITEM: "#FFFFCC",
SUB_ITEM: '#FFFFFF', SUB_ITEM: "#FFFFFF",
INPUT: '#FFFFFF', INPUT: "#FFFFFF",
}; };

View File

@ -1,23 +1,25 @@
import { useState, useMemo, useEffect } from 'react'; import { useState, useMemo, useEffect } from "react";
import { loadFromStorage, saveToStorage } from '../utils/localStorageUtils'; import { loadFromStorage, saveToStorage } from "../utils/localStorageUtils";
export const useTableScale = () => { export const useTableScale = (tableRef, isLoading) => {
const [sizeMult, setSizeMult] = useState(() => const [sizeMult, setSizeMult] = useState(() =>
loadFromStorage('sizeMult', 1.5), loadFromStorage("sizeMult", 1.5),
); );
useEffect(() => { useEffect(() => {
saveToStorage('sizeMult', sizeMult); saveToStorage("sizeMult", sizeMult);
}, [sizeMult]); }, [sizeMult]);
const tableScaleStyle = useMemo( const tableScaleStyle = useMemo(
() => ({ () => ({
transform: `scale(${sizeMult})`, transform: `scale(${sizeMult})`,
transformOrigin: 'top left', transformOrigin: "top left",
transition: 'transform 0.2s ease-in-out', transition: "transform 0.2s ease-in-out",
willChange: 'transform', willChange: "transform",
display: 'flex', display: "flex",
flexDirection: 'column', flexDirection: "column",
flex: 1, flex: 1,
width: `${100 / sizeMult}%`, width: `${100 / sizeMult}%`,
height: `${100 / sizeMult}%`, height: `${100 / sizeMult}%`,
@ -29,15 +31,15 @@ export const useTableScale = () => {
const tableWrapperStyle = useMemo(() => { const tableWrapperStyle = useMemo(() => {
return { return {
overflow: 'visible', overflow: "visible",
overflowX: sizeMult > 1.2 ? 'auto' : 'visible', overflowX: sizeMult > 1.2 ? "auto" : "visible",
overflowY: sizeMult > 1.2 ? 'auto' : 'visible', overflowY: sizeMult > 1.2 ? "auto" : "visible",
display: 'flex', display: "flex",
flexDirection: 'column', flexDirection: "column",
height: '92%', height: "92%",
maxHeight: '92%', maxHeight: "92%",
minHeight: '92%', minHeight: "92%",
padding: '1rem', padding: "1rem",
}; };
}, [sizeMult]); }, [sizeMult]);

View File

@ -49,20 +49,39 @@ function EditCellPortal({ cell, table, EditCell, onChange }) {
export const getTableColumns = ({ Cell, EditCell, columnsConfig }) => { export const getTableColumns = ({ Cell, EditCell, columnsConfig }) => {
const columnColors = {...columnsConfig.colors}; const columnColors = { ...columnsConfig.colors };
const columns = [...config.config.columns]; console.log(columnColors)
const columns = [...columnsConfig.columns];
// for (const col of columns) {
// const childTheme = col.columns[0].columns[0].accessorKey;
// for (const c of col.columns) {
// c['muiTableHeadCellProps'] = { sx: { backgroundColor: columnColors[childTheme].color_type.ROOT } }
// console.log(c);
// for (const cc of c.columns) {
// cc['muiTableHeadCellProps'] = { sx: { backgroundColor: columnColors[childTheme].color_type.ROOT } }
// }
// }
// // col['muiTableHeadCellProps'] = {sx:{backgroundColor: "#B0A2C4"}}
// }
// console.log(JSON.stringify(columns))
// console.log(columns)
const processColumns = (columns, EditCell, Cell) => { const processColumns = (columns, EditCell, Cell) => {
columns.forEach((col) => { columns.forEach((col) => {
col.Cell = ({ cell, table, column, row }) => ( col.Cell = ({ cell, table, column, row }) => (
<Cell <>
cell={cell} <Cell
globalFilter={ cell={cell}
table.getState().globalFilter || column.getFilterValue() globalFilter={
} table.getState().globalFilter || column.getFilterValue()
// color={columnColors[column.id][row.original.row_type]} }
/> color={columnColors[column.id] ? columnColors[column.id].color_type[row.original.row_type] : 'black'}
/>
</>
); );
col.Edit = ({ cell, table, row, column }) => ( col.Edit = ({ cell, table, row, column }) => (
<EditCellPortal <EditCellPortal

View File

@ -1,6 +1,6 @@
import { useState, useEffect, useCallback } from 'react'; import { useState, useEffect, useCallback } from "react";
import { dataMock } from '../../mocks/mockTable'; import { dataMock } from "../../mocks/mockTable";
import { FormsSheetApi } from '../../api/form_sheet'; import { FormsSheetApi } from "../../api/form_sheet";
const useRealtimeData = (form, sheetName) => { const useRealtimeData = (form, sheetName) => {
const [data, setData] = useState([]); const [data, setData] = useState([]);
@ -25,9 +25,9 @@ const useRealtimeData = (form, sheetName) => {
}, []); }, []);
useEffect(() => { useEffect(() => {
const loadInitialData = async() => { const loadInitialData = async () => {
const mockData = await FormsSheetApi.get(form, sheetName); const res = await FormsSheetApi.get(form, sheetName);
console.log(mockData); const mockData = res.result;
const maxDepth = mockData.reduce((prev, current) => { const maxDepth = mockData.reduce((prev, current) => {
return prev.depth > current.depth ? prev : current; return prev.depth > current.depth ? prev : current;
}).depth; }).depth;

View File

@ -14,7 +14,7 @@ const TableCard = ({ table, onNavigate }) => {
}; };
return ( return (
<div key={table.id}> <div key={table}>
<Section onClick={handleClick}> <Section onClick={handleClick}>
<SectionStartPart> <SectionStartPart>
<div className="for-img-table"> <div className="for-img-table">

View File

@ -8,6 +8,7 @@ const TablesList = ({
projects, projects,
query, query,
basePath = '/table', basePath = '/table',
formInfo
}) => { }) => {
const navigate = useNavigate(); const navigate = useNavigate();
@ -16,11 +17,12 @@ const TablesList = ({
}; };
const renderTableCard = (table) => { const renderTableCard = (table) => {
console.log(table)
const path = `${basePath}/${table.id}`; const path = `${basePath}/${table.id}`;
return ( return (
<TableCard <TableCard
key={table.id} key={table}
onNavigate={() => handleNavigate(path)} onNavigate={() => handleNavigate(path)}
table={table} table={table}
/> />
@ -29,48 +31,30 @@ const TablesList = ({
return ( return (
<Box <Box
overflow="auto" sx={{
display="flex" overflow: 'auto',
flexDirection="column" display: 'flex',
gap="1rem" flexDirection: 'column',
maxHeight="calc(100vh - 14rem)" gap: '1rem',
maxHeight: 'calc(100vh - 14rem)'
}}
> >
{filteredTables.length === 0 && ( {filteredTables.length === 0 && (
<div className="text-sm text-gray-500"> <Box
sx={{
fontSize: '0.875rem',
color: '#6B7280' // gray-500 equivalent
}}
>
{query {query
? 'Ничего не найдено' ? 'Ничего не найдено'
: 'Нет таблиц. Создайте новую, чтобы начать.'} : 'Нет таблиц. Создайте новую, чтобы начать.'}
</div> </Box>
)} )}
{filteredTables.map( {filteredTables.map(
(table) => table.project_id === null && renderTableCard(table), (table) => renderTableCard(table),
)} )}
{projects.map((project) => {
const projectTables = filteredTables.filter(
(t) => t.project_id === project.id,
);
if (projectTables.length === 0) return null;
return (
<Stack key={`project_group_${project.id}`} spacing=".75rem" mt="1rem">
<Typography
sx={{
fontWeight: 400,
fontSize: '.88rem',
lineHeight: '143%',
color: '#1F1F1F',
marginBottom: '.25rem',
}}
>
{project.name || 'Без названия'}
</Typography>
{projectTables.map((table) => renderTableCard(table))}
</Stack>
);
})}
</Box> </Box>
); );
}; };

View File

@ -95,14 +95,14 @@ export const TaskCardComponent = ({
onAddForExport, onAddForExport,
}) => { }) => {
const navigate = useNavigate(); const navigate = useNavigate();
const { id, title, name, start_date, end_date, tables_count, ssp } = taskForm; const { id, title, name, start_date, end_date, tables_count, ssp, form_type_code } = taskForm;
const [isEditModalOpen, setEditModalOpen] = useState(false); const [isEditModalOpen, setEditModalOpen] = useState(false);
const [editedTitle, setEditedTitle] = useState(''); const [editedTitle, setEditedTitle] = useState('');
const [currentTitle, setCurrentTitle] = useState(title || name || ''); const [currentTitle, setCurrentTitle] = useState(form_type_code ||'');
const [isChecked, setIsChecked] = useState(false); const [isChecked, setIsChecked] = useState(false);
const initialTitle = title || name || ''; const initialTitle = form_type_code ||'';
useEffect(() => { useEffect(() => {
setCurrentTitle(initialTitle); setCurrentTitle(initialTitle);
@ -200,7 +200,7 @@ export const TaskCardComponent = ({
}} }}
key={id} key={id}
> >
<Box width="100%"> <Box sx={{ width: "100%" }}>
<CardHeader> <CardHeader>
<TaskId>ID: {id}</TaskId> <TaskId>ID: {id}</TaskId>
{/* TODO: вернется, когда будут реализованы статусы на бэке */} {/* TODO: вернется, когда будут реализованы статусы на бэке */}
@ -222,19 +222,19 @@ export const TaskCardComponent = ({
width={'100%'} width={'100%'}
alignItems={'end'} alignItems={'end'}
> >
{!isForm && (
<CardBody> <CardBody>
<IconWithContent icon={<DateIcon />}> <IconWithContent icon={<DateIcon />}>
{formattedDateRange} {formattedDateRange}
</IconWithContent> </IconWithContent>
<IconWithContent icon={<UserIcon />}> <IconWithContent icon={<UserIcon />}>
<Chip>{ssp.title}</Chip> {/* <Chip>{ssp.title}</Chip> */}
</IconWithContent> </IconWithContent>
<IconWithContent icon={<TableIcon />}> <IconWithContent icon={<TableIcon />}>
Таблиц: {tables_count} Таблиц: {tables_count}
</IconWithContent> </IconWithContent>
</CardBody> </CardBody>
)}
{exportMode && ( {exportMode && (
<div> <div>

View File

@ -28,3 +28,15 @@ export const EDIT_ACCESS_RUSSIAN = {
2: 'Только просмотр', 2: 'Только просмотр',
3: 'Просмотр и редактирование', 3: 'Просмотр и редактирование',
}; };
export const SHEET_NAME = {
"AHR": "АХР",
"CAP": "КВП",
"OPER": "Операц",
"AHR_LIMIT": "АХР Лимиты",
"AHR_RENT": "АХР Аренда",
"AHR_UTILITY": "АХР Коммунальные услуги",
"AHR_SECURITY": "АХР Безопасность",
"OTCH9F": "Отчет 9ф",
"SMETA": "Смета"
};

View File

@ -254,10 +254,12 @@ export default function FormPage() {
if (!form) { if (!form) {
return ( return (
<Box <Box
display="flex" sx={{
flexDirection="column" display: 'flex',
alignItems="center" flexDirection: 'column',
paddingTop={'2.5rem'} alignItems: 'center',
paddingTop: '2.5rem'
}}
> >
Эта форма не существует Эта форма не существует
</Box> </Box>
@ -268,13 +270,15 @@ export default function FormPage() {
<> <>
{form && <FormInfo form={form} />} {form && <FormInfo form={form} />}
<Box <Box
display="flex" sx={{
flexDirection="column" display: 'flex',
alignItems="center" flexDirection: 'column',
paddingTop={'2.5rem'} alignItems: 'center',
paddingTop: '2.5rem'
}}
> >
<Box display="flex" gap="1rem" flexDirection="column" width="50rem"> <Box sx={{ display: 'flex', gap: '1rem', flexDirection: 'column', width: '50rem' }}>
<Box display="flex" gap="1rem"> <Box sx={{ display: 'flex', gap: '1rem' }}>
<span>Таблицы</span> <span>Таблицы</span>
<Chip> <Chip>
<IconWithContent icon={<TableIcon />}> <IconWithContent icon={<TableIcon />}>
@ -283,8 +287,8 @@ export default function FormPage() {
</Chip> </Chip>
</Box> </Box>
<Box display="flex" justifyContent="space-between"> <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
<Box display="flex" gap="1rem"> <Box sx={{ display: 'flex', gap: '1rem' }}>
<SearchComponent <SearchComponent
placeholder="Поиск по названию таблицы" placeholder="Поиск по названию таблицы"
value={query} value={query}
@ -327,14 +331,14 @@ export default function FormPage() {
<Button <Button
variant="grey" variant="grey"
onClick={handleCancel} onClick={handleCancel}
style={{ height: '2.5rem' }} sx={{ height: '2.5rem' }}
> >
Отменить Отменить
</Button> </Button>
<Button <Button
variant="contained" variant="contained"
onClick={handleCreateTable} onClick={handleCreateTable}
style={{ height: '2.5rem' }} sx={{ height: '2.5rem' }}
> >
Создать Создать
</Button> </Button>
@ -349,20 +353,24 @@ export default function FormPage() {
value={newTableName} value={newTableName}
onChange={(e) => setNewTableName(e.target.value)} onChange={(e) => setNewTableName(e.target.value)}
/> />
<div <Box
className="flex items-center gap-3" sx={{
style={{ marginTop: '1rem' }} display: 'flex',
alignItems: 'center',
gap: '0.75rem',
marginTop: '1rem'
}}
> >
<CustomCheckbox <CustomCheckbox
checked={newTableIsProject} checked={newTableIsProject}
onChange={(e) => { onChange={(e) => {
setNewTableIsProject(e.target.checked ? true : false); setNewTableIsProject(e.target.checked ? true : false);
}} }}
></CustomCheckbox> />
<div style={{ fontSize: '1rem', color: '#1F1F1F' }}> <Box sx={{ fontSize: '1rem', color: '#1F1F1F' }}>
Проектная таблица Проектная таблица
</div> </Box>
</div> </Box>
</FormControl> </FormControl>
</Modal> </Modal>
</> </>

View File

@ -7,7 +7,7 @@ const PageContainer = styled.div`
flex-direction: column; flex-direction: column;
gap: 1.5rem; gap: 1.5rem;
background-color: Grey Light; background-color: Grey Light;
/* height: calc(100vh - 3.75rem); */ height: 100%;
`; `;
const TasksContainer = styled.div` const TasksContainer = styled.div`

View File

@ -22,6 +22,7 @@ import { ModalCreateProject } from './ModalCreateProject';
import { downloadFile } from '../../utils/downloadFile'; import { downloadFile } from '../../utils/downloadFile';
import { ExportWithTextButton } from '../../components/common/Buttons/ButtonsActions'; import { ExportWithTextButton } from '../../components/common/Buttons/ButtonsActions';
import TablesList from '../../components/common/TableList/TableList'; import TablesList from '../../components/common/TableList/TableList';
import { SHEET_NAME } from '../../constants';
const TaskInfo = ({ task }) => { const TaskInfo = ({ task }) => {
const formattedDateRange = `${formatDate(task.start_date)}${formatDate(task.end_date)}`; const formattedDateRange = `${formatDate(task.start_date)}${formatDate(task.end_date)}`;
@ -58,41 +59,11 @@ export default function TaskPage() {
const [projects, setProjects] = useState([]); const [projects, setProjects] = useState([]);
useEffect(() => { useEffect(() => {
if (!task) return; const getSheets = async () => {
const fetchProjects = async () => {
try {
const { success, result } = await FormsApi.getProjects(task.form_id);
success
? setTempProjects(result)
: toast.error('Ошибка получения проекта');
} catch {
toast.error('Ошибка получения проекта');
}
};
fetchProjects();
}, [task]);
useEffect(() => {
if (!taskId) return;
const fetchProjects = async () => {
try {
const { success, result } = await TasksApi.getProjects(taskId);
success ? setProjects(result) : toast.error('Ошибка получения проекта');
} catch {
toast.error('Ошибка получения проекта');
}
};
fetchProjects();
}, [taskId]);
useEffect(() => {
const getTaskInfo = async () => {
setIsLoading(true); setIsLoading(true);
try { try {
const data = await TasksApi.getTask(id); const data = await TasksApi.getSheets(id);
setTask(data); setTables(data.result.sheets.map(table => ({ name: SHEET_NAME[table], sheet: table })));
} catch (error) { } catch (error) {
toast.error( toast.error(
error?.response?.data?.detail || 'Ошибка получения данных задачи', error?.response?.data?.detail || 'Ошибка получения данных задачи',
@ -104,54 +75,17 @@ export default function TaskPage() {
}; };
if (Number.isFinite(id)) { if (Number.isFinite(id)) {
getTaskInfo(); getSheets();
} }
}, [id]); }, [id]);
useEffect(() => {
const loadTaskTables = async () => {
setIsLoading(true);
try {
const data = await TablesApi.listByTask(id);
setTables(data.tables);
} catch (error) {
toast.error(
error?.response?.data?.detail || 'Ошибка загрузки таблиц задачи',
);
} finally {
setIsLoading(false);
}
};
if (task) {
loadTaskTables();
}
}, [task, id]);
const handleCreateProject = (projectData) => { const handleCreateProject = (projectData) => {
TasksApi.createProjectTable(taskId, {
form_id: task.form_id,
id: tempProjects[0].id,
//если есть в projectData есть Название проекта то записываем в name
name: projectData['Название проекта'] || 'Проект задачи',
add_projects_data: { ...projectData },
})
.then((data) => {
if (data.success) {
setProjects((prev) => [...prev, data.result.project]);
setTables((prev) => [...prev, ...data.result.tables]);
return;
}
toast.error('ошибка при создании проекта');
})
.catch(() => {
toast.error('ошибка при создании проекта');
});
}; };
// Фильтруем таблицы по query // Фильтруем таблицы по query
const filteredTables = tables.filter((item) => const filteredTables = tables.filter((item) =>
item.name?.toLowerCase().includes(query.toLowerCase()), item.name.toLowerCase().includes(query.toLowerCase()),
); );
if (isLoading) { if (isLoading) {
@ -162,19 +96,6 @@ export default function TaskPage() {
); );
} }
if (!task) {
return (
<Box
display="flex"
flexDirection="column"
alignItems="center"
paddingTop={'2.5rem'}
>
Задачи не существует
</Box>
);
}
const handleExport = async () => { const handleExport = async () => {
try { try {
const response = await TasksApi.exportTask(taskId); const response = await TasksApi.exportTask(taskId);
@ -186,15 +107,17 @@ export default function TaskPage() {
return ( return (
<> <>
<TaskInfo task={task} /> {/* <TaskInfo task={task} /> */}
<Box <Box
display="flex" sx={{
flexDirection="column" display: 'flex',
alignItems="center" flexDirection: 'column',
paddingTop={'2.5rem'} alignItems: 'center',
paddingTop: '2.5rem'
}}
> >
<Box display="flex" gap={2} flexDirection="column" width="50rem"> <Box sx={{ display: 'flex', gap: 2, flexDirection: 'column', width: '50rem' }}>
<Box display="flex" gap={2}> <Box sx={{ display: 'flex', gap: 2 }}>
<span>Выберите таблицу</span> <span>Выберите таблицу</span>
<Chip> <Chip>
<IconWithContent icon={<TableIcon />}> <IconWithContent icon={<TableIcon />}>
@ -203,32 +126,14 @@ export default function TaskPage() {
</Chip> </Chip>
</Box> </Box>
<Box display="flex" gap={2} justifyContent="space-between"> <Box sx={{ display: 'flex', gap: 2, justifyContent: 'space-between' }}>
<SearchComponent <SearchComponent
placeholder="Поиск по названию таблицы" placeholder="Поиск по названию таблицы"
value={query} value={query}
onChange={setQuery} onChange={setQuery}
/> />
<Stack direction={'row'} spacing={'.5rem'} justifyContent={'end'}> <Stack sx={{ flexDirection: 'row', spacing: '.5rem', justifyContent: 'end' }}>
{tempProjects.length > 0 && (
<>
<PrimaryOutlinedButton
onClick={() => {
setModalProjectOpen(true);
}}
>
Добавить проект
</PrimaryOutlinedButton>
<ModalCreateProject
open={modalProjectOpen}
onClose={() => {
setModalProjectOpen(false);
}}
config={tempProjects[0].add_projects_data}
onCreate={handleCreateProject}
/>
</>
)}
<ExportWithTextButton onClick={handleExport} /> <ExportWithTextButton onClick={handleExport} />
<PrimaryOutlinedButton <PrimaryOutlinedButton
@ -246,55 +151,12 @@ export default function TaskPage() {
</Stack> </Stack>
</Box> </Box>
{/* <Box
overflow="auto"
display="flex"
flexDirection="column"
gap="1rem"
maxHeight="calc(100vh - 14rem)"
>
{filteredTables.length === 0 && (
<div className="text-sm text-gray-500">
{query
? 'Ничего не найдено'
: 'Нет таблиц. Создайте новую, чтобы начать.'}
</div>
)}
{filteredTables.map(
(table) => table.project_id === null && renderTableCard(table),
)}
{projects.map((project) => {
return (
<Stack
key={`project_group_${project.id}`}
spacing={'.75rem'}
mt={'1rem'}
>
<Typography
key={`project_${project.id}`}
sx={{
fontWeight: 400,
fontSize: '.88rem',
lineHeight: '143%',
color: '#1F1F1F',
marginBottom: '.25rem',
}}
>
{project.add_projects_data['Название проекта'] ||
'Без названия'}
</Typography>
{filteredTables
.filter((t) => t.project_id == project.id)
.map((table) => renderTableCard(table))}
</Stack>
);
})}
</Box> */}
<TablesList <TablesList
query={query} query={query}
projects={projects} projects={projects}
filteredTables={filteredTables} filteredTables={filteredTables}
basePath="/table" basePath="/table"
formInfo={task}
/> />
</Box> </Box>
</Box> </Box>

View File

@ -119,24 +119,17 @@ export default function TasksPage() {
try { try {
const skip = (currentPage - 1) * currentLimit; const skip = (currentPage - 1) * currentLimit;
const params = { const params = {
skip: skip, offset: skip,
limit: currentLimit, limit: currentLimit,
}; };
const data = await TasksApi.list(params); const res = await TasksApi.list(params);
const data = res.result;
setItems(data);
setTotalCount(res.count);
setItems((prev) => {
if (prev.length < currentLimit * currentPage) {
return [...prev, ...data];
}
return prev;
});
if (data.length !== currentLimit) {
setTotalCount((prev) => data.length + prev - currentLimit);
setisLoadAll(true);
} else {
setTotalCount(data.length + currentLimit * currentPage);
}
} catch (error) { } catch (error) {
toast.error('Ошибка загрузки задач'); toast.error('Ошибка загрузки задач');
} finally { } finally {
@ -183,11 +176,6 @@ export default function TasksPage() {
setExportList([]); setExportList([]);
}, [exportMode]); }, [exportMode]);
// Фильтруем задачи по query
// const filteredItems = items.filter((item) =>
// item.title?.toLowerCase().includes(query.toLowerCase()),
// );
const handleChangeToExportList = (taskId, checked) => { const handleChangeToExportList = (taskId, checked) => {
if (checked) { if (checked) {
setExportList((prev) => [...prev, taskId]); setExportList((prev) => [...prev, taskId]);
@ -219,7 +207,6 @@ export default function TasksPage() {
<PageContainer> <PageContainer>
<HeaderSwitch /> <HeaderSwitch />
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}> <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
<SwitchFormTask />
{exportMode && <span>Выделено задач: {exportList.length}</span>} {exportMode && <span>Выделено задач: {exportList.length}</span>}
</Box> </Box>
<Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 2 }}> <Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 2 }}>
@ -268,14 +255,7 @@ export default function TasksPage() {
<CardsSkeleton count={limit} /> <CardsSkeleton count={limit} />
) : ( ) : (
<> <>
{/* {filteredItems.length === 0 && ( {items.map((t) => (
<div className="text-sm text-gray-500">
{query
? 'Ничего не найдено'
: 'Нет задач. Создайте новую, чтобы начать.'}
</div>
)} */}
{items.slice((page - 1) * limit, page * limit).map((t) => (
<TaskCardComponent <TaskCardComponent
exportMode={exportMode} exportMode={exportMode}
isLoadingFile={exportMode ? isLoadingFile : false} isLoadingFile={exportMode ? isLoadingFile : false}
@ -380,12 +360,12 @@ export default function TasksPage() {
<div className="space-y-4"> <div className="space-y-4">
<FormControl fullWidth> <FormControl fullWidth>
<FormLabel required>Название задачи</FormLabel> <FormLabel required>Название задачи</FormLabel>
<TextField {/* <TextField
size="small" size="small"
placeholder="Укажите название задачи" placeholder="Укажите название задачи"
value={formData.title} value={formData.title}
onChange={(e) => handleFormChange('title', e.target.value)} onChange={(e) => handleFormChange('title', e.target.value)}
/> /> */}
</FormControl> </FormControl>
<FormControl fullWidth size="small"> <FormControl fullWidth size="small">
@ -394,7 +374,7 @@ export default function TasksPage() {
size="small" size="small"
options={forms} options={forms}
noOptionsText="Не найдено" noOptionsText="Не найдено"
getOptionLabel={(option) => option.title || option.name || ''} getOptionLabel={(option) => option.title || option.name || option.form_type_code || ''}
value={forms.find((f) => f.id === formData.formId) || null} value={forms.find((f) => f.id === formData.formId) || null}
onChange={(event, newValue) => { onChange={(event, newValue) => {
handleFormChange('formId', newValue ? newValue.id : ''); handleFormChange('formId', newValue ? newValue.id : '');
@ -428,7 +408,7 @@ export default function TasksPage() {
<FormControl fullWidth size="small"> <FormControl fullWidth size="small">
<FormLabel required>ССП/Региональный филиал</FormLabel> <FormLabel required>ССП/Региональный филиал</FormLabel>
<Autocomplete {/* <Autocomplete
multiple multiple
size="small" size="small"
options={sspList} options={sspList}
@ -460,7 +440,7 @@ export default function TasksPage() {
size: 'small', size: 'small',
}, },
}} }}
/> /> */}
</FormControl> </FormControl>
</div> </div>
</Modal> </Modal>