Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
bkunyun
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
bkunyun
Commits
d0a27706
Commit
d0a27706
authored
Jul 19, 2022
by
chenshouchao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 文件删除移动接口聚合替换
parent
0b259dc1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
109 additions
and
296 deletions
+109
-296
api_manager.ts
src/api/api_manager.ts
+2
-2
project_api.ts
src/api/project_api.ts
+5
-2
index.tsx
src/views/Project/ProjectData/DeleteDialog/index.tsx
+38
-129
index.tsx
src/views/Project/ProjectData/MoveFile/index.tsx
+64
-162
index.tsx
src/views/Project/ProjectData/index.tsx
+0
-1
No files found.
src/api/api_manager.ts
View file @
d0a27706
...
@@ -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`
,
//项目管理员-删除工作流模板
...
...
src/api/project_api.ts
View file @
d0a27706
...
@@ -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
;
};
};
...
...
src/views/Project/ProjectData/DeleteDialog/index.tsx
View file @
d0a27706
...
@@ -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
(
...
...
src/views/Project/ProjectData/MoveFile/index.tsx
View file @
d0a27706
...
@@ -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
,
getDataFileMove
Package
}
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
}
>
...
...
src/views/Project/ProjectData/index.tsx
View file @
d0a27706
...
@@ -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
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment