ЦИТК-994 - панель "Доски задач", добавлено действие "Переместить" для карточек событий

Reviewed-on: #38
This commit is contained in:
Mim 2025-10-31 18:33:01 +03:00
commit ea83eba5b5
5 changed files with 89 additions and 24 deletions

View File

@ -86,19 +86,18 @@ const CardActions = ({
<Icon>more_vert</Icon> <Icon>more_vert</Icon>
</IconButton> </IconButton>
<Menu id={`${taskRn}_menu`} anchorEl={cardActions.anchorMenuMethods} open={cardActions.openMethods} onClose={onMethodsMenuClose}> <Menu id={`${taskRn}_menu`} anchorEl={cardActions.anchorMenuMethods} open={cardActions.openMethods} onClose={onMethodsMenuClose}>
{menuItems.map(action => { {menuItems.map(action =>
if (action.visible) action.visible ? (
return ( <MenuItem
<MenuItem sx={action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {}}
sx={action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {}} key={`${taskRn}_${action.method}`}
key={`${taskRn}_${action.method}`} onClick={() => handleActionClick(action)}
onClick={() => handleActionClick(action)} >
> <Icon>{action.icon}</Icon>
<Icon>{action.icon}</Icon> <Typography pl={1}>{action.name}</Typography>
<Typography pl={1}>{action.name}</Typography> </MenuItem>
</MenuItem> ) : null
); )}
})}
</Menu> </Menu>
</Box> </Box>
); );
@ -132,7 +131,7 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen
const [menuItems, setMenuItems] = useState([]); const [menuItems, setMenuItems] = useState([]);
//Вспомогательные функции открытия раздела //Вспомогательные функции открытия раздела
const { handleClientEventsOpen, handleClientEventsNotesOpen, handleFileLinksOpen } = useDictionary(); const { handleClientEventsOpen, handleClientEventsNotesOpen, handleFileLinksOpen, handleCatalogTreeOpen } = useDictionary();
//Состояние вспомогательных функций событий //Состояние вспомогательных функций событий
const { handleTaskStateChange, handleTaskSend } = useTasksFunctions(); const { handleTaskStateChange, handleTaskSend } = useTasksFunctions();
@ -182,8 +181,21 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen
[executeStored] [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 }) => { async ({ nEvent, onReload, onNoteOpen }) => {
//Выполняем направление события //Выполняем направление события
handleTaskSend({ 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 }) => { async ({ nEvent, onReload, onNoteOpen }) => {
//Выполняем изменения статуса события //Выполняем изменения статуса события
handleTaskStateChange({ nEvent, onReload, onNoteOpen }); handleTaskStateChange({ nEvent, onReload, onNoteOpen });
@ -254,6 +266,26 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen
[handleTaskStateChange] [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(() => { useEffect(() => {
//Устанавливаем список меню //Устанавливаем список меню
@ -262,22 +294,24 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen
handleTaskEditAction, handleTaskEditAction,
handleTaskEditClientAction, handleTaskEditClientAction,
handleTaskDeleteAction, handleTaskDeleteAction,
handleStateChangeAction, handleTaskStateChangeAction,
handleTaskReturnAction, handleTaskReturnAction,
handleSendAction, handleTaskSendAction,
handleEventNotesOpenAction, handleEventNotesOpenAction,
handleTaskFileLinksOpenAction handleTaskFileLinksOpenAction,
handleTaskMoveAction
) )
); );
}, [ }, [
handleEventNotesOpenAction, handleEventNotesOpenAction,
handleTaskFileLinksOpenAction, handleTaskFileLinksOpenAction,
handleSendAction, handleTaskSendAction,
handleStateChangeAction, handleTaskStateChangeAction,
handleTaskDeleteAction, handleTaskDeleteAction,
handleTaskEditAction, handleTaskEditAction,
handleTaskEditClientAction, handleTaskEditClientAction,
handleTaskReturnAction handleTaskReturnAction,
handleTaskMoveAction
]); ]);
//Генерация содержимого //Генерация содержимого

View File

@ -57,7 +57,8 @@ const useDictionary = () => {
showMethod: "main", showMethod: "main",
inputParameters: [ inputParameters: [
{ name: "in_DOCNAME", value: prms.sUnitName }, { 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 => { callBack: res => {
res.success ? prms.callBack(res) : null; res.success ? prms.callBack(res) : null;

View File

@ -325,6 +325,7 @@ const useTasks = (filterValues, ordersValues) => {
name: task.SPREF_NUMB, name: task.SPREF_NUMB,
nRn: task.NRN, nRn: task.NRN,
sCrn: "", sCrn: "",
nCrn: task.NCRN,
sPrefix: task.SEVPREF, sPrefix: task.SEVPREF,
sNumber: task.SEVNUMB, sNumber: task.SEVNUMB,
sType: task.SEVTYPE_CODE, sType: task.SEVTYPE_CODE,

View File

@ -197,7 +197,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 [ return [
{ {
@ -220,6 +220,16 @@ export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChan
needAccountsReload: false, needAccountsReload: false,
func: onEditClient func: onEditClient
}, },
{
method: "MOVE",
name: "Переместить",
icon: "drive_file_move",
visible: true,
delimiter: false,
tasksReload: true,
needAccountsReload: false,
func: onMove
},
{ {
method: "DELETE", method: "DELETE",
name: "Удалить", name: "Удалить",

View File

@ -113,6 +113,13 @@ create or replace package PKG_P8PANELS_CLNTTSKBRD as
SNOTE in varchar2 := null -- Примечание (при наличии) SNOTE in varchar2 := null -- Примечание (при наличии)
); );
/* Перемещение события */
procedure CLNEVENTS_MOVE
(
NCLNEVENTS in number, -- Рег. номер события
NCRN in number -- Рег. номер каталога-получателя
);
/* Переадресация события */ /* Переадресация события */
procedure CLNEVENTS_SEND procedure CLNEVENTS_SEND
( (
@ -1936,6 +1943,18 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as
P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
end CLNEVENTS_STATE_CHANGE; 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 procedure CLNEVENTS_SEND
( (