From 713956aa4fc0cd9d6117427d9a09728ddb0029bb 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: Mon, 29 Sep 2025 16:38:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=85=B3=E9=94=AE=E8=AF=8D?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=EF=BC=9A=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E8=AF=8D=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E5=85=B3=E9=94=AE=E8=AF=8D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=9C=AC=E5=9C=B0=E7=AD=9B=E9=80=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=94=B9=E4=B8=BA=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=EF=BC=8C=E6=8F=90=E5=8D=87=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=8F=AF=E8=AF=BB=E6=80=A7=E5=92=8C=E7=94=A8=E6=88=B7=E4=BD=93?= =?UTF-8?q?=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pc/ckbox/components/NavCommon/index.tsx | 16 +++---- .../powerCenter/content-management/api.ts | 2 +- .../management/KeywordManagement.tsx | 45 ++++++++++--------- .../components/modals/KeywordModal.tsx | 17 +++---- 4 files changed, 43 insertions(+), 37 deletions(-) diff --git a/Touchkebao/src/pages/pc/ckbox/components/NavCommon/index.tsx b/Touchkebao/src/pages/pc/ckbox/components/NavCommon/index.tsx index f1dc087f..431f9702 100644 --- a/Touchkebao/src/pages/pc/ckbox/components/NavCommon/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/components/NavCommon/index.tsx @@ -65,17 +65,17 @@ const NavCommon: React.FC = ({ title = "触客宝" }) => { key: "userInfo", label: (
- {user.username}({user.account}) + {user.account}
), }, + { - key: "profile", - icon: , - label: "个人资料", + key: "settings", + icon: , + label: "全局配置", onClick: () => { - console.log("个人资料点击"); - // TODO: 跳转到个人资料页面 + navigate("/pc/commonConfig"); }, }, { @@ -120,14 +120,14 @@ const NavCommon: React.FC = ({ title = "触客宝" }) => { - + */} >( pageSize: 10, total: 0, }); + // 已提交的搜索关键词(仅在点击搜索时更新,用于服务端查询) + const [keywordQuery, setKeywordQuery] = useState(""); //匹配类型 const getMatchTypeText = (type: number) => { @@ -102,15 +103,16 @@ const KeywordManagement = forwardRef>( } }; - // 获取关键词列表 + // 获取关键词列表(服务端搜索) const fetchKeywords = async (params?: KeywordListParams) => { try { setLoading(true); const requestParams = { page: pagination.current.toString(), limit: pagination.pageSize.toString(), + keyword: keywordQuery || undefined, ...params, - }; + } as KeywordListParams; const response = await getKeywordList(requestParams); if (response) { setKeywordsList(response.list || []); @@ -175,20 +177,12 @@ const KeywordManagement = forwardRef>( } }; - // 搜索和筛选功能 - const filteredKeywords = keywordsList.filter(item => { - if (!searchValue) return true; - return ( - item.title.toLowerCase().includes(searchValue.toLowerCase()) || - item.keywords.toLowerCase().includes(searchValue.toLowerCase()) || - item.content.toLowerCase().includes(searchValue.toLowerCase()) - ); - }); + // 移除本地筛选,改为服务端搜索,列表直接使用 keywordsList // 搜索处理函数 const handleSearch = (value: string) => { + setKeywordQuery(value || ""); setPagination(prev => ({ ...prev, current: 1 })); - fetchKeywords({ keyword: value }); }; // 分页处理函数 @@ -200,10 +194,11 @@ const KeywordManagement = forwardRef>( })); }; - // 组件挂载和分页变化时获取数据 + // 初始化与依赖变化时获取数据(依赖分页与搜索关键字) useEffect(() => { fetchKeywords(); - }, [pagination.current, pagination.pageSize]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pagination.current, pagination.pageSize, keywordQuery]); return (
@@ -216,16 +211,15 @@ const KeywordManagement = forwardRef>( style={{ width: 300 }} prefix={} /> - {/* */}
{loading ? (
加载中...
- ) : filteredKeywords.length === 0 ? ( + ) : keywordsList.length === 0 ? (
暂无关键词数据
) : ( - filteredKeywords.map(item => ( + keywordsList.map(item => (
@@ -234,7 +228,18 @@ const KeywordManagement = forwardRef>( {getMatchTypeText(item.type)} {getPriorityText(item.level)}
-
{item.content}
+ {item.content.length ? ( +
{item.content}
+ ) : ( +
+ 已选素材: + {item.metailGroupsOptions.map(v => ( + + {v.title} + + ))} +
+ )}
{getReplyTypeText(item.replyType)} diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/KeywordModal.tsx b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/KeywordModal.tsx index d4899b1e..6dccd250 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/KeywordModal.tsx +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/KeywordModal.tsx @@ -28,6 +28,8 @@ const KeywordModal: React.FC = ({ }) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(false); + const title = mode === "add" ? "添加关键词回复" : "编辑关键词回复"; + const [selectedOptions, setSelectedOptions] = useState([]); // 获取关键词详情 const fetchKeywordDetails = useCallback( @@ -44,8 +46,9 @@ const KeywordModal: React.FC = ({ level: keyword.level, replyType: keyword.replyType, status: keyword.status, - materialId: keyword.materialId, + metailGroups: keyword.metailGroups, }); + setSelectedOptions(keyword.metailGroupsOptions); } } catch (error) { console.error("获取关键词详情失败:", error); @@ -82,7 +85,7 @@ const KeywordModal: React.FC = ({ level: values.level, replyType: values.replyType, status: values.status || "1", - materialId: values.materialId, + metailGroups: values.metailGroups, }; const response = await addKeyword(data); @@ -104,7 +107,7 @@ const KeywordModal: React.FC = ({ level: values.level, replyType: values.replyType, status: values.status, - materialId: values.materialId, + metailGroups: values.metailGroups, }; const response = await updateKeyword(data); @@ -131,17 +134,15 @@ const KeywordModal: React.FC = ({ onCancel(); }; - const title = mode === "add" ? "添加关键词回复" : "编辑关键词回复"; - const [selectedOptions, setSelectedOptions] = useState([]); const handSelectMaterial = (options: any[]) => { if (options.length === 0) { form.setFieldsValue({ - materialId: null, + metailGroups: [], }); } else { // 在单选模式下,只取第一个选项的ID form.setFieldsValue({ - materialId: options[0].id, + metailGroups: options.map(v => v.id), }); } setSelectedOptions(options); @@ -222,7 +223,7 @@ const KeywordModal: React.FC = ({ ) : (