refactor: 重构设置、API、图库与存储页面前端结构。

将操作日志并入设置侧栏,补齐检查更新提示与版本接口刷新;拆分各模块组件并修复图库搜索分页变量。
This commit is contained in:
O96u committed 2026-09-01 17:15:02 +08:00
1 parent 270af4e707
commit ac65c1eb9d
51 files changed
+5119 -2059

No files matched your search

+182 -5
View File
@@ -149,11 +149,13 @@
"url": "URL",
"markdown": "Markdown",
"html": "HTML",
"bbcode": "BBCode",
"copied": "Copied to clipboard",
"copiedLabel": "Copied {label}",
"copiedUrl": "URL copied",
"copiedMarkdown": "Markdown copied",
"copiedHtml": "HTML copied",
"copiedBbcode": "BBCode copied",
"copiedFormat": "Copied {format}",
"failed": "Copy failed",
"failedManual": "Copy failed — select the link manually",
@@ -181,12 +183,39 @@
},
"settings": {
"title": "System settings",
"pageTitle": "Settings & preferences",
"pageSubtitle": "Manage system configuration and activity logs",
"pageSubtitleBasic": "Manage system configuration and upload preferences",
"navBasic": "Basic",
"navDomains": "Domains & paths",
"navAccess": "Access control",
"navPreferences": "Preferences",
"navLogs": "Activity log",
"systemVersion": "Version",
"checkUpdate": "Check for updates",
"saveSettings": "Save settings",
"subtitle": "Saved to database; environment variables take precedence",
"featureToggles": "Feature toggles",
"featureTogglesHint": "Control registration and system behavior",
"pathAndLink": "Paths & links",
"pathAndLinkHint": "Control image URL format and upload directory structure",
"domainSeparationSection": "Domain separation",
"allowRegistration": "Open registration",
"allowRegistrationHint": "Allow new users to register (regular users see only their images)",
"accessControl": "Access control",
"refererHint": "Referer hotlink protection; comma-separated hostnames, empty = no restriction",
"refererDomainsLabel": "Allowed domains",
"refererTip": "Separate multiple domains with commas (,); wildcards are not supported",
"refererExamplesTitle": "Example",
"refererExamplesSample": "example.com, static.example.com",
"refererScenarioTitle": "Common use case",
"refererScenarioDesc": "Allow your main site and static site to embed images",
"refererEnabled": "Enabled",
"refererUnrestricted": "Unrestricted",
"systemInfo": "System",
"systemInfoHint": "Current version and updates",
"uploadConvenience": "Upload convenience",
"defaultCopyFormat": "Default copy format",
"refererPlaceholder": "example.com, www.example.com",
"domainSettings": "Domain settings",
"domainSeparationActive": "Domain separation enabled: image host serves images only; site host serves admin and API",
@@ -214,12 +243,15 @@
"badgeSaved": "Saved",
"badgeDefault": "Default",
"badgeUnset": "Not set",
"badgeOptional": "Optional",
"tokenEnv": "Environment",
"tokenDb": "Generated in app",
"tokenNone": "Not configured",
"apiTokenLine": "API Token · {source} ·",
"apiTokenLine": "Source: {source}",
"viewReleases": "View releases",
"updateAvailable": "Update available: {version}",
"upToDate": "You are on the latest version",
"checkUpdateFailed": "Failed to check for updates. Please try again later",
"unsavedChanges": "Unsaved changes",
"manageToken": "Manage token",
"envOverride": "Overridden by environment variable; cannot edit in UI",
@@ -278,11 +310,36 @@
"servingPublicShort": "Public",
"backendName": "Display name",
"badgeDefault": "Default",
"badgeDefaultStorage": "Default storage",
"badgeDisabled": "Disabled",
"badgeEnabled": "Enabled",
"overviewTitle": "Storage overview",
"overviewSubtitle": "Usage across all storage backends",
"overviewTotal": "Total capacity",
"overviewUsed": "Used",
"overviewFree": "Free",
"overviewUsageRate": "Overall usage",
"overviewQuota": "Total quota",
"overviewInstances": "Backends",
"overviewActive": "Active",
"capacityDistribution": "Distribution",
"backendType": "Type",
"storageId": "Storage ID",
"storageType": "Storage type",
"badgeLocal": "Local",
"defaultStorageTip": "Default storage: new uploads are saved to “{name}”. Use “Set as default” on another backend to change this.",
"supportedTitle": "Supported backends",
"supportedSubtitle": "PicHost supports multiple storage backends for different scenarios",
"supportedLocalDesc": "Ideal for small deployments and personal use",
"supportedR2Desc": "Highly available, low-cost object storage",
"supportedS3Title": "S3 compatible",
"supportedS3Desc": "Storage services compatible with the Amazon S3 API",
"footerTip": "The default backend receives all new uploads",
"statTotal": "Total",
"statUsed": "Used",
"statFree": "Free",
"statFileCount": "Files",
"statQuota": "Quota",
"usageRate": "Usage",
"indexImages": "PicHost images {count} · {size}",
"setDefault": "Set as default",
@@ -313,7 +370,16 @@
"uploadToday": "Uploaded today",
"uploadMonth": "Uploaded this month",
"uploadTotal": "Total uploads",
"storedCount": "Stored images",
"storedCount": "Stored now",
"totalFiles": "Total files",
"totalOccupied": "{size} used",
"storageUsage": "Storage usage",
"noQuota": "No quota configured",
"vsYesterday": "vs yesterday",
"vsLastMonth": "vs last month",
"trendUp": "↑ {p}%",
"trendDown": "↓ {p}%",
"trendFlat": "flat",
"deleteToday": "Deleted today",
"deleteMonth": "Deleted this month",
"deleteTotal": "Total deleted",
@@ -322,15 +388,39 @@
"sourceDistribution": "Uploads by source",
"sourceWeb": "Web",
"sourceApi": "API",
"tagWeb": "Web",
"tagApi": "API",
"noData": "No data",
"gallery": "Gallery",
"imagesSection": "All images",
"filterStorageAll": "All storage",
"storage": "Storage",
"searchPlaceholder": "Search filename",
"searchPlaceholderWide": "Search filename, tags, or links",
"filterType": "Image type",
"filterTypeAll": "All types",
"filterSource": "Upload source",
"filterSourceAll": "All sources",
"sourceWeb": "Web upload",
"sourceApi": "API upload",
"resetFilters": "Reset",
"batchActions": "Bulk actions",
"selectedItems": "{n} selected",
"colFilename": "Filename",
"colPreview": "Preview",
"colSize": "Size",
"colType": "Type",
"colSource": "Source",
"colUploadedAt": "Uploaded",
"colActions": "Actions",
"previewBadge": "Image",
"clear": "Clear",
"selected": "{n} selected",
"batchDelete": "Delete selected",
"batchSelect": "Batch select",
"viewMode": "View mode",
"viewGrid": "Grid view",
"viewList": "List view",
"selectAll": "Select all",
"invertSelection": "Invert",
"clearSelection": "Clear selection",
@@ -378,19 +468,23 @@
"previewFailed": "Preview failed",
"openPreview": "View full image",
"previewTitle": "Image details",
"previewSubtitle": "View image info and links",
"previewOriginalName": "Filename",
"previewUploadedAt": "Uploaded",
"previewSize": "Size",
"previewContentType": "Type",
"previewSizeDetail": "{size} ({bytes} bytes)",
"previewContentType": "File type",
"previewOwner": "Uploader",
"previewStorage": "Storage",
"previewKey": "Storage path",
"previewKey": "Image path",
"previewExtension": "Extension",
"previewDimensions": "Dimensions",
"previewDimensionsUnknown": "Loading…",
"previewUploadSource": "Upload source",
"uploadSourceUnknown": "Unknown",
"previewLinks": "Links",
"previewLinks": "Links & embed",
"previewCopyLink": "Copy link",
"previewDownload": "Download",
"previewOpen": "Open in new tab",
"previewClose": "Close",
"uploader": "Uploader: {name}",
@@ -402,6 +496,11 @@
"confirm": "Delete"
},
"pagination": {
"totalCount": "{total} {unit}",
"pageStatus": "Page {page} / {totalPages}",
"perPage": "{size} / page",
"pageSize": "Page size",
"pageNumber": "Page {page}",
"pageOf": "Page {page} / {totalPages} · {total} {unit}",
"totalOnly": "{total} {unit}",
"first": "First page",
@@ -409,6 +508,8 @@
"next": "Next page",
"last": "Last page",
"goTo": "Go",
"goToPrefix": "Go to",
"goToSuffix": "",
"pagePlaceholder": "Page"
},
"api": {
@@ -437,6 +538,74 @@
"newTokenDesc": "Copy and save it now. You can copy again from the field above after closing.",
"copyToken": "Copy token",
"saved": "Saved",
"searchPlaceholder": "Search endpoints…",
"showToken": "Show",
"hideToken": "Hide",
"helpText": "Need help? Read the full API docs",
"helpTitle": "Need help?",
"helpSubtitle": "Read the full API docs",
"expand": "Expand",
"collapse": "Collapse",
"viewDocs": "View docs",
"requestParams": "Request parameters",
"paramName": "Name",
"paramType": "Type",
"paramLocation": "In",
"paramRequired": "Required",
"paramDescription": "Description",
"required": "Yes",
"optional": "No",
"requestExample": "Request example",
"responseExample": "Response example",
"categories": {
"image": "Images",
"extension": "Plugins",
"system": "System"
},
"params": {
"upload": {
"image": "Primary upload field",
"file": "Compatibility field, single file",
"files": "Compatibility field, multiple files",
"token": "Twikoo protocol form token"
},
"list": {
"limit": "Page size, default 20, max 100",
"page": "Page number, starts at 1"
},
"search": {
"q": "Search keyword, required"
},
"delete": {
"key": "Storage path, e.g. images/2026/08/xxx.webp"
},
"batchDelete": {
"keys": "Array of image keys to delete"
},
"twikoo": {
"image": "Image file",
"token": "API token"
},
"backendId": "Storage backend ID, optional"
},
"debug": {
"title": "Try it",
"headers": "Headers",
"query": "Query",
"body": "Body",
"send": "Send request",
"response": "Response",
"selectFile": "Select file",
"noFileSelected": "No file selected",
"tokenPlaceholder": "Enter Auth-Token",
"invalidJson": "Invalid JSON",
"sendFailed": "Request failed",
"networkError": "Network error or unreachable",
"notesTitle": "Notes",
"noteSuccess": "200 means success with JSON body",
"noteError": "4xx / 5xx means failure; check error field",
"noteLimit": "Upload limit: up to 10 files, 10 MB each"
},
"docs": {
"upload": {
"title": "Upload images",
@@ -461,6 +630,14 @@
"twikoo": {
"title": "Twikoo-compatible upload",
"desc": "Twikoo / EasyImage 2.0 protocol; stored under images/. Fields: image + token."
},
"config": {
"title": "Get config",
"desc": "Public system config; no authentication required."
},
"count": {
"title": "Image count",
"desc": "Total images in your visible scope."
}
}
},
+185 -8
View File
@@ -149,11 +149,13 @@
"url": "直链",
"markdown": "Markdown",
"html": "HTML",
"bbcode": "BBCode",
"copied": "已复制到剪贴板",
"copiedLabel": "已复制 {label}",
"copiedUrl": "已复制直链",
"copiedMarkdown": "已复制 Markdown",
"copiedHtml": "已复制 HTML",
"copiedBbcode": "已复制 BBCode",
"copiedFormat": "已复制 {format}",
"failed": "复制失败",
"failedManual": "复制失败,请手动选中链接复制",
@@ -181,12 +183,39 @@
},
"settings": {
"title": "系统设置",
"pageTitle": "设置与偏好",
"pageSubtitle": "管理系统配置与操作日志",
"pageSubtitleBasic": "管理系统配置与上传偏好",
"navBasic": "基础设置",
"navDomains": "域名与路径",
"navAccess": "访问控制",
"navPreferences": "偏好设置",
"navLogs": "操作日志",
"systemVersion": "系统版本",
"checkUpdate": "检查更新",
"saveSettings": "保存设置",
"subtitle": "保存后写入数据库;环境变量优先级更高",
"featureToggles": "功能开关",
"featureTogglesHint": "控制注册与系统行为",
"pathAndLink": "路径与链接",
"pathAndLinkHint": "控制图片直链格式与上传目录结构",
"domainSeparationSection": "域名分离",
"allowRegistration": "开放用户注册",
"allowRegistrationHint": "允许新用户自行注册(普通用户仅可见自己的图片)",
"accessControl": "访问控制",
"refererHint": "Referer 防盗链,逗号分隔允许引用的域名,留空不限制",
"refererDomainsLabel": "允许引用的域名",
"refererTip": "多个域名请使用英文逗号 (,) 分隔,不支持通配符",
"refererExamplesTitle": "推荐示例",
"refererExamplesSample": "example.com, static.example.com",
"refererScenarioTitle": "常见场景",
"refererScenarioDesc": "允许主站与静态站点引用图片",
"refererEnabled": "已开启",
"refererUnrestricted": "未限制",
"systemInfo": "系统信息",
"systemInfoHint": "当前系统版本与更新",
"uploadConvenience": "上传便捷功能",
"defaultCopyFormat": "默认复制格式",
"refererPlaceholder": "example.com, www.example.com",
"domainSettings": "域名配置",
"domainSeparationActive": "已启用域名分离:图片域仅出图,管理域提供后台与 API",
@@ -214,12 +243,15 @@
"badgeSaved": "已保存",
"badgeDefault": "默认",
"badgeUnset": "未设置",
"badgeOptional": "可选",
"tokenEnv": "环境变量",
"tokenDb": "后台生成",
"tokenNone": "未配置",
"apiTokenLine": "API Token · {source} ·",
"apiTokenLine": "来源:{source}",
"viewReleases": "查看发行版",
"updateAvailable": "有新版本 {version}",
"upToDate": "当前已是最新版本",
"checkUpdateFailed": "检查更新失败,请稍后重试",
"unsavedChanges": "有未保存的更改",
"manageToken": "管理 Token",
"envOverride": "该项已由环境变量覆盖,无法在后台修改",
@@ -278,11 +310,36 @@
"servingPublicShort": "公开",
"backendName": "显示名称",
"badgeDefault": "默认",
"badgeDefaultStorage": "默认存储",
"badgeDisabled": "已停用",
"badgeEnabled": "已启用",
"overviewTitle": "存储总览",
"overviewSubtitle": "所有存储后端使用情况",
"overviewTotal": "总容量",
"overviewUsed": "已用容量",
"overviewFree": "剩余容量",
"overviewUsageRate": "总体使用率",
"overviewQuota": "总配额",
"overviewInstances": "存储实例",
"overviewActive": "活跃后台",
"capacityDistribution": "容量分布",
"backendType": "类型",
"storageId": "存储标识",
"storageType": "存储类型",
"badgeLocal": "本地",
"defaultStorageTip": "默认存储提示:新上传的图片将默认保存到「{name}」。可点击其他后端的「设为默认」进行修改。",
"supportedTitle": "支持的存储后端",
"supportedSubtitle": "PicHost 支持多种存储后端,满足不同场景需求",
"supportedLocalDesc": "适合小型部署和个人使用",
"supportedR2Desc": "高可用、低成本的对象存储",
"supportedS3Title": "S3 兼容",
"supportedS3Desc": "兼容 Amazon S3 协议的存储服务",
"footerTip": "默认存储后端将自动接收所有新上传的图片",
"statTotal": "总量",
"statUsed": "已用",
"statFree": "剩余",
"statFileCount": "文件数量",
"statQuota": "配额",
"usageRate": "使用率",
"indexImages": "PicHost 图片 {count} 张 · {size}",
"setDefault": "设为默认",
@@ -313,7 +370,16 @@
"uploadToday": "今日上传",
"uploadMonth": "本月上传",
"uploadTotal": "累计上传",
"storedCount": "当前库存",
"storedCount": "当前存储",
"totalFiles": "总文件数",
"totalOccupied": "共占用 {size}",
"storageUsage": "存储使用率",
"noQuota": "未配置容量上限",
"vsYesterday": "较昨日",
"vsLastMonth": "较上月",
"trendUp": "↑ {p}%",
"trendDown": "↓ {p}%",
"trendFlat": "持平",
"deleteToday": "今日删除",
"deleteMonth": "本月删除",
"deleteTotal": "累计删除",
@@ -322,15 +388,39 @@
"sourceDistribution": "上传来源分布",
"sourceWeb": "网页",
"sourceApi": "API",
"tagWeb": "网页",
"tagApi": "API",
"noData": "暂无数据",
"gallery": "图库记录",
"imagesSection": "全部图片",
"filterStorageAll": "全部存储",
"storage": "存储",
"searchPlaceholder": "搜索文件名",
"clear": "清除",
"searchPlaceholderWide": "搜索文件名、标签或链接",
"filterType": "图片类型",
"filterTypeAll": "全部类型",
"filterSource": "上传来源",
"filterSourceAll": "全部来源",
"sourceWeb": "网页上传",
"sourceApi": "API 上传",
"resetFilters": "重置",
"batchActions": "批量操作",
"selectedItems": "已选择 {n} 项",
"colFilename": "文件名",
"colPreview": "预览",
"colSize": "大小",
"colType": "类型",
"colSource": "来源",
"colUploadedAt": "上传时间",
"colActions": "操作",
"previewBadge": "图片",
"clear": "清空",
"selected": "已选 {n}",
"batchDelete": "批量删除",
"batchSelect": "批量选择",
"viewMode": "视图模式",
"viewGrid": "网格视图",
"viewList": "列表视图",
"selectAll": "全选",
"invertSelection": "反选",
"clearSelection": "取消选择",
@@ -378,19 +468,23 @@
"previewFailed": "预览失败",
"openPreview": "查看大图",
"previewTitle": "图片详情",
"previewSubtitle": "查看图片信息与链接",
"previewOriginalName": "文件名",
"previewUploadedAt": "上传时间",
"previewSize": "大小",
"previewContentType": "类型",
"previewOwner": "上传者",
"previewStorage": "存储",
"previewKey": "存储路径",
"previewSizeDetail": "{size}({bytes} 字节)",
"previewContentType": "文件类型",
"previewOwner": "上传用户",
"previewStorage": "存储位置",
"previewKey": "图片路径",
"previewExtension": "扩展名",
"previewDimensions": "尺寸",
"previewDimensionsUnknown": "加载中…",
"previewUploadSource": "上传方式",
"uploadSourceUnknown": "未知",
"previewLinks": "链接",
"previewLinks": "链接与嵌入",
"previewCopyLink": "复制链接",
"previewDownload": "下载原图",
"previewOpen": "新窗口打开",
"previewClose": "关闭",
"uploader": "上传者:{name}",
@@ -402,6 +496,11 @@
"confirm": "确认删除"
},
"pagination": {
"totalCount": "共 {total} {unit}",
"pageStatus": "第 {page} / {totalPages} 页",
"perPage": "{size} 条/页",
"pageSize": "每页条数",
"pageNumber": "第 {page} 页",
"pageOf": "第 {page} / {totalPages} 页 · 共 {total} {unit}",
"totalOnly": "共 {total} {unit}",
"first": "第一页",
@@ -409,6 +508,8 @@
"next": "下一页",
"last": "最后一页",
"goTo": "跳转",
"goToPrefix": "前往",
"goToSuffix": "页",
"pagePlaceholder": "页码"
},
"api": {
@@ -437,6 +538,74 @@
"newTokenDesc": "请立即复制保存。关闭弹窗后仍可在上方输入框复制,但请尽快更新到你的脚本配置中。",
"copyToken": "复制 Token",
"saved": "我已保存",
"searchPlaceholder": "搜索接口…",
"showToken": "显示",
"hideToken": "隐藏",
"helpText": "需要帮助?查看完整 API 文档",
"helpTitle": "需要帮助?",
"helpSubtitle": "查看完整 API 文档",
"expand": "展开",
"collapse": "收起",
"viewDocs": "查看文档",
"requestParams": "请求参数",
"paramName": "参数名",
"paramType": "类型",
"paramLocation": "位置",
"paramRequired": "必填",
"paramDescription": "说明",
"required": "是",
"optional": "否",
"requestExample": "请求示例",
"responseExample": "响应示例",
"categories": {
"image": "图片接口",
"extension": "插件接口",
"system": "系统通用"
},
"params": {
"upload": {
"image": "上传图片,主字段",
"file": "兼容字段,单图上传",
"files": "兼容字段,多图上传",
"token": "Twikoo 协议兼容,表单 token"
},
"list": {
"limit": "每页条数,默认 20,最大 100",
"page": "页码,从 1 开始"
},
"search": {
"q": "搜索关键词,必填"
},
"delete": {
"key": "图片存储路径,如 images/2026/08/xxx.webp"
},
"batchDelete": {
"keys": "要删除的图片 key 数组"
},
"twikoo": {
"image": "上传图片",
"token": "API Token"
},
"backendId": "存储后端 ID,可选"
},
"debug": {
"title": "在线调试",
"headers": "Headers",
"query": "Query",
"body": "Body",
"send": "发送请求",
"response": "响应",
"selectFile": "选择文件",
"noFileSelected": "未选择任何文件",
"tokenPlaceholder": "输入 Auth-Token",
"invalidJson": "JSON 格式无效",
"sendFailed": "请求发送失败",
"networkError": "网络错误或无法连接",
"notesTitle": "响应说明",
"noteSuccess": "200 表示请求成功,返回 JSON 数据",
"noteError": "4xx / 5xx 表示请求失败,查看 error 字段",
"noteLimit": "上传限制:单次最多 10 张,单张最大 10 MB"
},
"docs": {
"upload": {
"title": "上传图片",
@@ -461,6 +630,14 @@
"twikoo": {
"title": "twikoo 兼容上传",
"desc": "兼容 Twikoo / EasyImage 2.0 协议,图片存入 images/ 目录;字段 image + token。"
},
"config": {
"title": "获取配置",
"desc": "获取系统公开配置,无需鉴权。"
},
"count": {
"title": "图片数量统计",
"desc": "获取当前可见范围内的图片总数。"
}
}
},