import { useEffect, useMemo, useState } from 'react'; import { Plus, Search, Trash2 } from 'lucide-react'; import { Breadcrumb, Button, Input, Modal, Select, Table, Textarea, type TableColumn } from '@/components/ui'; import { adminApi, type DictionaryItem, type TenantOption } from '@/api/adminApi'; type EnterpriseBlacklistItem = DictionaryItem & { tenantId?: string; tenant?: TenantOption; phoneNumber?: string; reason?: string | null; }; export function AdminEnterpriseBlacklistPage() { const [items, setItems] = useState([]); const [tenants, setTenants] = useState([]); const [keyword, setKeyword] = useState(''); const [tenantId, setTenantId] = useState(''); const [phone, setPhone] = useState(''); const [reason, setReason] = useState(''); const [modalOpen, setModalOpen] = useState(false); const [error, setError] = useState(''); function loadData() { Promise.all([adminApi.listEnterpriseBlacklist({ keyword }), adminApi.listTenants()]) .then(([blacklist, tenantItems]) => { setItems(blacklist as EnterpriseBlacklistItem[]); setTenants(tenantItems); setError(''); }) .catch((failure: Error) => setError(failure.message || '企业黑名单加载失败')); } useEffect(() => { loadData(); }, []); const filteredItems = useMemo(() => items.filter((item) => { const text = [item.tenant?.name, item.phoneNumber, item.reason, item.status].join(' '); return !keyword || text.includes(keyword); }), [items, keyword]); const columns = useMemo>>(() => [ { key: 'enterprise', title: '企业名称', width: '180px', render: (record) => {record.tenant?.name ?? record.tenantId} }, { key: 'phone', title: '手机号码', width: '150px', render: (record) => {record.phoneNumber} }, { key: 'createdAt', title: '入库时间', width: '170px', render: (record) => record.createdAt ?? '-' }, { key: 'reason', title: '入库原因', render: (record) => record.reason ?? '-' }, { key: 'status', title: '状态', width: '130px', render: (record) => record.status ?? '-' }, { key: 'actions', title: '操作', width: '130px', align: 'right', render: (record) => ( ), }, ], []); function addItem() { adminApi.createEnterpriseBlacklist({ tenantId, phoneNumber: phone, reason, status: 'active' }) .then(() => { setTenantId(''); 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} />