From 434504dda320e87ece1ff01e3747ed28b2a780e3 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Thu, 21 Nov 2024 14:46:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-878.=20=D0=9E=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82=2011.?= =?UTF-8?q?11.24=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/clnt_task_board/clnt_task_board.js | 11 ++ .../components/filter_dialog.js | 13 +- .../clnt_task_board/components/note_dialog.js | 141 ++++++++++++++++++ .../clnt_task_board/components/task_card.js | 23 ++- app/panels/clnt_task_board/hooks.js | 29 +++- 5 files changed, 205 insertions(+), 12 deletions(-) create mode 100644 app/panels/clnt_task_board/components/note_dialog.js diff --git a/app/panels/clnt_task_board/clnt_task_board.js b/app/panels/clnt_task_board/clnt_task_board.js index aed4ef3..4d4dbf8 100644 --- a/app/panels/clnt_task_board/clnt_task_board.js +++ b/app/panels/clnt_task_board/clnt_task_board.js @@ -17,6 +17,7 @@ import { FilterDialog } from "./components/filter_dialog"; //Компонент import { TaskCardSettings } from "./components/task_card_settings.js"; //Компонент настроек карточки события import { useTasks, COLORS } from "./hooks.js"; //Вспомогательные хуки import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { useNoteDialog } from "./components/note_dialog.js"; //--------- //Константы @@ -77,6 +78,7 @@ const ClntTaskBoard = () => { const [ tasks, eventRoutes, + eventPoints, docLinks, accounts, taskFormOpen, @@ -94,6 +96,9 @@ const ClntTaskBoard = () => { getDocLinks ] = useTasks(); + //Состояние диалога примечания + const [noteDialogRender, handleNoteDialogChange] = useNoteDialog(); + //Состояние доступных маршрутов события const [availableRoutes, setAvailableRoutes] = useState({ sorce: "", routes: [] }); @@ -118,6 +123,7 @@ const ClntTaskBoard = () => { //Генерация содержимого return ( + {tasks.filters.isOpen ? ( { handleOrderChanged={handleOrderChanged} sx={STYLES.FILTER} /> + {noteDialogRender( + v => console.log(`Примечание: ${v}`), + () => console.log("Отмена") + )} {tasks.filters.values.type ? ( { @@ -206,6 +216,7 @@ const ClntTaskBoard = () => { index={index} handleReload={handleReload} key={item.id} + extraHandle={handleNoteDialogChange} /> ))} {provided.placeholder} diff --git a/app/panels/clnt_task_board/components/filter_dialog.js b/app/panels/clnt_task_board/components/filter_dialog.js index f94fc2b..5ee65fc 100644 --- a/app/panels/clnt_task_board/components/filter_dialog.js +++ b/app/panels/clnt_task_board/components/filter_dialog.js @@ -60,8 +60,9 @@ const STYLES = { const selectEventType = (value, showDictionary, callBack) => { showDictionary({ unitCode: "ClientEventTypes", - inputParameters: [{ name: "in_EVNTYPE_CODE", value: value }], - callBack: res => (res.success === true ? callBack(res.outParameters.out_EVNTYPE_CODE) : callBack(null)) + showMethod: "dictionary", + inputParameters: [{ name: "pos_eventtypecode", value: value }], + callBack: res => (res.success === true ? callBack(res.outParameters.eventtypecode) : callBack(null)) }); }; @@ -77,12 +78,13 @@ const selectCatalog = (value, showDictionary, callBack) => { }); }; -//Выбор производственного объекта +//Выбор исполнителя const selectSendPerson = (value, showDictionary, callBack) => { showDictionary({ unitCode: "AGNLIST", - inputParameters: [{ name: "in_AGNABBR", value: value }], - callBack: res => (res.success === true ? callBack(res.outParameters.out_AGNABBR) : callBack(null)) + showMethod: "agents", + inputParameters: [{ name: "pos_agnmnemo", value: value }], + callBack: res => (res.success === true ? callBack(res.outParameters.agnmnemo) : callBack(null)) }); }; @@ -99,6 +101,7 @@ const selectSendDivision = (value, showDictionary, callBack) => { const selectSendUsrGrp = (value, showDictionary, callBack) => { showDictionary({ unitCode: "CostStaffGroups", + //showMethod: "dictionary", inputParameters: [{ name: "in_CODE", value: value }], callBack: res => (res.success === true ? callBack(res.outParameters.out_CODE) : callBack(null)) }); diff --git a/app/panels/clnt_task_board/components/note_dialog.js b/app/panels/clnt_task_board/components/note_dialog.js new file mode 100644 index 0000000..ff0e60a --- /dev/null +++ b/app/panels/clnt_task_board/components/note_dialog.js @@ -0,0 +1,141 @@ +/* + Парус 8 - Панели мониторинга - УДП - Доски задач + Компонент: Диалоговое окно примечания +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useEffect, useState } from "react"; //Классы React +//import { BackEndСtx } from "../../../context/backend"; //Контекст взаимодействия с сервером +//import PropTypes from "prop-types"; //Контроль свойств компонента +import { Dialog, DialogTitle, IconButton, Icon, DialogContent, DialogActions, Button, TextField } from "@mui/material"; //Интерфейсные компоненты + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + DIALOG_ACTIONS: { justifyContent: "end", paddingRight: "24px", paddingLeft: "24px" }, + CLOSE_BUTTON: { + position: "absolute", + right: 8, + top: 8, + color: theme => theme.palette.grey[500] + }, + DIALOG_CONTENT: { paddingTop: 0, paddingBottom: 0 } +}; + +//----------------------- +//Вспомогательные функции +//----------------------- + +//export const NoteDialogCtx = createContext(); + +//--------------- +//Тело компонента +//--------------- + +//Диалоговое окно фильтра отбора +const useNoteDialog = () => { + //Собственное состояние + const [note, setNote] = useState(); + + //Состояние отображения окна + const [noteDialogOpen, setNoteDialogOpen] = useState(false); + + useEffect(() => { + if (noteDialogOpen) console.log(`Сейчас: ${noteDialogOpen}`); + }, [noteDialogOpen]); + + const handleNoteDialogChange = (value = null) => (value ? setNoteDialogOpen(value) : setNoteDialogOpen(!noteDialogOpen)); + + const noteDialogRender = (onOk, onCancel) => { + //При изменении примечания + const handleNoteChange = value => setNote(value); + + //При закрытии диалога с изменением фильтра + const handleOK = () => { + setNoteDialogOpen(false); + onOk(note); + setNote(); + }; + + //При закрытии диалога без изменения фильтра + const handleCancel = () => { + setNoteDialogOpen(false); + setNote(); + onCancel(); + }; + + //Генерация содержимого + return ( +
+ {noteDialogOpen ? ( + + Примечание + + close + + + handleNoteChange(e.target.value)} + /> + + + + + + + ) : null} +
+ ); + }; + + return [noteDialogRender, handleNoteDialogChange]; +}; + +// const NoteDialog = (onOk, onCancel) => { +// //const { noteDialogRender } = useContext(NoteDialogContext); +// const noteDialogRender = useNoteDialog()[1]; + +// //const [noteDialog] = useState(); + +// // useEffect(() => { +// // setNoteDialog(noteDialogRender(onOk, onCancel)); +// // }, [noteDialogRender, onCancel, onOk]); + +// //const onCancel1 = () => console.log("Cancel"); + +// return noteDialogRender(onOk, onCancel); +// //const { Btn, handleChange } = useComp(); + +// //return ; +// }; + +// //Контроль свойств компонента - Диалоговое окно фильтра отбора +// NoteDialog.propTypes = { +// onOk: PropTypes.func, +// onCancel: PropTypes.func +// }; + +//-------------------- +//Интерфейс компонента +//-------------------- + +export { useNoteDialog }; diff --git a/app/panels/clnt_task_board/components/task_card.js b/app/panels/clnt_task_board/components/task_card.js index 9adf2f0..015c462 100644 --- a/app/panels/clnt_task_board/components/task_card.js +++ b/app/panels/clnt_task_board/components/task_card.js @@ -47,7 +47,15 @@ const STYLES = { //------------------------------------ //Действия карточки события -const DataCellCardActions = ({ taskRn, menuItems, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, handleReload }) => { +const DataCellCardActions = ({ + taskRn, + menuItems, + cardActions, + handleMethodsMenuButtonClick, + handleMethodsMenuClose, + handleReload, + extraHandle = null +}) => { return ( @@ -60,7 +68,9 @@ const DataCellCardActions = ({ taskRn, menuItems, cardActions, handleMethodsMenu { + onClick={async () => { + //one().then(two).then(three) + action.method === "TASK_STATE_CHANGE" && extraHandle ? extraHandle() : null; //Выполняем действие action.func(taskRn, action.needReload ? handleReload : null); //Закрываем меню @@ -84,7 +94,8 @@ DataCellCardActions.propTypes = { cardActions: PropTypes.object.isRequired, handleMethodsMenuButtonClick: PropTypes.func.isRequired, handleMethodsMenuClose: PropTypes.func.isRequired, - handleReload: PropTypes.func + handleReload: PropTypes.func, + extraHandle: PropTypes.func }; //----------- @@ -92,7 +103,7 @@ DataCellCardActions.propTypes = { //----------- //Карточка события -const TaskCard = ({ task, account, index, handleReload }) => { +const TaskCard = ({ task, account, index, handleReload, extraHandle = null }) => { //Собственное состояние const [taskCard, setTaskCard, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, menuItems] = useTaskCard(); @@ -124,6 +135,7 @@ const TaskCard = ({ task, account, index, handleReload }) => { handleMethodsMenuButtonClick={handleMethodsMenuButtonClick} handleMethodsMenuClose={handleMethodsMenuClose} handleReload={handleReload} + extraHandle={extraHandle} /> } /> @@ -159,7 +171,8 @@ TaskCard.propTypes = { task: PropTypes.object.isRequired, account: PropTypes.object, index: PropTypes.number.isRequired, - handleReload: PropTypes.func + handleReload: PropTypes.func, + extraHandle: PropTypes.func }; //---------------- diff --git a/app/panels/clnt_task_board/hooks.js b/app/panels/clnt_task_board/hooks.js index c495b46..d507a53 100644 --- a/app/panels/clnt_task_board/hooks.js +++ b/app/panels/clnt_task_board/hooks.js @@ -78,6 +78,15 @@ const hslToRgba = (h, s, l) => { // return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ",0.2)"; // }; +// const ColorContext = createContext("green"); + +// export const MyColorContextProvider = () => { +// ColorContext = "blue"; +// //const [color] = useState(); + +// return {value => }; +// }; + //----------- //Тело модуля //----------- @@ -93,6 +102,12 @@ const useTasks = () => { //Состояние маршрута события const [eventRoutes, setEventRoutes] = useState([]); + //Состояние точек маршрута события + const [eventPoints, setEventPoints] = useState([]); + + //Подключение к контексту диалога примечания + //const {noteDialog, setNoteDialog} = useContext(NoteDialogContext); + //Состояние учётных документов const [docLinks, setDocLinks] = useState([]); @@ -458,6 +473,13 @@ const useTasks = () => { newRoutes.push({ src: r.SSOURCE, dest: r.SDESTINATION }); }); } + //Инициализируем точки событий + let newPoints = []; + if (data.XEVPOINTS) { + data.XEVPOINTS.map(p => { + newPoints.push({ point: p.SEVPOINT, addNoteOnChst: p.ADDNOTE_ONCHST, addNoteOnSend: p.ADDNOTE_ONSEND, banUpdate: p.BAN_UPDATE }); + }); + } //Инициализируем пользователей let newAccounts = []; //Если найдены пользователи @@ -473,6 +495,8 @@ const useTasks = () => { } //Указываем сформированные маршруты setEventRoutes([...newRoutes]); + //Указываем сформированные точки маршрута + setEventPoints([...newPoints]); //Указываем сформированные аккаунты setAccounts([...newAccounts]); }; @@ -544,6 +568,7 @@ const useTasks = () => { return [ tasks, eventRoutes, + eventPoints, docLinks, accounts, taskFormOpen, @@ -981,8 +1006,7 @@ const useTaskCard = () => { if (data.NIDENT) { pOnlineShowDictionary({ unitCode: "ClientEvents", - showMethod: "main", - inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] + inputParameters: [{ name: "in_Ident", value: data.NIDENT }] }); } }, @@ -1120,6 +1144,7 @@ const useTaskCard = () => { }); } }, + // eslint-disable-next-line react-hooks/exhaustive-deps [executeStored, pOnlineShowDictionary] );