From 45f68bc936fad2d8a372cfb7b6b7c5409ad12daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=AF=E5=A4=A7=E4=BE=A0?= Date: Fri, 13 Feb 2026 18:33:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(MediaCardListView):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8E=BB=E9=87=8D=E9=80=BB=E8=BE=91=E4=BB=A5=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/discover/MediaCardListView.vue | 36 ++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/views/discover/MediaCardListView.vue b/src/views/discover/MediaCardListView.vue index 3dc24fc9..56a1fd6b 100644 --- a/src/views/discover/MediaCardListView.vue +++ b/src/views/discover/MediaCardListView.vue @@ -31,6 +31,9 @@ const isRefreshed = ref(false) const dataList = ref([]) const currData = ref([]) +// 用于保存已处理过的 key +const seenKeys = ref>(new Set()) + // 拼装参数 function getParams() { let params = { @@ -41,6 +44,31 @@ function getParams() { return params } +// MediaInfo 去重的字段 +const dedupFields = [ + "source", + "type", + "season", + "tmdb_id", + "imdb_id", + "tvdb_id", + "douban_id", + "bangumi_id", + "mediaid_prefix", + "media_id", +] as const; + +function deduplicate(items: MediaInfo[]): MediaInfo[] { + return items.filter(item => { + const key = dedupFields.map(field => String(item[field])).join('~'); + if (seenKeys.value.has(key)) { + return false; + } + seenKeys.value.add(key); + return true; + }); +} + // 获取列表数据 async function fetchData({ done }: { done: any }) { try { @@ -71,8 +99,10 @@ async function fetchData({ done }: { done: any }) { done('empty') return } + // 去重 + currData.value = deduplicate(currData.value) // 合并数据 - dataList.value = [...dataList.value, ...currData.value] + dataList.value.push(...currData.value) // 页码+1 page.value++ // 返回加载成功 @@ -92,8 +122,10 @@ async function fetchData({ done }: { done: any }) { // 如果没有数据,跳出 done('empty') } else { + // 去重 + currData.value = deduplicate(currData.value) // 合并数据 - dataList.value = [...dataList.value, ...currData.value] + dataList.value.push(...currData.value) // 页码+1 page.value++ // 返回加载成功