@@ -7,15 +7,18 @@
width = "90%"
>
< el-form :model = "dataForm" :rules = "dataRule" ref = "dataFormRef"
label -width = " 13 0px " >
<!-- 基本信息 -- >
< div c lass = "form-section " >
< div class = "section-title" > 基本信息 < / div >
label -width = " 12 0px " >
< el-tabs v-model = "activeTab" >
< el -tab -pane label = "基本信息" name = "basic " >
<!-- 基本信息 -- >
< div class = "form-section" >
< div class = "section-title" > 基本信息 < / div >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "24 " >
< el-col :span = "6 " >
< el-form-item label = "招生计划" prop = "groupId" >
< el-select v-model = "dataForm.groupId" filterable :disabled="dataForm.id"
placeholder = "请选择招生计划" class = "w-full" >
< el-select v-model = "dataForm.groupId" filterable :disabled="dataForm.id !== '' "
placeholder = "请选择招生计划" >
< el-option
v-for = "item in planList"
:key = "item.id"
@@ -25,8 +28,6 @@
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "6" >
< el-form-item label = "姓名" prop = "name" >
< el-input type = "text" v-model = "dataForm.name" :disabled="!isEdit" > < / el -input >
@@ -37,6 +38,18 @@
< el-input type = "text" v-model = "dataForm.oldName" :disabled="!isEdit" > < / el -input >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "民族" prop = "nationality" >
< el-select v-model = "dataForm.nationality" filterable placeholder="请选择民族" :disabled="!isEdit" >
< el -option
v-for = "item in nationalityList"
:key = "item.nationCode"
:label = "item.nationName"
:value = "item.nationName" >
< / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "证件类型" prop = "idCardType" >
< el-radio-group v-model = "dataForm.idCardType" :disabled="!isEdit" @change="handleIdCardTypeChange" >
@@ -57,31 +70,15 @@
< / el-col >
< el-col :span = "6" >
< el-form-item label = "性别" prop = "gender" :required = "isGenderRequired" >
< el-select v-model = "dataForm.gender" class="w-full" :disabled="!isEdit || dataForm.idCardType=='0'" >
< el-option
v-for = "item in sexy"
:key = "item.value"
:label = "item.label"
:value = "item.value" >
< / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "民族" prop = "nationality" >
< el-select v-model = "dataForm.nationality" filterable placeholder="请选择民族" class="w-full" :disabled="!isEdit" >
< el -option
v-for = "item in nationalityList"
:key = "item.nationCode"
:label = "item.nationName"
:value = "item.nationName" >
< / el-option >
< / el-select >
< el-radio-group v-model = "dataForm.gender" :disabled="!isEdit || dataForm.idCardType=='0'" >
< el-radio v-for = "item in sexy" :key="item.value" :label="item.value" > {{ item.label }} < / el -radio >
< / el-radio-group >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "是否团员" prop = "isLeagueMember" >
< el-select v-model = "dataForm.isLeagueMember" filterable clearable placeholder="请选择是否团员" class="w-full" :disabled="!isEdit" >
< el-select v-model = "dataForm.isLeagueMember" filterable clearable placeholder="请选择是否团员" :disabled="!isEdit" >
< el -option
v-for = "item in yes_no_type"
:key = "item.value"
@@ -93,7 +90,7 @@
< / el-col >
< el-col :span = "6" >
< el-form-item label = "是否住宿" prop = "isAccommodation" >
< el-select v-model = "dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿" class="w-full" :disabled="!isEdit" >
< el-select v-model = "dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿" :disabled="!isEdit" >
< el -option
v-for = "item in yes_no_type"
:key = "item.value"
@@ -103,10 +100,7 @@
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "12" >
< el-col :span = "18" >
< el-form-item label = "毕业学校" prop = "schoolOfGraduation" >
< el-input type = "text" v-model = "dataForm.schoolOfGraduation" :disabled="!isEdit" > < / el -input >
< / el-form-item >
@@ -126,7 +120,7 @@
< / el-col >
< el-col :span = "6" >
< el-form-item label = "文化程度" prop = "degreeOfEducation" >
< el-select v-model = "dataForm.degreeOfEducation" filterable placeholder="请选择文化程度" class="w-full" :disabled="!isEdit" @change="changeEducation" >
< el-select v-model = "dataForm.degreeOfEducation" filterable placeholder="请选择文化程度" :disabled="!isEdit" @change="changeEducation" >
< el -option
v-for = "item in eduList"
:key = "item.value"
@@ -140,6 +134,7 @@
< el-col :span = "6" >
< el-form-item label = "成绩" prop = "score" >
< el-input-number
controls -position = " right "
v-model = "dataForm.score"
placeholder = "成绩"
:min = "0"
@@ -151,7 +146,7 @@
< / el-col >
< el-col :span = "6" >
< el-form-item label = "户口性质" prop = "residenceType" >
< el-select v-model = "dataForm.residenceType" filterable clearable placeholder="请选择户口性质" class="w-full" :disabled="!isEdit" >
< el-select v-model = "dataForm.residenceType" filterable clearable placeholder="请选择户口性质" :disabled="!isEdit" >
< el -option
v-for = "item in residenceTypeList"
:key = "item.value"
@@ -168,7 +163,7 @@
< el-row v-if = "dataForm.degreeOfEducation=='1'" :gutter="20" class="form-row" >
< el -col :span = "6" >
< el-form-item label = "学校归属地" prop = "schoolArea" >
< el-select v-model = "dataForm.schoolArea" filterable placeholder="请选择学校归属地" class="w-full" :disabled="!isEdit" @change="changeFrom" >
< el-select v-model = "dataForm.schoolArea" filterable placeholder="请选择学校归属地" :disabled="!isEdit" @change="changeFrom" >
< el -option
v-for = "item in schoolFromList"
:key = "item.value"
@@ -180,7 +175,7 @@
< / el-col >
< el-col v-if = "(dataForm.degreeOfEducation) && (dataForm.schoolArea=='2')" :span="6" >
< el -form -item label = "学校所在省市" prop = "jsOtherCity" >
< el-select v-model = "dataForm.jsOtherCity" filterable placeholder="请选择学校所在省市" class="w-full"
< el-select v-model = "dataForm.jsOtherCity" filterable placeholder="请选择学校所在省市"
:disabled = "!isEdit" @change ="changeSchoolCode" >
< el -option
v-for = "item in schoolCodeList"
@@ -193,7 +188,7 @@
< / el-col >
< el-col v-if = "(dataForm.degreeOfEducation) && (dataForm.schoolArea=='3')" :span="6" >
< el -form -item label = "外省" prop = "otherProvince" >
< el-select v-model = "dataForm.otherProvince" filterable placeholder="请选择学校所在省市" class="w-full"
< el-select v-model = "dataForm.otherProvince" filterable placeholder="请选择学校所在省市"
:disabled = "!isEdit" @change ="changeSchoolCode" >
< el -option
v-for = "item in areaHomeProvinceList"
@@ -207,6 +202,7 @@
< el-col :span = "6" >
< el-form-item label = "当地总分" prop = "fullScore" >
< el-input-number
controls -position = " right "
v-model = "dataForm.fullScore"
:min = "0"
:max = "1000"
@@ -218,6 +214,7 @@
< el-col :span = "6" >
< el-form-item label = "成绩折算分" prop = "correctedScore" >
< el-input-number
controls -position = " right "
v-model = "dataForm.correctedScore"
:min = "0"
:max = "1000"
@@ -264,7 +261,7 @@
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "详细地址" prop = "residenceDetail" >
< el-form-item label = "户口 详细地址" prop = "residenceDetail" >
< el-input type = "text" v-model = "dataForm.residenceDetail" placeholder="请输入详细地址" :disabled="!isEdit" > < / el -input >
< / el-form-item >
< / el-col >
@@ -304,7 +301,7 @@
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "详细地址" prop = "homeAddressDetail" >
< el-form-item label = "家庭 详细地址" prop = "homeAddressDetail" >
< el-input type = "text" v-model = "dataForm.homeAddressDetail" placeholder="请输入详细地址" :disabled="!isEdit" > < / el -input >
< / el-form-item >
< / el-col >
@@ -359,7 +356,7 @@
< el-row v-if = "dataForm.id" :gutter="20" class="form-row" >
< el -col :span = "8" >
< el-form-item label = "拟报专业1" prop = "wishMajorOne" >
< el-select v-model = "dataForm.wishMajorOne" filterable clearable placeholder="请选择专业" class="w-full" >
< el-select v-model = "dataForm.wishMajorOne" filterable clearable placeholder="请选择专业" >
< el -option
v-for = "item in planMajorList"
:key = "item.majorCode"
@@ -371,7 +368,7 @@
< / el-col >
< el-col :span = "8" >
< el-form-item label = "拟报专业2" prop = "wishMajorTwo" >
< el-select v-model = "dataForm.wishMajorTwo" filterable clearable placeholder="请选择专业" class="w-full" >
< el-select v-model = "dataForm.wishMajorTwo" filterable clearable placeholder="请选择专业" >
< el -option
v-for = "item in planMajorList"
:key = "item.majorCode"
@@ -383,7 +380,7 @@
< / el-col >
< el-col :span = "8" >
< el-form-item label = "拟报专业3" prop = "wishMajorThree" >
< el-select v-model = "dataForm.wishMajorThree" filterable clearable placeholder="请选择专业" class="w-full" >
< el-select v-model = "dataForm.wishMajorThree" filterable clearable placeholder="请选择专业" >
< el -option
v-for = "item in planMajorList"
:key = "item.majorCode"
@@ -397,7 +394,7 @@
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "24" >
< el-form-item label = "录取专业" prop = "confirmedMajor" >
< el-select v-model = "dataForm.confirmedMajor" filterable clearable placeholder="" class="w-full" :disabled="!isEdit" @change="changeConfirmedMajor(dataForm.confirmedMajor)" >
< el-select v-model = "dataForm.confirmedMajor" filterable clearable placeholder="" :disabled="!isEdit" @change="changeConfirmedMajor(dataForm.confirmedMajor)" >
< el -option
v-for = "item in planMajorList"
:key = "item.majorCode"
@@ -409,9 +406,9 @@
< / el-col >
< / el-row >
< el-row v-if = "isEdit" :gutter="20" class="form-row" >
< el -col :span = "24" >
< el-form-item label = "两年制专业" prop = "twoMajor" v-if = "twoMajorList.length>0" >
< el -select v-model = "dataForm.twoMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.twoMajor)" >
< el -col :span = "8" v-if = "twoMajorList.length>0" >
< el -form -item label = "两年制专业" prop = "twoMajor" >
< el-select v-model = "dataForm.twoMajor" filterable clearable placeholder="" @change="changeConfirmedMajor(dataForm.twoMajor)" >
< el -option
v-for = "item in twoMajorList"
:key = "item.majorCode"
@@ -420,8 +417,10 @@
< / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "8" v-if = "threeMajorList.length>0" >
< el -form -item label = "三年制专业" prop = "threeMajor" v-if = "threeMajorList.length>0" >
< el -select v-model = "dataForm.threeMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.threeMajor)" >
< el -select v-model = "dataForm.threeMajor" filterable clearable placeholder="" @change="changeConfirmedMajor(dataForm.threeMajor)" >
< el -option
v-for = "item in threeMajorList"
:key = "item.majorCode"
@@ -429,9 +428,11 @@
:value = "item.majorCode" >
< / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "四年制专业" prop = "fourMajor" v-if = "fourMajorList.length>0" >
< el-select v-model = "dataForm.fourMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.fourMajor) " >
< / el-form-item >
< / el-col >
< el-col :span = "8" v-if = "fourMajorList.length>0 " >
< el -form -item label = "四年制专业" prop = "fourMajor" >
< el-select v-model = "dataForm.fourMajor" filterable clearable placeholder="" @change="changeConfirmedMajor(dataForm.fourMajor)" >
< el -option
v-for = "item in fourMajorList"
:key = "item.majorCode"
@@ -440,8 +441,10 @@
< / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "五年制专业" prop = "fiveMajor" v-if = "fiveMajorList.length>0" >
< el-select v-model = "dataForm.fiveMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.fiveMajor) " >
< / el-col >
< el-col :span = "8" v-if = "fiveMajorList.length>0 " >
< el -form -item label = "五年制专业" prop = "fiveMajor" >
< el-select v-model = "dataForm.fiveMajor" filterable clearable placeholder="" @change="changeConfirmedMajor(dataForm.fiveMajor)" >
< el -option
v-for = "item in fiveMajorList"
:key = "item.majorCode"
@@ -450,8 +453,10 @@
< / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "六年制专业" prop = "sixMajor" v-if = "sixMajorList.length>0" >
< el-select v-model = "dataForm.sixMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.sixMajor) " >
< / el-col >
< el-col :span = "8" v-if = "sixMajorList.length>0 " >
< el -form -item label = "六年制专业" prop = "sixMajor" >
< el-select v-model = "dataForm.sixMajor" filterable clearable placeholder="" @change="changeConfirmedMajor(dataForm.sixMajor)" >
< el -option
v-for = "item in sixMajorList"
:key = "item.majorCode"
@@ -459,9 +464,11 @@
:value = "item.majorCode" >
< / el-option >
< / el-select >
< / el-form-item >
< el-form-item label = "七年制专业" prop = "sevenMajor" v-if = "sevenMajorList.length>0" >
< el-select v-model = "dataForm.sevenMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.sevenMajor) " >
< / el-form-item >
< / el-col >
< el-col :span = "8" v-if = "sevenMajorList.length>0 " >
< el -form -item label = "七年制专业" prop = "sevenMajor" >
< el-select v-model = "dataForm.sevenMajor" filterable clearable placeholder="" @change="changeConfirmedMajor(dataForm.sevenMajor)" >
< el -option
v-for = "item in sevenMajorList"
:key = "item.majorCode"
@@ -474,134 +481,27 @@
< / el-row >
<!-- 费用信息 -- >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "6 " >
< el-col :span = "8 " >
< el-form-item label = "学费" prop = "feeTuition" >
< el-input-number v-model = "dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" disabled class="w-full" > < / el -input -number >
< el-input-number v-model = "dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" disabled > < / el-input-number>
< / el-form-item >
< / el-col >
< el-col :span = "6 " >
< el-col :span = "8 " >
< el-form-item label = "代办费" prop = "feeAgency" >
< el-input-number v-model = "dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" disabled class="w-full" > < / el -input -number >
< el-input-number v-model = "dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" disabled > < / el-input-number>
< / el-form-item >
< / el-col >
< el-col :span = "6 " >
< el-col :span = "8 " >
< el-form-item label = "总费用" prop = "allMoney" >
< span class = "total-fee" > { { Number ( dataForm . feeTuition ) + Number ( dataForm . feeAgency ) } } < / span >
< / el-form-item >
< / el-col >
< / el-row >
<!-- 附件材料 -- >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "8" >
< el-form-item label = "成绩单" prop = "scorePhoto" >
< div class = "image-preview-container" >
< viewer :images = "dataForm.scorePhotoList" v-if = "dataForm.scorePhoto && dataForm.scorePhotoList && dataForm.scorePhotoList.length > 0" >
< div class = "image-list" >
< div v-for = "(src, index) in dataForm.scorePhotoList" :key="index" class="image-item" >
< img :src = "src" class = "preview-image" : alt = "`成绩单-${index + 1}`" >
< / div >
< / div >
< / viewer >
< div v-else class = "image-placeholder" >
< el-icon > < Picture / > < / el-icon >
< span > 暂无图片 < / span >
< / div >
< / div >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "毕业证" prop = "graPic" >
< div class = "image-preview-container" >
< viewer :images = "dataForm.graPicList" v-if = "dataForm.graPic && dataForm.graPicList && dataForm.graPicList.length > 0" >
< div class = "image-list" >
< div v-for = "(src, index) in dataForm.graPicList" :key="index" class="image-item" >
< img :src = "src" class = "preview-image" : alt = "`毕业证-${index + 1}`" >
< / div >
< / div >
< / viewer >
< div v-else class = "image-placeholder" >
< el-icon > < Picture / > < / el-icon >
< span > 暂无图片 < / span >
< / div >
< / div >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "在常营业执照" prop = "yyPic" >
< div class = "image-preview-container" >
< viewer :images = "dataForm.yyPicList" v-if = "dataForm.yyPic && dataForm.yyPicList && dataForm.yyPicList.length > 0" >
< div class = "image-list" >
< div v-for = "(src, index) in dataForm.yyPicList" :key="index" class="image-item" >
< img :src = "src" class = "preview-image" : alt = "`在常营业执照-${index + 1}`" >
< / div >
< / div >
< / viewer >
< div v-else class = "image-placeholder" >
< el-icon > < Picture / > < / el-icon >
< span > 暂无图片 < / span >
< / div >
< / div >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "8" >
< el-form-item label = "在常租赁合同/房产证明" prop = "housePic" >
< div class = "image-preview-container" >
< viewer :images = "dataForm.housePicList" v-if = "dataForm.housePic && dataForm.housePicList && dataForm.housePicList.length > 0" >
< div class = "image-list" >
< div v-for = "(src, index) in dataForm.housePicList" :key="index" class="image-item" >
< img :src = "src" class = "preview-image" : alt = "`在常租赁合同/房产证明-${index + 1}`" >
< / div >
< / div >
< / viewer >
< div v-else class = "image-placeholder" >
< el-icon > < Picture / > < / el-icon >
< span > 暂无图片 < / span >
< / div >
< / div >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "在常就业社保证明" prop = "sbPic" >
< div class = "image-preview-container" >
< viewer :images = "dataForm.sbPicList" v-if = "dataForm.sbPic && dataForm.sbPicList && dataForm.sbPicList.length > 0" >
< div class = "image-list" >
< div v-for = "(src, index) in dataForm.sbPicList" :key="index" class="image-item" >
< img :src = "src" class = "preview-image" : alt = "`在常就业社保证明-${index + 1}`" >
< / div >
< / div >
< / viewer >
< div v-else class = "image-placeholder" >
< el-icon > < Picture / > < / el-icon >
< span > 暂无图片 < / span >
< / div >
< / div >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "户口本" prop = "householdPic" >
< div class = "image-preview-container" >
< viewer :images = "dataForm.householdPicList" v-if = "dataForm.householdPic && dataForm.householdPicList && dataForm.householdPicList.length > 0" >
< div class = "image-list" >
< div v-for = "(src, index) in dataForm.householdPicList" :key="index" class="image-item" >
< img :src = "src" class = "preview-image" : alt = "`户口本-${index + 1}`" >
< / div >
< / div >
< / viewer >
< div v-else class = "image-placeholder" >
< el-icon > < Picture / > < / el-icon >
< span > 暂无图片 < / span >
< / div >
< / div >
< / el-form-item >
< / el-col >
< / el-row >
<!-- 其他信息 -- >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "8" >
< el-form-item label = "联系人" prop = "contactName" >
< el-select v-model = "dataForm.contactName" filterable clearable placeholder="请选择联系人" class="w-full" :disabled="!isEdit" >
< el-select v-model = "dataForm.contactName" filterable clearable placeholder="请选择联系人" :disabled="!isEdit" >
< el -option
v-for = "item in contactNameList"
:key = "item.teacherNo"
@@ -613,7 +513,7 @@
< / el-col >
< el-col :span = "8" >
< el-form-item label = "辨色力" prop = "colorDiscrimination" >
< el-select v-model = "dataForm.colorDiscrimination" filterable clearable placeholder="请选择辨色力" class="w-full" :disabled="!isEdit" >
< el-select v-model = "dataForm.colorDiscrimination" filterable clearable placeholder="请选择辨色力" :disabled="!isEdit" >
< el -option
v-for = "item in color_discrimination"
:key = "item.value"
@@ -625,20 +525,147 @@
< / el-col >
< / el-row >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "24 " >
< el-col :span = "1 2" >
< el-form-item label = "既往病史" prop = "pastMedicalHistory" >
< el-input type = "textarea" v-model = "dataForm.pastMedicalHistory" placeholder="请输入既往病史" :rows="2" :disabled="!isEdit" > < / el -input >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "24" >
< el-col :span = "12" >
< el-form-item label = "备注" prop = "remarks" >
< el-input type = "textarea" v-model = "dataForm.remarks" placeholder="备注" :rows="2" :disabled="!isEdit" > < / el -input >
< / el-form-item >
< / el-col >
< / el-row >
< / div >
< / div >
< / el-tab-pane >
< el-tab-pane label = "附件材料" name = "attachment" >
<!-- 附件材料 -- >
< el-row :gutter = "20" class = "form-row" >
< el-col :span = "6" >
< el-form-item label = "成绩单" prop = "scorePhoto" >
< el-upload
:action = "uploadUrl"
class = "avatar-uploader"
name = "file"
:headers = "headers"
:data = "uploadData"
:show-file-list = "false"
:before-upload = "beforeUpload"
:http-request = "httpRequest"
:on-success = "uploadSuccess" >
< div v-if = "dataForm.scorePhoto" class="avatar-wrapper" >
< img : src = "baseUrl + dataForm.scorePhoto" class = "avatar" / >
< / div >
< el-icon v-else class = "avatar-uploader-icon" > < Plus / > < / el-icon >
< / el-upload >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "毕业证" prop = "graPic" >
< el-upload
:action = "uploadUrl"
class = "avatar-uploader"
name = "file"
:headers = "headers"
:data = "uploadData"
:show-file-list = "false"
:before-upload = "beforeUpload"
:http-request = "httpRequest"
:on-success = "upload2Success" >
< div v-if = "dataForm.graPic" class="avatar-wrapper" >
< img : src = "baseUrl + dataForm.graPic" class = "avatar" / >
< / div >
< el-icon v-else class = "avatar-uploader-icon" > < Plus / > < / el-icon >
< / el-upload >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "在常营业执照" prop = "yyPic" >
< el-upload
:action = "uploadUrl"
class = "avatar-uploader"
name = "file"
:headers = "headers"
:data = "uploadData"
:show-file-list = "false"
:before-upload = "beforeUpload"
:http-request = "httpRequest"
:on-success = "upload3Success" >
< div v-if = "dataForm.yyPic" class="avatar-wrapper" >
< img : src = "baseUrl + dataForm.yyPic" class = "avatar" / >
< / div >
< el-icon v-else class = "avatar-uploader-icon" > < Plus / > < / el-icon >
< / el-upload >
< / el-form-item >
< / el-col >
< el-col :span = "6" >
< el-form-item label = "在常社保证明" prop = "sbPic" >
< el-upload
:action = "uploadUrl"
class = "avatar-uploader"
name = "file"
:headers = "headers"
:data = "uploadData"
:show-file-list = "false"
:before-upload = "beforeUpload"
:http-request = "httpRequest"
:on-success = "upload5Success" >
< div v-if = "dataForm.sbPic" class="avatar-wrapper" >
< img : src = "baseUrl + dataForm.sbPic" class = "avatar" / >
< / div >
< el-icon v-else class = "avatar-uploader-icon" > < Plus / > < / el-icon >
< / el-upload >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" class = "form-row" >
< el-col >
< el-form-item label = "在常租赁合同/房产证明" prop = "housePic" >
< el-upload
:action = "uploadUrl"
list -type = " picture -card "
name = "file"
:headers = "headers"
:limit = "5"
:data = "uploadData"
:file-list = "houseList"
:before-upload = "beforeUpload"
:on-preview = "handlePictureCardPreview"
:on-remove = "remove4Handler"
:http-request = "httpRequest"
:on-success = "upload4Success" >
< el-icon class = "avatar-uploader-icon" > < Plus / > < / el-icon >
< template # tip >
< div > 最多上传5张 < / div >
< / template >
< / el-upload >
< / el-form-item >
< / el-col >
< el-col >
< el-form-item label = "户口本" prop = "householdPic" >
< el-upload
:action = "uploadUrl"
list -type = " picture -card "
name = "file"
:headers = "headers"
:limit = "5"
:data = "uploadData"
:file-list = "hkPicList"
:before-upload = "beforeUpload"
:on-preview = "handlePictureCardPreview"
:on-remove = "remove6Handler"
:http-request = "httpRequest"
:on-success = "upload6Success" >
< el-icon class = "avatar-uploader-icon" > < Plus / > < / el-icon >
< template # tip >
< div > 最多上传5张 < / div >
< / template >
< / el-upload >
< / el-form-item >
< / el-col >
< / el-row >
< / el-tab-pane >
< / el-tabs >
< / el-form >
< template # footer v-if = "isEdit" >
< div class = "dialog-footer" >
@@ -650,14 +677,19 @@
< / div >
< / template >
< el-dialog title = "图片预览" v-model = "dialogUploadVisible" append -to -body >
< img width = "100%" :src = "dialogImageUrl" alt = "" >
< / el-dialog >
< / el-dialog >
< / template >
< script setup lang = "ts" >
import { ref , reactive , nextTick , watch , computed } from 'vue'
import { ref , reactive , nextTick , watch , computed , onMounted } from 'vue'
import { ElNotification } from 'element-plus'
import { Picture } from '@element-plus/icons-vue'
import { Plus } from '@element-plus/icons-vue'
import { useMessage , useMessageBox } from '/@/hooks/message'
import { Session } from '/@/utils/storage'
import axios from 'axios'
import { getObj , putObj , addObj , makeCorrectScore } from '/@/api/recruit/recruitstudentsignup'
import { getList } from "/@/api/recruit/recruitstudentplangroup"
import { listByEdu } from "/@/api/recruit/recruitstudentplan"
@@ -680,10 +712,29 @@ const emit = defineEmits<{
// 表单引用
const dataFormRef = ref ( )
const baseUrl = import . meta . env . VITE _API _URL
const uploadUrl = baseUrl + '/recruit/file/uploadAttachment'
// 响应式数据
const visible = ref ( false )
const canSubmit = ref ( false )
const title = ref ( "" )
const activeTab = ref ( 'basic' )
// 上传相关
const uploadData = reactive ( { } )
const houseList = ref < any [ ] > ( [ ] )
const hkPicList = ref < any [ ] > ( [ ] )
const fileReader = ref < FileReader | null > ( null )
const dialogImageUrl = ref ( "" )
const dialogUploadVisible = ref ( false )
// 请求头
const headers = computed ( ( ) => {
return {
"Authorization" : 'Bearer ' + Session . getToken ( )
}
} )
// 字典数据 是否 性别 辨色力
const { yes _no _type , sexy , color _discrimination } = useDict ( 'yes_no_type' , 'sexy' , 'color_discrimination' )
@@ -909,9 +960,121 @@ const dataRule = reactive({
]
} )
// 初始化 FileReader
onMounted ( ( ) => {
if ( ! window . FileReader ) {
message . error ( '您的浏览器不支持 FileReader API!' )
} else {
fileReader . value = new FileReader ( )
}
} )
// 上传前验证
const beforeUpload = ( file : File ) => {
const isLt5M = file . size < 10 * 1024 * 1024
if ( ! isLt5M ) {
message . error ( '文件大小不能超过10M' )
return false
}
return true
}
// 图片预览
const handlePictureCardPreview = ( file : any ) => {
dialogImageUrl . value = file . url
dialogUploadVisible . value = true
}
// 通用移除文件处理(多文件)
const handleRemoveMultiple = ( fileList : any [ ] , dataFormField : string ) => {
return ( file : any ) => {
const arr : any [ ] = [ ]
const strArr : string [ ] = [ ]
const dataFormObj = dataForm as any
fileList . forEach ( ( e : any ) => {
if ( e . url != file . url ) {
arr . push ( e )
// 保存时使用原始路径
strArr . push ( e . originalUrl || ( e . url . startsWith ( baseUrl ) ? e . url . substring ( baseUrl . length ) : e . url ) )
}
} )
fileList . splice ( 0 , fileList . length , ... arr )
dataFormObj [ dataFormField ] = strArr . join ( "," )
}
}
// 移除文件处理(多图上传)
const remove4Handler = handleRemoveMultiple ( houseList . value , 'housePic' )
const remove6Handler = handleRemoveMultiple ( hkPicList . value , 'householdPic' )
// 自定义上传请求
const httpRequest = ( options : any ) => {
const file = options . file
if ( file && fileReader . value ) {
fileReader . value . readAsDataURL ( file )
fileReader . value . onload = ( ) => {
const base64Str = fileReader . value ? . result as string
const config = {
url : uploadUrl ,
method : 'post' ,
headers : headers . value ,
data : {
base64Str : base64Str . split ( ',' ) [ 1 ]
} ,
timeout : 10000 ,
onUploadProgress : function ( progressEvent : any ) {
progressEvent . percent = progressEvent . loaded / progressEvent . total * 100
options . onProgress ( progressEvent , file )
} ,
}
axios ( config )
. then ( ( res : any ) => {
options . onSuccess ( res , file )
} )
. catch ( ( err : any ) => {
options . onError ( err )
} )
}
}
}
// 通用上传成功回调(单文件 - avatar模式)
const handleUploadSuccess = ( dataFormField : string ) => {
return ( res : any ) => {
const fileUrl = res . data . fileUrl
const dataFormObj = dataForm as any
dataFormObj [ dataFormField ] = fileUrl
}
}
// 通用上传成功回调(多文件)
const handleUploadSuccessMultiple = ( fileList : any [ ] , dataFormField : string ) => {
return ( res : any ) => {
const fileUrl = res . data . fileUrl // 后端返回的原始路径
const dataFormObj = dataForm as any
// 添加到文件列表,显示时添加 baseUrl 前缀,同时保存原始路径用于提交
fileList . push ( { url : baseUrl + fileUrl , name : '' , originalUrl : fileUrl } )
// 保存时使用原始路径
const arr : string [ ] = [ ]
fileList . forEach ( ( e : any ) => {
// 优先使用保存的原始路径,如果没有则从 url 中提取
arr . push ( e . originalUrl || ( e . url . startsWith ( baseUrl ) ? e . url . substring ( baseUrl . length ) : e . url ) )
} )
dataFormObj [ dataFormField ] = arr . join ( "," )
}
}
// 上传成功回调
const uploadSuccess = handleUploadSuccess ( 'scorePhoto' )
const upload2Success = handleUploadSuccess ( 'graPic' )
const upload3Success = handleUploadSuccess ( 'yyPic' )
const upload4Success = handleUploadSuccessMultiple ( houseList . value , 'housePic' )
const upload5Success = handleUploadSuccess ( 'sbPic' )
const upload6Success = handleUploadSuccessMultiple ( hkPicList . value , 'householdPic' )
// 初始化
const init = ( id : string | null , typeParam : number , groupId ? : string ) => {
dataForm . id = id || null
dataForm . id = id || ""
type . value = typeParam
isEdit . value = typeParam == 1 ? true : false
visible . value = true
@@ -957,32 +1120,30 @@ const init = (id: string | null, typeParam: number, groupId?: string) => {
// 编辑模式:获取表单数据
getObj ( dataForm . id ) . then ( ( response : any ) => {
Object . assign ( dataForm , response . data )
dataForm . scorePhotoList = [ ]
dataForm . graPicList = [ ]
dataForm . yyPicList = [ ]
dataForm . housePicList = [ ]
dataForm . sbPicList = [ ]
dataForm . householdPicList = [ ]
// 清空多图上传的列表
houseList . value = [ ]
hkPicList . value = [ ]
// 初始化多图上传列表
if ( dataForm . housePic && dataForm . housePic ! = '' ) {
const arr = dataForm . housePic . split ( "," ) . filter ( ( item : string ) => item && item . trim ( ) )
arr . forEach ( ( e : string ) => {
// 保存原始路径,显示时添加 baseUrl 前缀
houseList . value . push ( { url : baseUrl + e , name : '' , originalUrl : e } )
} )
}
if ( dataForm . scorePhoto ) {
dataForm . scorePhotoList = dataForm . scorePhoto . split ( "," )
}
if ( dataForm . graPic ) {
dataForm . graPicList = dataForm . graPic . split ( "," )
}
if ( dataForm . yyPic ) {
dataForm . yyPicList = dataForm . yyPic . split ( "," )
}
if ( dataForm . housePic ) {
dataForm . housePicList = dataForm . housePic . split ( "," )
}
if ( dataForm . householdPic ) {
dataForm . householdPicList = dataForm . householdPic . split ( "," )
}
if ( dataForm . sbPic ) {
dataForm . sbPicList = dataForm . sbPic . split ( "," )
// 户口本
if ( dataForm . householdPic && dataForm . householdPic != '' ) {
const arr = dataForm . householdPic . split ( "," ) . filter ( ( item : string ) => item && item . trim ( ) )
arr . forEach ( ( e : string ) => {
// 保存原始路径,显示时添加 baseUrl 前缀
hkPicList . value . push ( { url : baseUrl + e , name : '' , originalUrl : e } )
} )
}
title . value = dataForm . serialNumber
// 获取文化程度对应的专业
// 根据学历获取代办费(从字典获取)
@@ -1422,14 +1583,42 @@ defineExpose({
} )
< / script >
< style lang = "scss" scoped >
. viewe r- contain er{
z - index : 9999 ;
}
. avata r- upload er {
: deep ( . el - upload ) {
border : 1 px dashed var ( -- el - border - color ) ;
border - radius : 6 px ;
cursor : pointer ;
position : relative ;
overflow : hidden ;
transition : var ( -- el - transition - duration - fast ) ;
width : 148 px ;
height : 148 px ;
& : hover {
border - color : var ( -- el - color - primary ) ;
}
}
}
// 统一宽度样式
. w - full {
width : 100 % ;
}
. avatar - uploader - icon {
font - size : 28 px ;
color : # 8 c939d ;
width : 148 px ;
height : 148 px ;
line - height : 148 px ;
text - align : center ;
}
. avatar - wrapper {
width : 148 px ;
height : 148 px ;
. avatar {
width : 148 px ;
height : 148 px ;
display : block ;
object - fit : cover ;
cursor : pointer ;
}
}
// 图片预览容器样式
. image - preview - container {
@@ -1521,13 +1710,7 @@ defineExpose({
margin - bottom : 0 ! important ;
}
// 统一输入框宽度
. el - select ,
. el - input ,
. el - date - editor ,
. el - input - number {
width : 100 % ;
}
}
// 行布局优化
@@ -1583,12 +1766,7 @@ defineExpose({
}
}
// 弹窗内容区域优化
: deep ( . el - dialog _ _body ) {
max - height : 75 vh ;
overflow - y : auto ;
padding : 24 px ;
}
< / style >