移动和复制功能

This commit is contained in:
wangxk 2025-02-28 16:00:19 +08:00
parent ff1702c338
commit a93e1bf0c8
2 changed files with 263 additions and 6 deletions

View File

@ -143,3 +143,19 @@ export function listTsFiles(params:any){
params:params 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
})
}

View File

@ -12,7 +12,7 @@ import { ElMessageBox, ElMessage, ElMain } from "element-plus";
import Page from '@/components/Pagination/page.vue'; import Page from '@/components/Pagination/page.vue';
import AudioPlayer from '@/components/file/preview/AudioPlayer.vue'; import AudioPlayer from '@/components/file/preview/AudioPlayer.vue';
import { batchDeleteReq } from "@/api/file-operator"; 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 ZUpload from '@/components/file/ZUpload.vue'
import useFileUpload from "@/components/file/file/useFileUpload"; import useFileUpload from "@/components/file/file/useFileUpload";
import useHeaderStorageList from "@/components/header/useHeaderStorageList"; import useHeaderStorageList from "@/components/header/useHeaderStorageList";
@ -745,12 +745,28 @@ const pasteing = ref(false)
const copyarr = ref([]) const copyarr = ref([])
const copytable = ref([]) const copytable = ref([])
const copyjudge = ref(false) const copyjudge = ref(false)
const copytype = ref('')
function copyMove(type: any) { function copyMove(type: any) {
pasteing.value = true pasteing.value = true
copyarr.value = JSON.parse(JSON.stringify(tableIdarr.value)) copyarr.value = JSON.parse(JSON.stringify(tableIdarr.value))
copytype.value = type //copy move
// tableIdarr.value // tableIdarr.value
} }
function paste() { 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 copytable.value.length = 0
if (tableData.value.length > 0) { if (tableData.value.length > 0) {
tableData.value.forEach((item: any) => { tableData.value.forEach((item: any) => {
@ -758,15 +774,89 @@ function paste() {
if (items.fileName == item.fileName) { if (items.fileName == item.fileName) {
copytable.value.push(items) copytable.value.push(items)
copyjudge.value = true copyjudge.value = true
} else {
//
} }
}) })
}) })
} 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) { function copycover(row: any) {
ElMessageBox.confirm( ElMessageBox.confirm(
@ -779,11 +869,119 @@ function copycover(row: any) {
} }
) )
.then(() => { .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() { function copyClose() {
if (copytable.value.length > 0) {
ElMessageBox.confirm(
'退出后待操作文件将会被清空,您确定要退出吗?',
'警告',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
copyjudge.value = false 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) const rename = ref(false)
@ -794,8 +992,10 @@ const renameobj = ref({
const renameRules = ref({ const renameRules = ref({
fileName: [{ required: true, message: "请输入文件名称", trigger: "blur" }], fileName: [{ required: true, message: "请输入文件名称", trigger: "blur" }],
}); });
const rowarr: any = ref()
function renames(row: any) { function renames(row: any) {
rename.value = true rename.value = true
rowarr.value = row
} }
function RenameClose() { function RenameClose() {
rename.value = false rename.value = false
@ -804,6 +1004,43 @@ async function submitrename(formEl: any) {
if (!formEl) return if (!formEl) return
await formEl.validate((valid: any, fields: any) => { await formEl.validate((valid: any, fields: any) => {
if (valid) { 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 <el-dialog title="重命名或覆盖" v-model="copyjudge" width="60%" :before-close="copyClose" top="30px" draggable
destroy-on-close> 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' }" :header-cell-style="{ background: 'rgb(250 250 250)', height: '50px' }"
style="width: 100%; height: calc(100vh - 275px);margin-bottom: 20px;" border> 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 type="index" label="序号" width="70" align="center"></el-table-column> -->
<el-table-column prop="fileName" label="文件名称"></el-table-column> <el-table-column prop="fileName" label="文件名称"></el-table-column>
<el-table-column prop="workPath" label="路径"></el-table-column> <el-table-column prop="workPath" label="路径"></el-table-column>