<template>
|
<div class="app-container home">
|
<div class="main-title">专家信息录入</div>
|
<!-- <el-divider>专家信息录入</el-divider>-->
|
<div class="main_form">
|
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="专业类别" prop="profession">
|
<el-cascader
|
style="width: 100%"
|
v-model="form.profession"
|
:options="expertsType"
|
:props="{ expandTrigger: 'hover',value: 'id',label: 'label' }"
|
@change="professionChange"></el-cascader>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<!-- <el-row>-->
|
<!-- <el-col :span="20">-->
|
<!-- <el-form-item label="填报日期" prop="date">-->
|
<!-- <el-date-picker-->
|
<!-- style="width: 100%"-->
|
<!-- v-model="form.date"-->
|
<!-- type="date"-->
|
<!-- placeholder="选择日期">-->
|
<!-- </el-date-picker>-->
|
<!-- </el-form-item>-->
|
<!-- </el-col>-->
|
<!-- </el-row>-->
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="姓名" prop="name">
|
<el-input v-model="form.name"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="性别" prop="sex">
|
<el-radio-group v-model="form.sex">
|
<el-radio :label="0">男</el-radio>
|
<el-radio :label="1">女</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="出生日期" prop="birthday">
|
<el-date-picker
|
style="width: 100%"
|
v-model="form.birthday"
|
value-format="yyyy-MM-dd"
|
type="date"
|
placeholder="选择日期">
|
</el-date-picker>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="联系电话" prop="phone">
|
<el-input v-model="form.phone"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="职称" prop="title">
|
<!-- <el-select v-model="form.title" placeholder="请选择" style="width: 100%">-->
|
<!-- <el-option-->
|
<!-- v-for="item in professionalList"-->
|
<!-- :key="item.value"-->
|
<!-- :label="item.label"-->
|
<!-- :value="item.value">-->
|
<!-- </el-option>-->
|
<!-- </el-select>-->
|
<el-input v-model="form.title"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="证件照" prop="electronicPhoto">
|
<el-upload
|
action=""
|
:auto-upload="false"
|
:limit="1"
|
accept="image/*,.pdf"
|
:file-list="fileList"
|
list-type="picture-card"
|
:before-upload="beforeAvatarUpload"
|
:on-change="avatorChange"
|
:on-preview="handlePreview"
|
:on-exceed="overLimit"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="身份证号" prop="idCard">
|
<el-input v-model="form.idCard"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="在岗情况" prop="dutyStatus">
|
<el-radio-group v-model="form.dutyStatus">
|
<el-radio :label="0">在岗</el-radio>
|
<el-radio :label="1">退休</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="单位全称" prop="companyName">
|
<el-input v-model="form.companyName"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="单位地址">
|
<el-input v-model="form.companyAddress"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="所在部门">
|
<el-input v-model="form.deptName"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="职务">
|
<el-input v-model="form.job"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="单位电话">
|
<el-input v-model="form.companyTelephone"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="传真号码">
|
<el-input v-model="form.faxNum"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="电子邮箱">
|
<el-input v-model="form.email"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="毕业学校">
|
<el-input v-model="form.graduationSchool"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="最高学历" prop="degree">
|
<el-input v-model="form.degree"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="所学专业">
|
<el-input v-model="form.speciality"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="现从事的专业及方向">
|
<el-input v-model="form.currentProfession"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="支撑方向_安全生产" prop="supportDirectionSafety">
|
<!-- <el-radio-group v-model="form.supportDirectionSafety">-->
|
<!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
|
<!-- </el-radio-group>-->
|
<el-checkbox-group v-model="form.supportDirectionSafety">
|
<el-checkbox v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
|
</el-checkbox-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="支撑方向_防灾减灾救灾" prop="supportDirectionPrevention">
|
<!-- <el-radio-group v-model="form.supportDirectionPrevention">-->
|
<!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
|
<!-- </el-radio-group>-->
|
<el-checkbox-group v-model="form.supportDirectionPrevention">
|
<el-checkbox v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
|
</el-checkbox-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="支撑方向_应急救援" prop="supportDirectionEmergency">
|
<!-- <el-radio-group v-model="form.supportDirectionEmergency">-->
|
<!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
|
<!-- </el-radio-group>-->
|
<el-checkbox-group v-model="form.supportDirectionEmergency">
|
<el-checkbox v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
|
</el-checkbox-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="工作简历">
|
<el-upload
|
action="#"
|
:auto-upload="false"
|
accept="image/*,.pdf"
|
:file-list="resumeList"
|
list-type="picture-card"
|
:before-upload="beforeAvatarUpload"
|
:on-change="resumeChange"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="发明、著作、学术论文情况(何时、何地出版或发表)">
|
<el-upload
|
action=""
|
:auto-upload="false"
|
accept="image/*,.pdf"
|
list-type="picture-card"
|
:file-list="inventionList"
|
:before-upload="beforeAvatarUpload"
|
:on-change="inventChange"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="受过何种奖励">
|
<el-upload
|
action=""
|
:auto-upload="false"
|
accept="image/*,.pdf"
|
list-type="picture-card"
|
:file-list="rewardList"
|
:before-upload="beforeAvatarUpload"
|
:on-change="rewardChange"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="应急管理相关工作主要业绩及研究成果">
|
<el-upload
|
action=""
|
:auto-upload="false"
|
accept="image/*,.pdf"
|
list-type="picture-card"
|
:file-list="achievementList"
|
:on-change="achieveChange"
|
:before-upload="beforeAvatarUpload"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="专家本人意见">
|
<el-upload
|
action=""
|
:auto-upload="false"
|
accept="image/*,.pdf"
|
list-type="picture-card"
|
:file-list="proAdviceList"
|
:on-change="proChange"
|
:before-upload="beforeAvatarUpload"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="推荐单位意见">
|
<el-upload
|
action=""
|
:auto-upload="false"
|
accept="image/*,.pdf"
|
list-type="picture-card"
|
:file-list="adviceList"
|
:on-change="adviceChange"
|
:before-upload="beforeAvatarUpload"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="补充说明">
|
<el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 2}"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
|
<el-button type="primary" @click="submit()">提交</el-button>
|
</div>
|
<el-dialog :visible.sync="dialogVisible">
|
<img width="100%" :src="dialogImageUrl" alt="">
|
</el-dialog>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form'
|
import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
|
export default {
|
name: "Index",
|
data() {
|
var validatePass = (rule, value, callback) => {
|
if (this.fileList.length == 0) {
|
callback(new Error('请上传证件照'));
|
} else {
|
callback();
|
}
|
}
|
let validatePhone = (rule, value, callback)=>{
|
if(value === ''){
|
callback(new Error('请输入手机号'))
|
}else{
|
if(!verifySimplePhone(value)){
|
callback(new Error('手机号格式有误'))
|
}else{
|
callback()
|
}
|
}
|
}
|
let verifyId = (rule, value, callback)=>{
|
if(value === ''){
|
callback(new Error('请输入身份证号'))
|
}else{
|
if(!verifyIdCard(value)){
|
callback(new Error('身份证号格式有误'))
|
}else{
|
callback()
|
}
|
}
|
}
|
return {
|
labelPosition: 'right',
|
form:{
|
name:'',
|
sex:'',
|
profession: [],
|
bigClassify:null,
|
smallClassify: null,
|
birthday: '',
|
phone:'',
|
title: '',
|
electronicPhoto: '',
|
idCard: '',
|
dutyStatus: null,
|
companyName: '',
|
companyAddress: '',
|
deptName: '',
|
job: '',
|
companyTelephone: '',
|
faxNum: '',
|
email: '',
|
graduationSchool: '',
|
degree: '',
|
speciality: '',
|
currentProfession: '',
|
supportDirectionSafety: [],
|
supportDirectionPrevention: [],
|
supportDirectionEmergency: [],
|
resumeKey: '',
|
paperSituationKey: '',
|
rewardKey: '',
|
achievementKey: '',
|
personalOpinionKey: '',
|
recommendUnitOpinionKey: '',
|
remark: '',
|
source: 1
|
},
|
expertsType: [],
|
directionList: [
|
{
|
value: 1,
|
label: '现场检查'
|
},
|
{
|
value: 2,
|
label: '调查评估'
|
},
|
{
|
value: 3,
|
label: '咨询服务'
|
},
|
{
|
value: 4,
|
label: '教育培训'
|
},
|
{
|
value: 5,
|
label: '其他'
|
}
|
],
|
fileList: [],
|
resumeList: [],
|
inventionList: [],
|
rewardList: [],
|
achievementList: [],
|
proAdviceList: [],
|
adviceList: [],
|
dialogImageUrl: '',
|
dialogVisible: false,
|
rules:{
|
name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
|
sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
|
profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
|
birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
|
phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
|
title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
|
electronicPhoto: [{ required: true,validator: validatePass, trigger: 'blur' }],
|
idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
|
dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
|
companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
|
degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }],
|
supportDirectionSafety: [{ required: true, message: '请选择支撑方向', trigger: 'blur' }],
|
supportDirectionPrevention: [{ required: true, message: '请选择支撑方向', trigger: 'blur' }],
|
supportDirectionEmergency: [{ required: true, message: '请选择支撑方向', trigger: 'blur' }]
|
},
|
};
|
},
|
created() {
|
const t = this
|
const width = document.documentElement.clientWidth
|
if(width < 750){t.labelPosition = 'top'}
|
t.getExpertsType()
|
},
|
methods: {
|
async getExpertsType(){
|
const res = await getExpertTypes()
|
if(res.code == 200){
|
this.expertsType = res.data
|
}else{
|
this.$message({
|
type: 'warning',
|
message: res.msg
|
});
|
}
|
},
|
|
professionChange(value) {
|
console.log(value,'val')
|
},
|
avatorChange(file, fileList) {
|
this.fileList = fileList;
|
},
|
resumeChange(file, fileList) {
|
this.resumeList = fileList;
|
},
|
inventChange(file, fileList){
|
this.inventionList = fileList;
|
},
|
rewardChange(file, fileList){
|
this.rewardList= fileList;
|
},
|
achieveChange(file, fileList){
|
this.achievementList= fileList;
|
},
|
proChange(file, fileList){
|
this.proAdviceList= fileList;
|
},
|
adviceChange(file, fileList){
|
this.adviceList= fileList;
|
},
|
overLimit(){
|
this.$message({
|
type: 'warning',
|
message: '超出文件上传数量'
|
});
|
},
|
handlePreview(file) {
|
this.dialogImageUrl = file.url;
|
this.dialogVisible = true;
|
},
|
beforeAvatarUpload(file) {
|
const isLt5M = file.size / 1024 / 1024 < 5;
|
if (!isLt5M) {
|
this.$message.error('上传头像图片大小不能超过 5MB!');
|
}
|
return isLt5M;
|
},
|
async submitUpload() {
|
const t = this;
|
// 创建一个数组来存储所有上传操作的 Promise
|
const uploadPromises = [];
|
// 定义一个函数来上传文件并将结果存入 resumeLink 数组
|
async function uploadAndCollect(fileList, type) {
|
if (fileList.length > 0) {
|
const resumeLink = [];
|
for (const file of fileList) {
|
const formData = new FormData();
|
formData.append("file", file.raw);
|
formData.append("module", 'expertPath');
|
|
const res = await uploadFile(formData);
|
if (res.code === 200) {
|
resumeLink.push(res.data[0].fileKey);
|
} else {
|
this.$message.error('图片上传出错!');
|
}
|
}
|
// 将收集到的文件链接设置到 this.form 中
|
if (type == '证件照') { t.form.electronicPhoto = resumeLink.join(',')}
|
if (type == '工作简历') { t.form.resumeKey = resumeLink.join(',')}
|
if (type == '发明著作') { t.form.paperSituationKey = resumeLink.join(',')}
|
if (type == '奖励') { t.form.rewardKey = resumeLink.join(',') }
|
if (type == '成果') { t.form.achievementKey = resumeLink.join(',')}
|
if (type == '专家意见') { t.form.personalOpinionKey = resumeLink.join(',') }
|
if (type == '推荐意见') { t.form.recommendUnitOpinionKey = resumeLink.join(',') }
|
return resumeLink;
|
}
|
return [];
|
}
|
// 依次执行上传操作并等待完成
|
uploadPromises.push(uploadAndCollect(t.fileList, '证件照'));
|
uploadPromises.push(uploadAndCollect(t.resumeList, '工作简历'));
|
uploadPromises.push(uploadAndCollect(t.inventionList,'发明著作'));
|
uploadPromises.push(uploadAndCollect(t.rewardList,'奖励'));
|
uploadPromises.push(uploadAndCollect(t.achievementList,'成果'));
|
uploadPromises.push(uploadAndCollect(t.proAdviceList,'专家意见'));
|
uploadPromises.push(uploadAndCollect(t.adviceList,'推荐意见'));
|
// 等待所有上传操作完成
|
await Promise.all(uploadPromises);
|
// 打印已更新的 this.form
|
console.log(t.form, 'form1');
|
},
|
handleRemove(file, fileList) {
|
console.log(file, fileList);
|
},
|
async submit(){
|
this.$refs["ruleForm"].validate(async(valid) =>{
|
if(valid) {
|
await this.submitUpload()
|
let data = this.form
|
data.supportDirectionSafety = data.supportDirectionSafety.join(',')
|
data.supportDirectionPrevention = data.supportDirectionPrevention.join(',')
|
data.supportDirectionEmergency = data.supportDirectionEmergency.join(',')
|
data.bigClassify = data.profession[0]
|
data.smallClassify = data.profession[1]
|
delete data.profession
|
const res= await addExpertInfo(data)
|
console.log(res,'res')
|
if(res.code == 200){
|
this.$message({
|
type:'success',
|
message: res.msg
|
})
|
this.$refs.ruleForm.resetFields()
|
this.fileList = []
|
this.resumeList = []
|
this.inventionList = []
|
this.rewardList = []
|
this.achievementList = []
|
this.proAdviceList = []
|
this.adviceList = []
|
}else{
|
this.$message({
|
type:'warning',
|
message: res.msg
|
})
|
}
|
}else{
|
this.$message({
|
type:'warning',
|
message:'请完善必填信息'
|
})
|
}
|
})
|
},
|
changeSource(num){
|
this.form.source = num
|
}
|
}
|
};
|
</script>
|
|
<style scoped lang="scss">
|
.home {
|
.main-title{
|
font-size: 24px;
|
font-weight: bolder;
|
text-align: center;
|
margin-bottom: 20px;
|
color: #333;
|
}
|
blockquote {
|
padding: 10px 20px;
|
margin: 0 0 20px;
|
font-size: 17.5px;
|
border-left: 5px solid #eee;
|
}
|
hr {
|
margin-top: 20px;
|
margin-bottom: 20px;
|
border: 0;
|
border-top: 1px solid #eee;
|
}
|
.col-item {
|
margin-bottom: 20px;
|
}
|
|
ul {
|
padding: 0;
|
margin: 0;
|
}
|
|
font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
font-size: 13px;
|
color: #676a6c;
|
overflow-x: hidden;
|
|
ul {
|
list-style-type: none;
|
}
|
|
h4 {
|
margin-top: 0px;
|
}
|
|
h2 {
|
margin-top: 10px;
|
font-size: 26px;
|
font-weight: 100;
|
}
|
|
p {
|
margin-top: 10px;
|
|
b {
|
font-weight: 700;
|
}
|
}
|
|
.update-log {
|
ol {
|
display: block;
|
list-style-type: decimal;
|
margin-block-start: 1em;
|
margin-block-end: 1em;
|
margin-inline-start: 0;
|
margin-inline-end: 0;
|
padding-inline-start: 40px;
|
}
|
}
|
}
|
.avatar-uploader .el-upload {
|
border: 1px dashed #d9d9d9;
|
border-radius: 6px;
|
cursor: pointer;
|
position: relative;
|
overflow: hidden;
|
}
|
.avatar-uploader .el-upload:hover {
|
border-color: #409EFF;
|
}
|
.avatar-uploader-icon {
|
font-size: 28px;
|
color: #8c939d;
|
width: 178px;
|
height: 178px;
|
line-height: 178px;
|
text-align: center;
|
}
|
.avatar {
|
width: 178px;
|
height: 178px;
|
display: block;
|
}
|
</style>
|