стили
This commit is contained in:
parent
188189534b
commit
b8a1427cf6
@ -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>
|
||||||
@ -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);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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 = () => {
|
||||||
|
|||||||
@ -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(() => {
|
||||||
|
|||||||
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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
@ -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",
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -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
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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",
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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]);
|
||||||
|
|
||||||
|
|||||||
@ -48,21 +48,40 @@ 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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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,50 +31,32 @@ 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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TablesList;
|
export default TablesList;
|
||||||
@ -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>
|
||||||
|
|||||||
@ -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": "Смета"
|
||||||
|
};
|
||||||
@ -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,22 +353,26 @@ 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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -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`
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user