<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="男">男</el-radio>
|
<el-radio label="女">女</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="certNum">
|
<el-input v-model="form.certNum" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="资格类型" prop="personTypeName">
|
<el-input v-model="form.personTypeName" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="作业类别" prop="jobTypeName">
|
<el-input v-model="form.jobTypeName" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="操作项目" prop="operItemName">
|
<el-input v-model="form.operItemName" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="初领日期" prop="firstCertDate">
|
<el-input v-model="form.firstCertDate" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="发证日期" prop="createTime">
|
<el-input v-model="form.createTime" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="有效期从" prop="validBeginDate">
|
<el-input v-model="form.validBeginDate" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="有效期至" prop="validEndDate">
|
<el-input v-model="form.validEndDate" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="复审期" prop="shouldReviewDate">
|
<el-input v-model="form.shouldReviewDate" :readonly="disable"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="图片查看" prop="imgPath">
|
<el-image
|
style="width: 100px; height: 100px"
|
:src="imgPath"
|
fit="fill"></el-image>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</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: "nCertificateDialog",
|
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: '',
|
idcardNum: '',
|
certNum: '',
|
personTypeName: '',
|
jobTypeName: '',
|
operItemName: '',
|
firstCertDate: '',
|
createTime: '',
|
validBeginDate: '',
|
validEndDate: '',
|
shouldReviewDate: '',
|
imgPath: ''
|
},
|
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
|
},
|
methods: {
|
openDialog(val,type){
|
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.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>
|