mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-05 23:56:42 +08:00
feat: 优化 TorrentRowListView 组件的数据过滤和排序逻辑
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user