From 2e83e58ef91c8e6e7675d9a16c78e6cbc25ed141 Mon Sep 17 00:00:00 2001 From: jmal Date: Sat, 5 Aug 2023 18:46:24 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=9C=A8grid?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=A7=86=E5=9B=BE=E4=B8=8B=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ShowFile/ShowFile.vue | 46 +++++++++++++++++----------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/components/ShowFile/ShowFile.vue b/src/components/ShowFile/ShowFile.vue index 604d0d4..1d1cb16 100644 --- a/src/components/ShowFile/ShowFile.vue +++ b/src/components/ShowFile/ShowFile.vue @@ -809,28 +809,38 @@ export default { ]), gridFilename() { return function (item) { - let filename = item.name + let filename = item.name; if (item.folder) { - return filename + return filename; } - let sliceLength = 9 - let chineseLength = 0 - for (let i = 0; i < 9; i++) { - let code = filename.charCodeAt(i); - if (code > 255) { - // 如果编码大于255,说明是中文 - chineseLength++ + + // 分离文件名和后缀 + let parts = filename.split("."); + let suffix = parts.pop(); + let base = parts.join('.'); + + let chineseLength = Array.from(base).reduce((count, char) => count + (char.charCodeAt(0) > 255 ? 2 : 1), 0); + + let effectiveLength = chineseLength + suffix.length + 1; // 计算文件名的有效长度,包括后缀和点 + if (effectiveLength <= 14) { + return filename; + } + + let sliceLength = 14 - suffix.length - 2; // 2 是 "…" 的长度 + + // 截取字符串时需要考虑中文字符 + let prev = ''; + let currentLength = 0; + for (let char of Array.from(base)) { + let charLength = char.charCodeAt(0) > 255 ? 2 : 1; + if (currentLength + charLength > sliceLength) { + break; } + currentLength += charLength; + prev += char; } - sliceLength -= Math.ceil(chineseLength / 2) - let suffix = filename.split(".").pop() - let prev = filename.slice(0, sliceLength) - let next = filename.slice(-suffix.length - 1) - let abb = prev + "…" + next - if (abb.length + 1 >= filename.length) { - return filename - } - return prev + "…" + next + + return prev + "…" + suffix; } }, getSummaries2() {