diff --git a/frontend/scripts/regression-dataset-preview.mjs b/frontend/scripts/regression-dataset-preview.mjs index 8a339ac..de14357 100644 --- a/frontend/scripts/regression-dataset-preview.mjs +++ b/frontend/scripts/regression-dataset-preview.mjs @@ -10,6 +10,7 @@ const previewComponentPaths = [ 'DatasetRecordTable.vue', 'DatasetRecordEditorDialog.vue', 'DatasetRawPreview.vue', + 'DatasetSplitNavigator.vue', ].map((name) => path.join(previewComponentsDir, name)) const apiPath = path.join(root, 'src/api/modules/dataset.ts') const adapterPath = path.join(root, 'src/mock/adapter.ts') @@ -50,12 +51,16 @@ function expect(condition, message) { } expect(previewLogicSource.split('\n').length < 520, 'DatasetPreviewView.vue 的逻辑与模板应保持在 520 行以内') -for (const componentName of ['DatasetVersionBar', 'DatasetRecordTable', 'DatasetRecordEditorDialog', 'DatasetRawPreview']) { +for (const componentName of ['DatasetVersionBar', 'DatasetRecordTable', 'DatasetRecordEditorDialog', 'DatasetRawPreview', 'DatasetSplitNavigator']) { expect(source.includes(`import ${componentName}`), `主页面未导入叶子组件:${componentName}`) expect(source.includes(`<${componentName}`), `主页面未挂载叶子组件:${componentName}`) } expect(source.includes('class="preview-workspace"'), '详情页应提供数据文件工作区') -expect(!source.includes('class="file-pane"'), '单文件数据集详情不应展示文件选择侧栏') +expect(previewSurfaceSource.includes('class="split-file-tabs"'), '多切分数据集应提供训练/验证/测试文件切换') +expect(source.includes('@select="handleFileChange"'), '切换数据切分时应加载对应文件版本') +expect(previewSurfaceSource.includes('splitCounts.train'), '数据集概览应显示训练集数量') +expect(previewSurfaceSource.includes('splitCounts.validation'), '数据集概览应显示验证集数量') +expect(previewSurfaceSource.includes('splitCounts.test'), '数据集概览应显示测试集数量') expect(previewSurfaceSource.includes('class="code-line"'), '内容查看器应提供逐行展示') expect(previewSurfaceSource.includes('class="line-number"'), '内容查看器应显示行号') expect(source.includes('previewLoading'), '切换文件时应提供独立加载状态') diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 9405842..e64cc66 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -63,6 +63,8 @@ export interface DatasetFile { id?: string name: string size?: string | number + record_count?: number + split?: 'train' | 'validation' | 'test' | null [k: string]: any } @@ -78,6 +80,7 @@ export interface DatasetItem { description?: string create_time?: string files?: DatasetFile[] + split_counts?: { train: number; validation: number; test: number } } export interface DatasetVersion { diff --git a/frontend/src/views/data-process/DataProcessDetailView.vue b/frontend/src/views/data-process/DataProcessDetailView.vue index b81a371..d881276 100644 --- a/frontend/src/views/data-process/DataProcessDetailView.vue +++ b/frontend/src/views/data-process/DataProcessDetailView.vue @@ -448,6 +448,33 @@ async function publishDataset() { } } +async function resyncPublishedDataset() { + if (!detail.value || !outputDatasetId.value || publishing.value) return + try { + await ElMessageBox.confirm( + '将按当前 8:1:1 配置重新生成训练、验证、测试三个切分文件,数据集 ID 保持不变。', + '重新同步数据切分?', + { type: 'warning', confirmButtonText: '重新同步', cancelButtonText: '取消' }, + ) + } catch { + return + } + + publishing.value = true + try { + const published = await publishDataProcess(taskId.value, { + ...publishForm, + dataset_name: outputDatasetName.value || `${detail.value.name}-数据集`, + split: configuredSplit(), + }) + ElMessage.success('训练集、验证集和测试集已重新同步') + const datasetId = published.dataset?.id || outputDatasetId.value + await router.push(`/dataset/${datasetId}/preview`) + } finally { + publishing.value = false + } +} + watch([currentPage, pageSize], () => void loadResults()) onMounted(loadPage) @@ -472,6 +499,13 @@ onBeforeUnmount(() => { {{ outputDatasetId ? '查看输出数据集' : '发布为数据集' }} + + 重新同步切分 +

{{ detail.description || '暂无任务描述' }}

@@ -717,7 +751,7 @@ onBeforeUnmount(() => { diff --git a/frontend/src/views/dataset/preview/DatasetSplitNavigator.vue b/frontend/src/views/dataset/preview/DatasetSplitNavigator.vue new file mode 100644 index 0000000..0a17a6d --- /dev/null +++ b/frontend/src/views/dataset/preview/DatasetSplitNavigator.vue @@ -0,0 +1,103 @@ + + + + +