🐛 Fix: fix several bugs of manage page and minipage

This commit is contained in:
萌萌哒赫萝 2023-05-07 19:16:35 +08:00
parent 8d1b8173bd
commit 5dbac8309c
10 changed files with 103 additions and 44 deletions

View File

@ -44,7 +44,7 @@
"@types/mime-types": "^2.1.1",
"@videojs-player/vue": "^1.0.0",
"ali-oss": "^6.17.1",
"aws-sdk": "^2.1320.0",
"aws-sdk": "^2.1373.0",
"axios": "^1.3.4",
"clipboard-event": "^1.6.0",
"compare-versions": "^4.1.3",

View File

@ -379,7 +379,8 @@ MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: Choose folder
MANAGE_SETTING_COPY_MESSAGE: Copied
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: Cleared successfully
MANAGE_SETTING_CLEAR_CACHE_FAILED: Clear failed
MANAGE_SETTING_ENCODE_URL_WHEN_COPY: Encode URL when copy
MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS: After enabling, the URL will be encoded when copying
# Empty
MANAGE_NO_DATA: No data

View File

@ -381,6 +381,8 @@ MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: 选择目录
MANAGE_SETTING_COPY_MESSAGE: 已复制
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: 清除成功
MANAGE_SETTING_CLEAR_CACHE_FAILED: 清除失败
MANAGE_SETTING_ENCODE_URL_WHEN_COPY: 复制链接时进行URL编码
MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS: 根据平台选择是否开启
# Empty
MANAGE_NO_DATA: 暂无数据

View File

@ -379,7 +379,8 @@ MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: 選擇目錄
MANAGE_SETTING_COPY_MESSAGE: 已複製
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: 清除成功
MANAGE_SETTING_CLEAR_CACHE_FAILED: 清除失敗
MANAGE_SETTING_ENCODE_URL_WHEN_COPY: 複製鏈結時編碼
MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS: 啟用後,複製鏈結時將會編碼
# Empty
MANAGE_NO_DATA: 暫無數據

View File

@ -581,7 +581,9 @@ https://www.baidu.com/img/bd_logo1.png"
size="20"
style="cursor: pointer;"
color="#409EFF"
@click="copyToClipboard(formatLink(item.url, item.fileName, manageStore.config.settings.pasteFormat ?? '$markdown', manageStore.config.settings.customPasteFormat ?? '$url'))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, manageStore.config.settings.pasteFormat ?? '$markdown', manageStore.config.settings.customPasteFormat ?? '$url'))
}"
>
<CopyDocument />
</el-icon>
@ -589,32 +591,44 @@ https://www.baidu.com/img/bd_logo1.png"
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
@click="copyToClipboard(formatLink(item.url, item.fileName, 'url'))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, 'url'))
}"
>
Url
</el-dropdown-item>
<el-dropdown-item
@click="copyToClipboard(formatLink(item.url, item.fileName, 'markdown'))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, 'markdown'))
}"
>
Markdown
</el-dropdown-item>
<el-dropdown-item
@click="copyToClipboard(formatLink(item.url, item.fileName, 'markdown-with-link'))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, 'markdown-with-link'))
}"
>
Markdown-link
</el-dropdown-item>
<el-dropdown-item
@click="copyToClipboard(formatLink(item.url, item.fileName, 'html'))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, 'html'))
}"
>
Html
</el-dropdown-item>
<el-dropdown-item
@click="copyToClipboard(formatLink(item.url, item.fileName, 'bbcode'))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, 'bbcode'))
}"
>
BBCode
</el-dropdown-item>
<el-dropdown-item
@click="copyToClipboard(formatLink(item.url, item.fileName, 'custom', manageStore.config.settings.customPasteFormat))"
@click="async () => {
copyToClipboard(await formatLink(item.url, item.fileName, 'custom', manageStore.config.settings.customPasteFormat))
}"
>
{{ $T('MANAGE_BUCKET_URL_FORMAT_CUSTOM') }}
</el-dropdown-item>
@ -1540,6 +1554,7 @@ function handleUploadKeepDirChange (val: any) {
}
function handleViewChange (val: 'list' | 'grid') {
saveConfig('settings.isShowList', val === 'list')
showFileStyle.value = val
}
@ -1738,7 +1753,8 @@ function renameFileBeforeUpload (filePath: string): string {
const typeMap = {
timestampRename: manageStore.config.settings.timestampRename,
randomStringRename: manageStore.config.settings.randomStringRename,
customRenameFormat: manageStore.config.settings.customRenameFormat
customRenameFormat: manageStore.config.settings.customRenameFormat,
customRename: manageStore.config.settings.customRename
}
return renameFile(typeMap, fileName)
}
@ -2047,7 +2063,7 @@ async function resetParam (force: boolean = false) {
previewedImage.value = ''
isShowFileInfo.value = false
lastChoosed.value = -1
showFileStyle.value = manageStore.config.picBed[configMap.alias].isShowList ? 'list' : 'grid'
showFileStyle.value = manageStore.config.settings.isShowList ? 'list' : 'grid'
if (!isAutoRefresh.value && !force && !paging.value) {
const cachedData = await searchExistFileList()
if (cachedData.length > 0) {
@ -2719,19 +2735,19 @@ function handleBatchCopyInfo () {
ElMessage.success(`${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B')}`)
}
function handleBatchCopyLink (type: string) {
async function handleBatchCopyLink (type: string) {
if (selectedItems.length === 0) {
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG'))
return
}
const result = [] as string[]
selectedItems.forEach((item: any) => {
selectedItems.forEach(async (item: any) => {
if (!item.isDir) {
if (type !== 'preSignedUrl') {
result.push(formatLink(item.url, item.fileName, type, manageStore.config.settings.customPasteFormat))
result.push(await formatLink(item.url, item.fileName, type, manageStore.config.settings.customPasteFormat))
} else {
getPreSignedUrl(item).then((url: string) => {
result.push(formatLink(url, item.fileName, type, manageStore.config.settings.customPasteFormat))
getPreSignedUrl(item).then(async (url: string) => {
result.push(await formatLink(url, item.fileName, type, manageStore.config.settings.customPasteFormat))
}).then(() => {
if (result.length === selectedItems.length) {
clipboard.writeText(result.join('\n'))
@ -3513,7 +3529,7 @@ const columns: Column<any>[] = [
size="20"
style="cursor: pointer;"
color="#409EFF"
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, manageStore.config.settings.pasteFormat ?? '$markdown', manageStore.config.settings.customPasteFormat ?? '$url'))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, manageStore.config.settings.pasteFormat ?? '$markdown', manageStore.config.settings.customPasteFormat ?? '$url'))}
>
<CopyDocument />
</ElIcon>
@ -3521,32 +3537,32 @@ const columns: Column<any>[] = [
dropdown: () => (
<ElDropdownMenu>
<ElDropdownItem
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, 'url'))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, 'url'))}
>
Url
</ElDropdownItem>
<ElDropdownItem
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, 'markdown'))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, 'markdown'))}
>
Markdown
</ElDropdownItem>
<ElDropdownItem
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, 'markdown-with-link'))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, 'markdown-with-link'))}
>
Markdown-link
</ElDropdownItem>
<ElDropdownItem
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, 'html'))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, 'html'))}
>
Html
</ElDropdownItem>
<ElDropdownItem
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, 'bbcode'))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, 'bbcode'))}
>
BBCode
</ElDropdownItem>
<ElDropdownItem
onClick={() => copyToClipboard(formatLink(item.url, item.fileName, 'custom', manageStore.config.settings.customPasteFormat))}
onClick={async () => copyToClipboard(await formatLink(item.url, item.fileName, 'custom', manageStore.config.settings.customPasteFormat))}
>
Custom
</ElDropdownItem>

View File

@ -150,6 +150,31 @@
@change="handleIsForceCustomUrlHttpsChange"
/>
</el-form-item>
<el-form-item>
<template #label>
<span
style="position:absolute;left: 0;"
>
{{ $T('MANAGE_SETTING_ENCODE_URL_WHEN_COPY') }}
<el-tooltip
effect="dark"
:content="$T('MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS')"
placement="right"
>
<el-icon>
<InfoFilled />
</el-icon>
</el-tooltip>
</span>
</template>
<el-switch
v-model="form.isEncodeUrl"
style="position:absolute;right: 0;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsEncodeUrlChange"
/>
</el-form-item>
<el-form-item>
<template #label>
<span
@ -507,6 +532,7 @@ const form = reactive<IStringKeyMap>({
isAutoRefresh: false,
isIgnoreCase: false,
isForceCustomUrlHttps: false,
isEncodeUrl: false,
isShowList: false,
isUploadKeepDirStructure: true,
isDownloadFileKeepDirStructure: false,
@ -577,8 +603,10 @@ async function initData () {
downloadDir.value = config.settings.downloadDir ?? ''
form.isAutoRefresh = config.settings.isAutoRefresh ?? false
form.isShowThumbnail = config.settings.isShowThumbnail ?? false
form.isShowList = config.settings.isShowList ?? false
form.isIgnoreCase = config.settings.isIgnoreCase ?? false
form.isForceCustomUrlHttps = config.settings.isForceCustomUrlHttps ?? true
form.isEncodeUrl = config.settings.isEncodeUrl ?? false
PreSignedExpire.value = config.settings.PreSignedExpire ?? 14400
maxDownloadFileCount.value = config.settings.maxDownloadFileCount ?? 5
form.isUploadKeepDirStructure = config.settings.isUploadKeepDirStructure ?? true
@ -641,6 +669,12 @@ function handleIsForceCustomUrlHttpsChange (val:ICheckBoxValueType) {
})
}
function handleIsEncodeUrlChange (val:ICheckBoxValueType) {
saveConfig({
'settings.isEncodeUrl': val
})
}
function handleTimestampRenameChange (val:ICheckBoxValueType) {
saveConfig({
'settings.timestampRename': val

View File

@ -2,6 +2,8 @@ import { v4 as uuidv4 } from 'uuid'
import path from 'path'
import crypto from 'crypto'
import { availableIconList } from './icon'
import { getConfig } from './dataSender'
import { handleUrlEncode } from '~/universal/utils/common'
export function randomStringGenerator (length: number): string {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
@ -44,13 +46,14 @@ export function renameFile (typeMap : IStringKeyMap, oldName: string): string {
return renameFileNameWithTimestamp(oldName)
} else if (typeMap.randomStringRename) {
return renameFileNameWithRandomString(oldName, 20)
} else {
} else if (typeMap.customRename) {
return renameFileNameWithCustomString(oldName, typeMap.customRenameFormat)
}
return oldName
}
export function formatLink (url: string, fileName: string, type: string, format?: string) : string {
const encodedUrl = encodeURI(url)
export async function formatLink (url: string, fileName: string, type: string, format?: string) : Promise<string> {
const encodedUrl = await getConfig('settings.isEncodeUrl') ? handleUrlEncode(url) : url
switch (type) {
case 'markdown':
return `![${fileName}](${encodedUrl})`
@ -73,7 +76,7 @@ export function formatLink (url: string, fileName: string, type: string, format?
}
export function getFileIconPath (fileName: string) {
const ext = path.extname(fileName).slice(1)
const ext = path.extname(fileName).slice(1).toLowerCase()
return availableIconList.includes(ext) ? `${ext}.webp` : 'unknown.webp'
}

View File

@ -1,12 +1,7 @@
<template>
<div
id="mini-page"
:class="{ linux: os === 'linux' }"
>
<img
:src="logoPath.value ? logoPath.value : require('../assets/squareLogo.png')"
style="width: 100%; height: 100%;border-radius: 50%;"
>
<div
id="upload-area"
:class="{ 'is-dragover': dragover, uploading: showProgress, linux: os === 'linux' }"
@ -15,6 +10,11 @@
@dragover.prevent="dragover = true"
@dragleave.prevent="dragover = false"
>
<img
v-if="!dragover && !showProgress"
:src="logoPath.value ? logoPath.value : require('../assets/squareLogo.png')"
style="width: 100%; height: 100%;border-radius: 50%;"
>
<div
id="upload-dragger"
@dblclick="openUploadWindow"

View File

@ -355,6 +355,8 @@ interface ILocales {
MANAGE_SETTING_COPY_MESSAGE: string
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: string
MANAGE_SETTING_CLEAR_CACHE_FAILED: string
MANAGE_SETTING_ENCODE_URL_WHEN_COPY: string
MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS: string
MANAGE_NO_DATA: string
MANAGE_MAIN_PAGE_NEW_BUCKET: string
MANAGE_MAIN_PAGE_BACK_TO_HOME: string

View File

@ -4535,10 +4535,10 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
aws-sdk@^2.1320.0:
version "2.1320.0"
resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1320.0.tgz#8688b737e0590a5106bbdb0270f6bf0afb83fa99"
integrity sha512-oOsR+ClQZ6hmuAD/fu9gpsGMuLY1xG7m5SE/PDY3ZL4n34dmoXqwhQ3AHT1NTE0Z0sH1th6UqpHeHPS1trMOXw==
aws-sdk@^2.1373.0:
version "2.1373.0"
resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1373.0.tgz#e1e7d5b01498de48dd0cd8c7849c1766c115f13d"
integrity sha512-3/P79VU2VVeiof25bn8TSepEhWCRhwuQGYoEWX/2pApQRJAY+w/3JFVKHjbAe3NYEEBNeiAE6PQ9DqWz5Pp+Lw==
dependencies:
buffer "4.9.2"
events "1.1.1"
@ -4549,7 +4549,7 @@ aws-sdk@^2.1320.0:
url "0.10.3"
util "^0.12.4"
uuid "8.0.0"
xml2js "0.4.19"
xml2js "0.5.0"
aws-sign2@~0.7.0:
version "0.7.0"
@ -14357,13 +14357,13 @@ xml-name-validator@^4.0.0:
resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
xml2js@0.4.19:
version "0.4.19"
resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
xml2js@0.5.0:
version "0.5.0"
resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7"
integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==
dependencies:
sax ">=0.6.0"
xmlbuilder "~9.0.1"
xmlbuilder "~11.0.0"
xml2js@^0.4.16, xml2js@^0.4.19:
version "0.4.23"
@ -14378,7 +14378,7 @@ xmlbuilder@>=11.0.1:
resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
xmlbuilder@^9.0.7, xmlbuilder@~9.0.1:
xmlbuilder@^9.0.7:
version "9.0.7"
resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=