feat(search): 排序菜单新增「最近更新 ↓ / ↑」按日期排序

按 lastUpdated(YYYY-MM-DD)字符串比较实现升降序,
无日期的异常包固定排在最后。
This commit is contained in:
陈银军
2026-09-21 00:19:15 +08:00
parent 73e59bc021
commit 829e1a5d8e
+11 -1
View File
@@ -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) {
<div class="dd-item" :class="{ on: sortMode === 'default' }" @click="pickSort('default')">默认<span v-if="sortMode === 'default'" class="dd-check">✓</span></div>
<div class="dd-item" :class="{ on: sortMode === 'versions-desc' }" @click="pickSort('versions-desc')">版本数 ↓<span v-if="sortMode === 'versions-desc'" class="dd-check">✓</span></div>
<div class="dd-item" :class="{ on: sortMode === 'size-desc' }" @click="pickSort('size-desc')">占用大小 ↓<span v-if="sortMode === 'size-desc'" class="dd-check">✓</span></div>
<div class="dd-item" :class="{ on: sortMode === 'date-desc' }" @click="pickSort('date-desc')">最近更新 ↓<span v-if="sortMode === 'date-desc'" class="dd-check">✓</span></div>
<div class="dd-item" :class="{ on: sortMode === 'date-asc' }" @click="pickSort('date-asc')">最近更新 ↑<span v-if="sortMode === 'date-asc'" class="dd-check">✓</span></div>
</div>
</Transition>
</div>