Merge pull request #333 from Seed680/v2

This commit is contained in:
jxxghp
2025-05-13 18:46:23 +08:00
committed by GitHub
2 changed files with 76 additions and 24 deletions
+39 -12
View File
@@ -37,6 +37,9 @@ const filterForm: Record<string, string[]> = reactive({
// 排序选项 // 排序选项
const sortField = ref('default') const sortField = ref('default')
// 降序
const sortType = ref<'asc' | 'desc'>('desc')
const sortTitles: Record<string, string> = { const sortTitles: Record<string, string> = {
default: t('torrent.sortDefault'), default: t('torrent.sortDefault'),
site: t('torrent.sortSite'), site: t('torrent.sortSite'),
@@ -212,7 +215,7 @@ onMounted(() => {
}) })
// 修改watch监听,同时监听排序字段的变化 // 修改watch监听,同时监听排序字段的变化
watch([filterForm, groupedDataList, sortField], filterData) watch([filterForm, groupedDataList, sortField, sortType], filterData)
function filterData() { function filterData() {
// 清空列表 // 清空列表
@@ -258,16 +261,30 @@ function filterData() {
// 排序数据 // 排序数据
if (sortField.value !== 'default') { if (sortField.value !== 'default') {
filteredData.sort((a, b) => { filteredData.sort((a, b) => {
if (sortField.value === 'site') { if (sortType.value === 'desc') {
// 按站点名称排序 if (sortField.value === 'site') {
return (a.torrent_info.site_name || '').localeCompare(b.torrent_info.site_name || '') // 按站点名称排序
} else if (sortField.value === 'size') { return (a.torrent_info.site_name || '').localeCompare(b.torrent_info.site_name || '')
// 按文件大小排序(降序) } else if (sortField.value === 'size') {
return (Number(b.torrent_info.size) || 0) - (Number(a.torrent_info.size) || 0) // 按文件大小排序(降序)
} else if (sortField.value === 'seeder') { return (Number(b.torrent_info.size) || 0) - (Number(a.torrent_info.size) || 0)
// 按做种数排序(降序) } else if (sortField.value === 'seeder') {
return (Number(b.torrent_info.seeders) || 0) - (Number(a.torrent_info.seeders) || 0) // 按做种数排序(降序)
return (Number(b.torrent_info.seeders) || 0) - (Number(a.torrent_info.seeders) || 0)
}
} else {
if (sortField.value === 'site') {
// 按站点名称排序
return (b.torrent_info.site_name || '').localeCompare(a.torrent_info.site_name || '')
} else if (sortField.value === 'size') {
// 按文件大小排序(降序)
return (Number(a.torrent_info.size) || 0) - (Number(b.torrent_info.size) || 0)
} else if (sortField.value === 'seeder') {
// 按做种数排序(降序)
return (Number(a.torrent_info.seeders) || 0) - (Number(b.torrent_info.seeders) || 0)
}
} }
return 0 return 0
}) })
} }
@@ -364,6 +381,12 @@ function loadMore({ done }: { done: any }) {
displayDataList.value.push(...itemsToMove) displayDataList.value.push(...itemsToMove)
done('ok') done('ok')
} }
// 处理图标点击
const handleSortIconClick = () => {
// 切换排序方向
sortType.value = sortType.value === 'asc' ? 'desc' : 'asc'
}
</script> </script>
<template> <template>
@@ -384,9 +407,13 @@ function loadMore({ done }: { done: any }) {
density="compact" density="compact"
hide-details hide-details
class="sort-select" class="sort-select"
prepend-icon="mdi-sort"
variant="plain" variant="plain"
></VSelect> >
<template #prepend-inner>
<!-- 添加排序点击事件 -->
<v-icon @mousedown.stop.prevent="handleSortIconClick">mdi-sort</v-icon>
</template>
</VSelect>
</div> </div>
<!-- 筛选按钮组 --> <!-- 筛选按钮组 -->
+37 -12
View File
@@ -61,6 +61,8 @@ const filterOptions: Record<string, string[]> = reactive({
// 排序字段 // 排序字段
const sortField = ref('default') const sortField = ref('default')
// 降序
const sortType = ref<'asc' | 'desc'>('desc')
// 数据列表 // 数据列表
const dataList = ref<Array<Context>>([]) const dataList = ref<Array<Context>>([])
@@ -202,7 +204,7 @@ function sortSeasonOptions() {
} }
// 修改watch监听,同时监听排序字段的变化 // 修改watch监听,同时监听排序字段的变化
watch([filterForm, sortField], filterData) watch([filterForm, sortField, sortType], filterData)
// 计算过滤后的列表 // 计算过滤后的列表
function filterData() { function filterData() {
@@ -247,16 +249,30 @@ function filterData() {
}) })
// 排序 // 排序
if (sortField.value === 'default') { if (sortType.value === 'desc') {
filteredData = filteredData.sort((a, b) => b.torrent_info.pri_order - a.torrent_info.pri_order) if (sortField.value === 'default') {
} else if (sortField.value === 'site') { filteredData = filteredData.sort((a, b) => b.torrent_info.pri_order - a.torrent_info.pri_order)
filteredData = filteredData.sort((a, b) => } else if (sortField.value === 'site') {
(a.torrent_info.site_name || '').localeCompare(b.torrent_info.site_name || ''), 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 === 'size') {
} else if (sortField.value === 'seeder') { filteredData = filteredData.sort((a, b) => b.torrent_info.size - a.torrent_info.size)
filteredData = filteredData.sort((a, b) => b.torrent_info.seeders - a.torrent_info.seeders) } else if (sortField.value === 'seeder') {
filteredData = filteredData.sort((a, b) => b.torrent_info.seeders - a.torrent_info.seeders)
}
} else {
if (sortField.value === 'default') {
filteredData = filteredData.sort((a, b) => a.torrent_info.pri_order - b.torrent_info.pri_order)
} else if (sortField.value === 'site') {
filteredData = filteredData.sort((a, b) =>
(b.torrent_info.site_name || '').localeCompare(a.torrent_info.site_name || ''),
)
} else if (sortField.value === 'size') {
filteredData = filteredData.sort((a, b) => a.torrent_info.size - b.torrent_info.size)
} else if (sortField.value === 'seeder') {
filteredData = filteredData.sort((a, b) => a.torrent_info.seeders - b.torrent_info.seeders)
}
} }
// 显示前20个 // 显示前20个
@@ -338,6 +354,12 @@ function loadMore({ done }: { done: any }) {
done('ok') done('ok')
} }
// 处理图标点击
const handleSortIconClick = () => {
// 切换排序方向
sortType.value = sortType.value === 'asc' ? 'desc' : 'asc'
}
onMounted(() => { onMounted(() => {
filterData() filterData()
}) })
@@ -363,9 +385,12 @@ onMounted(() => {
density="compact" density="compact"
hide-details hide-details
class="sort-select" class="sort-select"
prepend-icon="mdi-sort"
variant="plain" variant="plain"
> >
<template #prepend-inner>
<!-- 添加排序点击事件 -->
<v-icon @mousedown.stop.prevent="handleSortIconClick">mdi-sort</v-icon>
</template>
</VSelect> </VSelect>
<div class="filter-divider"></div> <div class="filter-divider"></div>