feat: 按来源分组展示 Skill

This commit is contained in:
Wenjie Zhang 2026-06-03 22:12:32 +08:00
parent a60c5db7ee
commit fafbc5c9ee

View File

@ -76,9 +76,12 @@
</div> </div>
<template v-else> <template v-else>
<template v-for="group in skillGroups" :key="group.key">
<template v-if="group.skills.length">
<div class="extension-section-header">{{ group.title }}</div>
<ExtensionCardGrid :min-width="360"> <ExtensionCardGrid :min-width="360">
<div <div
v-for="skill in filteredInstalledSkills" v-for="skill in group.skills"
:key="skill.slug" :key="skill.slug"
class="card-wrapper" class="card-wrapper"
:class="{ :class="{
@ -120,6 +123,8 @@
</div> </div>
</ExtensionCardGrid> </ExtensionCardGrid>
</template> </template>
</template>
</template>
<a-modal <a-modal
v-model:open="skillPreviewVisible" v-model:open="skillPreviewVisible"
@ -610,6 +615,18 @@ const installedSkillCards = computed(() =>
) )
const filteredInstalledSkills = computed(() => installedSkillCards.value.filter(matchesSearch)) const filteredInstalledSkills = computed(() => installedSkillCards.value.filter(matchesSearch))
const skillGroups = computed(() => [
{
key: 'builtin',
title: '内置',
skills: filteredInstalledSkills.value.filter((skill) => skill.sourceType === 'builtin')
},
{
key: 'uploaded',
title: '上传的',
skills: filteredInstalledSkills.value.filter((skill) => skill.sourceType !== 'builtin')
}
])
const filteredDeletableSkills = computed(() => const filteredDeletableSkills = computed(() =>
filteredInstalledSkills.value.filter( filteredInstalledSkills.value.filter(
(skill) => canManageSkill(skill) && skill.sourceType !== 'builtin' (skill) => canManageSkill(skill) && skill.sourceType !== 'builtin'