From ce455e485b2f57a75c6f514446b877f474ef4b38 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 25 Sep 2023 14:36:39 +0300 Subject: [PATCH] =?UTF-8?q?WEB=20APP:=20=D0=9F=D1=80=D0=B8=D0=B2=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D1=82,=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D1=83=D0=B5=D0=BC=D1=8B=D1=85=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BA=D1=81=D1=82?= =?UTF-8?q?=D0=B0,=20=D0=BA=20=D0=B5=D0=B4=D0=B8=D0=BD=D0=BE=D0=BC=D1=83?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D1=83=20=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/app.js | 8 ++--- app/components/p8p_app_workspace.js | 6 ++-- app/components/p8p_data_grid.js | 14 ++++----- app/components/p8p_panels_menu.js | 44 +++++++++++++-------------- app/components/p8p_table.js | 18 +++++------ app/context/backend.js | 4 +-- app/context/messaging.js | 2 +- app/panels/prj_fin/projects.js | 4 +-- app/panels/prj_fin/stage_arts.js | 6 ++-- app/panels/prj_fin/stage_contracts.js | 6 ++-- app/panels/prj_fin/stages.js | 6 ++-- 11 files changed, 59 insertions(+), 59 deletions(-) diff --git a/app/app.js b/app/app.js index 87ae173..d0fb4e4 100644 --- a/app/app.js +++ b/app/app.js @@ -14,7 +14,7 @@ import { ApplicationСtx } from "./context/application"; //Контекст пр import { NavigationContext, NavigationCtx, getRootLocation } from "./context/navigation"; //Контекст навигации import { P8PAppErrorPage } from "./components/p8p_app_error_page"; //Страница с ошибкой import { P8PAppWorkspace } from "./components/p8p_app_workspace"; //Рабочее пространство панели -import { P8PPanelsMenuGrid, PANEL_SHAPE } from "./components/p8p_panels_menu"; //Меню панелей +import { P8PPanelsMenuGrid, P8P_PANELS_MENU_PANEL_SHAPE } from "./components/p8p_panels_menu"; //Меню панелей import { TITLES, BUTTONS, ERRORS, ERRORS_HTTP } from "../app.text"; //Текстовые ресурсы и константы //-------------------------- @@ -69,7 +69,7 @@ const MainMenu = ({ panels = [] } = {}) => { //Контроль свойств - главное меню приложения MainMenu.propTypes = { - panels: PropTypes.arrayOf(PANEL_SHAPE).isRequired + panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired }; //Рабочее пространство панели @@ -100,8 +100,8 @@ const Workspace = ({ panels = [], selectedPanel, children } = {}) => { //Контроль свойств - главное меню приложения Workspace.propTypes = { - panels: PropTypes.arrayOf(PANEL_SHAPE).isRequired, - selectedPanel: PANEL_SHAPE, + panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired, + selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE, children: PropTypes.element }; diff --git a/app/components/p8p_app_workspace.js b/app/components/p8p_app_workspace.js index d541c40..cba6e27 100644 --- a/app/components/p8p_app_workspace.js +++ b/app/components/p8p_app_workspace.js @@ -23,7 +23,7 @@ import { ListItemIcon, ListItemText } from "@mui/material"; //Интерфейсные компоненты -import { P8PPanelsMenuDrawer, PANEL_SHAPE } from "./p8p_panels_menu"; +import { P8PPanelsMenuDrawer, P8P_PANELS_MENU_PANEL_SHAPE } from "./p8p_panels_menu"; //--------- //Константы @@ -113,8 +113,8 @@ const P8PAppWorkspace = ({ children, panels = [], selectedPanel, closeCaption, h //Контроль свойств - Рабочее пространство P8PAppWorkspace.propTypes = { children: PropTypes.element, - panels: PropTypes.arrayOf(PANEL_SHAPE).isRequired, - selectedPanel: PANEL_SHAPE, + panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired, + selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE, closeCaption: PropTypes.string.isRequired, homeCaption: PropTypes.string.isRequired, onHomeNavigate: PropTypes.func, diff --git a/app/components/p8p_data_grid.js b/app/components/p8p_data_grid.js index da9f9f1..77f8fcc 100644 --- a/app/components/p8p_data_grid.js +++ b/app/components/p8p_data_grid.js @@ -10,20 +10,20 @@ import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { deepCopyObject } from "../core/utils"; //Вспомогательные процедуры и функции -import { P8PTable, P8P_TABLE_SIZE, P8P_TABLE_DATA_TYPE, P8P_FILTER_SHAPE } from "./p8p_table"; //Таблица +import { P8PTable, P8P_TABLE_SIZE, P8P_TABLE_DATA_TYPE, P8P_TABLE_FILTER_SHAPE } from "./p8p_table"; //Таблица //--------- //Константы //--------- //Размеры отступов -const P8PDATA_GRID_SIZE = P8P_TABLE_SIZE; +const P8P_DATA_GRID_SIZE = P8P_TABLE_SIZE; //Типы данных -const P8PDATA_GRID_DATA_TYPE = P8P_TABLE_DATA_TYPE; +const P8P_DATA_GRID_DATA_TYPE = P8P_TABLE_DATA_TYPE; //Формат фильтра -const P8PDATA_GRID_FILTER_SHAPE = P8P_FILTER_SHAPE; +const P8P_DATA_GRID_FILTER_SHAPE = P8P_TABLE_FILTER_SHAPE; //----------- //Тело модуля @@ -100,7 +100,7 @@ const P8PDataGrid = ({ rows={rows} orders={orders} filters={filters} - size={size || P8PDATA_GRID_SIZE.MEDIUM} + size={size || P8P_DATA_GRID_SIZE.MEDIUM} morePages={morePages} reloading={reloading} expandable={expandable} @@ -129,7 +129,7 @@ const P8PDataGrid = ({ //Контроль свойств - Таблица данных P8PDataGrid.propTypes = { columnsDef: PropTypes.array.isRequired, - filtersInitial: PropTypes.arrayOf(P8PDATA_GRID_FILTER_SHAPE), + filtersInitial: PropTypes.arrayOf(P8P_DATA_GRID_FILTER_SHAPE), rows: PropTypes.array.isRequired, size: PropTypes.string, morePages: PropTypes.bool.isRequired, @@ -159,4 +159,4 @@ P8PDataGrid.propTypes = { //Интерфейс модуля //---------------- -export { P8PDataGrid, P8PDATA_GRID_SIZE, P8PDATA_GRID_DATA_TYPE, P8PDATA_GRID_FILTER_SHAPE }; +export { P8P_DATA_GRID_SIZE, P8P_DATA_GRID_DATA_TYPE, P8P_DATA_GRID_FILTER_SHAPE, P8PDataGrid }; diff --git a/app/components/p8p_panels_menu.js b/app/components/p8p_panels_menu.js index 77f0cc2..098c24f 100644 --- a/app/components/p8p_panels_menu.js +++ b/app/components/p8p_panels_menu.js @@ -33,11 +33,24 @@ import { //--------- //Типы меню -const VARIANT = { +const P8P_PANELS_MENU_VARIANT = { DRAWER: "DRAWER", GRID: "GRID" }; +//Структура элемента описания панели +const P8P_PANELS_MENU_PANEL_SHAPE = PropTypes.shape({ + name: PropTypes.string.isRequired, + caption: PropTypes.string.isRequired, + desc: PropTypes.string.isRequired, + group: PropTypes.string, + icon: PropTypes.string.isRequired, + path: PropTypes.string.isRequired, + preview: PropTypes.string.isRequired, + showInPanelsList: PropTypes.bool.isRequired, + url: PropTypes.string.isRequired +}); + //Стили const STYLES = { CONTAINER: { @@ -77,19 +90,6 @@ const STYLES = { } }; -//Структура элемента описания панели -const PANEL_SHAPE = PropTypes.shape({ - name: PropTypes.string.isRequired, - caption: PropTypes.string.isRequired, - desc: PropTypes.string.isRequired, - group: PropTypes.string, - icon: PropTypes.string.isRequired, - path: PropTypes.string.isRequired, - preview: PropTypes.string.isRequired, - showInPanelsList: PropTypes.bool.isRequired, - url: PropTypes.string.isRequired -}); - //-------------------------------- //Вспомогательные классы и функции //-------------------------------- @@ -117,7 +117,7 @@ const getPanelsLinks = ({ variant, panels, selectedPanel, defaultGroupTytle, nav for (const grp of grps) { if (!(grps.length == 1 && grps[0] == null)) panelsLinks.push( - variant === VARIANT.GRID ? ( + variant === P8P_PANELS_MENU_VARIANT.GRID ? ( {grp ? grp : defaultGroupTytle} @@ -130,7 +130,7 @@ const getPanelsLinks = ({ variant, panels, selectedPanel, defaultGroupTytle, nav for (const panel of panels) { if (panel.showInPanelsList == true && ((grp && panel.group === grp) || (!grp && !panel.group))) panelsLinks.push( - variant === VARIANT.GRID ? ( + variant === P8P_PANELS_MENU_VARIANT.GRID ? ( {panel.preview ? ( @@ -180,7 +180,7 @@ const getPanelsLinks = ({ variant, panels, selectedPanel, defaultGroupTytle, nav //Меню панелей - сдвигающееся боковое меню const P8PPanelsMenuDrawer = ({ onItemNavigate, panels = [], selectedPanel } = {}) => { //Формируем ссылки на панели - const panelsLinks = getPanelsLinks({ variant: VARIANT.DRAWER, panels, selectedPanel, onItemNavigate }); + const panelsLinks = getPanelsLinks({ variant: P8P_PANELS_MENU_VARIANT.DRAWER, panels, selectedPanel, onItemNavigate }); //Генерация содержимого return {panelsLinks}; @@ -189,14 +189,14 @@ const P8PPanelsMenuDrawer = ({ onItemNavigate, panels = [], selectedPanel } = {} //Контроль свойств - Меню панелей - сдвигающееся боковое меню P8PPanelsMenuDrawer.propTypes = { onItemNavigate: PropTypes.func, - panels: PropTypes.arrayOf(PANEL_SHAPE).isRequired, - selectedPanel: PANEL_SHAPE + panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired, + selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE }; //Меню панелей - грид const P8PPanelsMenuGrid = ({ title, onItemNavigate, navigateCaption, panels = [], defaultGroupTytle } = {}) => { //Формируем ссылки на панели - const panelsLinks = getPanelsLinks({ variant: VARIANT.GRID, panels, defaultGroupTytle, navigateCaption, onItemNavigate }); + const panelsLinks = getPanelsLinks({ variant: P8P_PANELS_MENU_VARIANT.GRID, panels, defaultGroupTytle, navigateCaption, onItemNavigate }); //Генерация содержимого return ( @@ -220,7 +220,7 @@ P8PPanelsMenuGrid.propTypes = { title: PropTypes.string, onItemNavigate: PropTypes.func, navigateCaption: PropTypes.string.isRequired, - panels: PropTypes.arrayOf(PANEL_SHAPE).isRequired, + panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired, defaultGroupTytle: PropTypes.string.isRequired }; @@ -228,4 +228,4 @@ P8PPanelsMenuGrid.propTypes = { //Интерфейс модуля //---------------- -export { PANEL_SHAPE, P8PPanelsMenuDrawer, P8PPanelsMenuGrid }; +export { P8P_PANELS_MENU_PANEL_SHAPE, P8PPanelsMenuDrawer, P8PPanelsMenuGrid }; diff --git a/app/components/p8p_table.js b/app/components/p8p_table.js index 432df4c..d52bbd3 100644 --- a/app/components/p8p_table.js +++ b/app/components/p8p_table.js @@ -70,6 +70,13 @@ const P8P_TABLE_COLUMN_MENU_ACTIONS = { FILTER: "FILTER" }; +//Структура элемента описания фильтра +const P8P_TABLE_FILTER_SHAPE = PropTypes.shape({ + name: PropTypes.string.isRequired, + from: PropTypes.any, + to: PropTypes.any +}); + //Стили const STYLES = { TABLE: { @@ -98,13 +105,6 @@ const STYLES = { } }; -//Структура элемента описания фильтра -const P8P_FILTER_SHAPE = PropTypes.shape({ - name: PropTypes.string.isRequired, - from: PropTypes.any, - to: PropTypes.any -}); - //-------------------------------- //Вспомогательные классы и функции //-------------------------------- @@ -694,7 +694,7 @@ P8PTable.propTypes = { direction: PropTypes.string.isRequired }) ).isRequired, - filters: PropTypes.arrayOf(P8P_FILTER_SHAPE).isRequired, + filters: PropTypes.arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired, size: PropTypes.string, morePages: PropTypes.bool.isRequired, reloading: PropTypes.bool.isRequired, @@ -723,4 +723,4 @@ P8PTable.propTypes = { //Интерфейс модуля //---------------- -export { P8PTable, P8P_TABLE_DATA_TYPE, P8P_TABLE_SIZE, P8P_FILTER_SHAPE }; +export { P8P_TABLE_DATA_TYPE, P8P_TABLE_SIZE, P8P_TABLE_FILTER_SHAPE, P8PTable }; diff --git a/app/context/backend.js b/app/context/backend.js index 7964d81..ceda04e 100644 --- a/app/context/backend.js +++ b/app/context/backend.js @@ -16,7 +16,7 @@ import { MessagingСtx } from "./messaging"; //Контекст сообщени //--------- //Структура объекта клиента -const P8P_CLIENT_SHAPE = PropTypes.shape({ +const BACKEND_CONTEXT_CLIENT_SHAPE = PropTypes.shape({ SERV_DATA_TYPE_STR: PropTypes.string.isRequired, SERV_DATA_TYPE_NUMB: PropTypes.string.isRequired, SERV_DATA_TYPE_DATE: PropTypes.string.isRequired, @@ -116,6 +116,6 @@ export const BackEndContext = ({ client, children }) => { //Контроль свойств - Провайдер контекста взаимодействия с серверным API BackEndContext.propTypes = { - client: P8P_CLIENT_SHAPE.isRequired, + client: BACKEND_CONTEXT_CLIENT_SHAPE.isRequired, children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]) }; diff --git a/app/context/messaging.js b/app/context/messaging.js index 66802d7..cde5fcd 100644 --- a/app/context/messaging.js +++ b/app/context/messaging.js @@ -71,6 +71,7 @@ export const MessagingContext = ({ children }) => { return ( { showMsgInfo, showMsgWarn, hideMsg, - MSG_DLGT, msgState: state }} > diff --git a/app/panels/prj_fin/projects.js b/app/panels/prj_fin/projects.js index b920ad7..f67c272 100644 --- a/app/panels/prj_fin/projects.js +++ b/app/panels/prj_fin/projects.js @@ -12,7 +12,7 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Grid, Icon, Stack, Link, Button, Table, TableBody, TableRow, TableCell, Typography, Box, Paper, IconButton } from "@mui/material"; //Интерфейсные компоненты import { hasValue, formatDateRF, formatNumberRFCurrency, object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { BUTTONS, TEXTS, INPUTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8PDATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений @@ -299,7 +299,7 @@ const Projects = ({ onStagesOpen }) => { { columnsDef={stageArtsDataGrid.columnsDef} filtersInitial={filters} rows={stageArtsDataGrid.rows} - size={P8PDATA_GRID_SIZE.SMALL} + size={P8P_DATA_GRID_SIZE.SMALL} morePages={false} reloading={stageArtsDataGrid.reload} orderAscMenuItemCaption={BUTTONS.ORDER_ASC} @@ -191,7 +191,7 @@ const StageArts = ({ stage, filters }) => { //Контроль свойств - Калькуляция этапа проекта StageArts.propTypes = { stage: PropTypes.number.isRequired, - filters: PropTypes.arrayOf(P8PDATA_GRID_FILTER_SHAPE) + filters: PropTypes.arrayOf(P8P_DATA_GRID_FILTER_SHAPE) }; //---------------- diff --git a/app/panels/prj_fin/stage_contracts.js b/app/panels/prj_fin/stage_contracts.js index c43e9c1..48177b1 100644 --- a/app/panels/prj_fin/stage_contracts.js +++ b/app/panels/prj_fin/stage_contracts.js @@ -12,7 +12,7 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Box, Stack, Grid, Paper, Table, TableBody, TableRow, TableCell, Typography, Button, Link } from "@mui/material"; //Интерфейсные компоненты import { hasValue, formatDateRF, formatNumberRFCurrency, object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { BUTTONS, TEXTS, INPUTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8PDATA_GRID_SIZE, P8PDATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения @@ -216,7 +216,7 @@ const StageContracts = ({ stage, filters }) => { columnsDef={stageContractsDataGrid.columnsDef} filtersInitial={filters} rows={stageContractsDataGrid.rows} - size={P8PDATA_GRID_SIZE.SMALL} + size={P8P_DATA_GRID_SIZE.SMALL} morePages={stageContractsDataGrid.morePages} reloading={stageContractsDataGrid.reload} expandable={true} @@ -246,7 +246,7 @@ const StageContracts = ({ stage, filters }) => { //Контроль свойств - Договоры с соисполнителями этапа проекта StageContracts.propTypes = { stage: PropTypes.number.isRequired, - filters: PropTypes.arrayOf(P8PDATA_GRID_FILTER_SHAPE) + filters: PropTypes.arrayOf(P8P_DATA_GRID_FILTER_SHAPE) }; //---------------- diff --git a/app/panels/prj_fin/stages.js b/app/panels/prj_fin/stages.js index 2d6f642..5894236 100644 --- a/app/panels/prj_fin/stages.js +++ b/app/panels/prj_fin/stages.js @@ -12,7 +12,7 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Box, Icon, Stack, Grid, Paper, Table, TableBody, TableRow, TableCell, Typography, Button, IconButton, Link } from "@mui/material"; //Интерфейсные компоненты import { hasValue, formatDateRF, formatNumberRFCurrency, object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { BUTTONS, TEXTS, INPUTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8PDATA_GRID_SIZE, P8PDATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных import { P8PFullScreenDialog } from "../../components/p8p_fullscreen_dialog"; //Полноэкранный диалог import { StageArts } from "./stage_arts"; //Калькуляция этапа проекта import { StageContracts } from "./stage_contracts"; //Договоры с соисполнителями этапа проекта @@ -348,7 +348,7 @@ const Stages = ({ project, projectName, filters }) => { columnsDef={stagesDataGrid.columnsDef} filtersInitial={filters} rows={stagesDataGrid.rows} - size={P8PDATA_GRID_SIZE.SMALL} + size={P8P_DATA_GRID_SIZE.SMALL} morePages={stagesDataGrid.morePages} reloading={stagesDataGrid.reload} expandable={true} @@ -398,7 +398,7 @@ const Stages = ({ project, projectName, filters }) => { Stages.propTypes = { project: PropTypes.number.isRequired, projectName: PropTypes.string.isRequired, - filters: PropTypes.arrayOf(P8PDATA_GRID_FILTER_SHAPE) + filters: PropTypes.arrayOf(P8P_DATA_GRID_FILTER_SHAPE) }; //----------------