import { useEffect, useCallback, useState } from 'react'; import { Table, Tag } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { listCompletedTasks, type TaskInfo } from '../../api/workflowTasks'; import { useThemeMode } from '../../hooks/useThemeMode'; const outcomeStyles: Record = { approved: { bg: '#ECFDF5', color: '#059669', text: '同意' }, rejected: { bg: '#FEF2F2', color: '#dc2626', text: '拒绝' }, delegated: { bg: '#eff6ff', color: '#2563eb', text: '已委派' }, }; export default function CompletedTasks() { const [data, setData] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(false); const isDark = useThemeMode(); const fetchData = useCallback(async () => { setLoading(true); try { const res = await listCompletedTasks(page, 20); setData(res.data); setTotal(res.total); } finally { setLoading(false); } }, [page]); useEffect(() => { fetchData(); }, [fetchData]); const columns: ColumnsType = [ { title: '任务名称', dataIndex: 'node_name', key: 'node_name', render: (v: string) => {v}, }, { title: '流程', dataIndex: 'definition_name', key: 'definition_name' }, { title: '业务键', dataIndex: 'business_key', key: 'business_key', render: (v: string | undefined) => v || '-', }, { title: '结果', dataIndex: 'outcome', key: 'outcome', width: 100, render: (o: string) => { const info = outcomeStyles[o] || { bg: '#f8fafc', color: '#475569', text: o }; return ( {info.text} ); }, }, { title: '完成时间', dataIndex: 'completed_at', key: 'completed_at', width: 180, render: (v: string) => ( {v ? new Date(v).toLocaleString() : '-'} ), }, ]; return (
`共 ${t} 条记录`, }} /> ); }