diff --git a/frontend/src/api/sensitive-word.ts b/frontend/src/api/sensitive-word.ts index 1fbf2cc..6a97f9d 100644 --- a/frontend/src/api/sensitive-word.ts +++ b/frontend/src/api/sensitive-word.ts @@ -1,14 +1,17 @@ import request from './request' import type { ApiResponse } from '@/types/api' -export function listSensitiveWords(page = 1, size = 20, keyword?: string, category?: string): Promise { +export function listSensitiveWords(page = 1, size = 20, keyword?: string, category?: string, level?: number): Promise { let path = `/sensitive-word/list?page=${page}&size=${size}` if (keyword) path += `&keyword=${encodeURIComponent(keyword)}` if (category) path += `&category=${encodeURIComponent(category)}` + if (level !== undefined && level !== null) path += `&level=${level}` return request.get(path).then(r => r.data) } export function createSensitiveWord(data: any): Promise { return request.post('/sensitive-word', data).then(r => r.data) } export function updateSensitiveWord(id: string, data: any): Promise { return request.put(`/sensitive-word/${id}`, data).then(r => r.data) } +/** 切换启用/禁用(复用 update 接口,仅传 isActive 字段) */ +export function toggleSensitiveWord(id: string, isActive: boolean): Promise { return updateSensitiveWord(id, { isActive }) } export function deleteSensitiveWord(id: string): Promise { return request.delete(`/sensitive-word/${id}`).then(r => r.data) } export function batchImportSensitiveWords(data: { words: string[]; category: string; level: number }): Promise { return request.post('/sensitive-word/batch-import', data).then(r => r.data) } export function listAuditLogs(page = 1, size = 20, sessionId?: string): Promise { diff --git a/frontend/src/views/SensitiveWordManager.vue b/frontend/src/views/SensitiveWordManager.vue index e19279d..3c436eb 100644 --- a/frontend/src/views/SensitiveWordManager.vue +++ b/frontend/src/views/SensitiveWordManager.vue @@ -1,104 +1,257 @@ - diff --git a/src/main/java/com/wok/supportbot/controller/SensitiveWordController.java b/src/main/java/com/wok/supportbot/controller/SensitiveWordController.java index 739f65a..db3a246 100644 --- a/src/main/java/com/wok/supportbot/controller/SensitiveWordController.java +++ b/src/main/java/com/wok/supportbot/controller/SensitiveWordController.java @@ -38,9 +38,10 @@ public class SensitiveWordController { @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size, @RequestParam(required = false) String keyword, - @RequestParam(required = false) String category) { + @RequestParam(required = false) String category, + @RequestParam(required = false) Integer level) { try { - Map result = sensitiveWordService.list(page, size, keyword, category); + Map result = sensitiveWordService.list(page, size, keyword, category, level); Map data = new HashMap<>(); data.put("success", true); diff --git a/src/main/java/com/wok/supportbot/service/SensitiveWordService.java b/src/main/java/com/wok/supportbot/service/SensitiveWordService.java index 3101ce1..94a3a74 100644 --- a/src/main/java/com/wok/supportbot/service/SensitiveWordService.java +++ b/src/main/java/com/wok/supportbot/service/SensitiveWordService.java @@ -32,9 +32,10 @@ public class SensitiveWordService { * @param size 每页条数 * @param keyword 关键词搜索(匹配 word 字段) * @param category 分类筛选 + * @param level 级别筛选(1=警告,2=拦截),可为空 * @return 包含 records/total/page/size/pages 的结果 */ - public Map list(int page, int size, String keyword, String category) { + public Map list(int page, int size, String keyword, String category, Integer level) { // 构建计数条件 QueryWrapper countWrapper = new QueryWrapper<>(); if (keyword != null && !keyword.isBlank()) { @@ -43,6 +44,9 @@ public class SensitiveWordService { if (category != null && !category.isBlank()) { countWrapper.eq("category", category); } + if (level != null) { + countWrapper.eq("level", level); + } Long total = sensitiveWordMapper.selectCount(countWrapper); // 构建列表查询条件 @@ -53,6 +57,9 @@ public class SensitiveWordService { if (category != null && !category.isBlank()) { listWrapper.eq("category", category); } + if (level != null) { + listWrapper.eq("level", level); + } listWrapper.orderByDesc("create_time"); listWrapper.last("LIMIT " + size + " OFFSET " + (long) (page - 1) * size); List records = sensitiveWordMapper.selectList(listWrapper);