From d1f28d9c949426431e6389a426f9aec4a2f6752f Mon Sep 17 00:00:00 2001 From: falling Date: Mon, 3 Jun 2024 21:01:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=90=9C=E7=B4=A2=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E5=AD=A3=E9=9B=86=E4=B8=8B=E6=8B=89=E5=88=97=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E4=BB=8E=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E6=94=B9=E6=88=90=E6=8C=89=E5=AD=A3=E9=9B=86=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/discover/TorrentCardListView.vue | 34 ++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/views/discover/TorrentCardListView.vue b/src/views/discover/TorrentCardListView.vue index a08bcf67..18b7f35a 100644 --- a/src/views/discover/TorrentCardListView.vue +++ b/src/views/discover/TorrentCardListView.vue @@ -71,7 +71,34 @@ function initOptions(data: Context) { // 对季过滤选项进行排序 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) }) }) @@ -112,7 +139,10 @@ watchEffect(() => { groupedDataList.value?.forEach(value => { if (value.length > 0) { const matchData = value.filter(data => { - const { meta_info, torrent_info } = data + const { + meta_info, + torrent_info, + } = data // 季、制作组、视频编码 return ( // 站点过滤