diff --git a/db/UDO_PKG_EQUIPDS_BASE.pck b/db/UDO_PKG_EQUIPDS_BASE.pck
index cecc019..fed2c4c 100644
--- a/db/UDO_PKG_EQUIPDS_BASE.pck
+++ b/db/UDO_PKG_EQUIPDS_BASE.pck
@@ -351,6 +351,16 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
)
is
begin
+ /* Удалим файлы */
+ for C in (select T.RN from UDO_T_EQUIPDSCMFL T where T.PRN = NRN)
+ loop
+ CMFL_DEL(NRN => C.RN);
+ end loop;
+ /* Удалим модели */
+ for C in (select T.RN from UDO_T_EQUIPDSCMML T where T.PRN = NRN)
+ loop
+ CMML_DEL(NRN => C.RN);
+ end loop;
/* Удалим запись */
delete from UDO_T_EQUIPDSCM T where T.RN = NRN;
end CM_DEL;
@@ -457,9 +467,14 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
)
is
begin
+ /* Удалим историю */
+ for C in (select T.RN from UDO_T_EQUIPDSCMMLH T where T.PRN = NRN)
+ loop
+ CMMLH_DEL(NRN => C.RN);
+ end loop;
/* Удалим запись */
delete from UDO_T_EQUIPDSCMML T where T.RN = NRN;
- end CMML_DEL;
+ end CMML_DEL;
/* Базовая установка фактической точности "Выборки данных оборудования (классы оборудования, модели)" */
procedure CMML_SET_PRECISION_F
diff --git a/db/UDO_PKG_EQUIPTCF.pck b/db/UDO_PKG_EQUIPTCF.pck
index 858f592..7deff7a 100644
--- a/db/UDO_PKG_EQUIPTCF.pck
+++ b/db/UDO_PKG_EQUIPTCF.pck
@@ -81,8 +81,7 @@ text="Проверка прав доступа при формировании
else
0
end NHASCHILDREN,
- M.OBJ_KIND NOBJ_KIND,
- 0 NSHOW_CARD
+ M.OBJ_KIND NOBJ_KIND
from EQCONFIG M,
EQOBJLEVEL OL
where M.PR_OBJ_LEVEL = OL.RN(+)
@@ -105,29 +104,20 @@ text="Проверка прав доступа при формировании
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'label',
SVALUE => 'Минуточку...')));
- else
- XCHILD := null;
+ /* Соберём лист */
+ XLEAF := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
+ SNAME => 'children',
+ RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
+ RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'id',
+ SVALUE => C.NRN),
+ RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'label',
+ SVALUE => C.SNAME)),
+ RNODE00 => XCHILD);
+ /* Соберём листы в ветку */
+ XRES := PKG_XMAKE.CONCAT(ICURSOR => NCUR, RNODE00 => XRES, RNODE01 => XLEAF);
end if;
- /* Для технического объекта, не имеющего дочерних - соберём признак отображения карточки */
- if ((C.NHASCHILDREN = 0) and (C.NOBJ_KIND is not null)) then
- C.NSHOW_CARD := 1;
- end if;
- /* Соберём лист */
- XLEAF := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
- SNAME => 'children',
- RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
- RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
- SNAME => 'id',
- SVALUE => C.NRN),
- RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
- SNAME => 'label',
- SVALUE => C.SNAME),
- RATTRIBUTE02 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
- SNAME => 'showCard',
- NVALUE => C.NSHOW_CARD)),
- RNODE00 => XCHILD);
- /* Соберём листы в ветку */
- XRES := PKG_XMAKE.CONCAT(ICURSOR => NCUR, RNODE00 => XRES, RNODE01 => XLEAF);
end loop;
/* Вернём собранное */
return XRES;
diff --git a/panels/eqs_tech_cond_forecast/admin_tab.js b/panels/eqs_tech_cond_forecast/admin_tab.js
index 1e8192d..d62e05c 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab.js
@@ -264,14 +264,16 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
-
- add
-
- {equipDataSelection != DS_RN_DEFAULT ? (
-
- delete
+
+
+ add
- ) : null}
+ {equipDataSelection != DS_RN_DEFAULT ? (
+
+ delete
+
+ ) : null}
+
diff --git a/panels/eqs_tech_cond_forecast/admin_tab_layout.js b/panels/eqs_tech_cond_forecast/admin_tab_layout.js
index 0e40801..7bc7751 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab_layout.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab_layout.js
@@ -102,34 +102,6 @@ const STYLES = {
//Вспомогательные функции и компоненты
//------------------------------------
-//Кнопка с дополнительной подписью
-const ExtraCaptionButton = ({ caption, title, subtitle, maxWidth, onClick, theme }) => {
- //При нажатии на кнопку
- const handleClick = () => (onClick ? onClick() : null);
-
- //Генерация содержимого
- return (
-
-
-
- {title} {subtitle}
-
-
- );
-};
-
-//Контроль свойств - Кнопка с дополнительной подписью
-ExtraCaptionButton.propTypes = {
- caption: PropTypes.string.isRequired,
- title: PropTypes.string.isRequired,
- subtitle: PropTypes.string.isRequired,
- maxWidth: PropTypes.string,
- onClick: PropTypes.func,
- theme: PropTypes.object.isRequired
-};
-
//Формирование значения для колонки "Состояние" файла класса оборудования выборки данных
const formatFileStateValue = (theme, value, err) => {
const [text, icon, color] =
@@ -166,7 +138,7 @@ const filesListDataCellRender = ({ row, columnDef, theme }) => {
};
//Форматирование колонок таблицы моделей класса оборудования выборки данных
-const modelsListDataCellRender = ({ row, columnDef, theme, card, onDelete, onSendRq }) => {
+const modelsListDataCellRender = ({ row, columnDef, theme, onDelete, onSendRq }) => {
switch (columnDef.name) {
case "NSTATUS":
return {
@@ -180,16 +152,7 @@ const modelsListDataCellRender = ({ row, columnDef, theme, card, onDelete, onSen
(onDelete ? onDelete(row.NRN) : null)}>
delete
- {row.NSTATUS == 0 ? (
- (onSendRq ? onSendRq(row.NRN) : null)}
- theme={theme}
- />
- ) : null}
+ {row.NSTATUS == 0 ? : null}
)
};
@@ -541,30 +504,11 @@ const EquipDataSelectionClassMachineCard = ({
Файлы данных
-
-
-
+
+
+
+
+
{
//Подключение к контексту приложения
const { pOnlineShowUnit } = useContext(ApplicationСtx);
- //Подключение к API дерева
- const apiRef = useTreeViewApiRef();
-
//Собственное состояние - текущая загружаемая ветка
const [loadingTreeItem, setLoadingTreeItem] = useState(0);
@@ -122,14 +117,7 @@ const ForecastTab = ({ onGoToAdmin }) => {
isExpanded && needLoadLevel(eQconfigTree, itemId) ? setLoadingTreeItem(parseInt(itemId)) : null;
//Обработка фокусировки на элементе дерева
- const handleTreeItemFocus = (event, itemId) => {
- const item = findTreeItem(eQconfigTree, itemId);
- if (item && item?.showCard) setTechObjCardId(parseInt(itemId));
- else {
- setTechObjCardId(null);
- setTechObjSpec({ ...TECH_OBJ_SPEC_INIT, parent: parseInt(itemId) });
- }
- };
+ const handleTreeItemFocus = (event, itemId) => setTechObjSpec({ ...TECH_OBJ_SPEC_INIT, parent: parseInt(itemId) });
//При изменении состояния фильтров спецификации технических объектов
const handleTechObjSpecFilterChanged = ({ filters }) => setTechObjSpec(pv => ({ ...pv, filters: [...filters], pageNumber: 1 }));
@@ -144,15 +132,14 @@ const ForecastTab = ({ onGoToAdmin }) => {
const handleCMMLStatusClick = (event, row) => {
if (row.NCMML_STATUS == 0) {
if (onGoToAdmin) onGoToAdmin();
- } else {
- const item = findTreeItem(eQconfigTree, row.NRN);
- if (item && item?.showCard) apiRef.current?.focusItem(event, item.id);
- else setTechObjCardId(parseInt(row.NRN));
- }
+ } else setTechObjCardId(parseInt(row.NRN));
};
//При переходе к закладке администрирования из карточки технического объекта
- const handleTechObjeCardGoToModel = model => (onGoToAdmin ? onGoToAdmin(model.NEQUIPDS, model.NEQUIPDSCM) : null);
+ const handleTechObjeCardGoToModel = model => {
+ handleTechObjeCardClose();
+ if (onGoToAdmin) onGoToAdmin(model.NEQUIPDS, model.NEQUIPDSCM);
+ };
//При запросе прогноза по модели из карточки технического объекта
const handleTechObjeCardGetPrediction = async model => {
@@ -199,28 +186,22 @@ const ForecastTab = ({ onGoToAdmin }) => {
-
+
- {techObjCardId ? (
- !techObjCardIsLoading ? (
-
- ) : null
- ) : techObjsDataGrid.init ? (
+ {techObjCardId && !techObjCardIsLoading && techObjCard?.SCODE ? (
+
+ ) : null}
+ {techObjsDataGrid.init ? (
{
setLoading(true);
const data = await executeStored({
stored: "UDO_PKG_EQUIPTCF.EQCONFIG_THOBJ_CARD",
- args: {
- NEQCONFIG: id
- },
+ args: { NEQCONFIG: id },
respArg: "COUT",
- loader: false
+ loader: true
});
setCard(data.techObj ? data.techObj : {});
} finally {
diff --git a/panels/eqs_tech_cond_forecast/forecast_tab_layout.js b/panels/eqs_tech_cond_forecast/forecast_tab_layout.js
index f8022d8..a3d1fef 100644
--- a/panels/eqs_tech_cond_forecast/forecast_tab_layout.js
+++ b/panels/eqs_tech_cond_forecast/forecast_tab_layout.js
@@ -9,23 +9,7 @@
import React, { useState, useEffect, useContext } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
-import {
- Stack,
- Icon,
- Box,
- Card,
- CardContent,
- Typography,
- CardActions,
- Button,
- IconButton,
- Divider,
- Link,
- Dialog,
- DialogTitle,
- DialogContent,
- DialogActions
-} from "@mui/material"; //Интерфейсные компоненты
+import { Stack, Card, CardContent, Typography, Button, Link, Dialog, DialogTitle, DialogContent, DialogActions } from "@mui/material"; //Интерфейсные компоненты
import { useTheme } from "@mui/material/styles"; //Темы оформления
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы и константы
@@ -41,18 +25,17 @@ import { P8PChart } from "../../components/p8p_chart"; //График
//Стили
const STYLES = {
- TECH_OBJ_CARD_TITLE: { fontSize: 14 },
- TECH_OBJ_CARD_SUB_TITLE: { mb: 1.5 },
- EQ_ML_TABLE: {
- maxHeight: "200px",
+ TECH_OBJ_CARD_DIALOG: { maxWidth: "800px" },
+ TECH_OBJ_CARD_ML_TABLE: {
+ maxHeight: "300px",
...SCROLL_STYLES
},
- EQ_FORECAST_TABLE: {
- maxHeight: "200px",
+ TECH_OBJ_CARD_FORECAST_TABLE: {
+ maxHeight: "300px",
...SCROLL_STYLES
},
- EQ_FORECAST_DETAIL_DIALOG: { maxWidth: "600px" },
- EQ_FORECAST_DETAIL_CHART: { width: "550px", display: "flex", justifyContent: "center" }
+ TECH_OBJ_FORECAST_DETAIL_DIALOG: { maxWidth: "600px" },
+ TECH_OBJ_FORECAST_DETAIL_CHART: { width: "550px", display: "flex", justifyContent: "center" }
};
//------------------------------------
@@ -139,9 +122,9 @@ const ForecastDetail = ({ date, forecast, onClose }) => {
//Генерация содержимого
return (
-