import { useEffect, useMemo, useState } from 'react'; import { Plus, Search, Trash2 } from 'lucide-react'; import { Breadcrumb, Button, Input, Modal, Table, Textarea, type TableColumn } from '@/components/ui'; import { adminApi, type DictionaryItem } from '@/api/adminApi'; type GlobalBlacklistItem = DictionaryItem & { phoneNumber?: string; reason?: string | null; }; export function AdminGlobalBlacklistPage() { const [items, setItems] = useState([]); const [keyword, setKeyword] = useState(''); const [phone, setPhone] = useState(''); const [reason, setReason] = useState(''); const [modalOpen, setModalOpen] = useState(false); const [error, setError] = useState(''); function loadData() { adminApi.listGlobalBlacklist({ keyword }) .then((data) => { setItems(data as GlobalBlacklistItem[]); setError(''); }) .catch((failure: Error) => setError(failure.message || '全局黑名单加载失败')); } useEffect(() => { loadData(); }, []); const filteredItems = useMemo(() => items.filter((item) => { const text = [item.phoneNumber, item.reason, item.status].join(' '); return !keyword || text.includes(keyword); }), [items, keyword]); const columns = useMemo>>(() => [ { key: 'phone', title: '手机号码', width: '180px', render: (record) => {record.phoneNumber} }, { key: 'createdAt', title: '入库时间', width: '190px', render: (record) => record.createdAt ?? '-' }, { key: 'reason', title: '入库原因', render: (record) => record.reason ?? '-' }, { key: 'status', title: '状态', width: '120px', render: (record) => record.status ?? '-' }, { key: 'actions', title: '操作', width: '130px', align: 'right', render: (record) => ( ), }, ], []); function addItem() { adminApi.createGlobalBlacklist({ phoneNumber: phone, reason, status: 'active' }) .then(() => { setPhone(''); setReason(''); setModalOpen(false); loadData(); }) .catch((failure: Error) => setError(failure.message || '添加全局黑名单失败')); } return (

全局黑名单

{error ?

{error}

: null}
setKeyword(event.target.value)} placeholder="搜索手机号、原因或状态" prefix={} value={keyword} />
)} onClose={() => setModalOpen(false)} open={modalOpen} title="添加全局黑名单" >
setPhone(event.target.value)} placeholder="请输入手机号码" value={phone} />