From 96bf4dba90b0eb686bffdc1d4329fb4afd449352 Mon Sep 17 00:00:00 2001
From: Aaron Liu <912394456@qq.com>
Date: Tue, 7 Feb 2023 19:59:06 +0800
Subject: [PATCH] feat(dashboard): unlink file while not deleting its physical
source
---
public/locales/zh-CN/dashboard.json | 3 +-
src/component/Admin/File/File.js | 60 ++++++++++++++++++++---------
2 files changed, 44 insertions(+), 19 deletions(-)
diff --git a/public/locales/zh-CN/dashboard.json b/public/locales/zh-CN/dashboard.json
index 457419d..7e35bda 100644
--- a/public/locales/zh-CN/dashboard.json
+++ b/public/locales/zh-CN/dashboard.json
@@ -745,7 +745,8 @@
"dstFolderPathDes": "要将目录导入到用户文件系统中的路径",
"recursivelyImport": "递归导入子目录",
"recursivelyImportDes": "是否将目录下的所有子目录递归导入",
- "createImportTask": "创建导入任务"
+ "createImportTask": "创建导入任务",
+ "unlink": "解除关联(保留物理文件)"
},
"share": {
"deleted": "分享已删除",
diff --git a/src/component/Admin/File/File.js b/src/component/Admin/File/File.js
index e934591..52f1ca3 100644
--- a/src/component/Admin/File/File.js
+++ b/src/component/Admin/File/File.js
@@ -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() {
+
+
+
+
+
)}
@@ -446,13 +457,26 @@ export default function File() {
- deletePolicy(row.ID)
+ deleteFile(row.ID)
}
size={"small"}
>
+
+
+ deleteFile(row.ID, true)
+ }
+ size={"small"}
+ >
+
+
+
))}