import { useEffect, useMemo, useState } from 'react'; import { Check, FileSearch, Search, X } from 'lucide-react'; import { adminApi, type EnterpriseCertification } from '@/api/adminApi'; import { Breadcrumb, Button, Input, Modal, Select, Table, Tag, type TableColumn } from '@/components/ui'; type EnterpriseAuditStatus = 'pending' | 'approved' | 'rejected'; type EnterpriseAuditRecord = { id: string; companyName: string; creditCode: string; legalPerson: string; registeredAddress: string; businessLicense: string; bankAccountName: string; bankName: string; bankAccountNo: string; verificationAmount: string; contactName: string; contactPhone: string; contactEmail: string; submittedAt: string; reviewRemark: string; status: EnterpriseAuditStatus; }; const statusOptions = [ { label: '全部状态', value: 'all' }, { label: '待审核', value: 'pending' }, { label: '已通过', value: 'approved' }, { label: '已拒绝', value: 'rejected' }, ]; const statusTextMap: Record = { pending: '待审核', approved: '已通过', rejected: '已拒绝', }; const statusToneMap: Record = { pending: 'warning', approved: 'success', rejected: 'danger', }; function mapCertification(record: EnterpriseCertification): EnterpriseAuditRecord { const materials = record.materials ?? {}; return { id: record.id, companyName: record.companyName, creditCode: record.licenseNo ?? '', legalPerson: String(materials.legalPerson ?? ''), registeredAddress: String(materials.registeredAddress ?? ''), businessLicense: String(materials.businessLicense ?? ''), bankAccountName: String(materials.bankAccountName ?? record.companyName), bankName: String(materials.bankName ?? ''), bankAccountNo: String(materials.bankAccountNo ?? ''), verificationAmount: String(materials.verificationAmount ?? ''), contactName: record.contactName ?? '', contactPhone: record.contactPhone ?? '', contactEmail: String(materials.contactEmail ?? ''), submittedAt: new Date(record.submittedAt).toLocaleString('zh-CN', { hour12: false }), reviewRemark: record.rejectReason ?? String(materials.reviewRemark ?? ''), status: record.status as EnterpriseAuditStatus, }; } export function AdminEnterpriseAuditPage() { const [keyword, setKeyword] = useState(''); const [status, setStatus] = useState('all'); const [records, setRecords] = useState([]); const [error, setError] = useState(''); const [detailRecord, setDetailRecord] = useState(null); useEffect(() => { adminApi.listEnterpriseCertifications({ keyword, status }) .then((items) => { setRecords(items.map(mapCertification)); setError(''); }) .catch((failure: Error) => { setRecords([]); setError(failure.message || '企业认证审核数据加载失败'); }); }, [keyword, status]); const filteredRecords = useMemo( () => records.filter((record) => { const matchesKeyword = !keyword || `${record.companyName}${record.creditCode}`.includes(keyword); const matchesStatus = status === 'all' || record.status === status; return matchesKeyword && matchesStatus; }), [keyword, records, status], ); async function updateStatus(id: string, nextStatus: EnterpriseAuditStatus) { const updated = nextStatus === 'approved' ? await adminApi.approveEnterpriseCertification(id) : await adminApi.rejectEnterpriseCertification(id); const mapped = mapCertification(updated); setRecords((items) => items.map((item) => (item.id === id ? mapped : item))); setDetailRecord((current) => (current?.id === id ? mapped : current)); } const columns: Array> = [ { key: 'id', title: '申请单号', render: (record) => {record.id} }, { key: 'companyName', title: '企业名称', render: (record) => {record.companyName} }, { key: 'creditCode', title: '统一社会信用代码', render: (record) => record.creditCode }, { key: 'contactName', title: '联系人', render: (record) => record.contactName }, { key: 'contactPhone', title: '联系电话', render: (record) => record.contactPhone }, { key: 'submittedAt', title: '提交时间', render: (record) => record.submittedAt }, { key: 'status', title: '状态', render: (record) => {statusTextMap[record.status]}, }, { key: 'actions', title: '操作', align: 'right', render: (record) => (
{record.status === 'pending' ? ( <> ) : null}
), }, ]; return (
{error ?

{error}

: null}
setKeyword(event.target.value)} placeholder="请输入企业名称或统一社会信用代码" value={keyword} />