import { useState } from 'react'
import { useQuery, useQueryClient } from '@tanstack/react-query'
import { Table, Button, Typography, App, Modal, Input, Select, Tag, Space, Tabs } from 'antd'
import { ReloadOutlined, PlusOutlined, DeleteOutlined, SafetyOutlined } from '@ant-design/icons'
import { contentSafetyAPI } from '@/api'
import dayjs from 'dayjs'
const { Title, Text } = Typography
function CSPage() {
const { modal, message } = App.useApp()
const qc = useQueryClient()
const [addOpen, setAddOpen] = useState(false)
const [newWord, setNewWord] = useState('')
const [category, setCategory] = useState('general')
const [risk, setRisk] = useState('medium')
const { data: words } = useQuery({ queryKey: ['safety', 'words'], queryFn: () => contentSafetyAPI.words() })
const { data: checks } = useQuery({ queryKey: ['safety', 'checks'], queryFn: () => contentSafetyAPI.checks() })
const { data: reports } = useQuery({ queryKey: ['safety', 'reports'], queryFn: () => contentSafetyAPI.reports() })
const { data: violations } = useQuery({ queryKey: ['safety', 'violations'], queryFn: () => contentSafetyAPI.violations() })
const addWord = async () => {
await contentSafetyAPI.addWord({ word: newWord, category, riskLevel: risk })
message.success('已添加'); setAddOpen(false); setNewWord('')
qc.invalidateQueries({ queryKey: ['safety'] })
}
const removeWord = (id: string) => modal.confirm({
title: '删除敏感词', okType: 'danger',
onOk: async () => { await contentSafetyAPI.deleteWord(id); qc.invalidateQueries({ queryKey: ['safety'] }) },
})
const handleReport = (id: string, action: string) => modal.confirm({
title: action === 'confirmed' ? '确认违规' : '驳回举报',
content: action === 'confirmed' ? '确认后将创建违规记录' : '驳回后将关闭此举报',
onOk: async () => {
await contentSafetyAPI.handleReport(id, { action, note: `Admin ${action}` })
message.success('已处理'); qc.invalidateQueries({ queryKey: ['safety'] })
},
})
const applyPenalty = (id: string, penalty: string) => modal.confirm({
title: '应用处罚',
content: `确认对违规记录应用「${penalty}」处罚?`,
onOk: async () => {
await contentSafetyAPI.penaltyViolation(id, { penalty })
message.success('处罚已应用'); qc.invalidateQueries({ queryKey: ['safety'] })
},
})
const wordCols = [
{ title: '词汇', dataIndex: 'word', width: 150 },
{ title: '分类', dataIndex: 'category', width: 100 },
{ title: '等级', dataIndex: 'riskLevel', width: 80, render: (v: string) =>