diff --git a/src/views/discover/TorrentRowListView.vue b/src/views/discover/TorrentRowListView.vue index 179792aa..649c8a4e 100644 --- a/src/views/discover/TorrentRowListView.vue +++ b/src/views/discover/TorrentRowListView.vue @@ -27,6 +27,9 @@ const filterForm = reactive({ resolution: [] as string[], }) +// 排序字段 +const sortField = ref('default') + // 数据列表 const dataList = ref>([]) @@ -60,7 +63,19 @@ function initOptions(data: Context) { optionValue(resolutionFilterOptions.value, meta_info?.resource_pix) } -let defer = (_: number) => true +// 排序 +watchEffect(() => { + const list = dataList.value + if (sortField.value === 'default') { + dataList.value = list.sort((a, b) => b.torrent_info.pri_order - a.torrent_info.pri_order) + } else if (sortField.value === 'site') { + dataList.value = list.sort((a, b) => (a.torrent_info.site_name || '').localeCompare(b.torrent_info.site_name || '')) + } else if (sortField.value === 'size') { + dataList.value = list.sort((a, b) => b.torrent_info.size - a.torrent_info.size) + } else if (sortField.value === 'seeder') { + dataList.value = list.sort((a, b) => b.torrent_info.seeders - a.torrent_info.seeders) + } +}) // 计算过滤后的列表 watchEffect(() => { @@ -70,32 +85,31 @@ watchEffect(() => { const match = (filter: Array, value: string | undefined) => filter.length === 0 || (value && filter.includes(value)) - props.items?.forEach((data) => { + props.items?.forEach(data => { const { meta_info, torrent_info } = data if ( // 站点过滤 - match(filterForm.site, torrent_info.site_name) + match(filterForm.site, torrent_info.site_name) && // 促销状态过滤 - && match(filterForm.freeState, torrent_info.volume_factor) + match(filterForm.freeState, torrent_info.volume_factor) && // 季过滤 - && match(filterForm.season, meta_info.season_episode) + match(filterForm.season, meta_info.season_episode) && // 制作组过滤 - && match(filterForm.releaseGroup, meta_info.resource_team) + match(filterForm.releaseGroup, meta_info.resource_team) && // 视频编码过滤 - && match(filterForm.videoCode, meta_info.video_encode) + match(filterForm.videoCode, meta_info.video_encode) && // 分辨率过滤 - && match(filterForm.resolution, meta_info.resource_pix) + match(filterForm.resolution, meta_info.resource_pix) && // 质量过滤 - && match(filterForm.edition, meta_info.edition) + match(filterForm.edition, meta_info.edition) ) dataList.value.push(data) }) - defer = useDefer(dataList.value.length) }) // 初始化过滤选项 onMounted(() => { - props.items?.forEach((item) => { + props.items?.forEach(item => { initOptions(item) }) }) @@ -109,17 +123,32 @@ onMounted(() => { 没有附合当前过滤条件的资源。 - -
- -
+ + + + - - - 站点 - + + 排序 + + + + 默认 + + 站点 + + 文件大小 + + + 做种数 + + + + 站点 { - - 质量 - + 质量 { - - 分辨率 - + 分辨率 { - - 制作组 - + 制作组 { - - 视频编码 - + 视频编码 { - - 促销状态 - + 促销状态 { - - 季集 - + 季集 { +