From e6662cf673e67c35012148622e41acbf3b581588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=89=E9=91=AB=E5=8D=87?= Date: Tue, 16 Jun 2026 14:32:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E6=A8=A1=E6=9D=BF=E9=A1=B5=E9=9D=A2=E5=8F=8A?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=B2=BE=E7=AE=80?= =?UTF-8?q?=E5=B2=97=E4=BD=8D/=E6=A0=87=E7=AD=BE/=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../workspace/admin/prompt-templates-page.tsx | 258 ------------------ .../src/components/workspace/input-box.tsx | 48 ++-- .../workspace/workspace-nav-menu.tsx | 11 - frontend-web/src/core/custom-prompts/index.ts | 91 ------ .../src/core/page-layout/sidebar-menu.ts | 7 - frontend-web/src/core/positions/types.ts | 6 +- frontend-web/src/core/tags/types.ts | 3 - .../src/pages/PromptTemplatesPage.tsx | 5 - frontend-web/src/pages/StrategyRoutes.tsx | 11 - frontend-web/src/pages/WorkspaceRoutes.tsx | 13 - offline-backend-20260512/backend/CLAUDE.md | 42 +-- .../app/gateway/routers/user_prompts.py | 108 -------- .../versions/20260616_01_positions.py | 19 +- .../deerflow/persistence/positions/model.py | 1 - .../deerflow/persistence/tags/model.py | 6 +- .../persistence/user_prompts/model.py | 15 +- .../deerflow/persistence/user_prompts/sql.py | 63 +---- .../deerflow/services/position_sync.py | 72 +---- .../scripts/sql/column_additions_mysql.sql | 5 - 19 files changed, 55 insertions(+), 729 deletions(-) delete mode 100644 frontend-web/src/components/workspace/admin/prompt-templates-page.tsx delete mode 100644 frontend-web/src/pages/PromptTemplatesPage.tsx diff --git a/frontend-web/src/components/workspace/admin/prompt-templates-page.tsx b/frontend-web/src/components/workspace/admin/prompt-templates-page.tsx deleted file mode 100644 index 139c4f88..00000000 --- a/frontend-web/src/components/workspace/admin/prompt-templates-page.tsx +++ /dev/null @@ -1,258 +0,0 @@ -"use client"; - -import { CheckIcon, Loader2, PencilIcon, PlusIcon, TagIcon, Trash2Icon } from "lucide-react"; -import { useState } from "react"; -import { toast } from "sonner"; - -import { Button } from "@/components/ui/button"; -import { - Dialog, - DialogContent, - DialogFooter, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; -import { Input } from "@/components/ui/input"; -import { Textarea } from "@/components/ui/textarea"; -import { resolveTagColor } from "@/components/workspace/tags/tag-colors"; -import { - usePromptTemplates, - useCreatePromptTemplate, - useDeletePromptTemplate, - useUpdatePromptTemplate, - type PromptTemplate, -} from "@/core/custom-prompts"; -import { useResourceTags, useSetResourceTags, useTags } from "@/core/tags"; -import { cn } from "@/lib/utils"; - -function errMsg(e: unknown): string { - return String(e instanceof Error ? e.message : e); -} - -function TemplateFormDialog({ - open, - onOpenChange, - editing, -}: { - open: boolean; - onOpenChange: (open: boolean) => void; - editing: PromptTemplate | null; -}) { - const createT = useCreatePromptTemplate(); - const updateT = useUpdatePromptTemplate(); - const [title, setTitle] = useState(""); - const [content, setContent] = useState(""); - - const [syncedFor, setSyncedFor] = useState(null); - const syncKey = `${open}:${editing?.id ?? "new"}`; - if (open && syncedFor !== syncKey) { - setTitle(editing?.title ?? ""); - setContent(editing?.content ?? ""); - setSyncedFor(syncKey); - } - if (!open && syncedFor !== null) setSyncedFor(null); - - const pending = createT.isPending || updateT.isPending; - const handleSave = async () => { - if (!content.trim()) return; - try { - if (editing) { - await updateT.mutateAsync({ id: editing.id, input: { title: title.trim(), content } }); - } else { - await createT.mutateAsync({ title: title.trim(), content }); - } - onOpenChange(false); - } catch (e) { - toast.error(errMsg(e)); - } - }; - - return ( - - - - {editing ? "编辑提示词模板" : "新增提示词模板"} - -
-
- - setTitle(e.target.value)} placeholder="如:理赔标准话术" maxLength={255} /> -
-
- -