移动和复制功能
This commit is contained in:
parent
ff1702c338
commit
a93e1bf0c8
@ -142,4 +142,20 @@ export function listTsFiles(params:any){
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
//移动
|
||||
export function moveFileFolder(params:any){
|
||||
return request ({
|
||||
url:'/experimentalData/ts-files/moveFileFolder',
|
||||
method:'post',
|
||||
data:params
|
||||
})
|
||||
}
|
||||
//复制
|
||||
export function copyFileFolder(params:any){
|
||||
return request ({
|
||||
url:'/experimentalData/ts-files/copyFileFolder',
|
||||
method:'post',
|
||||
data:params
|
||||
})
|
||||
}
|
253
web/src/views/testdata/datamanagement/index.vue
vendored
253
web/src/views/testdata/datamanagement/index.vue
vendored
@ -12,7 +12,7 @@ import { ElMessageBox, ElMessage, ElMain } from "element-plus";
|
||||
import Page from '@/components/Pagination/page.vue';
|
||||
import AudioPlayer from '@/components/file/preview/AudioPlayer.vue';
|
||||
import { batchDeleteReq } from "@/api/file-operator";
|
||||
import { tstaskList, getTsNodesTree, addTsNodes, updateTsNodes, deleteTsNodesById, tsFilesPage, addTsFiles, updateTsFiles, deleteTsFilesById, listTsFiles, deleteTsFilesByIds, compress, Decompression, compare, downloadToLocal, uploadToBackup, addTsFile, list } from "@/api/datamanagement";
|
||||
import { tstaskList, getTsNodesTree, addTsNodes, updateTsNodes, deleteTsNodesById, tsFilesPage, addTsFiles, updateTsFiles, deleteTsFilesById, listTsFiles, deleteTsFilesByIds, compress, Decompression, compare, downloadToLocal, uploadToBackup, addTsFile, list, moveFileFolder, copyFileFolder } from "@/api/datamanagement";
|
||||
import ZUpload from '@/components/file/ZUpload.vue'
|
||||
import useFileUpload from "@/components/file/file/useFileUpload";
|
||||
import useHeaderStorageList from "@/components/header/useHeaderStorageList";
|
||||
@ -745,12 +745,28 @@ const pasteing = ref(false)
|
||||
const copyarr = ref([])
|
||||
const copytable = ref([])
|
||||
const copyjudge = ref(false)
|
||||
const copytype = ref('')
|
||||
function copyMove(type: any) {
|
||||
pasteing.value = true
|
||||
copyarr.value = JSON.parse(JSON.stringify(tableIdarr.value))
|
||||
copytype.value = type //copy move
|
||||
// tableIdarr.value
|
||||
}
|
||||
function paste() {
|
||||
debugger
|
||||
let norepeat = []
|
||||
let repeatObj: any = {
|
||||
newPath: '',
|
||||
oldpaths: '',
|
||||
parentId: '',
|
||||
newFileName: [],
|
||||
rename: '',
|
||||
type: '',
|
||||
}
|
||||
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/'
|
||||
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
|
||||
repeatObj.type = '0'
|
||||
|
||||
copytable.value.length = 0
|
||||
if (tableData.value.length > 0) {
|
||||
tableData.value.forEach((item: any) => {
|
||||
@ -758,16 +774,90 @@ function paste() {
|
||||
if (items.fileName == item.fileName) {
|
||||
copytable.value.push(items)
|
||||
copyjudge.value = true
|
||||
} else {
|
||||
//直接走覆盖方法
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
|
||||
//直接走覆盖方法
|
||||
copyarr.value.forEach((items: any) => {
|
||||
repeatObj.oldpaths = items.workPath
|
||||
repeatObj.newFileName.push(items.fileName)
|
||||
})
|
||||
repeatObj.newFileName = repeatObj.newFileName.join(',')
|
||||
if (copytype.value == 'move') {
|
||||
moveFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('移动成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copyarr.value.length = 0
|
||||
}
|
||||
})
|
||||
} else {
|
||||
copyFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('复制成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copyarr.value.length = 0
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
if (!containsAll(tableData.value, copyarr.value)) {
|
||||
//直接走覆盖方法
|
||||
// 2. 更高效的Set方式(推荐)
|
||||
const arr2Ids = new Set(copytable.value.map(item => item.id));
|
||||
norepeat = copyarr.value.filter(item => !arr2Ids.has(item.id));
|
||||
norepeat.forEach((items: any) => {
|
||||
repeatObj.oldpaths = items.workPath
|
||||
repeatObj.newFileName.push(items.fileName)
|
||||
})
|
||||
repeatObj.newFileName = repeatObj.newFileName.join(',')
|
||||
if (copytype.value == "move") {
|
||||
moveFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
// ElMessage.success('未重复文件移动成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copyarr.value.length = 0
|
||||
}
|
||||
})
|
||||
} else {
|
||||
copyFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
// ElMessage.success('未重复文件复制成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copyarr.value.length = 0
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
function containsAll(array1: any, array2: any) {
|
||||
debugger
|
||||
// 创建一个 Set 来存储 array1 中所有对象的 name 属性
|
||||
const namesInArray1 = new Set(array1.map(item => item.fileName));
|
||||
// 遍历 array2,检查每个元素的 name 是否在 Set 中存在
|
||||
for (const item of array2) {
|
||||
if (!namesInArray1.has(item.fileName)) {
|
||||
return false; // 如果 array2 中的元素的 name 不在 array1 的 name Set 中,返回 false
|
||||
}
|
||||
}
|
||||
|
||||
return true; // 如果 array2 中的所有元素的 name 都在 array1 的 name Set 中,返回 true
|
||||
}
|
||||
function removeItemsFromArray1(array1: any, array2: any, key: any) {
|
||||
// 创建一个 Set 来存储 array2 中所有元素的 key 值
|
||||
const keysToRemove = new Set(array2.map(item => item[key]));
|
||||
|
||||
// 使用 filter 方法保留 array1 中不在 keysToRemove 中的元素
|
||||
return array1.filter(item => !keysToRemove.has(item[key]));
|
||||
}
|
||||
function copycover(row: any) {
|
||||
ElMessageBox.confirm(
|
||||
'您确定要覆盖该文件吗?',
|
||||
@ -779,11 +869,119 @@ function copycover(row: any) {
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
let repeatObj: any = {
|
||||
newPath: '',
|
||||
oldpaths: '',
|
||||
parentId: '',
|
||||
newFileName: [],
|
||||
rename: '',
|
||||
type: '',
|
||||
}
|
||||
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/'
|
||||
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
|
||||
repeatObj.type = '0'
|
||||
repeatObj.oldpaths = row.workPath
|
||||
repeatObj.newFileName.push(row.fileName)
|
||||
repeatObj.newFileName = repeatObj.newFileName.join(',')
|
||||
if (copytype.value == "move") {
|
||||
moveFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('移动成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copytable.value = removeItemsFromArray1(copytable.value, [row], 'id')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
copyFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('复制成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copytable.value = removeItemsFromArray1(copytable.value, [row], 'id')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
function copyClose() {
|
||||
copyjudge.value = false
|
||||
if (copytable.value.length > 0) {
|
||||
ElMessageBox.confirm(
|
||||
'退出后待操作文件将会被清空,您确定要退出吗?',
|
||||
'警告',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
copyjudge.value = false
|
||||
copyarr.value.length = 0
|
||||
pasteing.value = false
|
||||
getdata()
|
||||
})
|
||||
} else {
|
||||
copyjudge.value = false
|
||||
copyarr.value.length = 0
|
||||
pasteing.value = false
|
||||
getdata()
|
||||
}
|
||||
}
|
||||
const copyhandArr = ref([])
|
||||
function copyhand(row: any) {
|
||||
copyhandArr.value = row
|
||||
}
|
||||
function copysomefile() {
|
||||
ElMessageBox.confirm(
|
||||
'您确定要覆盖这些文件吗?',
|
||||
'警告',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
let repeatObj: any = {
|
||||
newPath: '',
|
||||
oldpaths: '',
|
||||
parentId: '',
|
||||
newFileName: [],
|
||||
rename: '',
|
||||
type: '',
|
||||
}
|
||||
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/'
|
||||
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
|
||||
repeatObj.type = '0'
|
||||
copyhandArr.value.forEach((items: any) => {
|
||||
repeatObj.oldpaths = items.workPath
|
||||
repeatObj.newFileName.push(items.fileName)
|
||||
})
|
||||
repeatObj.newFileName = repeatObj.newFileName.join(',')
|
||||
if (copytype.value == "move") {
|
||||
moveFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('移动成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copytable.value = removeItemsFromArray1(copytable.value, copyhandArr.value, 'id')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
copyFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('复制成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copytable.value = removeItemsFromArray1(copytable.value, copyhandArr.value, 'id')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
//粘贴/复制重命名
|
||||
const rename = ref(false)
|
||||
@ -794,8 +992,10 @@ const renameobj = ref({
|
||||
const renameRules = ref({
|
||||
fileName: [{ required: true, message: "请输入文件名称", trigger: "blur" }],
|
||||
});
|
||||
const rowarr: any = ref()
|
||||
function renames(row: any) {
|
||||
rename.value = true
|
||||
rowarr.value = row
|
||||
}
|
||||
function RenameClose() {
|
||||
rename.value = false
|
||||
@ -804,6 +1004,43 @@ async function submitrename(formEl: any) {
|
||||
if (!formEl) return
|
||||
await formEl.validate((valid: any, fields: any) => {
|
||||
if (valid) {
|
||||
//
|
||||
let repeatObj: any = {
|
||||
newPath: '',
|
||||
oldpaths: '',
|
||||
parentId: '',
|
||||
newFileName: [],
|
||||
rename: '',
|
||||
type: '',
|
||||
}
|
||||
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/'
|
||||
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
|
||||
repeatObj.type = '1'
|
||||
repeatObj.oldpaths = rowarr.value.workPath
|
||||
repeatObj.rename = (renameobj.value.fileName)
|
||||
repeatObj.newFileName.push(rowarr.value.fileName)
|
||||
repeatObj.newFileName = repeatObj.newFileName.join(',')
|
||||
if (copytype.value == "move") {
|
||||
moveFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('移动成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copytable.value = removeItemsFromArray1(copytable.value, [rowarr.value], 'id')
|
||||
rename.value = false
|
||||
}
|
||||
})
|
||||
} else {
|
||||
copyFileFolder(repeatObj).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('复制成功')
|
||||
getdata()
|
||||
pasteing.value = false
|
||||
copytable.value = removeItemsFromArray1(copytable.value, [rowarr.value], 'id')
|
||||
rename.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
@ -1281,10 +1518,14 @@ function removeSuffix(filename: any) {
|
||||
<!-- 复制粘贴弹框 -->
|
||||
<el-dialog title="重命名或覆盖" v-model="copyjudge" width="60%" :before-close="copyClose" top="30px" draggable
|
||||
destroy-on-close>
|
||||
<el-table v-loading="loading" :data="copytable"
|
||||
<div style="display: flex;justify-content: end;"><el-button :disabled="copyhandArr.length == 0"
|
||||
type="primary" style="margin-bottom: 20px;" @click="copysomefile">覆盖({{ copyhandArr.length
|
||||
}})</el-button>
|
||||
</div>
|
||||
<el-table v-loading="loading" :data="copytable" @selection-change="copyhand"
|
||||
:header-cell-style="{ background: 'rgb(250 250 250)', height: '50px' }"
|
||||
style="width: 100%; height: calc(100vh - 275px);margin-bottom: 20px;" border>
|
||||
<el-table-column type="index" width="40" />
|
||||
<el-table-column type="selection" width="40" />
|
||||
<!-- <el-table-column type="index" label="序号" width="70" align="center"></el-table-column> -->
|
||||
<el-table-column prop="fileName" label="文件名称"></el-table-column>
|
||||
<el-table-column prop="workPath" label="路径"></el-table-column>
|
||||
|
Loading…
Reference in New Issue
Block a user