Панель - контроль прав доступа, удаление файлов данных, возможность переформирования файлов данных
Исправлена ошибка с "лишним" запросом к серверу на получение списка выборок данных
This commit is contained in:
parent
6e2a28e900
commit
f35d39fefa
@ -12,6 +12,7 @@ import PropTypes from "prop-types"; //Контроль свойств компо
|
|||||||
import { Box, Grid, Stack, Icon, Button, IconButton } from "@mui/material"; //Интерфейсные компоненты
|
import { Box, Grid, Stack, Icon, Button, IconButton } from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
||||||
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с серверомs
|
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с серверомs
|
||||||
|
import { P8PAppInlineError } from "../../components/p8p_app_message"; //Встраиваемое сообщение об ошибке
|
||||||
import { DS_RN_DEFAULT, useEquipDataSelectionList } from "./eqs_tech_cond_forecast_hooks"; //Общие вспомогательные хуки
|
import { DS_RN_DEFAULT, useEquipDataSelectionList } from "./eqs_tech_cond_forecast_hooks"; //Общие вспомогательные хуки
|
||||||
import {
|
import {
|
||||||
EquipDataSelectionIU,
|
EquipDataSelectionIU,
|
||||||
@ -75,7 +76,9 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
|
|||||||
const [equipDataSelectionClassMachine, setDataSelectionClassMachine] = useState(dataSelectionClassMachine);
|
const [equipDataSelectionClassMachine, setDataSelectionClassMachine] = useState(dataSelectionClassMachine);
|
||||||
|
|
||||||
//Загрузка списка выборок данных
|
//Загрузка списка выборок данных
|
||||||
const { equipDataSelectionList } = useEquipDataSelectionList(refresh.dataSelection);
|
const { equipDataSelectionList, equipDataSelectionListIsLoading, equipDataSelectionListAccess } = useEquipDataSelectionList(
|
||||||
|
refresh.dataSelection
|
||||||
|
);
|
||||||
|
|
||||||
//Загрузка классов оборудования выбранной выборки данных
|
//Загрузка классов оборудования выбранной выборки данных
|
||||||
const { equipDataSelectionClassMachineList } = useEquipDataSelectionClassMachineList(equipDataSelection, refresh.dataSelectionClassMachine);
|
const { equipDataSelectionClassMachineList } = useEquipDataSelectionClassMachineList(equipDataSelection, refresh.dataSelectionClassMachine);
|
||||||
@ -164,16 +167,43 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
|
|||||||
setDataSelectionClassMachine(data.NRN);
|
setDataSelectionClassMachine(data.NRN);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Отработка результатов выполнения пользовательской процедуры формирования данных выборки
|
||||||
|
const processMakeEquipDataSelectionClassMachineFilesResults = async (equipDSCM, dataSetIdent, dataSetConfigIdent, clear) => {
|
||||||
|
await executeStored({
|
||||||
|
stored: "UDO_PKG_EQUIPDS.CMFL_MAKE",
|
||||||
|
args: {
|
||||||
|
NEQUIPDSCM: equipDSCM,
|
||||||
|
NDATASET_IDENT: dataSetIdent,
|
||||||
|
NDATASET_CONFIG_IDENT: dataSetConfigIdent,
|
||||||
|
NCLEAR: clear
|
||||||
|
}
|
||||||
|
});
|
||||||
|
setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 }));
|
||||||
|
};
|
||||||
|
|
||||||
//При нажатии "Сформировать" в списке файлов карточки класса оборудования
|
//При нажатии "Сформировать" в списке файлов карточки класса оборудования
|
||||||
const handleMakeEquipDataSelectionClassMachineFiles = (equipDSCM, procedure) => {
|
const handleMakeEquipDataSelectionClassMachineFiles = (equipDSCM, procedure, clear) => {
|
||||||
pOnlineUserProcedure({
|
pOnlineUserProcedure({
|
||||||
code: procedure,
|
code: procedure,
|
||||||
inputParameters: [{ name: "NEQUIPDSCM", value: equipDSCM }],
|
inputParameters: [{ name: "NEQUIPDSCM", value: equipDSCM }],
|
||||||
callBack: res =>
|
callBack: res => {
|
||||||
res.success ? setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 })) : null
|
if (res.success)
|
||||||
|
processMakeEquipDataSelectionClassMachineFilesResults(
|
||||||
|
equipDSCM,
|
||||||
|
res.outParameters.NDATASET_IDENT,
|
||||||
|
res.outParameters.NDATASET_CONFIG_IDENT,
|
||||||
|
clear
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//При нажатии "Удалить" в списке файлов карточки класса оборудования
|
||||||
|
const handleDeleteEquipDataSelectionClassMachineFiles = async equipDSCMFL => {
|
||||||
|
await executeStored({ stored: "UDO_PKG_EQUIPDS.CMFL_DEL", args: { NRN: equipDSCMFL } });
|
||||||
|
setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 }));
|
||||||
|
};
|
||||||
|
|
||||||
//При нажатии "Загрузить на сервер" в списке файлов карточки класса оборудования
|
//При нажатии "Загрузить на сервер" в списке файлов карточки класса оборудования
|
||||||
const handleUploadEquipDataSelectionClassMachineFiles = async equipDSCM => {
|
const handleUploadEquipDataSelectionClassMachineFiles = async equipDSCM => {
|
||||||
await executeStored({ stored: "UDO_PKG_EQUIPDS.CMFL_UPLOAD", args: { NEQUIPDSCM: equipDSCM } });
|
await executeStored({ stored: "UDO_PKG_EQUIPDS.CMFL_UPLOAD", args: { NEQUIPDSCM: equipDSCM } });
|
||||||
@ -249,54 +279,67 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
|
|||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
<Grid container>
|
<Grid container>
|
||||||
<Grid item xs={12}>
|
{equipDataSelectionListIsLoading ? null : !equipDataSelectionListAccess ? (
|
||||||
<Stack direction="row" spacing={2} p={2} sx={STYLES.DATA_SELECTION_STACK}>
|
<Grid item xs={12}>
|
||||||
<EquipDataSelectionList list={equipDataSelectionList} value={equipDataSelection} onChange={handleDataSelectionChange} />
|
<P8PAppInlineError text="У вас нет прав доступа для обучения моделей. Обратитесь к администратору." />
|
||||||
<Stack direction="row" spacing={0}>
|
|
||||||
<IconButton onClick={handleAddEquipDataSelection}>
|
|
||||||
<Icon>add</Icon>
|
|
||||||
</IconButton>
|
|
||||||
{equipDataSelection != DS_RN_DEFAULT ? (
|
|
||||||
<IconButton onClick={handleDeleteEquipDataSelection}>
|
|
||||||
<Icon>delete</Icon>
|
|
||||||
</IconButton>
|
|
||||||
) : null}
|
|
||||||
</Stack>
|
|
||||||
</Stack>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
|
||||||
<Grid container>
|
|
||||||
<Grid item xs={3} hidden={equipDataSelection == DS_RN_DEFAULT}>
|
|
||||||
<Button
|
|
||||||
fullWidth
|
|
||||||
startIcon={<Icon>add</Icon>}
|
|
||||||
sx={STYLES.CLASS_MACHINE_ADD_BUTTON}
|
|
||||||
onClick={handleAddEquipDataSelectionClassMachine}
|
|
||||||
>
|
|
||||||
Класс
|
|
||||||
</Button>
|
|
||||||
<EquipDataSelectionClassMachineList
|
|
||||||
list={equipDataSelectionClassMachineList}
|
|
||||||
value={equipDataSelectionClassMachine}
|
|
||||||
onClick={handleDataSelectionClassMachineClick}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={9} hidden={equipDataSelectionClassMachine == null}>
|
|
||||||
<EquipDataSelectionClassMachineCard
|
|
||||||
card={equipDataSelectionClassMachineCard}
|
|
||||||
filesList={equipDataSelectionClassMachineFilesList}
|
|
||||||
modelsList={equipDataSelectionClassMachineModelsList}
|
|
||||||
onCardDelete={handleDeleteEquipDataSelectionClassMachine}
|
|
||||||
onClassMachineFilesMake={handleMakeEquipDataSelectionClassMachineFiles}
|
|
||||||
onClassMachineFilesUpload={handleUploadEquipDataSelectionClassMachineFiles}
|
|
||||||
onClassMachineFilesSendMd={handleSendMdEquipDataSelectionClassMachineFiles}
|
|
||||||
onClassMachineModelAdd={handleAddEquipDataSelectionClassMachineModel}
|
|
||||||
onClassMachineModelDelete={handleDeleteEquipDataSelectionClassMachineModel}
|
|
||||||
onClassMachineModelSendRq={handleSendRqEquipDataSelectionClassMachineModel}
|
|
||||||
/>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
) : (
|
||||||
|
<>
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<Stack direction="row" spacing={2} p={2} sx={STYLES.DATA_SELECTION_STACK}>
|
||||||
|
<EquipDataSelectionList
|
||||||
|
list={equipDataSelectionList}
|
||||||
|
value={equipDataSelection}
|
||||||
|
onChange={handleDataSelectionChange}
|
||||||
|
/>
|
||||||
|
<Stack direction="row" spacing={0}>
|
||||||
|
<IconButton onClick={handleAddEquipDataSelection}>
|
||||||
|
<Icon>add</Icon>
|
||||||
|
</IconButton>
|
||||||
|
{equipDataSelection != DS_RN_DEFAULT ? (
|
||||||
|
<IconButton onClick={handleDeleteEquipDataSelection}>
|
||||||
|
<Icon>delete</Icon>
|
||||||
|
</IconButton>
|
||||||
|
) : null}
|
||||||
|
</Stack>
|
||||||
|
</Stack>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<Grid container>
|
||||||
|
<Grid item xs={3} hidden={equipDataSelection == DS_RN_DEFAULT}>
|
||||||
|
<Button
|
||||||
|
fullWidth
|
||||||
|
startIcon={<Icon>add</Icon>}
|
||||||
|
sx={STYLES.CLASS_MACHINE_ADD_BUTTON}
|
||||||
|
onClick={handleAddEquipDataSelectionClassMachine}
|
||||||
|
>
|
||||||
|
Класс
|
||||||
|
</Button>
|
||||||
|
<EquipDataSelectionClassMachineList
|
||||||
|
list={equipDataSelectionClassMachineList}
|
||||||
|
value={equipDataSelectionClassMachine}
|
||||||
|
onClick={handleDataSelectionClassMachineClick}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={9} hidden={equipDataSelectionClassMachine == null}>
|
||||||
|
<EquipDataSelectionClassMachineCard
|
||||||
|
card={equipDataSelectionClassMachineCard}
|
||||||
|
filesList={equipDataSelectionClassMachineFilesList}
|
||||||
|
modelsList={equipDataSelectionClassMachineModelsList}
|
||||||
|
onCardDelete={handleDeleteEquipDataSelectionClassMachine}
|
||||||
|
onClassMachineFilesMake={handleMakeEquipDataSelectionClassMachineFiles}
|
||||||
|
onClassMachineFilesDelete={handleDeleteEquipDataSelectionClassMachineFiles}
|
||||||
|
onClassMachineFilesUpload={handleUploadEquipDataSelectionClassMachineFiles}
|
||||||
|
onClassMachineFilesSendMd={handleSendMdEquipDataSelectionClassMachineFiles}
|
||||||
|
onClassMachineModelAdd={handleAddEquipDataSelectionClassMachineModel}
|
||||||
|
onClassMachineModelDelete={handleDeleteEquipDataSelectionClassMachineModel}
|
||||||
|
onClassMachineModelSendRq={handleSendRqEquipDataSelectionClassMachineModel}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
//Подключение библиотек
|
//Подключение библиотек
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
import React, { useState, useContext } from "react"; //Классы React
|
import React, { useState, useContext, useRef } from "react"; //Классы React
|
||||||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
@ -29,7 +29,12 @@ import {
|
|||||||
DialogContent,
|
DialogContent,
|
||||||
DialogActions,
|
DialogActions,
|
||||||
IconButton,
|
IconButton,
|
||||||
Icon
|
Icon,
|
||||||
|
Popper,
|
||||||
|
ButtonGroup,
|
||||||
|
ClickAwayListener,
|
||||||
|
Paper,
|
||||||
|
MenuList
|
||||||
} from "@mui/material"; //Интерфейсные компоненты
|
} from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { useTheme } from "@mui/material/styles"; //Темы оформления
|
import { useTheme } from "@mui/material/styles"; //Темы оформления
|
||||||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
||||||
@ -138,13 +143,23 @@ const formatFileStateValue = (theme, value, err) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Форматирование колонок таблицы файлов класса оборудования выборки данных
|
//Форматирование колонок таблицы файлов класса оборудования выборки данных
|
||||||
const filesListDataCellRender = ({ row, columnDef, theme }) => {
|
const filesListDataCellRender = ({ row, columnDef, theme, onDelete }) => {
|
||||||
switch (columnDef.name) {
|
switch (columnDef.name) {
|
||||||
case "NSTATUS":
|
case "NSTATUS":
|
||||||
return {
|
return {
|
||||||
cellProps: { align: "left" },
|
cellProps: { align: "left" },
|
||||||
data: formatFileStateValue(theme, row.NSTATUS, row.SERR)
|
data: formatFileStateValue(theme, row.NSTATUS, row.SERR)
|
||||||
};
|
};
|
||||||
|
case "SACTIONS":
|
||||||
|
return {
|
||||||
|
data: (
|
||||||
|
<Stack spacing={1} direction={"row"} alignItems={"center"}>
|
||||||
|
<IconButton onClick={() => (onDelete ? onDelete(row.NRN) : null)}>
|
||||||
|
<Icon>delete</Icon>
|
||||||
|
</IconButton>
|
||||||
|
</Stack>
|
||||||
|
)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -183,6 +198,75 @@ const classMachineCardTableHeadCellRender = ({ columnDef }) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Кнопка с всплывающим меню опций
|
||||||
|
const PopUpButton = ({ onClick, options = [], zIndex = 10000 }) => {
|
||||||
|
//Собственное состояние - выбранная опция
|
||||||
|
const [selectedOption, setSelectedOption] = useState(0);
|
||||||
|
|
||||||
|
//Собственное состояние - флаг открытия списка опций
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
|
//Ссылка на группу кнопок для аттача всплывающего меню
|
||||||
|
const anchorRef = useRef(null);
|
||||||
|
|
||||||
|
//Отработка нажатия на кнопку
|
||||||
|
const handleClick = () => (onClick && options[selectedOption] ? onClick(options[selectedOption]) : null);
|
||||||
|
|
||||||
|
//Отработка открытия/закрытия меню опций
|
||||||
|
const handleToggle = () => {
|
||||||
|
setOpen(prevOpen => !prevOpen);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Принудительное закрытие меню опций (с проверкой открытости)
|
||||||
|
const handleClose = event => {
|
||||||
|
if (anchorRef.current && anchorRef.current.contains(event.target)) return;
|
||||||
|
setOpen(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Отработка нажатия на элемент меню опций
|
||||||
|
const handleMenuItemClick = index => {
|
||||||
|
setSelectedOption(index);
|
||||||
|
setOpen(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Генерация содержимого
|
||||||
|
return Array.isArray(options) && options.length > 0 ? (
|
||||||
|
<>
|
||||||
|
<ButtonGroup ref={anchorRef} variant="text">
|
||||||
|
<Button onClick={handleClick}>{options[selectedOption]?.label || ""}</Button>
|
||||||
|
<Button size="small" onClick={handleToggle}>
|
||||||
|
<Icon>arrow_drop_down</Icon>
|
||||||
|
</Button>
|
||||||
|
</ButtonGroup>
|
||||||
|
<Popper open={open} anchorEl={anchorRef.current} sx={{ zIndex }}>
|
||||||
|
<ClickAwayListener onClickAway={handleClose}>
|
||||||
|
<Paper>
|
||||||
|
<MenuList autoFocusItem>
|
||||||
|
{options.map((o, index) => (
|
||||||
|
<MenuItem key={o.code} selected={index === selectedOption} onClick={() => handleMenuItemClick(index)}>
|
||||||
|
{o.label}
|
||||||
|
</MenuItem>
|
||||||
|
))}
|
||||||
|
</MenuList>
|
||||||
|
</Paper>
|
||||||
|
</ClickAwayListener>
|
||||||
|
</Popper>
|
||||||
|
</>
|
||||||
|
) : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
//Контроль свойств - Кнопка с всплывающим меню опций
|
||||||
|
PopUpButton.propTypes = {
|
||||||
|
onClick: PropTypes.func,
|
||||||
|
options: PropTypes.arrayOf(
|
||||||
|
PropTypes.shape({
|
||||||
|
code: PropTypes.string.isRequired,
|
||||||
|
label: PropTypes.string.isRequired
|
||||||
|
})
|
||||||
|
),
|
||||||
|
zIndex: PropTypes.number
|
||||||
|
};
|
||||||
|
|
||||||
//-----------
|
//-----------
|
||||||
//Тело модуля
|
//Тело модуля
|
||||||
//-----------
|
//-----------
|
||||||
@ -452,6 +536,7 @@ const EquipDataSelectionClassMachineCard = ({
|
|||||||
modelsList,
|
modelsList,
|
||||||
onCardDelete,
|
onCardDelete,
|
||||||
onClassMachineFilesMake,
|
onClassMachineFilesMake,
|
||||||
|
onClassMachineFilesDelete,
|
||||||
onClassMachineFilesUpload,
|
onClassMachineFilesUpload,
|
||||||
onClassMachineFilesSendMd,
|
onClassMachineFilesSendMd,
|
||||||
onClassMachineModelAdd,
|
onClassMachineModelAdd,
|
||||||
@ -465,7 +550,8 @@ const EquipDataSelectionClassMachineCard = ({
|
|||||||
const handleCardDeleteClick = () => (onCardDelete ? onCardDelete(card.NRN) : null);
|
const handleCardDeleteClick = () => (onCardDelete ? onCardDelete(card.NRN) : null);
|
||||||
|
|
||||||
//При нажатии на "Сформировать" для файлов данных
|
//При нажатии на "Сформировать" для файлов данных
|
||||||
const handleClassMachineFilesMakeClick = () => (onClassMachineFilesMake ? onClassMachineFilesMake(card.NRN, card.SUSERPROCS_DATA) : null);
|
const handleClassMachineFilesMakeClick = option =>
|
||||||
|
onClassMachineFilesMake ? onClassMachineFilesMake(card.NRN, card.SUSERPROCS_DATA, option.code === "CLEAR_AND_MAKE" ? 1 : 0) : null;
|
||||||
|
|
||||||
//При нажатии на "Загрузить на сервер" для файлов данных
|
//При нажатии на "Загрузить на сервер" для файлов данных
|
||||||
const handleClassMachineFilesUploadClick = () => (onClassMachineFilesUpload ? onClassMachineFilesUpload(card.NRN) : null);
|
const handleClassMachineFilesUploadClick = () => (onClassMachineFilesUpload ? onClassMachineFilesUpload(card.NRN) : null);
|
||||||
@ -473,6 +559,9 @@ const EquipDataSelectionClassMachineCard = ({
|
|||||||
//При нажатии на "Загрузить на сервер" для файлов данных
|
//При нажатии на "Загрузить на сервер" для файлов данных
|
||||||
const handleClassMachineFilesSendMdClick = () => (onClassMachineFilesSendMd ? onClassMachineFilesSendMd(card.NRN) : null);
|
const handleClassMachineFilesSendMdClick = () => (onClassMachineFilesSendMd ? onClassMachineFilesSendMd(card.NRN) : null);
|
||||||
|
|
||||||
|
//При нажатии на "Удалить" для файлов данных
|
||||||
|
const handleClassMachineFilesDeleteClick = equipDSCMFL => (onClassMachineFilesDelete ? onClassMachineFilesDelete(equipDSCMFL) : null);
|
||||||
|
|
||||||
//При нажатии на "Добавить" для моделей
|
//При нажатии на "Добавить" для моделей
|
||||||
const handleClassMachineModelAddClick = () => (onClassMachineModelAdd ? onClassMachineModelAdd() : null);
|
const handleClassMachineModelAddClick = () => (onClassMachineModelAdd ? onClassMachineModelAdd() : null);
|
||||||
|
|
||||||
@ -502,7 +591,13 @@ const EquipDataSelectionClassMachineCard = ({
|
|||||||
Файлы данных
|
Файлы данных
|
||||||
</Typography>
|
</Typography>
|
||||||
<Stack spacing={0} direction={"row"}>
|
<Stack spacing={0} direction={"row"}>
|
||||||
<Button onClick={handleClassMachineFilesMakeClick}>Сформировать</Button>
|
<PopUpButton
|
||||||
|
onClick={handleClassMachineFilesMakeClick}
|
||||||
|
options={[
|
||||||
|
{ code: "MAKE", label: "Сформировать" },
|
||||||
|
{ code: "CLEAR_AND_MAKE", label: "Переформировать" }
|
||||||
|
]}
|
||||||
|
/>
|
||||||
<Button onClick={handleClassMachineFilesUploadClick}>Загрузить на сервер</Button>
|
<Button onClick={handleClassMachineFilesUploadClick}>Загрузить на сервер</Button>
|
||||||
<Button onClick={handleClassMachineFilesSendMdClick}>Передать фреймворку</Button>
|
<Button onClick={handleClassMachineFilesSendMdClick}>Передать фреймворку</Button>
|
||||||
</Stack>
|
</Stack>
|
||||||
@ -517,7 +612,7 @@ const EquipDataSelectionClassMachineCard = ({
|
|||||||
fixedHeader={true}
|
fixedHeader={true}
|
||||||
reloading={false}
|
reloading={false}
|
||||||
headCellRender={classMachineCardTableHeadCellRender}
|
headCellRender={classMachineCardTableHeadCellRender}
|
||||||
dataCellRender={prms => filesListDataCellRender({ ...prms, theme })}
|
dataCellRender={prms => filesListDataCellRender({ ...prms, theme, onDelete: handleClassMachineFilesDeleteClick })}
|
||||||
/>
|
/>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
@ -565,6 +660,7 @@ EquipDataSelectionClassMachineCard.propTypes = {
|
|||||||
modelsList: PropTypes.object.isRequired,
|
modelsList: PropTypes.object.isRequired,
|
||||||
onCardDelete: PropTypes.func,
|
onCardDelete: PropTypes.func,
|
||||||
onClassMachineFilesMake: PropTypes.func,
|
onClassMachineFilesMake: PropTypes.func,
|
||||||
|
onClassMachineFilesDelete: PropTypes.func,
|
||||||
onClassMachineFilesUpload: PropTypes.func,
|
onClassMachineFilesUpload: PropTypes.func,
|
||||||
onClassMachineFilesSendMd: PropTypes.func,
|
onClassMachineFilesSendMd: PropTypes.func,
|
||||||
onClassMachineModelAdd: PropTypes.func,
|
onClassMachineModelAdd: PropTypes.func,
|
||||||
|
@ -44,7 +44,7 @@ const useEquipDataSelectionList = refresh => {
|
|||||||
const [isLoading, setLoading] = useState(false);
|
const [isLoading, setLoading] = useState(false);
|
||||||
|
|
||||||
//Собственное состояние - данные
|
//Собственное состояние - данные
|
||||||
const [data, setData] = useState([DS_DEFAULT]);
|
const [data, setData] = useState({ list: [DS_DEFAULT], access: false });
|
||||||
|
|
||||||
//Подключение к контексту взаимодействия с сервером
|
//Подключение к контексту взаимодействия с сервером
|
||||||
const { executeStored } = useContext(BackEndСtx);
|
const { executeStored } = useContext(BackEndСtx);
|
||||||
@ -61,16 +61,16 @@ const useEquipDataSelectionList = refresh => {
|
|||||||
attributeValueProcessor: (name, val) => (["SNAME"].includes(name) ? undefined : val),
|
attributeValueProcessor: (name, val) => (["SNAME"].includes(name) ? undefined : val),
|
||||||
loader: false
|
loader: false
|
||||||
});
|
});
|
||||||
setData([DS_DEFAULT, ...(data?.XDS ? data.XDS : [])]);
|
setData({ list: [DS_DEFAULT, ...(data?.XDS ? data.XDS : [])], access: data?.NACCESS == 1 ? true : false });
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
loadData();
|
if (refresh > 0) loadData();
|
||||||
}, [refresh, executeStored]);
|
}, [refresh, executeStored]);
|
||||||
|
|
||||||
//Вернём данные
|
//Вернём данные
|
||||||
return { equipDataSelectionList: data, equipDataSelectionListIsLoading: isLoading };
|
return { equipDataSelectionList: data.list, equipDataSelectionListIsLoading: isLoading, equipDataSelectionListAccess: data.access };
|
||||||
};
|
};
|
||||||
|
|
||||||
//----------------
|
//----------------
|
||||||
|
@ -15,6 +15,7 @@ import { ApplicationСtx } from "../../context/application"; //Контекст
|
|||||||
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с серверомs
|
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с серверомs
|
||||||
import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
|
import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
|
||||||
import { BUTTONS, TEXTS } from "../../../app.text"; //Текстовые ресурсы и константы
|
import { BUTTONS, TEXTS } from "../../../app.text"; //Текстовые ресурсы и константы
|
||||||
|
import { P8PAppInlineError } from "../../components/p8p_app_message"; //Встраиваемое сообщение об ошибке
|
||||||
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
|
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 { formatDateRF, xml2JSON } from "../../core/utils"; //Вспомогательные функции
|
import { formatDateRF, xml2JSON } from "../../core/utils"; //Вспомогательные функции
|
||||||
@ -641,7 +642,7 @@ const TechObjMakeDataSet = ({ eqobjKind, measureUnit, onOk, onCancel }) => {
|
|||||||
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
//Загрузка списка выборок данных
|
//Загрузка списка выборок данных
|
||||||
const { equipDataSelectionList } = useEquipDataSelectionList(true);
|
const { equipDataSelectionList, equipDataSelectionListIsLoading, equipDataSelectionListAccess } = useEquipDataSelectionList(true);
|
||||||
|
|
||||||
//Собственное состояние - значения формы
|
//Собственное состояние - значения формы
|
||||||
const [values, setValues] = useState({
|
const [values, setValues] = useState({
|
||||||
@ -667,94 +668,100 @@ const TechObjMakeDataSet = ({ eqobjKind, measureUnit, onOk, onCancel }) => {
|
|||||||
<Dialog open={true} onClose={() => (onOk ? onCancel() : null)}>
|
<Dialog open={true} onClose={() => (onOk ? onCancel() : null)}>
|
||||||
<DialogTitle>Регистрация выборки данных класса технического объекта</DialogTitle>
|
<DialogTitle>Регистрация выборки данных класса технического объекта</DialogTitle>
|
||||||
<DialogContent sx={STYLES.TECH_OBJ_MAKE_DATASET_DIALOG_CONTENT}>
|
<DialogContent sx={STYLES.TECH_OBJ_MAKE_DATASET_DIALOG_CONTENT}>
|
||||||
<IUDFormTextField
|
{equipDataSelectionListIsLoading ? null : equipDataSelectionListAccess ? (
|
||||||
elementCode={"dataSet"}
|
<>
|
||||||
elementValue={values.dataSet}
|
<IUDFormTextField
|
||||||
labelText={"Выборка данных"}
|
elementCode={"dataSet"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.dataSet}
|
||||||
list={equipDataSelectionList.filter(item => item.NRN != DS_RN_DEFAULT).map(item => item.SCODE)}
|
labelText={"Выборка данных"}
|
||||||
freeSolo={true}
|
onChange={handleValueChanged}
|
||||||
/>
|
list={equipDataSelectionList.filter(item => item.NRN != DS_RN_DEFAULT).map(item => item.SCODE)}
|
||||||
<IUDFormTextField
|
freeSolo={true}
|
||||||
elementCode={"eqobjKind"}
|
/>
|
||||||
elementValue={values.eqobjKind}
|
<IUDFormTextField
|
||||||
labelText={"Класс оборудования"}
|
elementCode={"eqobjKind"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.eqobjKind}
|
||||||
disabled
|
labelText={"Класс оборудования"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
disabled
|
||||||
elementCode={"measureUnit"}
|
/>
|
||||||
elementValue={values.measureUnit}
|
<IUDFormTextField
|
||||||
labelText={"Едница измерения выборки"}
|
elementCode={"measureUnit"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.measureUnit}
|
||||||
dictionary={callBack => selectMeasureUnit(pOnlineShowDictionary, "measureUnit", callBack)}
|
labelText={"Едница измерения выборки"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
dictionary={callBack => selectMeasureUnit(pOnlineShowDictionary, "measureUnit", callBack)}
|
||||||
elementCode={"userprocsData"}
|
/>
|
||||||
elementValue={values.userprocsData}
|
<IUDFormTextField
|
||||||
labelText={"Процедура формирования"}
|
elementCode={"userprocsData"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.userprocsData}
|
||||||
dictionary={callBack => selectUserProcsData(pOnlineShowDictionary, "userprocsData", callBack)}
|
labelText={"Процедура формирования"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
dictionary={callBack => selectUserProcsData(pOnlineShowDictionary, "userprocsData", callBack)}
|
||||||
elementCode={"exsServiceUpload"}
|
/>
|
||||||
elementValue={values.exsServiceUpload}
|
<IUDFormTextField
|
||||||
labelText={"Сервис обмена для выгрузки данных"}
|
elementCode={"exsServiceUpload"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.exsServiceUpload}
|
||||||
disabled
|
labelText={"Сервис обмена для выгрузки данных"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
disabled
|
||||||
elementCode={"exsServiceFnUpload"}
|
/>
|
||||||
elementValue={values.exsServiceFnUpload}
|
<IUDFormTextField
|
||||||
labelText={"Функция обмена для выгрузки данных"}
|
elementCode={"exsServiceFnUpload"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.exsServiceFnUpload}
|
||||||
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnUpload", callBack)}
|
labelText={"Функция обмена для выгрузки данных"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnUpload", callBack)}
|
||||||
elementCode={"exsServiceSendMd"}
|
/>
|
||||||
elementValue={values.exsServiceSendMd}
|
<IUDFormTextField
|
||||||
labelText={"Сервис обмена для передачи внешней системе"}
|
elementCode={"exsServiceSendMd"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.exsServiceSendMd}
|
||||||
disabled
|
labelText={"Сервис обмена для передачи внешней системе"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
disabled
|
||||||
elementCode={"exsServiceFnSendMd"}
|
/>
|
||||||
elementValue={values.exsServiceFnSendMd}
|
<IUDFormTextField
|
||||||
labelText={"Функция обмена для передачи внешней системе"}
|
elementCode={"exsServiceFnSendMd"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.exsServiceFnSendMd}
|
||||||
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnSendMd", callBack)}
|
labelText={"Функция обмена для передачи внешней системе"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnSendMd", callBack)}
|
||||||
elementCode={"exsServiceSendRq"}
|
/>
|
||||||
elementValue={values.exsServiceSendRq}
|
<IUDFormTextField
|
||||||
labelText={"Сервис обмена для обработки внешней системой"}
|
elementCode={"exsServiceSendRq"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.exsServiceSendRq}
|
||||||
disabled
|
labelText={"Сервис обмена для обработки внешней системой"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
disabled
|
||||||
elementCode={"exsServiceFnSendRq"}
|
/>
|
||||||
elementValue={values.exsServiceFnSendRq}
|
<IUDFormTextField
|
||||||
labelText={"Функция обмена для обработки внешней системой"}
|
elementCode={"exsServiceFnSendRq"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.exsServiceFnSendRq}
|
||||||
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnSendRq", callBack)}
|
labelText={"Функция обмена для обработки внешней системой"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
dictionary={callBack => selectServiceFn(pOnlineShowDictionary, "exsServiceFnSendRq", callBack)}
|
||||||
elementCode={"task"}
|
/>
|
||||||
elementValue={values.task}
|
<IUDFormTextField
|
||||||
labelText={"Задача"}
|
elementCode={"task"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.task}
|
||||||
list={TASK_LIST}
|
labelText={"Задача"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
<IUDFormTextField
|
list={TASK_LIST}
|
||||||
elementCode={"precisionP"}
|
/>
|
||||||
elementValue={values.precisionP}
|
<IUDFormTextField
|
||||||
labelText={"Точность"}
|
elementCode={"precisionP"}
|
||||||
onChange={handleValueChanged}
|
elementValue={values.precisionP}
|
||||||
type={"number"}
|
labelText={"Точность"}
|
||||||
/>
|
onChange={handleValueChanged}
|
||||||
|
type={"number"}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<P8PAppInlineError text="У вас нет прав доступа для обучения моделей. Обратитесь к администратору." />
|
||||||
|
)}
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button onClick={() => (onOk ? onOk(values) : null)}>{BUTTONS.OK}</Button>
|
{equipDataSelectionListAccess ? <Button onClick={() => (onOk ? onOk(values) : null)}>{BUTTONS.OK}</Button> : null}
|
||||||
<Button onClick={() => (onOk ? onCancel() : null)}>{BUTTONS.CANCEL}</Button>
|
<Button onClick={() => (onOk ? onCancel() : null)}>{BUTTONS.CANCEL}</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user