From 0917206191c1394fd07a2f78568a49a3b9950708 Mon Sep 17 00:00:00 2001 From: caoxiaozhu Date: Mon, 13 Jul 2026 16:16:50 +0800 Subject: [PATCH 1/8] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=84=E7=90=86=E5=90=91=E5=AF=BC=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据集划分编辑器调整宽屏与窄屏布局,结构化预处理选项修正 flex 占满,非结构化智能预处理由开关改为复选卡片并补充可访问性标签。 --- .../create/DatasetSplitEditor.vue | 15 ++- .../create/StructuredOptionsPanel.vue | 1 + .../create/UnstructuredOptionsPanel.vue | 104 +++++++++++++----- 3 files changed, 90 insertions(+), 30 deletions(-) diff --git a/frontend/src/views/data-process/create/DatasetSplitEditor.vue b/frontend/src/views/data-process/create/DatasetSplitEditor.vue index d65d846..770402f 100644 --- a/frontend/src/views/data-process/create/DatasetSplitEditor.vue +++ b/frontend/src/views/data-process/create/DatasetSplitEditor.vue @@ -128,19 +128,19 @@ function ariaLabel(label: string) { } .dataset-split-row { - align-items: stretch; - flex-direction: column; + align-items: flex-start; } .dataset-split-config { display: grid; gap: 10px; + flex: 0 0 460px; } .dataset-split-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 16px; + gap: 12px; } .dataset-split-field { @@ -173,6 +173,15 @@ function ariaLabel(label: string) { } @media (max-width: 900px) { + .dataset-split-row { + flex-direction: column; + align-items: stretch; + } + + .dataset-split-config { + flex: auto; + } + .dataset-split-grid { grid-template-columns: minmax(0, 1fr); } diff --git a/frontend/src/views/data-process/create/StructuredOptionsPanel.vue b/frontend/src/views/data-process/create/StructuredOptionsPanel.vue index e08deb2..edc6029 100644 --- a/frontend/src/views/data-process/create/StructuredOptionsPanel.vue +++ b/frontend/src/views/data-process/create/StructuredOptionsPanel.vue @@ -191,6 +191,7 @@ function updatePreprocessOptions(value: Array) { } .preprocess-option { + display: flex; width: 100%; min-height: 64px; margin-right: 0; diff --git a/frontend/src/views/data-process/create/UnstructuredOptionsPanel.vue b/frontend/src/views/data-process/create/UnstructuredOptionsPanel.vue index d1676a7..c72a333 100644 --- a/frontend/src/views/data-process/create/UnstructuredOptionsPanel.vue +++ b/frontend/src/views/data-process/create/UnstructuredOptionsPanel.vue @@ -131,35 +131,28 @@ defineExpose({ revealValidation })

默认使用推荐策略,只需决定是否需要脱敏

-
-
-
- 智能预处理 - 自动完成内容清理、结构解析、短段合并、质量过滤、去重及上下文保留 -
- +
-
-
- 敏感信息脱敏 - 处理姓名、手机号、邮箱和证件号等信息 -
- + 智能预处理 + 自动清理、解析、去重及保留上下文 + + + +
+ + 敏感信息脱敏 + 处理姓名、手机号等隐私信息 + +
@@ -419,11 +412,59 @@ defineExpose({ revealValidation }) margin-top: 16px; } -.compact-option-list { - gap: 8px; +.preprocess-option-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + margin-top: 16px; +} - .generation-option-row { - min-height: 58px; +.preprocess-option { + display: flex; + width: 100%; + min-height: 64px; + margin-right: 0; + padding: 12px 14px; + box-sizing: border-box; + align-items: flex-start; + border: 1px solid #e2e5ec; + border-radius: 8px; + transition: border-color 0.18s ease, background-color 0.18s ease; + + &:hover { + border-color: #b7b2f7; + } + + &.is-checked { + background: #fafaff; + border-color: #8b82f4; + } + + :deep(.el-checkbox__input) { + margin-top: 3px; + } + + :deep(.el-checkbox__label) { + min-width: 0; + padding-left: 10px; + white-space: normal; + } +} + +.preprocess-option-copy { + display: grid; + gap: 4px; + + strong { + color: #344054; + font-size: 13px; + font-weight: 600; + } + + small { + color: #8a93a3; + font-size: 12px; + line-height: 1.5; } } @@ -600,5 +641,14 @@ defineExpose({ revealValidation }) align-items: center; flex-direction: row; } + + .advanced-protection-row { + align-items: flex-start; + flex-direction: column; + } + + .preprocess-option-grid { + grid-template-columns: minmax(0, 1fr); + } } -- 2.49.1 From c9ddc3b6527b74ef4fa02f15befc353fa1dcff0e Mon Sep 17 00:00:00 2001 From: caoxiaozhu Date: Mon, 13 Jul 2026 16:39:16 +0800 Subject: [PATCH 2/8] =?UTF-8?q?refactor:=20=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=90=91=E5=AF=BC=E7=94=9F=E6=88=90=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=B9=B3=E9=93=BA=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除生成选项面板的高级设置折叠抽屉,温度、最大输出长度、JSON 模式等配置直接平铺展示,简化非结构化与任务设置步骤的嵌套结构,列表新建按钮文案精简。 --- .../data-process/DataProcessListView.vue | 2 +- .../create/GenerationOptionsPanel.vue | 158 +++++----------- .../create/StructuredOptionsPanel.vue | 15 +- .../data-process/create/TaskSetupStep.vue | 21 ++- .../create/UnstructuredOptionsPanel.vue | 170 +++--------------- 5 files changed, 86 insertions(+), 280 deletions(-) diff --git a/frontend/src/views/data-process/DataProcessListView.vue b/frontend/src/views/data-process/DataProcessListView.vue index 7a4267d..03f23e0 100644 --- a/frontend/src/views/data-process/DataProcessListView.vue +++ b/frontend/src/views/data-process/DataProcessListView.vue @@ -92,7 +92,7 @@ function formatDateTime(value?: string) { :data="dataList" searchable :search-fields="['name']" - create-text="新建数据处理任务" + create-text="新建数据处理" create-to="/data-process/create" row-key="id" :page-size="10" diff --git a/frontend/src/views/data-process/create/GenerationOptionsPanel.vue b/frontend/src/views/data-process/create/GenerationOptionsPanel.vue index 144bb1b..35776dc 100644 --- a/frontend/src/views/data-process/create/GenerationOptionsPanel.vue +++ b/frontend/src/views/data-process/create/GenerationOptionsPanel.vue @@ -10,8 +10,6 @@ const props = defineProps<{ validationMessage?: string }>() -const advancedModelSettingsOpen = ref(false) - const emit = defineEmits<{ 'update:options': [value: GenerationControlOptions] }>() @@ -99,64 +97,49 @@ function sectionValidationMessage() { - - -
-
- - - -
- -
-
- 强制 JSON 格式输出 - 要求大模型返回纯 JSON 对象,有助于提高下游结构化提取的稳定性 -
- + + + +
+ +
+
+ 强制 JSON 格式输出 + 要求大模型返回纯 JSON 对象,有助于提高下游结构化提取的稳定性
+
-
- 语义丰富表达 - 使用大模型将问答表述得更自然、柔和 -
- -
+
每行生成数量 @@ -192,6 +180,7 @@ function updatePreprocessOptions(value: Array) { .preprocess-option { display: flex; + gap: 10px; width: 100%; min-height: 64px; margin-right: 0; diff --git a/frontend/src/views/data-process/create/TaskSetupStep.vue b/frontend/src/views/data-process/create/TaskSetupStep.vue index 62ec863..20a9b9a 100644 --- a/frontend/src/views/data-process/create/TaskSetupStep.vue +++ b/frontend/src/views/data-process/create/TaskSetupStep.vue @@ -1,6 +1,6 @@ + + + + diff --git a/frontend/src/views/data-process/create/StructuredOptionsPanel.vue b/frontend/src/views/data-process/create/StructuredOptionsPanel.vue index 9aed67d..6313d4d 100644 --- a/frontend/src/views/data-process/create/StructuredOptionsPanel.vue +++ b/frontend/src/views/data-process/create/StructuredOptionsPanel.vue @@ -1,5 +1,4 @@ @@ -305,7 +348,7 @@ onMounted(loadData) display: flex; align-items: center; justify-content: space-between; - max-width: 760px; + max-width: 1120px; margin: 0 auto; padding: 0 20px; } @@ -319,7 +362,7 @@ onMounted(loadData) .step-connector { flex: 1; height: 2px; - margin: 0 20px; + margin: 0 12px; background: #e2e8f0; transition: background-color 0.2s ease; } @@ -414,6 +457,12 @@ onMounted(loadData) margin-left: 6px; } +@media (max-width: 1100px) { + .step-description { + display: none; + } +} + @media (max-width: 760px) { .wizard-main { padding: 24px 20px; @@ -424,10 +473,10 @@ onMounted(loadData) } .step-connector { - margin: 0 10px; + margin: 0 8px; } - .step-description { + .step-text { display: none; } diff --git a/frontend/src/views/eval/create/DimensionFormFields.vue b/frontend/src/views/eval/create/DimensionFormFields.vue index 346f96b..eb06a23 100644 --- a/frontend/src/views/eval/create/DimensionFormFields.vue +++ b/frontend/src/views/eval/create/DimensionFormFields.vue @@ -21,19 +21,28 @@ export interface DimensionFormDraft { pass_threshold: number } -withDefaults( +const props = withDefaults( defineProps<{ evalModels: ModelItem[] showDescription?: boolean + showStatusSettings?: boolean + allowedTypes?: DimensionType[] }>(), { showDescription: true, + showStatusSettings: true, + allowedTypes: () => ['classification', 'metric', 'text_similarity'], }, ) const form = defineModel({ required: true }) +const SCORE_STEP = 0.5 -const typeOptions = Object.entries(DIMENSION_TYPE_MAP).map(([value, label]) => ({ value, label })) +const typeOptions = computed(() => + Object.entries(DIMENSION_TYPE_MAP) + .filter(([value]) => props.allowedTypes.includes(value as DimensionType)) + .map(([value, label]) => ({ value, label })), +) const currentMethods = computed(() => (form.value.type ? EVAL_METHODS[form.value.type] || [] : [])) /** @@ -65,6 +74,23 @@ watch( }, { flush: 'sync' }, ) + +/** 始终保持评分区间合法,并把通过阈值收敛到当前区间内。 */ +watch( + () => [form.value.type, form.value.score_min, form.value.score_max] as const, + ([type, scoreMin, scoreMax]) => { + if (type !== 'metric') return + if (scoreMax <= scoreMin) { + form.value.score_max = scoreMin + SCORE_STEP + return + } + form.value.pass_threshold = Math.min( + Math.max(form.value.pass_threshold, scoreMin), + scoreMax, + ) + }, + { flush: 'sync' }, +) - - - - - - + -- 2.49.1