feat(websearch): settings UI overhaul and quota improvements

- Remove Priority field, auto load-balance by quota remaining
- Replace QuotaRefreshInterval (daily/weekly/monthly) with SubscribedAt
  (subscription date, monthly lazy refresh via Redis TTL)
- Add collapsible provider cards, API key show/copy, usage progress bar
- Add test endpoint (POST /web-search-emulation/test) bypassing quota
- Wire WebSearchManagerBuilder on startup (was never called before)
- Fix nextMonthlyReset day-of-month overflow (Jan 31 → Feb 28)
- Fix non-deterministic sort in selectByQuotaWeight
- Map ProxyID in builder for provider-level proxy tracking
- Fix frontend timezone drift in subscribed_at date picker
- Fix provider deletion index shift for expandedProviders state
This commit is contained in:
erio
2026-04-12 13:11:46 +08:00
parent 30b926add4
commit d0674e0ff9
11 changed files with 627 additions and 328 deletions

View File

@@ -4417,19 +4417,24 @@ export default {
apiKey: 'API Key',
apiKeyPlaceholder: 'Enter API Key',
apiKeyConfigured: 'Configured',
priority: 'Priority',
priorityHint: 'Lower number = higher priority',
showApiKey: 'Show',
hideApiKey: 'Hide',
copyApiKey: 'Copy',
copied: 'Copied',
quotaLimit: 'Quota Limit',
quotaLimitHint: '0 = unlimited',
quotaRefreshInterval: 'Refresh Interval',
quotaUsed: 'Used',
subscribedAt: 'Subscribed At',
subscribedAtHint: 'Quota resets monthly from this date',
quotaUsage: 'Usage',
proxy: 'Proxy',
expiresAt: 'Expires At',
removeProvider: 'Remove',
daily: 'Daily',
weekly: 'Weekly',
monthly: 'Monthly',
noProviders: 'No search providers configured',
test: 'Test',
testDefaultQuery: 'Major world events this year',
testing: 'Searching...',
testResultTitle: 'Search Results',
testResultProvider: 'Provider',
testNoResults: 'No results found',
},
site: {
title: 'Site Settings',

View File

@@ -4579,19 +4579,24 @@ export default {
apiKey: 'API Key',
apiKeyPlaceholder: '输入 API Key',
apiKeyConfigured: '已配置',
priority: '优先级',
priorityHint: '数值越小优先级越高',
showApiKey: '显示',
hideApiKey: '隐藏',
copyApiKey: '复制',
copied: '已复制',
quotaLimit: '配额上限',
quotaLimitHint: '0 表示无限制',
quotaRefreshInterval: '刷新周期',
quotaUsed: '已使用',
subscribedAt: '订阅时间',
subscribedAtHint: '配额从此日期起每月自动重置',
quotaUsage: '用量',
proxy: '代理',
expiresAt: '过期时间',
removeProvider: '删除',
daily: '每日',
weekly: '每周',
monthly: '每月',
noProviders: '未配置搜索服务商',
test: '测试',
testDefaultQuery: '搜索今年世界大事件',
testing: '搜索中...',
testResultTitle: '搜索结果',
testResultProvider: '服务商',
testNoResults: '无搜索结果',
},
site: {
title: '站点设置',