ЦИТК-823 правки по примечанию от 10.06.24
This commit is contained in:
parent
faf1c9d6e7
commit
95a2578d11
@ -7,11 +7,12 @@
|
|||||||
//Подключение библиотек
|
//Подключение библиотек
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
import React, { useState, useContext } from "react"; //Классы React
|
import React, { useState, useContext, useCallback, useEffect } 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 { MessagingСtx } from "../../context/messaging";
|
//import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
|
||||||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
||||||
|
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
|
||||||
import { IUDFormTextField } from "./iud_form_text_field"; //Кастомные строки ввода
|
import { IUDFormTextField } from "./iud_form_text_field"; //Кастомные строки ввода
|
||||||
import { STATUSES } from "./layouts"; //Статусы и стили диалогового окна
|
import { STATUSES } from "./layouts"; //Статусы и стили диалогового окна
|
||||||
|
|
||||||
@ -21,91 +22,20 @@ import { STATUSES } from "./layouts"; //Статусы и стили диало
|
|||||||
|
|
||||||
//Стили
|
//Стили
|
||||||
const STYLES = {
|
const STYLES = {
|
||||||
DIALOG_ACTIONS: { justifyContent: "center" },
|
|
||||||
CLOSE_BUTTON: {
|
CLOSE_BUTTON: {
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
right: 8,
|
right: 8,
|
||||||
top: 8,
|
top: 8,
|
||||||
color: theme => theme.palette.grey[500]
|
color: theme => theme.palette.grey[500]
|
||||||
}
|
},
|
||||||
};
|
PADDING_DIALOG_BUTTONS_RIGHT: { paddingRight: "32px" }
|
||||||
|
|
||||||
//Выбор подразделения
|
|
||||||
// const selectInsDepartment = (showDictionary, callBack) => {
|
|
||||||
// showDictionary({
|
|
||||||
// unitCode: "INS_DEPARTMENT",
|
|
||||||
// callBack: res => (res.success === true ? callBack(res.outParameters.out_CODE) : callBack(null))
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
|
|
||||||
//Выбор строки
|
|
||||||
const selectRow = (showDictionary, callBack) => {
|
|
||||||
showDictionary({
|
|
||||||
unitCode: "RRPRow",
|
|
||||||
callBack: res =>
|
|
||||||
res.success === true
|
|
||||||
? callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION)
|
|
||||||
: callBack(null)
|
|
||||||
});
|
|
||||||
// pOnlineShowDictionary({
|
|
||||||
// unitCode: "RRPRow",
|
|
||||||
// callBack: res =>
|
|
||||||
// res.success === true
|
|
||||||
// ? setFormData(pv => ({
|
|
||||||
// ...pv,
|
|
||||||
// rowCode: res.outParameters.out_CODE,
|
|
||||||
// rowVCode: res.outParameters.out_RRPVERSION_CODE,
|
|
||||||
// rowVRn: res.outParameters.out_RRPVERSION
|
|
||||||
// }))
|
|
||||||
// : null
|
|
||||||
// });
|
|
||||||
};
|
|
||||||
|
|
||||||
//Выбор графы
|
|
||||||
const selectColumn = (showDictionary, callBack) => {
|
|
||||||
showDictionary({
|
|
||||||
unitCode: "RRPColumn",
|
|
||||||
callBack: res =>
|
|
||||||
res.success === true
|
|
||||||
? callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION)
|
|
||||||
: callBack(null)
|
|
||||||
});
|
|
||||||
// pOnlineShowDictionary({
|
|
||||||
// unitCode: "RRPColumn",
|
|
||||||
// callBack: res =>
|
|
||||||
// res.success === true
|
|
||||||
// ? setFormData(pv => ({
|
|
||||||
// ...pv,
|
|
||||||
// colCode: res.outParameters.out_CODE,
|
|
||||||
// colVCode: res.outParameters.out_RRPVERSION_CODE,
|
|
||||||
// colVRn: res.outParameters.out_RRPVERSION
|
|
||||||
// }))
|
|
||||||
// : null
|
|
||||||
// });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------
|
//---------------
|
||||||
//Тело компонента
|
//Тело компонента
|
||||||
//---------------
|
//---------------
|
||||||
|
|
||||||
const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
const IUDFormDialog = ({ initial, onClose, onReload }) => {
|
||||||
//Свойства компонента
|
|
||||||
// const {
|
|
||||||
// formOpen,
|
|
||||||
// closeForm,
|
|
||||||
// curStatus,
|
|
||||||
// curCode,
|
|
||||||
// curName,
|
|
||||||
// curColCode,
|
|
||||||
// curRowCode,
|
|
||||||
// btnOkClick,
|
|
||||||
// codeOnChange,
|
|
||||||
// nameOnChange,
|
|
||||||
// dictColumnClick,
|
|
||||||
// dictRowClick
|
|
||||||
|
|
||||||
// } = props;
|
|
||||||
|
|
||||||
//Собственное состояние
|
//Собственное состояние
|
||||||
const [formData, setFormData] = useState({ ...initial });
|
const [formData, setFormData] = useState({ ...initial });
|
||||||
|
|
||||||
@ -115,11 +45,122 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
|||||||
//Подключение к контексту приложения
|
//Подключение к контексту приложения
|
||||||
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
|
//Подключение к контексту взаимодействия с сервером
|
||||||
|
const { executeStored } = useContext(BackEndСtx);
|
||||||
|
|
||||||
//При закрытии диалога без изменений
|
//При закрытии диалога без изменений
|
||||||
const handleCancel = () => (onCancel ? onCancel() : null);
|
const handleCancel = () => (onClose ? onClose() : null);
|
||||||
|
|
||||||
//При закрытии диалога с изменениями
|
//При закрытии диалога с изменениями
|
||||||
const handleOK = () => (onOk ? onOk(formData) : null);
|
const handleOK = () => {
|
||||||
|
if (onClose) {
|
||||||
|
changeSections();
|
||||||
|
onClose();
|
||||||
|
} else null;
|
||||||
|
};
|
||||||
|
|
||||||
|
//Отработка добавления/изсправления/удаления элемента
|
||||||
|
const handleReload = () => {
|
||||||
|
if (onReload) {
|
||||||
|
onReload(formData);
|
||||||
|
} else null;
|
||||||
|
};
|
||||||
|
|
||||||
|
//При изменении значения элемента
|
||||||
|
const handleDialogItemChange = (item, value) => setFormData(pv => ({ ...pv, [item]: value }));
|
||||||
|
|
||||||
|
//Отработка изменений в разделе или показателе раздела
|
||||||
|
const changeSections = useCallback(async () => {
|
||||||
|
switch (formData.status) {
|
||||||
|
case STATUSES.CREATE:
|
||||||
|
await insertSections();
|
||||||
|
break;
|
||||||
|
case STATUSES.EDIT:
|
||||||
|
await updateSections();
|
||||||
|
break;
|
||||||
|
case STATUSES.DELETE:
|
||||||
|
await deleteSections();
|
||||||
|
break;
|
||||||
|
case STATUSES.RRPCONFSCTNMRK_CREATE:
|
||||||
|
await addRRPCONFSCTNMRK();
|
||||||
|
break;
|
||||||
|
case STATUSES.RRPCONFSCTNMRK_EDIT:
|
||||||
|
await editRRPCONFSCTNMRK();
|
||||||
|
break;
|
||||||
|
case STATUSES.RRPCONFSCTNMRK_DELETE:
|
||||||
|
await deleteRRPCONFSCTNMRK();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
handleReload();
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [formData]);
|
||||||
|
|
||||||
|
//Добавление раздела
|
||||||
|
const insertSections = useCallback(async () => {
|
||||||
|
const data = await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT",
|
||||||
|
args: {
|
||||||
|
NPRN: formData.prn,
|
||||||
|
SCODE: formData.code,
|
||||||
|
SNAME: formData.name
|
||||||
|
}
|
||||||
|
});
|
||||||
|
setFormData(pv => ({
|
||||||
|
...pv,
|
||||||
|
rn: Number(data.NRN)
|
||||||
|
}));
|
||||||
|
}, [formData.prn, formData.code, formData.name, executeStored]);
|
||||||
|
|
||||||
|
//Исправление раздела
|
||||||
|
const updateSections = useCallback(async () => {
|
||||||
|
await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE",
|
||||||
|
args: {
|
||||||
|
NRN: formData.rn,
|
||||||
|
SCODE: formData.code,
|
||||||
|
SNAME: formData.name
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [formData.name, formData.code, formData.rn, executeStored]);
|
||||||
|
|
||||||
|
//Удаление раздела
|
||||||
|
const deleteSections = useCallback(async () => {
|
||||||
|
await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE",
|
||||||
|
args: {
|
||||||
|
NRN: formData.rn
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [formData.rn, executeStored]);
|
||||||
|
|
||||||
|
//Добавление показателя раздела
|
||||||
|
const addRRPCONFSCTNMRK = useCallback(async () => {
|
||||||
|
await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT",
|
||||||
|
args: {
|
||||||
|
NPRN: formData.prn,
|
||||||
|
SCODE: formData.code,
|
||||||
|
SNAME: formData.name,
|
||||||
|
SCOLCODE: formData.colCode,
|
||||||
|
SCOLVER: formData.colVCode,
|
||||||
|
SROWCODE: formData.rowCode,
|
||||||
|
SROWVER: formData.rowVCode
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);
|
||||||
|
|
||||||
|
//Исправление показателя раздела
|
||||||
|
const editRRPCONFSCTNMRK = useCallback(async () => {
|
||||||
|
await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE",
|
||||||
|
args: { NRN: formData.rn, SNAME: formData.name }
|
||||||
|
});
|
||||||
|
}, [executeStored, formData.name, formData.rn]);
|
||||||
|
|
||||||
|
//Удаление показателя раздела
|
||||||
|
const deleteRRPCONFSCTNMRK = useCallback(async () => {
|
||||||
|
await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE", args: { NRN: formData.rn } });
|
||||||
|
}, [executeStored, formData.rn]);
|
||||||
|
|
||||||
//Формирование заголовка диалогового окна
|
//Формирование заголовка диалогового окна
|
||||||
const formTitle = () => {
|
const formTitle = () => {
|
||||||
@ -130,11 +171,11 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
|||||||
return "Исправление раздела";
|
return "Исправление раздела";
|
||||||
case STATUSES.DELETE:
|
case STATUSES.DELETE:
|
||||||
return "Удаление раздела";
|
return "Удаление раздела";
|
||||||
case STATUSES.COLUMNROW_CREATE:
|
case STATUSES.RRPCONFSCTNMRK_CREATE:
|
||||||
return "Добавление показателя раздела";
|
return "Добавление показателя раздела";
|
||||||
case STATUSES.COLUMNROW_EDIT:
|
case STATUSES.RRPCONFSCTNMRK_EDIT:
|
||||||
return "Исправление показателя раздела";
|
return "Исправление показателя раздела";
|
||||||
case STATUSES.COLUMNROW_DELETE:
|
case STATUSES.RRPCONFSCTNMRK_DELETE:
|
||||||
return "Удаление показателя раздела";
|
return "Удаление показателя раздела";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -144,21 +185,85 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
|||||||
var btnText = "";
|
var btnText = "";
|
||||||
switch (formData.status) {
|
switch (formData.status) {
|
||||||
case STATUSES.CREATE:
|
case STATUSES.CREATE:
|
||||||
case STATUSES.COLUMNROW_CREATE:
|
case STATUSES.RRPCONFSCTNMRK_CREATE:
|
||||||
btnText = "Добавить";
|
btnText = "Добавить";
|
||||||
break;
|
break;
|
||||||
case STATUSES.EDIT:
|
case STATUSES.EDIT:
|
||||||
case STATUSES.COLUMNROW_EDIT:
|
case STATUSES.RRPCONFSCTNMRK_EDIT:
|
||||||
btnText = "Исправить";
|
btnText = "Исправить";
|
||||||
break;
|
break;
|
||||||
case STATUSES.DELETE:
|
case STATUSES.DELETE:
|
||||||
case STATUSES.COLUMNROW_DELETE:
|
case STATUSES.RRPCONFSCTNMRK_DELETE:
|
||||||
btnText = "Удалить";
|
btnText = "Удалить";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return <Button onClick={handleOK}>{btnText}</Button>;
|
return (
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
handleOK({ formData });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{btnText}
|
||||||
|
</Button>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Выбор строки
|
||||||
|
const selectRow = (showDictionary, callBack) => {
|
||||||
|
showDictionary({
|
||||||
|
unitCode: "RRPRow",
|
||||||
|
callBack: res => {
|
||||||
|
if (res.success === true) {
|
||||||
|
callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);
|
||||||
|
setFormData(pv => ({
|
||||||
|
...pv,
|
||||||
|
rowCode: res.outParameters.out_CODE,
|
||||||
|
rowVCode: res.outParameters.out_RRPVERSION_CODE,
|
||||||
|
rowVRn: res.outParameters.out_RRPVERSION
|
||||||
|
}));
|
||||||
|
} else callBack(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//Выбор графы
|
||||||
|
const selectColumn = (showDictionary, callBack) => {
|
||||||
|
showDictionary({
|
||||||
|
unitCode: "RRPColumn",
|
||||||
|
callBack: res => {
|
||||||
|
if (res.success === true) {
|
||||||
|
callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);
|
||||||
|
setFormData(pv => ({
|
||||||
|
...pv,
|
||||||
|
colCode: res.outParameters.out_CODE,
|
||||||
|
colVCode: res.outParameters.out_RRPVERSION_CODE,
|
||||||
|
colVRn: res.outParameters.out_RRPVERSION
|
||||||
|
}));
|
||||||
|
} else callBack(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//Получение мнемокода и наименования показателя раздела
|
||||||
|
const getSctnMrkCodeName = useCallback(async () => {
|
||||||
|
const data = await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME",
|
||||||
|
args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode }
|
||||||
|
});
|
||||||
|
setFormData(pv => ({
|
||||||
|
...pv,
|
||||||
|
code: data.SCODE,
|
||||||
|
name: data.SNAME
|
||||||
|
}));
|
||||||
|
}, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]);
|
||||||
|
|
||||||
|
//Получение наименования и мнемокода показателя раздела при заполнении необходимых полей
|
||||||
|
useEffect(() => {
|
||||||
|
formData.status == STATUSES.RRPCONFSCTNMRK_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode
|
||||||
|
? getSctnMrkCodeName()
|
||||||
|
: null;
|
||||||
|
}, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog open onClose={handleCancel}>
|
<Dialog open onClose={handleCancel}>
|
||||||
<DialogTitle>{formTitle()}</DialogTitle>
|
<DialogTitle>{formTitle()}</DialogTitle>
|
||||||
@ -166,7 +271,7 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
|||||||
<Icon>close</Icon>
|
<Icon>close</Icon>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
{formData.status == STATUSES.DELETE || formData.status == STATUSES.COLUMNROW_DELETE ? (
|
{formData.status == STATUSES.DELETE || formData.status == STATUSES.RRPCONFSCTNMRK_DELETE ? (
|
||||||
formData.status == STATUSES.DELETE ? (
|
formData.status == STATUSES.DELETE ? (
|
||||||
<Typography>Вы хотите удалить раздел {formData.name}?</Typography>
|
<Typography>Вы хотите удалить раздел {formData.name}?</Typography>
|
||||||
) : (
|
) : (
|
||||||
@ -174,24 +279,34 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
|||||||
)
|
)
|
||||||
) : (
|
) : (
|
||||||
<div>
|
<div>
|
||||||
{formData.status != STATUSES.COLUMNROW_EDIT ? (
|
{formData.status != STATUSES.RRPCONFSCTNMRK_EDIT ? (
|
||||||
<IUDFormTextField elementCode="code" elementValue={formData.code} labelText="Мнемокод" onChange={handleOK} />
|
<IUDFormTextField
|
||||||
|
elementCode="code"
|
||||||
|
elementValue={formData.code}
|
||||||
|
labelText="Мнемокод"
|
||||||
|
onChange={handleDialogItemChange}
|
||||||
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
<IUDFormTextField elementCode="name" elementValue={formData.name} labelText="Наименование" onChange={handleOK} />
|
<IUDFormTextField
|
||||||
{formData.status == STATUSES.COLUMNROW_CREATE ? (
|
elementCode="name"
|
||||||
|
elementValue={formData.name}
|
||||||
|
labelText="Наименование"
|
||||||
|
onChange={handleDialogItemChange}
|
||||||
|
/>
|
||||||
|
{formData.status == STATUSES.RRPCONFSCTNMRK_CREATE ? (
|
||||||
<div>
|
<div>
|
||||||
<IUDFormTextField
|
<IUDFormTextField
|
||||||
elementCode="row"
|
elementCode="row"
|
||||||
elementValue={formData.rowCode}
|
elementValue={formData.rowCode}
|
||||||
labelText="Строка"
|
labelText="Строка"
|
||||||
onChange={handleOK}
|
onChange={handleDialogItemChange}
|
||||||
dictionary={callBack => selectRow(pOnlineShowDictionary, callBack)}
|
dictionary={callBack => selectRow(pOnlineShowDictionary, callBack)}
|
||||||
/>
|
/>
|
||||||
<IUDFormTextField
|
<IUDFormTextField
|
||||||
elementCode="column"
|
elementCode="column"
|
||||||
elementValue={formData.colCode}
|
elementValue={formData.colCode}
|
||||||
labelText="Графа"
|
labelText="Графа"
|
||||||
onChange={handleOK}
|
onChange={handleDialogItemChange}
|
||||||
dictionary={callBack => selectColumn(pOnlineShowDictionary, callBack)}
|
dictionary={callBack => selectColumn(pOnlineShowDictionary, callBack)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -210,8 +325,8 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => {
|
|||||||
//Контроль свойств - Диалог
|
//Контроль свойств - Диалог
|
||||||
IUDFormDialog.propTypes = {
|
IUDFormDialog.propTypes = {
|
||||||
initial: PropTypes.object.isRequired,
|
initial: PropTypes.object.isRequired,
|
||||||
onOk: PropTypes.func,
|
onClose: PropTypes.func,
|
||||||
onCancel: PropTypes.func
|
onReload: PropTypes.func
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------
|
//--------------------
|
||||||
|
@ -7,10 +7,18 @@
|
|||||||
//Подключение библиотек
|
//Подключение библиотек
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
import React, { useState, useCallback, useEffect } from "react"; //Классы React
|
import React, { useState, useEffect } from "react"; //Классы React
|
||||||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||||||
import { Box, FormControl, InputLabel, Input, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты
|
import { Box, FormControl, InputLabel, Input, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { STYLES } from "./layouts"; //Стили диалогового окна
|
|
||||||
|
//---------
|
||||||
|
//Константы
|
||||||
|
//---------
|
||||||
|
|
||||||
|
//Стили
|
||||||
|
export const STYLES = {
|
||||||
|
DIALOG_WINDOW_WIDTH: { width: 400 }
|
||||||
|
};
|
||||||
|
|
||||||
//---------------
|
//---------------
|
||||||
//Тело компонента
|
//Тело компонента
|
||||||
@ -20,16 +28,6 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict
|
|||||||
//Значение элемента
|
//Значение элемента
|
||||||
const [value, setValue] = useState(elementValue);
|
const [value, setValue] = useState(elementValue);
|
||||||
|
|
||||||
//Формирование идентификатора элемента
|
|
||||||
// const generateId = useCallback(async () => {
|
|
||||||
// setElementId(`${elementCode}-input`);
|
|
||||||
// }, [elementCode]);
|
|
||||||
|
|
||||||
//При рендере поля ввода
|
|
||||||
// useEffect(() => {
|
|
||||||
// generateId();
|
|
||||||
// }, [generateId]);
|
|
||||||
|
|
||||||
//При получении нового значения из вне
|
//При получении нового значения из вне
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setValue(elementValue);
|
setValue(elementValue);
|
||||||
@ -47,12 +45,12 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ p: 1 }}>
|
<Box sx={{ p: 1 }}>
|
||||||
<FormControl sx={STYLES.DIALOG_WINDOW_WIDTH} {...other}>
|
<FormControl variant="standard" sx={STYLES.DIALOG_WINDOW_WIDTH} {...other}>
|
||||||
<InputLabel htmlFor={elementCode}>{labelText}</InputLabel>
|
<InputLabel htmlFor={elementCode}>{labelText}</InputLabel>
|
||||||
<Input
|
<Input
|
||||||
id={elementCode}
|
id={elementCode}
|
||||||
name={elementCode}
|
name={elementCode}
|
||||||
value={value}
|
value={value ? value : ""}
|
||||||
endAdornment={
|
endAdornment={
|
||||||
dictionary ? (
|
dictionary ? (
|
||||||
<InputAdornment position="end">
|
<InputAdornment position="end">
|
||||||
@ -62,9 +60,9 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict
|
|||||||
</InputAdornment>
|
</InputAdornment>
|
||||||
) : null
|
) : null
|
||||||
}
|
}
|
||||||
aria-describedby={`${elementCode}-helper-text`}
|
|
||||||
label={labelText}
|
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
|
multiline
|
||||||
|
maxRows={4}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
</Box>
|
</Box>
|
||||||
|
@ -8,19 +8,20 @@
|
|||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
import React from "react"; //Классы React
|
import React from "react"; //Классы React
|
||||||
import { Stack, IconButton, Icon, Link } from "@mui/material"; //Интерфейсные компоненты
|
import { Box, IconButton, Icon, Link } from "@mui/material"; //Интерфейсные компоненты
|
||||||
|
|
||||||
//---------
|
//---------
|
||||||
//Константы
|
//Константы
|
||||||
//---------
|
//---------
|
||||||
|
|
||||||
|
//Стили
|
||||||
export const STYLES = {
|
export const STYLES = {
|
||||||
DIALOG_WINDOW_WIDTH: { width: 400 },
|
BOX_ROW: { display: "flex", justifyContent: "center", alignItems: "center" },
|
||||||
PADDING_DIALOG_BUTTONS_RIGHT: { paddingRight: "32px" }
|
LINK_STYLE: { component: "button", width: "-webkit-fill-available" }
|
||||||
};
|
};
|
||||||
|
|
||||||
//Статусы диалогового окна
|
//Статусы диалогового окна
|
||||||
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, RRPCONFSCTNMRK_CREATE: 3, RRPCONFSCTNMRK_EDIT: 4, RRPCONFSCTNMRK_DELETE: 5 };
|
||||||
|
|
||||||
//-----------
|
//-----------
|
||||||
//Тело модуля
|
//Тело модуля
|
||||||
@ -29,13 +30,11 @@ export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, COLUMNROW_CREATE: 3, CO
|
|||||||
//Генерация представления ячейки c данными
|
//Генерация представления ячейки c данными
|
||||||
export const dataCellRender = ({ row, columnDef }, showRrpConfSctnMrk, editCR, deleteCR) => {
|
export const dataCellRender = ({ row, columnDef }, showRrpConfSctnMrk, editCR, deleteCR) => {
|
||||||
let data = row[columnDef.name];
|
let data = row[columnDef.name];
|
||||||
let cellStyle = { display: "flex" };
|
|
||||||
columnDef.name != "SROW_NAME" && data != undefined && columnDef.visible == true
|
columnDef.name != "SROW_NAME" && data != undefined && columnDef.visible == true
|
||||||
? (data = (
|
? (data = (
|
||||||
<Stack direction="row">
|
<Box sx={STYLES.BOX_ROW}>
|
||||||
<Link
|
<Link
|
||||||
component="button"
|
sx={STYLES.LINK_STYLE}
|
||||||
width="-webkit-fill-available"
|
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
showRrpConfSctnMrk(row["NRN_" + columnDef.name.substring(5)]);
|
showRrpConfSctnMrk(row["NRN_" + columnDef.name.substring(5)]);
|
||||||
}}
|
}}
|
||||||
@ -48,7 +47,7 @@ export const dataCellRender = ({ row, columnDef }, showRrpConfSctnMrk, editCR, d
|
|||||||
<IconButton onClick={() => deleteCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}>
|
<IconButton onClick={() => deleteCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}>
|
||||||
<Icon>delete</Icon>
|
<Icon>delete</Icon>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</Stack>
|
</Box>
|
||||||
))
|
))
|
||||||
: null;
|
: null;
|
||||||
return { data };
|
return { data };
|
||||||
|
@ -13,10 +13,23 @@ 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 { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
|
||||||
|
import { TEXTS } from "../../../app.text"; //Текстовые константы
|
||||||
import { SectionTabPanel } from "./section_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 { IUDFormDialog } from "./iud_form_dialog"; //Кастомное диалоговое окно
|
import { IUDFormDialog } from "./iud_form_dialog"; //Кастомное диалоговое окно
|
||||||
|
import { STYLES as COMMON_STYLES } from "./layouts";
|
||||||
|
|
||||||
|
//---------
|
||||||
|
//Константы
|
||||||
|
//---------
|
||||||
|
|
||||||
|
//Стили
|
||||||
|
export const STYLES = {
|
||||||
|
TABS_BOTTOM_LINE: { borderBottom: 1, borderColor: "divider" },
|
||||||
|
TABS_PADDING: { paddingTop: 1, paddingBottom: 1 }
|
||||||
|
};
|
||||||
|
|
||||||
//-----------
|
//-----------
|
||||||
//Тело модуля
|
//Тело модуля
|
||||||
@ -55,7 +68,6 @@ const RrpConfEditor = () => {
|
|||||||
|
|
||||||
//Состояние диалогового окна
|
//Состояние диалогового окна
|
||||||
const [formData, setFormData] = useState({
|
const [formData, setFormData] = useState({
|
||||||
filled: false,
|
|
||||||
rn: "",
|
rn: "",
|
||||||
prn: "",
|
prn: "",
|
||||||
sctnName: "",
|
sctnName: "",
|
||||||
@ -78,17 +90,24 @@ const RrpConfEditor = () => {
|
|||||||
setForm(true);
|
setForm(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
//Закрытие диалогового окна
|
|
||||||
const closeForm = () => {
|
|
||||||
setForm(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
//Очистка диалогового окна
|
//Очистка диалогового окна
|
||||||
const clearFormData = () => {
|
const clearFormData = () => {
|
||||||
setFormData({
|
setFormData({
|
||||||
rn: "",
|
rn: "",
|
||||||
|
prn: "",
|
||||||
|
sctnName: "",
|
||||||
|
sctnCode: "",
|
||||||
|
status: "",
|
||||||
code: "",
|
code: "",
|
||||||
name: ""
|
name: "",
|
||||||
|
colName: "",
|
||||||
|
colCode: "",
|
||||||
|
colVCode: "",
|
||||||
|
colVRn: 0,
|
||||||
|
rowName: "",
|
||||||
|
rowCode: "",
|
||||||
|
rowVCode: "",
|
||||||
|
rowVRn: 0
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -96,11 +115,14 @@ const RrpConfEditor = () => {
|
|||||||
const { executeStored } = useContext(BackEndСtx);
|
const { executeStored } = useContext(BackEndСtx);
|
||||||
|
|
||||||
//Подключение к контексту приложения
|
//Подключение к контексту приложения
|
||||||
const { pOnlineShowDictionary, pOnlineShowUnit } = useContext(ApplicationСtx);
|
const { pOnlineShowUnit } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
//Подключение к контексту навигации
|
//Подключение к контексту навигации
|
||||||
const { getNavigationSearch } = useContext(NavigationCtx);
|
const { getNavigationSearch } = useContext(NavigationCtx);
|
||||||
|
|
||||||
|
//Подключение к контексту сообщений
|
||||||
|
const { showMsgErr } = useContext(MessagingСtx);
|
||||||
|
|
||||||
//Переключение раздела
|
//Переключение раздела
|
||||||
const handleChange = (event, newValue) => {
|
const handleChange = (event, newValue) => {
|
||||||
setTabValue(newValue);
|
setTabValue(newValue);
|
||||||
@ -125,38 +147,23 @@ const RrpConfEditor = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Отработка нажатия на кнопку добавления показателя раздела
|
//Отработка нажатия на кнопку добавления показателя раздела
|
||||||
const addColumnRowClick = (prn, sctnCode, sctnName) => {
|
const addRRPCONFSCTNMRKClick = (prn, sctnCode, sctnName) => {
|
||||||
setFormData({ status: STATUSES.COLUMNROW_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName });
|
setFormData({ status: STATUSES.RRPCONFSCTNMRK_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName });
|
||||||
openForm();
|
openForm();
|
||||||
};
|
};
|
||||||
|
|
||||||
//Отработка нажатия на кнопку исправления показателя раздела
|
//Отработка нажатия на кнопку исправления показателя раздела
|
||||||
const editColumnRowClick = (rn, name) => {
|
const editRRPCONFSCTNMRKClick = (rn, name) => {
|
||||||
setFormData({ status: STATUSES.COLUMNROW_EDIT, rn: rn, name: name });
|
setFormData({ status: STATUSES.RRPCONFSCTNMRK_EDIT, rn: rn, name: name });
|
||||||
openForm();
|
openForm();
|
||||||
};
|
};
|
||||||
|
|
||||||
//Отработка нажатия на кнопку удаления показателя раздела
|
//Отработка нажатия на кнопку удаления показателя раздела
|
||||||
const deleteColumnRowClick = (rn, name) => {
|
const deleteRRPCONFSCTNMRKClick = (rn, name) => {
|
||||||
setFormData({ status: STATUSES.COLUMNROW_DELETE, rn: rn, name: name });
|
setFormData({ status: STATUSES.RRPCONFSCTNMRK_DELETE, rn: rn, name: name });
|
||||||
openForm();
|
openForm();
|
||||||
};
|
};
|
||||||
|
|
||||||
//Нажатие на кнопку подтверждения создания/исправления/удаления на форме
|
|
||||||
const formBtnOkClick = () => {
|
|
||||||
let formStateProps = {};
|
|
||||||
if (formData.status === (STATUSES.CREATE || STATUSES.EDIT || STATUSES.COLUMNROW_CREATE))
|
|
||||||
formStateProps = { ...formStateProps, code: document.querySelector("#code-outlined").value };
|
|
||||||
if (formData.status === (STATUSES.CREATE || STATUSES.EDIT || STATUSES.COLUMNROW_CREATE || STATUSES.COLUMNROW_EDIT))
|
|
||||||
formStateProps = { ...formStateProps, name: document.querySelector("#name-outlined").value };
|
|
||||||
setFormData(pv => ({
|
|
||||||
...pv,
|
|
||||||
...formStateProps,
|
|
||||||
filled: true
|
|
||||||
}));
|
|
||||||
closeForm();
|
|
||||||
};
|
|
||||||
|
|
||||||
//Формирование разделов
|
//Формирование разделов
|
||||||
const a11yProps = index => {
|
const a11yProps = index => {
|
||||||
return {
|
return {
|
||||||
@ -165,120 +172,6 @@ const RrpConfEditor = () => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//Отработка изменений в разделе или показателе раздела
|
|
||||||
const changeSections = useCallback(async () => {
|
|
||||||
if (formData.filled) {
|
|
||||||
switch (formData.status) {
|
|
||||||
case STATUSES.CREATE:
|
|
||||||
insertSections();
|
|
||||||
clearFormData();
|
|
||||||
break;
|
|
||||||
case STATUSES.EDIT:
|
|
||||||
updateSections();
|
|
||||||
clearFormData();
|
|
||||||
break;
|
|
||||||
case STATUSES.DELETE:
|
|
||||||
deleteSections();
|
|
||||||
clearFormData();
|
|
||||||
break;
|
|
||||||
case STATUSES.COLUMNROW_CREATE:
|
|
||||||
addColumnRow();
|
|
||||||
clearFormData();
|
|
||||||
break;
|
|
||||||
case STATUSES.COLUMNROW_EDIT:
|
|
||||||
editColumnRow();
|
|
||||||
clearFormData();
|
|
||||||
break;
|
|
||||||
case STATUSES.COLUMNROW_DELETE:
|
|
||||||
deleteColumnRow();
|
|
||||||
clearFormData();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
setRrpDoc(pv => ({ ...pv, reload: true }));
|
|
||||||
}
|
|
||||||
//eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [formData]);
|
|
||||||
|
|
||||||
//Добавление раздела
|
|
||||||
const insertSections = useCallback(async () => {
|
|
||||||
const data = await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT",
|
|
||||||
args: {
|
|
||||||
NPRN: formData.prn,
|
|
||||||
SCODE: formData.code,
|
|
||||||
SNAME: formData.name
|
|
||||||
}
|
|
||||||
});
|
|
||||||
setFormData(pv => ({
|
|
||||||
...pv,
|
|
||||||
rn: Number(data.NRN)
|
|
||||||
}));
|
|
||||||
}, [formData.prn, formData.code, formData.name, executeStored]);
|
|
||||||
|
|
||||||
//Исправление раздела
|
|
||||||
const updateSections = useCallback(async () => {
|
|
||||||
await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE",
|
|
||||||
args: {
|
|
||||||
NRN: formData.rn,
|
|
||||||
SCODE: formData.code,
|
|
||||||
SNAME: formData.name
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, [formData.name, formData.code, formData.rn, executeStored]);
|
|
||||||
|
|
||||||
//Удаление раздела
|
|
||||||
const deleteSections = useCallback(async () => {
|
|
||||||
await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE",
|
|
||||||
args: {
|
|
||||||
NRN: formData.rn
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, [formData.rn, executeStored]);
|
|
||||||
|
|
||||||
//Добавление показателя раздела
|
|
||||||
const addColumnRow = useCallback(async () => {
|
|
||||||
await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT",
|
|
||||||
args: {
|
|
||||||
NPRN: formData.prn,
|
|
||||||
SCODE: formData.code,
|
|
||||||
SNAME: formData.name,
|
|
||||||
SCOLCODE: formData.colCode,
|
|
||||||
SCOLVER: formData.colVCode,
|
|
||||||
SROWCODE: formData.rowCode,
|
|
||||||
SROWVER: formData.rowVCode
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);
|
|
||||||
|
|
||||||
//Исправление показателя раздела
|
|
||||||
const editColumnRow = useCallback(async () => {
|
|
||||||
await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE",
|
|
||||||
args: { NRN: formData.rn, SNAME: formData.name }
|
|
||||||
});
|
|
||||||
}, [executeStored, formData.name, formData.rn]);
|
|
||||||
|
|
||||||
//Удаление показателя раздела
|
|
||||||
const deleteColumnRow = useCallback(async () => {
|
|
||||||
await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE", args: { NRN: formData.rn } });
|
|
||||||
}, [executeStored, formData.rn]);
|
|
||||||
|
|
||||||
//Получение мнемокода и наименования показателя раздела
|
|
||||||
const getSctnMrkCodeName = useCallback(async () => {
|
|
||||||
const data = await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME",
|
|
||||||
args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode }
|
|
||||||
});
|
|
||||||
setFormData(pv => ({
|
|
||||||
...pv,
|
|
||||||
code: data.SCODE,
|
|
||||||
name: data.SNAME
|
|
||||||
}));
|
|
||||||
}, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]);
|
|
||||||
|
|
||||||
//Загрузка данных разделов регламентированного отчёта
|
//Загрузка данных разделов регламентированного отчёта
|
||||||
const loadData = useCallback(async () => {
|
const loadData = useCallback(async () => {
|
||||||
if (rrpDoc.reload) {
|
if (rrpDoc.reload) {
|
||||||
@ -296,7 +189,7 @@ const RrpConfEditor = () => {
|
|||||||
//Копирование массива уже загруженных разделов
|
//Копирование массива уже загруженных разделов
|
||||||
let cloneDGs = dataGrids.slice();
|
let cloneDGs = dataGrids.slice();
|
||||||
//Массив из нескольких разделов и из одного
|
//Массив из нескольких разделов и из одного
|
||||||
const sections = data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS];
|
const sections = data.SECTIONS ? (data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS]) : [];
|
||||||
//Заполнение очередного раздела по шаблону
|
//Заполнение очередного раздела по шаблону
|
||||||
sections.map(s => {
|
sections.map(s => {
|
||||||
let dg = {};
|
let dg = {};
|
||||||
@ -343,7 +236,9 @@ const RrpConfEditor = () => {
|
|||||||
//Устаревший раздел удаляем из массива данных
|
//Устаревший раздел удаляем из массива данных
|
||||||
dataGrids.splice(curIndex, 1);
|
dataGrids.splice(curIndex, 1);
|
||||||
//Фокус на предшествующий раздел
|
//Фокус на предшествующий раздел
|
||||||
tabFocus = curIndex - 1;
|
if (curIndex > 0) tabFocus = curIndex - 1;
|
||||||
|
//Иначе фокус на следующий, если был удалён первый раздел
|
||||||
|
else tabFocus = curIndex;
|
||||||
});
|
});
|
||||||
setRrpDoc(pv => ({
|
setRrpDoc(pv => ({
|
||||||
...pv,
|
...pv,
|
||||||
@ -374,74 +269,74 @@ const RrpConfEditor = () => {
|
|||||||
loadData();
|
loadData();
|
||||||
}, [rrpDoc.reload, dataGrid.reload, loadData]);
|
}, [rrpDoc.reload, dataGrid.reload, loadData]);
|
||||||
|
|
||||||
//Обновление при изменении разделов
|
const handleDialogReload = data => {
|
||||||
useEffect(() => {
|
console.log(JSON.stringify(data));
|
||||||
changeSections();
|
setRrpDoc(pv => ({ ...pv, reload: true }));
|
||||||
}, [changeSections]);
|
|
||||||
|
|
||||||
//Получение наименования и мнемокода показателя раздела при заполнении необходимых полей
|
|
||||||
useEffect(() => {
|
|
||||||
formData.status == STATUSES.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode
|
|
||||||
? getSctnMrkCodeName()
|
|
||||||
: null;
|
|
||||||
}, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);
|
|
||||||
|
|
||||||
//При изменении фильтра в диалоге
|
|
||||||
const handleFilterOk = filter => {
|
|
||||||
setFormData(filter);
|
|
||||||
setForm(false);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//При закрытии диалога фильтра
|
//При закрытии диалога
|
||||||
const handleFilterCancel = () => setForm(false);
|
const handleDialogClose = () => {
|
||||||
|
setForm(false);
|
||||||
|
clearFormData();
|
||||||
|
};
|
||||||
|
|
||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<Box sx={{ width: "100%" }}>
|
<Box sx={{ width: "100%" }}>
|
||||||
{formOpen ? <IUDFormDialog initial={formData} onOk={handleFilterOk} onCancel={handleFilterCancel} /> : null}
|
{formOpen ? <IUDFormDialog initial={formData} onClose={handleDialogClose} onReload={handleDialogReload} /> : null}
|
||||||
{rrpDoc.docLoaded ? (
|
{rrpDoc.docLoaded ? (
|
||||||
<Box sx={{ borderBottom: 1, borderColor: "divider" }}>
|
<Box>
|
||||||
<Stack direction="row">
|
<Stack direction="row" sx={STYLES.TABS_BOTTOM_LINE}>
|
||||||
<Tabs value={tabValue} onChange={handleChange} aria-label="section tab">
|
<Tabs value={tabValue} onChange={handleChange} aria-label="section tab">
|
||||||
{rrpDoc.sections.map((s, i) => {
|
{rrpDoc.sections.map((s, i) => {
|
||||||
return (
|
return (
|
||||||
<Tab
|
<Tab
|
||||||
key={s.rn}
|
key={s.rn}
|
||||||
{...a11yProps(i)}
|
{...a11yProps(i)}
|
||||||
|
sx={{ padding: "10px" }}
|
||||||
label={
|
label={
|
||||||
<Stack direction="row" textAlign="center">
|
<Box sx={COMMON_STYLES.BOX_ROW}>
|
||||||
{s.name}
|
{s.name}
|
||||||
<Icon onClick={() => editSectionClick(s.rn, s.code, s.name)}>edit</Icon>
|
<IconButton component="span" onClick={() => editSectionClick(s.rn, s.code, s.name)}>
|
||||||
<Icon onClick={() => deleteSectionClick(s.rn, s.code, s.name)}>delete</Icon>
|
<Icon>edit</Icon>
|
||||||
</Stack>
|
</IconButton>
|
||||||
|
<IconButton component="span" onClick={() => deleteSectionClick(s.rn, s.code, s.name)}>
|
||||||
|
<Icon>delete</Icon>
|
||||||
|
</IconButton>
|
||||||
|
</Box>
|
||||||
}
|
}
|
||||||
wrapped
|
wrapped
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Tabs>
|
</Tabs>
|
||||||
<IconButton onClick={addSectionClick}>
|
<Box display="flex" justifyContent="center" alignItems="center">
|
||||||
<Icon>add</Icon>
|
<IconButton onClick={addSectionClick}>
|
||||||
</IconButton>
|
<Icon>add</Icon>
|
||||||
|
</IconButton>
|
||||||
|
</Box>
|
||||||
</Stack>
|
</Stack>
|
||||||
{rrpDoc.sections.map((s, i) => {
|
{rrpDoc.sections.map((s, i) => {
|
||||||
return (
|
return (
|
||||||
<SectionTabPanel key={s.rn} value={tabValue} index={i}>
|
<SectionTabPanel key={s.rn} value={tabValue} index={i}>
|
||||||
<Button onClick={() => addColumnRowClick(s.rn, s.code, s.name)}>+ Добавить</Button>
|
<Button onClick={() => addRRPCONFSCTNMRKClick(s.rn, s.code, s.name)}>Добавить</Button>
|
||||||
{s.dataLoaded ? (
|
{s.dataLoaded ? (
|
||||||
<P8PDataGrid
|
<Box sx={{ ...STYLES.TABS_PADDING, ...COMMON_STYLES.BOX_ROW }}>
|
||||||
{...P8P_DATA_GRID_CONFIG_PROPS}
|
<P8PDataGrid
|
||||||
columnsDef={s.columnsDef}
|
{...P8P_DATA_GRID_CONFIG_PROPS}
|
||||||
groups={s.groups}
|
containerComponentProps={{ elevation: 6 }}
|
||||||
rows={s.rows}
|
columnsDef={s.columnsDef}
|
||||||
fixedHeader={s.fixedHeader}
|
groups={s.groups}
|
||||||
fixedColumns={s.fixedColumns}
|
rows={s.rows}
|
||||||
size={P8P_DATA_GRID_SIZE.LARGE}
|
fixedHeader={s.fixedHeader}
|
||||||
reloading={s.reload}
|
fixedColumns={s.fixedColumns}
|
||||||
dataCellRender={prms =>
|
size={P8P_DATA_GRID_SIZE.LARGE}
|
||||||
dataCellRender({ ...prms }, showRrpConfSctnMrk, editColumnRowClick, deleteColumnRowClick)
|
reloading={s.reload}
|
||||||
}
|
dataCellRender={prms =>
|
||||||
/>
|
dataCellRender({ ...prms }, showRrpConfSctnMrk, editRRPCONFSCTNMRKClick, deleteRRPCONFSCTNMRKClick)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
) : null}
|
) : null}
|
||||||
</SectionTabPanel>
|
</SectionTabPanel>
|
||||||
);
|
);
|
||||||
|
@ -19,10 +19,10 @@ const SectionTabPanel = props => {
|
|||||||
const { children, value, index, ...other } = props;
|
const { children, value, index, ...other } = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div role="tabpanel" hidden={value !== index} id={`simple-tabpanel-${index}`} aria-labelledby={`simple-tab-${index}`} {...other}>
|
<div role="tabpanel" hidden={value !== index} id={`tabpanel-${index}`} aria-labelledby={`tab-${index}`} {...other}>
|
||||||
{value === index && (
|
{value === index && (
|
||||||
<Box sx={{ p: 3 }}>
|
<Box sx={{ p: 3 }}>
|
||||||
<Typography component={"span"}>{children}</Typography>
|
<Typography component="span">{children}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
create or replace package PKG_P8PANELS_RRPCONFED as
|
create or replace package PKG_P8PANELS_RRPCONFED as
|
||||||
|
|
||||||
/* Добавление раздела регламентированного отчёта */
|
/* Добавление раздела регламентированного отчёта */
|
||||||
procedure INSERT_RRPCONF_SECTIONS
|
procedure RRPCONFSCTN_INSERT
|
||||||
(
|
(
|
||||||
NPRN in number, -- Ид. настройки форм регламентированного отчёта
|
NPRN in number, -- Ид. настройки форм регламентированного отчёта
|
||||||
SCODE in varchar2, -- Мнемокод
|
SCODE in varchar2, -- Мнемокод
|
||||||
@ -10,7 +10,7 @@ create or replace package PKG_P8PANELS_RRPCONFED as
|
|||||||
);
|
);
|
||||||
|
|
||||||
/* Исправление раздела регламентированного отчёта */
|
/* Исправление раздела регламентированного отчёта */
|
||||||
procedure UPDATE_RRPCONF_SECTIONS
|
procedure RRPCONFSCTN_UPDATE
|
||||||
(
|
(
|
||||||
NRN in number, -- Ид. раздела
|
NRN in number, -- Ид. раздела
|
||||||
SCODE in varchar2, -- Мнемокод раздела
|
SCODE in varchar2, -- Мнемокод раздела
|
||||||
@ -18,13 +18,13 @@ create or replace package PKG_P8PANELS_RRPCONFED as
|
|||||||
);
|
);
|
||||||
|
|
||||||
/* Удаление раздела регламентированного отчёта */
|
/* Удаление раздела регламентированного отчёта */
|
||||||
procedure DELETE_RRPCONF_SECTIONS
|
procedure RRPCONFSCTN_DELETE
|
||||||
(
|
(
|
||||||
NRN in number -- Ид. раздела
|
NRN in number -- Ид. раздела
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Добавление показателя раздела регламентированного отчёта */
|
/* Добавление показателя раздела регламентированного отчёта */
|
||||||
procedure INSERT_RRPCONF_COLUMNROW
|
procedure RRPCONFSCTNMRK_INSERT
|
||||||
(
|
(
|
||||||
NPRN in number, -- Ид. раздела
|
NPRN in number, -- Ид. раздела
|
||||||
SCODE in varchar2, -- Мнемокод показателя раздела
|
SCODE in varchar2, -- Мнемокод показателя раздела
|
||||||
@ -37,20 +37,20 @@ create or replace package PKG_P8PANELS_RRPCONFED as
|
|||||||
);
|
);
|
||||||
|
|
||||||
/* Исправление показателя раздела регламентированного отчёта */
|
/* Исправление показателя раздела регламентированного отчёта */
|
||||||
procedure UPDATE_RRPCONF_COLUMNROW
|
procedure RRPCONFSCTNMRK_UPDATE
|
||||||
(
|
(
|
||||||
NRN in number, -- Ид. показателя раздела
|
NRN in number, -- Ид. показателя раздела
|
||||||
SNAME in varchar2 -- Новое наименование
|
SNAME in varchar2 -- Новое наименование
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Удаление показателя раздела регламентированного отчёта */
|
/* Удаление показателя раздела регламентированного отчёта */
|
||||||
procedure DELETE_RRPCONF_COLUMNROW
|
procedure RRPCONFSCTNMRK_DELETE
|
||||||
(
|
(
|
||||||
NRN in number -- Ид. показателя раздела
|
NRN in number -- Ид. показателя раздела
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Формирование кода и наименования показателя раздела регламентированного отчёта */
|
/* Формирование кода и наименования показателя раздела регламентированного отчёта */
|
||||||
procedure GET_RRPCONFSCTNMRK_CODE_NAME
|
procedure RRPCONFSCTNMRK_GET_CODE_NAME
|
||||||
(
|
(
|
||||||
SSCTNCODE in varchar2, -- Мнемокод раздела
|
SSCTNCODE in varchar2, -- Мнемокод раздела
|
||||||
SROWCODE in varchar2, -- Мнемокод строки
|
SROWCODE in varchar2, -- Мнемокод строки
|
||||||
@ -58,6 +58,13 @@ create or replace package PKG_P8PANELS_RRPCONFED as
|
|||||||
SCODE out varchar2, -- Мнемокод показателя раздела
|
SCODE out varchar2, -- Мнемокод показателя раздела
|
||||||
SNAME out varchar2 -- Наименование показателя раздела
|
SNAME out varchar2 -- Наименование показателя раздела
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Отбор показателя раздела по ид. */
|
||||||
|
procedure SELECT_RRPCONFSCTNMRK
|
||||||
|
(
|
||||||
|
NRN in number, -- Ид. показателя раздела
|
||||||
|
NIDENT out number -- Ид. буфера подобранных (списка отмеченных записей, null - не найдено)
|
||||||
|
);
|
||||||
|
|
||||||
/* Получение разделов регламентированного отчёта */
|
/* Получение разделов регламентированного отчёта */
|
||||||
procedure GET_RRPCONF_SECTIONS
|
procedure GET_RRPCONF_SECTIONS
|
||||||
@ -71,7 +78,7 @@ end PKG_P8PANELS_RRPCONFED;
|
|||||||
create or replace package body PKG_P8PANELS_RRPCONFED as
|
create or replace package body PKG_P8PANELS_RRPCONFED as
|
||||||
|
|
||||||
/* Добавление раздела регламентированного отчёта */
|
/* Добавление раздела регламентированного отчёта */
|
||||||
procedure INSERT_RRPCONF_SECTIONS
|
procedure RRPCONFSCTN_INSERT
|
||||||
(
|
(
|
||||||
NPRN in number, -- Ид. настройки форм регламентированного отчёта
|
NPRN in number, -- Ид. настройки форм регламентированного отчёта
|
||||||
SCODE in varchar2, -- Мнемокод
|
SCODE in varchar2, -- Мнемокод
|
||||||
@ -95,10 +102,10 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
NLINKS_UPDATE => 0,
|
NLINKS_UPDATE => 0,
|
||||||
NDUP_RN => null,
|
NDUP_RN => null,
|
||||||
NRN => NRN);
|
NRN => NRN);
|
||||||
end INSERT_RRPCONF_SECTIONS;
|
end RRPCONFSCTN_INSERT;
|
||||||
|
|
||||||
/* Исправление раздела регламентированного отчёта */
|
/* Исправление раздела регламентированного отчёта */
|
||||||
procedure UPDATE_RRPCONF_SECTIONS
|
procedure RRPCONFSCTN_UPDATE
|
||||||
(
|
(
|
||||||
NRN in number, -- Ид. раздела
|
NRN in number, -- Ид. раздела
|
||||||
SCODE in varchar2, -- Мнемокод раздела
|
SCODE in varchar2, -- Мнемокод раздела
|
||||||
@ -120,10 +127,10 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
SCLSF_CODE => null,
|
SCLSF_CODE => null,
|
||||||
NFORMULA_UPDATE => 0,
|
NFORMULA_UPDATE => 0,
|
||||||
NMARK_UPDATE => 0);
|
NMARK_UPDATE => 0);
|
||||||
end UPDATE_RRPCONF_SECTIONS;
|
end RRPCONFSCTN_UPDATE;
|
||||||
|
|
||||||
/* Удаление раздела регламентированного отчёта */
|
/* Удаление раздела регламентированного отчёта */
|
||||||
procedure DELETE_RRPCONF_SECTIONS
|
procedure RRPCONFSCTN_DELETE
|
||||||
(
|
(
|
||||||
NRN in number -- Ид. раздела
|
NRN in number -- Ид. раздела
|
||||||
)
|
)
|
||||||
@ -131,10 +138,10 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||||
begin
|
begin
|
||||||
P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY);
|
P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY);
|
||||||
end DELETE_RRPCONF_SECTIONS;
|
end RRPCONFSCTN_DELETE;
|
||||||
|
|
||||||
/* Добавление показателя раздела регламентированного отчёта */
|
/* Добавление показателя раздела регламентированного отчёта */
|
||||||
procedure INSERT_RRPCONF_COLUMNROW
|
procedure RRPCONFSCTNMRK_INSERT
|
||||||
(
|
(
|
||||||
NPRN in number, -- Ид. раздела
|
NPRN in number, -- Ид. раздела
|
||||||
SCODE in varchar2, -- Мнемокод показателя раздела
|
SCODE in varchar2, -- Мнемокод показателя раздела
|
||||||
@ -170,10 +177,10 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
SNOTE => null,
|
SNOTE => null,
|
||||||
NDUP_RN => null,
|
NDUP_RN => null,
|
||||||
NRN => NRN);
|
NRN => NRN);
|
||||||
end INSERT_RRPCONF_COLUMNROW;
|
end RRPCONFSCTNMRK_INSERT;
|
||||||
|
|
||||||
/* Исправление показателя раздела регламентированного отчёта */
|
/* Исправление показателя раздела регламентированного отчёта */
|
||||||
procedure UPDATE_RRPCONF_COLUMNROW
|
procedure RRPCONFSCTNMRK_UPDATE
|
||||||
(
|
(
|
||||||
NRN in number, -- Ид. показателя раздела
|
NRN in number, -- Ид. показателя раздела
|
||||||
SNAME in varchar2 -- Новое наименование
|
SNAME in varchar2 -- Новое наименование
|
||||||
@ -228,10 +235,10 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
SCLSF_CODE => null,
|
SCLSF_CODE => null,
|
||||||
NFORMULA_UPDATE => 0,
|
NFORMULA_UPDATE => 0,
|
||||||
SNOTE => null);
|
SNOTE => null);
|
||||||
end UPDATE_RRPCONF_COLUMNROW;
|
end RRPCONFSCTNMRK_UPDATE;
|
||||||
|
|
||||||
/* Удаление показателя раздела регламентированного отчёта */
|
/* Удаление показателя раздела регламентированного отчёта */
|
||||||
procedure DELETE_RRPCONF_COLUMNROW
|
procedure RRPCONFSCTNMRK_DELETE
|
||||||
(
|
(
|
||||||
NRN in number -- Ид. показателя раздела
|
NRN in number -- Ид. показателя раздела
|
||||||
)
|
)
|
||||||
@ -239,10 +246,10 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||||
begin
|
begin
|
||||||
P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN);
|
P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN);
|
||||||
end DELETE_RRPCONF_COLUMNROW;
|
end RRPCONFSCTNMRK_DELETE;
|
||||||
|
|
||||||
/* Формирование кода и наименования показателя раздела регламентированного отчёта */
|
/* Формирование кода и наименования показателя раздела регламентированного отчёта */
|
||||||
procedure GET_RRPCONFSCTNMRK_CODE_NAME
|
procedure RRPCONFSCTNMRK_GET_CODE_NAME
|
||||||
(
|
(
|
||||||
SSCTNCODE in varchar2, -- Мнемокод раздела
|
SSCTNCODE in varchar2, -- Мнемокод раздела
|
||||||
SROWCODE in varchar2, -- Мнемокод строки
|
SROWCODE in varchar2, -- Мнемокод строки
|
||||||
@ -267,7 +274,34 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
NCHANGE_NAME => 1,
|
NCHANGE_NAME => 1,
|
||||||
NCHANGE_NAME_PARENT => 0,
|
NCHANGE_NAME_PARENT => 0,
|
||||||
SNAME => SNAME);
|
SNAME => SNAME);
|
||||||
end GET_RRPCONFSCTNMRK_CODE_NAME;
|
end RRPCONFSCTNMRK_GET_CODE_NAME;
|
||||||
|
|
||||||
|
/* Отбор показателя раздела по ид. */
|
||||||
|
procedure SELECT_RRPCONFSCTNMRK
|
||||||
|
(
|
||||||
|
NRN in number, -- Ид. показателя раздела
|
||||||
|
NIDENT out number -- Ид. буфера подобранных (списка отмеченных записей, null - не найдено)
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||||
|
NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных
|
||||||
|
begin
|
||||||
|
/* Сформируем идентификатор буфера */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
end if;
|
||||||
|
/* Добавим подобранное в список отмеченных записей */
|
||||||
|
P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT,
|
||||||
|
NCOMPANY => NCOMPANY,
|
||||||
|
NDOCUMENT => NRN,
|
||||||
|
SUNITCODE => 'RRPConfigSectionMark',
|
||||||
|
SACTIONCODE => null,
|
||||||
|
NCRN => null,
|
||||||
|
NDOCUMENT1 => null,
|
||||||
|
SUNITCODE1 => null,
|
||||||
|
SACTIONCODE1 => null,
|
||||||
|
NRN => NSELECTLIST);
|
||||||
|
end SELECT_RRPCONFSCTNMRK;
|
||||||
|
|
||||||
/* Получение разделов регламентированного отчёта */
|
/* Получение разделов регламентированного отчёта */
|
||||||
procedure GET_RRPCONF_SECTIONS
|
procedure GET_RRPCONF_SECTIONS
|
||||||
@ -343,12 +377,13 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
|||||||
and T.VERSION = NVERSION)
|
and T.VERSION = NVERSION)
|
||||||
loop
|
loop
|
||||||
/* Инициализируем таблицу данных */
|
/* Инициализируем таблицу данных */
|
||||||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
|
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1);
|
||||||
/* Формируем структуру заголовка */
|
/* Формируем структуру заголовка */
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'SROW_NAME',
|
SNAME => 'SROW_NAME',
|
||||||
SCAPTION => 'Наименование строки',
|
SCAPTION => 'Наименование строки',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
|
NWIDTH => 150);
|
||||||
/* Цикл формирования колонок с графами */
|
/* Цикл формирования колонок с графами */
|
||||||
for CL in CN(C.NRN)
|
for CL in CN(C.NRN)
|
||||||
loop
|
loop
|
||||||
|
Loading…
x
Reference in New Issue
Block a user