refactor: 简化评测创建向导规则来源
移除已有维度/基线两种规则来源,评测创建仅保留新建维度流程并自动生成维度名称;维度名称字段回归独立创建页,表单校验改为返回精确布尔值并启用 scroll-to-error。
This commit is contained in:
@@ -22,7 +22,7 @@ const editId = computed(() => route.params.id as string | undefined)
|
|||||||
|
|
||||||
const evalModels = ref<ModelItem[]>([])
|
const evalModels = ref<ModelItem[]>([])
|
||||||
|
|
||||||
const form = reactive<DimensionFormDraft>({
|
const form = reactive<DimensionFormDraft & { name: string }>({
|
||||||
name: '',
|
name: '',
|
||||||
type: '',
|
type: '',
|
||||||
description: '',
|
description: '',
|
||||||
@@ -140,6 +140,9 @@ onMounted(() => {
|
|||||||
<template>
|
<template>
|
||||||
<PageCard :title="isEdit ? '编辑评测维度' : '添加评测维度'">
|
<PageCard :title="isEdit ? '编辑评测维度' : '添加评测维度'">
|
||||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="130px" style="max-width: 760px">
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="130px" style="max-width: 760px">
|
||||||
|
<el-form-item label="维度名称" prop="name">
|
||||||
|
<el-input v-model="form.name" placeholder="请输入维度名称" maxlength="50" show-word-limit />
|
||||||
|
</el-form-item>
|
||||||
<DimensionFormFields v-model="form" :eval-models="evalModels" />
|
<DimensionFormFields v-model="form" :eval-models="evalModels" />
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
|||||||
@@ -36,10 +36,9 @@ const taskForm = ref<EvalTaskSetupDraft>({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const ruleForm = ref<EvalRuleSetupDraft>({
|
const ruleForm = ref<EvalRuleSetupDraft>({
|
||||||
ruleMode: 'existing',
|
ruleMode: 'new',
|
||||||
dimension_id: '',
|
dimension_id: '',
|
||||||
newDimension: {
|
newDimension: {
|
||||||
name: '',
|
|
||||||
type: '',
|
type: '',
|
||||||
description: '',
|
description: '',
|
||||||
eval_model: '',
|
eval_model: '',
|
||||||
@@ -95,7 +94,7 @@ async function loadData() {
|
|||||||
function buildDimensionPayload() {
|
function buildDimensionPayload() {
|
||||||
const draft = ruleForm.value.newDimension
|
const draft = ruleForm.value.newDimension
|
||||||
const payload: Partial<Dimension> = {
|
const payload: Partial<Dimension> = {
|
||||||
name: draft.name,
|
name: `Custom_Dim_${Date.now()}`,
|
||||||
type: draft.type,
|
type: draft.type,
|
||||||
description: draft.description,
|
description: draft.description,
|
||||||
eval_model: draft.type === 'text_similarity' ? undefined : draft.eval_model,
|
eval_model: draft.type === 'text_similarity' ? undefined : draft.eval_model,
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { DIMENSION_TYPE_MAP } from '@/constants'
|
|||||||
import type { DimensionType, ModelItem } from '@/types'
|
import type { DimensionType, ModelItem } from '@/types'
|
||||||
|
|
||||||
export interface DimensionFormDraft {
|
export interface DimensionFormDraft {
|
||||||
name: string
|
|
||||||
type: DimensionType | ''
|
type: DimensionType | ''
|
||||||
description: string
|
description: string
|
||||||
eval_model: string
|
eval_model: string
|
||||||
@@ -61,10 +60,6 @@ watch(
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-form-item label="维度名称" prop="name">
|
|
||||||
<el-input v-model="form.name" placeholder="请输入维度名称" maxlength="50" show-word-limit />
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="指标类型" prop="type">
|
<el-form-item label="指标类型" prop="type">
|
||||||
<el-select v-model="form.type" placeholder="请选择指标类型" style="width: 100%">
|
<el-select v-model="form.type" placeholder="请选择指标类型" style="width: 100%">
|
||||||
<el-option v-for="option in typeOptions" :key="option.value" :label="option.label" :value="option.value" />
|
<el-option v-for="option in typeOptions" :key="option.value" :label="option.label" :value="option.value" />
|
||||||
|
|||||||
@@ -28,10 +28,6 @@ const existingRules: FormRules = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const dimensionRules: FormRules<DimensionFormDraft> = {
|
const dimensionRules: FormRules<DimensionFormDraft> = {
|
||||||
name: [
|
|
||||||
{ required: true, message: '请输入维度名称', trigger: 'blur' },
|
|
||||||
{ max: 50, message: '维度名称不超过 50 个字符', trigger: 'blur' },
|
|
||||||
],
|
|
||||||
type: [{ required: true, message: '请选择指标类型', trigger: 'change' }],
|
type: [{ required: true, message: '请选择指标类型', trigger: 'change' }],
|
||||||
eval_model: [{ required: true, message: '请选择大模型', trigger: 'change' }],
|
eval_model: [{ required: true, message: '请选择大模型', trigger: 'change' }],
|
||||||
eval_method: [{ required: true, message: '请选择评估方式', trigger: 'change' }],
|
eval_method: [{ required: true, message: '请选择评估方式', trigger: 'change' }],
|
||||||
@@ -43,12 +39,11 @@ const selectedDimension = computed(() =>
|
|||||||
)
|
)
|
||||||
|
|
||||||
async function validate() {
|
async function validate() {
|
||||||
if (form.value.ruleMode === 'baseline') return true
|
const target = newFormRef.value
|
||||||
const target = form.value.ruleMode === 'existing' ? existingFormRef.value : newFormRef.value
|
|
||||||
if (!target) return false
|
if (!target) return false
|
||||||
try {
|
try {
|
||||||
await target.validate()
|
const valid = await target.validate()
|
||||||
return true
|
return !!valid
|
||||||
} catch {
|
} catch {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -59,91 +54,22 @@ defineExpose({ validate })
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="rule-step">
|
<div class="rule-step">
|
||||||
<div class="rule-mode-label">评测规则来源</div>
|
|
||||||
<el-radio-group v-model="form.ruleMode" :disabled="disabled" class="rule-mode-group">
|
|
||||||
<el-radio-button value="existing">选择已有维度</el-radio-button>
|
|
||||||
<el-radio-button value="new">新建评测维度</el-radio-button>
|
|
||||||
<el-radio-button value="baseline">系统基线规则</el-radio-button>
|
|
||||||
</el-radio-group>
|
|
||||||
|
|
||||||
<el-form
|
<el-form
|
||||||
v-if="form.ruleMode === 'existing'"
|
|
||||||
ref="existingFormRef"
|
|
||||||
:model="form"
|
|
||||||
:rules="existingRules"
|
|
||||||
label-width="120px"
|
|
||||||
class="step-form"
|
|
||||||
:disabled="disabled"
|
|
||||||
>
|
|
||||||
<el-form-item label="评测维度" prop="dimension_id">
|
|
||||||
<el-select
|
|
||||||
v-model="form.dimension_id"
|
|
||||||
placeholder="请选择评测维度"
|
|
||||||
filterable
|
|
||||||
style="width: 100%"
|
|
||||||
:loading="loading"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dimension in dimensions"
|
|
||||||
:key="dimension.id"
|
|
||||||
:label="dimension.name"
|
|
||||||
:value="dimension.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item v-if="selectedDimension" label="维度详情">
|
|
||||||
<el-descriptions :column="1" border size="small" style="width: 100%">
|
|
||||||
<el-descriptions-item label="指标类型">{{ selectedDimension.type || '-' }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="评估模型">{{ selectedDimension.eval_model || '-' }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="评估方法">
|
|
||||||
{{
|
|
||||||
Array.isArray(selectedDimension.eval_method)
|
|
||||||
? selectedDimension.eval_method.join('、')
|
|
||||||
: selectedDimension.eval_method || '-'
|
|
||||||
}}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item v-if="selectedDimension.description" label="说明">
|
|
||||||
{{ selectedDimension.description }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-form
|
|
||||||
v-else-if="form.ruleMode === 'new'"
|
|
||||||
ref="newFormRef"
|
ref="newFormRef"
|
||||||
:model="form.newDimension"
|
:model="form.newDimension"
|
||||||
:rules="dimensionRules"
|
:rules="dimensionRules"
|
||||||
label-width="130px"
|
label-width="130px"
|
||||||
class="step-form step-form-wide"
|
class="step-form step-form-wide"
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
|
scroll-to-error
|
||||||
>
|
>
|
||||||
<DimensionFormFields v-model="form.newDimension" :eval-models="evalModels" />
|
<DimensionFormFields v-model="form.newDimension" :eval-models="evalModels" />
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-alert
|
|
||||||
v-else
|
|
||||||
title="系统将使用内置基线规则进行评测,无需额外创建或选择评测维度。"
|
|
||||||
type="info"
|
|
||||||
:closable="false"
|
|
||||||
show-icon
|
|
||||||
class="baseline-alert"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.rule-mode-label {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
color: #606266;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rule-mode-group {
|
|
||||||
margin-bottom: 28px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.step-form {
|
.step-form {
|
||||||
max-width: 760px;
|
max-width: 760px;
|
||||||
@@ -153,7 +79,5 @@ defineExpose({ validate })
|
|||||||
max-width: 920px;
|
max-width: 920px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.baseline-alert {
|
|
||||||
max-width: 760px;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ watch(
|
|||||||
async function validate() {
|
async function validate() {
|
||||||
if (!formRef.value) return false
|
if (!formRef.value) return false
|
||||||
try {
|
try {
|
||||||
await formRef.value.validate()
|
const valid = await formRef.value.validate()
|
||||||
return true
|
return !!valid
|
||||||
} catch {
|
} catch {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,7 @@ defineExpose({ validate })
|
|||||||
label-width="120px"
|
label-width="120px"
|
||||||
class="step-form"
|
class="step-form"
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
|
scroll-to-error
|
||||||
>
|
>
|
||||||
<el-form-item label="任务名称" prop="eval_task_name">
|
<el-form-item label="任务名称" prop="eval_task_name">
|
||||||
<el-input v-model="form.eval_task_name" placeholder="请输入任务名称" maxlength="50" show-word-limit />
|
<el-input v-model="form.eval_task_name" placeholder="请输入任务名称" maxlength="50" show-word-limit />
|
||||||
|
|||||||
Reference in New Issue
Block a user