Bladeren bron

fix(problem-manage): 文案与弹窗内容对齐、修复详情标题闪现、统一成功码判断、弹窗关闭重置校验

yangyi 2 weken geleden
bovenliggende
commit
05de9b18ba
1 gewijzigde bestanden met toevoegingen van 32 en 19 verwijderingen
  1. 32 19
      src/view/admin/ProblemManageView.vue

+ 32 - 19
src/view/admin/ProblemManageView.vue

@@ -209,7 +209,7 @@ const handleSave = async () => {
       categoryIds: problemForm.categoryIds || []
     }
     const res = isEdit.value ? await api.edit1(data) : await api.add1(data)
-    if (res?.code === 200) {
+    if (res?.code === 0 || res?.code === 200) {
       ElMessage.success(isEdit.value ? '修改成功' : '新增成功')
       dialogVisible.value = false
       fetchData()
@@ -224,7 +224,7 @@ const handleDelete = (row: ProblemVo) => {
     .then(async () => {
       try {
         const res = await api.deleteByIds({ ids: [row.id!] })
-        if (res?.code === 200) {
+        if (res?.code === 0 || res?.code === 200) {
           ElMessage.success('删除成功')
           fetchData()
         }
@@ -244,7 +244,7 @@ const handleBatchDelete = () => {
       try {
         const ids = selectedRows.value.map((r) => r.id).filter((id): id is number => id !== undefined)
         const res = await api.deleteByIds({ ids })
-        if (res?.code === 200) {
+        if (res?.code === 0 || res?.code === 200) {
           ElMessage.success('删除成功')
           selectedRows.value = []
           fetchData()
@@ -267,9 +267,10 @@ const openDetail = (row: ProblemVo) => {
   const id = row.id
   if (id === undefined) return
   currentProblemId.value = id
+  detail.value = { title: row.title }
   detailTab.value = 'cases'
   detailVisible.value = true
-  loadDetail(id)
+  loadDetail(id).catch(() => {})
 }
 
 // 样例
@@ -306,10 +307,10 @@ const saveCase = async () => {
       sortOrder: caseForm.sortOrder
     }
     const res = caseForm.id ? await api.updateCase(data) : await api.addCase(currentProblemId.value!, data)
-    if (res?.code === 200) {
+    if (res?.code === 0 || res?.code === 200) {
       ElMessage.success('保存成功')
       caseDialogVisible.value = false
-      loadDetail(currentProblemId.value!)
+      loadDetail(currentProblemId.value!).catch(() => {})
     }
   } catch {
   }
@@ -321,9 +322,9 @@ const deleteCase = (row: ProblemCaseVo) => {
     .then(async () => {
       try {
         const res = await api.deleteCase({ id: row.id! })
-        if (res?.code === 200) {
+        if (res?.code === 0 || res?.code === 200) {
           ElMessage.success('删除成功')
-          loadDetail(currentProblemId.value!)
+          loadDetail(currentProblemId.value!).catch(() => {})
         }
       } catch {
       }
@@ -365,10 +366,10 @@ const saveTest = async () => {
       isHidden: testForm.isHidden as ProblemTestDto['isHidden']
     }
     const res = testForm.id ? await api.updateTest(data) : await api.addTest(currentProblemId.value!, data)
-    if (res?.code === 200) {
+    if (res?.code === 0 || res?.code === 200) {
       ElMessage.success('保存成功')
       testDialogVisible.value = false
-      loadDetail(currentProblemId.value!)
+      loadDetail(currentProblemId.value!).catch(() => {})
     }
   } catch {
   }
@@ -380,9 +381,9 @@ const deleteTest = (row: ProblemTestVo) => {
     .then(async () => {
       try {
         const res = await api.deleteTest({ id: row.id! })
-        if (res?.code === 200) {
+        if (res?.code === 0 || res?.code === 200) {
           ElMessage.success('删除成功')
-          loadDetail(currentProblemId.value!)
+          loadDetail(currentProblemId.value!).catch(() => {})
         }
       } catch {
       }
@@ -403,7 +404,7 @@ const toggleTestHidden = async (row: ProblemTestVo, val: number) => {
       isHidden: val as ProblemTestDto['isHidden']
     }
     const res = await api.updateTest(data)
-    if (res?.code === 200) {
+    if (res?.code === 0 || res?.code === 200) {
       ElMessage.success('更新成功')
     }
   } catch {
@@ -415,6 +416,18 @@ const handleSelectionChange = (rows: ProblemVo[]) => {
   selectedRows.value = rows
 }
 
+const handleDialogClosed = () => {
+  formRef.value?.resetFields()
+}
+
+const handleCaseDialogClosed = () => {
+  caseFormRef.value?.resetFields()
+}
+
+const handleTestDialogClosed = () => {
+  testFormRef.value?.resetFields()
+}
+
 onMounted(() => {
   loadCategories()
   fetchData()
@@ -491,7 +504,7 @@ onMounted(() => {
         <el-table-column label="操作" width="200" align="center" fixed="right">
           <template #default="{ row }">
             <el-button type="primary" link @click="openDetail(row)">
-              <el-icon><View /></el-icon>题目评测用例
+              <el-icon><View /></el-icon>样例与用例
             </el-button>
             <el-button type="primary" link @click="handleEdit(row)">
               <el-icon><Edit /></el-icon>编辑
@@ -517,7 +530,7 @@ onMounted(() => {
     </el-card>
 
     <!-- 新增/编辑题目 -->
-    <el-dialog v-model="dialogVisible" width="960px" draggable>
+    <el-dialog v-model="dialogVisible" width="960px" draggable @closed="handleDialogClosed">
       <template #header>
         <div class="dialog-header">{{ dialogTitle }}</div>
       </template>
@@ -575,9 +588,9 @@ onMounted(() => {
     </el-dialog>
 
     <!-- 详情弹窗(样例 + 评测用例) -->
-    <el-dialog v-model="detailVisible" :title="`题目详情 - ${detail.title || ''}`" width="900px" draggable>
+    <el-dialog v-model="detailVisible" :title="`样例与评测用例 - ${detail.title || ''}`" width="900px" draggable>
       <el-tabs v-model="detailTab">
-        <el-tab-pane label="测试样例" name="cases">
+        <el-tab-pane label="题目样例" name="cases">
           <div class="sub-toolbar">
             <el-button type="primary" size="small" @click="openCaseAdd">
               <el-icon class="el-icon--left"><Plus /></el-icon>新增样例
@@ -632,7 +645,7 @@ onMounted(() => {
     </el-dialog>
 
     <!-- 样例编辑 -->
-    <el-dialog v-model="caseDialogVisible" :title="caseForm.id ? '编辑样例' : '新增样例'" width="700px" draggable>
+    <el-dialog v-model="caseDialogVisible" :title="caseForm.id ? '编辑样例' : '新增样例'" width="700px" draggable @closed="handleCaseDialogClosed">
       <el-form ref="caseFormRef" :model="caseForm" :rules="caseRules" label-position="top">
         <el-form-item label="序号">
           <el-input-number v-model="caseForm.sortOrder" :min="1" />
@@ -656,7 +669,7 @@ onMounted(() => {
     </el-dialog>
 
     <!-- 评测用例编辑 -->
-    <el-dialog v-model="testDialogVisible" :title="testForm.id ? '编辑评测用例' : '新增评测用例'" width="560px" draggable>
+    <el-dialog v-model="testDialogVisible" :title="testForm.id ? '编辑评测用例' : '新增评测用例'" width="560px" draggable @closed="handleTestDialogClosed">
       <el-form ref="testFormRef" :model="testForm" :rules="testRules" label-position="top">
         <el-form-item label="序号">
           <el-input-number v-model="testForm.sortOrder" :min="1" />