Merge branch 'dev' into release

This commit is contained in:
萌萌哒赫萝 2023-09-11 07:32:07 -07:00
commit c24d6b9b0a
23 changed files with 924 additions and 761 deletions

View File

@ -1,3 +1,20 @@
# :tada: 2.6.0 (2023-09-11)
### :sparkles: Features
* batch rename in gallery will not modify un-matched files ([079b034](https://github.com/Kuingsmile/PicList/commit/079b034))
* optimize memory use and loading and searching speed of manage page for 30 fold ([fb070e7](https://github.com/Kuingsmile/PicList/commit/fb070e7))
* optimize title text jump action of upload page ([dfb6f76](https://github.com/Kuingsmile/PicList/commit/dfb6f76))
### :zap: Performance Improvements
* fix memory leak of main page ([5392d9e](https://github.com/Kuingsmile/PicList/commit/5392d9e))
* fix memory leak of uoload and setting page ([219cbbb](https://github.com/Kuingsmile/PicList/commit/219cbbb))
## :tada: 2.5.3 (2023-09-07) ## :tada: 2.5.3 (2023-09-07)

View File

@ -1,6 +1,6 @@
{ {
"name": "piclist", "name": "piclist",
"version": "2.5.3", "version": "2.6.0",
"author": { "author": {
"name": "Kuingsmile", "name": "Kuingsmile",
"email": "pkukuing@gmail.com" "email": "pkukuing@gmail.com"
@ -34,26 +34,26 @@
"lint:dpdm": "dpdm -T --tsconfig ./tsconfig.json --no-tree --no-warning --exit-code circular:1 src/background.ts" "lint:dpdm": "dpdm -T --tsconfig ./tsconfig.json --no-tree --no-warning --exit-code circular:1 src/background.ts"
}, },
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "^3.405.0", "@aws-sdk/client-s3": "^3.409.0",
"@aws-sdk/lib-storage": "^3.405.0", "@aws-sdk/lib-storage": "^3.409.0",
"@aws-sdk/s3-request-presigner": "^3.405.0", "@aws-sdk/s3-request-presigner": "^3.409.0",
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"@highlightjs/vue-plugin": "^2.1.0", "@highlightjs/vue-plugin": "^2.1.0",
"@nodelib/fs.walk": "^2.0.0", "@nodelib/fs.walk": "^2.0.0",
"@octokit/rest": "^19.0.7", "@octokit/rest": "^19.0.7",
"@picgo/i18n": "^1.0.0", "@picgo/i18n": "^1.0.0",
"@picgo/store": "^2.0.4", "@picgo/store": "^2.1.0",
"@smithy/node-http-handler": "^2.0.5", "@smithy/node-http-handler": "^2.1.2",
"@types/mime-types": "^2.1.1", "@types/mime-types": "^2.1.1",
"@videojs-player/vue": "^1.0.0", "@videojs-player/vue": "^1.0.0",
"ali-oss": "^6.18.0", "ali-oss": "^6.18.1",
"axios": "^1.5.0", "axios": "^1.5.0",
"compare-versions": "^4.1.3", "compare-versions": "^4.1.3",
"core-js": "^3.32.1", "core-js": "^3.32.2",
"cos-nodejs-sdk-v5": "^2.12.4", "cos-nodejs-sdk-v5": "^2.12.4",
"dexie": "^3.2.4", "dexie": "^3.2.4",
"electron-updater": "^6.1.4", "electron-updater": "^6.1.4",
"element-plus": "^2.3.9", "element-plus": "2.3.12",
"epipebomb": "^1.0.0", "epipebomb": "^1.0.0",
"fast-xml-parser": "^4.2.7", "fast-xml-parser": "^4.2.7",
"form-data": "^4.0.0", "form-data": "^4.0.0",
@ -68,7 +68,7 @@
"mitt": "^3.0.1", "mitt": "^3.0.1",
"node-ssh-no-cpu-features": "^1.0.1", "node-ssh-no-cpu-features": "^1.0.1",
"nodejs-file-downloader": "^4.12.1", "nodejs-file-downloader": "^4.12.1",
"piclist": "^1.0.3", "piclist": "^1.0.4",
"pinia": "^2.1.6", "pinia": "^2.1.6",
"pinia-plugin-persistedstate": "^3.2.0", "pinia-plugin-persistedstate": "^3.2.0",
"qiniu": "^7.9.0", "qiniu": "^7.9.0",
@ -97,13 +97,13 @@
"@types/lowdb": "^1.0.12", "@types/lowdb": "^1.0.12",
"@types/node": "^16.10.2", "@types/node": "^16.10.2",
"@types/request-promise-native": "^1.0.18", "@types/request-promise-native": "^1.0.18",
"@types/semver": "^7.5.0", "@types/semver": "^7.5.1",
"@types/tunnel": "^0.0.3", "@types/tunnel": "^0.0.3",
"@types/upyun": "^3.4.1", "@types/upyun": "^3.4.1",
"@types/uuid": "^9.0.3", "@types/uuid": "^9.0.3",
"@types/write-file-atomic": "^4.0.0", "@types/write-file-atomic": "^4.0.0",
"@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/eslint-plugin": "^6.6.0",
"@typescript-eslint/parser": "^6.5.0", "@typescript-eslint/parser": "^6.6.0",
"@vue/cli-plugin-babel": "^5.0.8", "@vue/cli-plugin-babel": "^5.0.8",
"@vue/cli-plugin-eslint": "^5.0.8", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/cli-plugin-router": "^5.0.8", "@vue/cli-plugin-router": "^5.0.8",
@ -112,13 +112,13 @@
"@vue/eslint-config-standard": "^8.0.1", "@vue/eslint-config-standard": "^8.0.1",
"@vue/eslint-config-typescript": "^11.0.3", "@vue/eslint-config-typescript": "^11.0.3",
"@vue/runtime-dom": "^3.3.4", "@vue/runtime-dom": "^3.3.4",
"conventional-changelog": "^5.0.0", "conventional-changelog": "^5.1.0",
"cz-customizable": "^7.0.0", "cz-customizable": "^7.0.0",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"dpdm": "^3.13.1", "dpdm": "^3.13.1",
"electron": "^22.0.2", "electron": "^22.0.2",
"electron-devtools-installer": "^3.2.0", "electron-devtools-installer": "^3.2.0",
"eslint": "^8.48.0", "eslint": "^8.49.0",
"eslint-config-standard": ">=16.0.0", "eslint-config-standard": ">=16.0.0",
"eslint-plugin-import": "^2.28.1", "eslint-plugin-import": "^2.28.1",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
@ -126,7 +126,7 @@
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.17.0",
"husky": "^3.1.0", "husky": "^3.1.0",
"node-loader": "^2.0.0", "node-loader": "^2.0.0",
"npm-check-updates": "^16.13.2", "npm-check-updates": "^16.13.3",
"stylus": "^0.59.0", "stylus": "^0.59.0",
"stylus-loader": "^7.1.3", "stylus-loader": "^7.1.3",
"typescript": "^4.9.5", "typescript": "^4.9.5",

View File

@ -249,7 +249,7 @@ SETTINGS_SYNC_CONFIG_SELECT_BOTH: Both configuration and gallery files
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: username SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: username
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: username SETTINGS_SYNC_CONFIG_GITEE_USERNAME: username
SETTINGS_SYNC_CONFIG_GITHUB_REPO: repository (private) SETTINGS_SYNC_CONFIG_GITHUB_REPO: repository (private)
SETTINGS_SYNC_CONFIG_GITEE_REPO: repository (private) SETTINGS_SYNC_CONFIG_GITEE_REPO: repository path
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: branch SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: branch
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: branch SETTINGS_SYNC_CONFIG_GITEE_BRANCH: branch
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: Token SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: Token
@ -676,7 +676,7 @@ MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: 'e.g. bucket1'
MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration
MANAGE_LOGIN_PAGE_PANE_NAME: Saved Config MANAGE_LOGIN_PAGE_PANE_NAME: Saved Config
MANAGE_LOGIN_PAGE_PANE_DESC: Click on the icon or alias to view details, Enter to view the file page, Delete to remove the configuration MANAGE_LOGIN_PAGE_PANE_DESC: Click on the icon or alias to view details
MANAGE_LOGIN_PAGE_PANE_LOADING: Importing... MANAGE_LOGIN_PAGE_PANE_LOADING: Importing...
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: Configuration MANAGE_LOGIN_PAGE_PANE_KEY_NAME: Configuration
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: Value MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: Value
@ -725,6 +725,7 @@ MANAGE_BUCKET_SORT_SIZE: Size
MANAGE_BUCKET_SORT_TYPE: Type MANAGE_BUCKET_SORT_TYPE: Type
MANAGE_BUCKET_SORT_TIME: Time MANAGE_BUCKET_SORT_TIME: Time
MANAGE_BUCKET_SORT_SELECTED: Selected status MANAGE_BUCKET_SORT_SELECTED: Selected status
MANAGE_BUCKET_INIT: Init
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: Please enter URL(s), support multiple URLs separated by line breaks MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: Please enter URL(s), support multiple URLs separated by line breaks
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: Confirm MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: Confirm
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: Cancel MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: Cancel

View File

@ -252,7 +252,7 @@ SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置文件和相册文件
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: GitHub用户名 SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: GitHub用户名
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: Gitee用户名 SETTINGS_SYNC_CONFIG_GITEE_USERNAME: Gitee用户名
SETTINGS_SYNC_CONFIG_GITHUB_REPO: 仓库(私有) SETTINGS_SYNC_CONFIG_GITHUB_REPO: 仓库(私有)
SETTINGS_SYNC_CONFIG_GITEE_REPO: 仓库(私有) SETTINGS_SYNC_CONFIG_GITEE_REPO: 仓库路径名
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub分支 SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub分支
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee分支 SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee分支
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token
@ -680,7 +680,7 @@ MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此处不可修改,仅为软件兼容性
MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置 MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置
MANAGE_LOGIN_PAGE_PANE_DESC: 点击图标和别名可查看详情,点击进入可查看文件页面,点击删除可删除配置 MANAGE_LOGIN_PAGE_PANE_DESC: 点击图标和别名可查看详情
MANAGE_LOGIN_PAGE_PANE_LOADING: 导入配置... MANAGE_LOGIN_PAGE_PANE_LOADING: 导入配置...
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配置项 MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配置项
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: MANAGE_LOGIN_PAGE_PANE_KEY_VALUE:
@ -729,6 +729,7 @@ MANAGE_BUCKET_SORT_SIZE: 大小
MANAGE_BUCKET_SORT_TYPE: 类型 MANAGE_BUCKET_SORT_TYPE: 类型
MANAGE_BUCKET_SORT_TIME: 时间 MANAGE_BUCKET_SORT_TIME: 时间
MANAGE_BUCKET_SORT_SELECTED: 选中状态 MANAGE_BUCKET_SORT_SELECTED: 选中状态
MANAGE_BUCKET_INIT: 初始化
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: 请输入URL支持多个URL以换行分隔 MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: 请输入URL支持多个URL以换行分隔
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: 确定 MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: 确定
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取消 MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取消

View File

@ -250,7 +250,7 @@ SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置檔案和相簿檔案
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: 用戶名 SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: 用戶名
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: 用戶名 SETTINGS_SYNC_CONFIG_GITEE_USERNAME: 用戶名
SETTINGS_SYNC_CONFIG_GITHUB_REPO: 儲存庫(私有) SETTINGS_SYNC_CONFIG_GITHUB_REPO: 儲存庫(私有)
SETTINGS_SYNC_CONFIG_GITEE_REPO: 儲存庫(私有) SETTINGS_SYNC_CONFIG_GITEE_REPO: 儲存庫路径
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub 分支 SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub 分支
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee 分支 SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee 分支
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token
@ -676,7 +676,7 @@ MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: '例如bucket1'
MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量 MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量
MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置 MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置
MANAGE_LOGIN_PAGE_PANE_DESC: 點擊圖標和別名可查看詳情,點擊進入可查看檔案頁面,點擊刪除可刪除配置 MANAGE_LOGIN_PAGE_PANE_DESC: 點擊圖標和別名可查看詳情
MANAGE_LOGIN_PAGE_PANE_LOADING: 導入配置... MANAGE_LOGIN_PAGE_PANE_LOADING: 導入配置...
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配置項 MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配置項
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: MANAGE_LOGIN_PAGE_PANE_KEY_VALUE:
@ -725,6 +725,7 @@ MANAGE_BUCKET_SORT_SIZE: 大小
MANAGE_BUCKET_SORT_TYPE: 類型 MANAGE_BUCKET_SORT_TYPE: 類型
MANAGE_BUCKET_SORT_TIME: 時間 MANAGE_BUCKET_SORT_TIME: 時間
MANAGE_BUCKET_SORT_SELECTED: 選取狀態 MANAGE_BUCKET_SORT_SELECTED: 選取狀態
MANAGE_BUCKET_INIT: 初始化
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: 請輸入 URL支援多個 URL以換行分隔 MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: 請輸入 URL支援多個 URL以換行分隔
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: 確定 MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: 確定
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取消 MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取消

View File

@ -10,6 +10,7 @@ import {
import { import {
createProtocol createProtocol
} from 'vue-cli-plugin-electron-builder/lib' } from 'vue-cli-plugin-electron-builder/lib'
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
import beforeOpen from '~/main/utils/beforeOpen' import beforeOpen from '~/main/utils/beforeOpen'
import ipcList from '~/main/events/ipcList' import ipcList from '~/main/events/ipcList'
import busEventList from '~/main/events/busEventList' import busEventList from '~/main/events/busEventList'
@ -137,6 +138,13 @@ class LifeCycle {
const readyFunction = async () => { const readyFunction = async () => {
console.log('on ready') console.log('on ready')
createProtocol('picgo') createProtocol('picgo')
if (isDevelopment && !process.env.IS_TEST) {
try {
await installExtension(VUEJS_DEVTOOLS)
} catch (e: any) {
console.error('Vue Devtools failed to install:', e.toString())
}
}
windowManager.create(IWindowList.TRAY_WINDOW) windowManager.create(IWindowList.TRAY_WINDOW)
windowManager.create(IWindowList.SETTING_WINDOW) windowManager.create(IWindowList.SETTING_WINDOW)
const isAutoListenClipboard = db.get('settings.isAutoListenClipboard') || false const isAutoListenClipboard = db.get('settings.isAutoListenClipboard') || false

View File

@ -36,6 +36,8 @@
class="item" class="item"
effect="dark" effect="dark"
placement="right" placement="right"
:persistent="false"
teleported
> >
<template #content> <template #content>
<span <span
@ -60,6 +62,8 @@
v-else-if="item.type === 'list' && item.choices" v-else-if="item.type === 'list' && item.choices"
v-model="ruleForm[item.name]" v-model="ruleForm[item.name]"
:placeholder="item.message || item.name" :placeholder="item.message || item.name"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="choice in item.choices" v-for="choice in item.choices"
@ -74,6 +78,8 @@
:placeholder="item.message || item.name" :placeholder="item.message || item.name"
multiple multiple
collapse-tags collapse-tags
:persistent="false"
teleported
> >
<el-option <el-option
v-for="choice in item.choices" v-for="choice in item.choices"

View File

@ -39,6 +39,8 @@
v-else-if="item.type === 'list' && item.choices" v-else-if="item.type === 'list' && item.choices"
v-model="ruleForm[item.name]" v-model="ruleForm[item.name]"
:placeholder="item.message || item.name" :placeholder="item.message || item.name"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="choice in item.choices" v-for="choice in item.choices"
@ -53,6 +55,8 @@
:placeholder="item.message || item.name" :placeholder="item.message || item.name"
multiple multiple
collapse-tags collapse-tags
:persistent="false"
teleported
> >
<el-option <el-option
v-for="choice in item.choices" v-for="choice in item.choices"

View File

@ -3,6 +3,7 @@
v-model="showInputBoxVisible" v-model="showInputBoxVisible"
:title="inputBoxOptions.title || $T('INPUT')" :title="inputBoxOptions.title || $T('INPUT')"
:modal-append-to-body="false" :modal-append-to-body="false"
append-to-body
> >
<el-input <el-input
v-model="inputBoxValue" v-model="inputBoxValue"

View File

@ -9,6 +9,8 @@
effect="dark" effect="dark"
:content="props.tooltips" :content="props.tooltips"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon style="margin-left: 4px"> <el-icon style="margin-left: 4px">
<QuestionFilled /> <QuestionFilled />

View File

@ -165,6 +165,7 @@
:title="$T('SPONSOR_PICLIST')" :title="$T('SPONSOR_PICLIST')"
width="70%" width="70%"
top="10vh" top="10vh"
append-to-body
> >
{{ $T('PICLIST_SPONSOR_TEXT') }} {{ $T('PICLIST_SPONSOR_TEXT') }}
<el-row class="support"> <el-row class="support">
@ -198,6 +199,7 @@
:title="$T('PICBED_QRCODE')" :title="$T('PICBED_QRCODE')"
:modal-append-to-body="false" :modal-append-to-body="false"
lock-scroll lock-scroll
append-to-body
> >
<el-form <el-form
label-position="left" label-position="left"
@ -211,6 +213,8 @@
v-model="choosedPicBedForQRCode" v-model="choosedPicBedForQRCode"
multiple multiple
collapse-tags collapse-tags
:persistent="false"
teleported
> >
<el-option <el-option
v-for="item in picBed" v-for="item in picBed"

View File

@ -19,6 +19,8 @@
v-model="currentCustomDomain" v-model="currentCustomDomain"
:placeholder="$T('MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER')" :placeholder="$T('MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER')"
style="width: 200px;" style="width: 200px;"
:persistent="false"
teleported
@change="handleChangeCustomUrl" @change="handleChangeCustomUrl"
> >
<el-option <el-option
@ -54,6 +56,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="icon" class="icon"
@ -74,6 +78,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="icon" class="icon"
@ -97,6 +103,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="icon" class="icon"
@ -117,6 +125,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="icon" class="icon"
@ -137,6 +147,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="icon" class="icon"
@ -155,8 +167,12 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP')"
placement="right" placement="right"
:persistent="false"
teleported
>
<el-dropdown
teleported
> >
<el-dropdown>
<el-icon <el-icon
class="icon" class="icon"
size="25px" size="25px"
@ -196,6 +212,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="icon" class="icon"
@ -219,6 +237,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP')" :content="$T('MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP')"
placement="bottom" placement="bottom"
:persistent="false"
teleported
> >
<el-icon <el-icon
id="refresh" id="refresh"
@ -237,7 +257,6 @@
style="margin-left: 10px;width: 200px;" style="margin-left: 10px;width: 200px;"
clearable clearable
size="small" size="small"
@clear="searchText = ''"
/> />
</div> </div>
<div class="header-dir-view"> <div class="header-dir-view">
@ -299,7 +318,7 @@
</div> </div>
</div> </div>
<div <div
v-show="selectedItems.length === 0" v-if="selectedItems.length === 0"
class="header-buttom-view" class="header-buttom-view"
> >
<el-button <el-button
@ -314,7 +333,7 @@
</el-button> </el-button>
</div> </div>
<div <div
v-show="selectedItems.length > 0" v-if="selectedItems.length > 0"
class="header-buttom-view" class="header-buttom-view"
> >
<el-button <el-button
@ -368,7 +387,9 @@
{{ `${$T('MANAGE_BUCKET_DELETE_BTN')}${selectedItems.length}` }} {{ `${$T('MANAGE_BUCKET_DELETE_BTN')}${selectedItems.length}` }}
</el-button> </el-button>
</div> </div>
<el-dropdown> <el-dropdown
teleported
>
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
@ -393,6 +414,9 @@
<el-dropdown-item @click="sortFile('check')"> <el-dropdown-item @click="sortFile('check')">
{{ $T('MANAGE_BUCKET_SORT_SELECTED') }} {{ $T('MANAGE_BUCKET_SORT_SELECTED') }}
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item @click="sortFile('init')">
{{ $T('MANAGE_BUCKET_INIT') }}
</el-dropdown-item>
</template> </template>
</el-dropdown> </el-dropdown>
<el-button-group <el-button-group
@ -428,6 +452,7 @@
draggable draggable
center center
align-center align-center
append-to-body
> >
<el-input <el-input
v-model="urlToUpload" v-model="urlToUpload"
@ -451,7 +476,7 @@ https://www.baidu.com/img/bd_logo1.png"
</template> </template>
</el-dialog> </el-dialog>
<div <div
v-show="layoutStyle === 'list'" v-if="layoutStyle === 'list'"
class="layout-table" class="layout-table"
style="margin: 0 15px 15px 15px;overflow-y: auto;overflow-x: hidden;height: 80vh;" style="margin: 0 15px 15px 15px;overflow-y: auto;overflow-x: hidden;height: 80vh;"
> >
@ -462,7 +487,7 @@ https://www.baidu.com/img/bd_logo1.png"
<el-table-v2 <el-table-v2
ref="fileTable" ref="fileTable"
:columns="columns " :columns="columns "
:data="currentPageFilesInfo" :data="filterList"
:row-class="rowClass" :row-class="rowClass"
:width="width" :width="width"
:height="height" :height="height"
@ -471,7 +496,7 @@ https://www.baidu.com/img/bd_logo1.png"
</el-auto-resizer> </el-auto-resizer>
</div> </div>
<div <div
v-show="layoutStyle === 'grid'" v-if="layoutStyle === 'grid'"
class="layout-grid" class="layout-grid"
style="margin: 0 15px 15px 15px;overflow-y: auto;overflow-x: hidden;height: 80vh;" style="margin: 0 15px 15px 15px;overflow-y: auto;overflow-x: hidden;height: 80vh;"
> >
@ -482,7 +507,7 @@ https://www.baidu.com/img/bd_logo1.png"
:gutter="16" :gutter="16"
> >
<el-col <el-col
v-for="(item,index) in currentPageFilesInfo" v-for="(item,index) in filterList"
:key="index" :key="index"
:xs="24" :xs="24"
:sm="12" :sm="12"
@ -491,7 +516,6 @@ https://www.baidu.com/img/bd_logo1.png"
:xl="2" :xl="2"
> >
<el-card <el-card
v-if="item.match || !searchText"
:body-style="{ padding: '0px', height: '150px', width: '100%', background: item.checked ? '#f2f2f2' : '#fff' }" :body-style="{ padding: '0px', height: '150px', width: '100%', background: item.checked ? '#f2f2f2' : '#fff' }"
style="margin-bottom: 10px;" style="margin-bottom: 10px;"
shadow="hover" shadow="hover"
@ -555,6 +579,8 @@ https://www.baidu.com/img/bd_logo1.png"
placement="top" placement="top"
effect="light" effect="light"
:content="item.fileName" :content="item.fileName"
:persistent="false"
teleported
> >
<el-link <el-link
style="font-size: 12px;font-family: Arial, Helvetica, sans-serif;" style="font-size: 12px;font-family: Arial, Helvetica, sans-serif;"
@ -589,7 +615,9 @@ https://www.baidu.com/img/bd_logo1.png"
> >
<Download /> <Download />
</el-icon> </el-icon>
<el-dropdown> <el-dropdown
teleported
>
<template #default> <template #default>
<el-icon <el-icon
size="15" size="15"
@ -677,7 +705,7 @@ https://www.baidu.com/img/bd_logo1.png"
<el-checkbox <el-checkbox
v-model="item.checked" v-model="item.checked"
size="large" size="large"
@change="handleCheckChange(item)" @change="handleCheckChangeOther(item)"
/> />
</el-row> </el-row>
</el-card> </el-card>
@ -699,6 +727,7 @@ https://www.baidu.com/img/bd_logo1.png"
center center
align-center align-center
draggable draggable
append-to-body
> >
<template #header> <template #header>
<el-button <el-button
@ -767,6 +796,7 @@ https://www.baidu.com/img/bd_logo1.png"
<el-drawer <el-drawer
v-model="isShowUploadPanel" v-model="isShowUploadPanel"
size="60%" size="60%"
append-to-body
@open="startRefreshUploadTask" @open="startRefreshUploadTask"
@close="stopRefreshUploadTask" @close="stopRefreshUploadTask"
> >
@ -788,7 +818,7 @@ https://www.baidu.com/img/bd_logo1.png"
@click="openFileSelectDialog" @click="openFileSelectDialog"
> >
<div <div
v-show="!tableData.length" v-if="!tableData.length"
id="upload-dragger" id="upload-dragger"
style="position: relative;top: 0;right: 0;heigth: 100%;width: 100%;display: flex;justify-content: center;align-items: center;" style="position: relative;top: 0;right: 0;heigth: 100%;width: 100%;display: flex;justify-content: center;align-items: center;"
> >
@ -841,6 +871,7 @@ https://www.baidu.com/img/bd_logo1.png"
<el-tabs <el-tabs
v-model="activeUpLoadTab" v-model="activeUpLoadTab"
stretch stretch
lazy
> >
<el-tab-pane <el-tab-pane
name="uploading" name="uploading"
@ -1007,12 +1038,14 @@ https://www.baidu.com/img/bd_logo1.png"
v-model="isShowDownloadPanel" v-model="isShowDownloadPanel"
:title="$T('MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE')" :title="$T('MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE')"
size="60%" size="60%"
append-to-body
@open="startRefreshDownloadTask" @open="startRefreshDownloadTask"
@close="stopRefreshDownloadTask" @close="stopRefreshDownloadTask"
> >
<el-tabs <el-tabs
v-model="activeDownLoadTab" v-model="activeDownLoadTab"
stretch stretch
lazy
> >
<el-tab-pane <el-tab-pane
name="downloading" name="downloading"
@ -1209,6 +1242,7 @@ https://www.baidu.com/img/bd_logo1.png"
close-on-press-escape close-on-press-escape
show-close show-close
destroy-on-close destroy-on-close
append-to-body
> >
<div <div
style="-webkit-user-select: text" style="-webkit-user-select: text"
@ -1233,6 +1267,7 @@ https://www.baidu.com/img/bd_logo1.png"
close-on-press-escape close-on-press-escape
show-close show-close
destroy-on-close destroy-on-close
append-to-body
> >
<highlightjs <highlightjs
style="-webkit-user-select: text;" style="-webkit-user-select: text;"
@ -1258,6 +1293,7 @@ https://www.baidu.com/img/bd_logo1.png"
close-on-press-escape close-on-press-escape
show-close show-close
destroy-on-close destroy-on-close
append-to-body
> >
<video-player <video-player
:src="videoFileUrl" :src="videoFileUrl"
@ -1285,6 +1321,7 @@ https://www.baidu.com/img/bd_logo1.png"
align-center align-center
draggable draggable
destroy-on-close destroy-on-close
append-to-body
@close="() => { @close="() => {
isSingleRename = false isSingleRename = false
isRenameIncludeExt = false isRenameIncludeExt = false
@ -1295,11 +1332,13 @@ https://www.baidu.com/img/bd_logo1.png"
style="margin-bottom: 10px;" style="margin-bottom: 10px;"
> >
<span> <span>
{{ $T('MANAGE_BUCKET_RENAME_FILE_INPUT_A') }} {{ $T('MANAGE_BUCKET_RENAME_FILE_INPUT_A') }} - Matched: {{ matchedFilesNumber }}
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS')" :content="$T('MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon <el-icon
color="#409EFF" color="#409EFF"
@ -1324,6 +1363,8 @@ https://www.baidu.com/img/bd_logo1.png"
effect="light" effect="light"
placement="right" placement="right"
width="280" width="280"
:persistent="false"
teleported
> >
<template #reference> <template #reference>
<el-icon <el-icon
@ -1381,6 +1422,8 @@ https://www.baidu.com/img/bd_logo1.png"
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_RENAME_FILE_EXT_TIPS')" :content="$T('MANAGE_BUCKET_RENAME_FILE_EXT_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon <el-icon
color="#409EFF" color="#409EFF"
@ -1527,6 +1570,8 @@ const linkFormatArray = [
{ key: 'Custom', value: 'custom' } { key: 'Custom', value: 'custom' }
] ]
type sortTypeList = 'name' | 'size' | 'time' | 'ext' | 'check' | 'init'
// //
const route = useRoute() const route = useRoute()
// //
@ -1555,7 +1600,6 @@ const fileSortSizeReverse = ref(false)
const fileSortTimeReverse = ref(false) const fileSortTimeReverse = ref(false)
// //
const searchText = ref('') const searchText = ref('')
const selectedItems = reactive([] as any[])
// //
const isDragover = ref(false) const isDragover = ref(false)
const tableData = reactive([] as any[]) const tableData = reactive([] as any[])
@ -1584,7 +1628,13 @@ const dialogVisible = ref(false)
const urlToUpload = ref('') const urlToUpload = ref('')
// //
const previewedImage = ref('') const previewedImage = ref('')
const ImagePreviewList = computed(() => currentPageFilesInfo.filter(item => item.isImage).map(item => item.url)) const filterList = computed(() => {
return getList()
})
const selectedItems = computed(() => filterList.value.filter(item => item.checked))
const ImagePreviewList = computed(() => filterList.value.filter(item => item.isImage).map(item => item.url))
const getCurrentPreviewIndex = computed(() => ImagePreviewList.value.indexOf(previewedImage.value)) const getCurrentPreviewIndex = computed(() => ImagePreviewList.value.indexOf(previewedImage.value))
// //
const isShiftKeyPress = ref<boolean>(false) const isShiftKeyPress = ref<boolean>(false)
@ -1626,6 +1676,19 @@ const isShowCreateNewFolder = computed(() => ['aliyun', 'github', 'local', 'qini
const isShowPresignedUrl = computed(() => ['aliyun', 'github', 'qiniu', 's3plist', 'tcyun', 'webdavplist'].includes(currentPicBedName.value)) const isShowPresignedUrl = computed(() => ['aliyun', 'github', 'qiniu', 's3plist', 'tcyun', 'webdavplist'].includes(currentPicBedName.value))
function getList () {
if (!searchText.value) {
return currentPageFilesInfo
}
return currentPageFilesInfo.filter((item: any) => {
if (isIgnoreCase.value) {
return item.fileName.toLowerCase().includes(searchText.value.toLowerCase())
} else {
return item.fileName.includes(searchText.value)
}
})
}
// //
function handleUploadKeepDirChange (val: any) { function handleUploadKeepDirChange (val: any) {
@ -1762,7 +1825,7 @@ function webkitReadDataTransfer (dataTransfer: DataTransfer) {
entry.file((file: any) => { entry.file((file: any) => {
readFiles(file, entry.fullPath) readFiles(file, entry.fullPath)
}, (err: any) => { }, (err: any) => {
console.log(err) console.error(err)
}) })
} else if (entry.isDirectory) { } else if (entry.isDirectory) {
readDirectory(entry.createReader()) readDirectory(entry.createReader())
@ -1773,7 +1836,7 @@ function webkitReadDataTransfer (dataTransfer: DataTransfer) {
decrement() decrement()
} }
}, (err: any) => { }, (err: any) => {
console.log(err) console.error(err)
}) })
} }
@ -2155,7 +2218,6 @@ async function resetParam (force: boolean = false) {
currentPageNumber.value = 1 currentPageNumber.value = 1
currentPageFilesInfo.length = 0 currentPageFilesInfo.length = 0
currentDownloadFileList.length = 0 currentDownloadFileList.length = 0
selectedItems.length = 0
searchText.value = '' searchText.value = ''
urlToUpload.value = '' urlToUpload.value = ''
dialogVisible.value = false dialogVisible.value = false
@ -2172,10 +2234,8 @@ async function resetParam (force: boolean = false) {
const cachedData = await searchExistFileList() const cachedData = await searchExistFileList()
if (cachedData.length > 0) { if (cachedData.length > 0) {
currentPageFilesInfo.push(...cachedData[0].value.fullList) currentPageFilesInfo.push(...cachedData[0].value.fullList)
const sortType = localStorage.getItem('sortType') as 'name' | 'size' | 'time' | 'ext' | 'check' | 'init' || '' const sortType = localStorage.getItem('sortType') as sortTypeList || 'init'
if (['name', 'time', 'size', 'ext'].includes(sortType as string)) {
sortFile(sortType) sortFile(sortType)
}
isShowLoadingPage.value = false isShowLoadingPage.value = false
return return
} }
@ -2183,14 +2243,9 @@ async function resetParam (force: boolean = false) {
if (paging.value) { if (paging.value) {
const res = await getBucketFileList() as IStringKeyMap const res = await getBucketFileList() as IStringKeyMap
if (res.success) { if (res.success) {
res.fullList.sort((a: any, b: any) => {
return b.isDir - a.isDir || a.fileName.localeCompare(b.fileName)
})
currentPageFilesInfo.push(...res.fullList) currentPageFilesInfo.push(...res.fullList)
const sortType = localStorage.getItem('sortType') as 'name' | 'size' | 'time' | 'ext' | 'check' | 'init' || '' const sortType = localStorage.getItem('sortType') as sortTypeList || 'init'
if (['name', 'time', 'size', 'ext'].includes(sortType as string)) {
sortFile(sortType) sortFile(sortType)
}
if (res.isTruncated && paging.value) { if (res.isTruncated && paging.value) {
pagingMarkerStack.push(pagingMarker.value) pagingMarkerStack.push(pagingMarker.value)
pagingMarker.value = res.nextMarker pagingMarker.value = res.nextMarker
@ -2260,12 +2315,11 @@ const changePage = async (cur: number | undefined, prev: number | undefined) =>
} }
const isForwardNavigation = cur > prev const isForwardNavigation = cur > prev
const newPageNumber = isForwardNavigation ? prev + 1 : prev - 1 const newPageNumber = isForwardNavigation ? prev + 1 : prev - 1
const sortType = localStorage.getItem('sortType') as 'name' | 'size' | 'time' | 'ext' | 'check' | 'init' || '' const sortType = localStorage.getItem('sortType') as sortTypeList || 'init'
isShowLoadingPage.value = true isShowLoadingPage.value = true
currentPageNumber.value = newPageNumber currentPageNumber.value = newPageNumber
currentPageFilesInfo.length = 0 currentPageFilesInfo.length = 0
selectedItems.length = 0
searchText.value = '' searchText.value = ''
urlToUpload.value = '' urlToUpload.value = ''
dialogVisible.value = false dialogVisible.value = false
@ -2289,12 +2343,9 @@ const changePage = async (cur: number | undefined, prev: number | undefined) =>
return return
} }
res.fullList.sort((a: any) => (a.isDir ? -1 : 1))
currentPageFilesInfo.push(...res.fullList) currentPageFilesInfo.push(...res.fullList)
if (['name', 'time', 'size', 'ext'].includes(sortType as string)) {
sortFile(sortType) sortFile(sortType)
}
if (!(cur < prev && !paging.value)) { if (!(cur < prev && !paging.value)) {
if (res.isTruncated) { if (res.isTruncated) {
@ -2311,27 +2362,6 @@ const changePage = async (cur: number | undefined, prev: number | undefined) =>
} }
} }
watch(searchText, () => searchAndSort())
function searchAndSort () {
fileTable.value.scrollToRow(0)
const shouldIgnoreCase = isIgnoreCase.value
currentPageFilesInfo.forEach((item: any) => {
const fileName = shouldIgnoreCase ? item.fileName.toLowerCase() : item.fileName
const search = shouldIgnoreCase ? searchText.value.toLowerCase() : searchText.value
item.match = searchText.value ? fileName.includes(search) : true
})
if (searchText.value) {
currentPageFilesInfo.sort((a: any, b: any) => b.match - a.match)
} else {
const sortType = localStorage.getItem('sortType') as 'name' | 'size' | 'time' | 'ext' | 'check' | 'init' || 'init'
sortFile(sortType)
}
}
function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') { function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') {
switch (type) { switch (type) {
case 'name': case 'name':
@ -2340,9 +2370,8 @@ function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') {
currentPageFilesInfo.sort((a: any, b: any) => { currentPageFilesInfo.sort((a: any, b: any) => {
if (fileSortNameReverse.value) { if (fileSortNameReverse.value) {
return a.fileName.localeCompare(b.fileName) return a.fileName.localeCompare(b.fileName)
} else {
return b.fileName.localeCompare(a.fileName)
} }
return b.fileName.localeCompare(a.fileName)
}) })
break break
case 'size': case 'size':
@ -2351,9 +2380,8 @@ function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') {
currentPageFilesInfo.sort((a: any, b: any) => { currentPageFilesInfo.sort((a: any, b: any) => {
if (fileSortSizeReverse.value) { if (fileSortSizeReverse.value) {
return a.fileSize - b.fileSize return a.fileSize - b.fileSize
} else {
return b.fileSize - a.fileSize
} }
return b.fileSize - a.fileSize
}) })
break break
case 'time': case 'time':
@ -2362,9 +2390,8 @@ function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') {
currentPageFilesInfo.sort((a: any, b: any) => { currentPageFilesInfo.sort((a: any, b: any) => {
if (fileSortTimeReverse.value) { if (fileSortTimeReverse.value) {
return new Date(a.formatedTime).getTime() - new Date(b.formatedTime).getTime() return new Date(a.formatedTime).getTime() - new Date(b.formatedTime).getTime()
} else {
return new Date(b.formatedTime).getTime() - new Date(a.formatedTime).getTime()
} }
return new Date(b.formatedTime).getTime() - new Date(a.formatedTime).getTime()
}) })
break break
case 'ext': case 'ext':
@ -2373,17 +2400,18 @@ function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') {
currentPageFilesInfo.sort((a: any, b: any) => { currentPageFilesInfo.sort((a: any, b: any) => {
if (fileSortExtReverse.value) { if (fileSortExtReverse.value) {
return getExtension(a.fileName).localeCompare(getExtension(b.fileName)) return getExtension(a.fileName).localeCompare(getExtension(b.fileName))
} else {
return getExtension(b.fileName).localeCompare(getExtension(a.fileName))
} }
return getExtension(b.fileName).localeCompare(getExtension(a.fileName))
}) })
break break
case 'check': case 'check':
localStorage.setItem('sortType', 'check')
currentPageFilesInfo.sort((a: any, b: any) => { currentPageFilesInfo.sort((a: any, b: any) => {
return b.checked - a.checked return b.checked - a.checked
}) })
break break
case 'init': case 'init':
localStorage.setItem('sortType', 'init')
currentPageFilesInfo.sort((a: any, b: any) => { currentPageFilesInfo.sort((a: any, b: any) => {
return b.isDir - a.isDir || a.fileName.localeCompare(b.fileName) return b.isDir - a.isDir || a.fileName.localeCompare(b.fileName)
}) })
@ -2394,41 +2422,16 @@ function handleCancelCheck () {
currentPageFilesInfo.forEach((item: any) => { currentPageFilesInfo.forEach((item: any) => {
item.checked = false item.checked = false
}) })
selectedItems.length = 0
} }
function handleReverseCheck () { function handleReverseCheck () {
currentPageFilesInfo.forEach((item: any) => { currentPageFilesInfo.forEach((item: any) => {
item.checked = !item.checked item.checked = !item.checked
if (item.checked) {
selectedItems.push(item)
} else {
selectedItems.splice(selectedItems.findIndex((i: any) => i.fileName === item.fileName), 1)
}
}) })
} }
function handleCheckChangeOther (item: any) { function handleCheckChangeOther (item: any) {
item.checked = !item.checked item.checked = !item.checked
handleCheckChange(item)
}
function handleCheckChange (item: any) {
const index = currentPageFilesInfo.findIndex((i: any) => i.fileName === item.fileName)
if (item.checked) {
if (lastChoosed.value !== -1 && isShiftKeyPress.value) {
const [start, end] = [lastChoosed.value, index].sort((a, b) => a - b)
for (let i = start + 1; i <= end; i++) {
currentPageFilesInfo[i].checked = true
selectedItems.push(currentPageFilesInfo[i])
}
} else {
selectedItems.push(item)
}
lastChoosed.value = index
} else {
selectedItems.splice(selectedItems.findIndex((i: any) => i.fileName === item.fileName), 1)
}
} }
async function handleFolderBatchDownload (item: any) { async function handleFolderBatchDownload (item: any) {
@ -2522,7 +2525,7 @@ async function handleBatchDownload () {
maxDownloadFileCount: manageStore.config.settings.maxDownloadFileCount ? manageStore.config.settings.maxDownloadFileCount : 5, maxDownloadFileCount: manageStore.config.settings.maxDownloadFileCount ? manageStore.config.settings.maxDownloadFileCount : 5,
fileArray: [] as any[] fileArray: [] as any[]
} }
selectedItems.forEach((item: any) => { selectedItems.value.forEach((item: any) => {
if (!item.isDir) { if (!item.isDir) {
param.fileArray.push({ param.fileArray.push({
alias: configMap.alias, alias: configMap.alias,
@ -2543,13 +2546,9 @@ async function handleBatchDownload () {
} }
function handleCheckAllChange () { function handleCheckAllChange () {
const isSearchEmpty = searchText.value === '' const allSelected = selectedItems.value.length === filterList.value.length
const itemsToCheck = isSearchEmpty ? currentPageFilesInfo : currentPageFilesInfo.filter((item: any) => item.match) filterList.value.forEach((item: any) => {
const allSelected = selectedItems.length === itemsToCheck.length item.checked = !allSelected
selectedItems.length = 0
currentPageFilesInfo.forEach((item: any) => {
item.checked = !allSelected && (isSearchEmpty || item.match)
if (item.checked) selectedItems.push(item)
}) })
} }
@ -2619,6 +2618,25 @@ function handleBatchRenameFile () {
isShowBatchRenameDialog.value = true isShowBatchRenameDialog.value = true
} }
const matchedFilesNumber = computed(() => {
if (!batchRenameMatch.value) {
return 0
}
const matchedFiles = [] as any[]
currentPageFilesInfo.forEach((item: any) => {
if (isRenameIncludeExt.value) {
if (customStrMatch(item.fileName, batchRenameMatch.value) && !item.isDir) {
matchedFiles.push(item)
}
} else {
if (customStrMatch(item.fileName.split('.')[0], batchRenameMatch.value) && !item.isDir) {
matchedFiles.push(item)
}
}
})
return matchedFiles.length
})
async function BatchRename () { async function BatchRename () {
isShowBatchRenameDialog.value = false isShowBatchRenameDialog.value = false
if (batchRenameMatch.value === '') { if (batchRenameMatch.value === '') {
@ -2745,25 +2763,25 @@ async function BatchRename () {
} }
function handleBatchCopyInfo () { function handleBatchCopyInfo () {
if (selectedItems.length === 0) { if (selectedItems.value.length === 0) {
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG')) ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG'))
return return
} }
const result = {} as IStringKeyMap const result = {} as IStringKeyMap
selectedItems.forEach((item: any) => { selectedItems.value.forEach((item: any) => {
result[item.fileName] = item result[item.fileName] = item
}) })
clipboard.writeText(JSON.stringify(result, null, 2)) clipboard.writeText(JSON.stringify(result, null, 2))
ElMessage.success(`${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B')}`) ElMessage.success(`${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A')} ${selectedItems.value.length} ${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B')}`)
} }
async function handleBatchCopyLink (type: string) { async function handleBatchCopyLink (type: string) {
if (!selectedItems.length) { if (!selectedItems.value.length) {
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG')) ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG'))
return return
} }
const result = [] as string[] const result = [] as string[]
for (const item of selectedItems) { for (const item of selectedItems.value) {
if (!item.isDir) { if (!item.isDir) {
const preSignedUrl = type === 'preSignedUrl' ? await getPreSignedUrl(item) : null const preSignedUrl = type === 'preSignedUrl' ? await getPreSignedUrl(item) : null
const url = await formatLink(preSignedUrl || item.url, item.fileName, type, manageStore.config.settings.customPasteFormat) const url = await formatLink(preSignedUrl || item.url, item.fileName, type, manageStore.config.settings.customPasteFormat)
@ -2830,15 +2848,9 @@ async function getBucketFileListBackStage () {
}) })
const interval = setInterval(() => { const interval = setInterval(() => {
const currentFileList = fileTransferStore.getFileTransferList() const currentFileList = fileTransferStore.getFileTransferList()
currentFileList.sort((a: any, b: any) => { currentPageFilesInfo.splice(0, currentPageFilesInfo.length, ...currentFileList)
return b.isDir - a.isDir || a.fileName.localeCompare(b.fileName) const sortType = localStorage.getItem('sortType') as sortTypeList || 'init'
})
currentPageFilesInfo.length = 0
currentPageFilesInfo.push(...currentFileList)
const sortType = localStorage.getItem('sortType') as 'name' | 'size' | 'time' | 'ext' | 'check' | 'init' || ''
if (['name', 'time', 'size', 'ext'].includes(sortType as string)) {
sortFile(sortType) sortFile(sortType)
}
const table = fileCacheDbInstance.table(currentPicBedName.value) const table = fileCacheDbInstance.table(currentPicBedName.value)
table.put({ table.put({
key: getTableKeyOfDb(), key: getTableKeyOfDb(),
@ -2885,7 +2897,7 @@ async function getBucketFileList () {
} }
function handleBatchDeleteInfo () { function handleBatchDeleteInfo () {
const confirmTitle = `${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B')}` const confirmTitle = `${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A')} ${selectedItems.value.length} ${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B')}`
ElMessageBox.confirm(confirmTitle, $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG'), { ElMessageBox.confirm(confirmTitle, $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG'), {
confirmButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM'), confirmButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM'),
cancelButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL'), cancelButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL'),
@ -2893,7 +2905,7 @@ function handleBatchDeleteInfo () {
center: true, center: true,
draggable: true draggable: true
}).then(async () => { }).then(async () => {
const copiedSelectedItems = JSON.parse(JSON.stringify(selectedItems)) const copiedSelectedItems = JSON.parse(JSON.stringify(selectedItems.value))
let successCount = 0 let successCount = 0
let failCount = 0 let failCount = 0
@ -2911,7 +2923,6 @@ function handleBatchDeleteInfo () {
if (result) { if (result) {
successCount++ successCount++
currentPageFilesInfo.splice(currentPageFilesInfo.findIndex((j: any) => j.key === item.key), 1) currentPageFilesInfo.splice(currentPageFilesInfo.findIndex((j: any) => j.key === item.key), 1)
selectedItems.splice(selectedItems.findIndex((j: any) => j.key === item.key), 1)
if (!paging.value) { if (!paging.value) {
const table = fileCacheDbInstance.table(currentPicBedName.value) const table = fileCacheDbInstance.table(currentPicBedName.value)
table.where('key').equals(getTableKeyOfDb()).modify((l: any) => { table.where('key').equals(getTableKeyOfDb()).modify((l: any) => {
@ -2975,7 +2986,6 @@ function handleDeleteFile (item: any) {
if (res) { if (res) {
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS')) ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
currentPageFilesInfo.splice(currentPageFilesInfo.findIndex((i: any) => i.key === item.key), 1) currentPageFilesInfo.splice(currentPageFilesInfo.findIndex((i: any) => i.key === item.key), 1)
selectedItems.splice(selectedItems.findIndex((i: any) => i.key === item.key), 1)
if (!paging.value) { if (!paging.value) {
const table = fileCacheDbInstance.table(currentPicBedName.value) const table = fileCacheDbInstance.table(currentPicBedName.value)
table.where('key').equals(getTableKeyOfDb()).modify((l: any) => { table.where('key').equals(getTableKeyOfDb()).modify((l: any) => {
@ -2998,7 +3008,7 @@ function handleRenameFile (item: any) {
} }
function singleRename () { function singleRename () {
const index = currentPageFilesInfo.findIndex((i: any) => i === itemToBeRenamed.value) const index = filterList.value.findIndex((i: any) => i === itemToBeRenamed.value)
isShowBatchRenameDialog.value = false isShowBatchRenameDialog.value = false
if (batchRenameMatch.value === '') { if (batchRenameMatch.value === '') {
batchRenameMatch.value = '.+' batchRenameMatch.value = '.+'
@ -3380,13 +3390,11 @@ const columns: Column<any>[] = [
dataKey: 'checked', dataKey: 'checked',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: ({ rowData: item }) => (
item.match || !searchText.value <ElCheckbox
? <ElCheckbox
v-model={item.checked} v-model={item.checked}
onChange={() => handleCheckChange(item)} onChange={() => handleCheckChangeOther(item)}
> >
</ElCheckbox> </ElCheckbox>
: <template></template>
) )
}, },
{ {
@ -3394,12 +3402,13 @@ const columns: Column<any>[] = [
title: '', title: '',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: ({ rowData: item }) => (
item.match || !searchText.value <ElPopover
? <ElPopover
trigger="hover" trigger="hover"
width="200" width="200"
disabled={!item.isImage} disabled={!item.isImage}
placement="right" placement="right"
persistent={false}
teleported={true}
> >
{{ {{
reference: () => ( reference: () => (
@ -3429,7 +3438,7 @@ const columns: Column<any>[] = [
), ),
default: () => ( default: () => (
<ElImage <ElImage
src={item.url} src={item.isImage ? item.url : require(`./assets/icons/${getFileIconPath(item.fileName ?? '')}`) }
fit="contain" fit="contain"
> >
{{ {{
@ -3447,7 +3456,6 @@ const columns: Column<any>[] = [
) )
}} }}
</ElPopover> </ElPopover>
: <template></template>
) )
}, },
{ {
@ -3456,8 +3464,7 @@ const columns: Column<any>[] = [
dataKey: 'fileName', dataKey: 'fileName',
width: 300, width: 300,
cellRenderer: ({ cellData: fileName, rowData: item }) => ( cellRenderer: ({ cellData: fileName, rowData: item }) => (
item.match || !searchText.value <div
? <div
onClick={() => handleClickFile(item)} onClick={() => handleClickFile(item)}
> >
<ElTooltip <ElTooltip
@ -3471,7 +3478,6 @@ const columns: Column<any>[] = [
</div> </div>
</ElTooltip> </ElTooltip>
</div> </div>
: <template></template>
) )
}, },
{ {
@ -3479,8 +3485,7 @@ const columns: Column<any>[] = [
title: '', title: '',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: ({ rowData: item }) => (
item.match || !searchText.value item.isDir || !isShowRenameFileIcon.value
? item.isDir || !isShowRenameFileIcon.value
? item.isDir ? item.isDir
? <ElIcon ? <ElIcon
size="15" size="15"
@ -3501,7 +3506,6 @@ const columns: Column<any>[] = [
> >
<Edit /> <Edit />
</ElIcon> </ElIcon>
: <template></template>
) )
}, },
{ {
@ -3509,14 +3513,15 @@ const columns: Column<any>[] = [
title: '', title: '',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: ({ rowData: item }) => (
item.match || !searchText.value <ElTooltip
? <ElTooltip
placement="top" placement="top"
content={$T('MANAGE_BUCKET_FILE_COLUMN_COPY_URL')} content={$T('MANAGE_BUCKET_FILE_COLUMN_COPY_URL')}
effect='light' effect='light'
hide-after={150} hide-after={150}
> >
<ElDropdown> <ElDropdown
teleported={true}
>
{{ {{
default: () => ( default: () => (
<ElIcon <ElIcon
@ -3576,7 +3581,6 @@ const columns: Column<any>[] = [
}} }}
</ElDropdown> </ElDropdown>
</ElTooltip> </ElTooltip>
: <template></template>
) )
}, },
{ {
@ -3584,8 +3588,7 @@ const columns: Column<any>[] = [
title: '', title: '',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: ({ rowData: item }) => (
item.match || !searchText.value <ElTooltip
? <ElTooltip
placement="top" placement="top"
content={$T('MANAGE_BUCKET_FILE_COLUMN_INFO')} content={$T('MANAGE_BUCKET_FILE_COLUMN_INFO')}
effect='light' effect='light'
@ -3601,17 +3604,14 @@ const columns: Column<any>[] = [
<Document /> <Document />
</ElIcon> </ElIcon>
</ElTooltip> </ElTooltip>
: <template></template>
) )
}, },
{ {
key: 'placeholder', key: 'placeholder',
title: '', title: '',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: () => (
item.match || !searchText.value <span></span>
? <span></span>
: <template></template>
) )
}, },
{ {
@ -3620,14 +3620,12 @@ const columns: Column<any>[] = [
width: 100, width: 100,
dataKey: 'fileSize', dataKey: 'fileSize',
cellRenderer: ({ cellData: fileSize, rowData: item }) => ( cellRenderer: ({ cellData: fileSize, rowData: item }) => (
item.match || !searchText.value <div
? <div
style="font-size: 14px;color: #303133;font-family: Arial, Helvetica, sans-serif;height: 100%;display: flex;align-items: center;" style="font-size: 14px;color: #303133;font-family: Arial, Helvetica, sans-serif;height: 100%;display: flex;align-items: center;"
onClick={() => handleCheckChangeOther(item)} onClick={() => handleCheckChangeOther(item)}
> >
{formatFileSize(fileSize)} {formatFileSize(fileSize)}
</div> </div>
: <template></template>
) )
}, },
{ {
@ -3636,14 +3634,12 @@ const columns: Column<any>[] = [
width: 200, width: 200,
dataKey: 'formatedTime', dataKey: 'formatedTime',
cellRenderer: ({ cellData: formatedTime, rowData: item }) => ( cellRenderer: ({ cellData: formatedTime, rowData: item }) => (
item.match || !searchText.value <div
? <div
style="font-size: 14px;color: #303133;font-family: Arial, Helvetica, sans-serif;height: 100%;display: flex;align-items: center;" style="font-size: 14px;color: #303133;font-family: Arial, Helvetica, sans-serif;height: 100%;display: flex;align-items: center;"
onClick={() => handleCheckChangeOther(item)} onClick={() => handleCheckChangeOther(item)}
> >
{formatedTime} {formatedTime}
</div> </div>
: <template></template>
) )
}, },
{ {
@ -3651,8 +3647,7 @@ const columns: Column<any>[] = [
title: '', title: '',
width: 30, width: 30,
cellRenderer: ({ rowData: item }) => ( cellRenderer: ({ rowData: item }) => (
item.match || !searchText.value <ElIcon
? <ElIcon
style="cursor: pointer;" style="cursor: pointer;"
color="red" color="red"
// @ts-ignore // @ts-ignore
@ -3660,7 +3655,6 @@ const columns: Column<any>[] = [
> >
<DeleteFilled /> <DeleteFilled />
</ElIcon> </ElIcon>
: <template></template>
) )
} }
] ]

View File

@ -6,15 +6,16 @@
stretch stretch
style="height: calc(100vh - 50px);width: 100%;overflow-x: hidden;" style="height: calc(100vh - 50px);width: 100%;overflow-x: hidden;"
tab-position="left" tab-position="left"
lazy
@tab-change="getExistingConfig(activeName)" @tab-change="getExistingConfig(activeName)"
> >
<el-tab-pane <el-tab-pane
name="login" name="login"
:label="$T('MANAGE_LOGIN_PAGE_PANE_NAME')" :label="$T('MANAGE_LOGIN_PAGE_PANE_NAME')"
style="width: 100%;overflow-y: scroll;height: calc(100vh - 50px);" style="width: 100%;overflow-y: scroll;height: calc(100vh - 50px);"
lazy
> >
<el-alert <el-alert
v-loading="isLoading"
:title="$T('MANAGE_LOGIN_PAGE_PANE_DESC')" :title="$T('MANAGE_LOGIN_PAGE_PANE_DESC')"
type="success" type="success"
show-icon show-icon
@ -42,6 +43,8 @@
placement="top" placement="top"
:width="300" :width="300"
trigger="click" trigger="click"
:persistent="false"
teleported
> >
<el-table <el-table
:data="formObjToTableData(item.config)" :data="formObjToTableData(item.config)"
@ -75,6 +78,8 @@
:content="item.alias" :content="item.alias"
placement="top" placement="top"
:disabled="isNeedToShorten(item.alias)" :disabled="isNeedToShorten(item.alias)"
:persistent="false"
teleported
> >
{{ isNeedToShorten(item.alias) ? safeSliceF(item.alias, 17) + '...' : item.alias }} {{ isNeedToShorten(item.alias) ? safeSliceF(item.alias, 17) + '...' : item.alias }}
</el-tooltip> </el-tooltip>
@ -152,6 +157,8 @@
effect="dark" effect="dark"
:content="supportedPicBedList[item.icon].configOptions[option].tooltip" :content="supportedPicBedList[item.icon].configOptions[option].tooltip"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon <el-icon
color="#409EFF" color="#409EFF"
@ -169,8 +176,7 @@
<el-switch <el-switch
v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'boolean'" v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'boolean'"
v-model="configResult[item.icon + '.' + option]" v-model="configResult[item.icon + '.' + option]"
active-color="#13ce66" style="--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
<el-input <el-input
v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'number'" v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'number'"
@ -181,6 +187,8 @@
v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'select'" v-else-if="supportedPicBedList[item.icon].configOptions[option].type === 'select'"
v-model="configResult[item.icon + '.' + option]" v-model="configResult[item.icon + '.' + option]"
:placeholder="$T('MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER')" :placeholder="$T('MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER')"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="i in Object.entries(supportedPicBedList[item.icon].configOptions[option].selectOptions)" v-for="i in Object.entries(supportedPicBedList[item.icon].configOptions[option].selectOptions)"
@ -198,6 +206,7 @@
style="margin-left: 10vw" style="margin-left: 10vw"
placement="top" placement="top"
:disabled="currentAliasList.length === 0" :disabled="currentAliasList.length === 0"
teleported
> >
{{ $T('MANAGE_LOGIN_PAGE_PANE_IMPORT') }} {{ $T('MANAGE_LOGIN_PAGE_PANE_IMPORT') }}
<template #dropdown> <template #dropdown>
@ -298,7 +307,6 @@ import { T as $T } from '@/i18n'
const manageStore = useManageStore() const manageStore = useManageStore()
const router = useRouter() const router = useRouter()
const isLoading = ref(false)
const activeName = ref('login') const activeName = ref('login')
const configResult:IStringKeyMap = reactive({}) const configResult:IStringKeyMap = reactive({})
@ -820,9 +828,8 @@ async function transUpToManage (config: IUploaderConfigListItem, picBedName: str
importedNewConfig[alias] = resultMap importedNewConfig[alias] = resultMap
} }
onMounted(async () => { onMounted(() => {
await getCurrentConfigList() getCurrentConfigList()
getAllConfigAliasArray()
}) })
</script> </script>

View File

@ -27,6 +27,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_MAIN_PAGE_NEW_BUCKET')" :content="$T('MANAGE_MAIN_PAGE_NEW_BUCKET')"
placement="right" placement="right"
:persistent="false"
teleported
popper-class="layout__menu__button__divider__tooltip" popper-class="layout__menu__button__divider__tooltip"
> >
<el-icon <el-icon
@ -143,6 +145,7 @@
<el-dialog <el-dialog
v-model="picBedSwitchDialogVisible" v-model="picBedSwitchDialogVisible"
top="30vh" top="30vh"
append-to-body
> >
<div <div
class="choice-cos" class="choice-cos"
@ -195,6 +198,7 @@
<el-drawer <el-drawer
v-model="nweBucketDrawerVisible" v-model="nweBucketDrawerVisible"
class="layout__addNewBucket" class="layout__addNewBucket"
append-to-body
> >
<el-form <el-form
label-position="top" label-position="top"
@ -240,6 +244,8 @@
v-if="newBucketConfig[currentPicBedName].configOptions[option].component === 'select'" v-if="newBucketConfig[currentPicBedName].configOptions[option].component === 'select'"
v-model="newBucketConfigResult[currentPicBedName+'.'+option]" v-model="newBucketConfigResult[currentPicBedName+'.'+option]"
size="large" size="large"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="item in Object.keys(newBucketConfig[currentPicBedName].configOptions[option].options)" v-for="item in Object.keys(newBucketConfig[currentPicBedName].configOptions[option].options)"

View File

@ -34,6 +34,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_AUTO_FRESH_TIPS')" :content="$T('MANAGE_SETTING_AUTO_FRESH_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -43,9 +45,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isAutoRefresh" v-model="form.isAutoRefresh"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsAutoRefreshChange" @change="handleIsAutoRefreshChange"
/> />
</el-form-item> </el-form-item>
@ -66,6 +66,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_CLEAR_CACHE_TIPS')" :content="$T('MANAGE_SETTING_CLEAR_CACHE_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -78,6 +80,8 @@
:confirm-button-text="$T('CONFIRM')" :confirm-button-text="$T('CONFIRM')"
:cancel-button-text="$T('CANCEL')" :cancel-button-text="$T('CANCEL')"
hide-icon hide-icon
:persistent="false"
teleported
@confirm="handleClearDb" @confirm="handleClearDb"
> >
<template #reference> <template #reference>
@ -101,9 +105,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isShowThumbnail" v-model="form.isShowThumbnail"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsShowThumbnailChange" @change="handleIsShowThumbnailChange"
/> />
</el-form-item> </el-form-item>
@ -117,11 +119,9 @@
</template> </template>
<el-switch <el-switch
v-model="form.isShowList" v-model="form.isShowList"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
:active-text="$T('MANAGE_SETTING_SHOW_FILE_LIST_TYPE_LIST')" :active-text="$T('MANAGE_SETTING_SHOW_FILE_LIST_TYPE_LIST')"
:inactive-text="$T('MANAGE_SETTING_SHOW_FILE_LIST_TYPE_CARD')" :inactive-text="$T('MANAGE_SETTING_SHOW_FILE_LIST_TYPE_CARD')"
active-color="#13ce66"
inactive-color="orange"
@change="handleIsShowListChange" @change="handleIsShowListChange"
/> />
</el-form-item> </el-form-item>
@ -135,6 +135,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_FORCE_CUSTOM_URL_HTTPS_TIPS')" :content="$T('MANAGE_SETTING_FORCE_CUSTOM_URL_HTTPS_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -144,9 +146,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isForceCustomUrlHttps" v-model="form.isForceCustomUrlHttps"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsForceCustomUrlHttpsChange" @change="handleIsForceCustomUrlHttpsChange"
/> />
</el-form-item> </el-form-item>
@ -160,6 +160,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS')" :content="$T('MANAGE_SETTING_ENCODE_URL_WHEN_COPY_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -169,9 +171,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isEncodeUrl" v-model="form.isEncodeUrl"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsEncodeUrlChange" @change="handleIsEncodeUrlChange"
/> />
</el-form-item> </el-form-item>
@ -185,6 +185,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_KEEP_FOLDER_STRUCTURE_UPLOAD_TIPS')" :content="$T('MANAGE_SETTING_KEEP_FOLDER_STRUCTURE_UPLOAD_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -194,9 +196,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isUploadKeepDirStructure" v-model="form.isUploadKeepDirStructure"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsUploadKeepDirStructureChange" @change="handleIsUploadKeepDirStructureChange"
/> />
</el-form-item> </el-form-item>
@ -212,6 +212,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_KEEP_FOLDER_STRUCTURE_DOWNLOAD_FILE_TIPS')" :content="$T('MANAGE_SETTING_KEEP_FOLDER_STRUCTURE_DOWNLOAD_FILE_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -221,9 +223,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isDownloadFileKeepDirStructure" v-model="form.isDownloadFileKeepDirStructure"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsDownloadFileKeepDirStructureChange" @change="handleIsDownloadFileKeepDirStructureChange"
/> />
</el-form-item> </el-form-item>
@ -239,6 +239,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_KEEP_FOLDER_STRUCTURE_DOWNLOAD_FILE_TIPS')" :content="$T('MANAGE_SETTING_KEEP_FOLDER_STRUCTURE_DOWNLOAD_FILE_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -248,9 +250,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isDownloadFolderKeepDirStructure" v-model="form.isDownloadFolderKeepDirStructure"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleIsDownloadFolderKeepDirStructureChange" @change="handleIsDownloadFolderKeepDirStructureChange"
/> />
</el-form-item> </el-form-item>
@ -264,6 +264,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS')" :content="$T('MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -290,6 +292,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_SEARCH_IGNORE_CASE_TIPS')" :content="$T('MANAGE_SETTING_SEARCH_IGNORE_CASE_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -299,9 +303,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.isIgnoreCase" v-model="form.isIgnoreCase"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleisIgnoreCaseChange" @change="handleisIgnoreCaseChange"
/> />
</el-form-item> </el-form-item>
@ -315,6 +317,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_TIMESTAMP_RENAME_TIPS')" :content="$T('MANAGE_SETTING_TIMESTAMP_RENAME_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -324,9 +328,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.timestampRename" v-model="form.timestampRename"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleTimestampRenameChange" @change="handleTimestampRenameChange"
/> />
</el-form-item> </el-form-item>
@ -340,6 +342,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_RANDOM_STRING_RENAME_TIPS')" :content="$T('MANAGE_SETTING_RANDOM_STRING_RENAME_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -349,9 +353,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.randomStringRename" v-model="form.randomStringRename"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleRandomStringRenameChange" @change="handleRandomStringRenameChange"
/> />
</el-form-item> </el-form-item>
@ -365,6 +367,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_SETTING_CUSTOM_RENAME_TIPS')" :content="$T('MANAGE_SETTING_CUSTOM_RENAME_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon> <el-icon>
<InfoFilled /> <InfoFilled />
@ -374,9 +378,7 @@
</template> </template>
<el-switch <el-switch
v-model="form.customRename" v-model="form.customRename"
style="position:absolute;right: 0;" style="position:absolute;right: 0;--el-switch-on-color: #13ce66;--el-switch-off-color: #ff4949;"
active-color="#13ce66"
inactive-color="#ff4949"
@change="handleCustomRenameChange" @change="handleCustomRenameChange"
/> />
</el-form-item> </el-form-item>

View File

@ -42,6 +42,8 @@
size="small" size="small"
style="width: 100%" style="width: 100%"
:placeholder="$T('CHOOSE_SHOWED_PICBED')" :placeholder="$T('CHOOSE_SHOWED_PICBED')"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="item in picBed" v-for="item in picBed"
@ -60,6 +62,7 @@
start-placeholder="Start date" start-placeholder="Start date"
end-placeholder="End date" end-placeholder="End date"
size="small" size="small"
teleported
/> />
</el-col> </el-col>
<el-col :span="1"> <el-col :span="1">
@ -75,6 +78,8 @@
size="small" size="small"
style="width: 100%" style="width: 100%"
:placeholder="$T('CHOOSE_PASTE_FORMAT')" :placeholder="$T('CHOOSE_PASTE_FORMAT')"
:persistent="false"
teleported
@change="handlePasteStyleChange" @change="handlePasteStyleChange"
> >
<el-option <el-option
@ -91,6 +96,8 @@
size="small" size="small"
style="width: 100%" style="width: 100%"
placeholder="Choose" placeholder="Choose"
:persistent="false"
teleported
@change="handleUseShortUrlChange" @change="handleUseShortUrlChange"
> >
<el-option <el-option
@ -102,7 +109,9 @@
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="2"> <el-col :span="2">
<el-dropdown> <el-dropdown
teleported
>
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
@ -294,6 +303,7 @@
:title="$T('CHANGE_IMAGE_URL')" :title="$T('CHANGE_IMAGE_URL')"
width="500px" width="500px"
:modal-append-to-body="false" :modal-append-to-body="false"
append-to-body
> >
<el-input v-model="imgInfo.imgUrl" /> <el-input v-model="imgInfo.imgUrl" />
<template #footer> <template #footer>
@ -315,6 +325,7 @@
align-center align-center
draggable draggable
destroy-on-close destroy-on-close
append-to-body
> >
<el-link <el-link
:underline="false" :underline="false"
@ -326,6 +337,8 @@
effect="dark" effect="dark"
:content="$T('MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS')" :content="$T('MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon <el-icon
color="#409EFF" color="#409EFF"
@ -350,6 +363,8 @@
effect="light" effect="light"
placement="right" placement="right"
width="280" width="280"
:persistent="false"
teleported
> >
<template #reference> <template #reference>
<el-icon <el-icon
@ -502,11 +517,8 @@ const isShowBatchRenameDialog = ref(false)
const batchRenameMatch = ref('') const batchRenameMatch = ref('')
const batchRenameReplace = ref('') const batchRenameReplace = ref('')
const mathcedCount = computed(() => { const mathcedCount = computed(() => {
const matchedFiles = [] as any[] const matchedFiles = filterList.value.filter((item: any) => {
images.value.forEach((item: any) => { return customStrMatch(item.imgUrl, batchRenameMatch.value)
if (customStrMatch(item.imgUrl, batchRenameMatch.value)) {
matchedFiles.push(item)
}
}) })
return matchedFiles.length return matchedFiles.length
}) })
@ -939,7 +951,7 @@ function handleBatchRename () {
return return
} }
let matchedFiles = [] as any[] let matchedFiles = [] as any[]
images.value.forEach((item: any) => { filterList.value.forEach((item: any) => {
if (customStrMatch(item.imgUrl, batchRenameMatch.value)) { if (customStrMatch(item.imgUrl, batchRenameMatch.value)) {
matchedFiles.push(item) matchedFiles.push(item)
} }

View File

@ -18,6 +18,7 @@
stretch stretch
style="height: calc(100vh - 50px);width: 100%;overflow-x: hidden;top: 50px;position: absolute;" style="height: calc(100vh - 50px);width: 100%;overflow-x: hidden;top: 50px;position: absolute;"
tab-position="left" tab-position="left"
lazy
> >
<el-tab-pane <el-tab-pane
name="system" name="system"
@ -43,6 +44,8 @@
size="small" size="small"
style="width: 50%" style="width: 50%"
:placeholder="$T('SETTINGS_CHOOSE_LANGUAGE')" :placeholder="$T('SETTINGS_CHOOSE_LANGUAGE')"
:persistent="false"
teleported
@change="handleLanguageChange" @change="handleLanguageChange"
> >
<el-option <el-option
@ -61,6 +64,8 @@
size="small" size="small"
style="width: 50%" style="width: 50%"
:placeholder="$T('SETTINGS_START_MODE')" :placeholder="$T('SETTINGS_START_MODE')"
:persistent="false"
teleported
@change="handleStartModeChange" @change="handleStartModeChange"
> >
<el-option <el-option
@ -299,6 +304,8 @@
size="small" size="small"
style="width: 50%" style="width: 50%"
:placeholder="$T('SETTINGS_AUTO_IMPORT_SELECT_PICBED')" :placeholder="$T('SETTINGS_AUTO_IMPORT_SELECT_PICBED')"
:persistent="false"
teleported
@change="handleAutoImportPicBedChange" @change="handleAutoImportPicBedChange"
> >
<el-option <el-option
@ -434,6 +441,8 @@
size="small" size="small"
style="width: 50%" style="width: 50%"
:placeholder="$T('SETTINGS_SHORT_URL_SERVER')" :placeholder="$T('SETTINGS_SHORT_URL_SERVER')"
:persistent="false"
teleported
@change="handleShortUrlServerChange" @change="handleShortUrlServerChange"
> >
<el-option <el-option
@ -487,6 +496,8 @@
effect="dark" effect="dark"
:content="$T('BUILTIN_CLIPBOARD_TIPS')" :content="$T('BUILTIN_CLIPBOARD_TIPS')"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon style="margin-left: 4px"> <el-icon style="margin-left: 4px">
<QuestionFilled /> <QuestionFilled />
@ -641,6 +652,7 @@
:title="$T('SETTINGS_CUSTOM_LINK_FORMAT')" :title="$T('SETTINGS_CUSTOM_LINK_FORMAT')"
:modal-append-to-body="false" :modal-append-to-body="false"
center center
append-to-body
> >
<el-form <el-form
ref="$customLink" ref="$customLink"
@ -691,6 +703,7 @@
:modal-append-to-body="false" :modal-append-to-body="false"
width="70%" width="70%"
center center
append-to-body
> >
<el-form <el-form
label-position="right" label-position="right"
@ -747,6 +760,7 @@
:modal-append-to-body="false" :modal-append-to-body="false"
width="70%" width="70%"
center center
append-to-body
> >
<el-form <el-form
label-position="right" label-position="right"
@ -802,6 +816,7 @@
:title="$T('SETTINGS_CHECK_UPDATE')" :title="$T('SETTINGS_CHECK_UPDATE')"
:modal-append-to-body="false" :modal-append-to-body="false"
center center
append-to-body
> >
<div> <div>
{{ $T('SETTINGS_CURRENT_VERSION') }}: {{ version }} {{ $T('SETTINGS_CURRENT_VERSION') }}: {{ version }}
@ -835,6 +850,7 @@
align-center align-center
draggable draggable
destroy-on-close destroy-on-close
append-to-body
> >
<el-link <el-link
:underline="false" :underline="false"
@ -859,6 +875,8 @@
effect="light" effect="light"
placement="right" placement="right"
width="350" width="350"
:persistent="false"
teleported
> >
<template #reference> <template #reference>
<el-icon <el-icon
@ -927,6 +945,7 @@
:modal-append-to-body="false" :modal-append-to-body="false"
width="500px" width="500px"
center center
append-to-body
> >
<el-form <el-form
label-position="right" label-position="right"
@ -952,6 +971,8 @@
multiple multiple
collapse-tags collapse-tags
style="width: 100%;" style="width: 100%;"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="(value, key) of logLevel" v-for="(value, key) of logLevel"
@ -997,6 +1018,7 @@
:title="$T('SETTINGS_SET_PICGO_SERVER')" :title="$T('SETTINGS_SET_PICGO_SERVER')"
:modal-append-to-body="false" :modal-append-to-body="false"
center center
append-to-body
> >
<div class="notice-text"> <div class="notice-text">
{{ $T('SETTINGS_TIPS_SERVER_NOTICE') }} {{ $T('SETTINGS_TIPS_SERVER_NOTICE') }}
@ -1058,6 +1080,7 @@
:title="$T('SETTINGS_SYNC_CONFIG_TITLE')" :title="$T('SETTINGS_SYNC_CONFIG_TITLE')"
:modal-append-to-body="false" :modal-append-to-body="false"
center center
append-to-body
> >
<div class="notice-text"> <div class="notice-text">
{{ $T('SETTINGS_SYNC_CONFIG_NOTE') }} {{ $T('SETTINGS_SYNC_CONFIG_NOTE') }}
@ -1072,6 +1095,8 @@
<el-select <el-select
v-model="sync.type" v-model="sync.type"
style="width: 100%;" style="width: 100%;"
:persistent="false"
teleported
> >
<el-option <el-option
v-for="typeitem of syncType" v-for="typeitem of syncType"
@ -1151,6 +1176,7 @@
:title="$T('SETTINGS_UP_DOWN_DESC')" :title="$T('SETTINGS_UP_DOWN_DESC')"
:modal-append-to-body="false" :modal-append-to-body="false"
center center
append-to-body
> >
<el-form <el-form
label-position="right" label-position="right"
@ -1225,6 +1251,7 @@
draggable draggable
center center
align-center align-center
append-to-body
> >
<el-form <el-form
label-position="top" label-position="top"
@ -1238,8 +1265,7 @@
> >
<el-switch <el-switch
v-model="waterMarkForm.isAddWatermark" v-model="waterMarkForm.isAddWatermark"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1248,7 +1274,7 @@
> >
<el-radio-group v-model="waterMarkForm.watermarkType"> <el-radio-group v-model="waterMarkForm.watermarkType">
<el-radio label="text"> <el-radio label="text">
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT') }}} {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT') }}
</el-radio> </el-radio>
<el-radio label="image"> <el-radio label="image">
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE') }} {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE') }}
@ -1261,8 +1287,7 @@
> >
<el-switch <el-switch
v-model="waterMarkForm.isFullScreenWatermark" v-model="waterMarkForm.isFullScreenWatermark"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1333,8 +1358,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isRemoveExif" v-model="compressForm.isRemoveExif"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1352,15 +1376,18 @@
> >
<el-switch <el-switch
v-model="compressForm.isConvert" v-model="compressForm.isConvert"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-show="compressForm.isConvert" v-show="compressForm.isConvert"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT')" :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT')"
> >
<el-select v-model="compressForm.convertFormat"> <el-select
v-model="compressForm.convertFormat"
:persistent="false"
teleported
>
<el-option <el-option
v-for="item in availableFormat" v-for="item in availableFormat"
:key="item" :key="item"
@ -1374,8 +1401,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isFlip" v-model="compressForm.isFlip"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1383,8 +1409,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isFlop" v-model="compressForm.isFlop"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1392,8 +1417,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isReSize" v-model="compressForm.isReSize"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1420,8 +1444,7 @@
> >
<el-switch <el-switch
v-model="compressForm.skipReSizeOfSmallImg" v-model="compressForm.skipReSizeOfSmallImg"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1430,8 +1453,7 @@
> >
<el-switch <el-switch
v-model="compressForm.skipReSizeOfSmallImg" v-model="compressForm.skipReSizeOfSmallImg"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1439,8 +1461,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isReSizeByPercent" v-model="compressForm.isReSizeByPercent"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -1457,8 +1478,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isRotate" v-model="compressForm.isRotate"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item

View File

@ -5,6 +5,8 @@
<el-tooltip <el-tooltip
:content="pluginListToolTip" :content="pluginListToolTip"
placement="right" placement="right"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="el-icon-goods" class="el-icon-goods"
@ -16,6 +18,8 @@
<el-tooltip <el-tooltip
:content="updateAllToolTip" :content="updateAllToolTip"
placement="left" placement="left"
:persistent="false"
teleported
> >
<el-icon <el-icon
class="el-icon-update" class="el-icon-update"
@ -30,6 +34,8 @@
> >
<el-icon <el-icon
class="el-icon-download" class="el-icon-download"
:persistent="false"
teleported
@click="handleImportLocalPlugin" @click="handleImportLocalPlugin"
> >
<Download /> <Download />
@ -194,6 +200,7 @@
c: configName c: configName
})" })"
width="70%" width="70%"
append-to-body
> >
<config-form <config-form
:id="configName" :id="configName"

View File

@ -81,6 +81,7 @@
v-model="keyBindingVisible" v-model="keyBindingVisible"
:title="$T('SHORTCUT_CHANGE_UPLOAD')" :title="$T('SHORTCUT_CHANGE_UPLOAD')"
:modal-append-to-body="false" :modal-append-to-body="false"
append-to-body
> >
<el-form <el-form
label-position="top" label-position="top"

View File

@ -12,12 +12,14 @@
placement="top" placement="top"
effect="light" effect="light"
:content="$T('UPLOAD_VIEW_HINT')" :content="$T('UPLOAD_VIEW_HINT')"
:persistent="false"
teleported
> >
<span <span
id="upload-view-title" id="upload-view-title"
@click="handlePicBedNameClick(picBedName, picBedConfigName)" @click="handlePicBedNameClick(picBedName, picBedConfigName)"
> >
{{ picBedName }} - {{ picBedConfigName }} {{ picBedName }} - {{ picBedConfigName || 'Default' }}
</span> </span>
</el-tooltip> </el-tooltip>
<el-icon <el-icon
@ -156,6 +158,7 @@
draggable draggable
center center
align-center align-center
append-to-body
> >
<el-form <el-form
label-position="top" label-position="top"
@ -169,8 +172,7 @@
> >
<el-switch <el-switch
v-model="waterMarkForm.isAddWatermark" v-model="waterMarkForm.isAddWatermark"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -192,8 +194,7 @@
> >
<el-switch <el-switch
v-model="waterMarkForm.isFullScreenWatermark" v-model="waterMarkForm.isFullScreenWatermark"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -264,8 +265,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isRemoveExif" v-model="compressForm.isRemoveExif"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -283,15 +283,18 @@
> >
<el-switch <el-switch
v-model="compressForm.isConvert" v-model="compressForm.isConvert"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-show="compressForm.isConvert" v-show="compressForm.isConvert"
:label="$T('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT')" :label="$T('UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT')"
> >
<el-select v-model="compressForm.convertFormat"> <el-select
v-model="compressForm.convertFormat"
:persistent="false"
teleported
>
<el-option <el-option
v-for="item in availableFormat" v-for="item in availableFormat"
:key="item" :key="item"
@ -305,8 +308,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isFlip" v-model="compressForm.isFlip"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -314,8 +316,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isFlop" v-model="compressForm.isFlop"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -323,8 +324,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isReSize" v-model="compressForm.isReSize"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -351,8 +351,7 @@
> >
<el-switch <el-switch
v-model="compressForm.skipReSizeOfSmallImg" v-model="compressForm.skipReSizeOfSmallImg"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -361,8 +360,7 @@
> >
<el-switch <el-switch
v-model="compressForm.skipReSizeOfSmallImg" v-model="compressForm.skipReSizeOfSmallImg"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -370,8 +368,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isReSizeByPercent" v-model="compressForm.isReSizeByPercent"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -388,8 +385,7 @@
> >
<el-switch <el-switch
v-model="compressForm.isRotate" v-model="compressForm.isRotate"
active-color="#13ce66" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;"
inactive-color="#ff4949"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -449,7 +445,7 @@ import {
import { ElMessage as $message } from 'element-plus' import { ElMessage as $message } from 'element-plus'
// //
import { getConfig, saveConfig, sendToMain } from '@/utils/dataSender' import { getConfig, saveConfig, sendToMain, triggerRPC } from '@/utils/dataSender'
// //
import { IBuildInCompressOptions, IBuildInWaterMarkOptions } from 'piclist' import { IBuildInCompressOptions, IBuildInWaterMarkOptions } from 'piclist'
@ -459,6 +455,7 @@ import { useRouter } from 'vue-router'
// //
import { PICBEDS_PAGE } from '@/router/config' import { PICBEDS_PAGE } from '@/router/config'
import { IRPCActionType } from '~/universal/types/enum'
const $router = useRouter() const $router = useRouter()
@ -602,16 +599,18 @@ function onProgressChange (val: number) {
} }
} }
async function handlePicBedNameClick (picBedName: string, picBedConfigName: string) { async function handlePicBedNameClick (_picBedName: string, picBedConfigName: string | undefined) {
const formatedpicBedConfigName = picBedConfigName || 'Default'
const currentPicBed = await getConfig<string>('picBed.current') const currentPicBed = await getConfig<string>('picBed.current')
const currentPicBedConfig = await getConfig<any[]>(`uploader.${currentPicBed}`) as any || {} const currentPicBedConfig = await getConfig<any[]>(`uploader.${currentPicBed}`) as any || {}
const configList = currentPicBedConfig.configList || [] const configList = await triggerRPC<IUploaderConfigItem>(IRPCActionType.GET_PICBED_CONFIG_LIST, currentPicBed)
const config = configList.find((item: any) => item._configName === picBedConfigName) const currentConfigList = configList?.configList ?? []
const config = currentConfigList.find((item: any) => item._configName === formatedpicBedConfigName)
$router.push({ $router.push({
name: PICBEDS_PAGE, name: PICBEDS_PAGE,
params: { params: {
type: currentPicBed, type: currentPicBed,
configId: config._id configId: config?._id || ''
}, },
query: { query: {
defaultConfigId: currentPicBedConfig.defaultId || '' defaultConfigId: currentPicBedConfig.defaultId || ''

View File

@ -68,6 +68,7 @@
placement="top" placement="top"
style="color: #fff; font-size: 12px;width: 100%;" style="color: #fff; font-size: 12px;width: 100%;"
:disabled="picBedConfigList.length === 0" :disabled="picBedConfigList.length === 0"
teleported
> >
{{ $T('MANAGE_LOGIN_PAGE_PANE_IMPORT') }} {{ $T('MANAGE_LOGIN_PAGE_PANE_IMPORT') }}
<template #dropdown> <template #dropdown>

View File

@ -683,6 +683,7 @@ interface ILocales {
MANAGE_BUCKET_SORT_TYPE: string MANAGE_BUCKET_SORT_TYPE: string
MANAGE_BUCKET_SORT_TIME: string MANAGE_BUCKET_SORT_TIME: string
MANAGE_BUCKET_SORT_SELECTED: string MANAGE_BUCKET_SORT_SELECTED: string
MANAGE_BUCKET_INIT: string
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: string MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: string
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: string MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: string
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: string MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: string

722
yarn.lock

File diff suppressed because it is too large Load Diff