import { useEffect, useCallback, useState } from 'react'; import { Table, Tag, theme } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { listCompletedTasks, type TaskInfo } from '../../api/workflowTasks'; const outcomeStyles: Record = { approved: { bg: '#ECFDF5', color: '#059669', text: '同意' }, rejected: { bg: '#FEF2F2', color: '#DC2626', text: '拒绝' }, delegated: { bg: '#EEF2FF', color: '#4F46E5', 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 { token } = theme.useToken(); const isDark = token.colorBgContainer === '#111827' || token.colorBgContainer === 'rgb(17, 24, 39)'; 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: '#F1F5F9', color: '#64748B', text: o }; return ( {info.text} ); }, }, { title: '完成时间', dataIndex: 'completed_at', key: 'completed_at', width: 180, render: (v: string) => ( {v ? new Date(v).toLocaleString() : '-'} ), }, ]; return (
`共 ${t} 条记录`, }} /> ); }