Optimize creation of file copies
This commit is contained in:
parent
31273289b5
commit
d3a01062ae
@ -1154,8 +1154,11 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapGetters(["name"]),
|
...mapGetters(["name"]),
|
||||||
gridFilename() {
|
gridFilename() {
|
||||||
|
// 优化文件名,如果文件名过长,则进行截取
|
||||||
return function(item) {
|
return function(item) {
|
||||||
let filename = item.name;
|
let filename = item.name;
|
||||||
|
|
||||||
|
// 如果是文件夹,直接返回文件夹名
|
||||||
if (item.isFolder) {
|
if (item.isFolder) {
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
@ -1165,38 +1168,38 @@ export default {
|
|||||||
let suffix = parts.length > 1 ? parts.pop() : "";
|
let suffix = parts.length > 1 ? parts.pop() : "";
|
||||||
let base = parts.join(".");
|
let base = parts.join(".");
|
||||||
|
|
||||||
// 计算基础名的中文字符长度
|
// 获取文件名的有效长度
|
||||||
let chineseLength = Array.from(base).reduce(
|
let effectiveLength = this.getEffectiveLength(base, suffix);
|
||||||
(count, char) => count + (char.charCodeAt(0) > 255 ? 2 : 1),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
// 如果有后缀,计算有效长度时要加上后缀和点,否则只需要基础名和后7位
|
|
||||||
let effectiveLength = suffix
|
|
||||||
? chineseLength + suffix.length + 1
|
|
||||||
: chineseLength + 7;
|
|
||||||
|
|
||||||
|
// 如果有效长度小于或等于14,则直接返回文件名
|
||||||
if (effectiveLength <= 14) {
|
if (effectiveLength <= 14) {
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算应当截取的长度,如果有后缀,要留出空间给后缀和省略号
|
// 根据是否有后缀来确定需要截取的长度
|
||||||
let sliceLength = 14 - (suffix ? suffix.length + 1 : 7);
|
let sliceLength = 14 - (suffix ? suffix.length + 1 + 1 : 0); // 加1是为了“…”
|
||||||
|
|
||||||
// 截取字符串时需要考虑中文字符
|
|
||||||
let prev = "";
|
let prev = "";
|
||||||
let currentLength = 0;
|
let currentLength = 0;
|
||||||
|
|
||||||
|
// 截取字符串,确保不会在中文字符中间断开
|
||||||
for (let char of Array.from(base)) {
|
for (let char of Array.from(base)) {
|
||||||
let charLength = char.charCodeAt(0) > 255 ? 2 : 1;
|
let charLength = this.getCharLength(char);
|
||||||
|
|
||||||
if (currentLength + charLength > sliceLength) {
|
if (currentLength + charLength > sliceLength) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentLength += charLength;
|
currentLength += charLength;
|
||||||
prev += char;
|
prev += char;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果有后缀,返回 prev + "…" + suffix,否则返回 prev + "…" + base 的后7位
|
// 根据是否有后缀返回相应的格式
|
||||||
return suffix ? prev + "…" + suffix : prev + "…" + base.slice(-7);
|
if (suffix) {
|
||||||
|
return prev + "…" + suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
return prev + "…";
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getSummaries2() {
|
getSummaries2() {
|
||||||
@ -1343,6 +1346,25 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 判断给定的字符是否是中文
|
||||||
|
isChineseChar(char) {
|
||||||
|
return char.charCodeAt(0) > 255;
|
||||||
|
},
|
||||||
|
// 获取字符的长度。中文字符长度为2,其他字符长度为1
|
||||||
|
getCharLength(char) {
|
||||||
|
return this.isChineseChar(char) ? 2 : 1;
|
||||||
|
},
|
||||||
|
// 获取有效长度。如果有后缀,则包括后缀和点的长度;否则是基础名称和后7位的长度
|
||||||
|
getEffectiveLength(base, suffix) {
|
||||||
|
let chineseLength = Array.from(base).reduce(
|
||||||
|
(count, char) => count + this.getCharLength(char),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
return suffix
|
||||||
|
? chineseLength + suffix.length + 1
|
||||||
|
: chineseLength;
|
||||||
|
},
|
||||||
keydown(event) {
|
keydown(event) {
|
||||||
const isMac = navigator.platform.startsWith("Mac");
|
const isMac = navigator.platform.startsWith("Mac");
|
||||||
const { key, c, keyCode, ctrlKey, metaKey } = event;
|
const { key, c, keyCode, ctrlKey, metaKey } = event;
|
||||||
@ -1400,7 +1422,12 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ("createFile" === url) {
|
if ("createFile" === url) {
|
||||||
this.onCreateFilename = fileDoc.$set.name
|
if (fileDoc.$set) {
|
||||||
|
this.onCreateFilename = fileDoc.$set.name;
|
||||||
|
}
|
||||||
|
if (fileDoc && fileDoc.name) {
|
||||||
|
this.onCreateFilename = fileDoc.name;
|
||||||
|
}
|
||||||
if (!this.path) {
|
if (!this.path) {
|
||||||
this.path = "";
|
this.path = "";
|
||||||
}
|
}
|
||||||
@ -2268,9 +2295,6 @@ export default {
|
|||||||
let filenameList = [];
|
let filenameList = [];
|
||||||
fileList.forEach(file => {
|
fileList.forEach(file => {
|
||||||
let fileName = file.name || file.label;
|
let fileName = file.name || file.label;
|
||||||
// if (file.suffix) {
|
|
||||||
// fileName = fileName.substring(0, fileName.lastIndexOf(`.${file.suffix}`))
|
|
||||||
// }
|
|
||||||
filenameList.push(fileName);
|
filenameList.push(fileName);
|
||||||
});
|
});
|
||||||
const newName = newFileName;
|
const newName = newFileName;
|
||||||
@ -2286,6 +2310,40 @@ export default {
|
|||||||
}
|
}
|
||||||
return newFileName;
|
return newFileName;
|
||||||
},
|
},
|
||||||
|
getDuplicateFileName(fileList, filename) {
|
||||||
|
let append = 0
|
||||||
|
let filenameList = []
|
||||||
|
fileList.forEach(file => {
|
||||||
|
let fileName = file.name || file.label
|
||||||
|
filenameList.push(fileName)
|
||||||
|
});
|
||||||
|
let newName = filename
|
||||||
|
while (filenameList.includes(filename)) {
|
||||||
|
append += 1;
|
||||||
|
if (newName.indexOf(".") > 0) {
|
||||||
|
let name = newName.substring(0, newName.lastIndexOf("."))
|
||||||
|
if (name.indexOf(" 副本") > 0) {
|
||||||
|
name = name.substring(0, name.lastIndexOf(" 副本"))
|
||||||
|
}
|
||||||
|
const suffix = newName.substring(newName.lastIndexOf("."))
|
||||||
|
if (append === 1) {
|
||||||
|
filename = `${name} 副本${suffix}`
|
||||||
|
} else {
|
||||||
|
filename = `${name} 副本${append}${suffix}`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (newName.indexOf(" 副本") > 0) {
|
||||||
|
newName = newName.substring(0, newName.lastIndexOf(" 副本"))
|
||||||
|
}
|
||||||
|
if (append === 1) {
|
||||||
|
filename = `${newName} 副本`
|
||||||
|
} else {
|
||||||
|
filename = `${newName} 副本${append}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return filename;
|
||||||
|
},
|
||||||
hideNewFolderName() {
|
hideNewFolderName() {
|
||||||
this.showNewFolder = false;
|
this.showNewFolder = false;
|
||||||
this.isShowNewFolder = false;
|
this.isShowNewFolder = false;
|
||||||
@ -2544,11 +2602,10 @@ export default {
|
|||||||
// }
|
// }
|
||||||
// this.fileListScrollTop = 0
|
// this.fileListScrollTop = 0
|
||||||
// 高亮新增的文件
|
// 高亮新增的文件
|
||||||
if (this.onCreateFilename && this.selectRowData.length < 1) {
|
if (this.onCreateFilename) {
|
||||||
let index = this.fileList.findIndex(item => item.name === this.onCreateFilename);
|
let index = this.fileList.findIndex(item => item.name === this.onCreateFilename);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
let row = this.fileList[index];
|
let row = this.fileList[index];
|
||||||
this.rowContextData = row
|
|
||||||
this.selectRowData.push(row);
|
this.selectRowData.push(row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3393,11 +3450,9 @@ export default {
|
|||||||
* 创建副本
|
* 创建副本
|
||||||
*/
|
*/
|
||||||
duplicate() {
|
duplicate() {
|
||||||
const newFilename = this.getNewFileName(this.fileList, this.rowContextData.name)
|
const newFilename = this.getDuplicateFileName(this.fileList, this.rowContextData.name)
|
||||||
api.duplicateFile({fileId: this.rowContextData.id, newFilename: newFilename}).then(res => {
|
api.duplicateFile({fileId: this.rowContextData.id, newFilename: newFilename}).then(() => {
|
||||||
this.$message.success('创建副本成功')
|
this.$message.success('创建副本成功')
|
||||||
}).catch(err => {
|
|
||||||
this.$message.error('创建副本失败')
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
moveOrCopy() {
|
moveOrCopy() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user