From 3de49f732b1f718cfb911fdb1515d809dc8c2b7f Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Tue, 15 Sep 2026 16:58:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(studentMsg):=20=E6=8D=A2=E7=8F=AD=E7=BA=A7?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=B9=E9=87=8F=20UI=20=E4=B8=8E=E4=B8=B2?= =?UTF-8?q?=E8=A1=8C=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 弹窗改为学生列表+共用目标表单,串行调用现有接口并汇总失败明细。 Co-authored-by: Cursor --- .../xg/xsjcxx/studentMsg/studentMsg/index.vue | 174 +++++++++++------- 1 file changed, 106 insertions(+), 68 deletions(-) diff --git a/web/src/views/xg/xsjcxx/studentMsg/studentMsg/index.vue b/web/src/views/xg/xsjcxx/studentMsg/studentMsg/index.vue index b9cdbae5..1ac6609f 100644 --- a/web/src/views/xg/xsjcxx/studentMsg/studentMsg/index.vue +++ b/web/src/views/xg/xsjcxx/studentMsg/studentMsg/index.vue @@ -926,41 +926,17 @@ - -
-
-
- 学号: - {{ changeClassForm.studentNo }} -
-
- 姓名: - {{ changeClassForm.studentName }} -
-
- 性别: - {{ changeClassForm.gender === '0' ? '男' : changeClassForm.gender === '1' ? '女' : '未知' }} -
-
-
-
- 原学院: - {{ changeClassForm.originalCollegeName }} -
-
- 原专业: - {{ changeClassForm.originalMajorName }} -
-
- 原班级: - {{ changeClassForm.originalClassName }} -
-
-
+ + + + + + +
@@ -1026,10 +1002,20 @@
+
+ +
    +
  • {{ item.studentNo }} {{ item.studentName }}:{{ item.reason }}
  • +
+
+
@@ -3373,7 +3359,7 @@ const openChangeClassModal = async () => { studentName: s.name, gender: s.gender, originalCollegeId: s.collegeId, - originalCollegeName: s.collegeName, + originalCollegeName: (s as any).collegeName || (s as any).colegeName || '', originalMajorId: s.majorId, originalMajorName: s.majorName, originalClassId: s.classId, @@ -3474,56 +3460,108 @@ const handleChangeClassMajorChange = async (majorId: string) => { } }; -/** 提交换班级申请 */ +/** 提交换班级申请(支持批量串行) */ const submitChangeClass = async () => { const formRef = changeClassFormRef.value; if (!formRef) return; await formRef.validate(async (valid: boolean) => { - if (valid) { - try { - // 检查是否选择了不同的班级 - if (changeClassForm.newClassId === changeClassForm.originalClassId) { - ElMessage.warning('请选择不同的班级进行换班'); - return; + if (!valid) return; + if (!changeClassStudents.value.length) { + ElMessage.warning('没有待换班级的学生'); + return; + } + + const newCollegeName = collegeOptions.value.find((c) => c.id === changeClassForm.newCollegeId)?.label || ''; + const newMajorName = majorOptions.value.find((m) => m.id === changeClassForm.newMajorId)?.label || ''; + const newClassName = classOptions.value.find((c) => c.id === changeClassForm.newClassId)?.label || ''; + const changeTime = proxy?.parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}'); + + changeClassSubmitting.value = true; + changeClassFailList.value = []; + changeClassProgress.value = { current: 0, total: changeClassStudents.value.length }; + + let successCount = 0; + + try { + for (const student of changeClassStudents.value) { + changeClassProgress.value.current += 1; + + if (student.originalClassId === undefined || student.originalClassId === null || student.originalClassId === '') { + changeClassFailList.value.push({ + studentNo: student.studentNo, + studentName: student.studentName, + reason: '学生信息不完整' + }); + continue; + } + + if (String(student.originalClassId) === String(changeClassForm.newClassId)) { + changeClassFailList.value.push({ + studentNo: student.studentNo, + studentName: student.studentName, + reason: '已在目标班级' + }); + continue; } const submitData = { - studentId: changeClassForm.studentId, - studentNo: changeClassForm.studentNo, - studentName: changeClassForm.studentName, - originalCollegeId: changeClassForm.originalCollegeId, - originalCollegeName: changeClassForm.originalCollegeName, - originalMajorId: changeClassForm.originalMajorId, - originalMajorName: changeClassForm.originalMajorName, - originalClassId: changeClassForm.originalClassId, - originalClassCode: '', // 可以根据需要获取 - originalClassName: changeClassForm.originalClassName, + studentId: student.studentId, + studentNo: student.studentNo, + studentName: student.studentName, + originalCollegeId: student.originalCollegeId, + originalCollegeName: student.originalCollegeName, + originalMajorId: student.originalMajorId, + originalMajorName: student.originalMajorName, + originalClassId: student.originalClassId, + originalClassCode: '', + originalClassName: student.originalClassName, newCollegeId: changeClassForm.newCollegeId, - newCollegeName: collegeOptions.value.find((c) => c.id === changeClassForm.newCollegeId)?.label || '', + newCollegeName, newMajorId: changeClassForm.newMajorId, - newMajorName: majorOptions.value.find((m) => m.id === changeClassForm.newMajorId)?.label || '', + newMajorName, newClassId: changeClassForm.newClassId, - newClassName: classOptions.value.find((c) => c.id === changeClassForm.newClassId)?.label || '', + newClassName, changeReason: changeClassForm.changeReason, - changeType: '1', // 主动申请 - changeTime: proxy?.parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}'), + changeType: '1', + changeTime, effectiveTime: changeClassForm.effectiveTime, - status: '0' // 未处理状态 + status: '0' }; - const res = await service.post('/studentMsg/studentClassChange', submitData); - if (res && res.code === 200) { - ElMessage.success('换班级申请提交成功'); - changeClassDialog.visible = false; - await getList(); // 刷新列表 - } else { - ElMessage.error(res?.msg || '提交失败'); + try { + const res = await service.post('/studentMsg/studentClassChange', submitData); + if (res && res.code === 200) { + successCount += 1; + } else { + changeClassFailList.value.push({ + studentNo: student.studentNo, + studentName: student.studentName, + reason: res?.msg || '提交失败' + }); + } + } catch (error: any) { + console.error('提交换班级申请失败:', error); + changeClassFailList.value.push({ + studentNo: student.studentNo, + studentName: student.studentName, + reason: error?.message || '提交失败,请重试' + }); } - } catch (error) { - console.error('提交换班级申请失败:', error); - ElMessage.error('提交失败,请重试'); } + + if (changeClassFailList.value.length === 0) { + ElMessage.success(changeClassStudents.value.length === 1 ? '换班级申请提交成功' : `批量换班级成功(${successCount} 人)`); + changeClassDialog.visible = false; + await getList(); + } else if (successCount > 0) { + ElMessage.warning(`成功 ${successCount} 人,失败 ${changeClassFailList.value.length} 人`); + await getList(); + } else { + ElMessage.error('全部提交失败,请查看失败明细'); + } + } finally { + changeClassSubmitting.value = false; } }); };