[] = [
- {formatFileName(item.fileName ?? '')}
+ {formatFileName(item.fileName ?? '', 40)}
diff --git a/src/renderer/manage/pages/logIn.vue b/src/renderer/manage/pages/logIn.vue
index 873eab56..9423f1d3 100644
--- a/src/renderer/manage/pages/logIn.vue
+++ b/src/renderer/manage/pages/logIn.vue
@@ -74,9 +74,9 @@
effect="light"
:content="item.alias"
placement="top"
- :disabled="item.alias.length <= 15"
+ :disabled="isNeedToShorten(item.alias)"
>
- {{ item.alias.length > 15 ? item.alias.slice(0, 8) + '...' + item.alias.slice(-6) : item.alias }}
+ {{ isNeedToShorten(item.alias) ? safeSliceF(item.alias, 17) + '...' : item.alias }}
@@ -290,6 +290,7 @@ import { getConfig as getPicBedsConfig } from '@/utils/dataSender'
// 端点地址格式化
import { formatEndpoint } from '~/main/manage/utils/common'
+import { isNeedToShorten, safeSliceF } from '#/utils/common'
// 国际化函数
import { T as $T } from '@/i18n'
@@ -373,7 +374,7 @@ async function handleConfigChange (name: string) {
const aliasList = getAliasList()
const allKeys = Object.keys(supportedPicBedList[name].configOptions)
const resultMap:IStringKeyMap = {}
- const reg = /^[\u4e00-\u9fff_a-zA-Z0-9-]+$/
+ const reg = /^[\p{Unified_Ideograph}_a-zA-Z0-9-]+$/u
for (const key of allKeys) {
const resultKey = name + '.' + key
if (supportedPicBedList[name].configOptions[key].required) {
diff --git a/src/renderer/manage/utils/common.ts b/src/renderer/manage/utils/common.ts
index 6ada5853..6e7ae793 100644
--- a/src/renderer/manage/utils/common.ts
+++ b/src/renderer/manage/utils/common.ts
@@ -14,7 +14,7 @@ import { availableIconList } from './icon'
import { getConfig } from './dataSender'
// 工具函数
-import { handleUrlEncode } from '~/universal/utils/common'
+import { handleUrlEncode, safeSliceF, isNeedToShorten } from '~/universal/utils/common'
export function randomStringGenerator (length: number): string {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
@@ -103,7 +103,7 @@ export function formatFileName (fileName: string, length: number = 20) {
let ext = path.extname(fileName)
ext = ext.length > 5 ? ext.slice(ext.length - 5) : ext
const name = path.basename(fileName, ext)
- return name.length > length ? `${name.slice(0, length)}...${ext}` : fileName
+ return isNeedToShorten(fileName, length) ? `${safeSliceF(name, length - 3 - ext.length)}...${ext}` : fileName
}
export const getExtension = (fileName: string) => path.extname(fileName).slice(1)
diff --git a/src/universal/utils/common.ts b/src/universal/utils/common.ts
index 9875843a..7fdbd239 100644
--- a/src/universal/utils/common.ts
+++ b/src/universal/utils/common.ts
@@ -44,3 +44,24 @@ export const isDev = process.env.NODE_ENV === 'development'
export const trimValues = (obj: T): {[K in keyof T]: T[K] extends string ? string : T[K]} => {
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, typeof value === 'string' ? value.trim() : value])) as {[K in keyof T]: T[K] extends string ? string : T[K]}
}
+
+export function isNeedToShorten (alias: string, cutOff: number = 20) {
+ let totalLen = 0
+ for (const s of alias) {
+ totalLen += s.charCodeAt(0) > 255 ? 2 : 1
+ }
+ return totalLen > cutOff
+}
+
+export function safeSliceF (str:string, total: number) {
+ let result = ''
+ let totalLen = 0
+ for (const s of str) {
+ if (totalLen >= total) {
+ break
+ }
+ result += s
+ totalLen += s.charCodeAt(0) > 255 ? 2 : 1
+ }
+ return result
+}