feat: 优化 TorrentRowListView 组件的数据过滤和排序逻辑

This commit is contained in:
jxxghp
2025-04-09 21:49:15 +08:00
parent 3205ae3ebe
commit d7c3167ecd
+23 -16
View File
@@ -233,22 +233,11 @@ function initOptions(data: Context) {
optionValue(filterOptions.resolution, meta_info?.resource_pix) optionValue(filterOptions.resolution, meta_info?.resource_pix)
} }
// 监听数据列表,进行排序 // 修改watch监听,同时监听排序字段的变化
watchEffect(() => { watch([filterForm, sortField], filterData)
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(() => { function filterData() {
// 清空列表 // 清空列表
dataList.value = [] dataList.value = []
displayDataList.value = [] displayDataList.value = []
@@ -264,7 +253,7 @@ watchEffect(() => {
}) })
// 筛选数据 // 筛选数据
const filteredData: Context[] = [] let filteredData: Context[] = []
// 然后根据过滤条件筛选数据 // 然后根据过滤条件筛选数据
props.items.forEach(data => { props.items.forEach(data => {
@@ -288,12 +277,26 @@ watchEffect(() => {
filteredData.push(data) filteredData.push(data)
} }
}) })
// 排序
if (sortField.value === 'default') {
filteredData = filteredData.sort((a, b) => b.torrent_info.pri_order - a.torrent_info.pri_order)
} else if (sortField.value === 'site') {
filteredData = filteredData.sort((a, b) =>
(a.torrent_info.site_name || '').localeCompare(b.torrent_info.site_name || ''),
)
} else if (sortField.value === 'size') {
filteredData = filteredData.sort((a, b) => b.torrent_info.size - a.torrent_info.size)
} else if (sortField.value === 'seeder') {
filteredData = filteredData.sort((a, b) => b.torrent_info.seeders - a.torrent_info.seeders)
}
// 显示前20个 // 显示前20个
displayDataList.value = filteredData.slice(0, 20) displayDataList.value = filteredData.slice(0, 20)
// 保存剩余数据 // 保存剩余数据
dataList.value = filteredData.slice(20) dataList.value = filteredData.slice(20)
} }
}) }
// 过滤菜单相关 // 过滤菜单相关
const filterMenuOpen = ref(false) const filterMenuOpen = ref(false)
@@ -350,6 +353,10 @@ function loadMore({ done }: { done: any }) {
displayDataList.value.push(...itemsToMove) displayDataList.value.push(...itemsToMove)
done('ok') done('ok')
} }
onMounted(() => {
filterData()
})
</script> </script>
<template> <template>