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 1/2] =?UTF-8?q?feat(MediaCardListView):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8E=BB=E9=87=8D=E9=80=BB=E8=BE=91=E4=BB=A5=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=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++ // 返回加载成功 From d4260d510327524106b5ead2433dfd44b929c4de 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 22:09:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(types):=20=E7=A7=BB=E9=99=A4=E7=94=B1?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=201dab013=20=E5=BC=95=E5=85=A5=E7=9A=84=20ep?= =?UTF-8?q?isode=5Fgroup=20=E9=87=8D=E5=A4=8D=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/types.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/api/types.ts b/src/api/types.ts index f2d27632..1d984b73 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -272,8 +272,6 @@ export interface MediaInfo { vote_average?: number // 描述 overview?: string - // 自定义剧集组 - episode_group?: string // 二级分类 category?: string // 详情页面