diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/api.ts b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/api.ts index 62d156ce..337c3518 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/api.ts +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/api.ts @@ -118,7 +118,7 @@ export function updateSensitiveWord(data: SensitiveWordUpdateRequest) { // 违禁词管理-修改状态 export function setSensitiveWordStatus(data: SensitiveWordSetStatusRequest) { - return request("/v1/kefu/content/sensitiveWord/setStatus", data, "POST"); + return request("/v1/kefu/content/sensitiveWord/setStatus", data, "GET"); } // 关键词回复管理相关接口 diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/management/MaterialManagement.tsx b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/management/MaterialManagement.tsx index 5680d28f..603d6075 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/management/MaterialManagement.tsx +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/management/MaterialManagement.tsx @@ -4,7 +4,7 @@ import React, { forwardRef, useImperativeHandle, } from "react"; -import { Button, Input, Card, message, Modal } from "antd"; +import { Button, Input, Card, message, Popconfirm } from "antd"; import { SearchOutlined, FilterOutlined, @@ -91,22 +91,13 @@ const MaterialManagement = forwardRef>( // 素材管理相关函数 const handleDeleteMaterial = async (id: number) => { - Modal.confirm({ - title: "确认删除", - content: "确定要删除这个素材吗?删除后无法恢复。", - okText: "确定", - cancelText: "取消", - okType: "danger", - onOk: async () => { - try { - await deleteMaterial(id.toString()); - setMaterialsList(prev => prev.filter(item => item.id !== id)); - message.success("删除成功"); - } catch (error) { - message.error("删除失败"); - } - }, - }); + try { + await deleteMaterial(id.toString()); + setMaterialsList(prev => prev.filter(item => item.id !== id)); + message.success("删除成功"); + } catch (error) { + message.error("删除失败"); + } }; // 编辑素材 @@ -167,18 +158,24 @@ const MaterialManagement = forwardRef>( > 编辑 , - , + + , ]} >
{ - const [searchValue, setSearchValue] = useState(""); - const [sensitiveWordsList, setSensitiveWordsList] = useState< - SensitiveWordItem[] - >([]); - const [loading, setLoading] = useState(false); - const [editModalVisible, setEditModalVisible] = useState(false); - const [editingSensitiveWordId, setEditingSensitiveWordId] = useState< - string | null - >(null); +const SensitiveWordManagement = forwardRef>( + (props, ref) => { + const [searchValue, setSearchValue] = useState(""); + const [sensitiveWordsList, setSensitiveWordsList] = useState< + SensitiveWordItem[] + >([]); + const [loading, setLoading] = useState(false); + const [editModalVisible, setEditModalVisible] = useState(false); + const [editingSensitiveWordId, setEditingSensitiveWordId] = useState< + string | null + >(null); - const getTagColor = (tag: string) => { - switch (tag) { - case "政治": - return "#ff4d4f"; - case "色情": - return "#ff4d4f"; - case "暴力": - return "#ff4d4f"; - default: - return "#ff4d4f"; - } - }; + const getTagColor = (tag: string) => { + switch (tag) { + case "政治": + return "#ff4d4f"; + case "色情": + return "#ff4d4f"; + case "暴力": + return "#ff4d4f"; + default: + return "#ff4d4f"; + } + }; - // 操作类型映射 - const getOperationText = (operation: string) => { - switch (operation) { - case "0": - return "不操作"; - case "1": - return "替换"; - case "2": - return "删除"; - case "3": - return "警告"; - case "4": - return "禁止发送"; - default: - return "未知操作"; - } - }; + // 操作类型映射 + const getOperationText = (operation: string) => { + switch (operation) { + case "0": + return "不操作"; + case "1": + return "替换"; + case "2": + return "删除"; + case "3": + return "警告"; + case "4": + return "禁止发送"; + default: + return "未知操作"; + } + }; - // 获取敏感词列表 - const fetchSensitiveWords = async (params?: SensitiveWordListParams) => { - try { - setLoading(true); - const response = await getSensitiveWordList(params || {}); - if (response) { - setSensitiveWordsList(response.list || []); - } else { + // 获取敏感词列表 + const fetchSensitiveWords = async (params?: SensitiveWordListParams) => { + try { + setLoading(true); + const response = await getSensitiveWordList(params || {}); + if (response) { + setSensitiveWordsList(response.list || []); + } else { + setSensitiveWordsList([]); + message.error(response?.message || "获取敏感词列表失败"); + } + } catch (error) { + console.error("获取敏感词列表失败:", error); setSensitiveWordsList([]); - message.error(response?.message || "获取敏感词列表失败"); + message.error("获取敏感词列表失败"); + } finally { + setLoading(false); } - } catch (error) { - console.error("获取敏感词列表失败:", error); - setSensitiveWordsList([]); - message.error("获取敏感词列表失败"); - } finally { - setLoading(false); - } - }; + }; - // 敏感词管理相关函数 - const handleToggleSensitiveWord = async (id: string) => { - try { - const response = await setSensitiveWordStatus({ id }); - if (response) { - setSensitiveWordsList(prev => - prev.map(item => - item.id === id ? { ...item, enabled: !item.enabled } : item, - ), - ); - message.success("状态更新成功"); - } else { - message.error(response?.message || "状态更新失败"); + // 暴露方法给父组件 + useImperativeHandle(ref, () => ({ + fetchSensitiveWords, + })); + + // 敏感词管理相关函数 + const handleToggleSensitiveWord = async (id: string) => { + try { + const response = await setSensitiveWordStatus({ id }); + if (response) { + setSensitiveWordsList(prev => + prev.map(item => + item.id === id ? { ...item, enabled: !item.enabled } : item, + ), + ); + message.success("状态更新成功"); + } else { + message.error(response?.message || "状态更新失败"); + } + } catch (error) { + console.error("状态更新失败:", error); + message.error("状态更新失败"); } - } catch (error) { - console.error("状态更新失败:", error); - message.error("状态更新失败"); - } - }; + }; - const handleEditSensitiveWord = (id: string) => { - setEditingSensitiveWordId(id); - setEditModalVisible(true); - }; + const handleEditSensitiveWord = (id: string) => { + setEditingSensitiveWordId(id); + setEditModalVisible(true); + }; - // 编辑弹窗成功回调 - const handleEditSuccess = () => { - fetchSensitiveWords(); // 重新获取数据 - }; + // 编辑弹窗成功回调 + const handleEditSuccess = () => { + fetchSensitiveWords(); // 重新获取数据 + }; - const handleDeleteSensitiveWord = async (id: string) => { - try { - const response = await deleteSensitiveWord(id); - if (response) { + const handleDeleteSensitiveWord = async (id: string) => { + try { + await deleteSensitiveWord(id); setSensitiveWordsList(prev => prev.filter(item => item.id !== id)); message.success("删除成功"); - } else { - message.error(response?.message || "删除失败"); + } catch (error) { + console.error("删除失败:", error); + message.error("删除失败"); } - } catch (error) { - console.error("删除失败:", error); - message.error("删除失败"); - } - }; + }; + + // 搜索和筛选功能 + const filteredSensitiveWords = sensitiveWordsList.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()) + ); + }); + + // 搜索处理函数 + const handleSearch = (value: string) => { + fetchSensitiveWords({ keyword: value }); + }; + + // 组件挂载时获取数据 + useEffect(() => { + fetchSensitiveWords(); + }, []); - // 搜索和筛选功能 - const filteredSensitiveWords = sensitiveWordsList.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()) - ); - }); +
+
+ setSearchValue(e.target.value)} + onSearch={handleSearch} + style={{ width: 300 }} + prefix={} + /> + +
- // 搜索处理函数 - const handleSearch = (value: string) => { - fetchSensitiveWords({ keyword: value }); - }; - - // 组件挂载时获取数据 - useEffect(() => { - fetchSensitiveWords(); - }, []); - - return ( -
-
- setSearchValue(e.target.value)} - onSearch={handleSearch} - style={{ width: 300 }} - prefix={} - /> - -
- -
- {loading ? ( -
加载中...
- ) : filteredSensitiveWords.length === 0 ? ( -
暂无敏感词数据
- ) : ( - filteredSensitiveWords.map(item => ( -
-
-
{item.title}
- - {item.keywords} - -
- {getOperationText(item.operation)} +
+ {loading ? ( +
加载中...
+ ) : filteredSensitiveWords.length === 0 ? ( +
暂无敏感词数据
+ ) : ( + filteredSensitiveWords.map(item => ( +
+
+
{item.title}
+ + {item.keywords} + +
+ {getOperationText(item.operation)} +
+
+
+ handleToggleSensitiveWord(item.id)} + className={styles.toggleSwitch} + /> +
-
- handleToggleSensitiveWord(item.id)} - className={styles.toggleSwitch} - /> -
-
- )) - )} -
+ )) + )} +
- {/* 编辑弹窗 */} - { - setEditModalVisible(false); - setEditingSensitiveWordId(null); - }} - onSuccess={handleEditSuccess} - /> -
- ); -}; + {/* 编辑弹窗 */} + { + setEditModalVisible(false); + setEditingSensitiveWordId(null); + }} + onSuccess={handleEditSuccess} + /> +
+ ); + }, +); + +SensitiveWordManagement.displayName = "SensitiveWordManagement"; export default SensitiveWordManagement; diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/SensitiveWordModal.tsx b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/SensitiveWordModal.tsx index 22628f4e..c715e265 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/SensitiveWordModal.tsx +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/components/modals/SensitiveWordModal.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useCallback } from "react"; import { Modal, Form, Input, Button, message, Select } from "antd"; import { addSensitiveWord, @@ -30,34 +30,40 @@ const SensitiveWordModal: React.FC = ({ const [loading, setLoading] = useState(false); // 获取敏感词详情 - const fetchSensitiveWordDetails = async (id: string) => { - try { - const response = await getSensitiveWordDetails(id); - if (response) { - const sensitiveWord = response; - form.setFieldsValue({ - title: sensitiveWord.title, - keywords: sensitiveWord.keywords, - content: sensitiveWord.content, - operation: sensitiveWord.operation, - status: sensitiveWord.status, - }); + const fetchSensitiveWordDetails = useCallback( + async (id: string) => { + try { + const response = await getSensitiveWordDetails(id); + if (response) { + const sensitiveWord = response; + form.setFieldsValue({ + title: sensitiveWord.title, + keywords: sensitiveWord.keywords, + content: sensitiveWord.content, + operation: sensitiveWord.operation, + status: sensitiveWord.status, + }); + } + } catch (error) { + console.error("获取敏感词详情失败:", error); + message.error("获取敏感词详情失败"); } - } catch (error) { - console.error("获取敏感词详情失败:", error); - message.error("获取敏感词详情失败"); - } - }; + }, + [form], + ); - // 当弹窗打开且为编辑模式时,获取详情 + // 当弹窗打开时处理数据 useEffect(() => { - if (visible && mode === "edit" && sensitiveWordId) { - fetchSensitiveWordDetails(sensitiveWordId); - } else if (visible && mode === "add") { - // 添加模式时重置表单 - form.resetFields(); + if (visible) { + if (mode === "edit" && sensitiveWordId) { + // 编辑模式:获取详情 + fetchSensitiveWordDetails(sensitiveWordId); + } else if (mode === "add") { + // 添加模式:重置表单 + form.resetFields(); + } } - }, [visible, mode, sensitiveWordId]); + }, [visible, mode, sensitiveWordId, fetchSensitiveWordDetails, form]); const handleSubmit = async (values: any) => { try { diff --git a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/index.tsx b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/index.tsx index 4f8b4fa0..ead8b0bc 100644 --- a/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/powerCenter/content-management/index.tsx @@ -22,6 +22,7 @@ const ContentManagement: React.FC = () => { // 引用管理组件 const materialManagementRef = useRef(null); const keywordManagementRef = useRef(null); + const sensitiveWordManagementRef = useRef(null); const tabs = [ { key: "material", label: "素材资源库" }, @@ -44,12 +45,20 @@ const ContentManagement: React.FC = () => { // 弹窗成功回调 const handleModalSuccess = () => { + console.log("handleModalSuccess"); // 刷新素材列表 if (materialManagementRef.current?.fetchMaterials) { + console.log("刷新素材列表"); materialManagementRef.current.fetchMaterials(); } + // 刷新敏感词列表 + if (sensitiveWordManagementRef.current?.fetchSensitiveWords) { + console.log("刷新敏感词列表"); + sensitiveWordManagementRef.current.fetchSensitiveWords(); + } // 刷新关键词列表 if (keywordManagementRef.current?.fetchKeywords) { + console.log("刷新关键词列表"); keywordManagementRef.current.fetchKeywords(); } }; @@ -61,7 +70,12 @@ const ContentManagement: React.FC = () => { ); case "sensitive": - return ; + return ( + + ); case "keyword": return ( @@ -89,12 +103,12 @@ const ContentManagement: React.FC = () => { > 添加素材 - +
} /> @@ -136,6 +150,7 @@ const ContentManagement: React.FC = () => { setKeywordModalVisible(false)} onSuccess={handleModalSuccess} />