解决所有bug问题
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user