解决所有bug问题

This commit is contained in:
RISE
2026-02-09 20:03:33 +08:00
parent 707545f51e
commit 2e2c257743
22 changed files with 3405 additions and 44 deletions

View File

@@ -10,7 +10,8 @@
:model="form"
:rules="dataRules"
label-width="120px"
v-loading="loading">
v-loading="loading"
:key="form.turnoverType">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="学年" prop="schoolYear">
@@ -47,7 +48,7 @@
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-col :span="12" class="mb20" v-if="!isDropoutType">
<el-form-item label="原班级" prop="oldClassCode">
<el-select
v-model="form.oldClassCode"
@@ -66,7 +67,7 @@
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-col :span="12" class="mb20" v-if="!isDropoutType">
<el-form-item label="现班级" prop="newClassCode">
<el-select
v-model="form.newClassCode"
@@ -90,7 +91,8 @@
v-model="form.turnoverType"
placeholder="请选择异动类型"
clearable
style="width: 100%">
style="width: 100%"
@change="handleTurnoverTypeChange">
<el-option
v-for="item in turnoverTypeList"
:key="item.value"
@@ -299,30 +301,52 @@ const selectedStudentsText = computed(() => {
return `已选择 ${form.selectedStudents.length} 名学生`
})
// 定义校验规则
const dataRules = {
schoolYear: [
{ required: true, message: '请选择学年', trigger: 'change' }
],
schoolTerm: [
{ required: true, message: '请选择学期', trigger: 'change' }
],
oldClassCode: [
{ required: true, message: '请选择原班级', trigger: 'change' }
],
newClassCode: [
{ required: true, message: '请选择现班级', trigger: 'change' }
],
turnoverType: [
{ required: true, message: '请选择异动类型', trigger: 'change' }
],
turnoverDate: [
{ required: true, message: '请选择异动时间', trigger: 'change' }
],
selectedStudents: [
{ required: true, message: '请至少选择一个学生', trigger: 'change', type: 'array', min: 1 }
]
}
// 判断是否为退学类型
const isDropoutType = computed(() => {
if (!form.turnoverType) return false
// 查找异动类型字典中 label 包含"退学"的项
const dropoutItem = turnoverTypeList.value.find((item: any) => {
const label = item.label || item.dictLabel || item.name || ''
return label.includes('退学')
})
if (dropoutItem) {
return dropoutItem.value === form.turnoverType || dropoutItem.dictValue === form.turnoverType || dropoutItem.code === form.turnoverType
}
return false
})
// 定义校验规则(动态)
const dataRules = computed(() => {
const rules: any = {
schoolYear: [
{ required: true, message: '请选择学年', trigger: 'change' }
],
schoolTerm: [
{ required: true, message: '请选择学期', trigger: 'change' }
],
turnoverType: [
{ required: true, message: '请选择异动类型', trigger: 'change' }
],
turnoverDate: [
{ required: true, message: '请选择异动时间', trigger: 'change' }
],
selectedStudents: [
{ required: true, message: '请至少选择一个学生', trigger: 'change', type: 'array', min: 1 }
]
}
// 如果不是退学类型,原班级和现班级为必填
if (!isDropoutType.value) {
rules.oldClassCode = [
{ required: true, message: '请选择原班级', trigger: 'change' }
]
rules.newClassCode = [
{ required: true, message: '请选择现班级', trigger: 'change' }
]
}
return rules
})
// 原班级变化时,更新学生搜索条件
const handleOldClassChange = () => {
@@ -331,14 +355,30 @@ const handleOldClassChange = () => {
form.selectedStudents = []
}
// 异动类型变化时处理
const handleTurnoverTypeChange = () => {
// 如果切换为退学类型,清空原班级和现班级
if (isDropoutType.value) {
form.oldClassCode = ''
form.newClassCode = ''
// 清空已选学生(因为退学不需要原班级,学生选择逻辑会受影响)
form.selectedStudents = []
}
// 重新验证表单
nextTick(() => {
dataFormRef.value?.clearValidate(['oldClassCode', 'newClassCode'])
})
}
// 打开学生选择弹窗
const openStudentDialog = () => {
if (!form.oldClassCode) {
// 如果是退学类型,不需要原班级
if (!isDropoutType.value && !form.oldClassCode) {
useMessage().warning('请先选择原班级')
return
}
studentDialogVisible.value = true
studentSearchForm.classCode = form.oldClassCode
studentSearchForm.classCode = form.oldClassCode || ''
studentSearchForm.classNo = ''
studentSearchForm.stuNo = ''
studentSearchForm.realName = ''
@@ -354,10 +394,13 @@ const handleStudentSearch = async () => {
const params: any = {
current: studentPagination.currentPage,
size: studentPagination.pageSize,
classCode: studentSearchForm.classCode || undefined,
stuNo: studentSearchForm.stuNo || undefined,
realName: studentSearchForm.realName || undefined
}
// 如果不是退学类型且有原班级,才添加 classCode 条件
if (!isDropoutType.value && studentSearchForm.classCode) {
params.classCode = studentSearchForm.classCode
}
const res = await getStudentList(params)
if (res.data && res.data.records) {
studentTableData.value = res.data.records
@@ -494,8 +537,6 @@ const onSubmit = async () => {
const submitData: any = {
schoolYear: form.schoolYear,
schoolTerm: form.schoolTerm,
oldClassCode: form.oldClassCode,
newClassCode: form.newClassCode,
turnoverType: form.turnoverType,
turnYear: form.turnYear || '',
turnoverDate: form.turnoverDate,
@@ -506,6 +547,12 @@ const onSubmit = async () => {
}))
}
// 如果不是退学类型,才添加原班级和现班级
if (!isDropoutType.value) {
submitData.oldClassCode = form.oldClassCode
submitData.newClassCode = form.newClassCode
}
// 编辑时需要包含id和单个学生信息
if (operType.value === 'edit') {
submitData.id = form.id