diff --git a/app/panels/prj_fin/layouts.js b/app/panels/prj_fin/layouts.js index 0984959..871cf9c 100644 --- a/app/panels/prj_fin/layouts.js +++ b/app/panels/prj_fin/layouts.js @@ -23,6 +23,13 @@ export const PANEL_UNITS = { PROJECT_STAGE_ARTS: "PROJECT_STAGE_ARTS" }; +//Общие стили +export const COMMON_PROJECTS_STYLES = { + FULL_SCREEN_DIALOG_CONTENT: { + padding: 0 + } +}; + //----------- //Тело модуля //----------- @@ -275,42 +282,43 @@ export const rowExpandRender = ({ const linkButtons = () => panelUnit === PANEL_UNITS.PROJECTS ? ( <> - - ) : panelUnit === PANEL_UNITS.PROJECT_STAGES ? ( <> - - - ) : panelUnit === PANEL_UNITS.PROJECT_STAGE_CONTRACTS ? ( ) : null; //Сборка содержимого return ( - - {linkButtons()} + + + {linkButtons()} + - + diff --git a/app/panels/prj_fin/projects.js b/app/panels/prj_fin/projects.js index d5f0501..e692926 100644 --- a/app/panels/prj_fin/projects.js +++ b/app/panels/prj_fin/projects.js @@ -11,23 +11,34 @@ import React, { useState, useCallback, useEffect, useContext } from "react"; // import { Box, Grid, Paper, Fab, Icon } from "@mui/material"; //Интерфейсные компоненты import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_MORE_HEIGHT, P8P_DATA_GRID_FILTERS_HEIGHT } from "../../components/p8p_data_grid"; //Таблица данных import { P8PFullScreenDialog } from "../../components/p8p_fullscreen_dialog"; //Полноэкранный диалог import { P8PChart } from "../../components/p8p_chart"; //График import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { COMMON_PROJECTS_STYLES, PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов import { Stages } from "./stages"; //Список этапов проекта //--------- //Константы //--------- +//Высота графиков +const CHART_HEIGHT = "300px"; + //Стили const STYLES = { - CHART: { maxHeight: "300px", display: "flex", justifyContent: "center" }, + TABLE_PROJECTS: (showCharts, morePages, filters) => ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${showCharts ? CHART_HEIGHT : "0px"} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - ${ + filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px" + } - 25px)`, + ...APP_STYLES.SCROLL + }), + CHART: { maxHeight: CHART_HEIGHT, display: "flex", justifyContent: "center" }, CHART_PAPER: { height: "100%" }, CHART_FAB: { position: "absolute", top: 80, left: 16 } }; @@ -220,12 +231,16 @@ const Projects = () => { {projectsDataGrid.dataLoaded ? ( 0) + }} columnsDef={projectsDataGrid.columnsDef} rows={projectsDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} filtersInitial={projectsDataGrid.filters} morePages={projectsDataGrid.morePages} reloading={projectsDataGrid.reload} + fixedHeader={true} expandable={true} headCellRender={headCellRender} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECTS, showStages })} @@ -245,7 +260,11 @@ const Projects = () => { /> ) : null} {projectsDataGrid.selectedProject ? ( - + ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px"} - 16px)`, + ...APP_STYLES.SCROLL + }) +}; + //----------- //Тело модуля //----------- @@ -100,10 +114,12 @@ const StageArts = ({ stage, filters }) => { {stageArtsDataGrid.dataLoaded ? ( 0), elevation: 0 }} columnsDef={stageArtsDataGrid.columnsDef} filtersInitial={filters} rows={stageArtsDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} + fixedHeader={true} morePages={false} reloading={stageArtsDataGrid.reload} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGE_ARTS, showCostNotes, showContracts })} diff --git a/app/panels/prj_fin/stage_contracts.js b/app/panels/prj_fin/stage_contracts.js index 0953a75..01ed0a9 100644 --- a/app/panels/prj_fin/stage_contracts.js +++ b/app/panels/prj_fin/stage_contracts.js @@ -12,13 +12,35 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Box } from "@mui/material"; //Интерфейсные компоненты import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных +import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { + P8PDataGrid, + P8P_DATA_GRID_SIZE, + P8P_DATA_GRID_FILTER_SHAPE, + P8P_DATA_GRID_MORE_HEIGHT, + P8P_DATA_GRID_FILTERS_HEIGHT +} from "../../components/p8p_data_grid"; //Таблица данных import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { PANEL_UNITS, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + TABLE_CONTRACTS: (morePages, filters) => ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - ${ + filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px" + } - 16px)`, + ...APP_STYLES.SCROLL + }) +}; + //----------- //Тело модуля //----------- @@ -137,12 +159,17 @@ const StageContracts = ({ stage, filters }) => { {stageContractsDataGrid.dataLoaded ? ( 0), + elevation: 0 + }} columnsDef={stageContractsDataGrid.columnsDef} filtersInitial={filters} rows={stageContractsDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} morePages={stageContractsDataGrid.morePages} reloading={stageContractsDataGrid.reload} + fixedHeader={true} expandable={true} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGE_CONTRACTS, pOnlineShowDocument })} rowExpandRender={prms => diff --git a/app/panels/prj_fin/stages.js b/app/panels/prj_fin/stages.js index 7cc1f3b..e1d166f 100644 --- a/app/panels/prj_fin/stages.js +++ b/app/panels/prj_fin/stages.js @@ -12,7 +12,15 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Box } from "@mui/material"; //Интерфейсные компоненты import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных +import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { + P8PDataGrid, + P8P_DATA_GRID_SIZE, + P8P_DATA_GRID_FILTER_SHAPE, + P8P_DATA_GRID_MORE_HEIGHT, + P8P_DATA_GRID_FILTERS_HEIGHT +} from "../../components/p8p_data_grid"; //Таблица данных import { P8PFullScreenDialog } from "../../components/p8p_fullscreen_dialog"; //Полноэкранный диалог import { StageArts } from "./stage_arts"; //Калькуляция этапа проекта import { StageContracts } from "./stage_contracts"; //Договоры с соисполнителями этапа проекта @@ -20,7 +28,21 @@ import { BackEndСtx } from "../../context/backend"; //Контекст взаи import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { COMMON_PROJECTS_STYLES, PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + TABLE_STAGES: (morePages, filters) => ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - ${ + filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px" + } - 16px)`, + ...APP_STYLES.SCROLL + }) +}; //----------- //Тело модуля @@ -155,12 +177,17 @@ const Stages = ({ project, projectName, filters }) => { {stagesDataGrid.dataLoaded ? ( 0), + elevation: 0 + }} columnsDef={stagesDataGrid.columnsDef} filtersInitial={filters} rows={stagesDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} morePages={stagesDataGrid.morePages} reloading={stagesDataGrid.reload} + fixedHeader={true} expandable={true} headCellRender={headCellRender} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGES, showStageArts, showContracts })} @@ -186,6 +213,7 @@ const Stages = ({ project, projectName, filters }) => { @@ -194,6 +222,7 @@ const Stages = ({ project, projectName, filters }) => {