From cc3e08bda13360c88b7189e8f8d043b60783c7fb Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Thu, 21 Nov 2024 16:46:32 +0800
Subject: [PATCH] 新增
---
src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue | 348 +++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 224 insertions(+), 124 deletions(-)
diff --git a/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue b/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
index 5e88339..59cf27e 100644
--- a/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
+++ b/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
@@ -12,29 +12,29 @@
<el-form :model="state.form" :rules="state.rules" ref="ruleFormRef" label-width="200px">
<el-row>
<el-col :span="20">
- <el-form-item label="专业类别" prop="profession">
+ <el-form-item label="专业类别" prop="domain">
<el-cascader
:disabled="state.disable"
style="width: 100%"
- v-model="state.form.profession"
+ v-model="state.form.domain"
:options="state.expertsType"
- :props="{ expandTrigger: 'hover',value: 'id',label: 'classifyName' }"
+ :props="{ expandTrigger: 'hover',value: 'classifyName',label: 'classifyName',emitPath: false }"
@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="deptId">
+ <el-cascader
+ style="width: 100%"
+ clearable
+ v-model="state.form.deptId"
+ :options="state.deptList"
+ :props="{ expandTrigger: 'hover', value: 'deptId',label: 'deptName',emitPath: false}"></el-cascader>
+ </el-form-item>
+ </el-col>
+ </el-row>
<el-row>
<el-col :span="20">
<el-form-item label="姓名" prop="name">
@@ -58,7 +58,7 @@
<el-date-picker
style="width: 100%"
v-model="state.form.birthday"
- value-format="YYYY-MM-DD 00:00:00"
+ value-format="YYYY-MM-DD"
type="date"
placeholder="选择日期" :disabled="state.disable">
</el-date-picker>
@@ -310,7 +310,39 @@
</el-row>
</el-form>
<el-dialog v-model="imgDialog">
- <img w-full :src="state.dialogImageUrl" alt="">
+ <img style="width: 100%" w-full :src="state.dialogImageUrl" alt="">
+ </el-dialog>
+ <el-dialog
+ v-model="state.assessDialog"
+ title="评定详情"
+ width="50%"
+ :before-close="closeAssess"
+ >
+ <el-form :model="state.assessForm" :rules="state.assessRules" ref="assessFormRef" label-width="200px">
+ <el-form-item label="专家聘用期限" prop="employTime">
+ <el-date-picker
+ v-model="state.assessForm.employTime"
+ type="daterange"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ value-format="YYYY-MM-DD"
+ />
+ </el-form-item>
+ <el-form-item label="专家评定等级" prop="ratingLevel">
+ <el-radio-group v-model="state.assessForm.ratingLevel">
+ <el-radio label="1">一级</el-radio>
+ <el-radio label="2">二级</el-radio>
+ <el-radio label="3">三级</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="closeAssess" size="default">取 消</el-button>
+ <el-button type="primary" @click="assessSubmit(assessFormRef)" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
</el-dialog>
</div>
<template #footer>
@@ -319,25 +351,29 @@
<el-button type="primary" @click="onSubmit(ruleFormRef)" size="default" v-preReClick>确认</el-button>
</span>
<span class="dialog-footer" v-if="state.title == '评定'">
- <el-button type="danger" size="default" @click="assess(3)" v-preReClick>评定驳回</el-button>
- <el-button type="primary" @click="assess(2)" size="default" v-preReClick>评定通过</el-button>
+ <el-button type="danger" size="default" @click="startAssess(3)" v-preReClick>评定驳回</el-button>
+ <el-button type="primary" @click="startAssess(2)" size="default" v-preReClick>评定通过</el-button>
</span>
</template>
</el-dialog>
+
</div>
</template>
<script setup>
-import {reactive, ref, toRefs, defineEmits, nextTick, onMounted} from 'vue'
+import {reactive, ref, toRefs, defineEmits, nextTick, onMounted, getCurrentInstance} from 'vue'
import {ElMessage, ElMessageBox} from "element-plus"
import {verifyPhone, verifyIdCard} from "../../../../../utils/validate"
import {addExpertInfo, getExpertTypes, getInfo, modExpertInfo, uploadFile, changeApprove} from "@/api/form"
import {delPic} from "@/api/login"
import { getToken } from "@/utils/auth"
import {Base64} from "js-base64"
+import {listOutDept} from "@/api/system/dept";
const emit = defineEmits(["getList"])
const dialogVisible = ref(false)
const imgDialog = ref(false)
const ruleFormRef = ref()
+const assessFormRef = ref()
+const { proxy } = getCurrentInstance()
var validatePass = (rule, value, callback) => {
if (state.fileList.length == 0) {
callback(new Error('请上传证件照'));
@@ -369,13 +405,13 @@
}
const state = reactive({
+ assessDialog: false,
form:{
id: null,
name:'',
sex:'',
- profession: [],
- bigClassify:null,
- smallClassify: null,
+ domain: '',
+ deptId: null,
birthday: '',
phone:'',
title: '',
@@ -405,9 +441,14 @@
remark: '',
source: 2
},
+ assessForm: {
+ employTime: [],
+ ratingLevel: ''
+ },
hasDeleteFile: false,
disable: false,
expertsType: [],
+ deptList: [],
directionList: [
{
value: 1,
@@ -430,7 +471,7 @@
label: '其他'
}
],
- uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
+ uploadUrl: import.meta.env.VITE_APP_BASE_API + '/common/upload',
header: {
Authorization: 'Bearer ' + getToken()
},
@@ -445,7 +486,8 @@
rules:{
name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
- profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
+ domain: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
+ deptId: [{ required: true, message: '请选择业务处室', trigger: 'blur' }],
birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
@@ -454,6 +496,10 @@
dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }]
+ },
+ assessRules:{
+ employTime: [{ required: true, message: '请选择聘用期限', trigger: 'blur' }],
+ ratingLevel: [{ required: true, message: '请选择评定等级', trigger: 'blur' }]
}
})
@@ -463,98 +509,113 @@
const openDialog = (type, value) => {
state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='view' ?'查看':'评定'
getExpertsType()
- if(type == 'edit'||type=='view'||type=='assess'){
- getInfo(value.id).then((res)=>{
- if(res.code == 200){
- if(res.data) {
- const val = res.data
- for(let i in state.form) {
- if (validKey(i, val)) {
- state.form[i] = val[i]
- }
- }
- state.form.profession[0] = val.bigClassify
- state.form.profession[1] = val.smallClassify
- if(val.supportDirectionSafety){
- state.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i=>Number(i))
- }
- if(val.supportDirectionPrevention){
- state.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i=>Number(i))
- }
- if(val.supportDirectionEmergency){
- state.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i=>Number(i))
- }
- state.fileList.push({
- name: state.form.electronicPhoto,
- url: import.meta.env.VITE_APP_BASE_API + '/' + state.form.electronicPhoto,
- })
- if(state.form.resumeKey !== ''){
- state.resumeList = state.form.resumeKey.split(',').map(i=>{
- return {
- name: i,
- url: import.meta.env.VITE_APP_BASE_API + '/' + i,
- }
- })
- }
- if(state.form.paperSituationKey !== ''){
- state.inventionList = state.form.paperSituationKey.split(',').map(i=>{
- return {
- name: i,
- url: import.meta.env.VITE_APP_BASE_API + '/' + i,
- }
- })
- }
- if(state.form.rewardKey !== ''){
- state.rewardList = state.form.rewardKey.split(',').map(i=>{
- return {
- name: i,
- url: import.meta.env.VITE_APP_BASE_API + '/' + i,
- }
- })
- }
- if(state.form.achievementKey !== ''){
- state.achievementList = state.form.achievementKey.split(',').map(i=>{
- return {
- name: i,
- url: import.meta.env.VITE_APP_BASE_API + '/' + i,
- }
- })
- }
- if(state.form.personalOpinionKey !== ''){
- state.proAdviceList = state.form.personalOpinionKey.split(',').map(i=>{
- return {
- name: i,
- url: import.meta.env.VITE_APP_BASE_API + '/' + i,
- }
- })
- }
- if(state.form.recommendUnitOpinionKey !== ''){
- state.adviceList = state.form.recommendUnitOpinionKey.split(',').map(i=>{
- return {
- name: i,
- url: import.meta.env.VITE_APP_BASE_API + '/' + i,
- }
- })
+ getDepList()
+ state.fileList = []
+ if(type == 'edit'||type=='view'||type=='assess'){
+ getInfo(value.id).then((res)=>{
+ if(res.code == 200){
+ if(res.data) {
+ const val = res.data
+ for(let i in state.form) {
+ if (validKey(i, val)) {
+ state.form[i] = val[i]
}
}
- dialogVisible.value = true
- }else{
- ElMessage.warning('数据获取失败:'+res.message)
+ if(val.supportDirectionSafety && val.supportDirectionSafety!==''){
+ state.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i=>Number(i))
+ }else{
+ state.form.supportDirectionSafety = []
+ }
+ if(val.supportDirectionPrevention && val.supportDirectionPrevention!==''){
+ state.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i=>Number(i))
+ }else{
+ state.form.supportDirectionPrevention = []
+ }
+ if(val.supportDirectionEmergency && val.supportDirectionEmergency!==''){
+ state.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i=>Number(i))
+ }else{
+ state.form.supportDirectionEmergency = []
+ }
+ state.fileList.push({
+ name: state.form.electronicPhoto,
+ url: state.form.electronicPhoto,
+ })
+ if(state.form.resumeKey !== ''){
+ state.resumeList = state.form.resumeKey.split(',').map(i=>{
+ return {
+ name: i,
+ url: i,
+ }
+ })
+ }
+ if(state.form.paperSituationKey !== ''){
+ state.inventionList = state.form.paperSituationKey.split(',').map(i=>{
+ return {
+ name: i,
+ url: i,
+ }
+ })
+ }
+ if(state.form.rewardKey !== ''){
+ state.rewardList = state.form.rewardKey.split(',').map(i=>{
+ return {
+ name: i,
+ url: i,
+ }
+ })
+ }
+ if(state.form.achievementKey !== ''){
+ state.achievementList = state.form.achievementKey.split(',').map(i=>{
+ return {
+ name: i,
+ url: i,
+ }
+ })
+ }
+ if(state.form.personalOpinionKey !== ''){
+ state.proAdviceList = state.form.personalOpinionKey.split(',').map(i=>{
+ return {
+ name: i,
+ url: i,
+ }
+ })
+ }
+ if(state.form.recommendUnitOpinionKey !== ''){
+ state.adviceList = state.form.recommendUnitOpinionKey.split(',').map(i=>{
+ return {
+ name: i,
+ url: i,
+ }
+ })
+ }
}
- })
- if(type == 'edit'){
- state.disable = false
+ console.log(state.form,'form')
+ dialogVisible.value = true
}else{
- state.disable = true
+ ElMessage.warning('数据获取失败:'+res.msg)
}
- }else{
+ })
+ if(type == 'edit'){
state.disable = false
- dialogVisible.value = true
+ }else{
+ state.disable = true
}
+ }else{
+ state.disable = false
+ dialogVisible.value = true
+ }
}
const validKey=(key,obj)=>{
return key in obj
+ }
+
+ const startAssess = async (num)=>{
+ if(num == 2){
+ state.assessDialog = true
+ }else{
+ await assess(num)
+ }
}
const assess = (num)=>{
@@ -567,18 +628,34 @@
type: 'warning',
})
.then(async() => {
- const res = await changeApprove({id:state.form.id,state: num})
+ let params = {}
+ if(num == 2){
+ params = {
+ id: state.form.id,
+ state: num,
+ employmentDateStart: state.assessForm.employTime[0],
+ employmentDateEnd: state.assessForm.employTime[1],
+ ratingLevel: state.assessForm.ratingLevel
+ }
+ }else{
+ params = {
+ id:state.form.id,
+ state: num
+ }
+ }
+ const res = await changeApprove(params)
if(res.code == 200){
ElMessage({
type: 'success',
message: '审批成功'
});
emit('getList')
+ state.assessDialog = false
dialogVisible.value = false
}else{
ElMessage({
type: 'warning',
- message: res.message
+ message: res.msg
});
}
})
@@ -595,6 +672,12 @@
});
}
}
+
+function getDepList() {
+ listOutDept({}).then(response => {
+ state.deptList = proxy.handleTree(response.data, "deptId",'parentId','children');
+ });
+}
const professionChange=(value)=> {
console.log(value,'val')
@@ -628,9 +711,9 @@
const handleAvatarSuccess = (res, uploadFile,type) => {
if(res.code == 200){
if(type == '证件照'){
- state.form.electronicPhoto = res.data.path
+ state.form.electronicPhoto = res.url
}else{
- uploadFile.name = res.data.path
+ uploadFile.name = res.url
}
}else{
ElMessage({
@@ -641,6 +724,7 @@
}
const handleRemove = (file, uploadFiles,type) => {
+ console.log(file, uploadFiles)
if(file && file.status == 'success') {
ElMessageBox.confirm(
'该操作将永久删除此文件内容,是否继续?',
@@ -667,7 +751,7 @@
} else {
ElMessage({
type: 'warning',
- message: res.message
+ message: res.msg
})
}
})
@@ -683,23 +767,20 @@
return
}
let data = JSON.parse(JSON.stringify(state.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]
+ data.supportDirectionSafety = Array.isArray(data.supportDirectionSafety)?data.supportDirectionSafety.join(','):''
+ data.supportDirectionPrevention = Array.isArray(data.supportDirectionPrevention)?data.supportDirectionPrevention.join(','):''
+ data.supportDirectionEmergency = Array.isArray(data.supportDirectionEmergency)?data.supportDirectionEmergency.join(','):''
data.resumeKey = state.resumeList.map(i=>i.name).join(',')
data.paperSituationKey = state.inventionList.map(i=>i.name).join(',')
data.rewardKey = state.rewardList.map(i=>i.name).join(',')
data.achievementKey = state.achievementList.map(i=>i.name).join(',')
data.personalOpinionKey = state.proAdviceList.map(i=>i.name).join(',')
data.recommendUnitOpinionKey = state.adviceList.map(i=>i.name).join(',')
- delete data.profession
if(state.title == '新增'){
delete data.id
const res= await addExpertInfo(data)
if(res.code == 200){
- ElMessage.success(res.message)
+ ElMessage.success(res.msg)
state.fileList = []
state.resumeList = []
state.inventionList = []
@@ -711,12 +792,12 @@
state.hasDeleteFile = false
dialogVisible.value = false
}else{
- ElMessage.warning(res.message)
+ ElMessage.warning(res.msg)
}
}else{
const res= await modExpertInfo(data)
if(res.code == 200){
- ElMessage.success(res.message)
+ ElMessage.success(res.msg)
state.fileList = []
state.resumeList = []
state.inventionList = []
@@ -728,13 +809,33 @@
state.hasDeleteFile = false
dialogVisible.value = false
}else{
- ElMessage.warning(res.message)
+ ElMessage.warning(res.msg)
}
}
} else {
ElMessage.warning('请完善必填信息')
}
})
+}
+
+const assessSubmit = async (formEl)=> {
+ if (!formEl) return
+ await formEl.validate(async (valid, fields) => {
+ if (valid) {
+ await assess(2)
+ }else {
+ ElMessage.warning('请完善必填信息')
+ }
+ })
+}
+
+const closeAssess = ()=>{
+ assessFormRef.value.clearValidate()
+ state.assessForm = {
+ employTime: [],
+ ratingLevel: ''
+ }
+ state.assessDialog = false;
}
const handleClose = () => {
@@ -744,9 +845,8 @@
id: null,
name:'',
sex:'',
- profession: [],
- bigClassify:null,
- smallClassify: null,
+ domain: '',
+ deptId: null,
birthday: '',
phone:'',
title: '',
--
Gitblit v1.9.2