From 30eb94bfa68282a8b87103a306d7994ab22688ce Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 30 Oct 2025 18:06:00 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-994=20-=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20"=D0=94=D0=BE=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87",=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D0=B5=20"=D0=9F=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=D1=82=D1=8C"=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D1=8B=D1=82=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clnt_task_board/components/task_card.js | 78 +++++++++++++------ .../clnt_task_board/hooks/dict_hooks.js | 3 +- .../clnt_task_board/hooks/tasks_hooks.js | 1 + app/panels/clnt_task_board/layouts.js | 12 ++- 4 files changed, 70 insertions(+), 24 deletions(-) diff --git a/app/panels/clnt_task_board/components/task_card.js b/app/panels/clnt_task_board/components/task_card.js index 953a2f2..4b69c66 100644 --- a/app/panels/clnt_task_board/components/task_card.js +++ b/app/panels/clnt_task_board/components/task_card.js @@ -86,19 +86,18 @@ const CardActions = ({ more_vert - {menuItems.map(action => { - if (action.visible) - return ( - handleActionClick(action)} - > - {action.icon} - {action.name} - - ); - })} + {menuItems.map(action => + action.visible ? ( + handleActionClick(action)} + > + {action.icon} + {action.name} + + ) : null + )} ); @@ -132,7 +131,7 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen const [menuItems, setMenuItems] = useState([]); //Вспомогательные функции открытия раздела - const { handleClientEventsOpen, handleClientEventsNotesOpen, handleFileLinksOpen } = useDictionary(); + const { handleClientEventsOpen, handleClientEventsNotesOpen, handleFileLinksOpen, handleCatalogTreeOpen } = useDictionary(); //Состояние вспомогательных функций событий const { handleTaskStateChange, handleTaskSend } = useTasksFunctions(); @@ -182,8 +181,21 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen [executeStored] ); + //При перемещении в каталог + const handleTaskMove = useCallback( + async ({ nEvent, nCrn, onReload }) => { + await executeStored({ + stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_MOVE", + args: { NCLNEVENTS: nEvent, NCRN: nCrn } + }); + //Если требуется перезагрузить данные + onReload ? onReload() : null; + }, + [executeStored] + ); + //По нажатию действия "Направить" - const handleSendAction = useCallback( + const handleTaskSendAction = useCallback( async ({ nEvent, onReload, onNoteOpen }) => { //Выполняем направление события handleTaskSend({ nEvent, onReload, onNoteOpen }); @@ -246,7 +258,7 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen ); //По нажатию действия "Перейти" - const handleStateChangeAction = useCallback( + const handleTaskStateChangeAction = useCallback( async ({ nEvent, onReload, onNoteOpen }) => { //Выполняем изменения статуса события handleTaskStateChange({ nEvent, onReload, onNoteOpen }); @@ -254,6 +266,26 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen [handleTaskStateChange] ); + //По нажатию действия "Переместить" + const handleTaskMoveAction = useCallback( + async ({ nEvent, onReload }) => { + //Открываем выбор записи из раздела "Каталоги иерархии" + handleCatalogTreeOpen({ + sUnitName: "ClientEvents", + nRn: task.nCrn, + callBack: res => { + //Выполняем перемещение события + handleTaskMove({ + nEvent, + nCrn: res.outParameters.out_RN, + onReload + }); + } + }); + }, + [handleCatalogTreeOpen, handleTaskMove, task.nCrn] + ); + //При изменении ссылок в меню действий (для того, чтобы ссылка на объект менялась при реальной необходимости) useEffect(() => { //Устанавливаем список меню @@ -262,22 +294,24 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen handleTaskEditAction, handleTaskEditClientAction, handleTaskDeleteAction, - handleStateChangeAction, + handleTaskStateChangeAction, handleTaskReturnAction, - handleSendAction, + handleTaskSendAction, handleEventNotesOpenAction, - handleTaskFileLinksOpenAction + handleTaskFileLinksOpenAction, + handleTaskMoveAction ) ); }, [ handleEventNotesOpenAction, handleTaskFileLinksOpenAction, - handleSendAction, - handleStateChangeAction, + handleTaskSendAction, + handleTaskStateChangeAction, handleTaskDeleteAction, handleTaskEditAction, handleTaskEditClientAction, - handleTaskReturnAction + handleTaskReturnAction, + handleTaskMoveAction ]); //Генерация содержимого diff --git a/app/panels/clnt_task_board/hooks/dict_hooks.js b/app/panels/clnt_task_board/hooks/dict_hooks.js index 2b4ccfb..7e803b7 100644 --- a/app/panels/clnt_task_board/hooks/dict_hooks.js +++ b/app/panels/clnt_task_board/hooks/dict_hooks.js @@ -57,7 +57,8 @@ const useDictionary = () => { showMethod: "main", inputParameters: [ { name: "in_DOCNAME", value: prms.sUnitName }, - { name: "in_NAME", value: prms.sName } + { name: "in_NAME", value: prms.sName }, + { name: "in_RN", value: prms.nRn } ], callBack: res => { res.success ? prms.callBack(res) : null; diff --git a/app/panels/clnt_task_board/hooks/tasks_hooks.js b/app/panels/clnt_task_board/hooks/tasks_hooks.js index 2720d6d..a6437e9 100644 --- a/app/panels/clnt_task_board/hooks/tasks_hooks.js +++ b/app/panels/clnt_task_board/hooks/tasks_hooks.js @@ -325,6 +325,7 @@ const useTasks = (filterValues, ordersValues) => { name: task.SPREF_NUMB, nRn: task.NRN, sCrn: "", + nCrn: task.NCRN, sPrefix: task.SEVPREF, sNumber: task.SEVNUMB, sType: task.SEVTYPE_CODE, diff --git a/app/panels/clnt_task_board/layouts.js b/app/panels/clnt_task_board/layouts.js index a1c2cd2..bbf6dca 100644 --- a/app/panels/clnt_task_board/layouts.js +++ b/app/panels/clnt_task_board/layouts.js @@ -205,7 +205,7 @@ export const convertFilterValuesToArray = filterValues => { }; //Формирование массива действий карточки события -export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen) => { +export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen, onMove) => { //Формируем список действий карточки return [ { @@ -228,6 +228,16 @@ export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChan needAccountsReload: false, func: onEditClient }, + { + method: "MOVE", + name: "Переместить", + icon: "drive_file_move", + visible: true, + delimiter: false, + tasksReload: true, + needAccountsReload: false, + func: onMove + }, { method: "DELETE", name: "Удалить", From 6716454d129997495b713f15ccca749c6212647a Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 30 Oct 2025 18:08:06 +0300 Subject: [PATCH 2/3] Merge branch 'main' of https://git.citpb.ru/Dollerok/P8-Panels --- app/panels/clnt_task_board/clnt_task_board.js | 35 +-- .../components/settings_dialog.js | 28 ++- .../clnt_task_board/components/status_card.js | 20 +- .../hooks/task_dialog_hooks.js | 5 +- app/panels/clnt_task_board/layouts.js | 24 +- app/panels/clnt_task_board/task_dialog.js | 5 +- db/PKG_P8PANELS_CLNTTSKBRD.pck | 231 ++++++++++-------- db/PKG_P8PANELS_MECHREC.pck | 36 +-- dist/p8-panels.js | 45 ++-- 9 files changed, 219 insertions(+), 210 deletions(-) diff --git a/app/panels/clnt_task_board/clnt_task_board.js b/app/panels/clnt_task_board/clnt_task_board.js index 095cc2b..92f19c9 100644 --- a/app/panels/clnt_task_board/clnt_task_board.js +++ b/app/panels/clnt_task_board/clnt_task_board.js @@ -76,9 +76,6 @@ const ClntTaskBoard = () => { //Состояние доступных маршрутов события const [availableRoutes, setAvailableRoutes] = useState({ source: "", routes: [] }); - //Состояние перетаскиваемого события - const [dragItem, setDragItem] = useState({ type: "", status: "" }); - //При открытии/закрытии диалога фильтра const handleFilterOpen = isOpen => { setDialogsState(pv => ({ ...pv, filterDialogIsOpen: isOpen })); @@ -152,18 +149,6 @@ const ClntTaskBoard = () => { setAvailableRoutes({ source: "", routes: [] }); }; - //Обработка захвата перетаскиваемого объекта - const handleDragItemChange = (filtersType, statusCode) => - setDragItem({ - type: filtersType, - status: statusCode - }); - - //Обработка очистки перетаскиваемого объекта - const handleDragItemClear = () => { - setDragItem({ type: "", status: "" }); - }; - //Проверка доступности карточки события const isCardAvailable = code => { return availableRoutes.source === code || availableRoutes.routes.find(r => r.SDESTINATION === code) || !availableRoutes.source ? true : false; @@ -209,18 +194,17 @@ const ClntTaskBoard = () => { /> ) : null} {dialogsState.taskDialogIsOpen ? ( - handleTasksReload(true)} - onClose={() => { - handleTaskDialogOpen(); - handleDragItemClear(); - }} - /> + handleTasksReload(true)} onClose={handleTaskDialogOpen} /> ) : null} + + + + add + + + { statusTitle={status[statusesState.attr] || status.SEVNSTAT_NAME} colorRules={colorRules} extraData={extraData} - filtersType={filters.values.sType} isCardAvailable={isCardAvailable} onTasksReload={handleTasksReload} - onDragItemChange={handleDragItemChange} - onTaskDialogOpen={handleTaskDialogOpen} onNoteDialogOpen={handleNoteOpen} onStatusColorChange={handleSettingStatusColorChange} placeholder={provided.placeholder} diff --git a/app/panels/clnt_task_board/components/settings_dialog.js b/app/panels/clnt_task_board/components/settings_dialog.js index eb8420d..eecebe9 100644 --- a/app/panels/clnt_task_board/components/settings_dialog.js +++ b/app/panels/clnt_task_board/components/settings_dialog.js @@ -9,7 +9,7 @@ import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Dialog, DialogTitle, DialogContent, DialogActions, IconButton, Icon, Button, Box, Stack } from "@mui/material"; //Интерфейсные компоненты +import { Dialog, DialogTitle, DialogContent, DialogActions, IconButton, Icon, Button, Box, Stack, Typography } from "@mui/material"; //Интерфейсные компоненты import { CustomInputField } from "./custom_input_field.js"; //Кастомное поле ввода import { sortAttrs, sortDest } from "../layouts.js"; //Допустимые значение поля и направления сортировки import { hasValue } from "../../../core/utils.js"; //Проверка наличия значения @@ -63,9 +63,23 @@ const SettingsDialog = ({ initial, onSettingsChange, onClose, ...other }) => { [...prev, { id: cur.id, caption: cur.SDP_NAME }], [])} - emptyItem={{ key: -1, id: -1, caption: "-" }} + labelText="Заливка событий*" + items={colorRules.rules.reduce( + (prev, cur) => [ + ...prev, + { + id: cur.id, + caption: + `${cur.SDP_NAME}` + + (cur.STYPE == "string" + ? `${cur.fromValue ? `, значение "${cur.fromValue}"` : ""}` + : `${cur.fromValue ? `, с ${cur.fromValue}` : ""}` + `${cur.toValue ? `, по ${cur.toValue}` : ""}`) + + `${cur.SCOLOR ? `, ${cur.SCOLOR}` : ""}` + } + ], + [] + )} + emptyItem={{ key: -1, id: -1, caption: "Нет" }} onChange={handleColorRuleChange} sx={STYLES.SELECT} /> @@ -75,7 +89,7 @@ const SettingsDialog = ({ initial, onSettingsChange, onClose, ...other }) => { [...prev, { id: cur.id, caption: cur.descr }], [])} onChange={handleSortAttrChange} sx={STYLES.SELECT} @@ -88,6 +102,10 @@ const SettingsDialog = ({ initial, onSettingsChange, onClose, ...other }) => { + + *Поддерживаются правила заливки, базирующиеся на дополнительных свойствах типа "Строка" или "Число", из + профиля пользователя, настроенного для раздела "События" в WEB-интерфейсе данного приложения. + - } sx={STYLES.CARD_HEADER} /> @@ -165,11 +152,8 @@ StatusCard.propTypes = { statusTitle: PropTypes.string.isRequired, colorRules: PropTypes.object.isRequired, extraData: PropTypes.object.isRequired, - filtersType: PropTypes.string.isRequired, isCardAvailable: PropTypes.func.isRequired, onTasksReload: PropTypes.func.isRequired, - onDragItemChange: PropTypes.func.isRequired, - onTaskDialogOpen: PropTypes.func.isRequired, onNoteDialogOpen: PropTypes.func.isRequired, onStatusColorChange: PropTypes.func.isRequired, placeholder: PropTypes.object.isRequired diff --git a/app/panels/clnt_task_board/hooks/task_dialog_hooks.js b/app/panels/clnt_task_board/hooks/task_dialog_hooks.js index 55b45a7..414c369 100644 --- a/app/panels/clnt_task_board/hooks/task_dialog_hooks.js +++ b/app/panels/clnt_task_board/hooks/task_dialog_hooks.js @@ -15,7 +15,7 @@ import { BackEndСtx } from "../../../context/backend"; //Контекст вз //----------- //Хук для события -const useClientEvent = (taskRn, taskType = "", taskStatus = "") => { +const useClientEvent = (taskRn, taskType = "") => { //Собственное состояние const [task, setTask] = useState({ init: true, @@ -24,7 +24,7 @@ const useClientEvent = (taskRn, taskType = "", taskStatus = "") => { sPrefix: "", sNumber: "", sType: taskType, - sStatus: taskStatus, + sStatus: "", sDescription: "", sClntClients: "", sClntClnperson: "", @@ -118,6 +118,7 @@ const useClientEvent = (taskRn, taskType = "", taskStatus = "") => { ...pv, sPrefix: data.SPREF, sNumber: data.SNUMB, + sStatus: data.SSTATUS, sCurrentUser: data.SINIT_AUTHNAME, sInitClnperson: data.SINIT_PERSON, sInitUser: !data.SINIT_PERSON ? data.SINIT_AUTHNAME : "", diff --git a/app/panels/clnt_task_board/layouts.js b/app/panels/clnt_task_board/layouts.js index bbf6dca..474ef56 100644 --- a/app/panels/clnt_task_board/layouts.js +++ b/app/panels/clnt_task_board/layouts.js @@ -12,8 +12,8 @@ export const EVENT_STATES = Object.freeze({ 0: "Все", 1: "Не аннулир //Допустимые значение поля сортировки export const sortAttrs = [ - { id: "SEVNSTAT_CODE", descr: "Мнемокод" }, - { id: "SEVNSTAT_NAME", descr: "Наименование" }, + { id: "SEVNSTAT_CODE", descr: "Мнемокод статуса" }, + { id: "SEVNSTAT_NAME", descr: "Наименование статуса" }, { id: "SEVPOINT_DESCR", descr: "Описание точки маршрута" } ]; @@ -73,24 +73,16 @@ const convertHexToRGB = hex => { //Считывание заливки события по условию export const getTaskBgColorByRule = (task, colorRule) => { - //Инициализируем значения - let ruleCode = ""; - //Исходя из типа определяем наименование + //Исходя из типа определяем наименование и возвращаем цвет заливки switch (colorRule.STYPE) { case "number": - ruleCode = `N${colorRule.SFIELD}`; - break; - case "date": - ruleCode = `D${colorRule.SFIELD}`; - break; + return (!colorRule.fromValue || Number(task.docProps[`N${colorRule.SFIELD}`]) >= Number(colorRule.fromValue)) && + (!colorRule.toValue || Number(task.docProps[`N${colorRule.SFIELD}`]) <= Number(colorRule.toValue)) + ? convertHexToRGB(colorRule.SCOLOR) + : null; default: - ruleCode = `S${colorRule.SFIELD}`; - break; + return task.docProps[`S${colorRule.SFIELD}`] == colorRule.fromValue ? convertHexToRGB(colorRule.SCOLOR) : null; } - //Определяем цвет заливки - let bgColor = ruleCode && task.docProps[ruleCode] == colorRule.fromValue ? convertHexToRGB(colorRule.SCOLOR) : null; - //Возвращаем цвет заливки - return bgColor; }; //Индикация истечения срока отработки события diff --git a/app/panels/clnt_task_board/task_dialog.js b/app/panels/clnt_task_board/task_dialog.js index 7591f9a..d616134 100644 --- a/app/panels/clnt_task_board/task_dialog.js +++ b/app/panels/clnt_task_board/task_dialog.js @@ -35,9 +35,9 @@ const STYLES = { //----------- //Диалог формы события -const TaskDialog = ({ taskRn, taskType, taskStatus, editable, onTasksReload, onClose }) => { +const TaskDialog = ({ taskRn, taskType, editable, onTasksReload, onClose }) => { //Собственное состояние - const [task, setTask] = useClientEvent(taskRn, taskType, taskStatus); + const [task, setTask] = useClientEvent(taskRn, taskType); //Состояние заполненности всех обязательных свойств const [dpReady, setDPReady] = useState(false); @@ -167,7 +167,6 @@ const TaskDialog = ({ taskRn, taskType, taskStatus, editable, onTasksReload, onC TaskDialog.propTypes = { taskRn: PropTypes.number, taskType: PropTypes.string.isRequired, - taskStatus: PropTypes.string, editable: PropTypes.bool, onTasksReload: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired diff --git a/db/PKG_P8PANELS_CLNTTSKBRD.pck b/db/PKG_P8PANELS_CLNTTSKBRD.pck index c1fd029..3af6ce6 100644 --- a/db/PKG_P8PANELS_CLNTTSKBRD.pck +++ b/db/PKG_P8PANELS_CLNTTSKBRD.pck @@ -36,6 +36,7 @@ create or replace package PKG_P8PANELS_CLNTTSKBRD as SEVENT_TYPE in varchar2, -- Мнемокод типа события SPREF out varchar2, -- Префикс события SNUMB out varchar2, -- Номер события + SSTATUS out varchar2, -- Начальный статус SINIT_PERSON out varchar2, -- Сотрудник - инициатор SINIT_AUTHNAME out varchar2 -- Пользователь - инициатор ); @@ -1000,8 +1001,8 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as RDG_ROW => RDG_ROW, TDP_NAMES => TDP_NAMES, TDP_TYPES => TDP_TYPES, - NFIRST_NUMB => RDG.RCOL_DEFS.COUNT - PKG_CONTVALLOC1S.COUNT_(RCONTAINER => TDP_NAMES) - 1, - NLAST_NUMB => RDG.RCOL_DEFS.COUNT - 2, + NFIRST_NUMB => RDG.RCOL_DEFS.COUNT - PKG_CONTVALLOC1S.COUNT_(RCONTAINER => TDP_NAMES), + NLAST_NUMB => RDG.RCOL_DEFS.COUNT - 1, ICURSOR => ICURSOR, NACTION => 2); end if; @@ -1119,8 +1120,8 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as RDG_ROW => RDG_ROW, TDP_NAMES => TDP_NAMES, TDP_TYPES => TDP_TYPES, - NFIRST_NUMB => RDG.RCOL_DEFS.COUNT - PKG_CONTVALLOC1S.COUNT_(RCONTAINER => TDP_NAMES) - 1, - NLAST_NUMB => RDG.RCOL_DEFS.COUNT - 2, + NFIRST_NUMB => RDG.RCOL_DEFS.COUNT - PKG_CONTVALLOC1S.COUNT_(RCONTAINER => TDP_NAMES), + NLAST_NUMB => RDG.RCOL_DEFS.COUNT - 1, ICURSOR => ICURSOR, NACTION => 1); end if; @@ -1457,11 +1458,13 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as SEVENT_TYPE in varchar2, -- Мнемокод типа события SPREF out varchar2, -- Префикс события SNUMB out varchar2, -- Номер события + SSTATUS out varchar2, -- Начальный статус SINIT_PERSON out varchar2, -- Сотрудник - инициатор SINIT_AUTHNAME out varchar2 -- Пользователь - инициатор ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NEVENT_TYPE PKG_STD.TREF; -- Рег. номер типа события SOWNER_AGENT_RN PKG_STD.TSTRING; -- Рег. номер работодателя сотрудника STAB_PREF PKG_STD.TSTRING; -- Префикс табельного номера сотрудника STAB_NUMB PKG_STD.TSTRING; -- Таблеьный номер сотрудника @@ -1490,6 +1493,8 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as return SRESULT; end CLNEVNTYPES_PREF_GET; begin + /* Определяем рег. номер типа события */ + FIND_CLNEVNTYPES_CODE(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, SEVNTYPE_CODE => SEVENT_TYPE, NRN => NEVENT_TYPE); /* Считываем префикс из параметра */ SPREF := GET_OPTIONS_STR(SCODE => 'EventPrefix', NCOMP_VERS => NCOMPANY); /* Если префикс не указан в параметре и задан тип события */ @@ -1502,6 +1507,21 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as /* Считываем номер */ SNUMB := GET_CLNEVENTS_NEXTNUMB(NCOMPANY => NCOMPANY, SPREF => SPREF); end if; + /* Определим начальный статус */ + begin + select T.SEVNSTAT_CODE + into SSTATUS + from V_CLNEVNTYPSTS_FOR_EVENTS T + where T.NPRN = NEVENT_TYPE + and ROWNUM <= 1 + order by T.NDEFAULT_STATUS desc, + T.SEVNSTAT_CODE; + exception + when NO_DATA_FOUND then + P_EXCEPTION(0, + 'Для событий типа "%s" не определена начальная точка маршрута.', + SEVENT_TYPE); + end; /* Считываем сотрудника текущего пользователя */ FIND_PERSON_AUTHID(SPERSON => SINIT_PERSON, SOWNER_AGENT => SOWNER_AGENT_RN, @@ -2254,29 +2274,28 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as /* Считывание настройки раздела "События" для пользователя */ procedure CLNEVENTS_DP_RULES_GET ( - COUT out clob -- XML с настройкой раздела + COUT out clob -- XML с настройкой раздела ) is - SAUTHID PKG_STD.TSTRING := PKG_SESSION.GET_UTILIZER(); -- Пользователь - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - BXML blob; -- XML профиля пользователя для раздела "События" - RDOC PKG_XPATH.TDOCUMENT; -- Документ XML - RNODE_ROOT PKG_XPATH.TNODE; -- Корневой узел - RNODE_MAIN PKG_XPATH.TNODE; -- Основной узел - RNODE_GRIDFRAME PKG_XPATH.TNODE; -- Узел "gridFrame" - RNODE_DECOR_RULES PKG_XPATH.TNODE; -- Узел "decorationRules" - RNODE_RULE PKG_XPATH.TNODE; -- Узел "rule" - RNODE_RULE_LIST PKG_XPATH.TNODES; -- Список узлов "rule" - SFIELD PKG_STD.TSTRING; -- Код свойства документа (в формате "DP_<РЕГ_НОМЕР>") - SCOLOR PKG_STD.TSTRING; -- Код цвета - SDATA_TYPE PKG_STD.TSTRING; -- Тип данных - SDP_NAME PKG_STD.TSTRING; -- Наименование свойства документа - NFROM_VALUE PKG_STD.TNUMBER; -- Значение с (number) - NTO_VALUE PKG_STD.TNUMBER; -- Значение по (number) - SFROM_VALUE PKG_STD.TSTRING; -- Значение с (string) - STO_VALUE PKG_STD.TSTRING; -- Значение по (string) - DFROM_VALUE PKG_STD.TLDATE; -- Значение с (date) - DTO_VALUE PKG_STD.TLDATE; -- Значение по (date) + SAUTHID PKG_STD.TSTRING := PKG_SESSION.GET_UTILIZER(); -- Пользователь + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + SAPPCODE PKG_STD.TSTRING := PKG_SESSION.GET_APPLICATION(); -- Код приложения сеанса + BXML blob; -- XML профиля пользователя для раздела "События" + RDOC PKG_XPATH.TDOCUMENT; -- Документ XML + RNODE_ROOT PKG_XPATH.TNODE; -- Корневой узел + RNODE_MAIN PKG_XPATH.TNODE; -- Основной узел + RNODE_GRIDFRAME PKG_XPATH.TNODE; -- Узел "gridFrame" + RNODE_DECOR_RULES PKG_XPATH.TNODE; -- Узел "decorationRules" + RNODE_RULE PKG_XPATH.TNODE; -- Узел "rule" + RNODE_RULE_LIST PKG_XPATH.TNODES; -- Список узлов "rule" + SFIELD PKG_STD.TSTRING; -- Код свойства документа (в формате "DP_<РЕГ_НОМЕР>") + SCOLOR PKG_STD.TSTRING; -- Код цвета + SDATA_TYPE PKG_STD.TSTRING; -- Тип данных + SDP_NAME PKG_STD.TSTRING; -- Наименование свойства документа + NFROM_VALUE PKG_STD.TNUMBER; -- Значение с (number) + NTO_VALUE PKG_STD.TNUMBER; -- Значение по (number) + SFROM_VALUE PKG_STD.TSTRING; -- Значение с (string) + STO_VALUE PKG_STD.TSTRING; -- Значение по (string) /* Считывание наименования свойства документа */ function DOCS_PROPS_NAME_GET @@ -2287,19 +2306,22 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as NRN PKG_STD.TREF; -- Рег. номер свойства документа SRESULT PKG_STD.TSTRING; -- Наименование доп. свойства begin - /* Определяем рег. номер свойства документа по формату "DP_<РЕГ_НОМЕР>" */ - NRN := TO_NUMBER(SUBSTR(SFIELD, INSTR(SFIELD, '_') + 1)); - /* Считываем наименование из записи свойства документа */ - begin - select T.NAME into SRESULT from DOCS_PROPS T where T.RN = NRN; - exception - when NO_DATA_FOUND then - P_EXCEPTION(0, - 'Ошибка считывания записи свойства документа с рег. номером (%s).'); - when others then - P_EXCEPTION(0, - 'Ошибка считывания наименования свойства документа с рег. номером (%s).'); - end; + /* Если переданный код свойства соответствует формату */ + if (INSTR(SFIELD, 'DP_') <> 0) then + /* Определяем рег. номер свойства документа по формату "DP_<РЕГ_НОМЕР>" */ + NRN := TO_NUMBER(SUBSTR(SFIELD, INSTR(SFIELD, '_') + 1)); + /* Считываем наименование из записи свойства документа */ + begin + select T.NAME into SRESULT from DOCS_PROPS T where T.RN = NRN; + exception + when NO_DATA_FOUND then + P_EXCEPTION(0, + 'Ошибка считывания записи свойства документа с рег. номером (%s).'); + when others then + P_EXCEPTION(0, + 'Ошибка считывания наименования свойства документа с рег. номером (%s).'); + end; + end if; /* Возвращаем результат */ return SRESULT; end DOCS_PROPS_NAME_GET; @@ -2307,11 +2329,12 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as /* Считывание профиля пользователя для раздела "События" */ function USERPROFILES_GET ( - NCOMPANY in number, -- Рег. номер организации - SAUTHID in varchar2 -- Мнемокод пользователя - ) return blob -- Профиль пользователя для раздела "События" + NCOMPANY in number, -- Рег. номер организации + SAPPCODE in varchar2, -- Код приложения + SAUTHID in varchar2 -- Мнемокод пользователя + ) return blob -- Профиль пользователя для раздела "События" is - BRESULT blob; -- Профиль пользователя для раздела "События" + BRESULT blob; -- Профиль пользователя для раздела "События" begin /* Считываем профиль пользователя для раздела "События" */ begin @@ -2322,7 +2345,12 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as and U.AUTHID = SAUTHID and U.REC_TYPE = 1 and U.UNITMODE = 0 - and U.UNITCODE = SUNIT_CLNEVENTS; + and U.UNITCODE = SUNIT_CLNEVENTS + and U.KIND = 2 + and U.UNITFUNC is null + and U.REC_KEY is null + and U.SHOW_METHOD = 'main' + and U.APPCODE = SAPPCODE; exception when others then return null; @@ -2332,7 +2360,7 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as end USERPROFILES_GET; begin /* Считываем профиль пользователя для раздела "События" */ - BXML := USERPROFILES_GET(NCOMPANY => NCOMPANY, SAUTHID => SAUTHID); + BXML := USERPROFILES_GET(NCOMPANY => NCOMPANY, SAPPCODE => SAPPCODE, SAUTHID => SAUTHID); /* Проверим, что профиль не пустой */ if (BXML is null) then return; @@ -2359,71 +2387,60 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as SFIELD := PKG_XPATH.ATTRIBUTE(RNODE => RNODE_RULE, SNAME => 'field'); SCOLOR := PKG_XPATH.ATTRIBUTE(RNODE => RNODE_RULE, SNAME => 'color'); SDATA_TYPE := PKG_XPATH.ATTRIBUTE(RNODE => RNODE_RULE, SNAME => 'dataType'); - PKG_XFAST.DOWN_NODE(SNAME => 'XRULES'); - /* Код правила */ - PKG_XFAST.DOWN_NODE(SNAME => 'SFIELD'); - PKG_XFAST.VALUE(SVALUE => SFIELD); - PKG_XFAST.UP(); /* Считываем наименование свойства документа */ SDP_NAME := DOCS_PROPS_NAME_GET(SFIELD => SFIELD); - /* Наименование доп. свойства */ - PKG_XFAST.DOWN_NODE(SNAME => 'SDP_NAME'); - PKG_XFAST.VALUE(SVALUE => SDP_NAME); - PKG_XFAST.UP(); - /* Код цвета */ - PKG_XFAST.DOWN_NODE(SNAME => 'SCOLOR'); - PKG_XFAST.VALUE(SVALUE => SCOLOR); - PKG_XFAST.UP(); - /* Тип значения */ - PKG_XFAST.DOWN_NODE(SNAME => 'STYPE'); - PKG_XFAST.VALUE(SVALUE => SDATA_TYPE); - PKG_XFAST.UP(); - /* Исходим от типа данных */ - case SDATA_TYPE - /* Число */ - when 'number' then - NFROM_VALUE := PKG_XPATH.VALUE_NUM(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, - SPATTERN => 'fromValue')); - NTO_VALUE := PKG_XPATH.VALUE_NUM(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, - SPATTERN => 'toValue')); - /* Число с */ - PKG_XFAST.DOWN_NODE(SNAME => 'NFROM'); - PKG_XFAST.VALUE(NVALUE => NFROM_VALUE); - PKG_XFAST.UP(); - /* Число по */ - PKG_XFAST.DOWN_NODE(SNAME => 'NTO'); - PKG_XFAST.VALUE(NVALUE => NTO_VALUE); - PKG_XFAST.UP(); - /* Строка */ - when 'string' then - SFROM_VALUE := PKG_XPATH.VALUE(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, - SPATTERN => 'fromValue')); - STO_VALUE := PKG_XPATH.VALUE(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, - SPATTERN => 'toValue')); - /* Строка с */ - PKG_XFAST.DOWN_NODE(SNAME => 'SFROM'); - PKG_XFAST.VALUE(SVALUE => SFROM_VALUE); - PKG_XFAST.UP(); - /* Строка по */ - PKG_XFAST.DOWN_NODE(SNAME => 'STO'); - PKG_XFAST.VALUE(SVALUE => STO_VALUE); - PKG_XFAST.UP(); - /* Дата */ - else - DFROM_VALUE := PKG_XPATH.VALUE_DATE(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, - SPATTERN => 'fromValue')); - DTO_VALUE := PKG_XPATH.VALUE_DATE(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, - SPATTERN => 'toValue')); - /* Дата с */ - PKG_XFAST.DOWN_NODE(SNAME => 'DFROM'); - PKG_XFAST.VALUE(DVALUE => DFROM_VALUE); - PKG_XFAST.UP(); - /* Дата по */ - PKG_XFAST.DOWN_NODE(SNAME => 'DTO'); - PKG_XFAST.VALUE(DVALUE => DTO_VALUE); - PKG_XFAST.UP(); - end case; - PKG_XFAST.UP(); + /* Если это правило по доп. свойству и типа "строка" или "число" */ + if (SDP_NAME is not null) and (SDATA_TYPE in ('number', 'string')) then + PKG_XFAST.DOWN_NODE(SNAME => 'XRULES'); + /* Код правила */ + PKG_XFAST.DOWN_NODE(SNAME => 'SFIELD'); + PKG_XFAST.VALUE(SVALUE => SFIELD); + PKG_XFAST.UP(); + /* Наименование доп. свойства */ + PKG_XFAST.DOWN_NODE(SNAME => 'SDP_NAME'); + PKG_XFAST.VALUE(SVALUE => SDP_NAME); + PKG_XFAST.UP(); + /* Код цвета */ + PKG_XFAST.DOWN_NODE(SNAME => 'SCOLOR'); + PKG_XFAST.VALUE(SVALUE => SCOLOR); + PKG_XFAST.UP(); + /* Тип значения */ + PKG_XFAST.DOWN_NODE(SNAME => 'STYPE'); + PKG_XFAST.VALUE(SVALUE => SDATA_TYPE); + PKG_XFAST.UP(); + /* Исходим от типа данных */ + case SDATA_TYPE + /* Число */ + when 'number' then + NFROM_VALUE := PKG_XPATH.VALUE_NUM(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, + SPATTERN => 'fromValue')); + NTO_VALUE := PKG_XPATH.VALUE_NUM(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, + SPATTERN => 'toValue')); + /* Число с */ + PKG_XFAST.DOWN_NODE(SNAME => 'NFROM'); + PKG_XFAST.VALUE(NVALUE => NFROM_VALUE); + PKG_XFAST.UP(); + /* Число по */ + PKG_XFAST.DOWN_NODE(SNAME => 'NTO'); + PKG_XFAST.VALUE(NVALUE => NTO_VALUE); + PKG_XFAST.UP(); + /* Строка */ + when 'string' then + SFROM_VALUE := PKG_XPATH.VALUE(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, + SPATTERN => 'value')); + STO_VALUE := PKG_XPATH.VALUE(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => RNODE_RULE, + SPATTERN => 'value')); + /* Строка с */ + PKG_XFAST.DOWN_NODE(SNAME => 'SFROM'); + PKG_XFAST.VALUE(SVALUE => SFROM_VALUE); + PKG_XFAST.UP(); + /* Строка по */ + PKG_XFAST.DOWN_NODE(SNAME => 'STO'); + PKG_XFAST.VALUE(SVALUE => STO_VALUE); + PKG_XFAST.UP(); + end case; + PKG_XFAST.UP(); + end if; end loop; PKG_XPATH.FREE(RDOCUMENT => RDOC); PKG_XFAST.UP(); diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index e352e59..48eee92 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -1067,11 +1067,11 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOC_NUMB) ||'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TO_CHAR(T.DOC_DATE, ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'dd.mm.yyyy') || ') as SDOC_INFO,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case T.DOC_STATE'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 0 then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ' then'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'Не отработан')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 1 then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ' then'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'Отработан как план')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 2 then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 2) || ' then'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'Отработан как факт')); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' null'); @@ -1489,10 +1489,10 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' least(H.MIN_RESTPLAN,H.MIN_RESTFACT) NSALE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' H.RESTFACT NRESTFACT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' H.RESERV NRESERV,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case coalesce(GRP.NMEASTYPE, 0)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 0 then MU1.MEAS_MNEMO'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 1 then MU2.MEAS_MNEMO'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 2 then MU3.MEAS_MNEMO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case coalesce(GRP.NMEASTYPE, ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ' then MU1.MEAS_MNEMO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ' then MU2.MEAS_MNEMO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 2) || ' then MU3.MEAS_MNEMO'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end SPRICEMEAS'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from GOODSPARTIES G,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' NOMMODIF MF,'); @@ -2094,7 +2094,10 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.DREL_DATE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NREL_QUANT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NQUANT_FACT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> 0) then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * 100, 3) else 0 end NPROCENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 100) || ', ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 3) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end NPROCENT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.DOCPREF SDOCPREF,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.DOCNUMB SDOCNUMB,'); @@ -3328,7 +3331,10 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select P.NRN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.SDOC_INFO,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NQUANT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> 0) then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * 100, 2) else 0 end NPROCENT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 100) || ', ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 2) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end NPROCENT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NPRIOR_PARTY,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.SPROD_ORDER'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); @@ -3774,7 +3780,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SUBSTR(F_DOCSTATE_PLAN_FACT(T.DOC_STATE), 1, 20) SSTATE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SUBSTR(F_DOCSTATE_PLAN_FACT(T.DOC_STATE), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ', ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 20) || ') SSTATE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE ||'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TRIM(T.DOC_PREF) ||'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOC_NUMB) ||'); @@ -5910,7 +5916,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select IQ.RN NRN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' IQ."NAME" SNAME,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE SSUBDIV,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE((select SUM(F_DICMUNTS_BASE_RECALC_QUANT(0,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE((select SUM(F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.COMPANY,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.MUNIT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case'); @@ -5919,7 +5925,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when (JS.BEG_FACT < :DSYSDATE) then'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_FACT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' 0'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS))'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP JS,'); @@ -5932,7 +5938,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and (((TRUNC(JS.BEG_PLAN) >= :DSYSDATE) and (TRUNC(JS.BEG_PLAN) <= :DDATE_TO))'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' or ((JS.BEG_FACT < :DSYSDATE) and (TRUNC(JS.BEG_FACT) between :DDATE_FROM and :DDATE_TO)))'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ' || PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK') || '(T.COMPANY, T.SUBDIV, :SUTILIZER, :NSUBDIV) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = T.CRN)), 0) NLOAD'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = T.CRN)), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ') NLOAD'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INS_DEPARTMENT I,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SUBDIVSEQ HEQ,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQCONFIG IQ'); @@ -6192,7 +6198,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.MUNIT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.T_SHT_PLAN - SF.LABOUR_FACT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD), 3) NREMN_LABOUR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 3) || ') NREMN_LABOUR'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST F,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLSTSP SF,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTSHTSP SH left outer join FCOPERTYPES FT on SH.OPER_TPS = FT.RN'); @@ -7478,7 +7484,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN NQUANT_PLAN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE((select COUNT(SP.RN)'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSPAR SP'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SP.PRN = T.RN), 0) + 1 NRESOURCE_NUMB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SP.PRN = T.RN), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ') + ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ' NRESOURCE_NUMB,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.LABOUR_PLAN NLABOUR_PLAN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select AG.AGNFAMILYNAME'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from CLNPSPFM C,'); diff --git a/dist/p8-panels.js b/dist/p8-panels.js index b71b329..a74a1e9 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -455,7 +455,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var reac \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./clnt_task_board\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/clnt_task_board\": \"./app/panels/clnt_task_board/clnt_task_board.js\",\n\t\"./clnt_task_board/clnt_task_board.js\": \"./app/panels/clnt_task_board/clnt_task_board.js\",\n\t\"./clnt_task_board/components/custom_input_field\": \"./app/panels/clnt_task_board/components/custom_input_field.js\",\n\t\"./clnt_task_board/components/custom_input_field.js\": \"./app/panels/clnt_task_board/components/custom_input_field.js\",\n\t\"./clnt_task_board/components/filter_dialog\": \"./app/panels/clnt_task_board/components/filter_dialog.js\",\n\t\"./clnt_task_board/components/filter_dialog.js\": \"./app/panels/clnt_task_board/components/filter_dialog.js\",\n\t\"./clnt_task_board/components/note_dialog\": \"./app/panels/clnt_task_board/components/note_dialog.js\",\n\t\"./clnt_task_board/components/note_dialog.js\": \"./app/panels/clnt_task_board/components/note_dialog.js\",\n\t\"./clnt_task_board/components/settings_dialog\": \"./app/panels/clnt_task_board/components/settings_dialog.js\",\n\t\"./clnt_task_board/components/settings_dialog.js\": \"./app/panels/clnt_task_board/components/settings_dialog.js\",\n\t\"./clnt_task_board/components/status_card\": \"./app/panels/clnt_task_board/components/status_card.js\",\n\t\"./clnt_task_board/components/status_card.js\": \"./app/panels/clnt_task_board/components/status_card.js\",\n\t\"./clnt_task_board/components/status_card_settings\": \"./app/panels/clnt_task_board/components/status_card_settings.js\",\n\t\"./clnt_task_board/components/status_card_settings.js\": \"./app/panels/clnt_task_board/components/status_card_settings.js\",\n\t\"./clnt_task_board/components/task_card\": \"./app/panels/clnt_task_board/components/task_card.js\",\n\t\"./clnt_task_board/components/task_card.js\": \"./app/panels/clnt_task_board/components/task_card.js\",\n\t\"./clnt_task_board/components/task_form\": \"./app/panels/clnt_task_board/components/task_form.js\",\n\t\"./clnt_task_board/components/task_form.js\": \"./app/panels/clnt_task_board/components/task_form.js\",\n\t\"./clnt_task_board/components/task_form_tab_executor\": \"./app/panels/clnt_task_board/components/task_form_tab_executor.js\",\n\t\"./clnt_task_board/components/task_form_tab_executor.js\": \"./app/panels/clnt_task_board/components/task_form_tab_executor.js\",\n\t\"./clnt_task_board/components/task_form_tab_info\": \"./app/panels/clnt_task_board/components/task_form_tab_info.js\",\n\t\"./clnt_task_board/components/task_form_tab_info.js\": \"./app/panels/clnt_task_board/components/task_form_tab_info.js\",\n\t\"./clnt_task_board/components/task_form_tab_props\": \"./app/panels/clnt_task_board/components/task_form_tab_props.js\",\n\t\"./clnt_task_board/components/task_form_tab_props.js\": \"./app/panels/clnt_task_board/components/task_form_tab_props.js\",\n\t\"./clnt_task_board/filter\": \"./app/panels/clnt_task_board/filter.js\",\n\t\"./clnt_task_board/filter.js\": \"./app/panels/clnt_task_board/filter.js\",\n\t\"./clnt_task_board/hooks/dict_hooks\": \"./app/panels/clnt_task_board/hooks/dict_hooks.js\",\n\t\"./clnt_task_board/hooks/dict_hooks.js\": \"./app/panels/clnt_task_board/hooks/dict_hooks.js\",\n\t\"./clnt_task_board/hooks/filter_hooks\": \"./app/panels/clnt_task_board/hooks/filter_hooks.js\",\n\t\"./clnt_task_board/hooks/filter_hooks.js\": \"./app/panels/clnt_task_board/hooks/filter_hooks.js\",\n\t\"./clnt_task_board/hooks/hooks\": \"./app/panels/clnt_task_board/hooks/hooks.js\",\n\t\"./clnt_task_board/hooks/hooks.js\": \"./app/panels/clnt_task_board/hooks/hooks.js\",\n\t\"./clnt_task_board/hooks/task_dialog_hooks\": \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\",\n\t\"./clnt_task_board/hooks/task_dialog_hooks.js\": \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\",\n\t\"./clnt_task_board/hooks/tasks_hooks\": \"./app/panels/clnt_task_board/hooks/tasks_hooks.js\",\n\t\"./clnt_task_board/hooks/tasks_hooks.js\": \"./app/panels/clnt_task_board/hooks/tasks_hooks.js\",\n\t\"./clnt_task_board/index\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/index.js\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/layouts\": \"./app/panels/clnt_task_board/layouts.js\",\n\t\"./clnt_task_board/layouts.js\": \"./app/panels/clnt_task_board/layouts.js\",\n\t\"./clnt_task_board/styles\": \"./app/panels/clnt_task_board/styles.js\",\n\t\"./clnt_task_board/styles.js\": \"./app/panels/clnt_task_board/styles.js\",\n\t\"./clnt_task_board/task_dialog\": \"./app/panels/clnt_task_board/task_dialog.js\",\n\t\"./clnt_task_board/task_dialog.js\": \"./app/panels/clnt_task_board/task_dialog.js\",\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/hooks\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/hooks.js\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_help\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/img/1_1.png\": \"./app/panels/mech_rec_help/img/1_1.png\",\n\t\"./mech_rec_help/img/1_2.png\": \"./app/panels/mech_rec_help/img/1_2.png\",\n\t\"./mech_rec_help/img/1_3.png\": \"./app/panels/mech_rec_help/img/1_3.png\",\n\t\"./mech_rec_help/img/1_4.png\": \"./app/panels/mech_rec_help/img/1_4.png\",\n\t\"./mech_rec_help/img/1_5.png\": \"./app/panels/mech_rec_help/img/1_5.png\",\n\t\"./mech_rec_help/img/21_1.png\": \"./app/panels/mech_rec_help/img/21_1.png\",\n\t\"./mech_rec_help/img/21_2.png\": \"./app/panels/mech_rec_help/img/21_2.png\",\n\t\"./mech_rec_help/img/21_3.png\": \"./app/panels/mech_rec_help/img/21_3.png\",\n\t\"./mech_rec_help/img/2_1.png\": \"./app/panels/mech_rec_help/img/2_1.png\",\n\t\"./mech_rec_help/img/2_2.png\": \"./app/panels/mech_rec_help/img/2_2.png\",\n\t\"./mech_rec_help/img/2_3.png\": \"./app/panels/mech_rec_help/img/2_3.png\",\n\t\"./mech_rec_help/img/2_4.png\": \"./app/panels/mech_rec_help/img/2_4.png\",\n\t\"./mech_rec_help/img/2_5.png\": \"./app/panels/mech_rec_help/img/2_5.png\",\n\t\"./mech_rec_help/img/31_1.png\": \"./app/panels/mech_rec_help/img/31_1.png\",\n\t\"./mech_rec_help/img/31_10.png\": \"./app/panels/mech_rec_help/img/31_10.png\",\n\t\"./mech_rec_help/img/31_2.png\": \"./app/panels/mech_rec_help/img/31_2.png\",\n\t\"./mech_rec_help/img/31_3.png\": \"./app/panels/mech_rec_help/img/31_3.png\",\n\t\"./mech_rec_help/img/31_4.png\": \"./app/panels/mech_rec_help/img/31_4.png\",\n\t\"./mech_rec_help/img/31_5.png\": \"./app/panels/mech_rec_help/img/31_5.png\",\n\t\"./mech_rec_help/img/31_6.png\": \"./app/panels/mech_rec_help/img/31_6.png\",\n\t\"./mech_rec_help/img/31_7.png\": \"./app/panels/mech_rec_help/img/31_7.png\",\n\t\"./mech_rec_help/img/31_8.png\": \"./app/panels/mech_rec_help/img/31_8.png\",\n\t\"./mech_rec_help/img/31_9.png\": \"./app/panels/mech_rec_help/img/31_9.png\",\n\t\"./mech_rec_help/img/32_1.png\": \"./app/panels/mech_rec_help/img/32_1.png\",\n\t\"./mech_rec_help/img/32_2.png\": \"./app/panels/mech_rec_help/img/32_2.png\",\n\t\"./mech_rec_help/img/32_3.png\": \"./app/panels/mech_rec_help/img/32_3.png\",\n\t\"./mech_rec_help/img/33_1.png\": \"./app/panels/mech_rec_help/img/33_1.png\",\n\t\"./mech_rec_help/img/33_2.png\": \"./app/panels/mech_rec_help/img/33_2.png\",\n\t\"./mech_rec_help/img/33_3.png\": \"./app/panels/mech_rec_help/img/33_3.png\",\n\t\"./mech_rec_help/img/33_4.png\": \"./app/panels/mech_rec_help/img/33_4.png\",\n\t\"./mech_rec_help/img/34_1.png\": \"./app/panels/mech_rec_help/img/34_1.png\",\n\t\"./mech_rec_help/img/34_2.png\": \"./app/panels/mech_rec_help/img/34_2.png\",\n\t\"./mech_rec_help/img/34_3.png\": \"./app/panels/mech_rec_help/img/34_3.png\",\n\t\"./mech_rec_help/img/34_4.png\": \"./app/panels/mech_rec_help/img/34_4.png\",\n\t\"./mech_rec_help/img/34_5.png\": \"./app/panels/mech_rec_help/img/34_5.png\",\n\t\"./mech_rec_help/img/34_6.png\": \"./app/panels/mech_rec_help/img/34_6.png\",\n\t\"./mech_rec_help/img/34_7.png\": \"./app/panels/mech_rec_help/img/34_7.png\",\n\t\"./mech_rec_help/img/34_8.png\": \"./app/panels/mech_rec_help/img/34_8.png\",\n\t\"./mech_rec_help/img/35_1.png\": \"./app/panels/mech_rec_help/img/35_1.png\",\n\t\"./mech_rec_help/img/3_1.png\": \"./app/panels/mech_rec_help/img/3_1.png\",\n\t\"./mech_rec_help/img/410_1.png\": \"./app/panels/mech_rec_help/img/410_1.png\",\n\t\"./mech_rec_help/img/410_2.png\": \"./app/panels/mech_rec_help/img/410_2.png\",\n\t\"./mech_rec_help/img/410_3.png\": \"./app/panels/mech_rec_help/img/410_3.png\",\n\t\"./mech_rec_help/img/410_4.png\": \"./app/panels/mech_rec_help/img/410_4.png\",\n\t\"./mech_rec_help/img/410_5.png\": \"./app/panels/mech_rec_help/img/410_5.png\",\n\t\"./mech_rec_help/img/410_6.png\": \"./app/panels/mech_rec_help/img/410_6.png\",\n\t\"./mech_rec_help/img/410_7.png\": \"./app/panels/mech_rec_help/img/410_7.png\",\n\t\"./mech_rec_help/img/411_1.png\": \"./app/panels/mech_rec_help/img/411_1.png\",\n\t\"./mech_rec_help/img/411_2.png\": \"./app/panels/mech_rec_help/img/411_2.png\",\n\t\"./mech_rec_help/img/411_3.png\": \"./app/panels/mech_rec_help/img/411_3.png\",\n\t\"./mech_rec_help/img/411_4.png\": \"./app/panels/mech_rec_help/img/411_4.png\",\n\t\"./mech_rec_help/img/412_1.png\": \"./app/panels/mech_rec_help/img/412_1.png\",\n\t\"./mech_rec_help/img/412_2.png\": \"./app/panels/mech_rec_help/img/412_2.png\",\n\t\"./mech_rec_help/img/412_3.png\": \"./app/panels/mech_rec_help/img/412_3.png\",\n\t\"./mech_rec_help/img/412_4.png\": \"./app/panels/mech_rec_help/img/412_4.png\",\n\t\"./mech_rec_help/img/413_1.png\": \"./app/panels/mech_rec_help/img/413_1.png\",\n\t\"./mech_rec_help/img/413_2.png\": \"./app/panels/mech_rec_help/img/413_2.png\",\n\t\"./mech_rec_help/img/413_3.png\": \"./app/panels/mech_rec_help/img/413_3.png\",\n\t\"./mech_rec_help/img/413_4.png\": \"./app/panels/mech_rec_help/img/413_4.png\",\n\t\"./mech_rec_help/img/413_5.png\": \"./app/panels/mech_rec_help/img/413_5.png\",\n\t\"./mech_rec_help/img/414_1.png\": \"./app/panels/mech_rec_help/img/414_1.png\",\n\t\"./mech_rec_help/img/414_2.png\": \"./app/panels/mech_rec_help/img/414_2.png\",\n\t\"./mech_rec_help/img/414_3.png\": \"./app/panels/mech_rec_help/img/414_3.png\",\n\t\"./mech_rec_help/img/41_1.png\": \"./app/panels/mech_rec_help/img/41_1.png\",\n\t\"./mech_rec_help/img/41_10.png\": \"./app/panels/mech_rec_help/img/41_10.png\",\n\t\"./mech_rec_help/img/41_11.png\": \"./app/panels/mech_rec_help/img/41_11.png\",\n\t\"./mech_rec_help/img/41_12.png\": \"./app/panels/mech_rec_help/img/41_12.png\",\n\t\"./mech_rec_help/img/41_2.png\": \"./app/panels/mech_rec_help/img/41_2.png\",\n\t\"./mech_rec_help/img/41_3.png\": \"./app/panels/mech_rec_help/img/41_3.png\",\n\t\"./mech_rec_help/img/41_4.png\": \"./app/panels/mech_rec_help/img/41_4.png\",\n\t\"./mech_rec_help/img/41_5.png\": \"./app/panels/mech_rec_help/img/41_5.png\",\n\t\"./mech_rec_help/img/41_6.png\": \"./app/panels/mech_rec_help/img/41_6.png\",\n\t\"./mech_rec_help/img/41_7.png\": \"./app/panels/mech_rec_help/img/41_7.png\",\n\t\"./mech_rec_help/img/41_8.png\": \"./app/panels/mech_rec_help/img/41_8.png\",\n\t\"./mech_rec_help/img/41_9.png\": \"./app/panels/mech_rec_help/img/41_9.png\",\n\t\"./mech_rec_help/img/42_1.png\": \"./app/panels/mech_rec_help/img/42_1.png\",\n\t\"./mech_rec_help/img/42_2.png\": \"./app/panels/mech_rec_help/img/42_2.png\",\n\t\"./mech_rec_help/img/42_3.png\": \"./app/panels/mech_rec_help/img/42_3.png\",\n\t\"./mech_rec_help/img/42_4.png\": \"./app/panels/mech_rec_help/img/42_4.png\",\n\t\"./mech_rec_help/img/43_1.png\": \"./app/panels/mech_rec_help/img/43_1.png\",\n\t\"./mech_rec_help/img/43_2.png\": \"./app/panels/mech_rec_help/img/43_2.png\",\n\t\"./mech_rec_help/img/43_3.png\": \"./app/panels/mech_rec_help/img/43_3.png\",\n\t\"./mech_rec_help/img/43_4.png\": \"./app/panels/mech_rec_help/img/43_4.png\",\n\t\"./mech_rec_help/img/43_5.png\": \"./app/panels/mech_rec_help/img/43_5.png\",\n\t\"./mech_rec_help/img/43_6.png\": \"./app/panels/mech_rec_help/img/43_6.png\",\n\t\"./mech_rec_help/img/43_7.png\": \"./app/panels/mech_rec_help/img/43_7.png\",\n\t\"./mech_rec_help/img/43_8.png\": \"./app/panels/mech_rec_help/img/43_8.png\",\n\t\"./mech_rec_help/img/44_1.png\": \"./app/panels/mech_rec_help/img/44_1.png\",\n\t\"./mech_rec_help/img/44_10.png\": \"./app/panels/mech_rec_help/img/44_10.png\",\n\t\"./mech_rec_help/img/44_2.png\": \"./app/panels/mech_rec_help/img/44_2.png\",\n\t\"./mech_rec_help/img/44_3.png\": \"./app/panels/mech_rec_help/img/44_3.png\",\n\t\"./mech_rec_help/img/44_4.png\": \"./app/panels/mech_rec_help/img/44_4.png\",\n\t\"./mech_rec_help/img/44_5.png\": \"./app/panels/mech_rec_help/img/44_5.png\",\n\t\"./mech_rec_help/img/44_6.png\": \"./app/panels/mech_rec_help/img/44_6.png\",\n\t\"./mech_rec_help/img/44_7.png\": \"./app/panels/mech_rec_help/img/44_7.png\",\n\t\"./mech_rec_help/img/44_8.png\": \"./app/panels/mech_rec_help/img/44_8.png\",\n\t\"./mech_rec_help/img/44_9.png\": \"./app/panels/mech_rec_help/img/44_9.png\",\n\t\"./mech_rec_help/img/45_1.png\": \"./app/panels/mech_rec_help/img/45_1.png\",\n\t\"./mech_rec_help/img/45_10.png\": \"./app/panels/mech_rec_help/img/45_10.png\",\n\t\"./mech_rec_help/img/45_2.png\": \"./app/panels/mech_rec_help/img/45_2.png\",\n\t\"./mech_rec_help/img/45_3.png\": \"./app/panels/mech_rec_help/img/45_3.png\",\n\t\"./mech_rec_help/img/45_4.png\": \"./app/panels/mech_rec_help/img/45_4.png\",\n\t\"./mech_rec_help/img/45_5.png\": \"./app/panels/mech_rec_help/img/45_5.png\",\n\t\"./mech_rec_help/img/45_6.png\": \"./app/panels/mech_rec_help/img/45_6.png\",\n\t\"./mech_rec_help/img/45_7.png\": \"./app/panels/mech_rec_help/img/45_7.png\",\n\t\"./mech_rec_help/img/45_8.png\": \"./app/panels/mech_rec_help/img/45_8.png\",\n\t\"./mech_rec_help/img/45_9.png\": \"./app/panels/mech_rec_help/img/45_9.png\",\n\t\"./mech_rec_help/img/46_1.png\": \"./app/panels/mech_rec_help/img/46_1.png\",\n\t\"./mech_rec_help/img/46_2.png\": \"./app/panels/mech_rec_help/img/46_2.png\",\n\t\"./mech_rec_help/img/46_3.png\": \"./app/panels/mech_rec_help/img/46_3.png\",\n\t\"./mech_rec_help/img/46_4.png\": \"./app/panels/mech_rec_help/img/46_4.png\",\n\t\"./mech_rec_help/img/46_5.png\": \"./app/panels/mech_rec_help/img/46_5.png\",\n\t\"./mech_rec_help/img/46_6.png\": \"./app/panels/mech_rec_help/img/46_6.png\",\n\t\"./mech_rec_help/img/47_1.png\": \"./app/panels/mech_rec_help/img/47_1.png\",\n\t\"./mech_rec_help/img/47_10.png\": \"./app/panels/mech_rec_help/img/47_10.png\",\n\t\"./mech_rec_help/img/47_11.png\": \"./app/panels/mech_rec_help/img/47_11.png\",\n\t\"./mech_rec_help/img/47_12.png\": \"./app/panels/mech_rec_help/img/47_12.png\",\n\t\"./mech_rec_help/img/47_2.png\": \"./app/panels/mech_rec_help/img/47_2.png\",\n\t\"./mech_rec_help/img/47_3.png\": \"./app/panels/mech_rec_help/img/47_3.png\",\n\t\"./mech_rec_help/img/47_4.png\": \"./app/panels/mech_rec_help/img/47_4.png\",\n\t\"./mech_rec_help/img/47_5.png\": \"./app/panels/mech_rec_help/img/47_5.png\",\n\t\"./mech_rec_help/img/47_6.png\": \"./app/panels/mech_rec_help/img/47_6.png\",\n\t\"./mech_rec_help/img/47_7.png\": \"./app/panels/mech_rec_help/img/47_7.png\",\n\t\"./mech_rec_help/img/47_8.png\": \"./app/panels/mech_rec_help/img/47_8.png\",\n\t\"./mech_rec_help/img/47_9.png\": \"./app/panels/mech_rec_help/img/47_9.png\",\n\t\"./mech_rec_help/img/48_1.png\": \"./app/panels/mech_rec_help/img/48_1.png\",\n\t\"./mech_rec_help/img/48_2.png\": \"./app/panels/mech_rec_help/img/48_2.png\",\n\t\"./mech_rec_help/img/48_3.png\": \"./app/panels/mech_rec_help/img/48_3.png\",\n\t\"./mech_rec_help/img/48_4.png\": \"./app/panels/mech_rec_help/img/48_4.png\",\n\t\"./mech_rec_help/img/49_1.png\": \"./app/panels/mech_rec_help/img/49_1.png\",\n\t\"./mech_rec_help/img/49_2.png\": \"./app/panels/mech_rec_help/img/49_2.png\",\n\t\"./mech_rec_help/img/49_3.png\": \"./app/panels/mech_rec_help/img/49_3.png\",\n\t\"./mech_rec_help/img/add1_1.png\": \"./app/panels/mech_rec_help/img/add1_1.png\",\n\t\"./mech_rec_help/img/add1_2.png\": \"./app/panels/mech_rec_help/img/add1_2.png\",\n\t\"./mech_rec_help/img/add1_3.png\": \"./app/panels/mech_rec_help/img/add1_3.png\",\n\t\"./mech_rec_help/img/add1_4.png\": \"./app/panels/mech_rec_help/img/add1_4.png\",\n\t\"./mech_rec_help/img/add1_5.png\": \"./app/panels/mech_rec_help/img/add1_5.png\",\n\t\"./mech_rec_help/img/add1_6.png\": \"./app/panels/mech_rec_help/img/add1_6.png\",\n\t\"./mech_rec_help/img/add1_7.png\": \"./app/panels/mech_rec_help/img/add1_7.png\",\n\t\"./mech_rec_help/img/add1_8.png\": \"./app/panels/mech_rec_help/img/add1_8.png\",\n\t\"./mech_rec_help/img/add1_9.png\": \"./app/panels/mech_rec_help/img/add1_9.png\",\n\t\"./mech_rec_help/index\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/index.js\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/mech_rec_help\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./mech_rec_help/mech_rec_help.js\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./panels_editor\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/component_editor\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_editor.js\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_view\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/component_view.js\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/components/chart/editor\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/editor.js\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/view\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/chart/view.js\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/components\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components.js\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components_hooks\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/components_hooks.js\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/form/common\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/common.js\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/editor\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/editor.js\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/view\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/form/view.js\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/indicator/editor\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/editor.js\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/view\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/indicator/view.js\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/table/editor\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/editor.js\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/view\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/components/table/view.js\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/index\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/index.js\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/layout_item\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/layout_item.js\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/panels_editor\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./panels_editor/panels_editor.css\": \"./app/panels/panels_editor/panels_editor.css\",\n\t\"./panels_editor/panels_editor.js\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/21_1.png\": \"./app/panels/prj_help/img/21_1.png\",\n\t\"./prj_help/img/21_2.png\": \"./app/panels/prj_help/img/21_2.png\",\n\t\"./prj_help/img/21_3.png\": \"./app/panels/prj_help/img/21_3.png\",\n\t\"./prj_help/img/21_4.png\": \"./app/panels/prj_help/img/21_4.png\",\n\t\"./prj_help/img/21_5.png\": \"./app/panels/prj_help/img/21_5.png\",\n\t\"./prj_help/img/22_1.png\": \"./app/panels/prj_help/img/22_1.png\",\n\t\"./prj_help/img/22_2.png\": \"./app/panels/prj_help/img/22_2.png\",\n\t\"./prj_help/img/22_3.png\": \"./app/panels/prj_help/img/22_3.png\",\n\t\"./prj_help/img/23_1.png\": \"./app/panels/prj_help/img/23_1.png\",\n\t\"./prj_help/img/23_2.png\": \"./app/panels/prj_help/img/23_2.png\",\n\t\"./prj_help/img/24_1.png\": \"./app/panels/prj_help/img/24_1.png\",\n\t\"./prj_help/img/24_2.png\": \"./app/panels/prj_help/img/24_2.png\",\n\t\"./prj_help/img/24_3.png\": \"./app/panels/prj_help/img/24_3.png\",\n\t\"./prj_help/img/24_4.png\": \"./app/panels/prj_help/img/24_4.png\",\n\t\"./prj_help/img/24_5.png\": \"./app/panels/prj_help/img/24_5.png\",\n\t\"./prj_help/img/3_1.png\": \"./app/panels/prj_help/img/3_1.png\",\n\t\"./prj_help/img/3_2.png\": \"./app/panels/prj_help/img/3_2.png\",\n\t\"./prj_help/img/3_3.png\": \"./app/panels/prj_help/img/3_3.png\",\n\t\"./prj_help/img/3_4.png\": \"./app/panels/prj_help/img/3_4.png\",\n\t\"./prj_help/img/3_5.png\": \"./app/panels/prj_help/img/3_5.png\",\n\t\"./prj_help/img/3_6.png\": \"./app/panels/prj_help/img/3_6.png\",\n\t\"./prj_help/img/41_1.png\": \"./app/panels/prj_help/img/41_1.png\",\n\t\"./prj_help/img/41_2.png\": \"./app/panels/prj_help/img/41_2.png\",\n\t\"./prj_help/img/42_1.png\": \"./app/panels/prj_help/img/42_1.png\",\n\t\"./prj_help/img/42_2.png\": \"./app/panels/prj_help/img/42_2.png\",\n\t\"./prj_help/img/43_1.png\": \"./app/panels/prj_help/img/43_1.png\",\n\t\"./prj_help/img/43_2.png\": \"./app/panels/prj_help/img/43_2.png\",\n\t\"./prj_help/img/43_3.png\": \"./app/panels/prj_help/img/43_3.png\",\n\t\"./prj_help/img/43_4.png\": \"./app/panels/prj_help/img/43_4.png\",\n\t\"./prj_help/img/44_1.png\": \"./app/panels/prj_help/img/44_1.png\",\n\t\"./prj_help/img/44_2.png\": \"./app/panels/prj_help/img/44_2.png\",\n\t\"./prj_help/img/44_3.png\": \"./app/panels/prj_help/img/44_3.png\",\n\t\"./prj_help/img/44_4.png\": \"./app/panels/prj_help/img/44_4.png\",\n\t\"./prj_help/img/45_1.png\": \"./app/panels/prj_help/img/45_1.png\",\n\t\"./prj_help/img/46_1.png\": \"./app/panels/prj_help/img/46_1.png\",\n\t\"./prj_help/img/47_1.png\": \"./app/panels/prj_help/img/47_1.png\",\n\t\"./prj_help/img/71_1.png\": \"./app/panels/prj_help/img/71_1.png\",\n\t\"./prj_help/img/72_1.png\": \"./app/panels/prj_help/img/72_1.png\",\n\t\"./prj_help/img/72_2.png\": \"./app/panels/prj_help/img/72_2.png\",\n\t\"./prj_help/img/72_3.png\": \"./app/panels/prj_help/img/72_3.png\",\n\t\"./prj_help/img/74_1.png\": \"./app/panels/prj_help/img/74_1.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_info\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/filter\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter.js\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter_dialog\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/filter_dialog.js\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/index\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/index.js\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/layouts\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/layouts.js\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/prj_info\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/prj_info.js\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/projects\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects.js\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects_hooks\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_hooks.js\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_layouts\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/projects_layouts.js\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/stage_detail\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail.js\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail_hooks\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_hooks.js\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_layouts\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stage_detail_layouts.js\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stages\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages.js\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages_hooks\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_hooks.js\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_layouts\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_info/stages_layouts.js\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./query_editor\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/common\": \"./app/panels/query_editor/common.js\",\n\t\"./query_editor/common.js\": \"./app/panels/query_editor/common.js\",\n\t\"./query_editor/components/argument/argument\": \"./app/panels/query_editor/components/argument/argument.js\",\n\t\"./query_editor/components/argument/argument.js\": \"./app/panels/query_editor/components/argument/argument.js\",\n\t\"./query_editor/components/attribute/attribute\": \"./app/panels/query_editor/components/attribute/attribute.js\",\n\t\"./query_editor/components/attribute/attribute.js\": \"./app/panels/query_editor/components/attribute/attribute.js\",\n\t\"./query_editor/components/entity/entity\": \"./app/panels/query_editor/components/entity/entity.js\",\n\t\"./query_editor/components/entity/entity.js\": \"./app/panels/query_editor/components/entity/entity.js\",\n\t\"./query_editor/components/inspector/inspector\": \"./app/panels/query_editor/components/inspector/inspector.js\",\n\t\"./query_editor/components/inspector/inspector.js\": \"./app/panels/query_editor/components/inspector/inspector.js\",\n\t\"./query_editor/components/inspector/query_area\": \"./app/panels/query_editor/components/inspector/query_area.js\",\n\t\"./query_editor/components/inspector/query_area.js\": \"./app/panels/query_editor/components/inspector/query_area.js\",\n\t\"./query_editor/components/inspector_query_args/arg_iu_dialog\": \"./app/panels/query_editor/components/inspector_query_args/arg_iu_dialog.js\",\n\t\"./query_editor/components/inspector_query_args/arg_iu_dialog.js\": \"./app/panels/query_editor/components/inspector_query_args/arg_iu_dialog.js\",\n\t\"./query_editor/components/inspector_query_args/args_list\": \"./app/panels/query_editor/components/inspector_query_args/args_list.js\",\n\t\"./query_editor/components/inspector_query_args/args_list.js\": \"./app/panels/query_editor/components/inspector_query_args/args_list.js\",\n\t\"./query_editor/components/inspector_query_args/hooks\": \"./app/panels/query_editor/components/inspector_query_args/hooks.js\",\n\t\"./query_editor/components/inspector_query_args/hooks.js\": \"./app/panels/query_editor/components/inspector_query_args/hooks.js\",\n\t\"./query_editor/components/inspector_query_args/inspector_query_args\": \"./app/panels/query_editor/components/inspector_query_args/inspector_query_args.js\",\n\t\"./query_editor/components/inspector_query_args/inspector_query_args.js\": \"./app/panels/query_editor/components/inspector_query_args/inspector_query_args.js\",\n\t\"./query_editor/components/inspector_query_args/query_args_dialog\": \"./app/panels/query_editor/components/inspector_query_args/query_args_dialog.js\",\n\t\"./query_editor/components/inspector_query_args/query_args_dialog.js\": \"./app/panels/query_editor/components/inspector_query_args/query_args_dialog.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_component_select_button\": \"./app/panels/query_editor/components/inspector_query_cond/cond_component_select_button.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_component_select_button.js\": \"./app/panels/query_editor/components/inspector_query_cond/cond_component_select_button.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_operation_buttons\": \"./app/panels/query_editor/components/inspector_query_cond/cond_operation_buttons.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_operation_buttons.js\": \"./app/panels/query_editor/components/inspector_query_cond/cond_operation_buttons.js\",\n\t\"./query_editor/components/inspector_query_cond/hooks\": \"./app/panels/query_editor/components/inspector_query_cond/hooks.js\",\n\t\"./query_editor/components/inspector_query_cond/hooks.js\": \"./app/panels/query_editor/components/inspector_query_cond/hooks.js\",\n\t\"./query_editor/components/inspector_query_cond/inspector_query_cond\": \"./app/panels/query_editor/components/inspector_query_cond/inspector_query_cond.js\",\n\t\"./query_editor/components/inspector_query_cond/inspector_query_cond.js\": \"./app/panels/query_editor/components/inspector_query_cond/inspector_query_cond.js\",\n\t\"./query_editor/components/inspector_query_cond/query_cond_dialog\": \"./app/panels/query_editor/components/inspector_query_cond/query_cond_dialog.js\",\n\t\"./query_editor/components/inspector_query_cond/query_cond_dialog.js\": \"./app/panels/query_editor/components/inspector_query_cond/query_cond_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/attr_setup_dialog\": \"./app/panels/query_editor/components/inspector_query_ents/attr_setup_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/attr_setup_dialog.js\": \"./app/panels/query_editor/components/inspector_query_ents/attr_setup_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/attrs_list\": \"./app/panels/query_editor/components/inspector_query_ents/attrs_list.js\",\n\t\"./query_editor/components/inspector_query_ents/attrs_list.js\": \"./app/panels/query_editor/components/inspector_query_ents/attrs_list.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_add_dialog\": \"./app/panels/query_editor/components/inspector_query_ents/entity_add_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_add_dialog.js\": \"./app/panels/query_editor/components/inspector_query_ents/entity_add_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_attrs_dialog\": \"./app/panels/query_editor/components/inspector_query_ents/entity_attrs_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_attrs_dialog.js\": \"./app/panels/query_editor/components/inspector_query_ents/entity_attrs_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/ents_list\": \"./app/panels/query_editor/components/inspector_query_ents/ents_list.js\",\n\t\"./query_editor/components/inspector_query_ents/ents_list.js\": \"./app/panels/query_editor/components/inspector_query_ents/ents_list.js\",\n\t\"./query_editor/components/inspector_query_ents/hooks\": \"./app/panels/query_editor/components/inspector_query_ents/hooks.js\",\n\t\"./query_editor/components/inspector_query_ents/hooks.js\": \"./app/panels/query_editor/components/inspector_query_ents/hooks.js\",\n\t\"./query_editor/components/inspector_query_ents/inspector_query_ents\": \"./app/panels/query_editor/components/inspector_query_ents/inspector_query_ents.js\",\n\t\"./query_editor/components/inspector_query_ents/inspector_query_ents.js\": \"./app/panels/query_editor/components/inspector_query_ents/inspector_query_ents.js\",\n\t\"./query_editor/components/inspector_query_rls/hooks\": \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\",\n\t\"./query_editor/components/inspector_query_rls/hooks.js\": \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\",\n\t\"./query_editor/components/inspector_query_rls/inspector_query_rls\": \"./app/panels/query_editor/components/inspector_query_rls/inspector_query_rls.js\",\n\t\"./query_editor/components/inspector_query_rls/inspector_query_rls.js\": \"./app/panels/query_editor/components/inspector_query_rls/inspector_query_rls.js\",\n\t\"./query_editor/components/queries_manager/hooks\": \"./app/panels/query_editor/components/queries_manager/hooks.js\",\n\t\"./query_editor/components/queries_manager/hooks.js\": \"./app/panels/query_editor/components/queries_manager/hooks.js\",\n\t\"./query_editor/components/queries_manager/queries_list\": \"./app/panels/query_editor/components/queries_manager/queries_list.js\",\n\t\"./query_editor/components/queries_manager/queries_list.js\": \"./app/panels/query_editor/components/queries_manager/queries_list.js\",\n\t\"./query_editor/components/queries_manager/queries_manager\": \"./app/panels/query_editor/components/queries_manager/queries_manager.js\",\n\t\"./query_editor/components/queries_manager/queries_manager.js\": \"./app/panels/query_editor/components/queries_manager/queries_manager.js\",\n\t\"./query_editor/components/queries_manager/query_iu_dialog\": \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\",\n\t\"./query_editor/components/queries_manager/query_iu_dialog.js\": \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\",\n\t\"./query_editor/components/query_diagram/query_diagram\": \"./app/panels/query_editor/components/query_diagram/query_diagram.js\",\n\t\"./query_editor/components/query_diagram/query_diagram.css\": \"./app/panels/query_editor/components/query_diagram/query_diagram.css\",\n\t\"./query_editor/components/query_diagram/query_diagram.js\": \"./app/panels/query_editor/components/query_diagram/query_diagram.js\",\n\t\"./query_editor/components/relation/relation\": \"./app/panels/query_editor/components/relation/relation.js\",\n\t\"./query_editor/components/relation/relation.js\": \"./app/panels/query_editor/components/relation/relation.js\",\n\t\"./query_editor/hooks\": \"./app/panels/query_editor/hooks.js\",\n\t\"./query_editor/hooks.js\": \"./app/panels/query_editor/hooks.js\",\n\t\"./query_editor/index\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/index.js\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/query_editor\": \"./app/panels/query_editor/query_editor.js\",\n\t\"./query_editor/query_editor.js\": \"./app/panels/query_editor/query_editor.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/common\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/common.js\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/components/action_message\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/action_message.js\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/dialog_help\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_help.js\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_order\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_order.js\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/mark_card\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card.js\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar.js\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list.js\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/marks\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks.js\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar.js\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/section\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section.js\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section_tab\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/section_tab.js\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/sections\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/components/sections.js\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/cyclogram\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/cyclogram.js\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/indicator\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/indicator.js\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./clnt_task_board\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/clnt_task_board\": \"./app/panels/clnt_task_board/clnt_task_board.js\",\n\t\"./clnt_task_board/clnt_task_board.js\": \"./app/panels/clnt_task_board/clnt_task_board.js\",\n\t\"./clnt_task_board/components/custom_input_field\": \"./app/panels/clnt_task_board/components/custom_input_field.js\",\n\t\"./clnt_task_board/components/custom_input_field.js\": \"./app/panels/clnt_task_board/components/custom_input_field.js\",\n\t\"./clnt_task_board/components/filter_dialog\": \"./app/panels/clnt_task_board/components/filter_dialog.js\",\n\t\"./clnt_task_board/components/filter_dialog.js\": \"./app/panels/clnt_task_board/components/filter_dialog.js\",\n\t\"./clnt_task_board/components/note_dialog\": \"./app/panels/clnt_task_board/components/note_dialog.js\",\n\t\"./clnt_task_board/components/note_dialog.js\": \"./app/panels/clnt_task_board/components/note_dialog.js\",\n\t\"./clnt_task_board/components/settings_dialog\": \"./app/panels/clnt_task_board/components/settings_dialog.js\",\n\t\"./clnt_task_board/components/settings_dialog.js\": \"./app/panels/clnt_task_board/components/settings_dialog.js\",\n\t\"./clnt_task_board/components/status_card\": \"./app/panels/clnt_task_board/components/status_card.js\",\n\t\"./clnt_task_board/components/status_card.js\": \"./app/panels/clnt_task_board/components/status_card.js\",\n\t\"./clnt_task_board/components/status_card_settings\": \"./app/panels/clnt_task_board/components/status_card_settings.js\",\n\t\"./clnt_task_board/components/status_card_settings.js\": \"./app/panels/clnt_task_board/components/status_card_settings.js\",\n\t\"./clnt_task_board/components/task_card\": \"./app/panels/clnt_task_board/components/task_card.js\",\n\t\"./clnt_task_board/components/task_card.js\": \"./app/panels/clnt_task_board/components/task_card.js\",\n\t\"./clnt_task_board/components/task_form\": \"./app/panels/clnt_task_board/components/task_form.js\",\n\t\"./clnt_task_board/components/task_form.js\": \"./app/panels/clnt_task_board/components/task_form.js\",\n\t\"./clnt_task_board/components/task_form_tab_executor\": \"./app/panels/clnt_task_board/components/task_form_tab_executor.js\",\n\t\"./clnt_task_board/components/task_form_tab_executor.js\": \"./app/panels/clnt_task_board/components/task_form_tab_executor.js\",\n\t\"./clnt_task_board/components/task_form_tab_info\": \"./app/panels/clnt_task_board/components/task_form_tab_info.js\",\n\t\"./clnt_task_board/components/task_form_tab_info.js\": \"./app/panels/clnt_task_board/components/task_form_tab_info.js\",\n\t\"./clnt_task_board/components/task_form_tab_props\": \"./app/panels/clnt_task_board/components/task_form_tab_props.js\",\n\t\"./clnt_task_board/components/task_form_tab_props.js\": \"./app/panels/clnt_task_board/components/task_form_tab_props.js\",\n\t\"./clnt_task_board/filter\": \"./app/panels/clnt_task_board/filter.js\",\n\t\"./clnt_task_board/filter.js\": \"./app/panels/clnt_task_board/filter.js\",\n\t\"./clnt_task_board/hooks/dict_hooks\": \"./app/panels/clnt_task_board/hooks/dict_hooks.js\",\n\t\"./clnt_task_board/hooks/dict_hooks.js\": \"./app/panels/clnt_task_board/hooks/dict_hooks.js\",\n\t\"./clnt_task_board/hooks/filter_hooks\": \"./app/panels/clnt_task_board/hooks/filter_hooks.js\",\n\t\"./clnt_task_board/hooks/filter_hooks.js\": \"./app/panels/clnt_task_board/hooks/filter_hooks.js\",\n\t\"./clnt_task_board/hooks/hooks\": \"./app/panels/clnt_task_board/hooks/hooks.js\",\n\t\"./clnt_task_board/hooks/hooks.js\": \"./app/panels/clnt_task_board/hooks/hooks.js\",\n\t\"./clnt_task_board/hooks/task_dialog_hooks\": \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\",\n\t\"./clnt_task_board/hooks/task_dialog_hooks.js\": \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\",\n\t\"./clnt_task_board/hooks/tasks_hooks\": \"./app/panels/clnt_task_board/hooks/tasks_hooks.js\",\n\t\"./clnt_task_board/hooks/tasks_hooks.js\": \"./app/panels/clnt_task_board/hooks/tasks_hooks.js\",\n\t\"./clnt_task_board/index\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/index.js\": \"./app/panels/clnt_task_board/index.js\",\n\t\"./clnt_task_board/layouts\": \"./app/panels/clnt_task_board/layouts.js\",\n\t\"./clnt_task_board/layouts.js\": \"./app/panels/clnt_task_board/layouts.js\",\n\t\"./clnt_task_board/styles\": \"./app/panels/clnt_task_board/styles.js\",\n\t\"./clnt_task_board/styles.js\": \"./app/panels/clnt_task_board/styles.js\",\n\t\"./clnt_task_board/task_dialog\": \"./app/panels/clnt_task_board/task_dialog.js\",\n\t\"./clnt_task_board/task_dialog.js\": \"./app/panels/clnt_task_board/task_dialog.js\",\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/hooks\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/hooks.js\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_help\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/img/1_1.png\": \"./app/panels/mech_rec_help/img/1_1.png\",\n\t\"./mech_rec_help/img/1_2.png\": \"./app/panels/mech_rec_help/img/1_2.png\",\n\t\"./mech_rec_help/img/1_3.png\": \"./app/panels/mech_rec_help/img/1_3.png\",\n\t\"./mech_rec_help/img/1_4.png\": \"./app/panels/mech_rec_help/img/1_4.png\",\n\t\"./mech_rec_help/img/1_5.png\": \"./app/panels/mech_rec_help/img/1_5.png\",\n\t\"./mech_rec_help/img/21_1.png\": \"./app/panels/mech_rec_help/img/21_1.png\",\n\t\"./mech_rec_help/img/21_2.png\": \"./app/panels/mech_rec_help/img/21_2.png\",\n\t\"./mech_rec_help/img/21_3.png\": \"./app/panels/mech_rec_help/img/21_3.png\",\n\t\"./mech_rec_help/img/2_1.png\": \"./app/panels/mech_rec_help/img/2_1.png\",\n\t\"./mech_rec_help/img/2_2.png\": \"./app/panels/mech_rec_help/img/2_2.png\",\n\t\"./mech_rec_help/img/2_3.png\": \"./app/panels/mech_rec_help/img/2_3.png\",\n\t\"./mech_rec_help/img/2_4.png\": \"./app/panels/mech_rec_help/img/2_4.png\",\n\t\"./mech_rec_help/img/2_5.png\": \"./app/panels/mech_rec_help/img/2_5.png\",\n\t\"./mech_rec_help/img/31_1.png\": \"./app/panels/mech_rec_help/img/31_1.png\",\n\t\"./mech_rec_help/img/31_10.png\": \"./app/panels/mech_rec_help/img/31_10.png\",\n\t\"./mech_rec_help/img/31_2.png\": \"./app/panels/mech_rec_help/img/31_2.png\",\n\t\"./mech_rec_help/img/31_3.png\": \"./app/panels/mech_rec_help/img/31_3.png\",\n\t\"./mech_rec_help/img/31_4.png\": \"./app/panels/mech_rec_help/img/31_4.png\",\n\t\"./mech_rec_help/img/31_5.png\": \"./app/panels/mech_rec_help/img/31_5.png\",\n\t\"./mech_rec_help/img/31_6.png\": \"./app/panels/mech_rec_help/img/31_6.png\",\n\t\"./mech_rec_help/img/31_7.png\": \"./app/panels/mech_rec_help/img/31_7.png\",\n\t\"./mech_rec_help/img/31_8.png\": \"./app/panels/mech_rec_help/img/31_8.png\",\n\t\"./mech_rec_help/img/31_9.png\": \"./app/panels/mech_rec_help/img/31_9.png\",\n\t\"./mech_rec_help/img/32_1.png\": \"./app/panels/mech_rec_help/img/32_1.png\",\n\t\"./mech_rec_help/img/32_2.png\": \"./app/panels/mech_rec_help/img/32_2.png\",\n\t\"./mech_rec_help/img/32_3.png\": \"./app/panels/mech_rec_help/img/32_3.png\",\n\t\"./mech_rec_help/img/33_1.png\": \"./app/panels/mech_rec_help/img/33_1.png\",\n\t\"./mech_rec_help/img/33_2.png\": \"./app/panels/mech_rec_help/img/33_2.png\",\n\t\"./mech_rec_help/img/33_3.png\": \"./app/panels/mech_rec_help/img/33_3.png\",\n\t\"./mech_rec_help/img/33_4.png\": \"./app/panels/mech_rec_help/img/33_4.png\",\n\t\"./mech_rec_help/img/34_1.png\": \"./app/panels/mech_rec_help/img/34_1.png\",\n\t\"./mech_rec_help/img/34_2.png\": \"./app/panels/mech_rec_help/img/34_2.png\",\n\t\"./mech_rec_help/img/34_3.png\": \"./app/panels/mech_rec_help/img/34_3.png\",\n\t\"./mech_rec_help/img/34_4.png\": \"./app/panels/mech_rec_help/img/34_4.png\",\n\t\"./mech_rec_help/img/34_5.png\": \"./app/panels/mech_rec_help/img/34_5.png\",\n\t\"./mech_rec_help/img/34_6.png\": \"./app/panels/mech_rec_help/img/34_6.png\",\n\t\"./mech_rec_help/img/34_7.png\": \"./app/panels/mech_rec_help/img/34_7.png\",\n\t\"./mech_rec_help/img/34_8.png\": \"./app/panels/mech_rec_help/img/34_8.png\",\n\t\"./mech_rec_help/img/35_1.png\": \"./app/panels/mech_rec_help/img/35_1.png\",\n\t\"./mech_rec_help/img/3_1.png\": \"./app/panels/mech_rec_help/img/3_1.png\",\n\t\"./mech_rec_help/img/410_1.png\": \"./app/panels/mech_rec_help/img/410_1.png\",\n\t\"./mech_rec_help/img/410_2.png\": \"./app/panels/mech_rec_help/img/410_2.png\",\n\t\"./mech_rec_help/img/410_3.png\": \"./app/panels/mech_rec_help/img/410_3.png\",\n\t\"./mech_rec_help/img/410_4.png\": \"./app/panels/mech_rec_help/img/410_4.png\",\n\t\"./mech_rec_help/img/410_5.png\": \"./app/panels/mech_rec_help/img/410_5.png\",\n\t\"./mech_rec_help/img/410_6.png\": \"./app/panels/mech_rec_help/img/410_6.png\",\n\t\"./mech_rec_help/img/410_7.png\": \"./app/panels/mech_rec_help/img/410_7.png\",\n\t\"./mech_rec_help/img/411_1.png\": \"./app/panels/mech_rec_help/img/411_1.png\",\n\t\"./mech_rec_help/img/411_2.png\": \"./app/panels/mech_rec_help/img/411_2.png\",\n\t\"./mech_rec_help/img/411_3.png\": \"./app/panels/mech_rec_help/img/411_3.png\",\n\t\"./mech_rec_help/img/411_4.png\": \"./app/panels/mech_rec_help/img/411_4.png\",\n\t\"./mech_rec_help/img/412_1.png\": \"./app/panels/mech_rec_help/img/412_1.png\",\n\t\"./mech_rec_help/img/412_2.png\": \"./app/panels/mech_rec_help/img/412_2.png\",\n\t\"./mech_rec_help/img/412_3.png\": \"./app/panels/mech_rec_help/img/412_3.png\",\n\t\"./mech_rec_help/img/412_4.png\": \"./app/panels/mech_rec_help/img/412_4.png\",\n\t\"./mech_rec_help/img/413_1.png\": \"./app/panels/mech_rec_help/img/413_1.png\",\n\t\"./mech_rec_help/img/413_2.png\": \"./app/panels/mech_rec_help/img/413_2.png\",\n\t\"./mech_rec_help/img/413_3.png\": \"./app/panels/mech_rec_help/img/413_3.png\",\n\t\"./mech_rec_help/img/413_4.png\": \"./app/panels/mech_rec_help/img/413_4.png\",\n\t\"./mech_rec_help/img/413_5.png\": \"./app/panels/mech_rec_help/img/413_5.png\",\n\t\"./mech_rec_help/img/414_1.png\": \"./app/panels/mech_rec_help/img/414_1.png\",\n\t\"./mech_rec_help/img/414_2.png\": \"./app/panels/mech_rec_help/img/414_2.png\",\n\t\"./mech_rec_help/img/414_3.png\": \"./app/panels/mech_rec_help/img/414_3.png\",\n\t\"./mech_rec_help/img/41_1.png\": \"./app/panels/mech_rec_help/img/41_1.png\",\n\t\"./mech_rec_help/img/41_10.png\": \"./app/panels/mech_rec_help/img/41_10.png\",\n\t\"./mech_rec_help/img/41_11.png\": \"./app/panels/mech_rec_help/img/41_11.png\",\n\t\"./mech_rec_help/img/41_12.png\": \"./app/panels/mech_rec_help/img/41_12.png\",\n\t\"./mech_rec_help/img/41_2.png\": \"./app/panels/mech_rec_help/img/41_2.png\",\n\t\"./mech_rec_help/img/41_3.png\": \"./app/panels/mech_rec_help/img/41_3.png\",\n\t\"./mech_rec_help/img/41_4.png\": \"./app/panels/mech_rec_help/img/41_4.png\",\n\t\"./mech_rec_help/img/41_5.png\": \"./app/panels/mech_rec_help/img/41_5.png\",\n\t\"./mech_rec_help/img/41_6.png\": \"./app/panels/mech_rec_help/img/41_6.png\",\n\t\"./mech_rec_help/img/41_7.png\": \"./app/panels/mech_rec_help/img/41_7.png\",\n\t\"./mech_rec_help/img/41_8.png\": \"./app/panels/mech_rec_help/img/41_8.png\",\n\t\"./mech_rec_help/img/41_9.png\": \"./app/panels/mech_rec_help/img/41_9.png\",\n\t\"./mech_rec_help/img/42_1.png\": \"./app/panels/mech_rec_help/img/42_1.png\",\n\t\"./mech_rec_help/img/42_2.png\": \"./app/panels/mech_rec_help/img/42_2.png\",\n\t\"./mech_rec_help/img/42_3.png\": \"./app/panels/mech_rec_help/img/42_3.png\",\n\t\"./mech_rec_help/img/42_4.png\": \"./app/panels/mech_rec_help/img/42_4.png\",\n\t\"./mech_rec_help/img/43_1.png\": \"./app/panels/mech_rec_help/img/43_1.png\",\n\t\"./mech_rec_help/img/43_2.png\": \"./app/panels/mech_rec_help/img/43_2.png\",\n\t\"./mech_rec_help/img/43_3.png\": \"./app/panels/mech_rec_help/img/43_3.png\",\n\t\"./mech_rec_help/img/43_4.png\": \"./app/panels/mech_rec_help/img/43_4.png\",\n\t\"./mech_rec_help/img/43_5.png\": \"./app/panels/mech_rec_help/img/43_5.png\",\n\t\"./mech_rec_help/img/43_6.png\": \"./app/panels/mech_rec_help/img/43_6.png\",\n\t\"./mech_rec_help/img/43_7.png\": \"./app/panels/mech_rec_help/img/43_7.png\",\n\t\"./mech_rec_help/img/43_8.png\": \"./app/panels/mech_rec_help/img/43_8.png\",\n\t\"./mech_rec_help/img/44_1.png\": \"./app/panels/mech_rec_help/img/44_1.png\",\n\t\"./mech_rec_help/img/44_10.png\": \"./app/panels/mech_rec_help/img/44_10.png\",\n\t\"./mech_rec_help/img/44_2.png\": \"./app/panels/mech_rec_help/img/44_2.png\",\n\t\"./mech_rec_help/img/44_3.png\": \"./app/panels/mech_rec_help/img/44_3.png\",\n\t\"./mech_rec_help/img/44_4.png\": \"./app/panels/mech_rec_help/img/44_4.png\",\n\t\"./mech_rec_help/img/44_5.png\": \"./app/panels/mech_rec_help/img/44_5.png\",\n\t\"./mech_rec_help/img/44_6.png\": \"./app/panels/mech_rec_help/img/44_6.png\",\n\t\"./mech_rec_help/img/44_7.png\": \"./app/panels/mech_rec_help/img/44_7.png\",\n\t\"./mech_rec_help/img/44_8.png\": \"./app/panels/mech_rec_help/img/44_8.png\",\n\t\"./mech_rec_help/img/44_9.png\": \"./app/panels/mech_rec_help/img/44_9.png\",\n\t\"./mech_rec_help/img/45_1.png\": \"./app/panels/mech_rec_help/img/45_1.png\",\n\t\"./mech_rec_help/img/45_10.png\": \"./app/panels/mech_rec_help/img/45_10.png\",\n\t\"./mech_rec_help/img/45_2.png\": \"./app/panels/mech_rec_help/img/45_2.png\",\n\t\"./mech_rec_help/img/45_3.png\": \"./app/panels/mech_rec_help/img/45_3.png\",\n\t\"./mech_rec_help/img/45_4.png\": \"./app/panels/mech_rec_help/img/45_4.png\",\n\t\"./mech_rec_help/img/45_5.png\": \"./app/panels/mech_rec_help/img/45_5.png\",\n\t\"./mech_rec_help/img/45_6.png\": \"./app/panels/mech_rec_help/img/45_6.png\",\n\t\"./mech_rec_help/img/45_7.png\": \"./app/panels/mech_rec_help/img/45_7.png\",\n\t\"./mech_rec_help/img/45_8.png\": \"./app/panels/mech_rec_help/img/45_8.png\",\n\t\"./mech_rec_help/img/45_9.png\": \"./app/panels/mech_rec_help/img/45_9.png\",\n\t\"./mech_rec_help/img/46_1.png\": \"./app/panels/mech_rec_help/img/46_1.png\",\n\t\"./mech_rec_help/img/46_2.png\": \"./app/panels/mech_rec_help/img/46_2.png\",\n\t\"./mech_rec_help/img/46_3.png\": \"./app/panels/mech_rec_help/img/46_3.png\",\n\t\"./mech_rec_help/img/46_4.png\": \"./app/panels/mech_rec_help/img/46_4.png\",\n\t\"./mech_rec_help/img/46_5.png\": \"./app/panels/mech_rec_help/img/46_5.png\",\n\t\"./mech_rec_help/img/46_6.png\": \"./app/panels/mech_rec_help/img/46_6.png\",\n\t\"./mech_rec_help/img/47_1.png\": \"./app/panels/mech_rec_help/img/47_1.png\",\n\t\"./mech_rec_help/img/47_10.png\": \"./app/panels/mech_rec_help/img/47_10.png\",\n\t\"./mech_rec_help/img/47_11.png\": \"./app/panels/mech_rec_help/img/47_11.png\",\n\t\"./mech_rec_help/img/47_12.png\": \"./app/panels/mech_rec_help/img/47_12.png\",\n\t\"./mech_rec_help/img/47_2.png\": \"./app/panels/mech_rec_help/img/47_2.png\",\n\t\"./mech_rec_help/img/47_3.png\": \"./app/panels/mech_rec_help/img/47_3.png\",\n\t\"./mech_rec_help/img/47_4.png\": \"./app/panels/mech_rec_help/img/47_4.png\",\n\t\"./mech_rec_help/img/47_5.png\": \"./app/panels/mech_rec_help/img/47_5.png\",\n\t\"./mech_rec_help/img/47_6.png\": \"./app/panels/mech_rec_help/img/47_6.png\",\n\t\"./mech_rec_help/img/47_7.png\": \"./app/panels/mech_rec_help/img/47_7.png\",\n\t\"./mech_rec_help/img/47_8.png\": \"./app/panels/mech_rec_help/img/47_8.png\",\n\t\"./mech_rec_help/img/47_9.png\": \"./app/panels/mech_rec_help/img/47_9.png\",\n\t\"./mech_rec_help/img/48_1.png\": \"./app/panels/mech_rec_help/img/48_1.png\",\n\t\"./mech_rec_help/img/48_2.png\": \"./app/panels/mech_rec_help/img/48_2.png\",\n\t\"./mech_rec_help/img/48_3.png\": \"./app/panels/mech_rec_help/img/48_3.png\",\n\t\"./mech_rec_help/img/48_4.png\": \"./app/panels/mech_rec_help/img/48_4.png\",\n\t\"./mech_rec_help/img/49_1.png\": \"./app/panels/mech_rec_help/img/49_1.png\",\n\t\"./mech_rec_help/img/49_2.png\": \"./app/panels/mech_rec_help/img/49_2.png\",\n\t\"./mech_rec_help/img/49_3.png\": \"./app/panels/mech_rec_help/img/49_3.png\",\n\t\"./mech_rec_help/img/add1_1.png\": \"./app/panels/mech_rec_help/img/add1_1.png\",\n\t\"./mech_rec_help/img/add1_2.png\": \"./app/panels/mech_rec_help/img/add1_2.png\",\n\t\"./mech_rec_help/img/add1_3.png\": \"./app/panels/mech_rec_help/img/add1_3.png\",\n\t\"./mech_rec_help/img/add1_4.png\": \"./app/panels/mech_rec_help/img/add1_4.png\",\n\t\"./mech_rec_help/img/add1_5.png\": \"./app/panels/mech_rec_help/img/add1_5.png\",\n\t\"./mech_rec_help/img/add1_6.png\": \"./app/panels/mech_rec_help/img/add1_6.png\",\n\t\"./mech_rec_help/img/add1_7.png\": \"./app/panels/mech_rec_help/img/add1_7.png\",\n\t\"./mech_rec_help/img/add1_8.png\": \"./app/panels/mech_rec_help/img/add1_8.png\",\n\t\"./mech_rec_help/img/add1_9.png\": \"./app/panels/mech_rec_help/img/add1_9.png\",\n\t\"./mech_rec_help/index\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/index.js\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/mech_rec_help\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./mech_rec_help/mech_rec_help.js\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./panels_editor\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/component_editor\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_editor.js\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_view\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/component_view.js\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/components/chart/editor\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/editor.js\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/view\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/chart/view.js\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/components\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components.js\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components_hooks\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/components_hooks.js\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/form/common\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/common.js\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/editor\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/editor.js\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/view\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/form/view.js\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/indicator/editor\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/editor.js\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/view\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/indicator/view.js\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/table/editor\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/editor.js\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/view\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/components/table/view.js\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/index\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/index.js\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/layout_item\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/layout_item.js\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/panels_editor\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./panels_editor/panels_editor.css\": \"./app/panels/panels_editor/panels_editor.css\",\n\t\"./panels_editor/panels_editor.js\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/21_1.png\": \"./app/panels/prj_help/img/21_1.png\",\n\t\"./prj_help/img/21_2.png\": \"./app/panels/prj_help/img/21_2.png\",\n\t\"./prj_help/img/21_3.png\": \"./app/panels/prj_help/img/21_3.png\",\n\t\"./prj_help/img/21_4.png\": \"./app/panels/prj_help/img/21_4.png\",\n\t\"./prj_help/img/21_5.png\": \"./app/panels/prj_help/img/21_5.png\",\n\t\"./prj_help/img/22_1.png\": \"./app/panels/prj_help/img/22_1.png\",\n\t\"./prj_help/img/22_2.png\": \"./app/panels/prj_help/img/22_2.png\",\n\t\"./prj_help/img/22_3.png\": \"./app/panels/prj_help/img/22_3.png\",\n\t\"./prj_help/img/23_1.png\": \"./app/panels/prj_help/img/23_1.png\",\n\t\"./prj_help/img/23_2.png\": \"./app/panels/prj_help/img/23_2.png\",\n\t\"./prj_help/img/24_1.png\": \"./app/panels/prj_help/img/24_1.png\",\n\t\"./prj_help/img/24_2.png\": \"./app/panels/prj_help/img/24_2.png\",\n\t\"./prj_help/img/24_3.png\": \"./app/panels/prj_help/img/24_3.png\",\n\t\"./prj_help/img/24_4.png\": \"./app/panels/prj_help/img/24_4.png\",\n\t\"./prj_help/img/24_5.png\": \"./app/panels/prj_help/img/24_5.png\",\n\t\"./prj_help/img/3_1.png\": \"./app/panels/prj_help/img/3_1.png\",\n\t\"./prj_help/img/3_2.png\": \"./app/panels/prj_help/img/3_2.png\",\n\t\"./prj_help/img/3_3.png\": \"./app/panels/prj_help/img/3_3.png\",\n\t\"./prj_help/img/3_4.png\": \"./app/panels/prj_help/img/3_4.png\",\n\t\"./prj_help/img/3_5.png\": \"./app/panels/prj_help/img/3_5.png\",\n\t\"./prj_help/img/3_6.png\": \"./app/panels/prj_help/img/3_6.png\",\n\t\"./prj_help/img/41_1.png\": \"./app/panels/prj_help/img/41_1.png\",\n\t\"./prj_help/img/41_2.png\": \"./app/panels/prj_help/img/41_2.png\",\n\t\"./prj_help/img/42_1.png\": \"./app/panels/prj_help/img/42_1.png\",\n\t\"./prj_help/img/42_2.png\": \"./app/panels/prj_help/img/42_2.png\",\n\t\"./prj_help/img/43_1.png\": \"./app/panels/prj_help/img/43_1.png\",\n\t\"./prj_help/img/43_2.png\": \"./app/panels/prj_help/img/43_2.png\",\n\t\"./prj_help/img/43_3.png\": \"./app/panels/prj_help/img/43_3.png\",\n\t\"./prj_help/img/43_4.png\": \"./app/panels/prj_help/img/43_4.png\",\n\t\"./prj_help/img/44_1.png\": \"./app/panels/prj_help/img/44_1.png\",\n\t\"./prj_help/img/44_2.png\": \"./app/panels/prj_help/img/44_2.png\",\n\t\"./prj_help/img/44_3.png\": \"./app/panels/prj_help/img/44_3.png\",\n\t\"./prj_help/img/44_4.png\": \"./app/panels/prj_help/img/44_4.png\",\n\t\"./prj_help/img/45_1.png\": \"./app/panels/prj_help/img/45_1.png\",\n\t\"./prj_help/img/46_1.png\": \"./app/panels/prj_help/img/46_1.png\",\n\t\"./prj_help/img/47_1.png\": \"./app/panels/prj_help/img/47_1.png\",\n\t\"./prj_help/img/71_1.png\": \"./app/panels/prj_help/img/71_1.png\",\n\t\"./prj_help/img/72_1.png\": \"./app/panels/prj_help/img/72_1.png\",\n\t\"./prj_help/img/72_2.png\": \"./app/panels/prj_help/img/72_2.png\",\n\t\"./prj_help/img/72_3.png\": \"./app/panels/prj_help/img/72_3.png\",\n\t\"./prj_help/img/74_1.png\": \"./app/panels/prj_help/img/74_1.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_info\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/filter\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter.js\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter_dialog\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/filter_dialog.js\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/index\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/index.js\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/layouts\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/layouts.js\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/prj_info\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/prj_info.js\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/projects\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects.js\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects_hooks\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_hooks.js\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_layouts\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/projects_layouts.js\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/stage_detail\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail.js\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail_hooks\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_hooks.js\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_layouts\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stage_detail_layouts.js\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stages\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages.js\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages_hooks\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_hooks.js\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_layouts\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_info/stages_layouts.js\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./query_editor\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/common\": \"./app/panels/query_editor/common.js\",\n\t\"./query_editor/common.js\": \"./app/panels/query_editor/common.js\",\n\t\"./query_editor/components/argument/argument\": \"./app/panels/query_editor/components/argument/argument.js\",\n\t\"./query_editor/components/argument/argument.js\": \"./app/panels/query_editor/components/argument/argument.js\",\n\t\"./query_editor/components/attribute/attribute\": \"./app/panels/query_editor/components/attribute/attribute.js\",\n\t\"./query_editor/components/attribute/attribute.js\": \"./app/panels/query_editor/components/attribute/attribute.js\",\n\t\"./query_editor/components/entity/entity\": \"./app/panels/query_editor/components/entity/entity.js\",\n\t\"./query_editor/components/entity/entity.js\": \"./app/panels/query_editor/components/entity/entity.js\",\n\t\"./query_editor/components/inspector/inspector\": \"./app/panels/query_editor/components/inspector/inspector.js\",\n\t\"./query_editor/components/inspector/inspector.js\": \"./app/panels/query_editor/components/inspector/inspector.js\",\n\t\"./query_editor/components/inspector_query_area/hooks\": \"./app/panels/query_editor/components/inspector_query_area/hooks.js\",\n\t\"./query_editor/components/inspector_query_area/hooks.js\": \"./app/panels/query_editor/components/inspector_query_area/hooks.js\",\n\t\"./query_editor/components/inspector_query_area/inspector_query_area\": \"./app/panels/query_editor/components/inspector_query_area/inspector_query_area.js\",\n\t\"./query_editor/components/inspector_query_area/inspector_query_area.js\": \"./app/panels/query_editor/components/inspector_query_area/inspector_query_area.js\",\n\t\"./query_editor/components/inspector_query_args/arg_iu_dialog\": \"./app/panels/query_editor/components/inspector_query_args/arg_iu_dialog.js\",\n\t\"./query_editor/components/inspector_query_args/arg_iu_dialog.js\": \"./app/panels/query_editor/components/inspector_query_args/arg_iu_dialog.js\",\n\t\"./query_editor/components/inspector_query_args/args_list\": \"./app/panels/query_editor/components/inspector_query_args/args_list.js\",\n\t\"./query_editor/components/inspector_query_args/args_list.js\": \"./app/panels/query_editor/components/inspector_query_args/args_list.js\",\n\t\"./query_editor/components/inspector_query_args/hooks\": \"./app/panels/query_editor/components/inspector_query_args/hooks.js\",\n\t\"./query_editor/components/inspector_query_args/hooks.js\": \"./app/panels/query_editor/components/inspector_query_args/hooks.js\",\n\t\"./query_editor/components/inspector_query_args/inspector_query_args\": \"./app/panels/query_editor/components/inspector_query_args/inspector_query_args.js\",\n\t\"./query_editor/components/inspector_query_args/inspector_query_args.js\": \"./app/panels/query_editor/components/inspector_query_args/inspector_query_args.js\",\n\t\"./query_editor/components/inspector_query_args/query_args_dialog\": \"./app/panels/query_editor/components/inspector_query_args/query_args_dialog.js\",\n\t\"./query_editor/components/inspector_query_args/query_args_dialog.js\": \"./app/panels/query_editor/components/inspector_query_args/query_args_dialog.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_component_select_button\": \"./app/panels/query_editor/components/inspector_query_cond/cond_component_select_button.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_component_select_button.js\": \"./app/panels/query_editor/components/inspector_query_cond/cond_component_select_button.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_operation_buttons\": \"./app/panels/query_editor/components/inspector_query_cond/cond_operation_buttons.js\",\n\t\"./query_editor/components/inspector_query_cond/cond_operation_buttons.js\": \"./app/panels/query_editor/components/inspector_query_cond/cond_operation_buttons.js\",\n\t\"./query_editor/components/inspector_query_cond/hooks\": \"./app/panels/query_editor/components/inspector_query_cond/hooks.js\",\n\t\"./query_editor/components/inspector_query_cond/hooks.js\": \"./app/panels/query_editor/components/inspector_query_cond/hooks.js\",\n\t\"./query_editor/components/inspector_query_cond/inspector_query_cond\": \"./app/panels/query_editor/components/inspector_query_cond/inspector_query_cond.js\",\n\t\"./query_editor/components/inspector_query_cond/inspector_query_cond.js\": \"./app/panels/query_editor/components/inspector_query_cond/inspector_query_cond.js\",\n\t\"./query_editor/components/inspector_query_cond/query_cond_dialog\": \"./app/panels/query_editor/components/inspector_query_cond/query_cond_dialog.js\",\n\t\"./query_editor/components/inspector_query_cond/query_cond_dialog.js\": \"./app/panels/query_editor/components/inspector_query_cond/query_cond_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/attr_setup_dialog\": \"./app/panels/query_editor/components/inspector_query_ents/attr_setup_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/attr_setup_dialog.js\": \"./app/panels/query_editor/components/inspector_query_ents/attr_setup_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/attrs_list\": \"./app/panels/query_editor/components/inspector_query_ents/attrs_list.js\",\n\t\"./query_editor/components/inspector_query_ents/attrs_list.js\": \"./app/panels/query_editor/components/inspector_query_ents/attrs_list.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_add_dialog\": \"./app/panels/query_editor/components/inspector_query_ents/entity_add_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_add_dialog.js\": \"./app/panels/query_editor/components/inspector_query_ents/entity_add_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_attrs_dialog\": \"./app/panels/query_editor/components/inspector_query_ents/entity_attrs_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/entity_attrs_dialog.js\": \"./app/panels/query_editor/components/inspector_query_ents/entity_attrs_dialog.js\",\n\t\"./query_editor/components/inspector_query_ents/ents_list\": \"./app/panels/query_editor/components/inspector_query_ents/ents_list.js\",\n\t\"./query_editor/components/inspector_query_ents/ents_list.js\": \"./app/panels/query_editor/components/inspector_query_ents/ents_list.js\",\n\t\"./query_editor/components/inspector_query_ents/hooks\": \"./app/panels/query_editor/components/inspector_query_ents/hooks.js\",\n\t\"./query_editor/components/inspector_query_ents/hooks.js\": \"./app/panels/query_editor/components/inspector_query_ents/hooks.js\",\n\t\"./query_editor/components/inspector_query_ents/inspector_query_ents\": \"./app/panels/query_editor/components/inspector_query_ents/inspector_query_ents.js\",\n\t\"./query_editor/components/inspector_query_ents/inspector_query_ents.js\": \"./app/panels/query_editor/components/inspector_query_ents/inspector_query_ents.js\",\n\t\"./query_editor/components/inspector_query_rls/hooks\": \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\",\n\t\"./query_editor/components/inspector_query_rls/hooks.js\": \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\",\n\t\"./query_editor/components/inspector_query_rls/inspector_query_rls\": \"./app/panels/query_editor/components/inspector_query_rls/inspector_query_rls.js\",\n\t\"./query_editor/components/inspector_query_rls/inspector_query_rls.js\": \"./app/panels/query_editor/components/inspector_query_rls/inspector_query_rls.js\",\n\t\"./query_editor/components/queries_manager/hooks\": \"./app/panels/query_editor/components/queries_manager/hooks.js\",\n\t\"./query_editor/components/queries_manager/hooks.js\": \"./app/panels/query_editor/components/queries_manager/hooks.js\",\n\t\"./query_editor/components/queries_manager/queries_list\": \"./app/panels/query_editor/components/queries_manager/queries_list.js\",\n\t\"./query_editor/components/queries_manager/queries_list.js\": \"./app/panels/query_editor/components/queries_manager/queries_list.js\",\n\t\"./query_editor/components/queries_manager/queries_manager\": \"./app/panels/query_editor/components/queries_manager/queries_manager.js\",\n\t\"./query_editor/components/queries_manager/queries_manager.js\": \"./app/panels/query_editor/components/queries_manager/queries_manager.js\",\n\t\"./query_editor/components/queries_manager/query_iu_dialog\": \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\",\n\t\"./query_editor/components/queries_manager/query_iu_dialog.js\": \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\",\n\t\"./query_editor/components/query_diagram/query_diagram\": \"./app/panels/query_editor/components/query_diagram/query_diagram.js\",\n\t\"./query_editor/components/query_diagram/query_diagram.css\": \"./app/panels/query_editor/components/query_diagram/query_diagram.css\",\n\t\"./query_editor/components/query_diagram/query_diagram.js\": \"./app/panels/query_editor/components/query_diagram/query_diagram.js\",\n\t\"./query_editor/components/relation/relation\": \"./app/panels/query_editor/components/relation/relation.js\",\n\t\"./query_editor/components/relation/relation.js\": \"./app/panels/query_editor/components/relation/relation.js\",\n\t\"./query_editor/hooks\": \"./app/panels/query_editor/hooks.js\",\n\t\"./query_editor/hooks.js\": \"./app/panels/query_editor/hooks.js\",\n\t\"./query_editor/index\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/index.js\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/query_editor\": \"./app/panels/query_editor/query_editor.js\",\n\t\"./query_editor/query_editor.js\": \"./app/panels/query_editor/query_editor.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/common\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/common.js\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/components/action_message\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/action_message.js\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/dialog_help\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_help.js\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_order\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_order.js\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/mark_card\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card.js\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar.js\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list.js\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/marks\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks.js\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar.js\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/section\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section.js\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section_tab\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/section_tab.js\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/sections\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/components/sections.js\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/cyclogram\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/cyclogram.js\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/indicator\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/indicator.js\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -466,7 +466,7 @@ eval("var map = {\n\t\"./clnt_task_board\": \"./app/panels/clnt_task_board/index /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClntTaskBoard: () => (/* binding */ ClntTaskBoard)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! react-beautiful-dnd */ \"./node_modules/react-beautiful-dnd/dist/react-beautiful-dnd.esm.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _components_status_card_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/status_card.js */ \"./app/panels/clnt_task_board/components/status_card.js\");\n/* harmony import */ var _task_dialog_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./task_dialog.js */ \"./app/panels/clnt_task_board/task_dialog.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./filter.js */ \"./app/panels/clnt_task_board/filter.js\");\n/* harmony import */ var _hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/hooks.js */ \"./app/panels/clnt_task_board/hooks/hooks.js\");\n/* harmony import */ var _hooks_tasks_hooks_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/tasks_hooks.js */ \"./app/panels/clnt_task_board/hooks/tasks_hooks.js\");\n/* harmony import */ var _hooks_filter_hooks_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hooks/filter_hooks.js */ \"./app/panels/clnt_task_board/hooks/filter_hooks.js\");\n/* harmony import */ var _components_note_dialog_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/note_dialog.js */ \"./app/panels/clnt_task_board/components/note_dialog.js\");\n/* harmony import */ var _components_settings_dialog_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/settings_dialog.js */ \"./app/panels/clnt_task_board/components/settings_dialog.js\");\n/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../core/utils.js */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./styles */ \"./app/panels/clnt_task_board/styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Панель мониторинга: Корневая панель доски задач\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Работа с drag&drop\n //Интерфейсные компоненты\n\n //Компонент формы события\n //Компонент фильтров\n //Вспомогательные хуки\n //Хук событий\n //Вспомогательные хуки фильтра\n //Диалог примечания\n //Диалог дополнительных настроек\n //Вспомогательные функции\n //Общие стили\n //Заголовок страницы\n\n//---------\n//Константы\n//---------\n\n//Высота фильтра\nconst FILTER_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n width: \"100%\",\n padding: 0\n },\n BOX_FILTER: {\n display: \"flex\",\n alignItems: \"center\"\n },\n ICON_BUTTON_SETTINGS: {\n marginLeft: \"auto\"\n },\n STACK_STATUSES: {\n maxWidth: \"99vw\",\n paddingBottom: \"5px\",\n overflowX: \"auto\",\n ..._styles__WEBPACK_IMPORTED_MODULE_10__.COMMON_STYLES.SCROLL\n },\n BOX_STATUSES: {\n position: \"fixed\",\n left: \"8px\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_11__.APP_BAR_HEIGHT} + ${FILTER_HEIGHT})`\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель доски задач\nconst ClntTaskBoard = () => {\n //Состояние фильтров\n const [filters, handleFiltersChange] = (0,_hooks_filter_hooks_js__WEBPACK_IMPORTED_MODULE_6__.useFilters)();\n\n //Состояние текущего загруженного фильтра\n const [filterTypeLoaded, setFilterTypeLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filters.values.sType);\n\n //Состояние вспомогательных диалогов\n const [dialogsState, setDialogsState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n filterDialogIsOpen: filters.isSetByUser,\n settingsDialogIsOpen: false,\n noteDialog: {\n isOpen: false,\n callback: null\n },\n taskDialogIsOpen: false\n });\n\n //Состояние сортировок\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Состояние дополнительных данных\n const [extraData, setExtraData, handleDocLinksLoad] = (0,_hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__.useExtraData)(filters.values.sType);\n\n //Состояние статусов событий\n const [statuses, statusesState, setStatuses, setStatusesState] = (0,_hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__.useStatuses)(filters.values.sType);\n\n //Состояние пользовательских настроек заливки событий\n const [colorRules, setColorRules] = (0,_hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__.useColorRules)();\n\n //Состояние событий\n const [tasks, setTasks, onDragEnd] = (0,_hooks_tasks_hooks_js__WEBPACK_IMPORTED_MODULE_5__.useTasks)(filters.values, orders);\n\n //Состояние доступных маршрутов события\n const [availableRoutes, setAvailableRoutes] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n source: \"\",\n routes: []\n });\n\n //Состояние перетаскиваемого события\n const [dragItem, setDragItem] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n type: \"\",\n status: \"\"\n });\n\n //При открытии/закрытии диалога фильтра\n const handleFilterOpen = isOpen => {\n setDialogsState(pv => ({\n ...pv,\n filterDialogIsOpen: isOpen\n }));\n };\n\n //При открытии/закрытии диалога дополнительных настроек\n const handleSettingsOpen = () => setDialogsState(pv => ({\n ...pv,\n settingsDialogIsOpen: !pv.settingsDialogIsOpen\n }));\n\n //При открытии/закрытии диалога примечания\n const handleNoteOpen = (cb = null) => {\n setDialogsState(pv => ({\n ...pv,\n noteDialog: {\n isOpen: !dialogsState.noteDialog.isOpen,\n callback: cb ? v => cb(v) : null\n }\n }));\n };\n\n //При открытии/закрытии диалога события\n const handleTaskDialogOpen = () => setDialogsState(pv => ({\n ...pv,\n taskDialogIsOpen: !dialogsState.taskDialogIsOpen\n }));\n\n //При необходимости обновить дополнительные данные\n const handleExtraDataReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setExtraData(pv => ({\n ...pv,\n reload: true\n }));\n }, [setExtraData]);\n\n //При необходимости обновить информацию о событиях\n const handleTasksReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((bAccountsReload = true) => {\n setTasks(pv => ({\n ...pv,\n reload: true,\n accountsReload: bAccountsReload\n }));\n }, [setTasks]);\n\n //При необходимости обновить состояние статусов\n const handleStatusesStateReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setStatusesState(pv => ({\n ...pv,\n reload: true,\n sorted: false\n }));\n }, [setStatusesState]);\n\n //При изменении дополнительных настроек\n const handleSettingsChange = (newSettings, statusesState) => {\n setColorRules(pv => ({\n ...pv,\n selectedColorRule: newSettings.selectedColorRule\n }));\n setStatusesState({\n ...statusesState,\n sorted: false\n });\n };\n\n //При изменении цвета карточки статуса\n const handleSettingStatusColorChange = (changedStatus, newColor) => {\n //Считываем массив статусов\n let newStatuses = [...statuses];\n //Изменяем цвет нужного статуса\n newStatuses.find(status => status.ID === changedStatus.ID).color = newColor;\n //Обновляем состояние\n setStatuses([...newStatuses]);\n };\n\n //При изменении сортировки\n const handleOrderChanged = columnName => {\n //Копируем состояние сортировки\n let newOrders = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_9__.deepCopyObject)(orders);\n //Находим сортируемую колонку\n const orderedColumn = newOrders.find(o => o.name == columnName);\n //Определяем направление сортировки\n const newDirection = orderedColumn?.direction == \"ASC\" ? \"DESC\" : orderedColumn?.direction == \"DESC\" ? null : \"ASC\";\n //Если сортировка отключается - очищаем информацию о сортировке\n if (newDirection == null && orderedColumn) newOrders.splice(newOrders.indexOf(orderedColumn), 1);\n //Если сортировки не было - устанавливаем\n if (newDirection != null && !orderedColumn) newOrders.push({\n name: columnName,\n direction: newDirection\n });\n //Если сортировка была и не отключается - изменяем\n if (newDirection != null && orderedColumn) orderedColumn.direction = newDirection;\n //Устанавливаем новую сортировку\n setOrders(newOrders);\n };\n\n //При необходимости очистки доступных маршрутов события\n const handleAvailableRoutesStateClear = () => {\n setAvailableRoutes({\n source: \"\",\n routes: []\n });\n };\n\n //Обработка захвата перетаскиваемого объекта\n const handleDragItemChange = (filtersType, statusCode) => setDragItem({\n type: filtersType,\n status: statusCode\n });\n\n //Обработка очистки перетаскиваемого объекта\n const handleDragItemClear = () => {\n setDragItem({\n type: \"\",\n status: \"\"\n });\n };\n\n //Проверка доступности карточки события\n const isCardAvailable = code => {\n return availableRoutes.source === code || availableRoutes.routes.find(r => r.SDESTINATION === code) || !availableRoutes.source ? true : false;\n };\n\n //При изменении фильтра\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если изменился тип\n if (filters.loaded && filters.values.sType) {\n //Если тип события изменился\n if (filterTypeLoaded !== filters.values.sType) {\n //Обновляем информацию о дополнительных данных\n handleExtraDataReload();\n //Обновляем информацию о статусах\n handleStatusesStateReload();\n //Обновляем текущий загруженный тип события\n setFilterTypeLoaded(filters.values.sType);\n }\n //Обновляем информацию о событиях\n handleTasksReload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filters.loaded, filters.values]);\n\n //При изменении сортировки\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если есть все данные для загрузки событий\n if (filters.loaded && filters.values.sType) {\n //Обновляем информацию о событиях без обновления контрагентов\n handleTasksReload(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [orders]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.CONTAINER\n }, dialogsState.settingsDialogIsOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_settings_dialog_js__WEBPACK_IMPORTED_MODULE_8__.SettingsDialog, {\n initial: {\n colorRules: colorRules,\n statusesState: statusesState\n },\n onSettingsChange: handleSettingsChange,\n onClose: handleSettingsOpen\n }) : null, dialogsState.taskDialogIsOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_dialog_js__WEBPACK_IMPORTED_MODULE_2__.TaskDialog, {\n taskType: dragItem.type,\n taskStatus: dragItem.status,\n onTasksReload: () => handleTasksReload(true),\n onClose: () => {\n handleTaskDialogOpen();\n handleDragItemClear();\n }\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.BOX_FILTER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_filter_js__WEBPACK_IMPORTED_MODULE_3__.Filter, {\n isFilterDialogOpen: dialogsState.filterDialogIsOpen,\n filter: filters.values,\n docLinks: extraData.docLinks,\n selectedDocLink: filters.values.sDocLink ? extraData.docLinks.find(d => d.NRN === filters.values.sDocLink) : null,\n onFilterChange: handleFiltersChange,\n onDocLinksLoad: handleDocLinksLoad,\n onFilterOpen: () => handleFilterOpen(true),\n onFilterClose: () => handleFilterOpen(false),\n onTasksReload: handleTasksReload,\n orders: orders,\n onOrderChanged: handleOrderChanged\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n title: \"\\u041D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0439\\u043A\\u0438\",\n onClick: handleSettingsOpen,\n sx: STYLES.ICON_BUTTON_SETTINGS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, \"settings\"))), dialogsState.noteDialog.isOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_note_dialog_js__WEBPACK_IMPORTED_MODULE_7__.NoteDialog, {\n noteTypes: extraData.noteTypes,\n onCallback: note => dialogsState.noteDialog.callback(note),\n onClose: handleNoteOpen\n }) : null, filters.loaded && filters.values.sType && extraData.dataLoaded && tasks.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__.DragDropContext, {\n onDragStart: path => {\n //Поиск кода текущего статуса задачи\n let sourceCode = statuses.find(status => status.ID == path.source.droppableId).SEVNSTAT_CODE;\n //Устанавливаем доступные маршруты события\n setAvailableRoutes({\n source: sourceCode,\n routes: [...extraData.evRoutes.filter(route => route.SSOURCE === sourceCode)]\n });\n },\n onDragEnd: path => {\n //Если есть статус назначения\n if (path.destination) {\n //Определяем мнемокод статуса назначения\n let destCode = statuses.find(status => status.ID == path.destination.droppableId).SEVNSTAT_CODE;\n //Переносим событие\n onDragEnd({\n path: path,\n eventPoints: extraData.evPoints,\n openNoteDialog: handleNoteOpen,\n destCode: destCode\n });\n }\n //Очищаем информацию о доступных маршрутах события\n handleAvailableRoutesStateClear();\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.BOX_STATUSES\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__.Droppable, {\n droppableId: \"Statuses\",\n type: \"droppableTask\"\n }, provided => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: provided.innerRef\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n direction: \"row\",\n spacing: 2,\n sx: STYLES.STACK_STATUSES\n }, statusesState.sorted ? statuses.map((status, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n key: index\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__.Droppable, {\n isDropDisabled: !isCardAvailable(status.SEVNSTAT_CODE),\n droppableId: status.ID.toString()\n }, provided => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: provided.innerRef\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_status_card_js__WEBPACK_IMPORTED_MODULE_1__.StatusCard, {\n tasks: tasks,\n status: status,\n statusTitle: status[statusesState.attr] || status.SEVNSTAT_NAME,\n colorRules: colorRules,\n extraData: extraData,\n filtersType: filters.values.sType,\n isCardAvailable: isCardAvailable,\n onTasksReload: handleTasksReload,\n onDragItemChange: handleDragItemChange,\n onTaskDialogOpen: handleTaskDialogOpen,\n onNoteDialogOpen: handleNoteOpen,\n onStatusColorChange: handleSettingStatusColorChange,\n placeholder: provided.placeholder\n }))))) : null), provided.placeholder)))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/clnt_task_board.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClntTaskBoard: () => (/* binding */ ClntTaskBoard)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! react-beautiful-dnd */ \"./node_modules/react-beautiful-dnd/dist/react-beautiful-dnd.esm.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _components_status_card_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/status_card.js */ \"./app/panels/clnt_task_board/components/status_card.js\");\n/* harmony import */ var _task_dialog_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./task_dialog.js */ \"./app/panels/clnt_task_board/task_dialog.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./filter.js */ \"./app/panels/clnt_task_board/filter.js\");\n/* harmony import */ var _hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/hooks.js */ \"./app/panels/clnt_task_board/hooks/hooks.js\");\n/* harmony import */ var _hooks_tasks_hooks_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/tasks_hooks.js */ \"./app/panels/clnt_task_board/hooks/tasks_hooks.js\");\n/* harmony import */ var _hooks_filter_hooks_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hooks/filter_hooks.js */ \"./app/panels/clnt_task_board/hooks/filter_hooks.js\");\n/* harmony import */ var _components_note_dialog_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/note_dialog.js */ \"./app/panels/clnt_task_board/components/note_dialog.js\");\n/* harmony import */ var _components_settings_dialog_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/settings_dialog.js */ \"./app/panels/clnt_task_board/components/settings_dialog.js\");\n/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../core/utils.js */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./styles */ \"./app/panels/clnt_task_board/styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Панель мониторинга: Корневая панель доски задач\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Работа с drag&drop\n //Интерфейсные компоненты\n\n //Компонент формы события\n //Компонент фильтров\n //Вспомогательные хуки\n //Хук событий\n //Вспомогательные хуки фильтра\n //Диалог примечания\n //Диалог дополнительных настроек\n //Вспомогательные функции\n //Общие стили\n //Заголовок страницы\n\n//---------\n//Константы\n//---------\n\n//Высота фильтра\nconst FILTER_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n width: \"100%\",\n padding: 0\n },\n BOX_FILTER: {\n display: \"flex\",\n alignItems: \"center\"\n },\n ICON_BUTTON_SETTINGS: {\n marginLeft: \"auto\"\n },\n STACK_STATUSES: {\n maxWidth: \"99vw\",\n paddingBottom: \"5px\",\n overflowX: \"auto\",\n ..._styles__WEBPACK_IMPORTED_MODULE_10__.COMMON_STYLES.SCROLL\n },\n BOX_STATUSES: {\n position: \"fixed\",\n left: \"8px\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_11__.APP_BAR_HEIGHT} + ${FILTER_HEIGHT})`\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель доски задач\nconst ClntTaskBoard = () => {\n //Состояние фильтров\n const [filters, handleFiltersChange] = (0,_hooks_filter_hooks_js__WEBPACK_IMPORTED_MODULE_6__.useFilters)();\n\n //Состояние текущего загруженного фильтра\n const [filterTypeLoaded, setFilterTypeLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filters.values.sType);\n\n //Состояние вспомогательных диалогов\n const [dialogsState, setDialogsState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n filterDialogIsOpen: filters.isSetByUser,\n settingsDialogIsOpen: false,\n noteDialog: {\n isOpen: false,\n callback: null\n },\n taskDialogIsOpen: false\n });\n\n //Состояние сортировок\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Состояние дополнительных данных\n const [extraData, setExtraData, handleDocLinksLoad] = (0,_hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__.useExtraData)(filters.values.sType);\n\n //Состояние статусов событий\n const [statuses, statusesState, setStatuses, setStatusesState] = (0,_hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__.useStatuses)(filters.values.sType);\n\n //Состояние пользовательских настроек заливки событий\n const [colorRules, setColorRules] = (0,_hooks_hooks_js__WEBPACK_IMPORTED_MODULE_4__.useColorRules)();\n\n //Состояние событий\n const [tasks, setTasks, onDragEnd] = (0,_hooks_tasks_hooks_js__WEBPACK_IMPORTED_MODULE_5__.useTasks)(filters.values, orders);\n\n //Состояние доступных маршрутов события\n const [availableRoutes, setAvailableRoutes] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n source: \"\",\n routes: []\n });\n\n //При открытии/закрытии диалога фильтра\n const handleFilterOpen = isOpen => {\n setDialogsState(pv => ({\n ...pv,\n filterDialogIsOpen: isOpen\n }));\n };\n\n //При открытии/закрытии диалога дополнительных настроек\n const handleSettingsOpen = () => setDialogsState(pv => ({\n ...pv,\n settingsDialogIsOpen: !pv.settingsDialogIsOpen\n }));\n\n //При открытии/закрытии диалога примечания\n const handleNoteOpen = (cb = null) => {\n setDialogsState(pv => ({\n ...pv,\n noteDialog: {\n isOpen: !dialogsState.noteDialog.isOpen,\n callback: cb ? v => cb(v) : null\n }\n }));\n };\n\n //При открытии/закрытии диалога события\n const handleTaskDialogOpen = () => setDialogsState(pv => ({\n ...pv,\n taskDialogIsOpen: !dialogsState.taskDialogIsOpen\n }));\n\n //При необходимости обновить дополнительные данные\n const handleExtraDataReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setExtraData(pv => ({\n ...pv,\n reload: true\n }));\n }, [setExtraData]);\n\n //При необходимости обновить информацию о событиях\n const handleTasksReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((bAccountsReload = true) => {\n setTasks(pv => ({\n ...pv,\n reload: true,\n accountsReload: bAccountsReload\n }));\n }, [setTasks]);\n\n //При необходимости обновить состояние статусов\n const handleStatusesStateReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setStatusesState(pv => ({\n ...pv,\n reload: true,\n sorted: false\n }));\n }, [setStatusesState]);\n\n //При изменении дополнительных настроек\n const handleSettingsChange = (newSettings, statusesState) => {\n setColorRules(pv => ({\n ...pv,\n selectedColorRule: newSettings.selectedColorRule\n }));\n setStatusesState({\n ...statusesState,\n sorted: false\n });\n };\n\n //При изменении цвета карточки статуса\n const handleSettingStatusColorChange = (changedStatus, newColor) => {\n //Считываем массив статусов\n let newStatuses = [...statuses];\n //Изменяем цвет нужного статуса\n newStatuses.find(status => status.ID === changedStatus.ID).color = newColor;\n //Обновляем состояние\n setStatuses([...newStatuses]);\n };\n\n //При изменении сортировки\n const handleOrderChanged = columnName => {\n //Копируем состояние сортировки\n let newOrders = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_9__.deepCopyObject)(orders);\n //Находим сортируемую колонку\n const orderedColumn = newOrders.find(o => o.name == columnName);\n //Определяем направление сортировки\n const newDirection = orderedColumn?.direction == \"ASC\" ? \"DESC\" : orderedColumn?.direction == \"DESC\" ? null : \"ASC\";\n //Если сортировка отключается - очищаем информацию о сортировке\n if (newDirection == null && orderedColumn) newOrders.splice(newOrders.indexOf(orderedColumn), 1);\n //Если сортировки не было - устанавливаем\n if (newDirection != null && !orderedColumn) newOrders.push({\n name: columnName,\n direction: newDirection\n });\n //Если сортировка была и не отключается - изменяем\n if (newDirection != null && orderedColumn) orderedColumn.direction = newDirection;\n //Устанавливаем новую сортировку\n setOrders(newOrders);\n };\n\n //При необходимости очистки доступных маршрутов события\n const handleAvailableRoutesStateClear = () => {\n setAvailableRoutes({\n source: \"\",\n routes: []\n });\n };\n\n //Проверка доступности карточки события\n const isCardAvailable = code => {\n return availableRoutes.source === code || availableRoutes.routes.find(r => r.SDESTINATION === code) || !availableRoutes.source ? true : false;\n };\n\n //При изменении фильтра\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если изменился тип\n if (filters.loaded && filters.values.sType) {\n //Если тип события изменился\n if (filterTypeLoaded !== filters.values.sType) {\n //Обновляем информацию о дополнительных данных\n handleExtraDataReload();\n //Обновляем информацию о статусах\n handleStatusesStateReload();\n //Обновляем текущий загруженный тип события\n setFilterTypeLoaded(filters.values.sType);\n }\n //Обновляем информацию о событиях\n handleTasksReload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filters.loaded, filters.values]);\n\n //При изменении сортировки\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если есть все данные для загрузки событий\n if (filters.loaded && filters.values.sType) {\n //Обновляем информацию о событиях без обновления контрагентов\n handleTasksReload(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [orders]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.CONTAINER\n }, dialogsState.settingsDialogIsOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_settings_dialog_js__WEBPACK_IMPORTED_MODULE_8__.SettingsDialog, {\n initial: {\n colorRules: colorRules,\n statusesState: statusesState\n },\n onSettingsChange: handleSettingsChange,\n onClose: handleSettingsOpen\n }) : null, dialogsState.taskDialogIsOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_dialog_js__WEBPACK_IMPORTED_MODULE_2__.TaskDialog, {\n taskType: filters.values.sType,\n onTasksReload: () => handleTasksReload(true),\n onClose: handleTaskDialogOpen\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.BOX_FILTER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n direction: \"row\",\n pl: 1,\n pt: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: handleTaskDialogOpen,\n title: \"Добавить событие\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, \"add\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_filter_js__WEBPACK_IMPORTED_MODULE_3__.Filter, {\n isFilterDialogOpen: dialogsState.filterDialogIsOpen,\n filter: filters.values,\n docLinks: extraData.docLinks,\n selectedDocLink: filters.values.sDocLink ? extraData.docLinks.find(d => d.NRN === filters.values.sDocLink) : null,\n onFilterChange: handleFiltersChange,\n onDocLinksLoad: handleDocLinksLoad,\n onFilterOpen: () => handleFilterOpen(true),\n onFilterClose: () => handleFilterOpen(false),\n onTasksReload: handleTasksReload,\n orders: orders,\n onOrderChanged: handleOrderChanged\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n title: \"\\u041D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0439\\u043A\\u0438\",\n onClick: handleSettingsOpen,\n sx: STYLES.ICON_BUTTON_SETTINGS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, \"settings\"))), dialogsState.noteDialog.isOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_note_dialog_js__WEBPACK_IMPORTED_MODULE_7__.NoteDialog, {\n noteTypes: extraData.noteTypes,\n onCallback: note => dialogsState.noteDialog.callback(note),\n onClose: handleNoteOpen\n }) : null, filters.loaded && filters.values.sType && extraData.dataLoaded && tasks.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__.DragDropContext, {\n onDragStart: path => {\n //Поиск кода текущего статуса задачи\n let sourceCode = statuses.find(status => status.ID == path.source.droppableId).SEVNSTAT_CODE;\n //Устанавливаем доступные маршруты события\n setAvailableRoutes({\n source: sourceCode,\n routes: [...extraData.evRoutes.filter(route => route.SSOURCE === sourceCode)]\n });\n },\n onDragEnd: path => {\n //Если есть статус назначения\n if (path.destination) {\n //Определяем мнемокод статуса назначения\n let destCode = statuses.find(status => status.ID == path.destination.droppableId).SEVNSTAT_CODE;\n //Переносим событие\n onDragEnd({\n path: path,\n eventPoints: extraData.evPoints,\n openNoteDialog: handleNoteOpen,\n destCode: destCode\n });\n }\n //Очищаем информацию о доступных маршрутах события\n handleAvailableRoutesStateClear();\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.BOX_STATUSES\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__.Droppable, {\n droppableId: \"Statuses\",\n type: \"droppableTask\"\n }, provided => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: provided.innerRef\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n direction: \"row\",\n spacing: 2,\n sx: STYLES.STACK_STATUSES\n }, statusesState.sorted ? statuses.map((status, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n key: index\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_16__.Droppable, {\n isDropDisabled: !isCardAvailable(status.SEVNSTAT_CODE),\n droppableId: status.ID.toString()\n }, provided => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: provided.innerRef\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_status_card_js__WEBPACK_IMPORTED_MODULE_1__.StatusCard, {\n tasks: tasks,\n status: status,\n statusTitle: status[statusesState.attr] || status.SEVNSTAT_NAME,\n colorRules: colorRules,\n extraData: extraData,\n isCardAvailable: isCardAvailable,\n onTasksReload: handleTasksReload,\n onNoteDialogOpen: handleNoteOpen,\n onStatusColorChange: handleSettingStatusColorChange,\n placeholder: provided.placeholder\n }))))) : null), provided.placeholder)))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/clnt_task_board.js?"); /***/ }), @@ -510,7 +510,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SettingsDialog: () => (/* binding */ SettingsDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _custom_input_field_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_input_field.js */ \"./app/panels/clnt_task_board/components/custom_input_field.js\");\n/* harmony import */ var _layouts_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layouts.js */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../core/utils.js */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles */ \"./app/panels/clnt_task_board/styles.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Компонент: Диалог дополнительных настроек\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Кастомное поле ввода\n //Допустимые значение поля и направления сортировки\n //Проверка наличия значения\n //Общие стили\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n SELECT: {\n width: \"100%\"\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\n//Диалог дополнительных настроек\nconst SettingsDialog = ({\n initial,\n onSettingsChange,\n onClose,\n ...other\n}) => {\n //Состояние дополнительных настроек\n const [colorRules, seColorRules] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial.colorRules);\n\n //Состояние статусов\n const [statusesState, setStatusesState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial.statusesState);\n\n //Изменение поля сортировки\n const handleSortAttrChange = (item, value) => setStatusesState(pv => ({\n ...pv,\n [item]: value\n }));\n\n //Изменение направления сортировки\n const handleSortDestChange = newDirection => setStatusesState(pv => ({\n ...pv,\n direction: newDirection\n }));\n\n //При изменении правила заливки событий\n const handleColorRuleChange = (item, value) => {\n //Определяем новое правило заливки\n let newColorRule = colorRules.rules[value];\n //Обновляем в основных настройках\n seColorRules(pv => ({\n ...pv,\n selectedColorRule: newColorRule ? newColorRule : {}\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", other, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n open: true,\n onClose: onClose,\n fullWidth: true,\n maxWidth: \"sm\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"\\u041D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0439\\u043A\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: onClose,\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.DIALOG_CLOSE_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.SCROLL\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"section\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_input_field_js__WEBPACK_IMPORTED_MODULE_1__.CustomInputField, {\n elementCode: \"clrRules\",\n elementValue: (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_3__.hasValue)(colorRules.selectedColorRule.id) && colorRules.length !== 0 ? colorRules.selectedColorRule.id : -1,\n labelText: \"\\u0417\\u0430\\u043B\\u0438\\u0432\\u043A\\u0430 \\u0441\\u043E\\u0431\\u044B\\u0442\\u0438\\u0439\",\n items: colorRules.rules.reduce((prev, cur) => [...prev, {\n id: cur.id,\n caption: cur.SDP_NAME\n }], []),\n emptyItem: {\n key: -1,\n id: -1,\n caption: \"-\"\n },\n onChange: handleColorRuleChange,\n sx: STYLES.SELECT\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"section\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\",\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.STACK_DOCLINKS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_input_field_js__WEBPACK_IMPORTED_MODULE_1__.CustomInputField, {\n elementCode: \"attr\",\n elementValue: statusesState.attr,\n labelText: \"\\u041F\\u043E\\u043B\\u0435 \\u0441\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0438\",\n items: _layouts_js__WEBPACK_IMPORTED_MODULE_2__.sortAttrs.reduce((prev, cur) => [...prev, {\n id: cur.id,\n caption: cur.descr\n }], []),\n onChange: handleSortAttrChange,\n sx: STYLES.SELECT\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: statusesState.direction === \"asc\" ? \"По возрастанию\" : \"По убыванию\",\n onClick: () => handleSortDestChange(_layouts_js__WEBPACK_IMPORTED_MODULE_2__.sortDest[_layouts_js__WEBPACK_IMPORTED_MODULE_2__.sortDest.indexOf(statusesState.direction) * -1])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, statusesState.direction === \"asc\" ? \"arrow_upward\" : \"arrow_downward\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.DIALOG_ACTIONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"text\",\n onClick: () => {\n onSettingsChange(colorRules, statusesState);\n onClose();\n }\n }, \"\\u041E\\u041A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"text\",\n onClick: () => {\n seColorRules(pv => ({\n ...pv,\n selectedColorRule: {}\n }));\n setStatusesState(pv => ({\n ...pv,\n attr: \"SEVNSTAT_NAME\",\n direction: \"asc\"\n }));\n }\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"text\",\n onClick: onClose\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\"))));\n};\n\n//Контроль свойств компонента - Диалог дополнительных настроек\nSettingsDialog.propTypes = {\n initial: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/settings_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SettingsDialog: () => (/* binding */ SettingsDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _custom_input_field_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_input_field.js */ \"./app/panels/clnt_task_board/components/custom_input_field.js\");\n/* harmony import */ var _layouts_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layouts.js */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../core/utils.js */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles */ \"./app/panels/clnt_task_board/styles.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Компонент: Диалог дополнительных настроек\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Кастомное поле ввода\n //Допустимые значение поля и направления сортировки\n //Проверка наличия значения\n //Общие стили\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n SELECT: {\n width: \"100%\"\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\n//Диалог дополнительных настроек\nconst SettingsDialog = ({\n initial,\n onSettingsChange,\n onClose,\n ...other\n}) => {\n //Состояние дополнительных настроек\n const [colorRules, seColorRules] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial.colorRules);\n\n //Состояние статусов\n const [statusesState, setStatusesState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial.statusesState);\n\n //Изменение поля сортировки\n const handleSortAttrChange = (item, value) => setStatusesState(pv => ({\n ...pv,\n [item]: value\n }));\n\n //Изменение направления сортировки\n const handleSortDestChange = newDirection => setStatusesState(pv => ({\n ...pv,\n direction: newDirection\n }));\n\n //При изменении правила заливки событий\n const handleColorRuleChange = (item, value) => {\n //Определяем новое правило заливки\n let newColorRule = colorRules.rules[value];\n //Обновляем в основных настройках\n seColorRules(pv => ({\n ...pv,\n selectedColorRule: newColorRule ? newColorRule : {}\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", other, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n open: true,\n onClose: onClose,\n fullWidth: true,\n maxWidth: \"sm\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"\\u041D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0439\\u043A\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: onClose,\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.DIALOG_CLOSE_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.SCROLL\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"section\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_input_field_js__WEBPACK_IMPORTED_MODULE_1__.CustomInputField, {\n elementCode: \"clrRules\",\n elementValue: (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_3__.hasValue)(colorRules.selectedColorRule.id) && colorRules.length !== 0 ? colorRules.selectedColorRule.id : -1,\n labelText: \"\\u0417\\u0430\\u043B\\u0438\\u0432\\u043A\\u0430 \\u0441\\u043E\\u0431\\u044B\\u0442\\u0438\\u0439*\",\n items: colorRules.rules.reduce((prev, cur) => [...prev, {\n id: cur.id,\n caption: `${cur.SDP_NAME}` + (cur.STYPE == \"string\" ? `${cur.fromValue ? `, значение \"${cur.fromValue}\"` : \"\"}` : `${cur.fromValue ? `, с ${cur.fromValue}` : \"\"}` + `${cur.toValue ? `, по ${cur.toValue}` : \"\"}`) + `${cur.SCOLOR ? `, ${cur.SCOLOR}` : \"\"}`\n }], []),\n emptyItem: {\n key: -1,\n id: -1,\n caption: \"Нет\"\n },\n onChange: handleColorRuleChange,\n sx: STYLES.SELECT\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"section\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\",\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.STACK_DOCLINKS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_input_field_js__WEBPACK_IMPORTED_MODULE_1__.CustomInputField, {\n elementCode: \"attr\",\n elementValue: statusesState.attr,\n labelText: \"\\u041F\\u043E\\u0440\\u044F\\u0434\\u043E\\u043A \\u0441\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0438 \\u043A\\u043E\\u043B\\u043E\\u043D\\u043E\\u043A\",\n items: _layouts_js__WEBPACK_IMPORTED_MODULE_2__.sortAttrs.reduce((prev, cur) => [...prev, {\n id: cur.id,\n caption: cur.descr\n }], []),\n onChange: handleSortAttrChange,\n sx: STYLES.SELECT\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: statusesState.direction === \"asc\" ? \"По возрастанию\" : \"По убыванию\",\n onClick: () => handleSortDestChange(_layouts_js__WEBPACK_IMPORTED_MODULE_2__.sortDest[_layouts_js__WEBPACK_IMPORTED_MODULE_2__.sortDest.indexOf(statusesState.direction) * -1])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, statusesState.direction === \"asc\" ? \"arrow_upward\" : \"arrow_downward\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"caption\"\n }, \"*\\u041F\\u043E\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u044E\\u0442\\u0441\\u044F \\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u0430 \\u0437\\u0430\\u043B\\u0438\\u0432\\u043A\\u0438, \\u0431\\u0430\\u0437\\u0438\\u0440\\u0443\\u044E\\u0449\\u0438\\u0435\\u0441\\u044F \\u043D\\u0430 \\u0434\\u043E\\u043F\\u043E\\u043B\\u043D\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u044B\\u0445 \\u0441\\u0432\\u043E\\u0439\\u0441\\u0442\\u0432\\u0430\\u0445 \\u0442\\u0438\\u043F\\u0430 \\\"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\\\" \\u0438\\u043B\\u0438 \\\"\\u0427\\u0438\\u0441\\u043B\\u043E\\\", \\u0438\\u0437 \\u043F\\u0440\\u043E\\u0444\\u0438\\u043B\\u044F \\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u0442\\u0435\\u043B\\u044F, \\u043D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0435\\u043D\\u043D\\u043E\\u0433\\u043E \\u0434\\u043B\\u044F \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \\\"\\u0421\\u043E\\u0431\\u044B\\u0442\\u0438\\u044F\\\" \\u0432 WEB-\\u0438\\u043D\\u0442\\u0435\\u0440\\u0444\\u0435\\u0439\\u0441\\u0435 \\u0434\\u0430\\u043D\\u043D\\u043E\\u0433\\u043E \\u043F\\u0440\\u0438\\u043B\\u043E\\u0436\\u0435\\u043D\\u0438\\u044F.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_4__.COMMON_STYLES.DIALOG_ACTIONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"text\",\n onClick: () => {\n onSettingsChange(colorRules, statusesState);\n onClose();\n }\n }, \"\\u041E\\u041A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"text\",\n onClick: () => {\n seColorRules(pv => ({\n ...pv,\n selectedColorRule: {}\n }));\n setStatusesState(pv => ({\n ...pv,\n attr: \"SEVNSTAT_NAME\",\n direction: \"asc\"\n }));\n }\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"text\",\n onClick: onClose\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\"))));\n};\n\n//Контроль свойств компонента - Диалог дополнительных настроек\nSettingsDialog.propTypes = {\n initial: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object).isRequired,\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/settings_dialog.js?"); /***/ }), @@ -521,7 +521,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StatusCard: () => (/* binding */ StatusCard)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _task_card_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_card.js */ \"./app/panels/clnt_task_board/components/task_card.js\");\n/* harmony import */ var _status_card_settings_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./status_card_settings.js */ \"./app/panels/clnt_task_board/components/status_card_settings.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _layouts_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layouts.js */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Компонент: Карточка статуса событий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Компонент Карточка события\n //Компонент Диалог настройки карточки событий\n //Типовые стили\n //Цвета статусов\n //Заголовок страницы\n\n//---------\n//Константы\n//---------\n\n//Нижний отступ заголовка\nconst TITLE_PADDING_BOTTOM = \"16px\";\n\n//Высота фильтра\nconst FILTER_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n STATUS_BLOCK: statusColor => {\n return {\n width: \"350px\",\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} - ${TITLE_PADDING_BOTTOM} - ${FILTER_HEIGHT} - 8px)`,\n backgroundColor: statusColor,\n padding: \"8px\"\n };\n },\n BLOCK_OPACITY: isAvailable => {\n return isAvailable ? {\n opacity: 1\n } : {\n opacity: 0.5\n };\n },\n CARD_HEADER_TITLE: {\n textAlign: \"left\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n display: \"-webkit-box\",\n hyphens: \"auto\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 1,\n maxWidth: \"calc(300px)\",\n width: \"-webkit-fill-available\",\n fontSize: \"1.2rem\",\n cursor: \"default\"\n },\n CARD_HEADER: {\n padding: 0\n },\n CARD_CONTENT: {\n padding: 0,\n paddingRight: \"5px\",\n paddingBottom: \"5px !important\",\n overflowY: \"auto\",\n maxHeight: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} - ${TITLE_PADDING_BOTTOM} - ${FILTER_HEIGHT} - 85px)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_3__.APP_STYLES.SCROLL\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\n//Карточка статуса события\nconst StatusCard = ({\n tasks,\n status,\n statusTitle,\n colorRules,\n extraData,\n filtersType,\n isCardAvailable,\n onTasksReload,\n onDragItemChange,\n onTaskDialogOpen,\n onNoteDialogOpen,\n onStatusColorChange,\n placeholder\n}) => {\n //Состояние диалога настройки\n const [statusCardSettingsOpen, setStatusCardSettingsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Открыть/закрыть диалог настройки\n const handleStatusCardSettingsOpen = () => setStatusCardSettingsOpen(!statusCardSettingsOpen);\n\n //При изменении цвета статуса\n const handleStatusColorChange = newColor => {\n onStatusColorChange(status, newColor);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, statusCardSettingsOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_status_card_settings_js__WEBPACK_IMPORTED_MODULE_2__.StatusCardSettings, {\n statusColor: status.color,\n availableColors: _layouts_js__WEBPACK_IMPORTED_MODULE_4__.COLORS.includes(status.color) ? _layouts_js__WEBPACK_IMPORTED_MODULE_4__.COLORS : [status.color, ..._layouts_js__WEBPACK_IMPORTED_MODULE_4__.COLORS],\n onClose: handleStatusCardSettingsOpen,\n onColorChange: handleStatusColorChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"statusId-card\",\n sx: {\n ...STYLES.STATUS_BLOCK(status.color),\n ...STYLES.BLOCK_OPACITY(isCardAvailable(status.SEVNSTAT_CODE))\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"settings\",\n onClick: handleStatusCardSettingsOpen\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"more_vert\")),\n title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CARD_HEADER_TITLE,\n title: statusTitle,\n variant: \"h5\"\n }, statusTitle),\n subheader: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: () => {\n onDragItemChange(filtersType, status.SEVNSTAT_CODE);\n onTaskDialogOpen();\n }\n }, \"+ \\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"),\n sx: STYLES.CARD_HEADER\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.CARD_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n spacing: 1\n }, tasks.rows.filter(item => item.sStatus === status.SEVNSTAT_NAME).map((item, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_card_js__WEBPACK_IMPORTED_MODULE_1__.TaskCard, {\n task: item,\n index: index,\n onTasksReload: onTasksReload,\n key: item.id,\n colorRule: colorRules.selectedColorRule,\n pointSettings: extraData.evPoints.find(p => p.SEVPOINT === status.SEVNSTAT_CODE),\n onOpenNoteDialog: onNoteDialogOpen\n })), placeholder))));\n};\n\n//Контроль свойств - Карточка статуса события\nStatusCard.propTypes = {\n tasks: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n status: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n statusTitle: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n colorRules: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n extraData: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n filtersType: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n isCardAvailable: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onDragItemChange: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onTaskDialogOpen: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onNoteDialogOpen: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onStatusColorChange: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n placeholder: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/status_card.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StatusCard: () => (/* binding */ StatusCard)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _task_card_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_card.js */ \"./app/panels/clnt_task_board/components/task_card.js\");\n/* harmony import */ var _status_card_settings_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./status_card_settings.js */ \"./app/panels/clnt_task_board/components/status_card_settings.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _layouts_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layouts.js */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Компонент: Карточка статуса событий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Компонент Карточка события\n //Компонент Диалог настройки карточки событий\n //Типовые стили\n //Цвета статусов\n //Заголовок страницы\n\n//---------\n//Константы\n//---------\n\n//Нижний отступ заголовка\nconst TITLE_PADDING_BOTTOM = \"16px\";\n\n//Высота фильтра\nconst FILTER_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n STATUS_BLOCK: statusColor => {\n return {\n width: \"350px\",\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} - ${TITLE_PADDING_BOTTOM} - ${FILTER_HEIGHT} - 8px)`,\n backgroundColor: statusColor,\n padding: \"8px\"\n };\n },\n BLOCK_OPACITY: isAvailable => {\n return isAvailable ? {\n opacity: 1\n } : {\n opacity: 0.5\n };\n },\n CARD_HEADER_TITLE: {\n textAlign: \"left\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n display: \"-webkit-box\",\n hyphens: \"auto\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 1,\n maxWidth: \"calc(300px)\",\n width: \"-webkit-fill-available\",\n fontSize: \"1.2rem\",\n cursor: \"default\"\n },\n CARD_HEADER: {\n padding: 0\n },\n CARD_CONTENT: {\n padding: 0,\n paddingRight: \"5px\",\n paddingBottom: \"5px !important\",\n overflowY: \"auto\",\n maxHeight: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} - ${TITLE_PADDING_BOTTOM} - ${FILTER_HEIGHT} - 55px)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_3__.APP_STYLES.SCROLL\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\n//Карточка статуса события\nconst StatusCard = ({\n tasks,\n status,\n statusTitle,\n colorRules,\n extraData,\n isCardAvailable,\n onTasksReload,\n onNoteDialogOpen,\n onStatusColorChange,\n placeholder\n}) => {\n //Состояние диалога настройки\n const [statusCardSettingsOpen, setStatusCardSettingsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Открыть/закрыть диалог настройки\n const handleStatusCardSettingsOpen = () => setStatusCardSettingsOpen(!statusCardSettingsOpen);\n\n //При изменении цвета статуса\n const handleStatusColorChange = newColor => {\n onStatusColorChange(status, newColor);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, statusCardSettingsOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_status_card_settings_js__WEBPACK_IMPORTED_MODULE_2__.StatusCardSettings, {\n statusColor: status.color,\n availableColors: _layouts_js__WEBPACK_IMPORTED_MODULE_4__.COLORS.includes(status.color) ? _layouts_js__WEBPACK_IMPORTED_MODULE_4__.COLORS : [status.color, ..._layouts_js__WEBPACK_IMPORTED_MODULE_4__.COLORS],\n onClose: handleStatusCardSettingsOpen,\n onColorChange: handleStatusColorChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"statusId-card\",\n sx: {\n ...STYLES.STATUS_BLOCK(status.color),\n ...STYLES.BLOCK_OPACITY(isCardAvailable(status.SEVNSTAT_CODE))\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"settings\",\n onClick: handleStatusCardSettingsOpen\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"more_vert\")),\n title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CARD_HEADER_TITLE,\n title: statusTitle,\n variant: \"h5\"\n }, statusTitle),\n sx: STYLES.CARD_HEADER\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.CARD_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n spacing: 1\n }, tasks.rows.filter(item => item.sStatus === status.SEVNSTAT_NAME).map((item, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_card_js__WEBPACK_IMPORTED_MODULE_1__.TaskCard, {\n task: item,\n index: index,\n onTasksReload: onTasksReload,\n key: item.id,\n colorRule: colorRules.selectedColorRule,\n pointSettings: extraData.evPoints.find(p => p.SEVPOINT === status.SEVNSTAT_CODE),\n onOpenNoteDialog: onNoteDialogOpen\n })), placeholder))));\n};\n\n//Контроль свойств - Карточка статуса события\nStatusCard.propTypes = {\n tasks: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n status: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n statusTitle: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n colorRules: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n extraData: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n isCardAvailable: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onNoteDialogOpen: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onStatusColorChange: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n placeholder: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/status_card.js?"); /***/ }), @@ -642,7 +642,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useClientEvent: () => (/* binding */ useClientEvent),\n/* harmony export */ useDocsProps: () => (/* binding */ useDocsProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Пользовательские хуки: Хуки диалога события\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для события\nconst useClientEvent = (taskRn, taskType = \"\", taskStatus = \"\") => {\n //Собственное состояние\n const [task, setTask] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: true,\n nRn: taskRn,\n sCrn: \"\",\n sPrefix: \"\",\n sNumber: \"\",\n sType: taskType,\n sStatus: taskStatus,\n sDescription: \"\",\n sClntClients: \"\",\n sClntClnperson: \"\",\n dStartDate: \"\",\n sInitClnperson: \"\",\n sInitUser: \"\",\n sInitReason: \"\",\n sToCompany: \"\",\n sToDepartment: \"\",\n sToClnpost: \"\",\n sToClnpsdep: \"\",\n sToClnperson: \"\",\n sToFcstaffgrp: \"\",\n sToUser: \"\",\n sToUsergrp: \"\",\n sCurrentUser: \"\",\n isUpdate: false,\n insertDisabled: true,\n updateDisabled: true,\n docProps: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При инициализации события\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если это инициализация\n if (task.init) {\n //Если указан рег. номер события\n if (taskRn) {\n //Считывание параметров события\n const readEvent = async () => {\n //Считываем информацию о событии по рег. номеру\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_GET\",\n args: {\n NCLNEVENTS: task.nRn\n },\n respArg: \"COUT\"\n });\n //Фильтруем доп. свойства\n let docProps = Object.keys(data.XEVENT).filter(key => key.includes(\"DP_\")).reduce((prev, key) => ({\n ...prev,\n [key]: data.XEVENT[key]\n }), {});\n //Устанавливаем информацию о событии\n setTask(pv => ({\n ...pv,\n sCrn: data.XEVENT.SCRN,\n sPrefix: data.XEVENT.SPREF,\n sNumber: data.XEVENT.SNUMB,\n sType: data.XEVENT.STYPE,\n sStatus: data.XEVENT.SSTATUS,\n sDescription: data.XEVENT.SDESCRIPTION,\n sClntClients: data.XEVENT.SCLIENT_CLIENT,\n sClntClnperson: data.XEVENT.SCLIENT_PERSON,\n dPlanDate: data.XEVENT.SPLAN_DATE,\n sInitClnperson: data.XEVENT.SINIT_PERSON,\n sInitUser: data.XEVENT.SINIT_AUTHID,\n sInitReason: data.XEVENT.SREASON,\n sToCompany: data.XEVENT.SSEND_CLIENT,\n sToDepartment: data.XEVENT.SSEND_DIVISION,\n sToClnpost: data.XEVENT.SSEND_POST,\n sToClnpsdep: data.XEVENT.SSEND_PERFORM,\n sToClnperson: data.XEVENT.SSEND_PERSON,\n sToFcstaffgrp: data.XEVENT.SSEND_STAFFGRP,\n sToUser: data.XEVENT.SSEND_USER_NAME,\n sToUsergrp: data.XEVENT.SSEND_USER_GROUP,\n sCurrentUser: data.XEVENT.SINIT_AUTHID,\n isUpdate: true,\n init: false,\n docProps: docProps\n }));\n };\n //Инициализация параметров события\n readEvent();\n } else {\n //Считывание изначальных параметров события\n const initEvent = async () => {\n //Инициализируем параметры события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INIT\",\n args: {\n SEVENT_TYPE: task.sType\n }\n });\n //Если есть данные\n if (data) {\n //Устанавливаем данные по событию\n setTask(pv => ({\n ...pv,\n sPrefix: data.SPREF,\n sNumber: data.SNUMB,\n sCurrentUser: data.SINIT_AUTHNAME,\n sInitClnperson: data.SINIT_PERSON,\n sInitUser: !data.SINIT_PERSON ? data.SINIT_AUTHNAME : \"\",\n init: false\n }));\n }\n };\n //Инициализация изначальных параметров события\n initEvent();\n }\n }\n if (!task.init) {\n setTask(pv => ({\n ...pv,\n sInitUser: !task.sInitClnperson ? task.sCurrentUser : \"\"\n }));\n }\n }, [executeStored, task.init, task.nRn, task.sType, task.sCurrentUser, task.sInitClnperson, taskRn]);\n\n //Проверка доступности действия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setTask(pv => ({\n ...pv,\n insertDisabled: !task.sCrn || !task.sPrefix || !task.sNumber || !task.sType || !task.sStatus || !task.sDescription || !task.sInitClnperson && !task.sInitUser,\n updateDisabled: !task.sDescription\n }));\n }, [task.sCrn, task.sDescription, task.sInitClnperson, task.sInitUser, task.sNumber, task.sPrefix, task.sStatus, task.sType]);\n return [task, setTask];\n};\n\n//Хук для получения свойств раздела \"События\"\nconst useDocsProps = taskType => {\n //Собственное состояние\n const [docProps, setDocsProps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n props: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка доп. свойств\n let getDocsProps = async () => {\n //Считываема доп. свойства по типу события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_PROPS_GET\",\n args: {\n SEVNTYPE_CODE: taskType\n },\n isArray: name => name === \"XPROPS\",\n respArg: \"COUT\"\n });\n //Устанавливаем доп. свойства\n setDocsProps({\n loaded: true,\n props: [...(data?.XPROPS || [])]\n });\n };\n //Если доп. свойства не загружены\n if (!docProps.loaded) {\n //Загружаем доп. свойства\n getDocsProps();\n }\n }, [docProps.loaded, executeStored, taskType]);\n return [docProps];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/task_dialog_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useClientEvent: () => (/* binding */ useClientEvent),\n/* harmony export */ useDocsProps: () => (/* binding */ useDocsProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Пользовательские хуки: Хуки диалога события\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для события\nconst useClientEvent = (taskRn, taskType = \"\") => {\n //Собственное состояние\n const [task, setTask] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: true,\n nRn: taskRn,\n sCrn: \"\",\n sPrefix: \"\",\n sNumber: \"\",\n sType: taskType,\n sStatus: \"\",\n sDescription: \"\",\n sClntClients: \"\",\n sClntClnperson: \"\",\n dStartDate: \"\",\n sInitClnperson: \"\",\n sInitUser: \"\",\n sInitReason: \"\",\n sToCompany: \"\",\n sToDepartment: \"\",\n sToClnpost: \"\",\n sToClnpsdep: \"\",\n sToClnperson: \"\",\n sToFcstaffgrp: \"\",\n sToUser: \"\",\n sToUsergrp: \"\",\n sCurrentUser: \"\",\n isUpdate: false,\n insertDisabled: true,\n updateDisabled: true,\n docProps: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При инициализации события\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если это инициализация\n if (task.init) {\n //Если указан рег. номер события\n if (taskRn) {\n //Считывание параметров события\n const readEvent = async () => {\n //Считываем информацию о событии по рег. номеру\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_GET\",\n args: {\n NCLNEVENTS: task.nRn\n },\n respArg: \"COUT\"\n });\n //Фильтруем доп. свойства\n let docProps = Object.keys(data.XEVENT).filter(key => key.includes(\"DP_\")).reduce((prev, key) => ({\n ...prev,\n [key]: data.XEVENT[key]\n }), {});\n //Устанавливаем информацию о событии\n setTask(pv => ({\n ...pv,\n sCrn: data.XEVENT.SCRN,\n sPrefix: data.XEVENT.SPREF,\n sNumber: data.XEVENT.SNUMB,\n sType: data.XEVENT.STYPE,\n sStatus: data.XEVENT.SSTATUS,\n sDescription: data.XEVENT.SDESCRIPTION,\n sClntClients: data.XEVENT.SCLIENT_CLIENT,\n sClntClnperson: data.XEVENT.SCLIENT_PERSON,\n dPlanDate: data.XEVENT.SPLAN_DATE,\n sInitClnperson: data.XEVENT.SINIT_PERSON,\n sInitUser: data.XEVENT.SINIT_AUTHID,\n sInitReason: data.XEVENT.SREASON,\n sToCompany: data.XEVENT.SSEND_CLIENT,\n sToDepartment: data.XEVENT.SSEND_DIVISION,\n sToClnpost: data.XEVENT.SSEND_POST,\n sToClnpsdep: data.XEVENT.SSEND_PERFORM,\n sToClnperson: data.XEVENT.SSEND_PERSON,\n sToFcstaffgrp: data.XEVENT.SSEND_STAFFGRP,\n sToUser: data.XEVENT.SSEND_USER_NAME,\n sToUsergrp: data.XEVENT.SSEND_USER_GROUP,\n sCurrentUser: data.XEVENT.SINIT_AUTHID,\n isUpdate: true,\n init: false,\n docProps: docProps\n }));\n };\n //Инициализация параметров события\n readEvent();\n } else {\n //Считывание изначальных параметров события\n const initEvent = async () => {\n //Инициализируем параметры события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INIT\",\n args: {\n SEVENT_TYPE: task.sType\n }\n });\n //Если есть данные\n if (data) {\n //Устанавливаем данные по событию\n setTask(pv => ({\n ...pv,\n sPrefix: data.SPREF,\n sNumber: data.SNUMB,\n sStatus: data.SSTATUS,\n sCurrentUser: data.SINIT_AUTHNAME,\n sInitClnperson: data.SINIT_PERSON,\n sInitUser: !data.SINIT_PERSON ? data.SINIT_AUTHNAME : \"\",\n init: false\n }));\n }\n };\n //Инициализация изначальных параметров события\n initEvent();\n }\n }\n if (!task.init) {\n setTask(pv => ({\n ...pv,\n sInitUser: !task.sInitClnperson ? task.sCurrentUser : \"\"\n }));\n }\n }, [executeStored, task.init, task.nRn, task.sType, task.sCurrentUser, task.sInitClnperson, taskRn]);\n\n //Проверка доступности действия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setTask(pv => ({\n ...pv,\n insertDisabled: !task.sCrn || !task.sPrefix || !task.sNumber || !task.sType || !task.sStatus || !task.sDescription || !task.sInitClnperson && !task.sInitUser,\n updateDisabled: !task.sDescription\n }));\n }, [task.sCrn, task.sDescription, task.sInitClnperson, task.sInitUser, task.sNumber, task.sPrefix, task.sStatus, task.sType]);\n return [task, setTask];\n};\n\n//Хук для получения свойств раздела \"События\"\nconst useDocsProps = taskType => {\n //Собственное состояние\n const [docProps, setDocsProps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n props: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка доп. свойств\n let getDocsProps = async () => {\n //Считываема доп. свойства по типу события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_PROPS_GET\",\n args: {\n SEVNTYPE_CODE: taskType\n },\n isArray: name => name === \"XPROPS\",\n respArg: \"COUT\"\n });\n //Устанавливаем доп. свойства\n setDocsProps({\n loaded: true,\n props: [...(data?.XPROPS || [])]\n });\n };\n //Если доп. свойства не загружены\n if (!docProps.loaded) {\n //Загружаем доп. свойства\n getDocsProps();\n }\n }, [docProps.loaded, executeStored, taskType]);\n return [docProps];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/task_dialog_hooks.js?"); /***/ }), @@ -675,7 +675,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COLORS: () => (/* binding */ COLORS),\n/* harmony export */ DP_DEFAULT_VALUE: () => (/* binding */ DP_DEFAULT_VALUE),\n/* harmony export */ DP_IN_VALUE: () => (/* binding */ DP_IN_VALUE),\n/* harmony export */ DP_RETURN_VALUE: () => (/* binding */ DP_RETURN_VALUE),\n/* harmony export */ DP_TYPE_PREFIX: () => (/* binding */ DP_TYPE_PREFIX),\n/* harmony export */ EVENT_STATES: () => (/* binding */ EVENT_STATES),\n/* harmony export */ TASK_COLORS: () => (/* binding */ TASK_COLORS),\n/* harmony export */ convertFilterValuesToArray: () => (/* binding */ convertFilterValuesToArray),\n/* harmony export */ formatSqlDate: () => (/* binding */ formatSqlDate),\n/* harmony export */ getLocalStorageValue: () => (/* binding */ getLocalStorageValue),\n/* harmony export */ getRandomColor: () => (/* binding */ getRandomColor),\n/* harmony export */ getTaskBgColorByRule: () => (/* binding */ getTaskBgColorByRule),\n/* harmony export */ getTaskExpiredColor: () => (/* binding */ getTaskExpiredColor),\n/* harmony export */ makeArray: () => (/* binding */ makeArray),\n/* harmony export */ makeCardActionsArray: () => (/* binding */ makeCardActionsArray),\n/* harmony export */ sortAttrs: () => (/* binding */ sortAttrs),\n/* harmony export */ sortDest: () => (/* binding */ sortDest),\n/* harmony export */ validationError: () => (/* binding */ validationError)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Перечисление \"Состояние события\"\nconst EVENT_STATES = Object.freeze({\n 0: \"Все\",\n 1: \"Не аннулированные\",\n 2: \"Аннулированные\"\n});\n\n//Допустимые значение поля сортировки\nconst sortAttrs = [{\n id: \"SEVNSTAT_CODE\",\n descr: \"Мнемокод\"\n}, {\n id: \"SEVNSTAT_NAME\",\n descr: \"Наименование\"\n}, {\n id: \"SEVPOINT_DESCR\",\n descr: \"Описание точки маршрута\"\n}];\n\n//Допустимые значения направления сортировки\nconst sortDest = [];\nsortDest[-1] = \"desc\";\nsortDest[1] = \"asc\";\n\n//Цвета статусов\nconst COLORS = [\"mediumSlateBlue\", \"lightSalmon\", \"fireBrick\", \"orange\", \"gold\", \"limeGreen\", \"yellowGreen\", \"mediumAquaMarine\", \"paleTurquoise\", \"steelBlue\", \"skyBlue\", \"tan\"];\n\n//Перечисление \"Цвет задачи\"\nconst TASK_COLORS = Object.freeze({\n EXPIRED: \"#ff0000\",\n EXPIRES_SOON: \"#ffdf00\",\n LINKED: \"#1e90ff\"\n});\n\n//Перечисление Доп. свойства \"Значение по умолчанию\"\nconst DP_DEFAULT_VALUE = Object.freeze({\n 0: \"SDEFAULT_STR\",\n 1: \"NDEFAULT_NUM\",\n 2: \"DDEFAULT_DATE\",\n 3: \"NDEFAULT_NUM\"\n});\n//Перечисление Доп. свойства \"Префикс формата данных\"\nconst DP_TYPE_PREFIX = Object.freeze({\n 0: \"S\",\n 1: \"N\",\n 2: \"D\",\n 3: \"N\"\n});\n//Перечисление Доп. свойства \"Входящее значение дополнительного словаря\"\nconst DP_IN_VALUE = Object.freeze({\n 0: \"pos_str_value\",\n 1: \"pos_num_value\",\n 2: \"pos_date_value\",\n 3: \"pos_num_value\"\n});\n//Перечисление Доп. свойства \"Исходящее значение дополнительного словаря\"\nconst DP_RETURN_VALUE = Object.freeze({\n 0: \"str_value\",\n 1: \"num_value\",\n 2: \"date_value\",\n 3: \"num_value\"\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование массива из 0, 1 и более элементов\nconst makeArray = arr => {\n return arr ? arr.length ? arr : [arr] : [];\n};\n\n//Конвертация формата HEX в формат RGB\nconst convertHexToRGB = hex => {\n let r = parseInt(hex.slice(1, 3), 16);\n let g = parseInt(hex.slice(3, 5), 16);\n let b = parseInt(hex.slice(5, 7), 16);\n let a = 0.5;\n r = Math.round((a * (r / 255) + a * (255 / 255)) * 255);\n g = Math.round((a * (g / 255) + a * (255 / 255)) * 255);\n b = Math.round((a * (b / 255) + a * (255 / 255)) * 255);\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\n\n//Считывание заливки события по условию\nconst getTaskBgColorByRule = (task, colorRule) => {\n //Инициализируем значения\n let ruleCode = \"\";\n //Исходя из типа определяем наименование\n switch (colorRule.STYPE) {\n case \"number\":\n ruleCode = `N${colorRule.SFIELD}`;\n break;\n case \"date\":\n ruleCode = `D${colorRule.SFIELD}`;\n break;\n default:\n ruleCode = `S${colorRule.SFIELD}`;\n break;\n }\n //Определяем цвет заливки\n let bgColor = ruleCode && task.docProps[ruleCode] == colorRule.fromValue ? convertHexToRGB(colorRule.SCOLOR) : null;\n //Возвращаем цвет заливки\n return bgColor;\n};\n\n//Индикация истечения срока отработки события\nconst getTaskExpiredColor = task => {\n //Определяем текущую дату\n let sysDate = new Date();\n //Определяем дату истечения срока события\n let expireDate = task.dExpireDate ? new Date(task.dExpireDate) : null;\n //Если дата истечения срока определена\n if (expireDate) {\n //Определяем разницу между датами\n let daysDiff = ((expireDate.getTime() - sysDate.getTime()) / (1000 * 60 * 60 * 24)).toFixed(2);\n //Если разница меньше 0 - срок истечен\n if (daysDiff < 0) return TASK_COLORS.EXPIRED;\n //Если разница меньше 4 - скоро истечет\n if (daysDiff < 4) return TASK_COLORS.EXPIRES_SOON;\n }\n return null;\n};\n\n//Цвет из hsl формата в rgba формат\nconst convertHslToRgba = (h, s, l) => {\n s /= 100;\n l /= 100;\n const k = n => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return `rgba(${Math.floor(255 * f(0))},${Math.floor(255 * f(8))},${Math.floor(255 * f(4))},0.3)`;\n};\n\n//Формирование случайного цвета\nconst getRandomColor = index => {\n const hue = index * 137.508;\n return convertHslToRgba(hue, 50, 70);\n};\n\n//Формат дополнительного свойства типа число (длина, точность)\nconst formatRegExpNum = (width, precision) => new RegExp(\"^(\\\\d{1,\" + (width - precision) + \"}\" + (precision > 0 ? \"((\\\\.|,)\\\\d{1,\" + precision + \"})?\" : \"\") + \")?$\");\n\n//Формат дополнительного свойства типа строка (длина)\nconst formatRegExpStr = length => new RegExp(\"^.{0,\" + length + \"}$\");\n\n//Проверка валидности числа\nconst isValidNum = (width, precision, value) => {\n return formatRegExpNum(width, precision).test(value);\n};\n\n//Проверка валидности строки\nconst isValidStr = (length, value) => {\n return formatRegExpStr(length).test(value);\n};\n\n//Признак ошибки валидации\nconst validationError = (value = \"\", format, numWidth, numPrecision, strLength) => {\n //Исходим от формата\n switch (format) {\n //Проверка строки\n case 0:\n return isValidStr(strLength, value);\n //Проверка числа\n case 1:\n return isValidNum(numWidth, numPrecision, value);\n //Остальное не проверяем\n default:\n return true;\n }\n};\n\n//Конвертация времени в привычный формат\nconst formatSqlDate = timeStamp => {\n //Если есть разделитель\n if (timeStamp.indexOf(\".\") !== -1) {\n //Определяем секунды\n let seconds = 24 * 60 * 60 * timeStamp;\n //Определяем часы\n const hours = Math.trunc(seconds / (60 * 60));\n //Переопределяем секунды\n seconds = seconds % (60 * 60);\n //Определяем минуты\n const minutes = Math.trunc(seconds / 60);\n //Определяем остаток секунд\n seconds = Math.round(seconds % 60);\n //Форматируем\n const formattedTime = (\"0\" + hours).slice(-2) + \":\" + (\"0\" + minutes).slice(-2) + \":\" + (\"0\" + seconds).slice(-2);\n //Возвращаем результат\n return formattedTime;\n }\n return timeStamp;\n};\n\n//Считывание значений из локального хранилища\nconst getLocalStorageValue = (sName, defaultValue = null) => localStorage.getItem(sName) || defaultValue;\n\n//Форматирование фильтра в массив для отбора\nconst convertFilterValuesToArray = filterValues => {\n //Инициализируем значение \"с\" состояния (\"Все\", \"Не аннулированные\" - 0, \"Аннулированые\" - 1)\n let nClosedFrom = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[1]].includes(filterValues.sState) ? 0 : 1 : 0;\n //Инициализируем значение \"по\" состояния (\"Все\", \"Аннулированные\" - 1, \"Не аннулированные\" - 0)\n let nClosedTo = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[2]].includes(filterValues.sState) ? 1 : 0 : 0;\n //Формируем массив значений фильтра\n let filterValuesArray = [{\n name: \"NCLOSED\",\n from: nClosedFrom,\n to: nClosedTo\n }, {\n name: \"SEVTYPE_CODE\",\n from: filterValues.sType,\n to: null\n }, {\n name: \"NCRN\",\n from: filterValues.sCrnRnList,\n to: null\n }, {\n name: \"SSEND_PERSON\",\n from: filterValues.sSendPerson,\n to: null\n }, {\n name: \"SSEND_DIVISION\",\n from: filterValues.sSendDivision,\n to: null\n }, {\n name: \"SSEND_USRGRP\",\n from: filterValues.sSendUsrGrp,\n to: null\n }, {\n name: \"NLINKED_RN\",\n from: filterValues.sDocLink,\n to: null\n }];\n return filterValuesArray;\n};\n\n//Формирование массива действий карточки события\nconst makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen) => {\n //Формируем список действий карточки\n return [{\n method: \"EDIT\",\n name: \"Исправить\",\n icon: \"edit\",\n visible: false,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onEdit\n }, {\n method: \"EDIT_CLIENT\",\n name: \"Исправить в разделе\",\n icon: \"edit_note\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onEditClient\n }, {\n method: \"DELETE\",\n name: \"Удалить\",\n icon: \"delete\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: false,\n func: onDelete\n }, {\n method: \"TASK_STATE_CHANGE\",\n name: \"Перейти\",\n icon: \"turn_right\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n func: onStateChange\n }, {\n method: \"TASK_RETURN\",\n name: \"Выполнить возврат\",\n icon: \"turn_left\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n func: onReturn\n }, {\n method: \"TASK_SEND\",\n name: \"Направить\",\n icon: \"send\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: true,\n func: onSend\n }, {\n method: \"NOTES\",\n name: \"Примечания\",\n icon: \"event_note\",\n visible: true,\n delimiter: true,\n tasksReload: false,\n needAccountsReload: false,\n func: onNotesOpen\n }, {\n method: \"FILE_LINKS\",\n name: \"Присоединенные документы\",\n icon: \"attach_file\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onFileLinksOpen\n }];\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COLORS: () => (/* binding */ COLORS),\n/* harmony export */ DP_DEFAULT_VALUE: () => (/* binding */ DP_DEFAULT_VALUE),\n/* harmony export */ DP_IN_VALUE: () => (/* binding */ DP_IN_VALUE),\n/* harmony export */ DP_RETURN_VALUE: () => (/* binding */ DP_RETURN_VALUE),\n/* harmony export */ DP_TYPE_PREFIX: () => (/* binding */ DP_TYPE_PREFIX),\n/* harmony export */ EVENT_STATES: () => (/* binding */ EVENT_STATES),\n/* harmony export */ TASK_COLORS: () => (/* binding */ TASK_COLORS),\n/* harmony export */ convertFilterValuesToArray: () => (/* binding */ convertFilterValuesToArray),\n/* harmony export */ formatSqlDate: () => (/* binding */ formatSqlDate),\n/* harmony export */ getLocalStorageValue: () => (/* binding */ getLocalStorageValue),\n/* harmony export */ getRandomColor: () => (/* binding */ getRandomColor),\n/* harmony export */ getTaskBgColorByRule: () => (/* binding */ getTaskBgColorByRule),\n/* harmony export */ getTaskExpiredColor: () => (/* binding */ getTaskExpiredColor),\n/* harmony export */ makeArray: () => (/* binding */ makeArray),\n/* harmony export */ makeCardActionsArray: () => (/* binding */ makeCardActionsArray),\n/* harmony export */ sortAttrs: () => (/* binding */ sortAttrs),\n/* harmony export */ sortDest: () => (/* binding */ sortDest),\n/* harmony export */ validationError: () => (/* binding */ validationError)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Перечисление \"Состояние события\"\nconst EVENT_STATES = Object.freeze({\n 0: \"Все\",\n 1: \"Не аннулированные\",\n 2: \"Аннулированные\"\n});\n\n//Допустимые значение поля сортировки\nconst sortAttrs = [{\n id: \"SEVNSTAT_CODE\",\n descr: \"Мнемокод статуса\"\n}, {\n id: \"SEVNSTAT_NAME\",\n descr: \"Наименование статуса\"\n}, {\n id: \"SEVPOINT_DESCR\",\n descr: \"Описание точки маршрута\"\n}];\n\n//Допустимые значения направления сортировки\nconst sortDest = [];\nsortDest[-1] = \"desc\";\nsortDest[1] = \"asc\";\n\n//Цвета статусов\nconst COLORS = [\"mediumSlateBlue\", \"lightSalmon\", \"fireBrick\", \"orange\", \"gold\", \"limeGreen\", \"yellowGreen\", \"mediumAquaMarine\", \"paleTurquoise\", \"steelBlue\", \"skyBlue\", \"tan\"];\n\n//Перечисление \"Цвет задачи\"\nconst TASK_COLORS = Object.freeze({\n EXPIRED: \"#ff0000\",\n EXPIRES_SOON: \"#ffdf00\",\n LINKED: \"#1e90ff\"\n});\n\n//Перечисление Доп. свойства \"Значение по умолчанию\"\nconst DP_DEFAULT_VALUE = Object.freeze({\n 0: \"SDEFAULT_STR\",\n 1: \"NDEFAULT_NUM\",\n 2: \"DDEFAULT_DATE\",\n 3: \"NDEFAULT_NUM\"\n});\n//Перечисление Доп. свойства \"Префикс формата данных\"\nconst DP_TYPE_PREFIX = Object.freeze({\n 0: \"S\",\n 1: \"N\",\n 2: \"D\",\n 3: \"N\"\n});\n//Перечисление Доп. свойства \"Входящее значение дополнительного словаря\"\nconst DP_IN_VALUE = Object.freeze({\n 0: \"pos_str_value\",\n 1: \"pos_num_value\",\n 2: \"pos_date_value\",\n 3: \"pos_num_value\"\n});\n//Перечисление Доп. свойства \"Исходящее значение дополнительного словаря\"\nconst DP_RETURN_VALUE = Object.freeze({\n 0: \"str_value\",\n 1: \"num_value\",\n 2: \"date_value\",\n 3: \"num_value\"\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование массива из 0, 1 и более элементов\nconst makeArray = arr => {\n return arr ? arr.length ? arr : [arr] : [];\n};\n\n//Конвертация формата HEX в формат RGB\nconst convertHexToRGB = hex => {\n let r = parseInt(hex.slice(1, 3), 16);\n let g = parseInt(hex.slice(3, 5), 16);\n let b = parseInt(hex.slice(5, 7), 16);\n let a = 0.5;\n r = Math.round((a * (r / 255) + a * (255 / 255)) * 255);\n g = Math.round((a * (g / 255) + a * (255 / 255)) * 255);\n b = Math.round((a * (b / 255) + a * (255 / 255)) * 255);\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\n\n//Считывание заливки события по условию\nconst getTaskBgColorByRule = (task, colorRule) => {\n //Исходя из типа определяем наименование и возвращаем цвет заливки\n switch (colorRule.STYPE) {\n case \"number\":\n return (!colorRule.fromValue || Number(task.docProps[`N${colorRule.SFIELD}`]) >= Number(colorRule.fromValue)) && (!colorRule.toValue || Number(task.docProps[`N${colorRule.SFIELD}`]) <= Number(colorRule.toValue)) ? convertHexToRGB(colorRule.SCOLOR) : null;\n default:\n return task.docProps[`S${colorRule.SFIELD}`] == colorRule.fromValue ? convertHexToRGB(colorRule.SCOLOR) : null;\n }\n};\n\n//Индикация истечения срока отработки события\nconst getTaskExpiredColor = task => {\n //Определяем текущую дату\n let sysDate = new Date();\n //Определяем дату истечения срока события\n let expireDate = task.dExpireDate ? new Date(task.dExpireDate) : null;\n //Если дата истечения срока определена\n if (expireDate) {\n //Определяем разницу между датами\n let daysDiff = ((expireDate.getTime() - sysDate.getTime()) / (1000 * 60 * 60 * 24)).toFixed(2);\n //Если разница меньше 0 - срок истечен\n if (daysDiff < 0) return TASK_COLORS.EXPIRED;\n //Если разница меньше 4 - скоро истечет\n if (daysDiff < 4) return TASK_COLORS.EXPIRES_SOON;\n }\n return null;\n};\n\n//Цвет из hsl формата в rgba формат\nconst convertHslToRgba = (h, s, l) => {\n s /= 100;\n l /= 100;\n const k = n => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return `rgba(${Math.floor(255 * f(0))},${Math.floor(255 * f(8))},${Math.floor(255 * f(4))},0.3)`;\n};\n\n//Формирование случайного цвета\nconst getRandomColor = index => {\n const hue = index * 137.508;\n return convertHslToRgba(hue, 50, 70);\n};\n\n//Формат дополнительного свойства типа число (длина, точность)\nconst formatRegExpNum = (width, precision) => new RegExp(\"^(\\\\d{1,\" + (width - precision) + \"}\" + (precision > 0 ? \"((\\\\.|,)\\\\d{1,\" + precision + \"})?\" : \"\") + \")?$\");\n\n//Формат дополнительного свойства типа строка (длина)\nconst formatRegExpStr = length => new RegExp(\"^.{0,\" + length + \"}$\");\n\n//Проверка валидности числа\nconst isValidNum = (width, precision, value) => {\n return formatRegExpNum(width, precision).test(value);\n};\n\n//Проверка валидности строки\nconst isValidStr = (length, value) => {\n return formatRegExpStr(length).test(value);\n};\n\n//Признак ошибки валидации\nconst validationError = (value = \"\", format, numWidth, numPrecision, strLength) => {\n //Исходим от формата\n switch (format) {\n //Проверка строки\n case 0:\n return isValidStr(strLength, value);\n //Проверка числа\n case 1:\n return isValidNum(numWidth, numPrecision, value);\n //Остальное не проверяем\n default:\n return true;\n }\n};\n\n//Конвертация времени в привычный формат\nconst formatSqlDate = timeStamp => {\n //Если есть разделитель\n if (timeStamp.indexOf(\".\") !== -1) {\n //Определяем секунды\n let seconds = 24 * 60 * 60 * timeStamp;\n //Определяем часы\n const hours = Math.trunc(seconds / (60 * 60));\n //Переопределяем секунды\n seconds = seconds % (60 * 60);\n //Определяем минуты\n const minutes = Math.trunc(seconds / 60);\n //Определяем остаток секунд\n seconds = Math.round(seconds % 60);\n //Форматируем\n const formattedTime = (\"0\" + hours).slice(-2) + \":\" + (\"0\" + minutes).slice(-2) + \":\" + (\"0\" + seconds).slice(-2);\n //Возвращаем результат\n return formattedTime;\n }\n return timeStamp;\n};\n\n//Считывание значений из локального хранилища\nconst getLocalStorageValue = (sName, defaultValue = null) => localStorage.getItem(sName) || defaultValue;\n\n//Форматирование фильтра в массив для отбора\nconst convertFilterValuesToArray = filterValues => {\n //Инициализируем значение \"с\" состояния (\"Все\", \"Не аннулированные\" - 0, \"Аннулированые\" - 1)\n let nClosedFrom = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[1]].includes(filterValues.sState) ? 0 : 1 : 0;\n //Инициализируем значение \"по\" состояния (\"Все\", \"Аннулированные\" - 1, \"Не аннулированные\" - 0)\n let nClosedTo = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[2]].includes(filterValues.sState) ? 1 : 0 : 0;\n //Формируем массив значений фильтра\n let filterValuesArray = [{\n name: \"NCLOSED\",\n from: nClosedFrom,\n to: nClosedTo\n }, {\n name: \"SEVTYPE_CODE\",\n from: filterValues.sType,\n to: null\n }, {\n name: \"NCRN\",\n from: filterValues.sCrnRnList,\n to: null\n }, {\n name: \"SSEND_PERSON\",\n from: filterValues.sSendPerson,\n to: null\n }, {\n name: \"SSEND_DIVISION\",\n from: filterValues.sSendDivision,\n to: null\n }, {\n name: \"SSEND_USRGRP\",\n from: filterValues.sSendUsrGrp,\n to: null\n }, {\n name: \"NLINKED_RN\",\n from: filterValues.sDocLink,\n to: null\n }];\n return filterValuesArray;\n};\n\n//Формирование массива действий карточки события\nconst makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen) => {\n //Формируем список действий карточки\n return [{\n method: \"EDIT\",\n name: \"Исправить\",\n icon: \"edit\",\n visible: false,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onEdit\n }, {\n method: \"EDIT_CLIENT\",\n name: \"Исправить в разделе\",\n icon: \"edit_note\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onEditClient\n }, {\n method: \"DELETE\",\n name: \"Удалить\",\n icon: \"delete\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: false,\n func: onDelete\n }, {\n method: \"TASK_STATE_CHANGE\",\n name: \"Перейти\",\n icon: \"turn_right\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n func: onStateChange\n }, {\n method: \"TASK_RETURN\",\n name: \"Выполнить возврат\",\n icon: \"turn_left\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n func: onReturn\n }, {\n method: \"TASK_SEND\",\n name: \"Направить\",\n icon: \"send\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: true,\n func: onSend\n }, {\n method: \"NOTES\",\n name: \"Примечания\",\n icon: \"event_note\",\n visible: true,\n delimiter: true,\n tasksReload: false,\n needAccountsReload: false,\n func: onNotesOpen\n }, {\n method: \"FILE_LINKS\",\n name: \"Присоединенные документы\",\n icon: \"attach_file\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onFileLinksOpen\n }];\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/layouts.js?"); /***/ }), @@ -697,7 +697,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskDialog: () => (/* binding */ TaskDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hooks/task_dialog_hooks */ \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\");\n/* harmony import */ var _components_task_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles */ \"./app/panels/clnt_task_board/styles.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Компонент панели: Диалог формы события\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Хук для события\n //Форма события\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n //Общие стили\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_CONTENT: {\n paddingBottom: \"0px\",\n maxHeight: \"740px\",\n minHeight: \"740px\",\n ..._styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог формы события\nconst TaskDialog = ({\n taskRn,\n taskType,\n taskStatus,\n editable,\n onTasksReload,\n onClose\n}) => {\n //Собственное состояние\n const [task, setTask] = (0,_hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__.useClientEvent)(taskRn, taskType, taskStatus);\n\n //Состояние заполненности всех обязательных свойств\n const [dpReady, setDPReady] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //При изменении заполненности всех обязательных свойств\n const handleDPReady = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(v => setDPReady(v), []);\n\n //При изменении информации о задаче\n const handleTaskChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newTaskValues => {\n setTask(pv => ({\n ...pv,\n ...newTaskValues\n }));\n }, [setTask]);\n\n //При добавлении события\n const handleInsertTask = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INSERT\",\n args: {\n SCRN: task.sCrn,\n SPREF: task.sPrefix,\n SNUMB: task.sNumber,\n STYPE: task.sType,\n SSTATUS: task.sStatus,\n SPLAN_DATE: task.dPlanDate,\n SINIT_PERSON: task.sInitClnperson,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n SREASON: task.sInitReason,\n CPROPS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps)\n // eslint-disable-next-line no-unused-vars\n .filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При исправлении события\n const handleUpdateEvent = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_UPDATE\",\n args: {\n NCLNEVENTS: task.nRn,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n CPROPS: {\n // eslint-disable-next-line no-unused-vars\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps).filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При считывании следующего номера события\n const handleEventNextNumbGet = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Считываем данные\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_NEXTNUMB_GET\",\n args: {\n SPREFIX: task.sPrefix\n }\n });\n //Если данные есть\n if (data) {\n //Устанавливаем номер\n setTask(pv => ({\n ...pv,\n sNumber: data.SEVENT_NUMB\n }));\n }\n }, [executeStored, setTask, task.sPrefix]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.DIALOG_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_task_form__WEBPACK_IMPORTED_MODULE_2__.TaskForm, {\n task: task,\n taskType: taskType,\n onTaskChange: handleTaskChange,\n editable: !taskRn || editable ? true : false,\n onEventNextNumbGet: handleEventNextNumbGet,\n onDPReady: handleDPReady\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.DIALOG_ACTIONS\n }, taskRn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleUpdateEvent(onClose).then(onTasksReload),\n disabled: task.updateDisabled || !editable || !dpReady\n }, \"\\u0418\\u0441\\u043F\\u0440\\u0430\\u0432\\u0438\\u0442\\u044C\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleInsertTask(onClose).then(onTasksReload),\n disabled: task.insertDisabled || !dpReady\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог формы события\nTaskDialog.propTypes = {\n taskRn: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n taskType: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired,\n taskStatus: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string),\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().bool),\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/task_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskDialog: () => (/* binding */ TaskDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hooks/task_dialog_hooks */ \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\");\n/* harmony import */ var _components_task_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles */ \"./app/panels/clnt_task_board/styles.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Компонент панели: Диалог формы события\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Хук для события\n //Форма события\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n //Общие стили\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_CONTENT: {\n paddingBottom: \"0px\",\n maxHeight: \"740px\",\n minHeight: \"740px\",\n ..._styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог формы события\nconst TaskDialog = ({\n taskRn,\n taskType,\n editable,\n onTasksReload,\n onClose\n}) => {\n //Собственное состояние\n const [task, setTask] = (0,_hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__.useClientEvent)(taskRn, taskType);\n\n //Состояние заполненности всех обязательных свойств\n const [dpReady, setDPReady] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //При изменении заполненности всех обязательных свойств\n const handleDPReady = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(v => setDPReady(v), []);\n\n //При изменении информации о задаче\n const handleTaskChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newTaskValues => {\n setTask(pv => ({\n ...pv,\n ...newTaskValues\n }));\n }, [setTask]);\n\n //При добавлении события\n const handleInsertTask = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INSERT\",\n args: {\n SCRN: task.sCrn,\n SPREF: task.sPrefix,\n SNUMB: task.sNumber,\n STYPE: task.sType,\n SSTATUS: task.sStatus,\n SPLAN_DATE: task.dPlanDate,\n SINIT_PERSON: task.sInitClnperson,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n SREASON: task.sInitReason,\n CPROPS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps)\n // eslint-disable-next-line no-unused-vars\n .filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При исправлении события\n const handleUpdateEvent = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_UPDATE\",\n args: {\n NCLNEVENTS: task.nRn,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n CPROPS: {\n // eslint-disable-next-line no-unused-vars\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps).filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При считывании следующего номера события\n const handleEventNextNumbGet = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Считываем данные\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_NEXTNUMB_GET\",\n args: {\n SPREFIX: task.sPrefix\n }\n });\n //Если данные есть\n if (data) {\n //Устанавливаем номер\n setTask(pv => ({\n ...pv,\n sNumber: data.SEVENT_NUMB\n }));\n }\n }, [executeStored, setTask, task.sPrefix]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.DIALOG_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_task_form__WEBPACK_IMPORTED_MODULE_2__.TaskForm, {\n task: task,\n taskType: taskType,\n onTaskChange: handleTaskChange,\n editable: !taskRn || editable ? true : false,\n onEventNextNumbGet: handleEventNextNumbGet,\n onDPReady: handleDPReady\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.DIALOG_ACTIONS\n }, taskRn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleUpdateEvent(onClose).then(onTasksReload),\n disabled: task.updateDisabled || !editable || !dpReady\n }, \"\\u0418\\u0441\\u043F\\u0440\\u0430\\u0432\\u0438\\u0442\\u044C\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleInsertTask(onClose).then(onTasksReload),\n disabled: task.insertDisabled || !dpReady\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог формы события\nTaskDialog.propTypes = {\n taskRn: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n taskType: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().bool),\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/task_dialog.js?"); /***/ }), @@ -3820,18 +3820,29 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Inspector: () => (/* binding */ Inspector)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _entity_entity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entity/entity */ \"./app/panels/query_editor/components/entity/entity.js\");\n/* harmony import */ var _relation_relation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../relation/relation */ \"./app/panels/query_editor/components/relation/relation.js\");\n/* harmony import */ var _argument_argument__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../argument/argument */ \"./app/panels/query_editor/components/argument/argument.js\");\n/* harmony import */ var _inspector_query_args_inspector_query_args__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../inspector_query_args/inspector_query_args */ \"./app/panels/query_editor/components/inspector_query_args/inspector_query_args.js\");\n/* harmony import */ var _inspector_query_cond_inspector_query_cond__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../inspector_query_cond/inspector_query_cond */ \"./app/panels/query_editor/components/inspector_query_cond/inspector_query_cond.js\");\n/* harmony import */ var _inspector_query_ents_inspector_query_ents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../inspector_query_ents/inspector_query_ents */ \"./app/panels/query_editor/components/inspector_query_ents/inspector_query_ents.js\");\n/* harmony import */ var _inspector_query_rls_inspector_query_rls__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../inspector_query_rls/inspector_query_rls */ \"./app/panels/query_editor/components/inspector_query_rls/inspector_query_rls.js\");\n/* harmony import */ var _query_area__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./query_area */ \"./app/panels/query_editor/components/inspector/query_area.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Инспектор свойств\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер параметров редактора\n //Подзаголовок группы параметров редактора\n //Описание сущности\n //Описание связи\n //Описание аргумента запроса\n //Управление аргументами запроса\n //Управление условиями отбора запроса\n //Управление сущностями запроса\n //Управление связями запроса\n //Область запроса\n\n//-----------\n//Тело модуля\n//-----------\n\n//Инспектор свойств\nconst Inspector = ({\n query,\n entity,\n relation,\n entities = [],\n args = [],\n cond = null,\n qry = \"\",\n qryMsg = \"\",\n onOptionsChanged = null\n}) => {\n //При изменении настроек запроса\n const handleOptionsChanged = () => onOptionsChanged && onOptionsChanged();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__.P8PEditorBox, {\n title: \"Настройки запроса\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Аргументы\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_args_inspector_query_args__WEBPACK_IMPORTED_MODULE_6__.InspectorQueryArguments, {\n query: query,\n args: args,\n onOptionsChanged: handleOptionsChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Условия отбора\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_cond_inspector_query_cond__WEBPACK_IMPORTED_MODULE_7__.InspectorQueryConditions, {\n query: query,\n cond: cond,\n entities: entities,\n args: args,\n onOptionsChanged: handleOptionsChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Сущности\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_ents_inspector_query_ents__WEBPACK_IMPORTED_MODULE_8__.InspectorQueryEntities, {\n query: query,\n entity: entity,\n onOptionsChanged: handleOptionsChanged\n }), relation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Связь\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_rls_inspector_query_rls__WEBPACK_IMPORTED_MODULE_9__.InspectorQueryRelations, {\n query: query,\n relation: relation,\n onOptionsChanged: handleOptionsChanged\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_query_area__WEBPACK_IMPORTED_MODULE_10__.QueryArea, {\n qry: qry,\n qryMsg: qryMsg\n }));\n};\n\n//Контроль свойств компонента - Инспектор свойств\nInspector.propTypes = {\n query: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number).isRequired,\n entity: _entity_entity__WEBPACK_IMPORTED_MODULE_3__.ENTITY_SHAPE,\n relation: _relation_relation__WEBPACK_IMPORTED_MODULE_4__.RELATION_SHAPE,\n entities: prop_types__WEBPACK_IMPORTED_MODULE_11___default().arrayOf(_entity_entity__WEBPACK_IMPORTED_MODULE_3__.ENTITY_SHAPE),\n args: prop_types__WEBPACK_IMPORTED_MODULE_11___default().arrayOf(_argument_argument__WEBPACK_IMPORTED_MODULE_5__.ARGUMENT_SHAPE),\n cond: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n qry: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n qryMsg: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n onOptionsChanged: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector/inspector.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Inspector: () => (/* binding */ Inspector)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _entity_entity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entity/entity */ \"./app/panels/query_editor/components/entity/entity.js\");\n/* harmony import */ var _relation_relation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../relation/relation */ \"./app/panels/query_editor/components/relation/relation.js\");\n/* harmony import */ var _argument_argument__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../argument/argument */ \"./app/panels/query_editor/components/argument/argument.js\");\n/* harmony import */ var _inspector_query_args_inspector_query_args__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../inspector_query_args/inspector_query_args */ \"./app/panels/query_editor/components/inspector_query_args/inspector_query_args.js\");\n/* harmony import */ var _inspector_query_cond_inspector_query_cond__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../inspector_query_cond/inspector_query_cond */ \"./app/panels/query_editor/components/inspector_query_cond/inspector_query_cond.js\");\n/* harmony import */ var _inspector_query_ents_inspector_query_ents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../inspector_query_ents/inspector_query_ents */ \"./app/panels/query_editor/components/inspector_query_ents/inspector_query_ents.js\");\n/* harmony import */ var _inspector_query_rls_inspector_query_rls__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../inspector_query_rls/inspector_query_rls */ \"./app/panels/query_editor/components/inspector_query_rls/inspector_query_rls.js\");\n/* harmony import */ var _inspector_query_area_inspector_query_area__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../inspector_query_area/inspector_query_area */ \"./app/panels/query_editor/components/inspector_query_area/inspector_query_area.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Инспектор свойств\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер параметров редактора\n //Подзаголовок группы параметров редактора\n //Описание сущности\n //Описание связи\n //Описание аргумента запроса\n //Управление аргументами запроса\n //Управление условиями отбора запроса\n //Управление сущностями запроса\n //Управление связями запроса\n //Область SQL-выражения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Инспектор свойств\nconst Inspector = ({\n query,\n entity,\n relation,\n entities = [],\n args = [],\n cond = null,\n substArgsVals = 0,\n qry = \"\",\n qryBnd = \"\",\n qryMsg = \"\",\n onOptionsChanged = null\n}) => {\n //При изменении настроек запроса\n const handleOptionsChanged = () => onOptionsChanged && onOptionsChanged();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__.P8PEditorBox, {\n title: \"Настройки запроса\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Аргументы\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_args_inspector_query_args__WEBPACK_IMPORTED_MODULE_6__.InspectorQueryArguments, {\n query: query,\n args: args,\n onOptionsChanged: handleOptionsChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Условия отбора\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_cond_inspector_query_cond__WEBPACK_IMPORTED_MODULE_7__.InspectorQueryConditions, {\n query: query,\n cond: cond,\n entities: entities,\n args: args,\n onOptionsChanged: handleOptionsChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Сущности\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_ents_inspector_query_ents__WEBPACK_IMPORTED_MODULE_8__.InspectorQueryEntities, {\n query: query,\n entity: entity,\n onOptionsChanged: handleOptionsChanged\n }), relation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Связь\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_rls_inspector_query_rls__WEBPACK_IMPORTED_MODULE_9__.InspectorQueryRelations, {\n query: query,\n relation: relation,\n onOptionsChanged: handleOptionsChanged\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inspector_query_area_inspector_query_area__WEBPACK_IMPORTED_MODULE_10__.InspectorQueryArea, {\n query: query,\n substArgsVals: substArgsVals,\n qry: qry,\n qryBnd: qryBnd,\n qryMsg: qryMsg\n }));\n};\n\n//Контроль свойств компонента - Инспектор свойств\nInspector.propTypes = {\n query: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number).isRequired,\n entity: _entity_entity__WEBPACK_IMPORTED_MODULE_3__.ENTITY_SHAPE,\n relation: _relation_relation__WEBPACK_IMPORTED_MODULE_4__.RELATION_SHAPE,\n entities: prop_types__WEBPACK_IMPORTED_MODULE_11___default().arrayOf(_entity_entity__WEBPACK_IMPORTED_MODULE_3__.ENTITY_SHAPE),\n args: prop_types__WEBPACK_IMPORTED_MODULE_11___default().arrayOf(_argument_argument__WEBPACK_IMPORTED_MODULE_5__.ARGUMENT_SHAPE),\n cond: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n substArgsVals: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number),\n qry: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n qryBnd: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n qryMsg: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n onOptionsChanged: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector/inspector.js?"); /***/ }), -/***/ "./app/panels/query_editor/components/inspector/query_area.js": -/*!********************************************************************!*\ - !*** ./app/panels/query_editor/components/inspector/query_area.js ***! - \********************************************************************/ +/***/ "./app/panels/query_editor/components/inspector_query_area/hooks.js": +/*!**************************************************************************!*\ + !*** ./app/panels/query_editor/components/inspector_query_area/hooks.js ***! + \**************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryArea: () => (/* binding */ QueryArea)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Snackbar/Snackbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Alert/Alert.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.styles */ \"./app.styles.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Область запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Компоненты MUI\n //Общие текстовые ресурсы приложения\n //Общие стили приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n SQL_FAB: {\n position: \"absolute\",\n bottom: 16,\n right: 16\n },\n SQL_TEXT_FIELD: {\n fontSize: \"0.9rem\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_2__.APP_STYLES.SCROLL\n },\n SNACKBAR_ALERT: {\n width: \"100%\"\n }\n};\n\n//Начальное состояние всплывающего сообщения\nconst SNACK_BAR_MESSAGE_INIT = {\n text: null,\n type: null\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Область запроса\nconst QueryArea = ({\n qry = \"\",\n qryMsg = \"\"\n}) => {\n //Собственное состояние - текст всплывающего сообщения\n const [snackBarMessage, setSnackBarMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(SNACK_BAR_MESSAGE_INIT);\n\n //Собственное состояние - отображение области SQL запроса\n const [displaySQL, setDisplaySQL] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - развёрнутость\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //При нажатии на кнопку копирования текста запроса\n const handleCopyClick = async () => {\n try {\n await navigator.clipboard.writeText(qry);\n setSnackBarMessage({\n text: `Текст запроса скопирован в буфер обмена`\n });\n } catch (e) {\n setSnackBarMessage({\n text: `Ошибка копирования текста запроса в буфер обмена: ${e.message}`,\n type: \"error\"\n });\n }\n };\n\n //При нажатии на кнопку развёртывания\n const handleExpandClick = () => setExpanded(!expanded);\n\n //При нажатии на кнопку отображения SQL запроса\n const handleShowSQLClick = () => setDisplaySQL(true);\n\n //При нажатии на кнопку сокрытия SQL запроса\n const handleCloseSQLClick = () => setDisplaySQL(false);\n\n //При закрытии всплывающего сообщения\n const handleSnackBarClose = () => setSnackBarMessage(SNACK_BAR_MESSAGE_INIT);\n\n //Расчет размеров тектовых полей\n const [qryRows, qryMsgRows] = expanded ? [15, 6] : [5, 3];\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (qry || qryMsg) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n color: qryMsg ? \"warning\" : \"default\",\n sx: STYLES.SQL_FAB,\n title: \"Показать текст SQL запроса\",\n onClick: handleShowSQLClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"join_left\")), displaySQL && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n open: true,\n onClose: handleCloseSQLClick,\n anchor: \"bottom\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\",\n justifyContent: \"right\",\n spacing: 2\n }, qry && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: handleCopyClick,\n title: \"Скопировать текст запроса\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"content_copy\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: handleExpandClick,\n title: expanded ? \"Свернуть\" : \"Развернуть\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, expanded ? \"expand_more\" : \"expand_less\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: handleCloseSQLClick,\n title: _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.HIDE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"close\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"column\",\n spacing: 2\n }, qry && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n label: \"Текст запроса\",\n multiline: true,\n fullWidth: true,\n value: qry,\n minRows: qryRows,\n maxRows: qryRows,\n variant: \"standard\",\n focused: true,\n inputProps: {\n sx: STYLES.SQL_TEXT_FIELD,\n disabled: true\n }\n }), qryMsg && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n label: \"Предупреждения\",\n color: \"warning\",\n multiline: true,\n fullWidth: true,\n value: qryMsg,\n minRows: qryMsgRows,\n maxRows: qryMsgRows,\n variant: \"standard\",\n focused: true,\n inputProps: {\n sx: STYLES.SQL_TEXT_FIELD,\n disabled: true\n }\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: Boolean(snackBarMessage.text),\n autoHideDuration: 3000,\n onClose: handleSnackBarClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n severity: snackBarMessage.type || \"success\",\n sx: STYLES.SNACKBAR_ALERT,\n onClose: handleSnackBarClose\n }, snackBarMessage.text)));\n};\n\n//Контроль свойств компонента - Область запроса\nQueryArea.propTypes = {\n qry: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string),\n qryMsg: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector/query_area.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useQuerySQLExpr: () => (/* binding */ useQuerySQLExpr)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../context/backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Пользовательские хуки для работы с областью SQL-выражения\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n//-----------\n//Тело модуля\n//-----------\n\n//Работа с областью SQL-выражения\nconst useQuerySQLExpr = query => {\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Установка флага сокрытия/отображения значений аргументов в SQL-выражении запроса\n const toggleSubstArgsVals = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_OPT_SUBST_ARGS_VALS_TGL\",\n args: {\n NRN: query\n },\n loader: false\n });\n }, [query, executeStored]);\n\n //Возвращаем интерфейс хука\n return {\n toggleSubstArgsVals\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector_query_area/hooks.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/inspector_query_area/inspector_query_area.js": +/*!*****************************************************************************************!*\ + !*** ./app/panels/query_editor/components/inspector_query_area/inspector_query_area.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InspectorQueryArea: () => (/* binding */ InspectorQueryArea)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Snackbar/Snackbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Alert/Alert.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/query_editor/components/inspector_query_area/hooks.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Область SQL-выражения\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Компоненты MUI\n //Общие текстовые ресурсы приложения\n //Общие стили приложения\n //Пользовательские хуки для работы с SQL-выражением\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n SQL_FAB: {\n position: \"absolute\",\n bottom: 16,\n right: 16\n },\n SQL_TEXT_FIELD: {\n fontSize: \"0.9rem\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_2__.APP_STYLES.SCROLL\n },\n SNACKBAR_ALERT: {\n width: \"100%\"\n }\n};\n\n//Начальное состояние всплывающего сообщения\nconst SNACK_BAR_MESSAGE_INIT = {\n text: null,\n type: null\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Область SQL-выражения\nconst InspectorQueryArea = ({\n query,\n substArgsVals = 0,\n qry = \"\",\n qryBnd = \"\",\n qryMsg = \"\"\n}) => {\n //Собственное состояние - отображение запроса с подстановками\n const [showQryBnd, setShowQryBnd] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(substArgsVals);\n\n //Собственное состояние - текст всплывающего сообщения\n const [snackBarMessage, setSnackBarMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(SNACK_BAR_MESSAGE_INIT);\n\n //Собственное состояние - отображение области SQL запроса\n const [displaySQL, setDisplaySQL] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - развёрнутость\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Работа с SQL-выражением\n const {\n toggleSubstArgsVals\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useQuerySQLExpr)(query);\n\n //При нажатии на кнопку отображения/сокрытия значений аргументов в SQL-выражении запроса\n const handleToggleSubstArgsValsClick = async () => {\n await toggleSubstArgsVals();\n setShowQryBnd(showQryBnd === 1 ? 0 : 1);\n };\n\n //При нажатии на кнопку копирования текста запроса\n const handleCopyClick = async () => {\n try {\n await navigator.clipboard.writeText(qry);\n setSnackBarMessage({\n text: `Текст запроса скопирован в буфер обмена`\n });\n } catch (e) {\n setSnackBarMessage({\n text: `Ошибка копирования текста запроса в буфер обмена: ${e.message}`,\n type: \"error\"\n });\n }\n };\n\n //При нажатии на кнопку развёртывания\n const handleExpandClick = () => setExpanded(!expanded);\n\n //При нажатии на кнопку отображения SQL запроса\n const handleShowSQLClick = () => setDisplaySQL(true);\n\n //При нажатии на кнопку сокрытия SQL запроса\n const handleCloseSQLClick = () => setDisplaySQL(false);\n\n //При закрытии всплывающего сообщения\n const handleSnackBarClose = () => setSnackBarMessage(SNACK_BAR_MESSAGE_INIT);\n\n //Расчет размеров тектовых полей\n const [qryRows, qryMsgRows] = expanded ? [15, 6] : [5, 3];\n\n //Расчет параметров отображения запроса\n const [dispQry, qryViewTitle, qryViewIcon] = showQryBnd === 0 ? [qry, \"Отобразить значения аргументов\", \"code\"] : [qryBnd, \"Скрыть значения аргументов\", \"code_off\"];\n\n //При изменении состояние отображения подстановок в запросе\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setShowQryBnd(substArgsVals), [substArgsVals]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (qry || qryMsg) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n color: qryMsg ? \"warning\" : \"default\",\n sx: STYLES.SQL_FAB,\n title: \"Показать текст SQL запроса\",\n onClick: handleShowSQLClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"join_left\")), displaySQL && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: handleCloseSQLClick,\n anchor: \"bottom\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n justifyContent: \"right\",\n spacing: 2\n }, qry && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: handleToggleSubstArgsValsClick,\n title: qryViewTitle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, qryViewIcon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: handleCopyClick,\n title: \"Скопировать текст запроса\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"content_copy\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: handleExpandClick,\n title: expanded ? \"Свернуть\" : \"Развернуть\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded ? \"expand_more\" : \"expand_less\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: handleCloseSQLClick,\n title: _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.HIDE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"close\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"column\",\n spacing: 2\n }, dispQry && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n label: \"Текст запроса\",\n multiline: true,\n fullWidth: true,\n value: dispQry,\n minRows: qryRows,\n maxRows: qryRows,\n variant: \"standard\",\n focused: true,\n inputProps: {\n sx: STYLES.SQL_TEXT_FIELD,\n disabled: true\n }\n }), qryMsg && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n label: \"Предупреждения\",\n color: \"warning\",\n multiline: true,\n fullWidth: true,\n value: qryMsg,\n minRows: qryMsgRows,\n maxRows: qryMsgRows,\n variant: \"standard\",\n focused: true,\n inputProps: {\n sx: STYLES.SQL_TEXT_FIELD,\n disabled: true\n }\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n open: Boolean(snackBarMessage.text),\n autoHideDuration: 3000,\n onClose: handleSnackBarClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n severity: snackBarMessage.type || \"success\",\n sx: STYLES.SNACKBAR_ALERT,\n onClose: handleSnackBarClose\n }, snackBarMessage.text)));\n};\n\n//Контроль свойств компонента - Область SQL-выражения\nInspectorQueryArea.propTypes = {\n query: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n substArgsVals: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number),\n qry: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string),\n qryBnd: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string),\n qryMsg: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector_query_area/inspector_query_area.js?"); /***/ }), @@ -3842,7 +3853,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ArgIUDialog: () => (/* binding */ ArgIUDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common */ \"./app/panels/query_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Диалог добавления/исправления аргумента запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n //Общие текстовые ресурсы приложения\n //Общие константы редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления аргумента запроса\nconst ArgIUDialog = ({\n name = \"\",\n title = \"\",\n dataType = _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.NUMB,\n mandatory = 0,\n value = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - текущее состояние аргумента\n const [current, setCurrent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n value,\n dataType\n });\n\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //При изменении значений в поле ввода\n const handleInputChange = (name, value) => {\n //Если поменяли тип данных - надо пересмотреть поля для ввода\n if (name === \"dataType\") {\n //Сохраним в состоянии новый тип данных и сбросим \"отладочное значение\", ведь оно зависит от типа данных (от этого состояния зависит свойство inputs, передаваемое в P8PDialog ниже)\n setCurrent({\n dataType: value,\n value: \"\"\n });\n //Мы сами пересчитали форму, туда придут новые настройки элементов ввода через свойство inputs, не надо делать пересчет состояния внутри диалога\n return true;\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `${insert === true ? _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.INSERT : _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.UPDATE} аргумента`,\n inputs: [{\n name: \"name\",\n value: name,\n label: \"Имя\",\n disabled: insert != true\n }, {\n name: \"title\",\n value: title,\n label: \"Приглашение\"\n }, {\n name: \"dataType\",\n value: current.dataType,\n label: \"Тип данных\",\n list: [{\n name: \"Строка\",\n value: _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.STR\n }, {\n name: \"Число\",\n value: _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.NUMB\n }, {\n name: \"Дата\",\n value: _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.DATE\n }]\n }, {\n name: \"mandatory\",\n value: mandatory,\n label: \"Обязательный\",\n list: [{\n name: \"Нет\",\n value: 0\n }, {\n name: \"Да\",\n value: 1\n }]\n }, {\n name: \"value\",\n value: current.value,\n label: \"Значение (для отладки)\",\n type: current.dataType === _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.NUMB ? \"number\" : current.dataType === _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.DATE ? \"date\" : \"text\"\n }],\n onOk: handleOk,\n onCancel: handleCancel,\n onInputChange: handleInputChange\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления аргумента запроса\nArgIUDialog.propTypes = {\n name: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().number),\n mandatory: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().number),\n value: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector_query_args/arg_iu_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ArgIUDialog: () => (/* binding */ ArgIUDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common */ \"./app/panels/query_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Диалог добавления/исправления аргумента запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n //Общие текстовые ресурсы приложения\n //Общие константы редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления аргумента запроса\nconst ArgIUDialog = ({\n name = \"\",\n title = \"\",\n dataType = _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.NUMB,\n mandatory = 0,\n value = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - текущие значения полей аргумента запроса\n const [current, setCurrent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n name,\n title,\n dataType,\n mandatory,\n value\n });\n\n //Нажатие на кнопку \"Ok\"\n const handleOk = () => onOk && onOk(current);\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //При изменении значений в поле ввода\n const handleInputChange = (name, value) => {\n //Сохраним в состоянии новое значение, если сменили тип данных - сбросим \"отладочное значение\"\n setCurrent(pv => ({\n ...pv,\n [name]: value,\n ...(name === \"dataType\" ? {\n value: \"\"\n } : {})\n }));\n //Мы сами пересчитали форму, туда придут новые настройки элементов ввода через свойство inputs, не надо делать пересчет состояния внутри диалога\n return true;\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `${insert === true ? _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.INSERT : _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.UPDATE} аргумента`,\n inputs: [{\n name: \"name\",\n value: current.name,\n label: \"Имя\",\n disabled: insert != true\n }, {\n name: \"title\",\n value: current.title,\n label: \"Приглашение\"\n }, {\n name: \"dataType\",\n value: current.dataType,\n label: \"Тип данных\",\n list: [{\n name: \"Строка\",\n value: _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.STR\n }, {\n name: \"Число\",\n value: _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.NUMB\n }, {\n name: \"Дата\",\n value: _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.DATE\n }]\n }, {\n name: \"mandatory\",\n value: current.mandatory,\n label: \"Обязательный\",\n list: [{\n name: \"Нет\",\n value: 0\n }, {\n name: \"Да\",\n value: 1\n }]\n }, {\n name: \"value\",\n value: current.value,\n label: \"Значение (для отладки)\",\n type: current.dataType === _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.NUMB ? \"number\" : current.dataType === _common__WEBPACK_IMPORTED_MODULE_3__.DATA_TYPE.DATE ? \"date\" : \"text\"\n }],\n onOk: handleOk,\n onCancel: handleCancel,\n onInputChange: handleInputChange\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления аргумента запроса\nArgIUDialog.propTypes = {\n name: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().number),\n mandatory: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().number),\n value: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector_query_args/arg_iu_dialog.js?"); /***/ }), @@ -3941,7 +3952,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryCondDialog: () => (/* binding */ QueryCondDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common */ \"./app/panels/query_editor/common.js\");\n/* harmony import */ var _entity_entity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entity/entity */ \"./app/panels/query_editor/components/entity/entity.js\");\n/* harmony import */ var _argument_argument__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../argument/argument */ \"./app/panels/query_editor/components/argument/argument.js\");\n/* harmony import */ var _cond_operation_buttons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cond_operation_buttons */ \"./app/panels/query_editor/components/inspector_query_cond/cond_operation_buttons.js\");\n/* harmony import */ var _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cond_component_select_button */ \"./app/panels/query_editor/components/inspector_query_cond/cond_component_select_button.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Диалог настройки условий отбора запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n //Типовой диалог\n //Общие ресурсы и константы редактора запросов\n //Описание сущности\n //Описание аргумента запроса\n //Кнопки операций условия отбора\n //Кнопка выбора компонента условия\n\n//---------\n//Константы\n//---------\n\n//Иконки\nconst ICONS = {\n ..._common__WEBPACK_IMPORTED_MODULE_2__.DATA_TYPE_ICON,\n DEFAULT: \"category\"\n};\n\n//Стили\nconst STYLE = {\n BUTTONS_STACK: {\n width: \"550px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог настройки условий отбора запроса\nconst QueryCondDialog = ({\n cond,\n entities,\n args,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - условия отбора\n const [conditions, setConditions] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(cond || \"\");\n\n //Ссылка на элемент ввода условия\n const coditionInputRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Перемещение курсора в конец поля ввода условия\n const moveCondCursorToEnd = () => {\n if (coditionInputRef.current) {\n const length = coditionInputRef.current.value.length;\n coditionInputRef.current.setSelectionRange(length, length);\n coditionInputRef.current.focus();\n }\n };\n\n //Нажатие на кнопку \"ОК\"\n const handleOk = () => onOk && onOk(conditions);\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //При изменении условия через компонент\n const handleChange = e => setConditions(e.target.value);\n\n //При выборе компонента условия\n const handleComponentSelected = value => {\n setConditions(pv => pv + value);\n moveCondCursorToEnd();\n };\n\n //При нажатии на кнопку операции\n const handleOperationButtonClick = value => {\n setConditions(pv => pv + value);\n moveCondCursorToEnd();\n };\n\n //При нажатии на кнопку очистки условий\n const handleClearClick = () => setConditions(\"\");\n\n //При подмонтировании компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Перевод курсора в конец обёрнут в setTimeout по тому, что Input подмонтируется позднее диалога (он внутри children)\n setTimeout(moveCondCursorToEnd, 100);\n }, []);\n\n //Доступные атрибуты сущностей запроса\n const entsAttributes = entities && entities?.length > 0 ? entities.reduce((components, e) => [...components, {\n type: _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.DIVIDER,\n title: e.title\n }, ...e.attrs.map(a => ({\n type: _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.ITEM,\n title: a.title,\n name: a.name,\n value: a.id,\n icon: ICONS[a.dataType] || ICONS.DEFAULT\n }))], []) : [];\n const entsAttributesExists = entsAttributes.find(a => a.type === _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.ITEM) ? true : false;\n\n //Доступные аргументы запроса\n const queryArguments = args && args?.length > 0 ? args.reduce((components, a) => [...components, {\n type: _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.ITEM,\n title: a.title,\n name: a.name,\n value: `:${a.name}`,\n icon: ICONS[a.dataType] || ICONS.DEFAULT\n }], []) : [];\n const queryArgumentsExists = queryArguments.length > 0 ? true : false;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `Условия отбора запроса`,\n onOk: handleOk,\n onCancel: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLE.BUTTONS_STACK,\n direction: \"row\",\n spacing: 1,\n pb: 1\n }, entsAttributesExists && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.CondComponentSelectButton, {\n caption: \"Атрибут сущности\",\n components: entsAttributes,\n onSelect: handleComponentSelected\n }), queryArgumentsExists && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.CondComponentSelectButton, {\n caption: \"Аргумент запроса\",\n components: queryArguments,\n onSelect: handleComponentSelected\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: handleClearClick\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLE.BUTTONS_STACK,\n direction: \"row\",\n spacing: 1,\n pb: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_operation_buttons__WEBPACK_IMPORTED_MODULE_5__.CondOperationButtons, {\n buttons: [{\n caption: \"=\",\n title: \"Равно\",\n value: \" = \"\n }, {\n caption: \"<>\",\n title: \"Не равно\",\n value: \" <> \"\n }, {\n caption: \">\",\n title: \"Больше\",\n value: \" > \"\n }, {\n caption: \">=\",\n title: \"Больше или равно\",\n value: \" >= \"\n }, {\n caption: \"<\",\n title: \"Меньше\",\n value: \" < \"\n }, {\n caption: \"<=\",\n title: \"Меньше или равно\",\n value: \" <= \"\n }, {\n caption: \"(\",\n title: \"Открывающая скобка\",\n value: \"(\"\n }, {\n caption: \")\",\n title: \"Закрывающая скобка\",\n value: \")\"\n }],\n onClick: handleOperationButtonClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_operation_buttons__WEBPACK_IMPORTED_MODULE_5__.CondOperationButtons, {\n buttons: [{\n caption: \"И\",\n title: \"Логическое умножение (конъюнкция)\",\n value: \" and \"\n }, {\n caption: \"ИЛИ\",\n title: \"Логическое сложение (дизъюнкция)\",\n value: \" or \"\n }, {\n caption: \"НЕ\",\n title: \"Отрицание (инверсия)\",\n value: \" not \"\n }, {\n caption: \"B\",\n title: \"Входит в диапазон\",\n value: \" in (0, 1, ...) \"\n }],\n onClick: handleOperationButtonClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n inputRef: coditionInputRef,\n focused: true,\n autoFocus: true,\n value: conditions,\n placeholder: \"Настройте условия отбора...\",\n multiline: true,\n minRows: 10,\n fullWidth: true,\n onChange: handleChange\n }));\n};\n\n//Контроль свойств - Диалог настройки условий отбора запроса\nQueryCondDialog.propTypes = {\n cond: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func),\n entities: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_entity_entity__WEBPACK_IMPORTED_MODULE_3__.ENTITY_SHAPE),\n args: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_argument_argument__WEBPACK_IMPORTED_MODULE_4__.ARGUMENT_SHAPE),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector_query_cond/query_cond_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryCondDialog: () => (/* binding */ QueryCondDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common */ \"./app/panels/query_editor/common.js\");\n/* harmony import */ var _entity_entity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entity/entity */ \"./app/panels/query_editor/components/entity/entity.js\");\n/* harmony import */ var _argument_argument__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../argument/argument */ \"./app/panels/query_editor/components/argument/argument.js\");\n/* harmony import */ var _cond_operation_buttons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cond_operation_buttons */ \"./app/panels/query_editor/components/inspector_query_cond/cond_operation_buttons.js\");\n/* harmony import */ var _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cond_component_select_button */ \"./app/panels/query_editor/components/inspector_query_cond/cond_component_select_button.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Диалог настройки условий отбора запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n //Типовой диалог\n //Общие ресурсы и константы редактора запросов\n //Описание сущности\n //Описание аргумента запроса\n //Кнопки операций условия отбора\n //Кнопка выбора компонента условия\n\n//---------\n//Константы\n//---------\n\n//Иконки\nconst ICONS = {\n ..._common__WEBPACK_IMPORTED_MODULE_2__.DATA_TYPE_ICON,\n DEFAULT: \"category\"\n};\n\n//Стили\nconst STYLE = {\n BUTTONS_STACK: {\n width: \"550px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог настройки условий отбора запроса\nconst QueryCondDialog = ({\n cond,\n entities,\n args,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - условия отбора\n const [conditions, setConditions] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(cond || \"\");\n\n //Ссылка на элемент ввода условия\n const coditionInputRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Перемещение курсора в конец поля ввода условия\n const moveCondCursorToEnd = () => {\n if (coditionInputRef.current) {\n const length = coditionInputRef.current.value.length;\n coditionInputRef.current.setSelectionRange(length, length);\n coditionInputRef.current.focus();\n }\n };\n\n //Добавление значения в редактор по месту курсора\n const addCondValueToCursor = value => {\n let newValue = conditions + value;\n if (coditionInputRef.current) {\n newValue = coditionInputRef.current.value;\n newValue = newValue.substring(0, coditionInputRef.current.selectionStart) + value + newValue.substring(coditionInputRef.current.selectionEnd);\n coditionInputRef.current.value = newValue;\n }\n moveCondCursorToEnd();\n setConditions(newValue);\n };\n\n //Нажатие на кнопку \"ОК\"\n const handleOk = () => onOk && onOk(conditions);\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //При изменении условия через компонент\n const handleChange = e => setConditions(e.target.value);\n\n //При выборе компонента условия\n const handleComponentSelected = value => addCondValueToCursor(value);\n\n //При нажатии на кнопку операции\n const handleOperationButtonClick = value => addCondValueToCursor(value);\n\n //При нажатии на кнопку очистки условий\n const handleClearClick = () => setConditions(\"\");\n\n //При подмонтировании компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Перевод курсора в конец обёрнут в setTimeout по тому, что Input подмонтируется позднее диалога (он внутри children)\n setTimeout(moveCondCursorToEnd, 100);\n }, []);\n\n //Доступные атрибуты сущностей запроса\n const entsAttributes = entities && entities?.length > 0 ? entities.reduce((components, e) => [...components, {\n type: _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.DIVIDER,\n title: e.title\n }, ...e.attrs.map(a => ({\n type: _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.ITEM,\n title: a.title,\n name: a.name,\n value: a.id,\n icon: ICONS[a.dataType] || ICONS.DEFAULT\n }))], []) : [];\n const entsAttributesExists = entsAttributes.find(a => a.type === _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.ITEM) ? true : false;\n\n //Доступные аргументы запроса\n const queryArguments = args && args?.length > 0 ? args.reduce((components, a) => [...components, {\n type: _cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_TYPE.ITEM,\n title: a.title,\n name: a.name,\n value: `:${a.name}`,\n icon: ICONS[a.dataType] || ICONS.DEFAULT\n }], []) : [];\n const queryArgumentsExists = queryArguments.length > 0 ? true : false;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `Условия отбора запроса`,\n onOk: handleOk,\n onCancel: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLE.BUTTONS_STACK,\n direction: \"row\",\n spacing: 1,\n pb: 1\n }, entsAttributesExists && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.CondComponentSelectButton, {\n caption: \"Атрибут сущности\",\n components: entsAttributes,\n onSelect: handleComponentSelected\n }), queryArgumentsExists && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_component_select_button__WEBPACK_IMPORTED_MODULE_6__.CondComponentSelectButton, {\n caption: \"Аргумент запроса\",\n components: queryArguments,\n onSelect: handleComponentSelected\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: handleClearClick\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLE.BUTTONS_STACK,\n direction: \"row\",\n spacing: 1,\n pb: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_operation_buttons__WEBPACK_IMPORTED_MODULE_5__.CondOperationButtons, {\n buttons: [{\n caption: \"=\",\n title: \"Равно\",\n value: \" = \"\n }, {\n caption: \"<>\",\n title: \"Не равно\",\n value: \" <> \"\n }, {\n caption: \">\",\n title: \"Больше\",\n value: \" > \"\n }, {\n caption: \">=\",\n title: \"Больше или равно\",\n value: \" >= \"\n }, {\n caption: \"<\",\n title: \"Меньше\",\n value: \" < \"\n }, {\n caption: \"<=\",\n title: \"Меньше или равно\",\n value: \" <= \"\n }, {\n caption: \"(\",\n title: \"Открывающая скобка\",\n value: \"(\"\n }, {\n caption: \")\",\n title: \"Закрывающая скобка\",\n value: \")\"\n }],\n onClick: handleOperationButtonClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cond_operation_buttons__WEBPACK_IMPORTED_MODULE_5__.CondOperationButtons, {\n buttons: [{\n caption: \"И\",\n title: \"Логическое умножение (конъюнкция)\",\n value: \" and \"\n }, {\n caption: \"ИЛИ\",\n title: \"Логическое сложение (дизъюнкция)\",\n value: \" or \"\n }, {\n caption: \"НЕ\",\n title: \"Отрицание (инверсия)\",\n value: \" not \"\n }, {\n caption: \"B\",\n title: \"Входит в диапазон\",\n value: \" in (0, 1, ...) \"\n }],\n onClick: handleOperationButtonClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n inputRef: coditionInputRef,\n focused: true,\n autoFocus: true,\n value: conditions,\n placeholder: \"Настройте условия отбора...\",\n multiline: true,\n minRows: 10,\n fullWidth: true,\n onChange: handleChange\n }));\n};\n\n//Контроль свойств - Диалог настройки условий отбора запроса\nQueryCondDialog.propTypes = {\n cond: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func),\n entities: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_entity_entity__WEBPACK_IMPORTED_MODULE_3__.ENTITY_SHAPE),\n args: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_argument_argument__WEBPACK_IMPORTED_MODULE_4__.ARGUMENT_SHAPE),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/inspector_query_cond/query_cond_dialog.js?"); /***/ }), @@ -4128,7 +4139,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useQuery: () => (/* binding */ useQuery)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common */ \"./app/panels/query_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Пользовательские хуки для работы с метаданными запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Общие ресурсы и константы редактора\n\n//---------\n//Константы\n//---------\n\n//Ширина элемента диаграммы\nconst NODE_WIDTH = 250;\n\n//Высота единицы состава группового элемента диаграммы\nconst GROUP_NODE_ITEM_HEIGHT = 50;\n\n//Стили\nconst STYLES = {\n ATTRIBUTE: isLast => ({\n borderBottom: isLast ? \"none\" : \"1px solid #dee2e6\"\n })\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Конвертация серверного описания сущностей запроса в элементы диаграммы\nconst serverEntity2QueryDiagramNodes = entity => {\n //Ссылка на атрибуты\n const attrs = entity.attrs || [];\n //Количество атрибутов\n const attrsCount = attrs.length;\n //Высота группового элемента диаграммы\n const entityNodeHeight = GROUP_NODE_ITEM_HEIGHT + attrsCount * GROUP_NODE_ITEM_HEIGHT;\n //Элемент диаграммы для сущности (групповой элемент)\n const entityNode = {\n id: entity.id,\n type: _common__WEBPACK_IMPORTED_MODULE_2__.NODE_TYPE.ENTITY,\n data: {\n ...entity\n },\n position: {\n x: entity.x,\n y: entity.y\n },\n style: {\n width: NODE_WIDTH,\n height: entityNodeHeight\n },\n draggable: true\n };\n //Элементы диаграммы для атрибутов сущности (состав группового элемента)\n const attrsNodes = attrs.map((attr, index, attrs) => ({\n id: attr.id,\n type: _common__WEBPACK_IMPORTED_MODULE_2__.NODE_TYPE.ATTRIBUTE,\n data: {\n ...attr\n },\n position: {\n x: 1,\n y: GROUP_NODE_ITEM_HEIGHT * (index + 1)\n },\n parentId: entity.id,\n extent: \"parent\",\n style: {\n width: NODE_WIDTH - 2,\n height: GROUP_NODE_ITEM_HEIGHT,\n ...STYLES.ATTRIBUTE(index === attrs.length - 1)\n },\n draggable: false,\n selectable: true\n }));\n //Возвращаем элемент для сущности (групповой) и элементы для атрибутов (состав группового)\n return [entityNode, ...attrsNodes];\n};\n\n//Конвертация серверного описания запроса в данные для редактора диаграмм\nconst serverQueryData2QueryDiagram = (entities, relations) => {\n //Инициализация результата\n const result = {\n entities: [],\n relations: [],\n nodes: [],\n edges: []\n };\n //Сущности (почти как есть на сервере, только массив XATTRS.XATTR перемещается в attrs)\n result.entities = entities.map(e => {\n const tmp = {\n ...e\n };\n tmp.attrs = tmp?.XATTRS?.XATTR?.map(a => ({\n ...a\n })) || [];\n delete tmp.XATTRS;\n return tmp;\n });\n //Связи сущностей\n result.relations = relations.map(r => ({\n ...r\n }));\n //Элементы для диаграммы\n result.entities.forEach(entity => {\n const nodes = serverEntity2QueryDiagramNodes(entity);\n result.nodes = [...result.nodes, ...nodes];\n });\n //Грани для диаграммы\n result.edges = relations.map(r => ({\n ...r,\n animated: r.mandatory === 1 ? false : true\n }));\n //Вернем итоговый результат\n return result;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Работа с метаданными запроса\nconst useQuery = query => {\n //Собственное состояние - флаг инициализированности\n const [isInit, setInit] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг необходимости обновления\n const [refresh, setRefresh] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - данные диаграммы\n const [queryDiagram, setQueryDiagram] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - данные настроек\n const [queryOption, setQueryOption] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - данные SQL-запроса\n const [querySQL, setQuerySQL] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Обновление данных\n const doRefresh = () => setRefresh(true);\n\n //При необходимости получить/обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY\",\n args: {\n NRN: query\n },\n respArg: \"COUT\",\n isArray: name => [\"XENT\", \"XATTR\", \"XRL\", \"XARG\"].includes(name),\n attributeValueProcessor: (name, val) => [\"value\"].includes(name) ? undefined : val,\n loader: true\n });\n setQueryDiagram(serverQueryData2QueryDiagram(data?.XENTS?.XENT || [], data?.XRLS?.XRL || []));\n setQueryOption({\n args: data?.XOPT?.XARGS?.XARG || [],\n cond: data?.XOPT?.XCOND || null\n });\n setQuerySQL({\n qry: data?.XQRY,\n qryMsg: data?.XQRY_MSG\n });\n setInit(true);\n } finally {\n setRefresh(false);\n setLoading(false);\n }\n };\n //Если надо обновить\n if (refresh) if (query)\n //Если есть для чего получать данные\n loadData();\n //Нет идентификатора запроса - нет данных\n else {\n setQueryDiagram(null);\n setQueryOption(null);\n setQuerySQL(null);\n }\n }, [refresh, query, executeStored]);\n\n //При изменении входных свойств - поднимаем флаг обновления\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setRefresh(true), [query]);\n\n //Возвращаем интерфейс хука\n return [queryDiagram, queryOption, querySQL, doRefresh, isLoading, isInit];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useQuery: () => (/* binding */ useQuery)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common */ \"./app/panels/query_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Пользовательские хуки для работы с метаданными запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Общие ресурсы и константы редактора\n\n//---------\n//Константы\n//---------\n\n//Ширина элемента диаграммы\nconst NODE_WIDTH = 250;\n\n//Высота единицы состава группового элемента диаграммы\nconst GROUP_NODE_ITEM_HEIGHT = 50;\n\n//Стили\nconst STYLES = {\n ATTRIBUTE: isLast => ({\n borderBottom: isLast ? \"none\" : \"1px solid #dee2e6\"\n })\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Конвертация серверного описания сущностей запроса в элементы диаграммы\nconst serverEntity2QueryDiagramNodes = entity => {\n //Ссылка на атрибуты\n const attrs = entity.attrs || [];\n //Количество атрибутов\n const attrsCount = attrs.length;\n //Высота группового элемента диаграммы\n const entityNodeHeight = GROUP_NODE_ITEM_HEIGHT + attrsCount * GROUP_NODE_ITEM_HEIGHT;\n //Элемент диаграммы для сущности (групповой элемент)\n const entityNode = {\n id: entity.id,\n type: _common__WEBPACK_IMPORTED_MODULE_2__.NODE_TYPE.ENTITY,\n data: {\n ...entity\n },\n position: {\n x: entity.x,\n y: entity.y\n },\n style: {\n width: NODE_WIDTH,\n height: entityNodeHeight\n },\n draggable: true\n };\n //Элементы диаграммы для атрибутов сущности (состав группового элемента)\n const attrsNodes = attrs.map((attr, index, attrs) => ({\n id: attr.id,\n type: _common__WEBPACK_IMPORTED_MODULE_2__.NODE_TYPE.ATTRIBUTE,\n data: {\n ...attr\n },\n position: {\n x: 1,\n y: GROUP_NODE_ITEM_HEIGHT * (index + 1)\n },\n parentId: entity.id,\n extent: \"parent\",\n style: {\n width: NODE_WIDTH - 2,\n height: GROUP_NODE_ITEM_HEIGHT,\n ...STYLES.ATTRIBUTE(index === attrs.length - 1)\n },\n draggable: false,\n selectable: true\n }));\n //Возвращаем элемент для сущности (групповой) и элементы для атрибутов (состав группового)\n return [entityNode, ...attrsNodes];\n};\n\n//Конвертация серверного описания запроса в данные для редактора диаграмм\nconst serverQueryData2QueryDiagram = (entities, relations) => {\n //Инициализация результата\n const result = {\n entities: [],\n relations: [],\n nodes: [],\n edges: []\n };\n //Сущности (почти как есть на сервере, только массив XATTRS.XATTR перемещается в attrs)\n result.entities = entities.map(e => {\n const tmp = {\n ...e\n };\n tmp.attrs = tmp?.XATTRS?.XATTR?.map(a => ({\n ...a\n })) || [];\n delete tmp.XATTRS;\n return tmp;\n });\n //Связи сущностей\n result.relations = relations.map(r => ({\n ...r\n }));\n //Элементы для диаграммы\n result.entities.forEach(entity => {\n const nodes = serverEntity2QueryDiagramNodes(entity);\n result.nodes = [...result.nodes, ...nodes];\n });\n //Грани для диаграммы\n result.edges = relations.map(r => ({\n ...r,\n animated: r.mandatory === 1 ? false : true\n }));\n //Вернем итоговый результат\n return result;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Работа с метаданными запроса\nconst useQuery = query => {\n //Собственное состояние - флаг инициализированности\n const [isInit, setInit] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг необходимости обновления\n const [refresh, setRefresh] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - данные диаграммы\n const [queryDiagram, setQueryDiagram] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - данные настроек\n const [queryOption, setQueryOption] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - данные SQL-запроса\n const [querySQL, setQuerySQL] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Обновление данных\n const doRefresh = () => setRefresh(true);\n\n //При необходимости получить/обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY\",\n args: {\n NRN: query\n },\n respArg: \"COUT\",\n isArray: name => [\"XENT\", \"XATTR\", \"XRL\", \"XARG\"].includes(name),\n attributeValueProcessor: (name, val) => [\"value\"].includes(name) ? undefined : val,\n loader: true\n });\n setQueryDiagram(serverQueryData2QueryDiagram(data?.XENTS?.XENT || [], data?.XRLS?.XRL || []));\n setQueryOption({\n args: data?.XOPT?.XARGS?.XARG || [],\n cond: data?.XOPT?.XCOND || null,\n substArgsVals: data?.XOPT?.XSUBST_ARGS_VALS || 0\n });\n setQuerySQL({\n qry: data?.XQRY,\n qryBnd: data?.XQRY_BND,\n qryMsg: data?.XQRY_MSG\n });\n setInit(true);\n } finally {\n setRefresh(false);\n setLoading(false);\n }\n };\n //Если надо обновить\n if (refresh) if (query)\n //Если есть для чего получать данные\n loadData();\n //Нет идентификатора запроса - нет данных\n else {\n setQueryDiagram(null);\n setQueryOption(null);\n setQuerySQL(null);\n }\n }, [refresh, query, executeStored]);\n\n //При изменении входных свойств - поднимаем флаг обновления\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setRefresh(true), [query]);\n\n //Возвращаем интерфейс хука\n return [queryDiagram, queryOption, querySQL, doRefresh, isLoading, isInit];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/hooks.js?"); /***/ }), @@ -4150,7 +4161,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryEditor: () => (/* binding */ QueryEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/editors/p8p_editor_toolbar */ \"./app/components/editors/p8p_editor_toolbar.js\");\n/* harmony import */ var _components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/query_diagram/query_diagram */ \"./app/panels/query_editor/components/query_diagram/query_diagram.js\");\n/* harmony import */ var _components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/inspector/inspector */ \"./app/panels/query_editor/components/inspector/inspector.js\");\n/* harmony import */ var _components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/queries_manager/queries_manager */ \"./app/panels/query_editor/components/queries_manager/queries_manager.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./app/panels/query_editor/hooks.js\");\n/* harmony import */ var _components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/inspector_query_rls/hooks */ \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\");\n/* harmony import */ var _components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/inspector_query_ents/hooks */ \"./app/panels/query_editor/components/inspector_query_ents/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Корневой компонент\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты MUI\n //Контекст взаимодействия с приложением\n //Компоненты рабочего стола\n //Панель инструментов редактора\n //Диаграмма запроса\n //Инспектор свойств\n //Менеджер запросов\n //Хуки для работы с метаданными запроса на сервере\n //Хуки для работы со связями запроса на сервере\n //Хуки для работы с сущностями запроса на сервере\n\n//---------\n//Константы\n//---------\n\n//Заголовок панели по умолчанию\nconst APP_BAR_TITLE_DEFAULT = \"Редактор запросов\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневой компонент редактора запросов\nconst QueryEditor = () => {\n //Текущий запрос\n const [query, setQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Текущая сущность\n const [entity, setEntity] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Текущая связь\n const [relation, setRelation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Отображения менеджера запросов\n const [openQueriesManager, setOpenQueriesManager] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Получение метаданных с описанием запроса\n const [queryDiagram, queryOption, querySQL, doRefresh] = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useQuery)(query);\n\n //Работа с сущностями на сервере\n const {\n removeEnt,\n setEntPosition\n } = (0,_components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__.useQueryEntities)(query);\n\n //Работа со связями на сервере\n const {\n addRl,\n removeRl\n } = (0,_components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__.useQueryRelations)(query);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Выбор сущности\n const selectEntity = ent => {\n setRelation(null);\n const queryEnt = queryDiagram.entities.find(e => e.id === ent);\n if (queryEnt) setEntity({\n ...queryEnt\n });\n };\n\n //Выбор связи\n const selectRelation = rl => {\n setEntity(null);\n const queryRl = queryDiagram.relations.find(r => r.id === rl);\n if (queryRl) setRelation({\n ...queryRl\n });\n };\n\n //Сброс выбора связи и сущности\n const cleanupEnRlSelection = () => {\n setRelation(null);\n setEntity(null);\n };\n\n //Обработка изменения положения сущности на диаграмме\n const handleEntityPositionChange = (ent, position) => setEntPosition(ent, position.x, position.y);\n\n //Обработка удаления сущности из запроса\n const handleEntityRemove = async ent => {\n await removeEnt(ent);\n if (entity && entity?.id === ent) cleanupEnRlSelection();\n doRefresh();\n };\n\n //Обработка выделения сущности\n const handleEntityClick = ent => selectEntity(ent);\n\n //Обработка выделения тарибута сущности\n const handleEntityAttrClick = ent => selectEntity(ent);\n\n //Обработка выделения связи\n const handleRelationClick = rl => selectRelation(rl);\n\n //Обработка добавления отношения cущностей\n const handleRelationAdd = async (source, target) => {\n cleanupEnRlSelection();\n await addRl(source, target);\n doRefresh();\n };\n\n //Обработка удаления отношения cущностей\n const handleRelationRemove = async rl => {\n await removeRl(rl);\n if (relation && relation?.id === rl) cleanupEnRlSelection();\n doRefresh();\n };\n\n //При нажатии на панели (пустом месте) диаграммы запроса\n const handlePaneClick = () => cleanupEnRlSelection();\n\n //Открытие менеджера запросов\n const handleOpenQueriesManager = () => setOpenQueriesManager(true);\n\n //Закрытие менеджера запросов\n const handleCancelQueriesManager = () => setOpenQueriesManager(false);\n\n //Закрытие запроса\n const handleQueryClose = () => {\n setAppBarTitle(APP_BAR_TITLE_DEFAULT);\n cleanupEnRlSelection();\n setQuery(null);\n };\n\n //При выборе запроса\n const handleQuerySelect = ({\n rn,\n name\n }) => {\n setAppBarTitle(`Запрос [${name}]`);\n setQuery(rn);\n setOpenQueriesManager(false);\n cleanupEnRlSelection();\n };\n\n //При изменении свойств запроса\n const handleQueryOptionsChanged = () => {\n cleanupEnRlSelection();\n doRefresh();\n };\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__.P8PEditorToolBar, {\n items: [{\n icon: \"file_open\",\n title: \"Менеджер запросов\",\n onClick: handleOpenQueriesManager\n }, {\n icon: \"close\",\n title: \"Закрыть запрос\",\n onClick: handleQueryClose,\n disabled: !query\n }]\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CONTAINER\n }, openQueriesManager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__.QueriesManager, {\n current: query,\n onQuerySelect: handleQuerySelect,\n onCancel: handleCancelQueriesManager\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 20\n }, queryDiagram && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__.QueryDiagram, {\n nodes: queryDiagram?.nodes,\n edges: queryDiagram?.edges,\n onEntityClick: handleEntityClick,\n onEntityAttrClick: handleEntityAttrClick,\n onEntityPositionChange: handleEntityPositionChange,\n onEntityRemove: handleEntityRemove,\n onRelactionClick: handleRelationClick,\n onRelationAdd: handleRelationAdd,\n onRelationRemove: handleRelationRemove,\n onPaneClick: handlePaneClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, query && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__.Inspector, _extends({}, queryOption, querySQL, {\n query: query,\n entity: entity,\n relation: relation,\n entities: queryDiagram?.entities,\n onOptionsChanged: handleQueryOptionsChanged\n })))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/query_editor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryEditor: () => (/* binding */ QueryEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/editors/p8p_editor_toolbar */ \"./app/components/editors/p8p_editor_toolbar.js\");\n/* harmony import */ var _components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/query_diagram/query_diagram */ \"./app/panels/query_editor/components/query_diagram/query_diagram.js\");\n/* harmony import */ var _components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/inspector/inspector */ \"./app/panels/query_editor/components/inspector/inspector.js\");\n/* harmony import */ var _components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/queries_manager/queries_manager */ \"./app/panels/query_editor/components/queries_manager/queries_manager.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./app/panels/query_editor/hooks.js\");\n/* harmony import */ var _components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/inspector_query_rls/hooks */ \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\");\n/* harmony import */ var _components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/inspector_query_ents/hooks */ \"./app/panels/query_editor/components/inspector_query_ents/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Корневой компонент\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты MUI\n //Контекст взаимодействия с приложением\n //Компоненты рабочего стола\n //Панель инструментов редактора\n //Диаграмма запроса\n //Инспектор свойств\n //Менеджер запросов\n //Хуки для работы с метаданными запроса на сервере\n //Хуки для работы со связями запроса на сервере\n //Хуки для работы с сущностями запроса на сервере\n\n//---------\n//Константы\n//---------\n\n//Заголовок панели по умолчанию\nconst APP_BAR_TITLE_DEFAULT = \"Редактор запросов\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневой компонент редактора запросов\nconst QueryEditor = () => {\n //Текущий запрос\n const [query, setQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(154598792);\n\n //Текущая сущность\n const [entity, setEntity] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Текущая связь\n const [relation, setRelation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Отображения менеджера запросов\n const [openQueriesManager, setOpenQueriesManager] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Получение метаданных с описанием запроса\n const [queryDiagram, queryOption, querySQL, doRefresh] = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useQuery)(query);\n\n //Работа с сущностями на сервере\n const {\n removeEnt,\n setEntPosition\n } = (0,_components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__.useQueryEntities)(query);\n\n //Работа со связями на сервере\n const {\n addRl,\n removeRl\n } = (0,_components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__.useQueryRelations)(query);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Выбор сущности\n const selectEntity = ent => {\n setRelation(null);\n const queryEnt = queryDiagram.entities.find(e => e.id === ent);\n if (queryEnt) setEntity({\n ...queryEnt\n });\n };\n\n //Выбор связи\n const selectRelation = rl => {\n setEntity(null);\n const queryRl = queryDiagram.relations.find(r => r.id === rl);\n if (queryRl) setRelation({\n ...queryRl\n });\n };\n\n //Сброс выбора связи и сущности\n const cleanupEnRlSelection = () => {\n setRelation(null);\n setEntity(null);\n };\n\n //Обработка изменения положения сущности на диаграмме\n const handleEntityPositionChange = (ent, position) => setEntPosition(ent, position.x, position.y);\n\n //Обработка удаления сущности из запроса\n const handleEntityRemove = async ent => {\n await removeEnt(ent);\n if (entity && entity?.id === ent) cleanupEnRlSelection();\n doRefresh();\n };\n\n //Обработка выделения сущности\n const handleEntityClick = ent => selectEntity(ent);\n\n //Обработка выделения тарибута сущности\n const handleEntityAttrClick = ent => selectEntity(ent);\n\n //Обработка выделения связи\n const handleRelationClick = rl => selectRelation(rl);\n\n //Обработка добавления отношения cущностей\n const handleRelationAdd = async (source, target) => {\n cleanupEnRlSelection();\n await addRl(source, target);\n doRefresh();\n };\n\n //Обработка удаления отношения cущностей\n const handleRelationRemove = async rl => {\n await removeRl(rl);\n if (relation && relation?.id === rl) cleanupEnRlSelection();\n doRefresh();\n };\n\n //При нажатии на панели (пустом месте) диаграммы запроса\n const handlePaneClick = () => cleanupEnRlSelection();\n\n //Открытие менеджера запросов\n const handleOpenQueriesManager = () => setOpenQueriesManager(true);\n\n //Закрытие менеджера запросов\n const handleCancelQueriesManager = () => setOpenQueriesManager(false);\n\n //Закрытие запроса\n const handleQueryClose = () => {\n setAppBarTitle(APP_BAR_TITLE_DEFAULT);\n cleanupEnRlSelection();\n setQuery(null);\n };\n\n //При выборе запроса\n const handleQuerySelect = ({\n rn,\n name\n }) => {\n setAppBarTitle(`Запрос [${name}]`);\n setQuery(rn);\n setOpenQueriesManager(false);\n cleanupEnRlSelection();\n };\n\n //При изменении свойств запроса\n const handleQueryOptionsChanged = () => {\n cleanupEnRlSelection();\n doRefresh();\n };\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__.P8PEditorToolBar, {\n items: [{\n icon: \"file_open\",\n title: \"Менеджер запросов\",\n onClick: handleOpenQueriesManager\n }, {\n icon: \"close\",\n title: \"Закрыть запрос\",\n onClick: handleQueryClose,\n disabled: !query\n }]\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CONTAINER\n }, openQueriesManager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__.QueriesManager, {\n current: query,\n onQuerySelect: handleQuerySelect,\n onCancel: handleCancelQueriesManager\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 20\n }, queryDiagram && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__.QueryDiagram, {\n nodes: queryDiagram?.nodes,\n edges: queryDiagram?.edges,\n onEntityClick: handleEntityClick,\n onEntityAttrClick: handleEntityAttrClick,\n onEntityPositionChange: handleEntityPositionChange,\n onEntityRemove: handleEntityRemove,\n onRelactionClick: handleRelationClick,\n onRelationAdd: handleRelationAdd,\n onRelationRemove: handleRelationRemove,\n onPaneClick: handlePaneClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, query && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__.Inspector, _extends({}, queryOption, querySQL, {\n query: query,\n entity: entity,\n relation: relation,\n entities: queryDiagram?.entities,\n onOptionsChanged: handleQueryOptionsChanged\n })))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/query_editor.js?"); /***/ }), From f80c82b55e448e8919ca95380bb5f333430429e6 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Fri, 31 Oct 2025 13:28:26 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-994=20-=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20"=D0=94=D0=BE=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87",=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D0=B5=20"=D0=9F=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=D1=82=D1=8C"=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D1=8B=D1=82=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_CLNTTSKBRD.pck | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/db/PKG_P8PANELS_CLNTTSKBRD.pck b/db/PKG_P8PANELS_CLNTTSKBRD.pck index 3af6ce6..979b611 100644 --- a/db/PKG_P8PANELS_CLNTTSKBRD.pck +++ b/db/PKG_P8PANELS_CLNTTSKBRD.pck @@ -113,6 +113,13 @@ create or replace package PKG_P8PANELS_CLNTTSKBRD as SNOTE in varchar2 := null -- Примечание (при наличии) ); + /* Перемещение события */ + procedure CLNEVENTS_MOVE + ( + NCLNEVENTS in number, -- Рег. номер события + NCRN in number -- Рег. номер каталога-получателя + ); + /* Переадресация события */ procedure CLNEVENTS_SEND ( @@ -1936,6 +1943,18 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); end CLNEVENTS_STATE_CHANGE; + /* Перемещение события */ + procedure CLNEVENTS_MOVE + ( + NCLNEVENTS in number, -- Рег. номер события + NCRN in number -- Рег. номер каталога-получателя + ) + is + begin + /* Перемещение события в другой каталог */ + P_DOCUMENT_MOVE(SUNITCODE => 'ClientEvents', NDOCUMENT => NCLNEVENTS, NTARGET => NCRN); + end CLNEVENTS_MOVE; + /* Переадресация события */ procedure CLNEVENTS_SEND (