移动和复制功能
This commit is contained in:
parent
ff1702c338
commit
a93e1bf0c8
@ -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
|
||||||
|
})
|
||||||
|
}
|
251
web/src/views/testdata/datamanagement/index.vue
vendored
251
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 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,16 +774,90 @@ 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>
|
||||||
|
Loading…
Reference in New Issue
Block a user