From 118a9a2c5d6c36c3a07f5d9461a53b997409e659 Mon Sep 17 00:00:00 2001 From: falling Date: Sun, 16 Jun 2024 20:09:50 +0800 Subject: [PATCH] =?UTF-8?q?RowListView:=20=E4=BF=AE=E5=A4=8D=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E9=A1=B5=E7=AD=9B=E9=80=89=E6=98=BE=E7=A4=BAbug?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E8=BF=87=E6=BB=A4=E9=80=89=E9=A1=B9=E5=AD=A3?= =?UTF-8?q?=E9=9B=86=E6=8E=92=E5=BA=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/discover/TorrentRowListView.vue | 40 +++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/views/discover/TorrentRowListView.vue b/src/views/discover/TorrentRowListView.vue index 7d55be3b..fd34b8eb 100644 --- a/src/views/discover/TorrentRowListView.vue +++ b/src/views/discover/TorrentRowListView.vue @@ -71,6 +71,42 @@ function initOptions(data: Context) { optionValue(resolutionFilterOptions.value, meta_info?.resource_pix) } + +// 对季过滤选项进行排序 +const sortSeasonFilterOptions = computed(() => { + return seasonFilterOptions.value.sort((a, b) => { + // 按季,集降序排序 + const parseSeasonEpisode = (str: string) => { + const seasonRangeMatch = str.match(/S(\d+)(?:-S(\d+))?/) + const episodeRangeMatch = str.match(/E(\d+)(?:-E(\d+))?/) + return { + seasonStart: seasonRangeMatch?.[1] ? parseInt(seasonRangeMatch[1]) : 0, + seasonEnd: seasonRangeMatch?.[2] ? parseInt(seasonRangeMatch[2]) : 0, + episodeStart: episodeRangeMatch?.[1] ? parseInt(episodeRangeMatch[1]) : 0, + episodeEnd: episodeRangeMatch?.[2] ? parseInt(episodeRangeMatch[2]) : 0, + } + } + const parsedA = parseSeasonEpisode(a) + const parsedB = parseSeasonEpisode(b) + // 先按季降序排序 + if (parsedB.seasonStart !== parsedA.seasonStart) { + return parsedB.seasonStart - parsedA.seasonStart + } + if (parsedB.seasonEnd !== parsedA.seasonEnd) { + return parsedB.seasonEnd - parsedA.seasonEnd + } + // 按集降序排序 + if (parsedB.episodeStart !== parsedA.episodeStart) { + return parsedB.episodeStart - parsedA.episodeStart + } + if (parsedB.episodeEnd !== parsedA.episodeEnd) { + return parsedB.episodeEnd - parsedA.episodeEnd + } + // 兜底 + return b.localeCompare(a) + }) +}) + // 排序 watchEffect(() => { const list = dataList.value @@ -141,7 +177,7 @@ onMounted(() => { " > @@ -261,7 +297,7 @@ onMounted(() => {