From e34f18799f6c395cc805269ec21a851eb6c8049f Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 12 Oct 2023 22:25:15 +0800 Subject: [PATCH] fix --- src/views/discover/TorrentCardListView.vue | 39 +++++++++++----------- src/views/discover/TorrentRowListView.vue | 27 +++++++-------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/views/discover/TorrentCardListView.vue b/src/views/discover/TorrentCardListView.vue index 0f6f252c..41ad9659 100644 --- a/src/views/discover/TorrentCardListView.vue +++ b/src/views/discover/TorrentCardListView.vue @@ -47,6 +47,12 @@ const editionFilterOptions = ref>([]) // 获取分辨率过滤选项 const resolutionFilterOptions = ref>([]) +// 数据列表 +const dataList = ref >([]) + +// 分组后的数据列表 +const groupedDataList = ref>() + // 初始化过滤选项 function initOptions(data: Context) { const { torrent_info, meta_info } = data @@ -63,7 +69,7 @@ function initOptions(data: Context) { } // 计算分组后的列表 -const groupedDataList = computed(() => { +watchEffect(() => { // 数据分组 const groupMap = new Map() // 遍历数据 @@ -83,52 +89,47 @@ const groupedDataList = computed(() => { groupMap.set(key, [item]) } }) - return groupMap + groupedDataList.value = groupMap }) // 计算过滤后的列表 -const dataList = computed(() => { - const list = groupedDataList.value - const filter = filterForm - +watchEffect(() => { + // 清空列表 + dataList.value.splice(0) // 匹配过滤函数 const match = (filter: Array, value: string | undefined) => filter.length === 0 || (value && filter.includes(value)) - const result: Array = [] - list.forEach((value) => { + groupedDataList.value?.forEach((value) => { if (value.length > 0) { const matchData = value.filter((data) => { const { meta_info, torrent_info } = data // 季、制作组、视频编码 - const { season_episode, resource_team, video_encode } = meta_info return ( // 站点过滤 - match(filter.site, torrent_info.site_name) + match(filterForm.site, torrent_info.site_name) // 促销状态过滤 - && match(filter.freeState, torrent_info.volume_factor) + && match(filterForm.freeState, torrent_info.volume_factor) // 季过滤 - && match(filter.season, season_episode) + && match(filterForm.season, meta_info.season_episode) // 制作组过滤 - && match(filter.releaseGroup, resource_team) + && match(filterForm.releaseGroup, meta_info.resource_team) // 视频编码过滤 - && match(filter.videoCode, video_encode) + && match(filterForm.videoCode, meta_info.video_encode) // 分辨率过滤 - && match(filter.resolution, meta_info.resource_pix) + && match(filterForm.resolution, meta_info.resource_pix) // 质量过滤 - && match(filter.edition, meta_info.edition) + && match(filterForm.edition, meta_info.edition) ) }) if (matchData.length > 0) { const firstData = _.cloneDeepWith(matchData[0]) as SearchTorrent if (matchData.length > 1) firstData.more = matchData.slice(1) - - result.push(firstData) + dataList.value.push(firstData) } } }) - return result }) diff --git a/src/views/discover/TorrentRowListView.vue b/src/views/discover/TorrentRowListView.vue index a40f9fa2..65a3eff9 100644 --- a/src/views/discover/TorrentRowListView.vue +++ b/src/views/discover/TorrentRowListView.vue @@ -26,6 +26,9 @@ const filterForm = reactive({ resolution: [] as string[], }) +// 数据列表 +const dataList = ref >([]) + // 获取站点过滤选项 const siteFilterOptions = ref>([]) // 获取季过滤选项 @@ -57,35 +60,33 @@ function initOptions(data: Context) { } // 计算过滤后的列表 -const dataList = computed(() => { - const filter = filterForm - +watchEffect(() => { + // 清空列表 + dataList.value.splice(0) // 匹配过滤函数 const match = (filter: Array, value: string | undefined) => filter.length === 0 || (value && filter.includes(value)) - const result: Array = [] props.items?.forEach((data) => { const { meta_info, torrent_info } = data if ( // 站点过滤 - match(filter.site, torrent_info.site_name) + match(filterForm.site, torrent_info.site_name) // 促销状态过滤 - && match(filter.freeState, torrent_info.volume_factor) + && match(filterForm.freeState, torrent_info.volume_factor) // 季过滤 - && match(filter.season, meta_info.season_episode) + && match(filterForm.season, meta_info.season_episode) // 制作组过滤 - && match(filter.releaseGroup, meta_info.resource_term) + && match(filterForm.releaseGroup, meta_info.resource_term) // 视频编码过滤 - && match(filter.videoCode, meta_info.video_encode) + && match(filterForm.videoCode, meta_info.video_encode) // 分辨率过滤 - && match(filter.resolution, meta_info.resource_pix) + && match(filterForm.resolution, meta_info.resource_pix) // 质量过滤 - && match(filter.edition, meta_info.edition) + && match(filterForm.edition, meta_info.edition) ) - result.push(data) + dataList.value.push(data) }) - return result }) // 初始化过滤选项