From 13ef1942f27aefadb915eb7253164cfe9e312baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=89=E9=91=AB=E5=8D=87?= Date: Fri, 19 Jun 2026 11:16:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(agent-sidebar):=20=E7=8B=AC=E7=AB=8B?= =?UTF-8?q?=E9=97=AE=E7=AD=94=E6=99=BA=E8=83=BD=E4=BD=93=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=A0=8F=E9=A1=B6=E9=83=A8=E5=A2=9E=E5=8A=A0=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E4=BD=93=E5=90=8D=E7=A7=B0=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 下拉来源切换下面加搜索框:防抖 300ms 走服务端 search(按原始名 + 内置缩写 脱敏映射匹配,与智能体管理页一致),在当前来源(我的/某广场)内搜全量; 带清除按钮、无结果显示「未找到匹配的智能体」、搜索中复用 isFetching 半透明指示。 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../workspace/agents/agent-chat-sidebar.tsx | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx b/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx index 01fc66ef..03fddad8 100644 --- a/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx +++ b/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx @@ -1,10 +1,11 @@ "use client"; -import { Bot, Loader2 } from "lucide-react"; +import { Bot, Loader2, Search, X } from "lucide-react"; import Link from "next/link"; import { useEffect, useMemo, useState } from "react"; import { agentColor } from "@/components/workspace/agent-icon-color"; +import { Input } from "@/components/ui/input"; import { Select, SelectContent, @@ -52,6 +53,15 @@ export function AgentChatSidebar({ activeAgentId }: { activeAgentId?: string }) // 作用域:MINE_SCOPE 或某个广场 id。默认「我的」。 const [scope, setScope] = useState(MINE_SCOPE); + // 模糊搜索智能体名称:防抖 300ms 后走服务端 search(后端按原始名 / 脱敏名匹配), + // 在当前来源(我的 / 某广场)内过滤,能搜全量而非仅当前 50 条。 + const [searchInput, setSearchInput] = useState(""); + const [search, setSearch] = useState(""); + useEffect(() => { + const timer = setTimeout(() => setSearch(searchInput.trim()), 300); + return () => clearTimeout(timer); + }, [searchInput]); + // 若所选广场被管理员删除,回退到「我的」,避免指向不存在的广场。 useEffect(() => { if ( @@ -70,13 +80,14 @@ export function AgentChatSidebar({ activeAgentId }: { activeAgentId?: string }) page: 1, pageSize: LIST_PAGE_SIZE, square: isMine ? undefined : scope, + search: search || undefined, }); return ( // 配色与 AgentModuleSidebar 一致:浅色白底,深蓝主题半透明深蓝玻璃面板。