mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-08 01:06:41 +08:00
feat(resource): 资源搜索结果页增加重新搜索按钮
- 在搜索结果页右侧操作区新增"重新搜索"按钮(mdi-refresh 图标) - 点击后使用相同搜索参数重新触发请求;正在请求或加载中时按钮禁用 - 若当前展示的是 AI 推荐结果,先切回原始结果再重新搜索,避免状态不一致 - 同步补充 zh-CN / zh-TW / en-US 三份本地化文案
This commit is contained in:
@@ -998,6 +998,7 @@ export default {
|
|||||||
aiRecommend: 'AI Recommendation',
|
aiRecommend: 'AI Recommendation',
|
||||||
reRecommend: 'Regenerate Recommendation',
|
reRecommend: 'Regenerate Recommendation',
|
||||||
aiRecommendError: 'AI Recommendation Failed',
|
aiRecommendError: 'AI Recommendation Failed',
|
||||||
|
refreshSearch: 'Re-search',
|
||||||
},
|
},
|
||||||
browse: {
|
browse: {
|
||||||
actor: 'Actor',
|
actor: 'Actor',
|
||||||
|
|||||||
@@ -993,6 +993,7 @@ export default {
|
|||||||
aiRecommend: '智能推荐',
|
aiRecommend: '智能推荐',
|
||||||
reRecommend: '重新生成推荐',
|
reRecommend: '重新生成推荐',
|
||||||
aiRecommendError: '智能推荐失败',
|
aiRecommendError: '智能推荐失败',
|
||||||
|
refreshSearch: '重新搜索',
|
||||||
},
|
},
|
||||||
browse: {
|
browse: {
|
||||||
actor: '演员',
|
actor: '演员',
|
||||||
|
|||||||
@@ -994,6 +994,7 @@ export default {
|
|||||||
aiRecommend: '智能推薦',
|
aiRecommend: '智能推薦',
|
||||||
reRecommend: '重新生成推薦',
|
reRecommend: '重新生成推薦',
|
||||||
aiRecommendError: '智能推薦失敗',
|
aiRecommendError: '智能推薦失敗',
|
||||||
|
refreshSearch: '重新搜尋',
|
||||||
},
|
},
|
||||||
browse: {
|
browse: {
|
||||||
actor: '演員',
|
actor: '演員',
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ const cardScroll = useInfiniteScroll(filteredCardDataList)
|
|||||||
// 是否刷新过
|
// 是否刷新过
|
||||||
const isRefreshed = ref(false)
|
const isRefreshed = ref(false)
|
||||||
|
|
||||||
|
// 是否正在重新搜索
|
||||||
|
const isRefreshing = ref(false)
|
||||||
|
|
||||||
// 加载进度文本
|
// 加载进度文本
|
||||||
const progressText = ref(t('common.pleaseWait'))
|
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() {
|
async function switchToAiResults() {
|
||||||
if (showingAiResults.value) {
|
if (showingAiResults.value) {
|
||||||
@@ -833,6 +853,22 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
<VSpacer />
|
<VSpacer />
|
||||||
|
|
||||||
|
<!-- 重新搜索按钮 -->
|
||||||
|
<VBtn
|
||||||
|
variant="text"
|
||||||
|
size="small"
|
||||||
|
icon
|
||||||
|
class="me-2 refresh-search-btn"
|
||||||
|
:loading="isRefreshing"
|
||||||
|
:disabled="isRefreshing || progressActive"
|
||||||
|
@click="refreshSearch"
|
||||||
|
>
|
||||||
|
<VIcon icon="mdi-refresh" size="20" />
|
||||||
|
<VTooltip activator="parent" location="top">
|
||||||
|
{{ t('resource.refreshSearch') }}
|
||||||
|
</VTooltip>
|
||||||
|
</VBtn>
|
||||||
|
|
||||||
<!-- AI操作按钮组 -->
|
<!-- AI操作按钮组 -->
|
||||||
<div v-if="aiRecommendEnabled && originalDataList.length > 0" class="ai-toggle-container me-2">
|
<div v-if="aiRecommendEnabled && originalDataList.length > 0" class="ai-toggle-container me-2">
|
||||||
<div class="ai-toggle-buttons">
|
<div class="ai-toggle-buttons">
|
||||||
@@ -1180,6 +1216,14 @@ onUnmounted(() => {
|
|||||||
background-color: rgba(var(--v-theme-primary), 0.05);
|
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按钮组样式 */
|
||||||
.ai-toggle-container {
|
.ai-toggle-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -1371,6 +1415,11 @@ onUnmounted(() => {
|
|||||||
inline-size: 36px;
|
inline-size: 36px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.refresh-search-btn {
|
||||||
|
block-size: 36px !important;
|
||||||
|
inline-size: 36px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.ai-toggle-buttons {
|
.ai-toggle-buttons {
|
||||||
block-size: 36px;
|
block-size: 36px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user