From 21e03c21386fb124774df48c8bb1fe3b185dbb48 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Sat, 07 Oct 2023 14:56:23 +0800
Subject: [PATCH] 新增接口页面
---
src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue | 472 +++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 312 insertions(+), 160 deletions(-)
diff --git a/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue b/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue
index a17417d..f18dc0d 100644
--- a/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue
+++ b/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue
@@ -5,14 +5,14 @@
<el-row>
<el-col :span="20">
<el-form-item label="姓名" prop="name">
- <el-input v-model="form.name"></el-input>
+ <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">
+ <el-radio-group v-model="form.sex" :disabled="disable">
<el-radio :label="0">男</el-radio>
<el-radio :label="1">女</el-radio>
</el-radio-group>
@@ -21,40 +21,48 @@
</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 label="身份证号" prop="code">
+ <el-input v-model="form.code" :readonly="disable"></el-input>
</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 label="联系电话" prop="mobilePhone">
+ <el-input v-model="form.mobilePhone" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="职称" prop="title">
- <el-input v-model="form.title"></el-input>
+ <el-form-item label="职称" prop="jobTitle">
+ <el-input v-model="form.jobTitle" :readonly="disable"></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 label="最高学历" prop="eduLevel">
+ <el-select v-model="form.eduLevel" placeholder="请选择" style="width: 100%" :disabled="disable">
+ <el-option
+ v-for="dict in dict.type.sys_highest_education_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="birthday">
+ <el-form-item label="资质到期" prop="expiredTime">
<el-date-picker
style="width: 100%"
- v-model="form.birthday"
+ v-model="form.expiredTime"
value-format="yyyy-MM-dd"
type="date"
+ :disabled="disable"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
@@ -62,10 +70,10 @@
</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-form-item label="在职情况" prop="status">
+ <el-radio-group v-model="form.status" :disabled="disable">
+ <el-radio label="0">正常</el-radio>
+ <el-radio label="1">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -73,17 +81,18 @@
<el-row>
<el-col :span="20">
<el-form-item label="描述">
- <el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 2}"></el-input>
+ <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 2}" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="证件照">
+ <el-form-item label="证件照" prop="photoAttachment">
<el-upload
+ :disabled="disable"
action="#"
multiple
- :limit="20"
+ :limit="1"
:on-exceed="overLimit"
:auto-upload="false"
accept="image/*,.pdf"
@@ -92,7 +101,7 @@
:before-upload="beforeAvatarUpload"
:on-change="resumeChange"
:on-preview="handlePreview"
- :on-remove="handleRemove">
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'证件照')">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
@@ -100,11 +109,12 @@
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="资质">
+ <el-form-item label="资质" prop="qaAttachment">
<el-upload
+ :disabled="disable"
action=""
multiple
- :limit="20"
+ :limit="1"
:on-exceed="overLimit"
:auto-upload="false"
accept="image/*,.pdf"
@@ -113,32 +123,85 @@
:before-upload="beforeAvatarUpload"
:on-change="inventChange"
:on-preview="handlePreview"
- :on-remove="handleRemove">
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'资质')">
<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="operateTypes">
+ <el-table :data="form.operateTypes" border>
+ <el-table-column label="序号" type="index" align="center"/>
+ <el-table-column label="资格类型" align="center" prop="qualificationType" />
+ <el-table-column label="作业类别" align="center" prop="jobCategory" />
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="disable == false">
+ <template #default="scope">
+<!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="openEdit(scope.row,'edit')">编辑</el-button>-->
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="deleteItem(scope.index)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button v-if="disable == false" @click="openEdit({},'add')" style="margin-top: 15px">新增</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
</el-form>
- <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center" v-if="disable == false">
<el-button type="primary" @click="submit()">提交</el-button>
</div>
- <el-dialog :visible.sync="dialogVisible">
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
<img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ <el-dialog :title="dialogTitle" :visible.sync="addVisible" width="50%" append-to-body>
+ <el-form :model="addForm" :rules="addRules" ref="addRuleForm" label-width="200px">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资格类型" prop="operate">
+ <el-cascader
+ v-model="addForm.operate"
+ :options="typeList"
+ style="width: 100%"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>
+ </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="submitAdd()">提交</el-button>
+ </div>
</el-dialog>
</div>
</el-dialog>
</template>
<script>
-// import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form'
import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {addTeacher, editTeacher, uploadFile} from "@/api/coalMine/teacher";
export default {
name: "teacherDialog",
+ dicts: ['sys_highest_education_code'],
data() {
- var validatePass = (rule, value, callback) => {
- if (this.fileList.length == 0) {
+ // let validateTypes = (rule, value, callback) => {
+ // if (this.form.operateTypes.length == 0) {
+ // callback(new Error('请添加工种详情'));
+ // } else {
+ // callback();
+ // }
+ // }
+ let validateResume = (rule, value, callback) => {
+ if (this.resumeList.length == 0) {
callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ }
+ let validateCert = (rule, value, callback) => {
+ if (this.inventionList.length == 0) {
+ callback(new Error('请上传资质证书'));
} else {
callback();
}
@@ -168,94 +231,91 @@
return {
title: '新增教师',
open: false,
+ disable: false,
labelPosition: 'right',
form:{
+ id: null,
+ isCm: '0',
name:'',
sex:'',
- profession: [],
- bigClassify:null,
- smallClassify: null,
- birthday: '',
- phone:'',
- title: '',
- idCard: '',
- dutyStatus: null,
- companyName: '',
- companyAddress: '',
- deptName: '',
- job: '',
- companyTelephone: '',
- faxNum: '',
- email: '',
- graduationSchool: '',
- degree: '',
- speciality: '',
- currentProfession: '',
- supportDirectionSafety: [],
- supportDirectionPrevention: [],
- supportDirectionEmergency: [],
- resumeKey: '',
- paperSituationKey: '',
- remark: '',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
},
- expertsType: [],
- directionList: [
- {
- value: 1,
- label: '现场检查'
- },
- {
- value: 2,
- label: '调查评估'
- },
- {
- value: 3,
- label: '咨询服务'
- },
- {
- value: 4,
- label: '教育培训'
- },
- {
- value: 5,
- label: '其他'
- }
- ],
resumeList: [],
inventionList: [],
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' }]
+ dialogTitle: '新增',
+ addVisible: false,
+ addForm: {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
},
+ typeList: [],
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur'}],
+ sex:[{ required: true, message: '请选择性别', trigger: 'blur'}],
+ code:[{ required: true, validator: verifyId, trigger: 'blur' }],
+ mobilePhone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ // code:[{ required: true, message: '请填写身份证号', trigger: 'blur'}],
+ // mobilePhone:[{ required: true, message: '请填写联系方式', trigger: 'blur'}],
+ jobTitle: [{ required: true, message: '请填写职称', trigger: 'blur'}],
+ eduLevel: [{ required: true, message: '请选择最高学历', trigger: 'blur'}],
+ expiredTime: [{ required: true, message: '请选择到期时间', trigger: 'blur'}],
+ status: [{ required: true, message: '请选择在岗情况', trigger: 'blur'}],
+ // operateTypes: [{ required: true,validator: validateTypes, trigger: 'blur' }],
+ photoAttachment: [{ required: true,validator: validateResume, trigger: 'blur'}],
+ qaAttachment: [{ required: true,validator: validateCert, trigger: 'blur'}]
+ },
+ addRules:{
+ operate:[{ required: true, message: '请选择', 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'}
+ this.resumeList = []
+ this.inventionList = []
if(type == 'add'){
this.title = '新增教师'
+ this.disable = false
+ this.form = {
+ id: null,
+ isCm: '0',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ }
}else{
if(type == 'edit'){
this.title = '编辑教师'
+ this.disable = false
}else{
this.title = '查看教师'
+ this.disable = true
}
if(val){
for(let i in val){
@@ -264,29 +324,150 @@
}
}
}
+ this.form.sex = Number(this.form.sex)
+ // 仅限单张图片处理
+ this.form.photoAttachment = val.photoAttachment.id
+ this.form.qaAttachment = val.qaAttachment.id
+ this.resumeList.push({
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ })
+ this.inventionList.push({
+ name: val.qaAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.qaAttachment.fileUrl
+ })
+ if(!this.form.operateTypes){
+ this.form.operateTypes = []
+ }
+ console.log(this.form,'form')
}
this.open = true
},
+
isValidKey(key,obj){
return key in obj
},
+ openEdit(data,type){
+ this.getList()
+ if(type == 'add'){
+ this.dialogTitle = '新增'
+ this.addVisible = true
+ this.addForm = {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ }
+ }else{
- async getExpertsType(){
- const res = await getExpertTypes()
+ }
+ },
+ async submitUpload() {
+ const { resumeList, inventionList, form } = this;
+ const uploadAndCollect = async (fileList, type) => {
+ if (fileList.length > 0 && fileList.find((file)=>file.raw)) {
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+ try {
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ if (type === '证件照') {
+ form.photoAttachment = res.data.id;
+ }
+ if (type === '资质') {
+ form.qaAttachment = res.data.id;
+ }
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ } catch (error) {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ }else{
+ return
+ }
+ };
+ const uploadPromises = [
+ uploadAndCollect(resumeList, '证件照'),
+ uploadAndCollect(inventionList, '资质')
+ ];
+ try {
+ await Promise.all(uploadPromises);
+ console.log(form, 'form1');
+ } catch (error) {
+ console.error('上传出错:', error);
+ }
+ },
+
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增教师'){
+ const {id,...data} = this.form
+ const res= await addTeacher(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.resumeList = []
+ this.inventionList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editTeacher(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ deleteItem(index){
+ this.form.operateTypes.splice(index,1);
+ },
+ async getList() {
+ this.loading = true;
+ const res = await getOperatePage({name: ''})
if(res.code == 200){
- this.expertsType = res.data
+ this.typeList = this.handleTree(res.data, "id");
}else{
this.$message({
type: 'warning',
message: res.msg
});
}
+ this.loading = false;
},
- avatorChange(file, fileList) {
- this.fileList = fileList;
- },
resumeChange(file, fileList) {
this.resumeList = fileList;
},
@@ -310,71 +491,31 @@
}
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.resumeKey = resumeLink.join(',')}
- if (type == '发明著作') { t.form.paperSituationKey = resumeLink.join(',')}
- return resumeLink;
- }
- return [];
+ handleRemove(file,fileList,type) {
+ if(type == '证件照'){
+ this.resumeList = fileList
+ }else{
+ this.inventionList = fileList
}
- // 依次执行上传操作并等待完成
- uploadPromises.push(uploadAndCollect(t.resumeList, '工作简历'));
- uploadPromises.push(uploadAndCollect(t.inventionList,'发明著作'));
- // 等待所有上传操作完成
- 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) =>{
+ async submitAdd(){
+ this.$refs["addRuleForm"].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.resumeList = []
- this.inventionList = []
- }else{
- this.$message({
- type:'warning',
- message: res.msg
- })
+ if(this.addForm.operate.length == 2){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operateTypeId = this.addForm.operate[1]
}
+ if(this.addForm.operate.length == 3){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operationItems = this.findNameById(this.typeList,this.addForm.operate[2])
+ this.addForm.operateTypeId = this.addForm.operate[2]
+ }
+ const {operate,...obj} = this.addForm
+ this.form.operateTypes.push(obj)
+ this.addVisible = false
}else{
this.$message({
type:'warning',
@@ -383,8 +524,19 @@
}
})
},
- changeSource(num){
- this.form.source = num
+ findNameById(data,id){
+ for(const node of data){
+ if(node.id == id){
+ return node.name
+ }
+ if(node.children){
+ const foundName = this.findNameById(node.children,id)
+ if(foundName){
+ return foundName
+ }
+ }
+ }
+ return null
}
}
};
--
Gitblit v1.9.2