import { apiInterceptors, createEvaluations, delDataSet, delEvaluation, downloadDataSet, downloadEvaluation, getAppList, getDataSets, getEvaluations, getMetrics, getSpaceList, showEvaluation, updateEvaluations, uploadDataSetsContent, uploadDataSetsFile, } from '@/client/api'; import { InfoCircleOutlined, UploadOutlined } from '@ant-design/icons'; import { useRequest } from 'ahooks'; import type { TableProps } from 'antd'; import { Badge, Button, ConfigProvider, Form, Input, Modal, Popconfirm, Segmented, Select, Space, Statistic, Table, Tag, Tooltip, Upload, message, } from 'antd'; import { valueType } from 'antd/es/statistic/utils'; import { useMemo, useState } from 'react'; const { TextArea } = Input; const { useWatch } = Form; interface DataSetItemType { code: string; name: string; file_type: string; storage_type: string; storage_position: string; datasets_count: string; have_answer: boolean; members: string; user_name: string; user_id: string; sys_code: string; gmt_create: string; gmt_modified: string; } interface EvaluationItemType { evaluate_code: string; scene_key: string; scene_value: string; datasets: string; evaluate_metrics: string; context: object; user_name: string; user_id: string; sys_code: string; parallel_num: string; state: string; result: string; average_score: string; log_info: string; gmt_create: string; gmt_modified: string; } const Evaluation = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [isDataSetModalOpen, setIsDataSetModalOpen] = useState(false); const [evaluationList, setEvaluationList] = useState([]); const [evaluationTotal, setEvaluationTotal] = useState(0); const [dataSetsTotal, setDataSetsTotal] = useState(0); const [sceneValueOptions, setSceneValueOptions] = useState<{ label: string; value: string }[]>(); const [metricOptions, setMetricOptions] = useState<{ label: string; value: string }[]>(); const [sceneValueOptionLoading, setSceneValueOptionLoading] = useState(false); const [currentTable, setCurrentTable] = useState('evaluations'); const [isModalVisible, setIsModalVisible] = useState(false); const [isAddDataSet, setIsAddDataSet] = useState(true); const [evaluationShowData, setEvaluationShowData] = useState[]>([{}]); const [storageTypeOptions, _] = useState<{ label: string; value: string }[]>(); const [dataSetsList, setDataSetsList] = useState([]); const [currentEvaluationCode, setCurrentEvaluationCode] = useState(''); const [dataSetModalLoading, setDataSetModalLoading] = useState(false); const [evaluationModalLoading, setEvaluationModalLoading] = useState(false); const [commonLoading, setCommonLoading] = useState(false); const dataSetsOptions = useMemo(() => { return dataSetsList?.map(item => { return { label: item?.name, value: item?.code, }; }); }, [dataSetsList]); const [form] = Form.useForm(); const [dataSetForm] = Form.useForm(); //getMetrics const { run: runGetMetrics, loading: getMetricsLoading } = useRequest( async params => { const [_, data] = await apiInterceptors(getMetrics(params)); return data; }, { manual: true, onSuccess: data => { setMetricOptions( data?.map((i: Record) => { return { label: i.describe, value: i.name }; }), ); }, }, ); //showEvaluation const { run: runShowEvaluation, loading: showEvaluationLoading } = useRequest( async params => { const [_, data] = await apiInterceptors(showEvaluation(params)); return data; }, { manual: true, onSuccess: data => { if (data && data.length) { setEvaluationShowData(data); setIsModalVisible(true); } }, }, ); // TODO: unuesed function // // getStorageTypes // const { run: runGetStorageTypes } = useRequest( // async () => { // const [_, data] = await apiInterceptors(getStorageTypes()); // return data; // }, // { // onSuccess: data => { // data && // setStorageTypeOptions( // data.map((i: Record[]) => { // const [k, v] = Object.entries(i)[0]; // return { label: v, value: k }; // }), // ); // }, // }, // ); const { run: runGetEvaluations, loading: getEvaluationsLoading, refresh: getEvaluationsRefresh, } = useRequest( async (page = 1, page_size = 10) => { const [_, data] = await apiInterceptors( getEvaluations({ page, page_size, }), ); return data; }, { // manual: true, onSuccess: data => { setEvaluationList(data?.items); setEvaluationTotal(data?.total_count); }, }, ); const { run: runGetDataSets, loading: getDataSetsLoading, refresh: getDataSetsRefresh, } = useRequest( async (page = 1, page_size = 10) => { const [_, data] = await apiInterceptors( getDataSets({ page, page_size, }), ); return data; }, { // manual: true, onSuccess: data => { setDataSetsList(data?.items); setDataSetsTotal(data?.total_count); }, }, ); // TODO: unuesed function // // uploadDataSets // const { // run: runUploadDataSets, // loading: uploadDataSetsLoading, // refresh: uploadDataSetsRefresh, // } = useRequest( // async data => { // const [_, res] = await apiInterceptors( // uploadDataSets({ // ...data, // }), // ); // return res; // }, // { // manual: true, // onSuccess: res => { // setEvaluationList(res?.items); // }, // }, // ); const columns: TableProps['columns'] = [ { title: '名称', dataIndex: 'name', key: 'name', width: '10%', fixed: 'left', }, { title: '编码', dataIndex: 'code', key: 'code', width: '20%', // render: (text) => {text}, }, { title: '储存方式', dataIndex: 'storage_type', key: 'storage_type', }, { title: '数据集数量', dataIndex: 'datasets_count', key: 'datasets_count', }, { title: '创建时间', dataIndex: 'gmt_create', key: 'gmt_create', }, { title: '成员', dataIndex: 'members', key: 'members', width: '10%', render: text => { return text?.split(',').map((item: string) => { return {item}; }); }, }, { title: '更新时间', dataIndex: 'gmt_modified', key: 'gmt_modified', }, { title: 'Action', key: 'action', render: (_, record) => ( { const [, , res] = await apiInterceptors( delDataSet({ code: record?.code, }), ); if (res?.success == true) { message.success('删除成功'); getDataSetsRefresh(); } }} > ), }, ]; /* evaluations Columns */ const evaluationsColumns: TableProps['columns'] = [ { title: '数据集名称', dataIndex: 'datasets_name', key: 'datasets_name', fixed: 'left', width: '15%', render: text => ( {text} ), }, { title: '测评状态', dataIndex: 'state', key: 'state', render: text => { return ; }, }, { title: '测评编码', dataIndex: 'evaluate_code', key: 'evaluate_code', }, { title: '场景', dataIndex: 'scene_key', key: 'scene_key', }, { title: '测评指标', dataIndex: 'evaluate_metrics', key: 'evaluate_metrics', }, { title: '创建时间', dataIndex: 'gmt_create', key: 'gmt_create', }, { title: '更新时间', dataIndex: 'gmt_modified', key: 'gmt_modified', }, Table.EXPAND_COLUMN, { title: ( 详情 ), render: () => (
), }, { title: '测评结果', key: 'result', render: (_, record) => ( <> ), }, { title: '操作', key: 'action', width: '25%', render: (_, record) => ( <> { const [, , res] = await apiInterceptors( delEvaluation({ evaluation_code: record?.evaluate_code, }), ); if (res?.success == true) { message.success('删除成功'); getEvaluationsRefresh(); } }} > ), }, ]; const handleModalClose = () => { setIsModalVisible(false); }; return (
{ setCurrentTable(type as string); }} value={currentTable} /> {currentTable === 'dataSet' && ( <>
)} {currentTable === 'evaluations' && ( <>
record.evaluate_code} expandable={{ expandedRowRender: ({ average_score, log_info }) => { return (
{(() => { if (!average_score) return <>; try { const jsonData = JSON.parse(average_score); return (
{Object.entries(jsonData)?.map(item => { const [k, v] = item; return ; })}
); } catch { return <>; } })()} {log_info && (
log: {log_info}
)}
); }, }} scroll={{ x: '100%' }} loading={getEvaluationsLoading} columns={evaluationsColumns} dataSource={evaluationList} /> )} { const values = await form.validateFields(); setEvaluationModalLoading(true); if (values) { const [, , res] = await apiInterceptors( createEvaluations({ ...values, }), ); if (res?.success) { message.success('发起成功'); getEvaluationsRefresh(); form.resetFields(); } } setIsModalOpen(false); setEvaluationModalLoading(false); }} confirmLoading={evaluationModalLoading} onCancel={() => { setIsModalOpen(false); }} >
{ dataSetForm.validateFields().then(values => { setDataSetModalLoading(true); if (isAddDataSet) { const storageType = values.storage_type; if (storageType === 'oss') { // 创建FormData对象 const formData = new FormData(); formData.append('dataset_name', values.dataset_name); values.members && formData.append('members', values.members.join(',')); const file = values.doc_file.file; // 获取文件对象 formData.append('doc_file', file, file.name); uploadDataSetsFile(formData) .then(response => { if (response.data.success) { message.success('上传成功'); runGetDataSets(); } else { message.error(response.data.err_msg); } }) .catch(error => { console.error('上传失败', error); message.error(error?.response?.data?.err_msg || '上传失败'); }) .finally(() => { setIsDataSetModalOpen(false); setDataSetModalLoading(false); }); } else if (storageType === 'db') { uploadDataSetsContent({ dataset_name: values.dataset_name, members: values.members.join(','), content: values.content, }) .then(res => { if (res.data.success) { message.success('上传成功'); runGetDataSets(); } else { message.error(res.data.err_msg); } }) .catch(err => { console.log(err); message.error(err?.response?.data?.err_msg || '上传失败'); }) .finally(() => { setIsDataSetModalOpen(false); setDataSetModalLoading(false); dataSetForm.resetFields(); }); } } else { updateEvaluations({ code: currentEvaluationCode, members: values.members.join(','), }) .then(res => { if (res.data.success) { message.success('更新成功'); runGetDataSets(); } else { message.error(res.data.err_msg); } }) .catch(err => { console.log(err); message.error('更新失败'); }) .finally(() => { setIsDataSetModalOpen(false); setDataSetModalLoading(false); }); } }); }} onCancel={() => { setIsDataSetModalOpen(false); }} >
)} {useWatch('storage_type', dataSetForm) === 'oss' && isAddDataSet && ( { dataSetForm.setFieldsValue({ doc_file: file, }); return false; }} onRemove={() => { dataSetForm.setFieldsValue({ doc_file: undefined, }); }} > )} {useWatch('storage_type', dataSetForm) === 'db' && isAddDataSet && (