<template>
|
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
|
<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="name">
|
<el-input v-model="form.name" :readonly="disable"></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" :disabled="disable">
|
<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="idCardNum">
|
<el-input v-model="form.idCardNum" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="民族" prop="nationCode">
|
<el-select v-model="form.nationCode" :disabled="disable" placeholder="请选择" style="width: 100%">
|
<el-option
|
v-for="dict in dict.type.sys_nation_code"
|
:key="dict.value"
|
:label="dict.label"
|
:value="dict.value"
|
/>
|
</el-select>
|
</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" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="最高学历" prop="highestEducation">
|
<el-input v-model="form.highestEducation" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="证件照" prop="photoPath">
|
<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>
|
<template v-if="title == '查看人员'">
|
<el-row v-if="form.violationList && form.violationList.length>0">
|
<el-col :span="24">
|
<el-form-item label="违章记录">
|
<el-table :data="form.violationList" border>
|
<el-table-column label="时间" align="center">
|
<template #default="scope">
|
{{scope.row.startTime + '--' + scope.row.endTime}}
|
</template>
|
</el-table-column>
|
<el-table-column label="单位" align="center" prop="unit"/>
|
</el-table>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row v-if="form.resumeList && form.resumeList.length>0">
|
<el-col :span="24">
|
<el-form-item label="个人履历">
|
<el-table :data="form.resumeList" border>
|
<el-table-column label="时间" align="center">
|
<template #default="scope">
|
{{scope.row.startTime + '--' + scope.row.endTime}}
|
</template>
|
</el-table-column>
|
<el-table-column label="单位" align="center" prop="unit"/>
|
</el-table>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row v-if="form.trainList && form.trainList.length>0">
|
<el-col :span="24">
|
<el-form-item label="培训经历">
|
<el-table :data="form.trainList" border>
|
<el-table-column label="培训时间" align="center">
|
<template #default="scope">
|
{{scope.row.startTime + '--' + scope.row.endTime}}
|
</template>
|
</el-table-column>
|
<el-table-column label="培训单位" align="center" prop="trainInstitutionName"/>
|
<el-table-column label="所属批次" align="center" prop="planId"/>
|
<el-table-column label="科目" align="center" prop="subject"/>
|
</el-table>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row v-if="form.examineeList && form.examineeList.length>0">
|
<el-col :span="24">
|
<el-form-item label="考试经历">
|
<el-table :data="form.examineeList" border>
|
<el-table-column label="考试时间" align="center">
|
<template #default="scope">
|
{{scope.row.startTime + '--' + scope.row.endTime}}
|
</template>
|
</el-table-column>
|
<el-table-column label="考试中心" align="center" prop="trainInstitutionName"/>
|
<el-table-column label="科目" align="center" prop="subject"/>
|
<el-table-column label="考试结果" align="center" prop="trainInstitutionName"/>
|
</el-table>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</template>
|
</el-form>
|
<div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
|
<el-button v-if="title == '查看人员'" type="primary" @click="open = false">确认</el-button>
|
<el-button v-else type="primary" @click="submit()">提交</el-button>
|
</div>
|
<el-dialog :visible.sync="dialogVisible">
|
<img width="100%" :src="dialogImageUrl" alt="">
|
</el-dialog>
|
</div>
|
</el-dialog>
|
</template>
|
|
<script>
|
// import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form'
|
// import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
|
export default {
|
name: "peopleDialog",
|
dicts: ['sys_nation_code'],
|
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',
|
title: '新增人员',
|
disable: false,
|
open: false,
|
form:{
|
name: '',
|
sex: null,
|
idCardNum: '',
|
nationCode: null,
|
phone: '',
|
highestEducation: '',
|
photoPath: ''
|
},
|
fileList: [],
|
dialogImageUrl: '',
|
dialogVisible: false,
|
rules:{
|
name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
|
sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
|
idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
|
race: [{ required: true, message: '请选择民族', trigger: 'blur' }],
|
phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
|
degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }],
|
photoPath: [{ required: true,validator: validatePass, trigger: 'blur' }]
|
},
|
};
|
},
|
created() {
|
const t = this
|
const width = document.documentElement.clientWidth
|
if(width < 750){t.labelPosition = 'top'}
|
},
|
methods: {
|
openDialog(val,type){
|
const width = document.documentElement.clientWidth
|
if(width < 750){this.labelPosition = 'top'}
|
if(type == 'add'){
|
this.title = '新增人员'
|
this.disable = false
|
}else{
|
if(type == 'edit'){
|
this.title = '编辑人员'
|
this.disable = false
|
}else{
|
this.title = '查看人员'
|
this.disable = true
|
}
|
// this.form = val
|
for(let i in val){
|
if(this.isValidKey(i,this.form)){
|
this.form[i] = val[i]
|
}
|
}
|
this.form.sex = Number(this.form.sex)
|
}
|
this.open = true
|
},
|
isValidKey(key,obj){
|
return key in obj
|
},
|
|
async getExpertsType(){
|
const res = await getExpertTypes()
|
if(res.code == 200){
|
this.expertsType = res.data
|
}else{
|
this.$message({
|
type: 'warning',
|
message: res.msg
|
});
|
}
|
},
|
avatorChange(file, fileList) {
|
this.fileList = 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.photoPath = resumeLink.join(',')}
|
return resumeLink;
|
}
|
return [];
|
}
|
// 依次执行上传操作并等待完成
|
uploadPromises.push(uploadAndCollect(t.fileList, '证件照'));
|
// 等待所有上传操作完成
|
await Promise.all(uploadPromises);
|
// 打印已更新的 this.form
|
console.log(t.form, 'form1');
|
},
|
handleRemove(file, fileList) {
|
console.log(file, fileList);
|
},
|
async submit(){
|
if(this.form.supportDirectionSafety.length == 0 && this.form.supportDirectionPrevention.length == 0 && this.form.supportDirectionEmergency.length == 0){
|
this.$message({
|
type:'warning',
|
message: '请至少选择一种支撑方向'
|
})
|
return
|
}
|
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)
|
if(res.code == 200){
|
this.$message({
|
type:'success',
|
message: res.msg
|
})
|
this.$emit('closeDialog')
|
this.$refs.ruleForm.resetFields()
|
this.fileList = []
|
}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 {
|
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>
|