Commit d0a27706 authored by chenshouchao's avatar chenshouchao

feat: 文件删除移动接口聚合替换

parent 0b259dc1
...@@ -21,9 +21,9 @@ const RESTAPI = { ...@@ -21,9 +21,9 @@ const RESTAPI = {
API_DATA_FIND: `${BACKEND_API_URI_PREFIX}/cpp/data/find`, //查询某路径下数据集 API_DATA_FIND: `${BACKEND_API_URI_PREFIX}/cpp/data/find`, //查询某路径下数据集
API_DATA_SEARCH: `${BACKEND_API_URI_PREFIX}/cpp/data/search`, //搜索项目中某路径下的数据集 API_DATA_SEARCH: `${BACKEND_API_URI_PREFIX}/cpp/data/search`, //搜索项目中某路径下的数据集
API_DATA_MOVE: `${BACKEND_API_URI_PREFIX}/cpp/data/move`, //移动到 API_DATA_MOVE: `${BACKEND_API_URI_PREFIX}/cpp/data/move`, //移动到
API_DATA_MOVE_PACKAGE: `${BACKEND_API_URI_PREFIX}/cpp/data/move/package`, //移动文件夹中的数据集 API_DATA_MOVE_PACKAGE: `${BACKEND_API_URI_PREFIX}/cpp/data/move/package`, //移动文件夹数据集
API_DATA_DEL: `${BACKEND_API_URI_PREFIX}/cpp/data/del`, //删除项目中的数据集 API_DATA_DEL: `${BACKEND_API_URI_PREFIX}/cpp/data/del`, //删除项目中的数据集
API_DATA_DEL_PACKAGE: `${BACKEND_API_URI_PREFIX}/cpp/data/del/package`, //删除文件夹中的数据集 API_DATA_DEL_PACKAGE: `${BACKEND_API_URI_PREFIX}/cpp/data/del/package`, //删除文件夹数据集
API_USER_PERMISSION_LIST: `${BACKEND_API_URI_PREFIX}/uaa/routes/privilege/list`, //获取用户包含的权限列表 API_USER_PERMISSION_LIST: `${BACKEND_API_URI_PREFIX}/uaa/routes/privilege/list`, //获取用户包含的权限列表
API_WORKBENCH_TEMPLATE_LIST: `${BACKEND_API_URI_PREFIX}/cpp/workbench/project/workflowspec`, //查询项目下工作流模板列表 API_WORKBENCH_TEMPLATE_LIST: `${BACKEND_API_URI_PREFIX}/cpp/workbench/project/workflowspec`, //查询项目下工作流模板列表
API_WORKBENCH_DELETE_TEMPLATE: `${BACKEND_API_URI_PREFIX}/cpp/workbench/project/workflowspec`, //项目管理员-删除工作流模板 API_WORKBENCH_DELETE_TEMPLATE: `${BACKEND_API_URI_PREFIX}/cpp/workbench/project/workflowspec`, //项目管理员-删除工作流模板
......
...@@ -149,7 +149,9 @@ const getDataFileMove = (params: getDataFileMoveParams) => { ...@@ -149,7 +149,9 @@ const getDataFileMove = (params: getDataFileMoveParams) => {
type getDataFileMovePackageParams = { type getDataFileMovePackageParams = {
projectId: string; projectId: string;
names: string; // 包名 // names: string; // 包名
packageNames: string; // 数据集之外的包名 ','分隔
dataSetNames: string; // 数据集包名 ','分隔
spath?: string; // 原路径 spath?: string; // 原路径
dpath?: string; // 目标路径 dpath?: string; // 目标路径
}; };
...@@ -186,7 +188,8 @@ const getDataFileDel = (params: getDataFileDelParams) => { ...@@ -186,7 +188,8 @@ const getDataFileDel = (params: getDataFileDelParams) => {
type getDataFileDelPackageParams = { type getDataFileDelPackageParams = {
projectId: string; projectId: string;
names: string; packageNames: string; // 数据集之外的包名 ','分隔
dataSetNames: string; // 数据集包名 ','分隔
path?: string; path?: string;
}; };
......
...@@ -2,20 +2,12 @@ import React, { useImperativeHandle, useMemo } from "react"; ...@@ -2,20 +2,12 @@ import React, { useImperativeHandle, useMemo } from "react";
import MyDialog from "@/components/mui/MyDialog"; import MyDialog from "@/components/mui/MyDialog";
import { useMessage } from "@/components/MySnackbar"; import { useMessage } from "@/components/MySnackbar";
import CloudEController from "@/api/fileserver/CloudEController"; import { getDataFileDelPackage } from "@/api/project_api";
import { getDataFileDel, getDataFileDelPackage } from "@/api/project_api";
import useMyRequest from "@/hooks/useMyRequest"; import useMyRequest from "@/hooks/useMyRequest";
const DeleteDialog = (props: any) => { const DeleteDialog = (props: any) => {
const { const { path, projectId, currentOperateFile, selectIds, refresh, showList } =
path, props;
projectId,
fileToken,
currentOperateFile,
selectIds,
refresh,
showList,
} = props;
const Message = useMessage(); const Message = useMessage();
let deleteFileDialogRef: any = React.createRef(); let deleteFileDialogRef: any = React.createRef();
const showDialog = () => { const showDialog = () => {
...@@ -27,143 +19,60 @@ const DeleteDialog = (props: any) => { ...@@ -27,143 +19,60 @@ const DeleteDialog = (props: any) => {
showDialog: showDialog, showDialog: showDialog,
}; };
}); });
const { run: getDataFileDelRun } = useMyRequest(getDataFileDel, {
onSuccess: (res: any) => {
successDelete();
},
});
const { run: getDataFileDelPackageRun } = useMyRequest( const { run: getDataFileDelPackageRun } = useMyRequest(
getDataFileDelPackage, getDataFileDelPackage,
{ {
onSuccess: (res: any) => { onSuccess: (res: any) => {
successDelete(); Message.success("删除成功!");
deleteFileDialogRef?.current?.handleClose();
refresh();
}, },
} }
); );
const successDelete = () => { const deletePath = useMemo(() => {
Message.success("删除成功!");
deleteFileDialogRef?.current?.handleClose();
refresh();
};
const deletePathProvidedToDataSet = useMemo(() => {
return path === "/" ? "/" : `${path}/`; return path === "/" ? "/" : `${path}/`;
}, [path]); }, [path]);
const deletePathProvidedFileServer = useMemo(() => { // 要删除的文件数组
return path === "/" ? `${path}` : `${path}/`; const deleteList = useMemo(() => {
}, [path]); if (currentOperateFile) {
return [currentOperateFile];
// 删除
const handleSubmit = () => {
if (!currentOperateFile) {
// 批量删除
// 要删除的数据集
const datSetDeleteList = showList.filter((item: any) => {
return selectIds.indexOf(item.name) !== -1 && item.type === "dataSet";
});
// 要删除的文件夹
const folderDeleteList = showList.filter((item: any) => {
return selectIds.indexOf(item.name) !== -1 && item.type === "directory";
});
// 要删除的文件
const fileDeleteList = showList.filter((item: any) => {
return (
selectIds.indexOf(item.name) !== -1 &&
item.type !== "dataSet" &&
item.type !== "directory"
);
});
if (datSetDeleteList.length > 0) {
dataSetsDelete(datSetDeleteList);
}
if (folderDeleteList.length > 0) {
foldersDelete(folderDeleteList);
}
if (fileDeleteList.length > 0) {
filesDelete(fileDeleteList);
}
} else { } else {
if (currentOperateFile.type === "dataSet") { return showList.filter((item: any) => {
dataSetDelete(); return selectIds.indexOf(item.name) !== -1;
} else if (currentOperateFile.type === "directory") { });
folerDelete();
} else {
fileDelete();
}
} }
}; }, [currentOperateFile, selectIds, showList]);
// 删除单个数据集
const dataSetDelete = () => {
getDataFileDelRun({
projectId: projectId as string,
names: currentOperateFile.name,
path: deletePathProvidedToDataSet,
});
};
// 删除单个文件夹 const packageNames = useMemo(() => {
const folerDelete = () => { return deleteList
fileDelete(); .filter((item: any) => {
const names = currentOperateFile.name; return item.type !== "dataSet";
dataSetInFolerDelete(names); })
}; .map((item: any) => item.name)
.join(",");
}, [deleteList]);
const dataSetNames = useMemo(() => {
return deleteList
.filter((item: any) => {
return item.type === "dataSet";
})
.map((item: any) => item.name)
.join(",");
}, [deleteList]);
// 删除文件夹中的数据集 // 删除
const dataSetInFolerDelete = (names: string) => { const handleSubmit = () => {
getDataFileDelPackageRun({ getDataFileDelPackageRun({
projectId: projectId as string, projectId,
names, packageNames,
path: deletePathProvidedToDataSet, dataSetNames,
}); path: deletePath,
};
// 删除单个文件
const fileDelete = () => {
CloudEController.JobOutFileDel(
`${deletePathProvidedFileServer}${currentOperateFile.name}`,
fileToken as string,
projectId as string
)?.then((res) => {
successDelete();
});
};
// 删除多个数据集
const dataSetsDelete = (datSetDeleteList: Array<any>) => {
getDataFileDelRun({
projectId: projectId as string,
names: datSetDeleteList.map((item: any) => item.name).join(","),
path: deletePathProvidedToDataSet,
});
};
// 删除多个文件夹
const foldersDelete = (folderDeleteList: Array<any>) => {
filesDelete(folderDeleteList);
const names = folderDeleteList.map((item: any) => item.name).join(",");
dataSetInFolerDelete(names);
};
// 删除多个文件
const filesDelete = (fileDeleteList: Array<any>) => {
const deletePath = fileDeleteList
.map((item: any) => {
return `${deletePathProvidedFileServer}${item.name}`;
})
.join(" ");
CloudEController.JobOutFileDel(
deletePath,
fileToken as string,
projectId as string
)?.then((res) => {
successDelete();
}); });
}; };
const submitloading = false; const submitloading = false;
return ( return (
......
...@@ -13,7 +13,7 @@ import bigFolderIcon from "@/assets/project/bigFolderIcon.svg"; ...@@ -13,7 +13,7 @@ import bigFolderIcon from "@/assets/project/bigFolderIcon.svg";
import { useMessage } from "@/components/MySnackbar"; import { useMessage } from "@/components/MySnackbar";
import MyTreeView from "@/components/mui/MyTreeView"; import MyTreeView from "@/components/mui/MyTreeView";
import CloudEController from "@/api/fileserver/CloudEController"; import CloudEController from "@/api/fileserver/CloudEController";
import { getDataFileMove, getDataFileMovePackage } from "@/api/project_api"; import { getDataFileMovePackage } from "@/api/project_api";
import useMyRequest from "@/hooks/useMyRequest"; import useMyRequest from "@/hooks/useMyRequest";
import classNames from "classnames"; import classNames from "classnames";
import _ from "lodash"; import _ from "lodash";
...@@ -113,58 +113,83 @@ const MoveFile = (props: any) => { ...@@ -113,58 +113,83 @@ const MoveFile = (props: any) => {
}; };
}); });
const { run: getDataFileMoveRun } = useMyRequest(getDataFileMove, {
onSuccess: (res: any) => {
successMove();
},
});
const { run: getDataFileMovePackageRun } = useMyRequest( const { run: getDataFileMovePackageRun } = useMyRequest(
getDataFileMovePackage, getDataFileMovePackage,
{ {
onSuccess: (res: any) => { onSuccess: () => {
successMove(); Message.success("移动成功!");
setMoveFileSubmitloading(false);
moveFileDialogRef?.current?.handleClose();
refresh();
},
onError(error: any) {
if (error?.message) {
Message.error(error?.message);
} else if (error?.response?.status === 405) {
Message.error("因目标路径存在同名文件,数据移动失败。");
} else {
Message.error("文件服务发生错误,数据移动失败。");
}
setMoveFileSubmitloading(false);
}, },
} }
); );
// 提供给fileserver相关接口的newpath 直接用newPath就可以了 // 移动的目标路径
// const newPathProvidedToFileServer = useMemo(() => { const dpath = useMemo(() => {
// return newPath
// }, [newPath])
// 提供给数据集相关接口的newpath
const newPathProvidedToDataSet = useMemo(() => {
return newPath === "/" ? "/" : `${newPath}/`; return newPath === "/" ? "/" : `${newPath}/`;
}, [newPath]); }, [newPath]);
// 提供给fileserver相关接口的oldpath // 移动的原路径
const oldPathProvidedToFileServer = useMemo(() => { const spath = useMemo(() => {
return `${path}${path === "/" ? "" : "/"}`;
}, [path]);
// 提供给数据集相关接口的oldpath
const oldPathProvidedToDataSet = useMemo(() => {
return path === "/" ? "/" : `${path}/`; return path === "/" ? "/" : `${path}/`;
}, [path]); }, [path]);
// 移动成功后的操作 // 要移动的文件数组
const successMove = () => { const moveList = useMemo(() => {
Message.success("移动成功!"); if (currentOperateFile) {
setMoveFileSubmitloading(false); return [currentOperateFile];
moveFileDialogRef?.current?.handleClose();
refresh();
};
// 移动失败后的操作
const erroeMove = (error: any) => {
if (error?.response?.status === 405) {
Message.error("因目标路径存在同名文件,数据移动失败。");
} else { } else {
Message.error("文件服务发生错误,数据移动失败。"); return showList.filter((item: any) => {
return selectIds.indexOf(item.name) !== -1;
});
} }
setMoveFileSubmitloading(false); }, [currentOperateFile, selectIds, showList]);
};
const packageNames = useMemo(() => {
return moveList
.filter((item: any) => {
return item.type !== "dataSet";
})
.map((item: any) => item.name)
.join(",");
}, [moveList]);
const dataSetNames = useMemo(() => {
return moveList
.filter((item: any) => {
return item.type === "dataSet";
})
.map((item: any) => item.name)
.join(",");
}, [moveList]);
const moveFileFun = useCallback(() => {
getDataFileMovePackageRun({
projectId,
packageNames,
dataSetNames,
spath,
dpath,
});
}, [
getDataFileMovePackageRun,
projectId,
packageNames,
dataSetNames,
spath,
dpath,
]);
// 移动 // 移动
const handleMoveFileSubmit = () => { const handleMoveFileSubmit = () => {
...@@ -174,133 +199,10 @@ const MoveFile = (props: any) => { ...@@ -174,133 +199,10 @@ const MoveFile = (props: any) => {
Message.error("指定的目标路径为数据原路径,无需移动。"); Message.error("指定的目标路径为数据原路径,无需移动。");
} else { } else {
setMoveFileSubmitloading(true); setMoveFileSubmitloading(true);
if (!currentOperateFile) { moveFileFun();
// 批量移动
// 要移动的数据集
const datSetMoveList = showList.filter((item: any) => {
return selectIds.indexOf(item.name) !== -1 && item.type === "dataSet";
});
// 要移动的文件夹
const folderMoveList = showList.filter((item: any) => {
return (
selectIds.indexOf(item.name) !== -1 && item.type === "directory"
);
});
// 要移动的文件
const fileMoveList = showList.filter((item: any) => {
return (
selectIds.indexOf(item.name) !== -1 &&
item.type !== "dataSet" &&
item.type !== "directory"
);
});
if (datSetMoveList.length > 0) {
dataSetsMove(datSetMoveList);
}
if (folderMoveList.length > 0) {
foldersMove(folderMoveList);
}
if (fileMoveList.length > 0) {
filesMove(fileMoveList)?.then((res) => {
successMove();
});
}
} else {
if (currentOperateFile.type === "dataSet") {
dataSetMove();
} else if (currentOperateFile.type === "directory") {
folerMove();
} else {
fileMove()?.then((res) => {
successMove();
});
}
}
} }
}; };
// 单文件移动
const fileMove = () => {
const oldPathToFileServer = `${oldPathProvidedToFileServer}${currentOperateFile.name}`;
return CloudEController.JobFileMove(
newPath,
oldPathToFileServer,
"",
fileToken,
projectId
);
};
// 多文件移动
const filesMove = (fileMoveList: Array<any>) => {
const oldPaths = fileMoveList.map((item: any) => {
return `${oldPathProvidedToFileServer}${item.name}`;
});
return CloudEController.JobFileBatchMove(
newPath,
oldPaths,
"",
fileToken,
projectId
);
};
// 单文件夹移动
const folerMove = () => {
fileMove()
?.then((res) => {
const names = currentOperateFile.name;
dataSetInFolerMove(names);
})
.catch((error) => {
console.log(error);
erroeMove(error);
});
};
// 移动文件夹中的数据集
const dataSetInFolerMove = (names: string) => {
getDataFileMovePackageRun({
projectId: projectId as string,
names,
spath: oldPathProvidedToDataSet,
dpath: newPathProvidedToDataSet,
});
};
// 多文件夹移动
const foldersMove = (folderMoveList: Array<any>) => {
filesMove(folderMoveList)
?.then((res) => {
const names = folderMoveList.map((item: any) => item.name).join(",");
dataSetInFolerMove(names);
})
.catch((error) => {
console.log(error);
erroeMove(error);
});
};
// 单数据集移动
const dataSetMove = () => {
getDataFileMoveRun({
projectId: projectId as string,
names: currentOperateFile.name,
spath: oldPathProvidedToDataSet,
dpath: newPathProvidedToDataSet,
});
};
// 多数据集移动
const dataSetsMove = (datSetMoveList: Array<any>) => {
getDataFileMoveRun({
projectId: projectId as string,
names: datSetMoveList.map((item: any) => item.name).join(","),
spath: oldPathProvidedToFileServer,
dpath: newPath === "/" ? "/" : `${newPath}/`,
});
};
const renderLabel = (node: any) => { const renderLabel = (node: any) => {
return ( return (
<span className={style.treeLabel}> <span className={style.treeLabel}>
......
...@@ -714,7 +714,6 @@ const ProjectData = observer(() => { ...@@ -714,7 +714,6 @@ const ProjectData = observer(() => {
<DeleteDialog <DeleteDialog
onRef={deleteDialogRef} onRef={deleteDialogRef}
path={path} path={path}
fileToken={fileToken}
projectId={projectId} projectId={projectId}
currentOperateFile={currentOperateFile} currentOperateFile={currentOperateFile}
selectIds={selectIds} selectIds={selectIds}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment