From 30eb94bfa68282a8b87103a306d7994ab22688ce Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 30 Oct 2025 18:06:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-994=20-=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D1=8C=20"=D0=94=D0=BE=D1=81=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87",=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B8=D0=B5=20"=D0=9F=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D1=82=D1=8C"=20=D0=B4=D0=BB=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA=20=D1=81=D0=BE=D0=B1?= =?UTF-8?q?=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: "Удалить",