From 829e1a5d8ef0be71ebd27115f5904fe0c5e9e4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E9=93=B6=E5=86=9B?= Date: Mon, 21 Sep 2026 00:19:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(search):=20=E6=8E=92=E5=BA=8F=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E3=80=8C=E6=9C=80=E8=BF=91=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20=E2=86=93=20/=20=E2=86=91=E3=80=8D=E6=8C=89?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 lastUpdated(YYYY-MM-DD)字符串比较实现升降序, 无日期的异常包固定排在最后。 --- frontend/src/views/SearchView.vue | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/SearchView.vue b/frontend/src/views/SearchView.vue index 3336d18..5743a62 100644 --- a/frontend/src/views/SearchView.vue +++ b/frontend/src/views/SearchView.vue @@ -12,7 +12,7 @@ const route = useRoute() const keyword = ref('') const statusFilter = ref('all') // all | warn | ok | ignored | broken -const sortMode = ref('default') // default | versions-desc | size-desc +const sortMode = ref('default') // default | versions-desc | size-desc | date-desc | date-asc const isMobile = ref(false) let debounceTimer = null @@ -98,6 +98,14 @@ const filtered = computed(() => { list = [...list].sort((a, b) => b.versions - a.versions) } else if (sortMode.value === 'size-desc') { list = [...list].sort((a, b) => b.size - a.size) + } else if (sortMode.value === 'date-desc' || sortMode.value === 'date-asc') { + // lastUpdated 为 YYYY-MM-DD,字符串可比较;无日期的包(broken 等)固定排最后 + const dir = sortMode.value === 'date-desc' ? -1 : 1 + list = [...list].sort((a, b) => { + if (!a.lastUpdated) return 1 + if (!b.lastUpdated) return -1 + return a.lastUpdated.localeCompare(b.lastUpdated) * dir + }) } return list }) @@ -196,6 +204,8 @@ async function onCleanConfirmed(res) {
默认✓
版本数 ↓✓
占用大小 ↓✓
+
最近更新 ↓✓
+
最近更新 ↑✓