Compare commits
No commits in common. "a23a2dffc61ab473da045bacd822c174bc2d9d8d" and "4e7cc9b3bd92a6b550fbf18254f3d2d15ccb3496" have entirely different histories.
a23a2dffc6
...
4e7cc9b3bd
@ -21,7 +21,7 @@ export const DictVspApi = {
|
||||
responseType: "blob",
|
||||
});
|
||||
},
|
||||
getDropdownVsp(params) {
|
||||
return api.get(`/dict/info/dropdown`, { params }).then((r) => r.data);
|
||||
},
|
||||
getDropdownVsp(params){
|
||||
return api.get(`/dict/info/dropdown`, params).then((r) => r.data);
|
||||
}
|
||||
};
|
||||
|
||||
@ -21,14 +21,19 @@ export const ProjectsApi = {
|
||||
return api.delete(`/projects/${id}`).then((r) => r.data);
|
||||
},
|
||||
|
||||
getTableData: (id, sheetName, year) => {
|
||||
getTasks: (projectId) => {
|
||||
return api.get(`/projects/${projectId}/tasks`).then((r) => r.data);
|
||||
},
|
||||
|
||||
addTask: (projectId, taskId) => {
|
||||
return api
|
||||
.get(`/projects/${id}/report/${year}/${sheetName}`)
|
||||
.post(`/projects/${projectId}/tasks/${taskId}`)
|
||||
.then((r) => r.data);
|
||||
},
|
||||
export: (id, year, sheetName) => {
|
||||
return api.get(`/export/project/${id}/report/${year}/${sheetName}`, {
|
||||
responseType: "blob",
|
||||
});
|
||||
|
||||
removeTask: (projectId, taskId) => {
|
||||
return api
|
||||
.delete(`/projects/${projectId}/tasks/${taskId}`)
|
||||
.then((r) => r.data);
|
||||
},
|
||||
};
|
||||
|
||||
@ -52,7 +52,7 @@ export const AppRoutes = () => {
|
||||
<Route path="/new-table" element={<NewTablePage />} />
|
||||
<Route path="/tables-new" element={<TablesTest />} />
|
||||
<Route path="/tables/:form/:sheetName" element={<NewFormTablePage />} />
|
||||
<Route path="/table/form/:formId/form-type/:formType/:sheetName/:direction/:year" element={<NewFormTablePage />} />
|
||||
<Route path="/table/form/:formId/form-type/:formType/:sheetName/:direction" element={<NewFormTablePage />} />
|
||||
</Route>
|
||||
</Route>
|
||||
</Routes>
|
||||
|
||||
@ -31,13 +31,12 @@ const LockBadge = styled.div`
|
||||
`;
|
||||
|
||||
// Функция для подсветки текста
|
||||
const highlightText = (text, searchQueries) => {
|
||||
if (!text) return text;
|
||||
const cleanSearchQueries = searchQueries.filter(q => (q !== undefined && q !== ''));
|
||||
if (cleanSearchQueries.length == 0) return text;
|
||||
const highlightText = (text, searchQuery) => {
|
||||
if (!searchQuery || !text) return text;
|
||||
|
||||
const escapedQuery = searchQuery.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
const regex = new RegExp(`(${escapedQuery})`, 'gi');
|
||||
|
||||
const escapedQueries = cleanSearchQueries.map(query => query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
||||
const regex = new RegExp(`(${ escapedQueries.join('|')})`, 'gi');
|
||||
const parts = text.split(regex);
|
||||
|
||||
return parts.map((part, index) =>
|
||||
@ -90,7 +89,7 @@ const formatNumber = (value, asInteger = false) => {
|
||||
});
|
||||
};
|
||||
|
||||
const Cell = React.memo(({ cell, row, column, onClick, globalFilter, columnFilter, backgroundColor, color, isEditable }) => {
|
||||
const Cell = React.memo(({ cell, row, column, onClick, globalFilter, backgroundColor, color, isEditable }) => {
|
||||
const { lockedCells } = useRealtime();
|
||||
const cellKey = `${row.id}_${column.id}`;
|
||||
|
||||
@ -106,10 +105,9 @@ const Cell = React.memo(({ cell, row, column, onClick, globalFilter, columnFilte
|
||||
}
|
||||
|
||||
const highlightedContent = useMemo(() => {
|
||||
return highlightText(textValue, [globalFilter, columnFilter]);
|
||||
return highlightText(textValue, globalFilter);
|
||||
}, [textValue, globalFilter]);
|
||||
|
||||
|
||||
// Базовые стили для заблокированной ячейки
|
||||
const lockedStyles = isLocked ? {
|
||||
border: '2px solid #e0e0e0',
|
||||
|
||||
@ -29,8 +29,8 @@ import { additionVspRowTable } from './constants/addingRowConfig';
|
||||
import { SelectVspModal } from './Modals/SelectVspModal';
|
||||
import { getRowId } from './utils/rowUtils';
|
||||
|
||||
const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
||||
const { data, setData, isLoading: isTableLoading, editingCells: dataEditingCells } = useRealtimeData(formId, sheetName, direction, formType, year);
|
||||
const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
|
||||
const { data, setData, isLoading: isTableLoading, editingCells: dataEditingCells } = useRealtimeData(formId, sheetName, direction);
|
||||
const [globalFilter, setGlobalFilter] = useState('');
|
||||
const [showColumnFilters, setShowColumnFilters] = useState(false);
|
||||
const [selectedColumnId, setSelectedColumnId] = useState();
|
||||
@ -229,12 +229,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
||||
minHeight: '1px',
|
||||
maxHeight: '1px',
|
||||
visibility: 'hidden',
|
||||
'& svg': {
|
||||
height: '1px',
|
||||
minHeight: '1px',
|
||||
maxHeight: '1px',
|
||||
visibility: 'hidden',
|
||||
}
|
||||
},
|
||||
},
|
||||
muiTablePaperProps: getTablePaperStyles(),
|
||||
@ -366,8 +360,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
||||
formId={formId}
|
||||
sheetName={sheetName}
|
||||
direction={direction}
|
||||
year={year}
|
||||
isProject={formType == 'PROJECT'}
|
||||
/>
|
||||
|
||||
<div style={tableWrapperStyle}>
|
||||
@ -428,6 +420,8 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
||||
onClose={() => setIsOpenModalSelectVsp(false)}
|
||||
formId={formId}
|
||||
onSelect={handleAddVspRow}
|
||||
// vspOptions={}
|
||||
// selectedVSP={}
|
||||
title="Выбор ВСП"
|
||||
/>
|
||||
</>
|
||||
|
||||
@ -18,7 +18,7 @@ import CollapsibleTree from '../../common/CollapsibleTree';
|
||||
import ZoomSlider from './ZoomSlider';
|
||||
import SearchComponent from '../../common/SearchComponent';
|
||||
import { ExportDefaultButton } from '../../common/Buttons/ButtonsActions';
|
||||
import { exportSheet, exportSheetProject } from '../../../utils/exportFile';
|
||||
import { exportSheet } from '../../../utils/exportForm';
|
||||
|
||||
const SettingPanel = ({
|
||||
selectedColumnId,
|
||||
@ -39,8 +39,6 @@ const SettingPanel = ({
|
||||
formId,
|
||||
sheetName,
|
||||
direction,
|
||||
year,
|
||||
isProject,
|
||||
}) => {
|
||||
const [isPinned, setIsPinned] = useState(false);
|
||||
const [isExporting, setIsExporting] = useState(false);
|
||||
@ -78,16 +76,7 @@ const SettingPanel = ({
|
||||
const handleClickDeleteFormula = () => { };
|
||||
|
||||
const handleExport = async () => {
|
||||
if (isExporting) return;
|
||||
if (isProject) {
|
||||
if (!formId || !sheetName || !year) return;
|
||||
setIsExporting(true);
|
||||
await exportSheetProject(formId, sheetName, year);
|
||||
setIsExporting(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!formId || !sheetName) return;
|
||||
if (!formId || !sheetName || isExporting) return;
|
||||
setIsExporting(true);
|
||||
await exportSheet(formId, sheetName, direction);
|
||||
setIsExporting(false);
|
||||
@ -126,27 +115,40 @@ const SettingPanel = ({
|
||||
</Tooltip>
|
||||
</GroupByObject>
|
||||
|
||||
<Divider orientation="vertical" flexItem />
|
||||
|
||||
{!isProject ??
|
||||
<>
|
||||
<Divider orientation="vertical" flexItem />
|
||||
<GroupByObject title="Строки">
|
||||
<Tooltip title="Добавить строку">
|
||||
<IconButton onClick={onAddRow} variant="outlined">
|
||||
<Plus />
|
||||
<AddLine />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
<GroupByObject title="Строки">
|
||||
<Tooltip title="Добавить строку">
|
||||
<IconButton onClick={onAddRow} variant="outlined">
|
||||
<Plus />
|
||||
<AddLine />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Удалить строку">
|
||||
<IconButton onClick={onDeleteRow} variant="outlined">
|
||||
<Minus />
|
||||
<RemoveLine />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
</GroupByObject>
|
||||
</>
|
||||
}
|
||||
<Tooltip title="Удалить строку">
|
||||
<IconButton onClick={onDeleteRow} variant="outlined">
|
||||
<Minus />
|
||||
<RemoveLine />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
</GroupByObject>
|
||||
|
||||
{/* <Divider orientation="vertical" flexItem />
|
||||
|
||||
<GroupByObject title="Формулы">
|
||||
<Tooltip title="Добавить формулу">
|
||||
<IconButton onClick={handleClickAddFormula} variant="outlined">
|
||||
<FormulaSettingPanel />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Удалить формулу">
|
||||
<IconButton onClick={handleClickDeleteFormula} variant="outlined">
|
||||
<Minus />
|
||||
<FormulaSettingPanel />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
</GroupByObject> */}
|
||||
<Divider orientation="vertical" flexItem />
|
||||
<GroupByObject title="Столбцы">
|
||||
{columns ? (
|
||||
|
||||
@ -313,10 +313,10 @@ const FilterCell = ({ column, table }) => {
|
||||
onChange={(e) => handleFilterChange(e.target.value)}
|
||||
style={{
|
||||
width: '100%',
|
||||
padding: '0.25rem 0.375rem',
|
||||
fontSize: '0.6875rem',
|
||||
padding: '4px 6px',
|
||||
fontSize: '11px',
|
||||
border: '1px solid #ddd',
|
||||
borderRadius: '0.25rem',
|
||||
borderRadius: '4px',
|
||||
backgroundColor: 'white',
|
||||
}}
|
||||
>
|
||||
@ -330,30 +330,23 @@ const FilterCell = ({ column, table }) => {
|
||||
);
|
||||
|
||||
case 'range': {
|
||||
// Для диапазона можно реализовать два поля
|
||||
const [min, max] = column.getFilterValue() || ['', ''];
|
||||
return (
|
||||
<div style={{ display: 'flex', gap: '0.25rem' }}> {/* 4px */}
|
||||
<div style={{ display: 'flex', gap: '4px' }}>
|
||||
<input
|
||||
type="number"
|
||||
placeholder="От"
|
||||
value={min}
|
||||
onChange={(e) => column.setFilterValue([e.target.value, max])}
|
||||
style={{
|
||||
width: '50%',
|
||||
padding: '0.25rem',
|
||||
fontSize: '0.6875rem'
|
||||
}}
|
||||
style={{ width: '50%', padding: '4px', fontSize: '11px' }}
|
||||
/>
|
||||
<input
|
||||
type="number"
|
||||
placeholder="До"
|
||||
value={max}
|
||||
onChange={(e) => column.setFilterValue([min, e.target.value])}
|
||||
style={{
|
||||
width: '50%',
|
||||
padding: '0.25rem',
|
||||
fontSize: '0.6875rem'
|
||||
}}
|
||||
style={{ width: '50%', padding: '4px', fontSize: '11px' }}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
@ -368,10 +361,10 @@ const FilterCell = ({ column, table }) => {
|
||||
placeholder="Поиск..."
|
||||
style={{
|
||||
width: '100%',
|
||||
padding: '0.25rem 0.375rem',
|
||||
fontSize: '0.6875rem',
|
||||
padding: '4px 6px',
|
||||
fontSize: '11px',
|
||||
border: '1px solid #ddd',
|
||||
borderRadius: '0.25rem',
|
||||
borderRadius: '4px',
|
||||
boxSizing: 'border-box',
|
||||
}}
|
||||
/>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
555
web/src/components/RealtimeTable/constants/FORM_3/LP.js
Normal file
555
web/src/components/RealtimeTable/constants/FORM_3/LP.js
Normal file
@ -0,0 +1,555 @@
|
||||
|
||||
import {
|
||||
greenColumn,
|
||||
whiteColumn,
|
||||
orangeColumn,
|
||||
yellowColumn,
|
||||
redColumn,
|
||||
blueColumn,
|
||||
} from '../columnColors';
|
||||
export const config = {
|
||||
"config":{
|
||||
"colors":{
|
||||
"kod_razdela_kod_razdela":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"kod_razdela_kod_razdela"
|
||||
},
|
||||
"id_stati_id_stati":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"id_stati_id_stati"
|
||||
},
|
||||
"id_gruppy_nomenklatury_id_gruppy_nomenklatury":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury"
|
||||
},
|
||||
"naimenovanie_naimenovanie":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"naimenovanie_naimenovanie"
|
||||
},
|
||||
"korrektirovka_limita_po_statyam_smety":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"korrektirovka_limita_po_statyam_smety"
|
||||
},
|
||||
"field_uvelichenie_smety":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_uvelichenie_smety"
|
||||
},
|
||||
"field_za_yanvar":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_yanvar"
|
||||
},
|
||||
"field_za_fevral":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_fevral"
|
||||
},
|
||||
"field_itogo_i_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_i_kvartal"
|
||||
},
|
||||
"field_za_aprel":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_aprel"
|
||||
},
|
||||
"field_za_may":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_may"
|
||||
},
|
||||
"field_itogo_ii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_ii_kvartal"
|
||||
},
|
||||
"field_za_iyul":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_iyul"
|
||||
},
|
||||
"field_za_avgust":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_avgust"
|
||||
},
|
||||
"field_itogo_iii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_iii_kvartal"
|
||||
},
|
||||
"field_za_oktyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_oktyabr"
|
||||
},
|
||||
"field_za_noyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_noyabr"
|
||||
},
|
||||
"field_spod":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_spod"
|
||||
},
|
||||
"field_itogo_iv_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_iv_kvartal"
|
||||
},
|
||||
"itogo_itogo":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"itogo_itogo"
|
||||
},
|
||||
"fakt_zamart":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zamart"
|
||||
},
|
||||
"fakt_zaiyun":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zaiyun"
|
||||
},
|
||||
"fakt_zasentyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zasentyabr"
|
||||
},
|
||||
"fakt_zadekabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zadekabr"
|
||||
},
|
||||
"ekonomiya_pereraskhod_ekonomiya_pereraskhod":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod"
|
||||
},
|
||||
"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal"
|
||||
},
|
||||
"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal"
|
||||
},
|
||||
"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal"
|
||||
}
|
||||
},
|
||||
"columns":[
|
||||
{
|
||||
"header":"Код раздела",
|
||||
"accessorKey":"kod_razdela",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Код раздела",
|
||||
"accessorKey":"kod_razdela_kod_razdela",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"ID статьи",
|
||||
"accessorKey":"id_stati",
|
||||
"columns":[
|
||||
{
|
||||
"header":"ID статьи",
|
||||
"accessorKey":"id_stati_id_stati",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"ID группы номенклатуры",
|
||||
"accessorKey":"id_gruppy_nomenklatury",
|
||||
"columns":[
|
||||
{
|
||||
"header":"ID группы номенклатуры",
|
||||
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Наименование",
|
||||
"accessorKey":"naimenovanie",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Наименование",
|
||||
"accessorKey":"naimenovanie_naimenovanie",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Корректировка лимита",
|
||||
"accessorKey":"korrektirovka_limita",
|
||||
"columns":[
|
||||
{
|
||||
"header":"по статьям сметы *",
|
||||
"accessorKey":"korrektirovka_limita_po_statyam_smety",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"",
|
||||
"accessorKey":"field",
|
||||
"columns":[
|
||||
{
|
||||
"header":"увеличение сметы **",
|
||||
"accessorKey":"field_uvelichenie_smety",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ЯНВАРЬ",
|
||||
"accessorKey":"field_za_yanvar",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ФЕВРАЛЬ",
|
||||
"accessorKey":"field_za_fevral",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого I квартал",
|
||||
"accessorKey":"field_itogo_i_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за АПРЕЛЬ",
|
||||
"accessorKey":"field_za_aprel",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за МАЙ",
|
||||
"accessorKey":"field_za_may",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого II квартал",
|
||||
"accessorKey":"field_itogo_ii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ИЮЛЬ",
|
||||
"accessorKey":"field_za_iyul",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за АВГУСТ",
|
||||
"accessorKey":"field_za_avgust",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого III квартал",
|
||||
"accessorKey":"field_itogo_iii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ОКТЯБРЬ",
|
||||
"accessorKey":"field_za_oktyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за НОЯБРЬ",
|
||||
"accessorKey":"field_za_noyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"СПОД",
|
||||
"accessorKey":"field_spod",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого IV квартал",
|
||||
"accessorKey":"field_itogo_iv_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого",
|
||||
"accessorKey":"itogo",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Итого",
|
||||
"accessorKey":"itogo_itogo",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Факт",
|
||||
"accessorKey":"fakt",
|
||||
"columns":[
|
||||
{
|
||||
"header":"заМАРТ",
|
||||
"accessorKey":"fakt_zamart",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заИЮНЬ",
|
||||
"accessorKey":"fakt_zaiyun",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заСЕНТЯБРЬ",
|
||||
"accessorKey":"fakt_zasentyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заДЕКАБРЬ",
|
||||
"accessorKey":"fakt_zadekabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"экономия (+) перерасход (-)",
|
||||
"accessorKey":"ekonomiya_pereraskhod",
|
||||
"columns":[
|
||||
{
|
||||
"header":"экономия (+) перерасход (-)",
|
||||
"accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на II квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на II квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на III квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на III квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на IV квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на IV квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
577
web/src/components/RealtimeTable/constants/FORM_3/PROJECT.js
Normal file
577
web/src/components/RealtimeTable/constants/FORM_3/PROJECT.js
Normal file
@ -0,0 +1,577 @@
|
||||
|
||||
import {
|
||||
greenColumn,
|
||||
whiteColumn,
|
||||
orangeColumn,
|
||||
yellowColumn,
|
||||
redColumn,
|
||||
blueColumn,
|
||||
} from '../columnColors';
|
||||
export const config = {
|
||||
"config":{
|
||||
"colors":{
|
||||
"kod_razdela_kod_razdela":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"kod_razdela_kod_razdela"
|
||||
},
|
||||
"id_stati_id_stati":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"id_stati_id_stati"
|
||||
},
|
||||
"id_gruppy_nomenklatury_id_gruppy_nomenklatury":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury"
|
||||
},
|
||||
"naimenovanie_naimenovanie":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"naimenovanie_naimenovanie"
|
||||
},
|
||||
"korrektirovka_plana_po_statyam_smety":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"korrektirovka_plana_po_statyam_smety"
|
||||
},
|
||||
"field_uvelichenie_smety":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_uvelichenie_smety"
|
||||
},
|
||||
"field_za_yanvar":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_yanvar"
|
||||
},
|
||||
"field_za_fevral":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_fevral"
|
||||
},
|
||||
"field_itogo_i_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_i_kvartal"
|
||||
},
|
||||
"field_za_aprel":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_aprel"
|
||||
},
|
||||
"field_za_may":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_may"
|
||||
},
|
||||
"field_itogo_ii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_ii_kvartal"
|
||||
},
|
||||
"field_za_iyul":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_iyul"
|
||||
},
|
||||
"field_za_avgust":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_avgust"
|
||||
},
|
||||
"field_itogo_iii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_iii_kvartal"
|
||||
},
|
||||
"field_za_oktyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_oktyabr"
|
||||
},
|
||||
"field_za_noyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_noyabr"
|
||||
},
|
||||
"field_spod":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_spod"
|
||||
},
|
||||
"field_itogo_iv_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_iv_kvartal"
|
||||
},
|
||||
"itogo_korrektirovka_itogo_korrektirovka":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"itogo_korrektirovka_itogo_korrektirovka"
|
||||
},
|
||||
"fakt_zamart":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zamart"
|
||||
},
|
||||
"fakt_zaiyun":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zaiyun"
|
||||
},
|
||||
"fakt_zasentyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zasentyabr"
|
||||
},
|
||||
"fakt_zadekabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zadekabr"
|
||||
},
|
||||
"ekonomiya_pereraskhod_ekonomiya_pereraskhod":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod"
|
||||
},
|
||||
"smeta_raskhodov_po_razvitiyu_na_ii_kvartal_smeta_raskhodov_po_razvitiyu_na_ii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_ii_kvartal_smeta_raskhodov_po_razvitiyu_na_ii_kvartal"
|
||||
},
|
||||
"itogo_skorrek_smeta_itogo_skorrek_smeta":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"itogo_skorrek_smeta_itogo_skorrek_smeta"
|
||||
},
|
||||
"smeta_raskhodov_po_razvitiyu_na_iii_kvartal_smeta_raskhodov_po_razvitiyu_na_iii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_iii_kvartal_smeta_raskhodov_po_razvitiyu_na_iii_kvartal"
|
||||
},
|
||||
"smeta_raskhodov_po_razvitiyu_na_iv_kvartal_smeta_raskhodov_po_razvitiyu_na_iv_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_iv_kvartal_smeta_raskhodov_po_razvitiyu_na_iv_kvartal"
|
||||
}
|
||||
},
|
||||
"columns":[
|
||||
{
|
||||
"header":"Код раздела",
|
||||
"accessorKey":"kod_razdela",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Код раздела",
|
||||
"accessorKey":"kod_razdela_kod_razdela",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"ID статьи",
|
||||
"accessorKey":"id_stati",
|
||||
"columns":[
|
||||
{
|
||||
"header":"ID статьи",
|
||||
"accessorKey":"id_stati_id_stati",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"ID группы номенклатуры",
|
||||
"accessorKey":"id_gruppy_nomenklatury",
|
||||
"columns":[
|
||||
{
|
||||
"header":"ID группы номенклатуры",
|
||||
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Наименование",
|
||||
"accessorKey":"naimenovanie",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Наименование",
|
||||
"accessorKey":"naimenovanie_naimenovanie",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Корректировка плана",
|
||||
"accessorKey":"korrektirovka_plana",
|
||||
"columns":[
|
||||
{
|
||||
"header":"по статьям сметы *",
|
||||
"accessorKey":"korrektirovka_plana_po_statyam_smety",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"",
|
||||
"accessorKey":"field",
|
||||
"columns":[
|
||||
{
|
||||
"header":"увеличение сметы **",
|
||||
"accessorKey":"field_uvelichenie_smety",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ЯНВАРЬ",
|
||||
"accessorKey":"field_za_yanvar",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ФЕВРАЛЬ",
|
||||
"accessorKey":"field_za_fevral",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого I квартал",
|
||||
"accessorKey":"field_itogo_i_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за АПРЕЛЬ",
|
||||
"accessorKey":"field_za_aprel",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за МАЙ",
|
||||
"accessorKey":"field_za_may",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого II квартал",
|
||||
"accessorKey":"field_itogo_ii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ИЮЛЬ",
|
||||
"accessorKey":"field_za_iyul",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за АВГУСТ",
|
||||
"accessorKey":"field_za_avgust",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого III квартал",
|
||||
"accessorKey":"field_itogo_iii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ОКТЯБРЬ",
|
||||
"accessorKey":"field_za_oktyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за НОЯБРЬ",
|
||||
"accessorKey":"field_za_noyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"СПОД",
|
||||
"accessorKey":"field_spod",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого IV квартал",
|
||||
"accessorKey":"field_itogo_iv_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого корректировка",
|
||||
"accessorKey":"itogo_korrektirovka",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Итого корректировка",
|
||||
"accessorKey":"itogo_korrektirovka_itogo_korrektirovka",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Факт",
|
||||
"accessorKey":"fakt",
|
||||
"columns":[
|
||||
{
|
||||
"header":"заМАРТ",
|
||||
"accessorKey":"fakt_zamart",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заИЮНЬ",
|
||||
"accessorKey":"fakt_zaiyun",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заСЕНТЯБРЬ",
|
||||
"accessorKey":"fakt_zasentyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заДЕКАБРЬ",
|
||||
"accessorKey":"fakt_zadekabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"экономия (+) перерасход (-)",
|
||||
"accessorKey":"ekonomiya_pereraskhod",
|
||||
"columns":[
|
||||
{
|
||||
"header":"экономия (+) перерасход (-)",
|
||||
"accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Смета расходов по развитию на II квартал",
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_ii_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Смета расходов по развитию на II квартал",
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_ii_kvartal_smeta_raskhodov_po_razvitiyu_na_ii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого скоррек. смета",
|
||||
"accessorKey":"itogo_skorrek_smeta",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Итого скоррек. смета",
|
||||
"accessorKey":"itogo_skorrek_smeta_itogo_skorrek_smeta",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Смета расходов по развитию на III квартал",
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_iii_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Смета расходов по развитию на III квартал",
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_iii_kvartal_smeta_raskhodov_po_razvitiyu_na_iii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Смета расходов по развитию на IV квартал",
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_iv_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Смета расходов по развитию на IV квартал",
|
||||
"accessorKey":"smeta_raskhodov_po_razvitiyu_na_iv_kvartal_smeta_raskhodov_po_razvitiyu_na_iv_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
555
web/src/components/RealtimeTable/constants/FORM_3/TR.js
Normal file
555
web/src/components/RealtimeTable/constants/FORM_3/TR.js
Normal file
@ -0,0 +1,555 @@
|
||||
|
||||
import {
|
||||
greenColumn,
|
||||
whiteColumn,
|
||||
orangeColumn,
|
||||
yellowColumn,
|
||||
redColumn,
|
||||
blueColumn,
|
||||
} from '../columnColors';
|
||||
export const config = {
|
||||
"config":{
|
||||
"colors":{
|
||||
"kod_razdela_kod_razdela":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"kod_razdela_kod_razdela"
|
||||
},
|
||||
"id_stati_id_stati":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"id_stati_id_stati"
|
||||
},
|
||||
"id_gruppy_nomenklatury_id_gruppy_nomenklatury":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury"
|
||||
},
|
||||
"naimenovanie_naimenovanie":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"naimenovanie_naimenovanie"
|
||||
},
|
||||
"korrektirovka_limita_po_statyam_smety":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"korrektirovka_limita_po_statyam_smety"
|
||||
},
|
||||
"field_uvelichenie_smety":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_uvelichenie_smety"
|
||||
},
|
||||
"field_za_yanvar":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_yanvar"
|
||||
},
|
||||
"field_za_fevral":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_fevral"
|
||||
},
|
||||
"field_itogo_i_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_i_kvartal"
|
||||
},
|
||||
"field_za_aprel":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_aprel"
|
||||
},
|
||||
"field_za_may":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_may"
|
||||
},
|
||||
"field_itogo_ii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_ii_kvartal"
|
||||
},
|
||||
"field_za_iyul":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_iyul"
|
||||
},
|
||||
"field_za_avgust":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_avgust"
|
||||
},
|
||||
"field_itogo_iii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_iii_kvartal"
|
||||
},
|
||||
"field_za_oktyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_oktyabr"
|
||||
},
|
||||
"field_za_noyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_za_noyabr"
|
||||
},
|
||||
"field_spod":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_spod"
|
||||
},
|
||||
"field_itogo_iv_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"field_itogo_iv_kvartal"
|
||||
},
|
||||
"itogo_itogo":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"itogo_itogo"
|
||||
},
|
||||
"fakt_zamart":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zamart"
|
||||
},
|
||||
"fakt_zaiyun":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zaiyun"
|
||||
},
|
||||
"fakt_zasentyabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zasentyabr"
|
||||
},
|
||||
"fakt_zadekabr":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"fakt_zadekabr"
|
||||
},
|
||||
"ekonomiya_pereraskhod_ekonomiya_pereraskhod":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod"
|
||||
},
|
||||
"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal"
|
||||
},
|
||||
"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal"
|
||||
},
|
||||
"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal":{
|
||||
"color_type":whiteColumn,
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal"
|
||||
}
|
||||
},
|
||||
"columns":[
|
||||
{
|
||||
"header":"Код раздела",
|
||||
"accessorKey":"kod_razdela",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Код раздела",
|
||||
"accessorKey":"kod_razdela_kod_razdela",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"ID статьи",
|
||||
"accessorKey":"id_stati",
|
||||
"columns":[
|
||||
{
|
||||
"header":"ID статьи",
|
||||
"accessorKey":"id_stati_id_stati",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"ID группы номенклатуры",
|
||||
"accessorKey":"id_gruppy_nomenklatury",
|
||||
"columns":[
|
||||
{
|
||||
"header":"ID группы номенклатуры",
|
||||
"accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Наименование",
|
||||
"accessorKey":"naimenovanie",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Наименование",
|
||||
"accessorKey":"naimenovanie_naimenovanie",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Корректировка лимита",
|
||||
"accessorKey":"korrektirovka_limita",
|
||||
"columns":[
|
||||
{
|
||||
"header":"по статьям сметы *",
|
||||
"accessorKey":"korrektirovka_limita_po_statyam_smety",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"",
|
||||
"accessorKey":"field",
|
||||
"columns":[
|
||||
{
|
||||
"header":"увеличение сметы **",
|
||||
"accessorKey":"field_uvelichenie_smety",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ЯНВАРЬ",
|
||||
"accessorKey":"field_za_yanvar",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ФЕВРАЛЬ",
|
||||
"accessorKey":"field_za_fevral",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого I квартал",
|
||||
"accessorKey":"field_itogo_i_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за АПРЕЛЬ",
|
||||
"accessorKey":"field_za_aprel",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за МАЙ",
|
||||
"accessorKey":"field_za_may",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого II квартал",
|
||||
"accessorKey":"field_itogo_ii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ИЮЛЬ",
|
||||
"accessorKey":"field_za_iyul",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за АВГУСТ",
|
||||
"accessorKey":"field_za_avgust",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого III квартал",
|
||||
"accessorKey":"field_itogo_iii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за ОКТЯБРЬ",
|
||||
"accessorKey":"field_za_oktyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"за НОЯБРЬ",
|
||||
"accessorKey":"field_za_noyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"СПОД",
|
||||
"accessorKey":"field_spod",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого IV квартал",
|
||||
"accessorKey":"field_itogo_iv_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Итого",
|
||||
"accessorKey":"itogo",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Итого",
|
||||
"accessorKey":"itogo_itogo",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Факт",
|
||||
"accessorKey":"fakt",
|
||||
"columns":[
|
||||
{
|
||||
"header":"заМАРТ",
|
||||
"accessorKey":"fakt_zamart",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заИЮНЬ",
|
||||
"accessorKey":"fakt_zaiyun",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заСЕНТЯБРЬ",
|
||||
"accessorKey":"fakt_zasentyabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"заДЕКАБРЬ",
|
||||
"accessorKey":"fakt_zadekabr",
|
||||
"size":150,
|
||||
"filterFn":"contains",
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"экономия (+) перерасход (-)",
|
||||
"accessorKey":"ekonomiya_pereraskhod",
|
||||
"columns":[
|
||||
{
|
||||
"header":"экономия (+) перерасход (-)",
|
||||
"accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на II квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на II квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на III квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на III квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на IV квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal",
|
||||
"columns":[
|
||||
{
|
||||
"header":"Лимит затрат / остаток лимита затрат на IV квартал",
|
||||
"accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal",
|
||||
"size":150,
|
||||
"filterFn":"contains"
|
||||
}
|
||||
],
|
||||
"muiTableHeadCellProps":{
|
||||
"sx":{
|
||||
"backgroundColor":"#C2D69B",
|
||||
"color":"#000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -25,29 +25,17 @@ export const RealtimeProvider = ({
|
||||
formId,
|
||||
sheetName,
|
||||
direction,
|
||||
year,
|
||||
userId,
|
||||
isProject = false,
|
||||
}) => {
|
||||
// Формируем URL (кастомные секреты на фронте пока недоступны, делаем через REACT_APP_ROOT_PATH)
|
||||
const wsUrl =
|
||||
`${(
|
||||
process.env.REACT_APP_API_URL ||
|
||||
process.env.REACT_APP_API_URL ||
|
||||
process.env.REACT_APP_ROOT_PATH ||
|
||||
"ws://localhost:8000"
|
||||
).replace(/^http/, "ws")}` +
|
||||
(!isProject
|
||||
? `/api/v1/ws/form/${formId}/sheet/${sheetName}${direction ? `?direction=${direction}` : ""}`
|
||||
: `/api/v1/ws/projects/${formId}/report/${year}/${sheetName}`);
|
||||
|
||||
const wsUrl = `${(process.env.REACT_APP_API_URL || process.env.REACT_APP_API_URL || process.env.REACT_APP_ROOT_PATH || "ws://localhost:8000").replace(/^http/, "ws")}/api/v1/ws/form/${formId}/sheet/${sheetName}${direction ? `?direction=${direction}` : ""}`;
|
||||
//для ячеек которые редактируются другими пользователями
|
||||
const [lockedCells, setLockedCells] = useState([]);
|
||||
const handleMessage = useCallback((data) => {
|
||||
// Обработка ошибок
|
||||
if (data.error) {
|
||||
console.log(data.error.message);
|
||||
toast.error("Server error:" + data.error.message || "");
|
||||
console.log(data.error.message)
|
||||
toast.error("Server error:" + data.error.message || '');
|
||||
onErrorRef.current?.(data.error);
|
||||
return;
|
||||
}
|
||||
@ -157,19 +145,6 @@ export const RealtimeProvider = ({
|
||||
}
|
||||
}, [isConnected]);
|
||||
|
||||
const addCommonField = (message) => {
|
||||
if (isProject) {
|
||||
message.report_type = sheetName;
|
||||
message.project_id = formId;
|
||||
message.year = year;
|
||||
} else {
|
||||
message.sheet = sheetName;
|
||||
message.form_id = formId;
|
||||
message.direction = direction;
|
||||
}
|
||||
return message;
|
||||
};
|
||||
|
||||
// Функция для начала редактирования ячейки
|
||||
const startEditing = useCallback(
|
||||
async (row, column) => {
|
||||
@ -274,9 +249,10 @@ export const RealtimeProvider = ({
|
||||
const message = {
|
||||
event: "row_added",
|
||||
data: rowData,
|
||||
sheet: sheetName,
|
||||
form_id: formId,
|
||||
direction: direction,
|
||||
};
|
||||
addCommonField(message);
|
||||
|
||||
return sendMessage(message);
|
||||
},
|
||||
[isConnected, sendMessage, sheetName, formId, direction],
|
||||
@ -292,8 +268,10 @@ export const RealtimeProvider = ({
|
||||
const message = {
|
||||
event: "row_deleted",
|
||||
data: { row_id: rowId },
|
||||
sheet: sheetName,
|
||||
form_id: formId,
|
||||
direction: direction,
|
||||
};
|
||||
addCommonField(message);
|
||||
|
||||
return sendMessage(message);
|
||||
},
|
||||
|
||||
@ -4,9 +4,8 @@ import { useRealtime } from "../contexts/RealtimeContext";
|
||||
import { deleteRow, insertCell, updateCells } from "../utils/cellUtils";
|
||||
import { toast } from "react-toastify";
|
||||
import { isVspNewRow, isVspRow } from "../utils/rowUtils";
|
||||
import { ProjectsApi } from "../../../api/projects";
|
||||
|
||||
const useRealtimeData = (formId, sheetName, direction, formType, year) => {
|
||||
const useRealtimeData = (formId, sheetName, direction) => {
|
||||
const [data, setData] = useState([]);
|
||||
const [isConnected, setIsConnected] = useState(false);
|
||||
const [error, setError] = useState(null);
|
||||
@ -78,10 +77,7 @@ const useRealtimeData = (formId, sheetName, direction, formType, year) => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
let res;
|
||||
|
||||
if(formType == 'PROJECT'){
|
||||
res = await ProjectsApi.getTableData(formId, sheetName, year)
|
||||
} else if (direction !== null) {
|
||||
if (direction !== null) {
|
||||
res = await FormsSheetApi.get(formId, sheetName, {
|
||||
params: { direction: direction },
|
||||
});
|
||||
|
||||
@ -107,6 +107,20 @@ export const useWebSocket = (url, onMessage) => {
|
||||
return false;
|
||||
}, []);
|
||||
|
||||
const login = useCallback(
|
||||
(token) => {
|
||||
if (!token) {
|
||||
console.warn("No token provided for login");
|
||||
return false;
|
||||
}
|
||||
return sendMessage({
|
||||
event: "user_login",
|
||||
data: { token },
|
||||
});
|
||||
},
|
||||
[sendMessage],
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
connect();
|
||||
return () => disconnect();
|
||||
@ -116,6 +130,7 @@ export const useWebSocket = (url, onMessage) => {
|
||||
isConnected: isConnectedRef,
|
||||
error,
|
||||
sendMessage,
|
||||
login,
|
||||
disconnect,
|
||||
};
|
||||
};
|
||||
|
||||
@ -112,7 +112,6 @@ export const getTableColumns = ({
|
||||
globalFilter={
|
||||
table.getState().globalFilter
|
||||
}
|
||||
columnFilter={table.getState().columnFilters?.find(f => f.id === column.id)?.value}
|
||||
isEditable={row.original?.row_type === 'INPUT' || false}
|
||||
backgroundColor={columnColors[column.id]?.color_type?.[row.original?.row_type || row.row_type]}
|
||||
color={columnColors[column.id]?.color_type?.['COLOR']}
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
// components/NavigationToggle.jsx
|
||||
import React from 'react';
|
||||
import { Box, Typography } from '@mui/material';
|
||||
import { PrimaryOutlinedButton } from './Buttons/Buttons'; // Ваш компонент кнопки
|
||||
|
||||
const NavigationToggle = ({ currentView, onViewChange }) => {
|
||||
const handleNavigateToTasks = () => {
|
||||
onViewChange('/tasks');
|
||||
};
|
||||
|
||||
const handleNavigateToProjects = () => {
|
||||
onViewChange('/projects');
|
||||
};
|
||||
|
||||
return (
|
||||
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>
|
||||
{currentView === 'tasks' ? (
|
||||
<PrimaryOutlinedButton onClick={handleNavigateToProjects}>
|
||||
← К проектам
|
||||
</PrimaryOutlinedButton>
|
||||
) : (
|
||||
<PrimaryOutlinedButton onClick={handleNavigateToTasks}>
|
||||
← К задачам
|
||||
</PrimaryOutlinedButton>
|
||||
)}
|
||||
<Typography variant="h6" color="primary" sx={{ fontWeight: 200, fontSize: '1rem' }}>
|
||||
{currentView === 'tasks' ? 'Управление задачами' : 'Управление проектами'}
|
||||
</Typography>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default NavigationToggle;
|
||||
@ -14,7 +14,7 @@ import {
|
||||
ExportExitButton,
|
||||
ExportWithTextButton,
|
||||
} from './Buttons/ButtonsActions';
|
||||
import { exportBulkForms, exportSingleForm } from '../../utils/exportFile';
|
||||
import { exportBulkForms, exportSingleForm } from '../../utils/exportForm';
|
||||
|
||||
/**
|
||||
* Универсальный компонент для отображения списка с пагинацией и экспортом
|
||||
@ -32,13 +32,12 @@ import { exportBulkForms, exportSingleForm } from '../../utils/exportFile';
|
||||
* @param {Function} props.getItemTitle - Функция получения заголовка элемента
|
||||
* @param {string} props.entityName - Название сущности (для текстов)
|
||||
* @param {string} props.emptyMessage - Сообщение при пустом списке
|
||||
* @param {number} props.skeletonCount - Количество силуэтов таблиц при загрузки
|
||||
* @param {number} props.skeletonCount - Количество скелетонов
|
||||
* @param {Object} props.extraActions - Дополнительные действия справа
|
||||
* @param {boolean} props.enableExport - Включить экспорт
|
||||
* @param {Array} props.limitOptions - Опции для выбора лимита
|
||||
* @param {number} props.maxHeight - Максимальная высота контейнера со скроллом
|
||||
* @param {boolean} props.enableScroll - Включить скролл для списка
|
||||
* @param {boolean} props.filterActions - Элементы фильтрации
|
||||
*/
|
||||
export function PaginatedList({
|
||||
items = [],
|
||||
@ -59,7 +58,6 @@ export function PaginatedList({
|
||||
limitOptions = [10, 20, 50, 100, 200],
|
||||
maxHeight = 'calc(100vh - 300px)',
|
||||
enableScroll = true,
|
||||
filterActions = null,
|
||||
}) {
|
||||
const [exportMode, setExportMode] = useState(false);
|
||||
const [exportList, setExportList] = useState([]);
|
||||
@ -106,45 +104,37 @@ export function PaginatedList({
|
||||
};
|
||||
|
||||
return (
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', height: '100%', width: '100%' }}>
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>
|
||||
{/* Верхняя панель с экспортом и дополнительными действиями */}
|
||||
{enableExport && (
|
||||
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
|
||||
<div>
|
||||
{filterActions}
|
||||
</div>
|
||||
<Box sx={{ display: 'flex', justifyContent: 'space-between', mb: '1.5rem' }}>
|
||||
{exportMode && (
|
||||
<Typography variant="body2" color="textSecondary">
|
||||
Выделено {entityName}: {exportList.length}
|
||||
</Typography>
|
||||
<Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 2, flexShrink: 0 }}>
|
||||
{exportMode && (
|
||||
<Typography variant="body2" color="textSecondary">
|
||||
Выделено {entityName}: {exportList.length}
|
||||
</Typography>
|
||||
)}
|
||||
<Box sx={{ flex: 1 }} />
|
||||
<Stack direction="row" spacing="0.5rem">
|
||||
{!exportMode ? (
|
||||
<>
|
||||
<ExportWithTextButton
|
||||
text="Пакетный экспорт"
|
||||
onClick={() => setExportMode(true)}
|
||||
/>
|
||||
{extraActions}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<ExportWithTextButton
|
||||
text="Экспортировать"
|
||||
onClick={handleBulkExport}
|
||||
disabled={exportList.length === 0}
|
||||
/>
|
||||
<ExportExitButton onClick={() => setExportMode(false)} />
|
||||
</>
|
||||
)}
|
||||
<Box sx={{ flex: 1 }} />
|
||||
<Stack direction="row" spacing="0.5rem">
|
||||
{!exportMode ? (
|
||||
<>
|
||||
<ExportWithTextButton
|
||||
text="Пакетный экспорт"
|
||||
onClick={() => setExportMode(true)}
|
||||
height='2.5rem'
|
||||
/>
|
||||
{extraActions}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<ExportWithTextButton
|
||||
text="Экспортировать"
|
||||
onClick={handleBulkExport}
|
||||
disabled={exportList.length === 0}
|
||||
height='2.5rem'
|
||||
/>
|
||||
<ExportExitButton onClick={() => setExportMode(false)} />
|
||||
</>
|
||||
)}
|
||||
</Stack>
|
||||
</Box>
|
||||
</Stack>
|
||||
</Box>
|
||||
|
||||
)}
|
||||
|
||||
{/* Контейнер со скроллом для списка */}
|
||||
|
||||
@ -6,12 +6,15 @@ import { toast } from 'react-toastify';
|
||||
|
||||
const TablesList = ({
|
||||
filteredTables,
|
||||
projects,
|
||||
query,
|
||||
basePath = '/table',
|
||||
formInfo,
|
||||
isProject = false,
|
||||
formInfo
|
||||
}) => {
|
||||
const navigate = useNavigate();
|
||||
const isProject = useMemo(() => {
|
||||
return !!projects;
|
||||
}, [projects])
|
||||
|
||||
const handleNavigate = (path) => {
|
||||
navigate(path);
|
||||
@ -22,7 +25,7 @@ const TablesList = ({
|
||||
if (!formInfo){
|
||||
return;
|
||||
}
|
||||
const path = `${basePath}/form/${formInfo.id}/form-type/${isProject ? 'PROJECT' : formInfo.form_type_code}/${table.sheet}/${table?.direction}/${table?.year}`;
|
||||
const path = `${basePath}/form/${formInfo.id}/form-type/${isProject ? 'project' : formInfo.form_type_code}/${table.sheet}/${table?.direction}`;
|
||||
|
||||
return (
|
||||
<TableCard
|
||||
|
||||
@ -82,15 +82,15 @@ export const EVENT_CONFIGS = {
|
||||
},
|
||||
ACCESS_EXTEND: {
|
||||
form_id: 'Информация о задаче',
|
||||
closes_at_after: 'Дата закрытия (новая)',
|
||||
closes_at_before: 'Дата закрытия (старая)',
|
||||
closes_at_after: 'Дата закрытия',
|
||||
closes_at_before: 'Дата открытия',
|
||||
phase_name: 'Названия этапа',
|
||||
sheet: "Лист",
|
||||
},
|
||||
ACCESS_WINDOW_CHANGE: {
|
||||
form_id: 'Информация о задаче',
|
||||
closes_at: 'Дата закрытия',
|
||||
opens_at: 'Дата открытия',
|
||||
open_at: 'Дата открытия',
|
||||
phase_name: 'Названия этапа',
|
||||
role: 'Для роли',
|
||||
column_keys: 'Колонки в этапе',
|
||||
|
||||
@ -10,11 +10,10 @@ import { useAuth } from '../app/context/AuthProvider';
|
||||
import { BackButton } from '../components/common/Buttons/BackButton';
|
||||
import { SHEET_NAME } from '../constants/constants';
|
||||
|
||||
const TableInfo = ({ formId, sheetName, isProject = false }) => {
|
||||
const path = (isProject ? `/project/` : '/task/') + formId;
|
||||
const TableInfo = ({ formId, sheetName }) => {
|
||||
const portalContent = (
|
||||
<TaskInfoContainer>
|
||||
<BackButton to={path} />
|
||||
<BackButton to={`/task/${formId}`} />
|
||||
{sheetName && (
|
||||
<NameTask>{SHEET_NAME[sheetName] || sheetName}</NameTask>
|
||||
)}
|
||||
@ -29,29 +28,20 @@ const TableInfo = ({ formId, sheetName, isProject = false }) => {
|
||||
};
|
||||
|
||||
export default function NewTablePage() {
|
||||
const { formId, formType, sheetName, direction, year } = useParams();
|
||||
const { formId, formType, sheetName, direction } = useParams();
|
||||
const { user } = useAuth();
|
||||
const isProject = formType == 'PROJECT';
|
||||
|
||||
return (
|
||||
<>
|
||||
{formId && <TableInfo formId={formId} sheetName={sheetName} isProject={isProject} />}
|
||||
{formId && <TableInfo formId={formId} sheetName={sheetName} />}
|
||||
{user && (
|
||||
<RealtimeProvider
|
||||
formId={formId}
|
||||
sheetName={sheetName}
|
||||
userId={user.id}
|
||||
direction={direction === 'null' ? null : direction}
|
||||
isProject={isProject}
|
||||
year={year}
|
||||
>
|
||||
<RealtimeTable
|
||||
formType={formType}
|
||||
formId={formId}
|
||||
sheetName={sheetName}
|
||||
direction={direction === 'null' ? null : direction}
|
||||
year={year}
|
||||
/>
|
||||
<RealtimeTable formType={formType} formId={formId} sheetName={sheetName} direction={direction === 'null' ? null : direction} />
|
||||
</RealtimeProvider>
|
||||
)}
|
||||
|
||||
|
||||
@ -26,18 +26,17 @@ import {
|
||||
ROLES_NAME_ID,
|
||||
} from '../../constants/constants';
|
||||
import { useAuth } from '../../app/context/AuthProvider';
|
||||
import { PrimaryButton, PrimaryOutlinedButton } from '../../components/common/Buttons/Buttons';
|
||||
import { PrimaryButton } from '../../components/common/Buttons/Buttons';
|
||||
import {
|
||||
ExportExitButton,
|
||||
ExportWithTextButton,
|
||||
} from '../../components/common/Buttons/ButtonsActions';
|
||||
import { exportBulkForms, exportSingleForm } from '../../utils/exportFile';
|
||||
import { exportBulkForms, exportSingleForm } from '../../utils/exportForm';
|
||||
import { WhitePlus } from '../../components/common/icons/icons';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { PaginatedList } from '../../components/common/PaginatedList';
|
||||
import { DEFAULT_PROJECT_CONFIG } from '../../constants/projectConfig';
|
||||
import { SspApi } from '../../api/ssp';
|
||||
import NavigationToggle from '../../components/common/NavigationToggle';
|
||||
|
||||
export { DEFAULT_PROJECT_CONFIG } from '../../constants/projectConfig';
|
||||
|
||||
@ -214,6 +213,10 @@ export default function ProjectsPage() {
|
||||
exportSingleForm(projectId, projectTitle);
|
||||
};
|
||||
|
||||
const handleNavigateToTasks = () => {
|
||||
navigate('/tasks');
|
||||
};
|
||||
|
||||
const handleRefresh = () => {
|
||||
loadProjects(page, limit);
|
||||
toast.info('Список проектов обновлен');
|
||||
@ -225,7 +228,78 @@ export default function ProjectsPage() {
|
||||
<>
|
||||
<PageContainer>
|
||||
<HeaderSwitch />
|
||||
<NavigationToggle currentView={'projects'} onViewChange={(path) => navigate(path)} />
|
||||
|
||||
{/* Навигация */}
|
||||
<Box sx={{ display: 'flex', alignItems: 'center', gap: 2, mb: 2 }}>
|
||||
<Button variant="outlined" size="small" onClick={handleNavigateToTasks}>
|
||||
← К задачам
|
||||
</Button>
|
||||
<Typography variant="h6" color="primary" sx={{ fontWeight: 500 }}>
|
||||
Управление проектами
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
{/* Фильтры */}
|
||||
<Box sx={{ mb: 3, display: 'flex', gap: 2, flexWrap: 'wrap', alignItems: 'center' }}>
|
||||
|
||||
{/* Фильтр по году */}
|
||||
<FormControl size="small" sx={{ minWidth: 150, height:'2.5rem' }}>
|
||||
<Select
|
||||
displayEmpty
|
||||
value={yearFilter}
|
||||
onChange={(e) => setYearFilter(e.target.value)}
|
||||
>
|
||||
<MenuItem value="">Все годы</MenuItem>
|
||||
{yearOptions.map((year) => (
|
||||
<MenuItem key={year} value={year}>
|
||||
{year}
|
||||
</MenuItem>
|
||||
))}
|
||||
</Select>
|
||||
</FormControl>
|
||||
|
||||
{/* Фильтр по ССП/РФ */}
|
||||
<FormControl size="small" sx={{ minWidth: '10rem' }}>
|
||||
<Autocomplete
|
||||
size="small"
|
||||
options={projectData['ССП/РФ']?.options ?? []}
|
||||
noOptionsText="Не найдено"
|
||||
getOptionLabel={(option) => option.title || option.name || '-'}
|
||||
value={
|
||||
branchFilter
|
||||
}
|
||||
onChange={(event, newValue) => {
|
||||
setBranchFilter(newValue);
|
||||
}}
|
||||
sx={{ height: '2.5rem', minWidth: '21.25rem' }}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
placeholder="Все"
|
||||
sx={{
|
||||
height: '2.5rem',
|
||||
width: '21.25rem',
|
||||
'& .MuiOutlinedInput-root': {
|
||||
height: '2.5rem',
|
||||
'& fieldset': {
|
||||
borderRadius: '0.5rem',
|
||||
borderColor: 'rgba(0,0,0,0.1)',
|
||||
},
|
||||
},
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
</FormControl>
|
||||
<Button
|
||||
variant="outlined"
|
||||
size="small"
|
||||
onClick={handleClearFilters}
|
||||
sx={{ ml: 'auto' }}
|
||||
>
|
||||
Сбросить фильтры
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
<PaginatedList
|
||||
items={items}
|
||||
@ -249,41 +323,11 @@ export default function ProjectsPage() {
|
||||
getItemTitle={(project) => project.name || 'Проект'}
|
||||
extraActions={
|
||||
user.role_id === ROLES_NAME_ID.admin && (
|
||||
<PrimaryButton onClick={openModal} startIcon={<WhitePlus />} height='2.5rem' >
|
||||
<PrimaryButton onClick={openModal} startIcon={<WhitePlus />}>
|
||||
Создать проект
|
||||
</PrimaryButton>
|
||||
)
|
||||
}
|
||||
filterActions={
|
||||
<Box sx={{ display: 'flex', gap: 1.5, flexWrap: 'wrap', alignItems: 'center', height: '2.5rem' }}>
|
||||
<Select
|
||||
size="small"
|
||||
displayEmpty
|
||||
value={yearFilter}
|
||||
onChange={(e) => setYearFilter(e.target.value)}
|
||||
sx={{ width: 130 }}
|
||||
>
|
||||
<MenuItem value="">Все годы</MenuItem>
|
||||
{yearOptions.map((year) => (
|
||||
<MenuItem key={year} value={year}>{year}</MenuItem>
|
||||
))}
|
||||
</Select>
|
||||
|
||||
<Autocomplete
|
||||
size="small"
|
||||
options={projectData['ССП/РФ']?.options ?? []}
|
||||
noOptionsText="Не найдено"
|
||||
getOptionLabel={(option) => option.title || option.name || '-'}
|
||||
value={branchFilter}
|
||||
onChange={(event, newValue) => setBranchFilter(newValue)}
|
||||
sx={{ width: 200 }}
|
||||
renderInput={(params) => (
|
||||
<TextField {...params} placeholder="Все" size="small" />
|
||||
)}
|
||||
/>
|
||||
<PrimaryOutlinedButton onClick={handleClearFilters} height="100%"> Сбросить</PrimaryOutlinedButton>
|
||||
</Box>
|
||||
}
|
||||
/>
|
||||
</PageContainer>
|
||||
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
import styled from '@emotion/styled';
|
||||
|
||||
const PageContainer = styled.div`
|
||||
padding: 2rem;
|
||||
padding-top: 1rem;
|
||||
padding: 2.5rem;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@ -20,7 +20,7 @@ import { SettingModal as SettingStageModal } from '../../components/Stages/Setti
|
||||
import { PrimaryOutlinedButton } from '../../components/common/Buttons/Buttons';
|
||||
import { FormsApi } from '../../api/forms';
|
||||
import { ExportWithTextButton } from '../../components/common/Buttons/ButtonsActions';
|
||||
import { exportSingleForm } from '../../utils/exportFile';
|
||||
import { exportSingleForm } from '../../utils/exportForm';
|
||||
import TablesList from '../../components/common/TableList/TableList';
|
||||
import { DIRECTION_TRANSLATE, FORM_TYPE_TRANSLATE, SHEET_NAME } from '../../constants/constants';
|
||||
|
||||
@ -66,11 +66,11 @@ export default function TaskPage() {
|
||||
const projectData = await ProjectsApi.get(id);
|
||||
setTask(projectData.result);
|
||||
setIsProjectData(true);
|
||||
console.log(projectData.result.reports);
|
||||
|
||||
const mappedTables = projectData.result.reports.map(sheet => ({
|
||||
name: SHEET_NAME[sheet.report_type] || sheet.report_type,
|
||||
sheet: sheet.report_type,
|
||||
year: sheet.year,
|
||||
}));
|
||||
setTables(mappedTables);
|
||||
} else {
|
||||
|
||||
@ -35,13 +35,11 @@ import {
|
||||
ExportExitButton,
|
||||
ExportWithTextButton,
|
||||
} from '../../components/common/Buttons/ButtonsActions';
|
||||
import { exportBulkForms, exportSingleForm } from '../../utils/exportFile';
|
||||
import { exportBulkForms, exportSingleForm } from '../../utils/exportForm';
|
||||
import { WhitePlus } from '../../components/common/icons/icons';
|
||||
import { OrgUnitsAutocompletePaper } from '../../components/common/OrgUnitsAutocompletePaper/OrgUnitsAutocompletePaper';
|
||||
import { renderOrgUnitValue } from '../../components/common/OrgUnitsAutocompletePaper/renderOrgUnitValue';
|
||||
import { PaginatedList } from '../../components/common/PaginatedList';
|
||||
import NavigationToggle from '../../components/common/NavigationToggle';
|
||||
import { useNavigate } from 'react-router';
|
||||
|
||||
const modalSelectMenuProps = {
|
||||
sx: { zIndex: 1301 },
|
||||
@ -55,8 +53,6 @@ const modalSelectSx = {
|
||||
};
|
||||
|
||||
export default function TasksPage() {
|
||||
const navigate = useNavigate();
|
||||
|
||||
const [items, setItems] = useState([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [loadingUpdate, setLoadingUpdate] = useState(false);
|
||||
@ -260,7 +256,7 @@ export default function TasksPage() {
|
||||
<>
|
||||
<PageContainer>
|
||||
<HeaderSwitch />
|
||||
<NavigationToggle currentView={'tasks'} onViewChange={(path) => navigate(path)} />
|
||||
|
||||
<PaginatedList
|
||||
items={items}
|
||||
loading={loading}
|
||||
@ -282,7 +278,7 @@ export default function TasksPage() {
|
||||
getItemTitle={(task) => task.title || 'Задача'}
|
||||
extraActions={
|
||||
user.role_id === ROLES_NAME_ID.admin && (
|
||||
<PrimaryButton onClick={openModal} startIcon={<WhitePlus />} height={'2.5rem'}>
|
||||
<PrimaryButton onClick={openModal} startIcon={<WhitePlus />}>
|
||||
Создать задачу
|
||||
</PrimaryButton>
|
||||
)
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
import { FormsSheetApi } from "../api/form_sheet";
|
||||
import { ProjectsApi } from "../api/projects";
|
||||
import { TasksApi } from "../api/tasks";
|
||||
import { downloadFile } from "./downloadFile";
|
||||
import { getApiErrorMessage } from "./getApiErrorMessage";
|
||||
import { toast } from "react-toastify";
|
||||
|
||||
export const exportSingleForm = async (taskId, taskTitle) => {
|
||||
try {
|
||||
const response = await TasksApi.exportTask(taskId);
|
||||
await downloadFile(response, taskTitle, "xlsx");
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
"Ошибка при скачивании файла",
|
||||
);
|
||||
toast.error(message);
|
||||
}
|
||||
};
|
||||
|
||||
export const exportSheet = async (formId, sheetName, direction) => {
|
||||
try {
|
||||
const normalizedDirection =
|
||||
direction && direction !== "null" ? direction : undefined;
|
||||
const params = normalizedDirection
|
||||
? { direction: normalizedDirection }
|
||||
: {};
|
||||
const response = await FormsSheetApi.export(formId, sheetName, params);
|
||||
await downloadFile(response, sheetName, "xlsx");
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
"Ошибка при скачивании файла",
|
||||
);
|
||||
toast.error(message);
|
||||
}
|
||||
};
|
||||
|
||||
export const exportSheetProject = async (formId, sheetName, year) => {
|
||||
try {
|
||||
const response = await ProjectsApi.export(formId, year, sheetName);
|
||||
await downloadFile(response, sheetName, "xlsx");
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
"Ошибка при скачивании файла",
|
||||
);
|
||||
toast.error(message);
|
||||
}
|
||||
};
|
||||
|
||||
export const exportBulkForms = async (formIds, fileName = "Задачи") => {
|
||||
try {
|
||||
const response = await TasksApi.exportTasks({ form_ids: formIds });
|
||||
await downloadFile(response, fileName, "xlsx");
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
"Ошибка при скачивании файла",
|
||||
);
|
||||
toast.error(message);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
48
web/src/utils/exportForm.js
Normal file
48
web/src/utils/exportForm.js
Normal file
@ -0,0 +1,48 @@
|
||||
import { FormsSheetApi } from '../api/form_sheet';
|
||||
import { TasksApi } from '../api/tasks';
|
||||
import { downloadFile } from './downloadFile';
|
||||
import { getApiErrorMessage } from './getApiErrorMessage';
|
||||
import { toast } from 'react-toastify';
|
||||
|
||||
export const exportSingleForm = async (taskId, taskTitle) => {
|
||||
try {
|
||||
const response = await TasksApi.exportTask(taskId);
|
||||
await downloadFile(response, taskTitle, 'xlsx');
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
'Ошибка при скачивании файла',
|
||||
);
|
||||
toast.error(message);
|
||||
}
|
||||
};
|
||||
|
||||
export const exportSheet = async (formId, sheetName, direction) => {
|
||||
try {
|
||||
const normalizedDirection =
|
||||
direction && direction !== 'null' ? direction : undefined;
|
||||
const params = normalizedDirection ? { direction: normalizedDirection } : {};
|
||||
const response = await FormsSheetApi.export(formId, sheetName, params);
|
||||
await downloadFile(response, sheetName, 'xlsx');
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
'Ошибка при скачивании файла',
|
||||
);
|
||||
toast.error(message);
|
||||
}
|
||||
};
|
||||
|
||||
export const exportBulkForms = async (formIds, fileName = 'Задачи') => {
|
||||
try {
|
||||
const response = await TasksApi.exportTasks({ form_ids: formIds });
|
||||
await downloadFile(response, fileName, 'xlsx');
|
||||
} catch (error) {
|
||||
const message = await getApiErrorMessage(
|
||||
error,
|
||||
'Ошибка при скачивании файла',
|
||||
);
|
||||
toast.error(message);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user