Files
YG-Datasets/easy-dataset-main/components/datasets/DatasetMetadata.js

78 lines
2.7 KiB
JavaScript
Raw Normal View History

2026-03-17 14:36:31 +08:00
'use client';
import { Box, Typography, Chip, Tooltip, alpha, CircularProgress } from '@mui/material';
import { useTranslation } from 'react-i18next';
import { useTheme } from '@mui/material/styles';
import { useState } from 'react';
/**
* 数据集元数据展示组件
*/
export default function DatasetMetadata({ currentDataset, onViewChunk }) {
const { t } = useTranslation();
const theme = useTheme();
return (
<Box sx={{ mb: 3 }}>
<Typography variant="subtitle1" color="text.secondary" sx={{ mb: 1 }}>
{t('datasets.metadata')}
</Typography>
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
<Chip label={`${t('datasets.model')}: ${currentDataset.model}`} variant="outlined" />
{currentDataset.questionLabel && (
<Chip label={`${t('common.label')}: ${currentDataset.questionLabel}`} color="primary" variant="outlined" />
)}
<Chip
label={`${t('datasets.createdAt')}: ${new Date(currentDataset.createAt).toLocaleString('zh-CN')}`}
variant="outlined"
/>
<Tooltip title={t('textSplit.viewChunk')}>
<Chip
label={`${t('datasets.chunkId')}: ${currentDataset.chunkName}`}
variant="outlined"
color="info"
onClick={async () => {
try {
// 使用新API接口获取文本块内容
const response = await fetch(
`/api/projects/${currentDataset.projectId}/chunks/name?chunkName=${encodeURIComponent(currentDataset.chunkName)}`
);
if (!response.ok) {
throw new Error(`获取文本块失败: ${response.statusText}`);
}
const chunkData = await response.json();
// 调用父组件的方法显示文本块
onViewChunk({
name: currentDataset.chunkName,
content: chunkData.content
});
} catch (error) {
console.error('获取文本块内容失败:', error);
// 即使API请求失败也尝试调用查看方法
onViewChunk({
name: currentDataset.chunkName,
content: '内容加载失败,请重试'
});
}
}}
sx={{ cursor: 'pointer' }}
/>
</Tooltip>
{currentDataset.confirmed && (
<Chip
label={t('datasets.confirmed')}
sx={{
backgroundColor: alpha(theme.palette.success.main, 0.1),
color: theme.palette.success.dark,
fontWeight: 'medium'
}}
/>
)}
</Box>
</Box>
);
}