refactor: 评测列表移除内嵌维度管理

EvalView 移除维度列表加载/删除与相关 Tab 内容,聚焦评测任务展示;维度表单与规则步骤同步微调,回归脚本适配。
This commit is contained in:
caoxiaozhu
2026-07-13 11:47:46 +08:00
parent 5c469a1778
commit 91a7c84d7c
4 changed files with 31 additions and 76 deletions

View File

@@ -11,6 +11,7 @@ const [
createSource,
taskStepSource,
ruleStepSource,
dimensionFieldsSource,
listSource,
routerSource,
apiSource,
@@ -18,6 +19,7 @@ const [
readFile(path.join(evalViewDir, 'EvalCreateView.vue'), 'utf8'),
readFile(path.join(evalViewDir, 'create/EvalTaskSetupStep.vue'), 'utf8'),
readFile(path.join(evalViewDir, 'create/EvalRuleSetupStep.vue'), 'utf8'),
readFile(path.join(evalViewDir, 'create/DimensionFormFields.vue'), 'utf8'),
readFile(path.join(evalViewDir, 'EvalView.vue'), 'utf8'),
readFile(path.join(sourceRoot, 'router/index.ts'), 'utf8'),
readFile(path.join(sourceRoot, 'api/modules/eval.ts'), 'utf8'),
@@ -60,11 +62,9 @@ assert.match(
'编辑维度路由必须继续复用 DimensionCreateView.vue',
)
const dimensionTabStart = listSource.indexOf('<!-- 评测维度 -->')
assert.notEqual(dimensionTabStart, -1, '评测列表缺少维度标签页')
const dimensionTabSource = listSource.slice(dimensionTabStart)
assert.doesNotMatch(dimensionTabSource, /create-text=["']添加维度["']/, '维度标签页不应保留“添加维度”按钮')
assert.doesNotMatch(dimensionTabSource, /@create=["']handleCreateClick["']/, '维度标签页不应保留独立创建事件')
assert.doesNotMatch(listSource, /评测维度/, '模型评测页不应保留评测维度页签及内容')
assert.doesNotMatch(listSource, /activeTab\s*===\s*['"]dimensions['"]/, '模型评测页不应保留评测维度状态分支')
assert.doesNotMatch(listSource, /getDimensionList|deleteDimension|dimensionList/, '模型评测页不应继续加载维度列表数据')
assert.match(
apiSource,
@@ -79,6 +79,16 @@ assert.match(
/任务配置[\s\S]*?评测规则/,
'评测创建向导必须按“任务配置、评测规则”定义两个步骤',
)
assert.match(
ruleStepSource,
/:show-description=["']false["']/,
'新建评测任务第二步不应显示重复的规则描述输入框',
)
assert.match(
dimensionFieldsSource,
/v-if=["']showDescription["'][^>]*label=["']描述["']/,
'共享维度字段必须支持按场景隐藏描述输入框',
)
assert.match(createSource, /currentStep\s*=\s*ref\(0\)/, '评测创建向导缺少当前步骤状态')
assert.match(createSource, /class=["']custom-wizard-steps["']/, '评测向导未复用数据处理的自定义步骤条结构')
assert.match(createSource, /class=["']step-connector["']/, '评测向导步骤条缺少连接线')

View File

@@ -6,19 +6,14 @@ import DataTablePage from '@/components/DataTablePage.vue'
import {
getEvalList,
deleteEval,
getDimensionList,
deleteDimension,
} from '@/api/modules/eval'
import { DIMENSION_TYPE_MAP } from '@/constants'
import type { EvalTask, Dimension } from '@/types'
import type { EvalTask } from '@/types'
const router = useRouter()
const activeTab = ref('tasks')
const evalLoading = ref(false)
const evalList = ref<EvalTask[]>([])
const dimLoading = ref(false)
const dimensionList = ref<Dimension[]>([])
// 排行榜(原项目为 mock 数据)
const leaderboard = ref([
@@ -38,17 +33,6 @@ async function loadEvalList() {
}
}
async function loadDimensions() {
dimLoading.value = true
try {
dimensionList.value = (await getDimensionList()) || []
} catch {
dimensionList.value = []
} finally {
dimLoading.value = false
}
}
async function handleDeleteEval(row: any) {
await ElMessageBox.confirm('确定要删除这个评测任务吗?', '确认删除', { type: 'warning' })
await deleteEval(row.id)
@@ -56,17 +40,6 @@ async function handleDeleteEval(row: any) {
loadEvalList()
}
async function handleDeleteDimension(row: any) {
await ElMessageBox.confirm('确定要删除这个评测维度吗?', '确认删除', { type: 'warning' })
await deleteDimension(row.id)
ElMessage.success('删除成功')
loadDimensions()
}
function editDimension(row: any) {
router.push(`/model-eval/dimension/${row.id}/edit`)
}
function handleCreateClick() {
router.push('/model-eval/create')
}
@@ -81,7 +54,6 @@ function handleViewDetail(row: any) {
onMounted(() => {
loadEvalList()
loadDimensions()
})
</script>
@@ -103,7 +75,6 @@ onMounted(() => {
<div class="capsule-tabs">
<button class="capsule-tab-item" :class="{ active: isActiveTab('tasks') }" @click="activeTab = 'tasks'">评测任务</button>
<button class="capsule-tab-item" :class="{ active: isActiveTab('leaderboard') }" @click="activeTab = 'leaderboard'">排行榜</button>
<button class="capsule-tab-item" :class="{ active: isActiveTab('dimensions') }" @click="activeTab = 'dimensions'">评测维度</button>
</div>
</template>
<template #columns>
@@ -136,7 +107,6 @@ onMounted(() => {
<div class="capsule-tabs">
<button class="capsule-tab-item" :class="{ active: isActiveTab('tasks') }" @click="activeTab = 'tasks'">评测任务</button>
<button class="capsule-tab-item" :class="{ active: isActiveTab('leaderboard') }" @click="activeTab = 'leaderboard'">排行榜</button>
<button class="capsule-tab-item" :class="{ active: isActiveTab('dimensions') }" @click="activeTab = 'dimensions'">评测维度</button>
</div>
</template>
<template #columns>
@@ -146,43 +116,6 @@ onMounted(() => {
</template>
</DataTablePage>
<!-- 评测维度 -->
<DataTablePage
v-if="activeTab === 'dimensions'"
title=""
:data="dimensionList"
:loading="dimLoading"
:delete-fn="handleDeleteDimension"
row-key="id"
@refresh="loadDimensions"
>
<template #title>
<div class="capsule-tabs">
<button class="capsule-tab-item" :class="{ active: isActiveTab('tasks') }" @click="activeTab = 'tasks'">评测任务</button>
<button class="capsule-tab-item" :class="{ active: isActiveTab('leaderboard') }" @click="activeTab = 'leaderboard'">排行榜</button>
<button class="capsule-tab-item" :class="{ active: isActiveTab('dimensions') }" @click="activeTab = 'dimensions'">评测维度</button>
</div>
</template>
<template #columns>
<el-table-column label="维度名称" prop="name" align="center" />
<el-table-column label="类型" align="center" width="160">
<template #default="{ row }">
{{ DIMENSION_TYPE_MAP[row.type] || row.type }}
</template>
</el-table-column>
<el-table-column label="描述" prop="description" show-overflow-tooltip align="center" />
<el-table-column label="状态" align="center" width="100">
<template #default="{ row }">
<el-tag v-if="row.is_active" type="success" size="small">启用</el-tag>
<el-tag v-else type="info" size="small">禁用</el-tag>
</template>
</el-table-column>
</template>
<template #actions="{ row }">
<el-button link type="primary" size="small" @click="editDimension(row)">编辑</el-button>
<el-button link type="danger" size="small" @click="handleDeleteDimension(row)">删除</el-button>
</template>
</DataTablePage>
</div>
</template>

View File

@@ -21,7 +21,15 @@ export interface DimensionFormDraft {
pass_threshold: number
}
defineProps<{ evalModels: ModelItem[] }>()
withDefaults(
defineProps<{
evalModels: ModelItem[]
showDescription?: boolean
}>(),
{
showDescription: true,
},
)
const form = defineModel<DimensionFormDraft>({ required: true })
@@ -66,7 +74,7 @@ watch(
</el-select>
</el-form-item>
<el-form-item label="描述">
<el-form-item v-if="showDescription" label="描述">
<el-input v-model="form.description" type="textarea" :rows="2" maxlength="200" show-word-limit />
</el-form-item>

View File

@@ -63,7 +63,11 @@ defineExpose({ validate })
:disabled="disabled"
scroll-to-error
>
<DimensionFormFields v-model="form.newDimension" :eval-models="evalModels" />
<DimensionFormFields
v-model="form.newDimension"
:eval-models="evalModels"
:show-description="false"
/>
</el-form>
</div>
</template>