mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-02-02 11:08:13 -05:00
🐛 Fix: fix several bugs of manage page and minipage
This commit is contained in:
parent
8d1b8173bd
commit
5dbac8309c
@ -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",
|
||||
|
@ -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
|
||||
|
||||
|
@ -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: 暂无数据
|
||||
|
@ -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: 暫無數據
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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'
|
||||
}
|
||||
|
||||
|
@ -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"
|
||||
|
2
src/universal/types/i18n.d.ts
vendored
2
src/universal/types/i18n.d.ts
vendored
@ -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
|
||||
|
22
yarn.lock
22
yarn.lock
@ -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=
|
||||
|
Loading…
Reference in New Issue
Block a user