|
|
@@ -23,6 +23,11 @@
|
|
|
<ie-select v-model="selectedExamType" :options="examTypeList" label-key="dictLabel" value-key="dictValue" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
+ <el-col :span="12" prop="examMajor" v-if="selectedExamType === 'VHS'">
|
|
|
+ <el-form-item label="专业类别" prop="examMajor">
|
|
|
+ <ie-select v-model="selectedExamMajor" :options="examMajorList" label-key="dictLabel" value-key="dictValue" placeholder="请选择专业类别" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="注册学校" prop="schoolId">
|
|
|
@@ -119,9 +124,10 @@ import IeSelect from '@/components/IeSelect/index.vue';
|
|
|
import IeUniversitySelect from '@/components/IeUniversitySelect/index.vue';
|
|
|
import DirectionDialog from './DirectionDialog.vue';
|
|
|
import { updateCardUser, getUserByCardId } from '@/api/dz/cards';
|
|
|
+import { listAllSubject } from '@/api/dz/subject';
|
|
|
import { getCurrentInstance, nextTick, watch, watchEffect } from 'vue';
|
|
|
import draggable from 'vuedraggable';
|
|
|
-import { Rank } from '@element-plus/icons-vue';
|
|
|
+import { Rank, Close } from '@element-plus/icons-vue';
|
|
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
|
|
|
@@ -132,6 +138,10 @@ const form = ref({
|
|
|
directionStudy: []
|
|
|
})
|
|
|
|
|
|
+// 专业类别相关
|
|
|
+const examMajorList = ref([]);
|
|
|
+const selectedExamMajor = ref(null);
|
|
|
+
|
|
|
const {
|
|
|
reset,
|
|
|
area,
|
|
|
@@ -155,8 +165,56 @@ watchEffect(() => {
|
|
|
form.value.classId = selectedClass.value;
|
|
|
form.value.campusSchoolId = selectedCampus.value;
|
|
|
form.value.campusClassId = selectedCampusClass.value;
|
|
|
+ form.value.examMajor = selectedExamMajor.value;
|
|
|
+ // 同步 examMajorName:从 examMajorList 中找到对应的 dictLabel
|
|
|
+ if (selectedExamMajor.value != null) {
|
|
|
+ const selectedMajor = examMajorList.value.find(item => item.dictValue === selectedExamMajor.value);
|
|
|
+ form.value.examMajorName = selectedMajor ? selectedMajor.dictLabel : null;
|
|
|
+ } else {
|
|
|
+ form.value.examMajorName = null;
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
+// 监听考生类型和省份变化,加载专业类别列表
|
|
|
+watch([selectedExamType, () => form.value.location], ([examType, location], [oldExamType, oldLocation]) => {
|
|
|
+ // 避免初始化时执行(第一次加载时 oldExamType 和 oldLocation 都是 undefined)
|
|
|
+ if (oldExamType === undefined && oldLocation === undefined) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 如果考生类型变为 VHS 且有省份,加载专业类别列表
|
|
|
+ if (examType === 'VHS' && location) {
|
|
|
+ loadExamMajorList(location, examType).then(() => {
|
|
|
+ // 如果列表加载完成但 selectedExamMajor 还没有值,保持原值不变
|
|
|
+ // 这里不需要重新设置 selectedExamMajor,因为它在 getUserInfo 中已经设置过了
|
|
|
+ });
|
|
|
+ } else if (examType !== 'VHS') {
|
|
|
+ // 如果考生类型不是 VHS,清空专业类别相关数据
|
|
|
+ examMajorList.value = [];
|
|
|
+ selectedExamMajor.value = null;
|
|
|
+ form.value.examMajor = null;
|
|
|
+ form.value.examMajorName = null;
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+// 加载专业类别列表
|
|
|
+const loadExamMajorList = async (location, examType) => {
|
|
|
+ try {
|
|
|
+ const res = await listAllSubject({
|
|
|
+ location: location,
|
|
|
+ examType: examType
|
|
|
+ });
|
|
|
+ // 转换数据格式,dictValue 对应 subject_id,dictLabel 对应 subject_name
|
|
|
+ // 确保 dictValue 是 Number 类型,与 examMajor 的 Integer 类型匹配
|
|
|
+ examMajorList.value = (res.data || []).map(item => ({
|
|
|
+ dictValue: Number(item.subjectId),
|
|
|
+ dictLabel: item.subjectName
|
|
|
+ }));
|
|
|
+ } catch (error) {
|
|
|
+ console.error('加载专业类别列表失败:', error);
|
|
|
+ examMajorList.value = [];
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
|
|
|
const rules = ref({
|
|
|
@@ -179,6 +237,10 @@ const handleBeforeClose = () => {
|
|
|
scores: {},
|
|
|
directionStudy: []
|
|
|
};
|
|
|
+ examMajorList.value = [];
|
|
|
+ selectedExamMajor.value = null;
|
|
|
+ form.value.examMajor = null;
|
|
|
+ form.value.examMajorName = null;
|
|
|
}
|
|
|
|
|
|
const open = (cardInfo) => {
|
|
|
@@ -207,6 +269,19 @@ const getUserInfo = (cardInfo) => {
|
|
|
area.selected = targetArea.areaId;
|
|
|
area.selectedItem = targetArea;
|
|
|
}
|
|
|
+ // 先初始化专业类别(在设置 selectedExamType 之前,避免触发 watch)
|
|
|
+ if (res.data.examType === 'VHS' && form.value.location) {
|
|
|
+ await loadExamMajorList(form.value.location, res.data.examType);
|
|
|
+ // 确保类型一致,将 examMajor 转换为 Number 类型
|
|
|
+ if (res.data.examMajor != null) {
|
|
|
+ selectedExamMajor.value = Number(res.data.examMajor);
|
|
|
+ } else {
|
|
|
+ selectedExamMajor.value = null;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ selectedExamMajor.value = null;
|
|
|
+ }
|
|
|
+ // 然后设置考生类型(这会触发 watch,但此时数据已经加载完成)
|
|
|
selectedExamType.value = res.data.examType;
|
|
|
selectedCampus.value = res.data.campusSchoolId;
|
|
|
selectedCampusClass.value = res.data.campusClassId;
|
|
|
@@ -233,7 +308,14 @@ const handleConfirm = () => {
|
|
|
formRef.value.validate((valid) => {
|
|
|
if (valid) {
|
|
|
modalRef.value.showLoading()
|
|
|
- updateCardUser(form.value).then(res => {
|
|
|
+ // 准备提交的数据
|
|
|
+ const submitData = { ...form.value };
|
|
|
+ // 如果考生类型不是 VHS,则不传递 examMajor 和 examMajorName
|
|
|
+ if (selectedExamType.value !== 'VHS') {
|
|
|
+ delete submitData.examMajor;
|
|
|
+ delete submitData.examMajorName;
|
|
|
+ }
|
|
|
+ updateCardUser(submitData).then(res => {
|
|
|
proxy.$modal.msgSuccess('修改成功')
|
|
|
close();
|
|
|
emit('refresh')
|