feat(web): 优化智能体管理分组展示

This commit is contained in:
Wenjie Zhang 2026-06-05 21:02:13 +08:00
parent b991d4d75d
commit 07137be6db
2 changed files with 104 additions and 57 deletions

View File

@ -240,11 +240,11 @@ const showCopiedFeedback = (btn) => {
cite { cite {
position: relative; position: relative;
margin-left: 4px; margin: 0 4px;
padding: 0 0.25rem; padding: 0 0.25rem;
border-radius: 4px; border-radius: 4px;
outline: 2px solid var(--gray-200); outline: 2px solid var(--gray-100);
background-color: var(--gray-200); background-color: var(--gray-100);
color: var(--gray-800); color: var(--gray-800);
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;

View File

@ -103,6 +103,15 @@ const filteredAgents = computed(() => {
}) })
}) })
const groupedAgents = computed(() => {
const agents = filteredAgents.value.filter((agent) => !agent.is_subagent)
const subagents = filteredAgents.value.filter((agent) => agent.is_subagent)
return [
{ key: 'agents', title: '智能体', agents },
{ key: 'subagents', title: '子智能体', agents: subagents }
].filter((group) => group.agents.length > 0)
})
const agentStats = computed(() => ({ const agentStats = computed(() => ({
total: managedAgents.value.length, total: managedAgents.value.length,
builtin: managedAgents.value.filter(isBuiltinAgent).length, builtin: managedAgents.value.filter(isBuiltinAgent).length,
@ -394,9 +403,18 @@ defineExpose({
</template> </template>
</PageShoulder> </PageShoulder>
<div v-if="groupedAgents.length === 0" class="agent-empty-state">
<a-empty :image="false" :description="searchQuery ? '没有匹配的智能体' : '暂无智能体'" />
</div>
<template v-else>
<section v-for="group in groupedAgents" :key="group.key" class="agent-group-section">
<div class="agent-group-header">
<span>{{ group.title }}</span>
</div>
<ExtensionCardGrid :min-width="320"> <ExtensionCardGrid :min-width="320">
<InfoCard <InfoCard
v-for="agent in filteredAgents" v-for="agent in group.agents"
:key="agent.id" :key="agent.id"
:title="agent.name" :title="agent.name"
:subtitle="agent.slug || agent.id" :subtitle="agent.slug || agent.id"
@ -430,7 +448,10 @@ defineExpose({
:disabled="isBuiltinAgent(agent)" :disabled="isBuiltinAgent(agent)"
@click.stop="deleteAgent(agent)" @click.stop="deleteAgent(agent)"
> >
<span class="agent-card-menu-item" :class="{ danger: !isBuiltinAgent(agent) }"> <span
class="agent-card-menu-item"
:class="{ danger: !isBuiltinAgent(agent) }"
>
<Trash2 :size="14" /> <Trash2 :size="14" />
删除智能体 删除智能体
</span> </span>
@ -450,6 +471,8 @@ defineExpose({
</template> </template>
</InfoCard> </InfoCard>
</ExtensionCardGrid> </ExtensionCardGrid>
</section>
</template>
<!-- Agent Edit Modal --> <!-- Agent Edit Modal -->
<a-modal <a-modal
@ -617,6 +640,30 @@ defineExpose({
min-height: 0; min-height: 0;
} }
.agent-empty-state {
display: flex;
align-items: center;
justify-content: center;
padding: 100px 20px;
text-align: center;
}
.agent-group-section + .agent-group-section {
padding-top: 2px;
}
.agent-group-header {
display: flex;
align-items: center;
gap: 8px;
padding: 12px var(--page-padding) 0;
color: var(--gray-500);
font-size: 12px;
font-weight: 600;
letter-spacing: 0.4px;
line-height: 18px;
}
.agent-card-icon-image { .agent-card-icon-image {
display: block; display: block;
width: 100%; width: 100%;