ЦИТК-823 ч.1

This commit is contained in:
Vladislav 2024-06-26 19:01:13 +03:00
parent 548acf33d9
commit 9b7e184431
6 changed files with 197 additions and 156 deletions

View File

@ -1,58 +0,0 @@
/*
Кастомный FormControl
*/
//---------------------
//Подключение библиотек
//---------------------
import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Box, FormControl, InputLabel, OutlinedInput, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты
import { STYLES } from "./layouts"; //Стили диалогового окна
//-----------
//Тело модуля
//-----------
const CustomFormControl = props => {
const { elementCode, elementValue, labelText, changeFunc, withDictionary, ...other } = props;
return (
<Box sx={{ p: 1 }}>
<FormControl sx={STYLES.DIALOG_WINDOW_WIDTH} {...other}>
<InputLabel htmlFor={`${elementCode}-outlined`}>{labelText}</InputLabel>
<OutlinedInput
id={`${elementCode}-outlined`}
value={elementValue ? elementValue : ""}
onChange={!withDictionary ? e => changeFunc(e.target.value) : null}
aria-describedby={`${elementCode}-outlined-helper-text`}
label={labelText}
endAdornment={
withDictionary ? (
<InputAdornment position="end">
<IconButton aria-label={`${elementCode} select`} onClick={changeFunc} edge="end">
<Icon>list</Icon>
</IconButton>
</InputAdornment>
) : null
}
/>
</FormControl>
</Box>
);
};
CustomFormControl.propTypes = {
elementCode: PropTypes.string.isRequired,
elementValue: PropTypes.string,
labelText: PropTypes.string.isRequired,
changeFunc: PropTypes.func.isRequired,
withDictionary: PropTypes.bool
};
//----------------
//Интерфейс модуля
//----------------
export { CustomFormControl };

View File

@ -1,5 +1,6 @@
/* /*
Кастомный Dialog Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
Панель мониторинга: Диалог добавления/исправления/удаления компонентов настройки регламентированного отчёта
*/ */
//--------------------- //---------------------
@ -9,14 +10,16 @@
import React from "react"; //Классы React import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента import PropTypes from "prop-types"; //Контроль свойств компонента
import { Dialog, DialogTitle, IconButton, Icon, DialogContent, Typography, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты import { Dialog, DialogTitle, IconButton, Icon, DialogContent, Typography, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты
import { CustomFormControl } from "./custom_form_control"; //Кастомные строки ввода //import { MessagingСtx } from "../../context/messaging";
import { Statuses, STYLES } from "./layouts"; //Статусы и стили диалогового окна import { IUDFormTextField } from "./iud_form_text_filed"; //Кастомные строки ввода
import { STATUSES, STYLES } from "./layouts"; //Статусы и стили диалогового окна
//----------- //---------------
//Тело модуля //Тело компонента
//----------- //---------------
const CustomDialog = props => { const IUDFormDialog = props => {
//Свойства компонента
const { const {
formOpen, formOpen,
closeForm, closeForm,
@ -32,20 +35,23 @@ const CustomDialog = props => {
dictRowClick dictRowClick
} = props; } = props;
//Подключение к контексту сообщений
//const { showMsgWarn } = useContext(MessagingСtx);
//Формирование заголовка диалогового окна //Формирование заголовка диалогового окна
const formTitle = () => { const formTitle = () => {
switch (curStatus) { switch (curStatus) {
case Statuses.CREATE: case STATUSES.CREATE:
return "Добавление раздела"; return "Добавление раздела";
case Statuses.EDIT: case STATUSES.EDIT:
return "Исправление раздела"; return "Исправление раздела";
case Statuses.DELETE: case STATUSES.DELETE:
return "Удаление раздела"; return "Удаление раздела";
case Statuses.COLUMNROW_CREATE: case STATUSES.COLUMNROW_CREATE:
return "Добавление показателя раздела"; return "Добавление показателя раздела";
case Statuses.COLUMNROW_EDIT: case STATUSES.COLUMNROW_EDIT:
return "Исправление показателя раздела"; return "Исправление показателя раздела";
case Statuses.COLUMNROW_DELETE: case STATUSES.COLUMNROW_DELETE:
return "Удаление показателя раздела"; return "Удаление показателя раздела";
} }
}; };
@ -54,24 +60,20 @@ const CustomDialog = props => {
const renderSwitch = () => { const renderSwitch = () => {
var btnText = ""; var btnText = "";
switch (curStatus) { switch (curStatus) {
case Statuses.CREATE: case STATUSES.CREATE:
case Statuses.COLUMNROW_CREATE: case STATUSES.COLUMNROW_CREATE:
btnText = "Добавить"; btnText = "Добавить";
break; break;
case Statuses.EDIT: case STATUSES.EDIT:
case Statuses.COLUMNROW_EDIT: case STATUSES.COLUMNROW_EDIT:
btnText = "Исправить"; btnText = "Исправить";
break; break;
case Statuses.DELETE: case STATUSES.DELETE:
case Statuses.COLUMNROW_DELETE: case STATUSES.COLUMNROW_DELETE:
btnText = "Удалить"; btnText = "Удалить";
break; break;
} }
return ( return <Button onClick={btnOkClick}>{btnText}</Button>;
<Button variant="contained" onClick={btnOkClick}>
{btnText}
</Button>
);
}; };
return ( return (
@ -90,34 +92,34 @@ const CustomDialog = props => {
<Icon>close</Icon> <Icon>close</Icon>
</IconButton> </IconButton>
<DialogContent> <DialogContent>
{curStatus == Statuses.DELETE || curStatus == Statuses.COLUMNROW_DELETE ? ( {curStatus == STATUSES.DELETE || curStatus == STATUSES.COLUMNROW_DELETE ? (
curStatus == Statuses.DELETE ? ( curStatus == STATUSES.DELETE ? (
<Typography>Вы хотите удалить раздел {curName}?</Typography> <Typography>Вы хотите удалить раздел {curName}?</Typography>
) : ( ) : (
<Typography>Вы хотите удалить показатель раздела {curName}?</Typography> <Typography>Вы хотите удалить показатель раздела {curName}?</Typography>
) )
) : ( ) : (
<div> <div>
{curStatus != Statuses.COLUMNROW_EDIT ? ( {curStatus != STATUSES.COLUMNROW_EDIT ? (
<CustomFormControl elementCode="code" elementValue={curCode} labelText="Мнемокод" changeFunc={codeOnChange} /> <IUDFormTextField elementCode="code" elementValue={curCode} labelText="Мнемокод" changeFunc={codeOnChange} />
) : null} ) : null}
<CustomFormControl elementCode="name" elementValue={curName} labelText="Наименование" changeFunc={nameOnChange} /> <IUDFormTextField elementCode="name" elementValue={curName} labelText="Наименование" changeFunc={nameOnChange} />
{curStatus == Statuses.COLUMNROW_CREATE ? ( {curStatus == STATUSES.COLUMNROW_CREATE ? (
<div> <div>
<CustomFormControl <IUDFormTextField
elementCode="column"
elementValue={curColCode}
labelText="Графа"
changeFunc={dictColumnClick}
withDictionary={true}
/>
<CustomFormControl
elementCode="row" elementCode="row"
elementValue={curRowCode} elementValue={curRowCode}
labelText="Строка" labelText="Строка"
changeFunc={dictRowClick} changeFunc={dictRowClick}
withDictionary={true} withDictionary={true}
/> />
<IUDFormTextField
elementCode="column"
elementValue={curColCode}
labelText="Графа"
changeFunc={dictColumnClick}
withDictionary={true}
/>
</div> </div>
) : null} ) : null}
</div> </div>
@ -125,18 +127,17 @@ const CustomDialog = props => {
</DialogContent> </DialogContent>
<DialogActions sx={STYLES.PADDING_DIALOG_BUTTONS_RIGHT}> <DialogActions sx={STYLES.PADDING_DIALOG_BUTTONS_RIGHT}>
{renderSwitch()} {renderSwitch()}
<Button variant="contained" onClick={closeForm}> <Button onClick={closeForm}>Отмена</Button>
Отмена
</Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>
); );
}; };
CustomDialog.propTypes = { //Контроль свойств - Диалог
IUDFormDialog.propTypes = {
formOpen: PropTypes.bool.isRequired, formOpen: PropTypes.bool.isRequired,
closeForm: PropTypes.func.isRequired, closeForm: PropTypes.func.isRequired,
curStatus: PropTypes.oneOf(Object.values(Statuses).filter(x => typeof x === "number")), curStatus: PropTypes.oneOf(Object.values(STATUSES).filter(x => typeof x === "number")),
curCode: PropTypes.string, curCode: PropTypes.string,
curName: PropTypes.string, curName: PropTypes.string,
curColCode: PropTypes.string, curColCode: PropTypes.string,
@ -148,8 +149,8 @@ CustomDialog.propTypes = {
dictRowClick: PropTypes.func.isRequired dictRowClick: PropTypes.func.isRequired
}; };
//---------------- //--------------------
//Интерфейс модуля //Интерфейс компонента
//---------------- //--------------------
export { CustomDialog }; export { IUDFormDialog };

View File

@ -0,0 +1,74 @@
/*
Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
Панель мониторинга: Компонент поля ввода
*/
//---------------------
//Подключение библиотек
//---------------------
import React, { useState, useCallback, useEffect } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Box, FormControl, InputLabel, Input, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты
import { STYLES } from "./layouts"; //Стили диалогового окна
//---------------
//Тело компонента
//---------------
const IUDFormTextField = props => {
//Свойства
const { elementCode, elementValue, labelText, changeFunc, withDictionary, ...other } = props;
//Состояние идентификатора элемента
const [elementId, setElementId] = useState("");
//Формирование идентификатора элемента
const generateId = useCallback(async () => {
setElementId(`${elementCode}-input`);
}, [elementCode]);
//При рендере поля ввода
useEffect(() => {
generateId();
}, [generateId]);
return (
<Box sx={{ p: 1 }}>
<FormControl sx={STYLES.DIALOG_WINDOW_WIDTH} {...other}>
<InputLabel htmlFor={elementId}>{labelText}</InputLabel>
<Input
id={elementId}
value={elementValue ? elementValue : ""}
onChange={!withDictionary ? e => changeFunc(e.target.value) : null}
aria-describedby={`${elementCode}-helper-text`}
label={labelText}
endAdornment={
withDictionary ? (
<InputAdornment position="end">
<IconButton aria-label={`${elementCode} select`} onClick={changeFunc} edge="end">
<Icon>list</Icon>
</IconButton>
</InputAdornment>
) : null
}
/>
</FormControl>
</Box>
);
};
//Контроль свойств - Поле ввода
IUDFormTextField.propTypes = {
elementCode: PropTypes.string.isRequired,
elementValue: PropTypes.string,
labelText: PropTypes.string.isRequired,
changeFunc: PropTypes.func.isRequired,
withDictionary: PropTypes.bool
};
//--------------------
//Интерфейс компонента
//--------------------
export { IUDFormTextField };

View File

@ -1,5 +1,5 @@
/* /*
Парус 8 - Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
Дополнительная разметка и вёрстка клиентских элементов Дополнительная разметка и вёрстка клиентских элементов
*/ */
@ -8,7 +8,7 @@
//--------------------- //---------------------
import React from "react"; //Классы React import React from "react"; //Классы React
import { Stack, IconButton, Icon, Typography } from "@mui/material"; //Интерфейсные компоненты import { Stack, IconButton, Icon, Link } from "@mui/material"; //Интерфейсные компоненты
//--------- //---------
//Константы //Константы
@ -20,19 +20,27 @@ export const STYLES = {
}; };
//Статусы диалогового окна //Статусы диалогового окна
export const Statuses = { CREATE: 0, EDIT: 1, DELETE: 2, COLUMNROW_CREATE: 3, COLUMNROW_EDIT: 4, COLUMNROW_DELETE: 5 }; export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, COLUMNROW_CREATE: 3, COLUMNROW_EDIT: 4, COLUMNROW_DELETE: 5 };
//----------- //-----------
//Тело модуля //Тело модуля
//----------- //-----------
//Генерация представления ячейки c данными //Генерация представления ячейки c данными
export const dataCellRender = ({ row, columnDef }, editCR, deleteCR) => { export const dataCellRender = ({ row, columnDef }, showRrpConfSctnMrk, editCR, deleteCR) => {
let data = row[columnDef.name]; let data = row[columnDef.name];
columnDef.name != "SROW_NAME" && data != undefined && columnDef.visible == true columnDef.name != "SROW_NAME" && data != undefined && columnDef.visible == true
? (data = ( ? (data = (
<Stack direction="row"> <Stack direction="row">
<Typography width="-webkit-fill-available">{row[columnDef.name]}</Typography> <Link
component="button"
width="-webkit-fill-available"
onClick={() => {
showRrpConfSctnMrk(row["NRN_" + columnDef.name.substring(5)]);
}}
>
{row[columnDef.name]}
</Link>
<IconButton justifyContent="flex-end" onClick={() => editCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}> <IconButton justifyContent="flex-end" onClick={() => editCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}>
<Icon>edit</Icon> <Icon>edit</Icon>
</IconButton> </IconButton>

View File

@ -1,5 +1,6 @@
/* /*
Парус 8 - Редактор настройки регламентированного отчёта Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
Панель мониторинга: Корневая панель редактора
*/ */
//--------------------- //---------------------
@ -12,10 +13,10 @@ import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
import { NavigationCtx } from "../../context/navigation"; //Контекст навигации import { NavigationCtx } from "../../context/navigation"; //Контекст навигации
import { CustomTabPanel } from "./custom_tab_panel"; //Кастомный Tab import { SectionTabPanel } from "./section_tab_panel"; //Кастомный Tab
import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { ApplicationСtx } from "../../context/application"; //Контекст приложения
import { Statuses, dataCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов import { STATUSES, dataCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов
import { CustomDialog } from "./custom_dialog"; //Кастомное диалоговое окно import { IUDFormDialog } from "./iud_form_dialog"; //Кастомное диалоговое окно
//----------- //-----------
//Тело модуля //Тело модуля
@ -93,7 +94,7 @@ const RrpConfEditor = () => {
const { executeStored } = useContext(BackEndСtx); const { executeStored } = useContext(BackEndСtx);
//Подключение к контексту приложения //Подключение к контексту приложения
const { pOnlineShowDictionary } = useContext(ApplicationСtx); const { pOnlineShowDictionary, pOnlineShowUnit } = useContext(ApplicationСtx);
//Подключение к контексту навигации //Подключение к контексту навигации
const { getNavigationSearch } = useContext(NavigationCtx); const { getNavigationSearch } = useContext(NavigationCtx);
@ -105,37 +106,37 @@ const RrpConfEditor = () => {
//Отработка нажатия на кнопку добавления секции //Отработка нажатия на кнопку добавления секции
const addSectionClick = () => { const addSectionClick = () => {
setFormData({ status: Statuses.CREATE, prn: Number(getNavigationSearch().NRN) }); setFormData({ status: STATUSES.CREATE, prn: Number(getNavigationSearch().NRN) });
openForm(); openForm();
}; };
//Отработка нажатия на кнопку исправления секции //Отработка нажатия на кнопку исправления секции
const editSectionClick = (rn, code, name) => { const editSectionClick = (rn, code, name) => {
setFormData({ rn: rn, code: code, name: name, status: Statuses.EDIT }); setFormData({ rn: rn, code: code, name: name, status: STATUSES.EDIT });
openForm(); openForm();
}; };
//Отработка нажатия на кнопку удаления секции //Отработка нажатия на кнопку удаления секции
const deleteSectionClick = (rn, code, name) => { const deleteSectionClick = (rn, code, name) => {
setFormData({ rn: rn, code: code, name: name, status: Statuses.DELETE }); setFormData({ rn: rn, code: code, name: name, status: STATUSES.DELETE });
openForm(); openForm();
}; };
//Отработка нажатия на кнопку добавления показателя раздела //Отработка нажатия на кнопку добавления показателя раздела
const addColumnRowClick = (prn, sctnCode, sctnName) => { const addColumnRowClick = (prn, sctnCode, sctnName) => {
setFormData({ status: Statuses.COLUMNROW_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName }); setFormData({ status: STATUSES.COLUMNROW_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName });
openForm(); openForm();
}; };
//Отработка нажатия на кнопку исправления показателя раздела //Отработка нажатия на кнопку исправления показателя раздела
const editColumnRowClick = (rn, name) => { const editColumnRowClick = (rn, name) => {
setFormData({ status: Statuses.COLUMNROW_EDIT, rn: rn, name: name }); setFormData({ status: STATUSES.COLUMNROW_EDIT, rn: rn, name: name });
openForm(); openForm();
}; };
//Отработка нажатия на кнопку удаления показателя раздела //Отработка нажатия на кнопку удаления показателя раздела
const deleteColumnRowClick = (rn, name) => { const deleteColumnRowClick = (rn, name) => {
setFormData({ status: Statuses.COLUMNROW_DELETE, rn: rn, name: name }); setFormData({ status: STATUSES.COLUMNROW_DELETE, rn: rn, name: name });
openForm(); openForm();
}; };
@ -174,9 +175,9 @@ const RrpConfEditor = () => {
//Нажатие на кнопку подтверждения создания/исправления/удаления на форме //Нажатие на кнопку подтверждения создания/исправления/удаления на форме
const formBtnOkClick = () => { const formBtnOkClick = () => {
let formStateProps = {}; let formStateProps = {};
if (formData.status === (Statuses.CREATE || Statuses.EDIT || Statuses.COLUMNROW_CREATE)) if (formData.status === (STATUSES.CREATE || STATUSES.EDIT || STATUSES.COLUMNROW_CREATE))
formStateProps = { ...formStateProps, code: document.querySelector("#code-outlined").value }; formStateProps = { ...formStateProps, code: document.querySelector("#code-outlined").value };
if (formData.status === (Statuses.CREATE || Statuses.EDIT || Statuses.COLUMNROW_CREATE || Statuses.COLUMNROW_EDIT)) if (formData.status === (STATUSES.CREATE || STATUSES.EDIT || STATUSES.COLUMNROW_CREATE || STATUSES.COLUMNROW_EDIT))
formStateProps = { ...formStateProps, name: document.querySelector("#name-outlined").value }; formStateProps = { ...formStateProps, name: document.querySelector("#name-outlined").value };
setFormData(pv => ({ setFormData(pv => ({
...pv, ...pv,
@ -198,40 +199,40 @@ const RrpConfEditor = () => {
const changeSections = useCallback(async () => { const changeSections = useCallback(async () => {
if (formData.filled) { if (formData.filled) {
switch (formData.status) { switch (formData.status) {
case Statuses.CREATE: case STATUSES.CREATE:
insertSections(); insertSections();
clearFormData(); clearFormData();
break; break;
case Statuses.EDIT: case STATUSES.EDIT:
updateSections(); updateSections();
clearFormData(); clearFormData();
break; break;
case Statuses.DELETE: case STATUSES.DELETE:
deleteSections(); deleteSections();
clearFormData(); clearFormData();
break; break;
case Statuses.COLUMNROW_CREATE: case STATUSES.COLUMNROW_CREATE:
addColumnRow(); addColumnRow();
clearFormData(); clearFormData();
break; break;
case Statuses.COLUMNROW_EDIT: case STATUSES.COLUMNROW_EDIT:
editColumnRow(); editColumnRow();
clearFormData(); clearFormData();
break; break;
case Statuses.COLUMNROW_DELETE: case STATUSES.COLUMNROW_DELETE:
deleteColumnRow(); deleteColumnRow();
clearFormData(); clearFormData();
break; break;
} }
setRrpDoc(pv => ({ ...pv, reload: true })); setRrpDoc(pv => ({ ...pv, reload: true }));
} }
// eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [formData]); }, [formData]);
//Добавление раздела //Добавление раздела
const insertSections = useCallback(async () => { const insertSections = useCallback(async () => {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_SECTIONS", stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT",
args: { args: {
NPRN: formData.prn, NPRN: formData.prn,
SCODE: formData.code, SCODE: formData.code,
@ -247,7 +248,7 @@ const RrpConfEditor = () => {
//Исправление раздела //Исправление раздела
const updateSections = useCallback(async () => { const updateSections = useCallback(async () => {
await executeStored({ await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_SECTIONS", stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE",
args: { args: {
NRN: formData.rn, NRN: formData.rn,
SCODE: formData.code, SCODE: formData.code,
@ -259,7 +260,7 @@ const RrpConfEditor = () => {
//Удаление раздела //Удаление раздела
const deleteSections = useCallback(async () => { const deleteSections = useCallback(async () => {
await executeStored({ await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_SECTIONS", stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE",
args: { args: {
NRN: formData.rn NRN: formData.rn
} }
@ -269,7 +270,7 @@ const RrpConfEditor = () => {
//Добавление показателя раздела //Добавление показателя раздела
const addColumnRow = useCallback(async () => { const addColumnRow = useCallback(async () => {
await executeStored({ await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_COLUMNROW", stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT",
args: { args: {
NPRN: formData.prn, NPRN: formData.prn,
SCODE: formData.code, SCODE: formData.code,
@ -285,20 +286,20 @@ const RrpConfEditor = () => {
//Исправление показателя раздела //Исправление показателя раздела
const editColumnRow = useCallback(async () => { const editColumnRow = useCallback(async () => {
await executeStored({ await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_COLUMNROW", stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE",
args: { NRN: formData.rn, SNAME: formData.name } args: { NRN: formData.rn, SNAME: formData.name }
}); });
}, [executeStored, formData.name, formData.rn]); }, [executeStored, formData.name, formData.rn]);
//Удаление показателя раздела //Удаление показателя раздела
const deleteColumnRow = useCallback(async () => { const deleteColumnRow = useCallback(async () => {
await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_COLUMNROW", args: { NRN: formData.rn } }); await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE", args: { NRN: formData.rn } });
}, [executeStored, formData.rn]); }, [executeStored, formData.rn]);
//Получение мнемокода и наименования показателя раздела //Получение мнемокода и наименования показателя раздела
const getSctnMrkCodeName = useCallback(async () => { const getSctnMrkCodeName = useCallback(async () => {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.GET_RRPCONFSCTNMRK_CODE_NAME", stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME",
args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode } args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode }
}); });
setFormData(pv => ({ setFormData(pv => ({
@ -380,9 +381,22 @@ const RrpConfEditor = () => {
})); }));
setTabValue(tabFocus); setTabValue(tabFocus);
} }
// eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]); }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);
//Отбор показателя раздела по ид.
const showRrpConfSctnMrk = async rn => {
const data = await executeStored({
stored: "PKG_P8PANELS_RRPCONFED.SELECT_RRPCONFSCTNMRK",
args: {
NRN: rn
}
});
if (data.NIDENT) {
pOnlineShowUnit({ unitCode: "RRPConfigSectionMark", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] });
} else showMsgErr(TEXTS.NO_DATA_FOUND);
};
//При необходимости обновить данные таблицы //При необходимости обновить данные таблицы
useEffect(() => { useEffect(() => {
loadData(); loadData();
@ -395,7 +409,7 @@ const RrpConfEditor = () => {
//Получение наименования и мнемокода показателя раздела при заполнении необходимых полей //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей
useEffect(() => { useEffect(() => {
formData.status == Statuses.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode formData.status == STATUSES.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode
? getSctnMrkCodeName() ? getSctnMrkCodeName()
: null; : null;
}, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]); }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);
@ -404,7 +418,7 @@ const RrpConfEditor = () => {
return ( return (
<Box sx={{ width: "100%" }}> <Box sx={{ width: "100%" }}>
{formOpen ? ( {formOpen ? (
<CustomDialog <IUDFormDialog
formOpen={formOpen} formOpen={formOpen}
closeForm={closeForm} closeForm={closeForm}
curStatus={formData.status} curStatus={formData.status}
@ -450,10 +464,8 @@ const RrpConfEditor = () => {
</Stack> </Stack>
{rrpDoc.sections.map((s, i) => { {rrpDoc.sections.map((s, i) => {
return ( return (
<CustomTabPanel key={s.rn} value={tabValue} index={i}> <SectionTabPanel key={s.rn} value={tabValue} index={i}>
<Button variant="contained" onClick={() => addColumnRowClick(s.rn, s.code, s.name)}> <Button onClick={() => addColumnRowClick(s.rn, s.code, s.name)}>+ Добавить</Button>
+ Добавить
</Button>
{s.dataLoaded ? ( {s.dataLoaded ? (
<P8PDataGrid <P8PDataGrid
{...P8P_DATA_GRID_CONFIG_PROPS} {...P8P_DATA_GRID_CONFIG_PROPS}
@ -462,10 +474,12 @@ const RrpConfEditor = () => {
rows={s.rows} rows={s.rows}
size={P8P_DATA_GRID_SIZE.LARGE} size={P8P_DATA_GRID_SIZE.LARGE}
reloading={s.reload} reloading={s.reload}
dataCellRender={prms => dataCellRender({ ...prms }, editColumnRowClick, deleteColumnRowClick)} dataCellRender={prms =>
dataCellRender({ ...prms }, showRrpConfSctnMrk, editColumnRowClick, deleteColumnRowClick)
}
/> />
) : null} ) : null}
</CustomTabPanel> </SectionTabPanel>
); );
})} })}
</Box> </Box>

View File

@ -1,5 +1,6 @@
/* /*
Кастомный Tab Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
Панель мониторинга: Компонент вкладки раздела
*/ */
//--------------------- //---------------------
@ -10,11 +11,11 @@ import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента import PropTypes from "prop-types"; //Контроль свойств компонента
import { Box, Typography } from "@mui/material"; //Интерфейсные компоненты import { Box, Typography } from "@mui/material"; //Интерфейсные компоненты
//----------- //---------------
//Тело модуля //Тело компонента
//----------- //---------------
const CustomTabPanel = props => { const SectionTabPanel = props => {
const { children, value, index, ...other } = props; const { children, value, index, ...other } = props;
return ( return (
@ -28,14 +29,15 @@ const CustomTabPanel = props => {
); );
}; };
CustomTabPanel.propTypes = { //Контроль свойств - Вкладка раздела
SectionTabPanel.propTypes = {
children: PropTypes.node, children: PropTypes.node,
index: PropTypes.number.isRequired, index: PropTypes.number.isRequired,
value: PropTypes.number.isRequired value: PropTypes.number.isRequired
}; };
//---------------- //--------------------
//Интерфейс модуля //Интерфейс компонента
//---------------- //--------------------
export { CustomTabPanel }; export { SectionTabPanel };