fix(deduction): 修复扣分项编辑功能

- form对象添加itemName字段解决编辑时名称不显示
- 查询时过滤空字符串参数避免无数据问题
- 字段名deductionPoints改为deductionPoint与后端一致
This commit is contained in:
DevOps
2026-01-06 14:56:10 +08:00
parent c37b6d8f6f
commit 6385acd43b

View File

@@ -26,7 +26,7 @@
v-for="item in competitionList"
:key="item.id"
:label="item.competitionName"
:value="item.id"
:value="String(item.id)"
/>
</el-select>
</el-form-item>
@@ -43,7 +43,7 @@
v-for="item in projectList"
:key="item.id"
:label="item.projectName"
:value="item.id"
:value="String(item.id)"
/>
</el-select>
</el-form-item>
@@ -146,14 +146,14 @@
show-overflow-tooltip
/>
<el-table-column
prop="deductionPoints"
prop="deductionPoint"
label="扣分值(分)"
width="120"
align="center"
>
<template #default="{ row }">
<el-tag type="danger" effect="dark">
-{{ row.deductionPoints }}
-{{ row.deductionPoint }}
</el-tag>
</template>
</el-table-column>
@@ -225,7 +225,7 @@
v-for="item in competitionList"
:key="item.id"
:label="item.competitionName"
:value="item.id"
:value="String(item.id)"
/>
</el-select>
</el-form-item>
@@ -240,7 +240,7 @@
v-for="item in projectList"
:key="item.id"
:label="item.projectName"
:value="item.id"
:value="String(item.id)"
/>
</el-select>
</el-form-item>
@@ -251,9 +251,9 @@
maxlength="100"
/>
</el-form-item>
<el-form-item label="扣分值(分)" prop="deductionPoints">
<el-form-item label="扣分值(分)" prop="deductionPoint">
<el-input-number
v-model="form.deductionPoints"
v-model="form.deductionPoint"
:min="0.1"
:max="10"
:precision="1"
@@ -317,7 +317,7 @@
v-for="item in projectList.filter(p => p.id !== cloneForm.sourceProjectId)"
:key="item.id"
:label="item.projectName"
:value="item.id"
:value="String(item.id)"
/>
</el-select>
</el-form-item>
@@ -389,6 +389,7 @@ const queryParams = reactive({
size: 10,
competitionId: null,
projectId: null,
itemName: '',
})
// 表单数据
@@ -396,7 +397,8 @@ const form = reactive({
id: null,
competitionId: null,
projectId: null,
deductionPoints: 0.5,
itemName: '',
deductionPoint: 0.5,
sortOrder: 0,
description: ''
})
@@ -421,7 +423,7 @@ const rules = {
{ required: true, message: '请输入扣分项名称', trigger: 'blur' },
{ min: 2, max: 100, message: '长度在 2 到 100 个字符', trigger: 'blur' }
],
deductionPoints: [
deductionPoint: [
{ required: true, message: '请输入扣分值', trigger: 'blur' }
],
sortOrder: [
@@ -504,10 +506,17 @@ const fetchData = async () => {
loading.value = true
try {
// 过滤掉空字符串的参数
const params = {}
Object.keys(queryParams).forEach(key => {
if (queryParams[key] !== '' && queryParams[key] !== null && queryParams[key] !== undefined) {
params[key] = queryParams[key]
}
})
const res = await getDeductionList(
queryParams.current,
queryParams.size,
queryParams
params
)
// 根据axios响应拦截器的处理数据在 res.data.data 中
const data = res.data?.data || {}
@@ -535,7 +544,7 @@ const handleReset = () => {
size: 10,
competitionId: competitionId,
projectId: null,
itemName: ''
itemName: '',
})
if (competitionId) {
fetchData()
@@ -555,11 +564,22 @@ const handleAdd = () => {
}
// 编辑
const handleEdit = (row) => {
const handleEdit = async (row) => {
dialogTitle.value = '编辑扣分项'
Object.keys(form).forEach((key) => {
form[key] = row[key]
})
// Convert competitionId to string for el-select matching
if (form.competitionId) {
form.competitionId = String(form.competitionId)
}
if (form.projectId) {
form.projectId = String(form.projectId)
}
// Load project list for the competition first
if (form.competitionId) {
await loadProjectList(form.competitionId)
}
dialogVisible.value = true
}
@@ -670,7 +690,7 @@ const resetForm = () => {
competitionId: null,
projectId: null,
itemName: '',
deductionPoints: 0.5,
deductionPoint: 0.5,
sortOrder: 0,
description: ''
})