ЦИТК-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>
</IconButton>
<Menu id={`${taskRn}_menu`} anchorEl={cardActions.anchorMenuMethods} open={cardActions.openMethods} onClose={onMethodsMenuClose}>
{menuItems.map(action => {
if (action.visible)
return (
<MenuItem
sx={action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {}}
key={`${taskRn}_${action.method}`}
onClick={() => handleActionClick(action)}
>
<Icon>{action.icon}</Icon>
<Typography pl={1}>{action.name}</Typography>
</MenuItem>
);
})}
{menuItems.map(action =>
action.visible ? (
<MenuItem
sx={action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {}}
key={`${taskRn}_${action.method}`}
onClick={() => handleActionClick(action)}
>
<Icon>{action.icon}</Icon>
<Typography pl={1}>{action.name}</Typography>
</MenuItem>
) : null
)}
</Menu>
</Box>
);
@ -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
]);
//Генерация содержимого

View File

@ -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;

View File

@ -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,

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 [
{
@ -220,6 +220,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: "Удалить",

View File

@ -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
(