From 175225686877c21af6c044b3867d4c71353c9ef1 Mon Sep 17 00:00:00 2001 From: "mcgrady.sun" Date: Sat, 2 May 2026 15:16:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(resource):=20=E8=B5=84=E6=BA=90=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E7=BB=93=E6=9E=9C=E9=A1=B5=E5=A2=9E=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E6=90=9C=E7=B4=A2=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在搜索结果页右侧操作区新增"重新搜索"按钮(mdi-refresh 图标) - 点击后使用相同搜索参数重新触发请求;正在请求或加载中时按钮禁用 - 若当前展示的是 AI 推荐结果,先切回原始结果再重新搜索,避免状态不一致 - 同步补充 zh-CN / zh-TW / en-US 三份本地化文案 --- src/locales/en-US.ts | 1 + src/locales/zh-CN.ts | 1 + src/locales/zh-TW.ts | 1 + src/pages/resource.vue | 49 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index 4fa9a292..b9abf5c9 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -998,6 +998,7 @@ export default { aiRecommend: 'AI Recommendation', reRecommend: 'Regenerate Recommendation', aiRecommendError: 'AI Recommendation Failed', + refreshSearch: 'Re-search', }, browse: { actor: 'Actor', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 68de3843..aa35c1c4 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -993,6 +993,7 @@ export default { aiRecommend: '智能推荐', reRecommend: '重新生成推荐', aiRecommendError: '智能推荐失败', + refreshSearch: '重新搜索', }, browse: { actor: '演员', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index 9e592a2e..c5a98532 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -994,6 +994,7 @@ export default { aiRecommend: '智能推薦', reRecommend: '重新生成推薦', aiRecommendError: '智能推薦失敗', + refreshSearch: '重新搜尋', }, browse: { actor: '演員', diff --git a/src/pages/resource.vue b/src/pages/resource.vue index 31c32b18..5f29a21e 100644 --- a/src/pages/resource.vue +++ b/src/pages/resource.vue @@ -95,6 +95,9 @@ const cardScroll = useInfiniteScroll(filteredCardDataList) // 是否刷新过 const isRefreshed = ref(false) +// 是否正在重新搜索 +const isRefreshing = ref(false) + // 加载进度文本 const progressText = ref(t('common.pleaseWait')) @@ -464,6 +467,23 @@ async function fetchData() { } } +// 重新搜索(使用相同参数重新触发搜索) +async function refreshSearch() { + if (isRefreshing.value || progressActive.value) return + isRefreshing.value = true + try { + // 如正在显示AI推荐结果,先切回原始结果,确保状态干净 + if (showingAiResults.value) { + await switchToOriginalResults() + } + await fetchData() + } catch (error) { + console.error('重新搜索失败:', error) + } finally { + isRefreshing.value = false + } +} + // 切换到智能推荐结果(自动保存筛选条件) async function switchToAiResults() { if (showingAiResults.value) { @@ -833,6 +853,22 @@ onUnmounted(() => { + + + + + {{ t('resource.refreshSearch') }} + + +
@@ -1180,6 +1216,14 @@ onUnmounted(() => { background-color: rgba(var(--v-theme-primary), 0.05); } +/* 重新搜索按钮 */ +.refresh-search-btn { + block-size: 44px !important; + inline-size: 44px !important; + border-radius: 8px !important; + background-color: rgba(var(--v-theme-surface-variant), 0.1); +} + /* AI按钮组样式 */ .ai-toggle-container { position: relative; @@ -1371,6 +1415,11 @@ onUnmounted(() => { inline-size: 36px; } + .refresh-search-btn { + block-size: 36px !important; + inline-size: 36px !important; + } + .ai-toggle-buttons { block-size: 36px; }