mirror of
https://github.com/cloudreve/frontend.git
synced 2025-12-26 04:02:47 +00:00
feat(dashboard): unlink file while not deleting its physical source
This commit is contained in:
parent
b6b59dd1fb
commit
96bf4dba90
|
|
@ -745,7 +745,8 @@
|
|||
"dstFolderPathDes": "要将目录导入到用户文件系统中的路径",
|
||||
"recursivelyImport": "递归导入子目录",
|
||||
"recursivelyImportDes": "是否将目录下的所有子目录递归导入",
|
||||
"createImportTask": "创建导入任务"
|
||||
"createImportTask": "创建导入任务",
|
||||
"unlink": "解除关联(保留物理文件)"
|
||||
},
|
||||
"share": {
|
||||
"deleted": "分享已删除",
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
))}
|
||||
|
|
|
|||
Loading…
Reference in New Issue