Feature(custom): rewrite upload and image process page

This commit is contained in:
Kuingsmile
2025-08-05 14:31:23 +08:00
parent 11dd2e7238
commit b1f514e80c
15 changed files with 2379 additions and 761 deletions

36
.vscode/launch.json vendored
View File

@@ -2,34 +2,38 @@
"version": "0.2.0",
"configurations": [
{
"name": "Electron: Main",
"name": "Debug Main Process",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"cwd": "${workspaceRoot}",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite.cmd"
},
"preLaunchTask": "electron-debug",
"args": ["--remote-debugging-port=9223", "./dist_electron"],
"outFiles": ["${workspaceFolder}/dist_electron/**/*.js"]
"runtimeArgs": ["--sourcemap"],
"env": {
"REMOTE_DEBUGGING_PORT": "9222"
}
},
{
"name": "Electron: Renderer",
"type": "chrome",
"name": "Debug Renderer Process",
"port": 9222,
"request": "attach",
"port": 9223,
"urlFilter": "http://localhost:*",
"timeout": 30000,
"webRoot": "${workspaceFolder}/src",
"sourceMapPathOverrides": {
"webpack:///./src/*": "${webRoot}/*"
"type": "chrome",
"webRoot": "${workspaceFolder}/src/renderer",
"timeout": 60000,
"presentation": {
"hidden": true
}
}
],
"compounds": [
{
"name": "Electron: All",
"configurations": ["Electron: Main", "Electron: Renderer"]
"name": "Debug All",
"configurations": ["Debug Main Process", "Debug Renderer Process"],
"presentation": {
"order": 1
}
}
]
}

View File

@@ -1,10 +1,5 @@
const isDevelopment = process.env.NODE_ENV !== 'production'
export const MANUAL_WINDOW_URL =
process.env.NODE_ENV === 'development'
? 'http://localhost:3000/documents'
: 'index.html/documents'
export const MINI_WINDOW_URL = isDevelopment
? 'http://localhost:3000/mini-page'
: 'index.html/mini-page'

View File

@@ -1,3 +1,4 @@
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import bus from '@core/bus'
@@ -13,14 +14,6 @@ import { configPaths } from '#/utils/configPaths'
import { T as $t } from '~/i18n'
import logo from '../../../../../resources/logo.png?asset'
import {
MANUAL_WINDOW_URL,
MINI_WINDOW_URL,
RENAME_WINDOW_URL,
SETTING_WINDOW_URL,
TOOLBOX_WINDOW_URL,
TRAY_WINDOW_URL
} from './constants'
const windowList = new Map<IWindowList, IWindowListItem>()
@@ -34,6 +27,8 @@ const getDefaultWindowSizes = (): { width: number; height: number } => {
height: mainWindowHeight || 800
}
}
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const preloadPath = fileURLToPath(new URL('../preload/index.mjs', import.meta.url))
const { width: defaultWindowWidth, height: defaultWindowHeight } = getDefaultWindowSizes()
@@ -58,29 +53,6 @@ const trayWindowOptions = {
}
}
const manualWindowOptions = {
height: 800,
width: 1200,
show: false,
frame: true,
center: true,
fullscreenable: true,
resizable: true,
title: 'Manual',
vibrancy: 'ultra-dark',
transparent: false,
webPreferences: {
sandbox: false,
webviewTag: true,
backgroundThrottling: false,
preload: preloadPath,
nodeIntegration: false,
contextIsolation: true,
nodeIntegrationInWorker: true,
webSecurity: false
}
} as IBrowserWindowOptions
const settingWindowOptions = {
height: defaultWindowHeight,
width: defaultWindowWidth,
@@ -167,7 +139,7 @@ const toolboxWindowOptions = {
fullscreenable: false,
resizable: false,
title: `PicList ${$t('TOOLBOX')}`,
vibrancy: 'ultra-dark',
backgroundColor: '#ebeef5',
icon: logo,
webPreferences: {
sandbox: false,
@@ -191,30 +163,31 @@ windowList.set(IWindowList.TRAY_WINDOW, {
multiple: false,
options: () => trayWindowOptions,
callback (window) {
window.loadURL(TRAY_WINDOW_URL)
if (!app.isPackaged && process.env.ELECTRON_RENDERER_URL) {
console.log('load setting window from renderer url')
window.loadURL(process.env.ELECTRON_RENDERER_URL)
} else {
window.loadFile(path.join(__dirname, '../render/index.html'))
}
window.on('blur', () => {
window.hide()
})
}
})
windowList.set(IWindowList.MANUAL_WINDOW, {
isValid: true,
multiple: false,
options: () => manualWindowOptions,
callback (window) {
window.loadURL(MANUAL_WINDOW_URL)
window.focus()
}
})
windowList.set(IWindowList.SETTING_WINDOW, {
isValid: true,
multiple: false,
options: () => settingWindowOptions,
callback (window, windowManager) {
window.loadURL(SETTING_WINDOW_URL)
window.webContents.openDevTools({ mode: 'detach' })
if (!app.isPackaged && process.env.ELECTRON_RENDERER_URL) {
console.log('load setting window from renderer url')
window.loadURL(`${process.env.ELECTRON_RENDERER_URL}#main-page/upload`)
} else {
window.loadFile(path.join(__dirname, '../render/index.html'), {
hash: 'main-page/upload'
})
}
window.on('closed', () => {
bus.emit(TOGGLE_SHORTKEY_MODIFIED_MODE, false)
if (process.platform === 'linux') {
@@ -233,7 +206,13 @@ windowList.set(IWindowList.MINI_WINDOW, {
multiple: false,
options: () => miniWindowOptions,
callback (window) {
window.loadURL(MINI_WINDOW_URL)
if (!app.isPackaged && process.env.ELECTRON_RENDERER_URL) {
window.loadURL(`${process.env.ELECTRON_RENDERER_URL}#mini-page`)
} else {
window.loadFile(path.join(__dirname, '../render/index.html'), {
hash: 'mini-page'
})
}
}
})
@@ -242,7 +221,14 @@ windowList.set(IWindowList.RENAME_WINDOW, {
multiple: true,
options: () => renameWindowOptions,
async callback (window, windowManager) {
window.loadURL(RENAME_WINDOW_URL)
if (!app.isPackaged && process.env.ELECTRON_RENDERER_URL) {
console.log('load setting window from renderer url')
window.loadURL(`${process.env.ELECTRON_RENDERER_URL}#rename-page`)
} else {
window.loadFile(path.join(__dirname, '../render/index.html'), {
hash: 'rename-page'
})
}
const currentWindow = windowManager.getAvailableWindow(true)
if (currentWindow && currentWindow.isVisible()) {
const { x, y, width, height } = currentWindow.getBounds()
@@ -258,7 +244,14 @@ windowList.set(IWindowList.TOOLBOX_WINDOW, {
multiple: false,
options: () => toolboxWindowOptions,
async callback (window, windowManager) {
window.loadURL(TOOLBOX_WINDOW_URL)
if (!app.isPackaged && process.env.ELECTRON_RENDERER_URL) {
console.log('load setting window from renderer url')
window.loadURL(`${process.env.ELECTRON_RENDERER_URL}#toolbox-page`)
} else {
window.loadFile(path.join(__dirname, '../render/index.html'), {
hash: 'toolbox-page'
})
}
const currentWindow = windowManager.getAvailableWindow(true)
if (currentWindow && currentWindow.isVisible()) {
const { x, y, width, height } = currentWindow.getBounds()

View File

@@ -29,12 +29,6 @@ export default [
}
}
},
{
action: IRPCActionType.OPEN_MANUAL_WINDOW,
handler: async () => {
windowManager.get(IWindowList.MANUAL_WINDOW)!.show()
}
},
{
action: IRPCActionType.OPEN_MINI_WINDOW,
handler: async () => {

View File

@@ -11,14 +11,12 @@
import type { IConfig } from 'piclist'
import { onBeforeMount, onMounted } from 'vue'
import { useATagClick } from '@/hooks/useATagClick'
import { useStore } from '@/hooks/useStore'
import { getConfig } from '@/utils/dataSender'
import { pageReloadCount } from '@/utils/global'
import { useAppStore } from './hooks/appStore'
useATagClick()
const store = useStore()
const appStore = useAppStore()

File diff suppressed because it is too large Load Diff

View File

@@ -728,7 +728,7 @@ onBeforeMount(() => {
/* Scrollbar Styling */
::-webkit-scrollbar {
width: 4px;
display: none;
}
::-webkit-scrollbar-track {
@@ -737,7 +737,7 @@ onBeforeMount(() => {
::-webkit-scrollbar-thumb {
background: var(--color-border);
border-radius: 3px;
border-radius: 0px;
}
::-webkit-scrollbar-thumb:hover {

View File

@@ -34,10 +34,104 @@
"toggle": "Toggle Theme"
}
},
"pages": {
"upload": {
"uploadViewHint": "Click to open picbeds settings",
"imageProcessName": "Image Processing",
"changePicBed": "Change PicBed",
"dragFileToHere": "Drag file to here, or click to upload",
"dragValidPictureOrUrl": "Please drag a valid picture file or URL here",
"uploadHint": "All formats are supported, but images are recommended",
"uploadFailed": "Upload Failed",
"quickUpload": "Quick Upload",
"clipboardPicture": "Clipboard",
"clickToUpload": "Click to Upload",
"urlUpload": "URL Upload",
"inputUrlTip": "Please enter URL",
"httpPrefixTip": "Starts with http:// or https://",
"inputValidUrl": "Please enter a valid URL",
"linkFormat": "Link Format",
"outputFormat": "Output Format",
"urlType": {
"title": "Link Type",
"normal": "Long Link",
"short": "Short Link"
}
},
"imageProcess": {
"title": "Image Processing Settings",
"description": "Configure image processing options, including compression, watermarking, format conversion, etc.",
"generalSettings": "General",
"watermarkSettings": "Watermark",
"transformSettings": "Transform",
"cancel": "Cancel",
"confirm": "Confirm",
"general": {
"skipProcessExtList": "Skip Processed File Extensions",
"skipProcessExtListLabel": "Skip Processed Extensions",
"skipProcessExtListPlaceholder": "Enter file extensions to skip processing, separated by commas (e.g.: jpg,png,gif)",
"basicImageProcessing": "Basic Image Processing",
"isRemoveExif": "Remove Exif Information",
"quality": "Compression Quality (1-100)",
"formatConversion": "Image Format Conversion",
"isConvert": "Convert Format",
"destinationFormat": "Destination Format",
"specificFormatConversion": "Specific Format Conversion, please fill in JSON format, such as: {\"png\": \"jpg\"}"
},
"watermark": {
"title": "Watermark Settings",
"description": "Add text or image watermark to the image",
"isAdd": "Enable or Disable Watermark",
"type": "Watermark Type",
"text": "Text",
"image": "Image",
"isFullScreen": "Enable Full Screen Watermark",
"degree": "Watermark Rotation Angle",
"scaleRatio": "Watermark Scale Ratio",
"inputText": "Watermark Text",
"inputTextPlaceholder": "Please enter watermark text",
"textFontPath": "Watermark Font Path (Automatically downloaded before first use)",
"textFontPathPlaceholder": "Optional, please enter path",
"color": "Watermark Color, manually enter or use color picker",
"imagePath": "Watermark Image Path (Leave empty to use default image)",
"imagePathPlaceholder": "Optional, please enter path",
"position": "Watermark Position",
"positionOptions": {
"top": "Top",
"bottom": "Bottom",
"left": "Left",
"right": "Right",
"topLeft": "Top Left",
"topRight": "Top Right",
"bottomLeft": "Bottom Left",
"bottomRight": "Bottom Right",
"center": "Center"
}
},
"transform": {
"title": "Transform Settings",
"description": "Adjust image size, rotation, flipping, etc.",
"isFlip": "Vertical Flip",
"isFlop": "Horizontal Flip",
"rotationTitle": "Rotation Settings",
"rotationDescription": "Set image rotation parameters",
"isRotate": "Enable Rotation",
"rotationDegree": "Rotation Angle",
"resizeTitle": "Resize",
"resizeDescription": "Set image scaling parameters",
"isResize": "Enable Resize",
"resizeWidth": "Resize Width (0 means scale by height)",
"resizeHeight": "Resize Height (0 means scale by width)",
"skipResizeOfSmallImgHeight": "Skip resizing when image is smaller than set",
"percentageResize": "Resize by Percentage",
"isResizeByPercent": "Enable Resize by Percentage",
"isResizeByPercentHint": "Higher priority",
"resizePercent": "Resize Percentage (Enter 50 for 50%)"
}
}
},
"OPEN_MAIN_WINDOW": "Open Main Window",
"OPERATION_SUCCEED": "Operation Succeed",
"QUICK_UPLOAD": "Quick Upload",
"PICBED_QRCODE": "Picbed Qrcode",
"CONFIG_THING": "Config ${c}",
"TOOLBOX_TITLE": "Troubleshoot PicList runtime issues",
"TOOLBOX_SUB_TITLE": "Scan the following items immediately to fix usage issues",
@@ -57,11 +151,8 @@
"MANUAL_PAGE_OPEN_BY_BUILD_IN": "Built-in Window",
"MANUAL_PAGE_OPEN_SETTING_TIP": "Select the way to open the manual",
"UPLOAD_VIEW_HINT": "Click to open picbeds settings",
"MANAGE_PAGE": "Manage",
"GALLERY": "Gallery",
"REFRESH": "Refresh",
"MANUAL": "Manual",
"PICBEDS_SETTINGS": "Picbeds",
"PICLIST_SETTINGS": "Settings",
"PLUGIN_SETTINGS": "Plugins",
"CHOOSE_PICBED": "Choose Picbed",
@@ -91,49 +182,6 @@
"GALLERY_SEARCH_URL": "Search by URL",
"GALLERY_MATCHED": " Matched: ",
"UPLOAD_PAGE_COPY_UPLOAD_API": "Copy Upload API",
"UPLOAD_PAGE_IMAGE_PROCESS_NAME": "Image Processing",
"UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE": "Image Processing Settings",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST": "Skip Process Ext List",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS": "Enter the file extensions to skip processing, separated by commas (e.g., jpg,png,gif)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM": "Add Watermark",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE": "Watermark Type",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT": "Text",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE": "Image",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM": "Full-Screen Watermark",
"UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE": "Watermark Angle",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT": "Watermark Text",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH": "Watermark Font Path (download font file for the first time)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO": "Watermark Size Ratio",
"UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR": "Watermark Color, Please select from the color picker",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPATH": "Watermark Image Path (leave blank to use default image)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION": "Watermark Position",
"UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF": "Remove EXIF Info",
"UPLOAD_PAGE_IMAGE_PROCESS_QUALITY": "Compression Quality(1-100)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT": "Convert Format",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT": "Destination Format",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC": "Specific Format, Please enter in json format, e.g. {\"png\": \"jpg\"}",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP": "Whether to flip vertically",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP": "Whether to flip horizontally",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE": "Resize to fixed size",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH": "Width(Set to 0 to scale by height)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT": "Height(Set to 0 to scale by width)",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT": "Skip resize when image height is smaller than target height",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH": "Skip resize when image width is smaller than target width",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT": "Resize by percentage (Higher priority)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT": "Resize Percentage, enter 50 for 50%",
"UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE": "Rotate",
"UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE": "Rotation Angle",
"UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM": "Save",
"UPLOAD_PAGE_IMAGE_PROCESS_CANCEL": "Cancel",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP": "top",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM": "bottom",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT": "left",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT": "right",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT": "top left",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT": "top right",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT": "bottom left",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT": "bottom right",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER": "center",
"UPLOAD_SHORT_URL": "Short",
"UPLOAD_NORMAL_URL": "Long",
"SETTINGS": "Settings",
@@ -325,14 +373,7 @@
"SHORTCUT_CHANGE_UPLOAD": "Change Upload Shortcut",
"WAIT_TO_UPLOAD": "Wait to Upload",
"ALREADY_UPLOAD": "Already Uploaded",
"DRAG_FILE_TO_HERE": "Drag file to here, or",
"CLICK_TO_UPLOAD": "click to upload",
"LINK_FORMAT": "Link Format",
"CLIPBOARD_PICTURE": "Clipboard",
"TIPS_DRAG_VALID_PICTURE_OR_URL": "Drag valid picture or url to here",
"TIPS_INPUT_URL": "Input URL",
"TIPS_HTTP_PREFIX": "http:// or https://",
"TIPS_INPUT_VALID_URL": "Input valid URL",
"PLUGIN_SEARCH_PLACEHOLDER": "Search picgo plugins on npm, or click the button to view the awesome plugins list",
"PLUGIN_INSTALL": "Install",
"PLUGIN_INSTALLING": "Installing...",

View File

@@ -14,7 +14,6 @@
"gallery": "相册",
"settings": "设置",
"plugins": "插件",
"manual": "手册",
"picbed": "图床",
"close": "关闭",
"copyPicBedConfig": "复制图床设置",
@@ -35,10 +34,104 @@
"toggle": "切换主题"
}
},
"pages": {
"upload": {
"uploadViewHint": "点击打开图床设置",
"imageProcessName": "图片处理",
"changePicBed": "切换图床",
"dragFileToHere": "将文件拖到此处,或单击上传",
"dragValidPictureOrUrl": "请拖入合法的图片文件或者图片URL地址",
"uploadHint": "支持所有文件类型,但推荐仅上传图片",
"uploadFailed": "上传失败",
"quickUpload": "快捷上传",
"clipboardPicture": "剪贴板图片",
"clickToUpload": "点击上传",
"urlUpload": "URL上传",
"inputUrlTip": "请输入URL",
"httpPrefixTip": "http://或https://开头",
"inputValidUrl": "请输入合法的URL",
"linkFormat": "链接格式",
"outputFormat": "输出格式",
"urlType": {
"title": "链接类型",
"normal": "长链接",
"short": "短链接"
}
},
"imageProcess": {
"title": "图片处理设置",
"description": "配置图片处理选项,包括压缩、水印、格式转换等",
"generalSettings": "常规",
"watermarkSettings": "水印",
"transformSettings": "变换",
"cancel": "取消",
"confirm": "确认",
"general": {
"skipProcessExtList": "跳过处理的文件扩展名列表",
"skipProcessExtListLabel": "跳过处理的扩展名",
"skipProcessExtListPlaceholder": "输入要跳过处理的文件扩展名以逗号分隔例如jpg,png,gif",
"basicImageProcessing": "基本图像处理",
"isRemoveExif": "移除 Exif 信息",
"quality": "压缩质量 (1-100)",
"formatConversion": "图片格式转换",
"isConvert": "转换格式",
"destinationFormat": "目标格式",
"specificFormatConversion": "精细化转换格式,请填写 JSON 格式,如: {\"png\": \"jpg\"}"
},
"watermark": {
"title": "水印设置",
"description": "添加文字或图片水印到图片上",
"isAdd": "启用或禁用水印",
"type": "水印类型",
"text": "文字",
"image": "图片",
"isFullScreen": "是否全屏水印",
"degree": "水印旋转角度",
"scaleRatio": "水印占原图比例",
"inputText": "水印文字",
"inputTextPlaceholder": "请输入水印文字",
"textFontPath": "水印字体路径(第一次使用前自动下载)",
"textFontPathPlaceholder": "可选,请输入路径",
"color": "水印颜色,手动输入或取色器",
"imagePath": "水印图片路径(留空使用默认图片)",
"imagePathPlaceholder": "可选,请输入路径",
"position": "水印位置",
"positionOptions": {
"top": "上",
"bottom": "下",
"left": "左",
"right": "右",
"topLeft": "左上",
"topRight": "右上",
"bottomLeft": "左下",
"bottomRight": "右下",
"center": "中"
}
},
"transform": {
"title": "变换设置",
"description": "调整图片大小、旋转、翻转等",
"isFlip": "垂直翻转",
"isFlop": "水平翻转",
"rotationTitle": "旋转设置",
"rotationDescription": "设置图片旋转参数",
"isRotate": "启用旋转",
"rotationDegree": "旋转角度",
"resizeTitle": "调整大小",
"resizeDescription": "设置图片缩放参数",
"isResize": "启用调整大小",
"resizeWidth": "调整宽度 (0 表示按高度等比缩放)",
"resizeHeight": "调整高度 (0 表示按宽度等比缩放)",
"skipResizeOfSmallImgHeight": "当图片小于设定时跳过缩放",
"percentageResize": "按比例调整尺寸",
"isResizeByPercent": "启用按比例调整",
"isResizeByPercentHint": "优先级更高",
"resizePercent": "调整比例 (输入 50 表示 50%)"
}
}
},
"OPEN_MAIN_WINDOW": "打开主窗口",
"OPERATION_SUCCEED": "操作成功",
"QUICK_UPLOAD": "快捷上传",
"PICBED_QRCODE": "图床配置二维码",
"CONFIG_THING": "配置${c}",
"TOOLBOX_TITLE": "排查 PicList 运行时问题",
"TOOLBOX_SUB_TITLE": "立即扫描以下项目,修复使用问题",
@@ -58,11 +151,8 @@
"MANUAL_PAGE_OPEN_BY_BUILD_IN": "内置窗口",
"MANUAL_PAGE_OPEN_SETTING_TIP": "选择手册打开方式",
"UPLOAD_VIEW_HINT": "点击打开图床设置",
"MANAGE_PAGE": "管理",
"GALLERY": "相册",
"REFRESH": "刷新",
"MANUAL": "手册",
"PICBEDS_SETTINGS": "图床",
"PICLIST_SETTINGS": "设置",
"PLUGIN_SETTINGS": "插件",
"CHOOSE_PICBED": "选择图床",
@@ -92,49 +182,6 @@
"GALLERY_SEARCH_URL": "搜索URL",
"GALLERY_MATCHED": " 匹配到: ",
"UPLOAD_PAGE_COPY_UPLOAD_API": "复制上传API",
"UPLOAD_PAGE_IMAGE_PROCESS_NAME": "图片处理",
"UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE": "图片处理设置",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST": "跳过处理的文件扩展名列表",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS": "请填写需要跳过处理的文件扩展名列表, 以英文逗号分隔, 如: jpg,png,gif",
"UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM": "是否添加水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE": "水印类型",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT": "文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE": "图片",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM": "是否全屏水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE": "水印角度",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT": "水印文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH": "水印字体路径(第一次需下载字体文件)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO": "水印占原图比例",
"UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR": "水印颜色,请从取色器中选择",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPATH": "水印图片路径(留空使用默认图片)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION": "水印位置",
"UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF": "是否移除EXIF信息",
"UPLOAD_PAGE_IMAGE_PROCESS_QUALITY": "压缩质量(1-100)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT": "是否转换格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT": "转换目的格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC": "精细化转换格式, 请输入JSON格式如: {\"png\": \"jpg\"}",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP": "是否进行垂直翻转",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP": "是否进行水平翻转",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE": "是否按固定尺寸调整图片",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH": "调整尺寸宽度(设为0则按高度等比缩放)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT": "调整尺寸高度(设为0则按宽度等比缩放)",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT": "当图片高度小于设定高度时跳过缩放",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH": "当图片宽度小于设定宽度时跳过缩放",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT": "是否按比例调整尺寸,优先级更高",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT": "调整尺寸比例, 输入50表示50%",
"UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE": "是否旋转",
"UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE": "旋转角度",
"UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM": "保存",
"UPLOAD_PAGE_IMAGE_PROCESS_CANCEL": "取消",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP": "上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM": "下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT": "左",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT": "右",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT": "左上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT": "右上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT": "左下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT": "右下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER": "中",
"UPLOAD_SHORT_URL": "短链接",
"UPLOAD_NORMAL_URL": "长链接",
"SETTINGS": "设置",
@@ -326,14 +373,7 @@
"SHORTCUT_CHANGE_UPLOAD": "修改上传快捷键",
"WAIT_TO_UPLOAD": "等待上传",
"ALREADY_UPLOAD": "已上传",
"DRAG_FILE_TO_HERE": "将文件拖拽到此处,或",
"CLICK_TO_UPLOAD": "点击上传",
"LINK_FORMAT": "链接格式",
"CLIPBOARD_PICTURE": "剪贴板",
"TIPS_DRAG_VALID_PICTURE_OR_URL": "请拖入合法的图片文件或者图片URL地址",
"TIPS_INPUT_URL": "请输入URL",
"TIPS_HTTP_PREFIX": "http://或者https://开头",
"TIPS_INPUT_VALID_URL": "请输入合法的URL",
"PLUGIN_SEARCH_PLACEHOLDER": "搜索npm上的PicGo插件或者点击上方按钮查看优秀插件列表",
"PLUGIN_INSTALL": "安装",
"PLUGIN_INSTALLING": "安装中",

View File

@@ -14,7 +14,6 @@
"gallery": "相簿",
"settings": "設定",
"plugins": "插件",
"manual": "手冊",
"picbed": "圖床",
"close": "關閉",
"copyPicBedConfig": "複製圖床設定",
@@ -35,10 +34,104 @@
"toggle": "切換主題"
}
},
"pages": {
"upload": {
"uploadViewHint": "點擊打開圖床設定",
"imageProcessName": "圖片處理",
"changePicBed": "切換圖床",
"dragFileToHere": "將文件拖到此處,或單擊上傳",
"dragValidPictureOrUrl": "請拖入合法的圖片文件或者圖片URL地址",
"uploadHint": "支持所有文件類型,但推薦僅上傳圖片",
"uploadFailed": "上傳失敗",
"quickUpload": "快捷上傳",
"clipboardPicture": "剪貼板圖片",
"clickToUpload": "點擊上傳",
"urlUpload": "URL上傳",
"inputUrlTip": "請輸入URL",
"httpPrefixTip": "以http://或https://開頭",
"inputValidUrl": "請輸入合法的URL",
"linkFormat": "連結格式",
"outputFormat": "輸出格式",
"urlType": {
"title": "連結類型",
"normal": "長連結",
"short": "短連結"
}
},
"imageProcess": {
"title": "圖片處理設置",
"description": "配置圖片處理選項,包括壓縮、水印、格式轉換等",
"generalSettings": "常規",
"watermarkSettings": "水印",
"transformSettings": "變換",
"cancel": "取消",
"confirm": "確認",
"general": {
"skipProcessExtList": "跳過處理的文件擴展名列表",
"skipProcessExtListLabel": "跳過處理的擴展名",
"skipProcessExtListPlaceholder": "輸入要跳過處理的文件擴展名以逗號分隔例如jpg,png,gif",
"basicImageProcessing": "基本圖像處理",
"isRemoveExif": "移除 Exif 信息",
"quality": "壓縮質量 (1-100)",
"formatConversion": "圖片格式轉換",
"isConvert": "轉換格式",
"destinationFormat": "目標格式",
"specificFormatConversion": "精細化轉換格式,請填寫 JSON 格式,如: {\"png\": \"jpg\"}"
},
"watermark": {
"title": "水印設置",
"description": "添加文字或圖片水印到圖片上",
"isAdd": "啟用或禁用水印",
"type": "水印類型",
"text": "文字",
"image": "圖片",
"isFullScreen": "是否全屏水印",
"degree": "水印旋轉角度",
"scaleRatio": "水印占原圖比例",
"inputText": "水印文字",
"inputTextPlaceholder": "請輸入水印文字",
"textFontPath": "水印字體路徑(第一次使用前自動下載)",
"textFontPathPlaceholder": "可選,請輸入路徑",
"color": "水印顏色,手動輸入或取色器",
"imagePath": "水印圖片路徑(留空使用默認圖片)",
"imagePathPlaceholder": "可選,請輸入路徑",
"position": "水印位置",
"positionOptions": {
"top": "上",
"bottom": "下",
"left": "左",
"right": "右",
"topLeft": "左上",
"topRight": "右上",
"bottomLeft": "左下",
"bottomRight": "右下",
"center": "中"
}
},
"transform": {
"title": "變換設置",
"description": "調整圖片大小、旋轉、翻轉等",
"isFlip": "垂直翻轉",
"isFlop": "水平翻轉",
"rotationTitle": "旋轉設置",
"rotationDescription": "設置圖片旋轉參數",
"isRotate": "啟用旋轉",
"rotationDegree": "旋轉角度",
"resizeTitle": "調整大小",
"resizeDescription": "設置圖片縮放參數",
"isResize": "啟用調整大小",
"resizeWidth": "調整寬度 (0 表示按高度等比縮放)",
"resizeHeight": "調整高度 (0 表示按寬度等比縮放)",
"skipResizeOfSmallImgHeight": "當圖片小於設定時跳過縮放",
"percentageResize": "按比例調整尺寸",
"isResizeByPercent": "啟用按比例調整",
"isResizeByPercentHint": "優先級更高",
"resizePercent": "調整比例 (輸入 50 表示 50%)"
}
}
},
"OPEN_MAIN_WINDOW": "打開主視窗",
"OPERATION_SUCCEED": "操作成功",
"QUICK_UPLOAD": "快速上傳",
"PICBED_QRCODE": "圖床配置 QRCODE",
"CONFIG_THING": "設定${c}",
"TOOLBOX_TITLE": "排查 PicList 執行時問題",
"TOOLBOX_SUB_TITLE": "立即掃描以下項目,修復使用問題",
@@ -58,11 +151,8 @@
"MANUAL_PAGE_OPEN_BY_BUILD_IN": "內置窗口",
"MANUAL_PAGE_OPEN_SETTING_TIP": "選擇打開手冊方式",
"UPLOAD_VIEW_HINT": "點擊打開圖床設定",
"MANAGE_PAGE": "管理",
"GALLERY": "相簿",
"REFRESH": "刷新",
"MANUAL": "手冊",
"PICBEDS_SETTINGS": "圖床",
"PICLIST_SETTINGS": "設定",
"PLUGIN_SETTINGS": "插件",
"CHOOSE_PICBED": "選擇圖床",
@@ -92,49 +182,6 @@
"GALLERY_SEARCH_URL": "搜尋URL",
"GALLERY_MATCHED": " 匹配到: ",
"UPLOAD_PAGE_COPY_UPLOAD_API": "複製上傳API",
"UPLOAD_PAGE_IMAGE_PROCESS_NAME": "圖片處理",
"UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE": "圖片處理設置",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST": "跳過處理的文件擴展名列表",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS": "請填寫需要跳過處理的文件擴展名列表, 以英文逗號分隔, 如: jpg,png,gif",
"UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM": "是否添加水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE": "水印類型",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT": "文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE": "圖片",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM": "是否全屏水印",
"UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE": "水印角度",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT": "水印文字",
"UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH": "水印字體路徑(第一次需下載字體文件)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO": "水印占原圖比例",
"UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR": "水印顏色,請從取色器中選擇",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPATH": "水印圖片路徑(留空使用預設圖片)",
"UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION": "水印位置",
"UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF": "是否移除EXIF信息",
"UPLOAD_PAGE_IMAGE_PROCESS_QUALITY": "壓縮質量(1-100)",
"UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT": "是否轉換格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT": "轉換目的格式",
"UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC": "指定格式, 请输入JSON格式配置如{\"jpg\":\"png\"}",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP": "是否進行垂直翻轉",
"UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP": "是否進行水平翻轉",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE": "是否按固定尺寸調整圖片",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH": "調整尺寸寬度(設為0則按高度等比縮放)",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT": "調整尺寸高度(設為0則按寬度等比縮放)",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT": "當圖片高度小於設定高度時跳過縮放",
"UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH": "當圖片寬度小於設定寬度時跳過縮放",
"UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT": "是否按比例調整尺寸,優先級更高",
"UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT": "調整尺寸比例輸入50表示50%",
"UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE": "是否旋轉",
"UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE": "旋轉角度",
"UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM": "儲存",
"UPLOAD_PAGE_IMAGE_PROCESS_CANCEL": "取消",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP": "上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM": "下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT": "左",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT": "右",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT": "左上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT": "右上",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT": "左下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT": "右下",
"UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER": "中",
"UPLOAD_SHORT_URL": "短連結",
"UPLOAD_NORMAL_URL": "长連結",
"SETTINGS": "設定",
@@ -326,14 +373,7 @@
"SHORTCUT_CHANGE_UPLOAD": "修改上傳快捷鍵",
"WAIT_TO_UPLOAD": "等待上傳",
"ALREADY_UPLOAD": "已上傳",
"DRAG_FILE_TO_HERE": "將檔案拖曳到此處,或",
"CLICK_TO_UPLOAD": "點擊上傳",
"LINK_FORMAT": "連結格式",
"CLIPBOARD_PICTURE": "剪貼簿",
"TIPS_DRAG_VALID_PICTURE_OR_URL": "請拖入合法的圖片檔案或者圖片URL地址",
"TIPS_INPUT_URL": "請輸入URL",
"TIPS_HTTP_PREFIX": "http://或者https://開頭",
"TIPS_INPUT_VALID_URL": "請輸入合法的URL",
"PLUGIN_SEARCH_PLACEHOLDER": "搜尋npm上的PicGo插件或者點擊上方按鈕查看優秀插件列表",
"PLUGIN_INSTALL": "安裝",
"PLUGIN_INSTALLING": "安裝中",

View File

@@ -5,8 +5,7 @@
>
<TitleBar />
<div class="app-background">
<div class="bg-gradient-primary" />
<div class="bg-gradient-secondary" />
<div class="bg-gradient" />
</div>
<Navigation />
<main class="main-content">
@@ -73,11 +72,13 @@ export default {
--color-surface: rgba(255, 255, 255, 0.8);
--color-surface-elevated: rgba(255, 255, 255, 0.95);
--color-border: rgba(0, 0, 0, 0.1);
--color-border-darker: #cdd0d6;
--color-border-secondary: rgba(0, 0, 0, 0.05);
--color-primary: #6366f1;
--color-primary-hover: #4f46e5;
--color-accent: #007aff;
--color-accent-hover: #0056b3;
--color-blue-common: #409eff;
--color-success: #34c759;
--color-warning: #ff9500;
--color-danger: #ff3b30;
@@ -122,13 +123,6 @@ export default {
:root.dark,
:root.auto.dark {
.nav-item {
color: var(--color-text-secondary);
}
.nav-item.active {
color: var(--color-accent);
}
h1,
h2,
@@ -195,23 +189,13 @@ body {
pointer-events: none;
}
.bg-gradient-primary {
position: absolute;
top: -50%;
right: -30%;
width: 80%;
height: 80%;
background: radial-gradient(circle, rgba(0, 122, 255, 0.05) 0%, transparent 70%);
border-radius: 50%;
}
.bg-gradient-secondary {
.bg-gradient {
position: absolute;
bottom: -40%;
left: -20%;
width: 60%;
height: 60%;
background: radial-gradient(circle, rgba(175, 82, 222, 0.03) 0%, transparent 70%);
background: radial-gradient(circle, rgba(199, 131, 233, 0.05) 0%, transparent 70%);
border-radius: 50%;
}

View File

@@ -1344,7 +1344,7 @@
</el-dialog>
<el-dialog
v-model="imageProcessDialogVisible"
:title="$t('UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE')"
:title="$t('pages.imageProcess.title')"
width="50%"
draggable
center

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
import { createRouter, createWebHistory } from 'vue-router'
import { createRouter, createWebHashHistory } from 'vue-router'
import MainPage from '@/layouts/Main.vue'
import ManageBucketPage from '@/manage/pages/BucketPage.vue'
@@ -20,7 +20,7 @@ import UploaderConfigPage from '@/pages/UploaderConfigPage.vue'
import * as config from '@/router/config'
export default createRouter({
history: createWebHistory(),
history: createWebHashHistory(),
routes: [
{
path: '/',

View File

@@ -41,8 +41,7 @@ export enum IWindowList {
TRAY_WINDOW = 'TRAY_WINDOW',
MINI_WINDOW = 'MINI_WINDOW',
RENAME_WINDOW = 'RENAME_WINDOW',
TOOLBOX_WINDOW = 'TOOLBOX_WINDOW',
MANUAL_WINDOW = 'MANUAL_WINDOW'
TOOLBOX_WINDOW = 'TOOLBOX_WINDOW'
}
export enum IRemoteNoticeActionType {
@@ -82,7 +81,6 @@ export enum IRPCActionType {
SET_CURRENT_LANGUAGE = 'SET_CURRENT_LANGUAGE',
OPEN_WINDOW = 'OPEN_WINDOW',
OPEN_MINI_WINDOW = 'OPEN_MINI_WINDOW',
OPEN_MANUAL_WINDOW = 'OPEN_MANUAL_WINDOW',
CLOSE_WINDOW = 'CLOSE_WINDOW',
MINIMIZE_WINDOW = 'MINIMIZE_WINDOW',
SHOW_MINI_PAGE_MENU = 'SHOW_MINI_PAGE_MENU',