From d6a003c3e260c806abcd2e18ab40c98d0b69d87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Wed, 12 Nov 2025 12:30:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=B7=BB=E5=8A=A0AI=E9=87=8D?= =?UTF-8?q?=E5=86=99=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=BC=BAStepSendMessage?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E3=80=82=E4=B8=BAAI=E9=87=8D=E5=86=99?= =?UTF-8?q?=E5=BC=95=E5=85=A5=E6=96=B0=E7=9A=84=E7=8A=B6=E6=80=81=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E4=B8=BA=E5=86=85=E5=AE=B9=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B0=E7=9A=84AiRewrite=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E6=9B=B4=E6=96=B0AI=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=9A=84=E6=A0=B7=E5=BC=8F=E3=80=82=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=8A=A0=E8=BD=BD=E6=8C=87=E7=A4=BA=E7=AC=A6=E5=92=8C?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E6=B6=88=E6=81=AF=E6=94=B9=E5=96=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BD=93=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StepSendMessage/index.module.scss | 10 ++ .../components/StepSendMessage/index.tsx | 127 ++++++++++++++++-- 2 files changed, 129 insertions(+), 8 deletions(-) diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.module.scss b/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.module.scss index 12ee6679..2fe9b07f 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.module.scss +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.module.scss @@ -273,6 +273,16 @@ .aiRewriteInput { max-width: 240px; } + + .aiRewriteActions { + display: flex; + align-items: center; + gap: 8px; + } + + .aiRewriteButton { + min-width: 96px; + } } } diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.tsx b/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.tsx index 8a19ad74..991f3a2a 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/message-push-assistant/create-push-task/components/StepSendMessage/index.tsx @@ -10,7 +10,12 @@ import { Switch, message as antdMessage, } from "antd"; -import { CopyOutlined, DeleteOutlined, PlusOutlined } from "@ant-design/icons"; +import { + CopyOutlined, + DeleteOutlined, + PlusOutlined, + ReloadOutlined, +} from "@ant-design/icons"; import type { CheckboxChangeEvent } from "antd/es/checkbox"; import styles from "./index.module.scss"; @@ -21,6 +26,7 @@ import type { ContentItem } from "@/components/ContentSelection/data"; import { createContentLibrary, deleteContentLibrary, + aiEditContent, type CreateContentLibraryParams, } from "./api"; @@ -80,6 +86,7 @@ const StepSendMessage: React.FC = ({ onSelectedContentLibrariesChange, }) => { const [savingScriptGroup, setSavingScriptGroup] = useState(false); + const [aiRewriting, setAiRewriting] = useState(false); const [deletingGroupIds, setDeletingGroupIds] = useState([]); const handleAddMessage = useCallback( @@ -172,6 +179,99 @@ const StepSendMessage: React.FC = ({ savingScriptGroup, ]); + const handleAiRewrite = useCallback(async () => { + if (!aiRewriteEnabled) { + antdMessage.warning("请先开启AI智能话术改写"); + return; + } + const trimmedPrompt = aiPrompt.trim(); + const originalContent = messageContent; + const trimmedContent = originalContent.trim(); + if (!trimmedPrompt) { + antdMessage.warning("请输入改写提示词"); + return; + } + if (!trimmedContent) { + antdMessage.warning("请输入需要改写的内容"); + return; + } + if (aiRewriting) { + return; + } + let hideLoading: ReturnType | undefined; + try { + setAiRewriting(true); + hideLoading = antdMessage.loading("AI正在改写话术...", 0); + const response = await aiEditContent({ + aiPrompt: trimmedPrompt, + content: originalContent, + }); + hideLoading?.(); + const normalizedResponse = response as { + content?: string; + contentAfter?: string; + contentFront?: string; + data?: + | string + | { + content?: string; + contentAfter?: string; + contentFront?: string; + }; + result?: string; + }; + const dataField = normalizedResponse?.data; + const dataContent = + typeof dataField === "string" + ? dataField + : (dataField?.content ?? undefined); + const dataContentAfter = + typeof dataField === "string" ? undefined : dataField?.contentAfter; + const dataContentFront = + typeof dataField === "string" ? undefined : dataField?.contentFront; + + const primaryAfter = + normalizedResponse?.contentAfter ?? dataContentAfter ?? undefined; + const primaryFront = + normalizedResponse?.contentFront ?? dataContentFront ?? undefined; + + let rewrittenContent = ""; + if (typeof response === "string") { + rewrittenContent = response; + } else if (primaryAfter) { + rewrittenContent = primaryFront + ? `${primaryFront}\n${primaryAfter}` + : primaryAfter; + } else if (typeof normalizedResponse?.content === "string") { + rewrittenContent = normalizedResponse.content; + } else if (typeof dataContent === "string") { + rewrittenContent = dataContent; + } else if (typeof normalizedResponse?.result === "string") { + rewrittenContent = normalizedResponse.result; + } else if (primaryFront) { + rewrittenContent = primaryFront; + } + if (!rewrittenContent || typeof rewrittenContent !== "string") { + antdMessage.error("AI改写失败,请稍后重试"); + return; + } + onMessageContentChange(rewrittenContent.trim()); + antdMessage.success("AI改写完成,请确认内容"); + } catch (error) { + hideLoading?.(); + console.error("AI改写失败:", error); + antdMessage.error("AI改写失败,请稍后重试"); + } finally { + setAiRewriting(false); + } + }, [ + aiPrompt, + aiRewriting, + aiRewriteEnabled, + messageContent, + onMessageContentChange, + ]); + const handleApplyGroup = useCallback( (group: ScriptGroup) => { onCurrentScriptMessagesChange(group.messages); @@ -389,13 +489,24 @@ const StepSendMessage: React.FC = ({ - +
+ + +