|
|
@@ -1,81 +1,236 @@
|
|
|
<template>
|
|
|
- <IeModal :title="title" :confirmText="confirmButtonText" ref="modalRef" width="500px" @confirm="handleConfirm">
|
|
|
+ <IeModal title="修改用户" ref="modalRef" width="700px" @beforeClose="handleBeforeClose" @confirm="handleConfirm">
|
|
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
|
|
- <el-form-item label="平台机构" prop="institutionId" :required="true">
|
|
|
- <ie-institution-select v-model="form.institutionId" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="卡类型" prop="cardType">
|
|
|
- <ie-select v-model="form.cardType" :options="card_type" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="卡数量" prop="count">
|
|
|
- <el-input-number v-model="form.count" :min="1" :max="10000" :step="1" :precision="0" class="w-full!" />
|
|
|
- </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="学生姓名" prop="nickName" :required="true">
|
|
|
+ <el-input v-model="form.nickName" placeholder="请输入学生姓名" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="手机号" prop="mobile" :required="true">
|
|
|
+ <el-input v-model="form.mobile" maxlength="11" placeholder="请输入手机号" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="省份" prop="provinceId">
|
|
|
+ <ie-select v-model="selectedArea" :options="areaList" label-key="areaName" value-key="areaId" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="考生类型" prop="examType">
|
|
|
+ <ie-select v-model="selectedExamType" :options="examTypeList" label-key="dictLabel" value-key="dictValue" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="注册学校" prop="schoolId">
|
|
|
+ <ie-select v-model="selectedSchool" :options="schoolList" label-key="name" value-key="id" filterable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="注册班级" prop="classId">
|
|
|
+ <ie-select v-model="selectedClass" :options="classList" label-key="name" value-key="classId" filterable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="培训学校" prop="campusSchoolId">
|
|
|
+ <ie-select v-model="selectedCampus" :options="campusList" label-key="name" value-key="id" filterable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="培训班级" prop="campusClassId">
|
|
|
+ <ie-select v-model="selectedCampusClass" :options="campusClassList" label-key="name" value-key="classId"
|
|
|
+ filterable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="语文成绩" prop="scores.chinese">
|
|
|
+ <el-input v-model.number="form.scores.chinese" v-number placeholder="请输入语文成绩" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="数学成绩" prop="scores.mathematics">
|
|
|
+ <el-input v-model.number="form.scores.mathematics" v-number placeholder="请输入数学成绩" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="外语成绩" prop="scores.foreign">
|
|
|
+ <el-input v-model.number="form.scores.foreign" v-number placeholder="请输入外语成绩" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="政治成绩" prop="scores.political">
|
|
|
+ <el-input v-model.number="form.scores.political" v-number placeholder="请输入政治成绩" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="物理成绩" prop="scores.physics">
|
|
|
+ <el-input v-model.number="form.scores.physics" v-number placeholder="请输入物理成绩" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="到期时间" prop="outDate">
|
|
|
+ <el-date-picker v-model="form.outDate" placeholder="请选择到期时间" value-format="YYYY-MM-DD" class="w-full!" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="目标院校" prop="targetCollege">
|
|
|
+ <div class="w-full flex items-center gap-x-2 ">
|
|
|
+ <div class="flex-1 flex flex-col gap-2">
|
|
|
+ <div
|
|
|
+ class="flex items-center gap-x-2 border-1 border-solid border-[#e5e5e5] rounded-[4px] px-2 py-2 relative"
|
|
|
+ v-for="(item, index) in form.directionStudy" :key="item.id">
|
|
|
+ <div class="text-[13px] leading-[13px] font-bold">{{ item.universityName }}</div>
|
|
|
+ <div
|
|
|
+ class="text-[11px] text-[#5692fa] leading-[11px] border-1 border-solid border-[#5692fa] rounded-[4px] px-1 py-1">
|
|
|
+ {{ item.majorName }}</div>
|
|
|
+ <div class="text-[11px] text-[#999] leading-[11px]">{{ item.majorAncestors }}</div>
|
|
|
+ <div class="absolute top-1/2 right-2 -translate-y-1/2 cursor-pointer">
|
|
|
+ <el-icon @click="handleRemoveTargetCollege(index)" color="#ff4949">
|
|
|
+ <Close />
|
|
|
+ </el-icon>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-button type="primary" :disabled="form.directionStudy.length >= 3" icon="plus" plain
|
|
|
+ @click="handleAddTargetCollege">添加</el-button>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-form>
|
|
|
</IeModal>
|
|
|
+ <DirectionDialog ref="directionDialogRef" @confirm="handleDirectionConfirm" />
|
|
|
</template>
|
|
|
<script setup>
|
|
|
+import useSchool from '@/hooks/useSchool';
|
|
|
import IeModal from '@/components/IeModal/index.vue';
|
|
|
import IeSelect from '@/components/IeSelect/index.vue';
|
|
|
-import IeInstitutionSelect from '@/components/IeInstitutionSelect/index.vue';
|
|
|
-import { issueCard } from '@/api/dz/cards';
|
|
|
-import { getCurrentInstance } from 'vue';
|
|
|
+import IeUniversitySelect from '@/components/IeUniversitySelect/index.vue';
|
|
|
+import DirectionDialog from './DirectionDialog.vue';
|
|
|
+import { updateCardUser, getUserByCardId } from '@/api/dz/cards';
|
|
|
+import { getCurrentInstance, nextTick, watch, watchEffect } from 'vue';
|
|
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
-const {
|
|
|
- card_type,
|
|
|
-} = proxy.useDict("card_type");
|
|
|
|
|
|
const modalRef = ref(null);
|
|
|
const formRef = ref(null);
|
|
|
+const userInfo = ref({});
|
|
|
const form = ref({
|
|
|
- institutionId: null,
|
|
|
- cardType: null,
|
|
|
- count: 1,
|
|
|
+ scores: {},
|
|
|
+ directionStudy: []
|
|
|
})
|
|
|
-const operation = ref('add')
|
|
|
-const rules = ref({
|
|
|
- institutionId: [{ required: true, message: '请选择平台机构', trigger: 'change' }],
|
|
|
- cardType: [{ required: true, message: '请选择卡类型', trigger: 'change' }],
|
|
|
- count: [{ required: true, message: '请输入卡数量', trigger: 'blur' }],
|
|
|
-})
|
|
|
-const title = computed(() => {
|
|
|
- return operation.value === 'add' ? '制卡' : '修改';
|
|
|
+
|
|
|
+const {
|
|
|
+ init,
|
|
|
+ reset,
|
|
|
+ areaList,
|
|
|
+ selectedArea,
|
|
|
+ getAreaList,
|
|
|
+ schoolList,
|
|
|
+ selectedSchool,
|
|
|
+ classList,
|
|
|
+ selectedClass,
|
|
|
+ examTypeList,
|
|
|
+ selectedExamType,
|
|
|
+ getExamTypeList,
|
|
|
+ campusList,
|
|
|
+ selectedCampus,
|
|
|
+ campusClassList,
|
|
|
+ selectedCampusClass,
|
|
|
+} = useSchool({ autoLoad: false, loadExamType: true, loadClass: true, loadCampus: true });
|
|
|
+
|
|
|
+watch(() => selectedArea.value, (val) => {
|
|
|
+ form.value.provinceId = selectedArea.value;
|
|
|
+ if (!Array.isArray(selectedArea.value) && selectedArea.value) {
|
|
|
+ getExamTypeList();
|
|
|
+ }
|
|
|
})
|
|
|
-const confirmButtonText = computed(() => {
|
|
|
- return operation.value === 'add' ? '确认制卡' : '确认修改';
|
|
|
+
|
|
|
+watchEffect(() => {
|
|
|
+ form.value.examType = selectedExamType.value;
|
|
|
+ form.value.schoolId = selectedSchool.value;
|
|
|
+ form.value.classId = selectedClass.value;
|
|
|
+ form.value.campusSchoolId = selectedCampus.value;
|
|
|
+ form.value.campusClassId = selectedCampusClass.value;
|
|
|
+});
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+const rules = ref({
|
|
|
+ nickName: [
|
|
|
+ { required: true, message: '请输入学生姓名', trigger: ['blur', 'change'] }
|
|
|
+ ],
|
|
|
+ mobile: [
|
|
|
+ { required: true, message: '请输入手机号', trigger: ['blur', 'change'] },
|
|
|
+ {
|
|
|
+ pattern: /^1[3-9]\d{9}$/,
|
|
|
+ message: '请输入正确的手机号',
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }
|
|
|
+ ],
|
|
|
})
|
|
|
|
|
|
-// 获取卡类型枚举
|
|
|
-const getCardTypeEnum = (typeValue) => {
|
|
|
- const cardTypeMap = {
|
|
|
- 6: "Platform",
|
|
|
- 2: "Dept",
|
|
|
- 7: "ECard",
|
|
|
- 8: "Test",
|
|
|
+const handleBeforeClose = () => {
|
|
|
+ reset();
|
|
|
+ form.value = {
|
|
|
+ scores: {},
|
|
|
+ directionStudy: []
|
|
|
};
|
|
|
- return cardTypeMap[typeValue] || "ECard";
|
|
|
}
|
|
|
|
|
|
-const open = (type = 'add', data = { institutionId: null, cardType: null, count: 1 }) => {
|
|
|
- operation.value = type;
|
|
|
- form.value = data;
|
|
|
+const open = (cardInfo) => {
|
|
|
+ getUserInfo(cardInfo);
|
|
|
modalRef.value.open()
|
|
|
}
|
|
|
const close = () => {
|
|
|
modalRef.value.close()
|
|
|
}
|
|
|
+
|
|
|
+const getUserInfo = (cardInfo) => {
|
|
|
+ const { cardId, location, nickName, outDate } = cardInfo;
|
|
|
+ getUserByCardId(cardId).then(async res => {
|
|
|
+ userInfo.value = { ...res.data };
|
|
|
+ form.value = {
|
|
|
+ ...res.data,
|
|
|
+ location,
|
|
|
+ nickName,
|
|
|
+ outDate
|
|
|
+ };
|
|
|
+ const areaList = await getAreaList();
|
|
|
+ const area = areaList.find(item => item.areaName === location + '省');
|
|
|
+ if (area) {
|
|
|
+ selectedArea.value = area.areaId;
|
|
|
+ }
|
|
|
+ selectedExamType.value = res.data.examType;
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const directionDialogRef = ref(null);
|
|
|
+const handleAddTargetCollege = () => {
|
|
|
+ directionDialogRef.value.open(form.value.directionStudy);
|
|
|
+}
|
|
|
+const handleDirectionConfirm = (selectedList) => {
|
|
|
+ form.value.directionStudy = selectedList;
|
|
|
+ console.log(form.value.directionStudy, 'form.value.directionStudy')
|
|
|
+}
|
|
|
+
|
|
|
+const handleRemoveTargetCollege = (index) => {
|
|
|
+ form.value.directionStudy.splice(index, 1);
|
|
|
+}
|
|
|
+
|
|
|
const emit = defineEmits(['refresh'])
|
|
|
const handleConfirm = () => {
|
|
|
formRef.value.validate((valid) => {
|
|
|
if (valid) {
|
|
|
- const { institutionId, cardType, count } = form.value;
|
|
|
modalRef.value.showLoading()
|
|
|
- issueCard(institutionId, getCardTypeEnum(cardType), count).then(res => {
|
|
|
- proxy.$modal.msgSuccess('制卡成功')
|
|
|
+ updateCardUser(form.value).then(res => {
|
|
|
+ proxy.$modal.msgSuccess('修改成功')
|
|
|
close();
|
|
|
- setTimeout(() => {
|
|
|
- emit('refresh')
|
|
|
- }, 300);
|
|
|
+ emit('refresh')
|
|
|
}).finally(() => {
|
|
|
modalRef.value.hideLoading()
|
|
|
})
|