feat(dashboard): unlink file while not deleting its physical source

This commit is contained in:
Aaron Liu 2023-02-07 19:59:06 +08:00
parent b6b59dd1fb
commit 96bf4dba90
2 changed files with 44 additions and 19 deletions

View File

@ -745,7 +745,8 @@
"dstFolderPathDes": "要将目录导入到用户文件系统中的路径",
"recursivelyImport": "递归导入子目录",
"recursivelyImportDes": "是否将目录下的所有子目录递归导入",
"createImportTask": "创建导入任务"
"createImportTask": "创建导入任务",
"unlink": "解除关联(保留物理文件)"
},
"share": {
"deleted": "分享已删除",

View File

@ -17,7 +17,7 @@ import TableSortLabel from "@material-ui/core/TableSortLabel";
import Toolbar from "@material-ui/core/Toolbar";
import Tooltip from "@material-ui/core/Tooltip";
import Typography from "@material-ui/core/Typography";
import { Delete, DeleteForever, FilterList } from "@material-ui/icons";
import { Delete, DeleteForever, FilterList,LinkOff } from "@material-ui/icons";
import React, { useCallback, useEffect, useState } from "react";
import { useDispatch } from "react-redux";
import { useHistory } from "react-router";
@ -125,9 +125,9 @@ export default function File() {
loadList();
}, [page, pageSize, orderBy, filter, search]);
const deletePolicy = (id) => {
const deleteFile = (id, unlink = false) => {
setLoading(true);
API.post("/admin/file/delete", { id: [id] })
API.post("/admin/file/delete", { id: [id], unlink })
.then(() => {
loadList();
ToggleSnackbar("top", "right", t("deleteAsync"), "success");
@ -140,20 +140,22 @@ export default function File() {
});
};
const deleteBatch = (force) => () => {
setLoading(true);
API.post("/admin/file/delete", { id: selected, force: force })
.then(() => {
loadList();
ToggleSnackbar("top", "right", t("deleteAsync"), "success");
})
.catch((error) => {
ToggleSnackbar("top", "right", error.message, "error");
})
.then(() => {
setLoading(false);
});
};
const deleteBatch =
(force, unlink = false) =>
() => {
setLoading(true);
API.post("/admin/file/delete", { id: selected, force, unlink })
.then(() => {
loadList();
ToggleSnackbar("top", "right", t("deleteAsync"), "success");
})
.catch((error) => {
ToggleSnackbar("top", "right", error.message, "error");
})
.then(() => {
setLoading(false);
});
};
const handleSelectAllClick = (event) => {
if (event.target.checked) {
@ -264,6 +266,15 @@ export default function File() {
<DeleteForever />
</IconButton>
</Tooltip>
<Tooltip title={tDashboard("file.unlink")}>
<IconButton
disabled={loading}
onClick={deleteBatch(true, true)}
size={"small"}
>
<LinkOff />
</IconButton>
</Tooltip>
</Toolbar>
)}
<TableContainer className={classes.container}>
@ -446,13 +457,26 @@ export default function File() {
<IconButton
disabled={loading}
onClick={() =>
deletePolicy(row.ID)
deleteFile(row.ID)
}
size={"small"}
>
<Delete />
</IconButton>
</Tooltip>
<Tooltip
title={tDashboard("file.unlink")}
>
<IconButton
disabled={loading}
onClick={() =>
deleteFile(row.ID, true)
}
size={"small"}
>
<LinkOff />
</IconButton>
</Tooltip>
</TableCell>
</TableRow>
))}