| | |
| | | width="900px" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="150px" > |
| | | <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRulesOut" label-width="150px" > |
| | | <el-row :gutter="22"> |
| | | <el-col :span="11"> |
| | | <el-form-item label="姓名:" prop="name" v-if="state.title !== '修改密码'"> |
| | |
| | | <el-row :gutter="22"> |
| | | <el-col :span="11"> |
| | | <el-form-item label="所属机构:" prop="agencyId" v-if="state.title !== '修改密码'"> |
| | | <el-select v-model="state.form.agencyId" style="width: 100%" v-loadMore="loadMore" class="m-2" placeholder="请选择机构" popper-class="more_select_dropdown" > |
| | | <el-input v-if="isAgency" v-model="state.agencyName" disabled></el-input> |
| | | <el-select v-model="state.form.agencyName" @change="selectValue" v-else style="width: 100%" v-loadMore="loadMore" class="m-2" placeholder="请选择机构" popper-class="more_select_dropdown" > |
| | | <el-option |
| | | v-for="item in state.agencyList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | :value="item.name" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <!-- <el-input v-model.trim="state.form.post" :maxlength="11" ></el-input>--> |
| | | <el-select v-model="state.form.post" class="m-2" style="width: 100%" placeholder="请选择职务" popper-class="more_select_dropdown" > |
| | | <el-option |
| | | v-for="item in state.postList" |
| | | v-for="item in props.postList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | |
| | | <el-form-item label="专业方向:" prop="majorShow" v-if="state.title !== '修改密码'" > |
| | | <el-select v-model="state.form.majorShow" value-key="id" class="m-2" style="width: 100%" multiple placeholder="请选择专业方向" popper-class="more_select_dropdown" @change="selectChange"> |
| | | <el-option |
| | | v-for="item in state.majorList" |
| | | v-for="item in props.majorList" |
| | | :key="item.id" |
| | | :label="item.label" |
| | | :value="item" |
| | |
| | | <el-form-item label="评价师等级:" prop="level" v-if="state.title !== '修改密码'"> |
| | | <el-select v-model="state.form.level" class="m-2" style="width: 100%" placeholder="请选择评价师等级" popper-class="more_select_dropdown" > |
| | | <el-option |
| | | v-for="item in state.levelList" |
| | | v-for="item in props.levelList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-form-item> |
| | | <div style="margin-left: -50px"><span style="font-size: 16px;color: #ed5565;">提示:疆外企业无需上传社保、医保、工资清单,疆内企业需每季度进行更新。</span></div> |
| | | </el-form-item> |
| | | <el-form-item prop="socialAttach" label="社保:" v-if="state.title !== '修改密码'"> |
| | | <el-upload |
| | | accept="image/*" |
| | |
| | | <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div> |
| | | </template> |
| | | </el-upload> |
| | | |
| | | </el-form-item> |
| | | <el-form-item prop="idPhoto" label="证件照:" v-if="state.title !== '修改密码'"> |
| | | <el-upload |
| | | accept="image/*" |
| | | :action="state.uploadUrl" |
| | | :headers="state.header" |
| | | method="post" |
| | | :on-change="handleChangePic" |
| | | :on-success="handlePhotoSuccess" |
| | | :on-preview="handlePictureCardPreview" |
| | | v-model:file-list="state.photoList" |
| | | list-type="picture-card" |
| | | :before-upload="picSize" |
| | | :on-remove="handlePhotoRemove" |
| | | :limit="2" |
| | | > |
| | | <el-icon><Plus /></el-icon> |
| | | <template #tip> |
| | | <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div> |
| | | </template> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer > |
| | |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import {reactive, ref, toRefs, defineEmits, onMounted, nextTick} from 'vue' |
| | | import {reactive, ref, toRefs, defineEmits, defineProps, onMounted, nextTick} from 'vue' |
| | | import { View } from "@element-plus/icons-vue"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate"; |
| | |
| | | import {getToken} from "@/utils/auth"; |
| | | import {getInsitutionList} from "@/api/backManage/insitution"; |
| | | import {getDictList} from "@/api/backManage/evaluate"; |
| | | import Cookies from "js-cookie"; |
| | | |
| | | const emit = defineEmits(["getList"]); |
| | | const props = defineProps(['majorList','levelList','postList']) |
| | | const dialogVisible = ref(false) |
| | | const superRef = ref(null) |
| | | |
| | |
| | | let param = {} |
| | | if(state.title=='新增') { |
| | | param = { |
| | | phone:value |
| | | phone:value, |
| | | identity: 2 |
| | | } |
| | | }else if(state.title=='编辑'){ |
| | | param = { |
| | | phone:value, |
| | | id: state.form.id |
| | | id: state.form.id, |
| | | identity: 2 |
| | | } |
| | | } |
| | | checkPhone(param).then((res)=>{ |
| | |
| | | socialAttach: [], |
| | | medicalAttach: [], |
| | | salaryAttach: [], |
| | | idPhoto: '', |
| | | post: '', |
| | | jobTitle: '', |
| | | level: '', |
| | |
| | | password: '', |
| | | confirmPassword: '', |
| | | }, |
| | | agencyName:'', |
| | | socialList: [], |
| | | medicalList: [], |
| | | salaryList: [], |
| | | formRules:{ |
| | | photoList: [], |
| | | formRulesIn:{ |
| | | name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], |
| | | username: [{ required: true, validator: validateUsername, trigger: 'blur' }], |
| | | password: [{ required: true, validator: validatePwd, trigger: 'blur' }], |
| | |
| | | socialAttach: [{required: true, trigger: "blur", message: "请上传社保图片"}], |
| | | medicalAttach: [{required: true, trigger: "blur", message: "请上传医保图片"}], |
| | | salaryAttach: [{required: true, trigger: "blur", message: "请上传工资清单"}], |
| | | idPhoto: [{required: true, trigger: "blur", message: "请上传近期证件照"}], |
| | | }, |
| | | formRulesOut:{ |
| | | name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], |
| | | username: [{ required: true, validator: validateUsername, trigger: 'blur' }], |
| | | password: [{ required: true, validator: validatePwd, trigger: 'blur' }], |
| | | confirmPassword: [{ required: true, validator: equalToPassword, trigger: 'blur' }], |
| | | phone: [{ required: true, validator: validateUserPhone, trigger: 'blur' }], |
| | | post: [{ required: true, message: '请选择职务', trigger: 'change' }], |
| | | jobTitle:[{ required: true, message: '请输入职称', trigger: 'blur' }], |
| | | level: [{ required: true, message: '请选择评价师等级', trigger: 'change' }], |
| | | majorShow:[{ required: true, message: '请选择专业方向', trigger: 'change' }], |
| | | agencyId: [{ required: true, message: '请选择所属机构', trigger: 'change' }], |
| | | // socialAttach: [{required: true, trigger: "blur", message: "请上传社保图片"}], |
| | | // medicalAttach: [{required: true, trigger: "blur", message: "请上传医保图片"}], |
| | | // salaryAttach: [{required: true, trigger: "blur", message: "请上传工资清单"}], |
| | | idPhoto: [{required: true, trigger: "blur", message: "请上传近期证件照"}], |
| | | }, |
| | | areaList: [], |
| | | agencyList: [], |
| | | header: { |
| | |
| | | dialogImageUrl: '', |
| | | dialogImg: false, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | postList: [ |
| | | { |
| | | id: '1', |
| | | name: '法人' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '过程控制负责人' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '机构负责人' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '技术负责人' |
| | | }, |
| | | { |
| | | id: '5', |
| | | name: '员工' |
| | | }, |
| | | ], |
| | | majorList: [], |
| | | levelList: [ |
| | | { |
| | | id: '1', |
| | | name: '一级' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '二级' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '三级' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '其他' |
| | | }, |
| | | ] |
| | | pageSize: 10 |
| | | }) |
| | | |
| | | const isAgency = ref(false); |
| | | onMounted(()=>{ |
| | | getAgency() |
| | | getMajor() |
| | | |
| | | }) |
| | | |
| | | const attribute = ref(null); |
| | | const getUserInfoAgency = () => { |
| | | const userInfo = JSON.parse(Cookies.get('userInfo')) |
| | | if (userInfo.identity === 1) { |
| | | state.agencyName = userInfo.agentName; |
| | | state.form.agencyId = userInfo.agentId; |
| | | isAgency.value = true; |
| | | attribute.value = JSON.parse(Cookies.get('attribute')) |
| | | console.log("attribute", attribute.value) |
| | | |
| | | } else { |
| | | getAgency('open') |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | const openDialog = async (type, value) => { |
| | | getArea() |
| | | await getUserInfoAgency(); |
| | | await getArea() |
| | | state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ; |
| | | if(type === 'edit') { |
| | | const param = { |
| | |
| | | const res = await getUserById(param); |
| | | if(res.code == 200){ |
| | | state.form = res.data |
| | | state.form.agencyName = res.data.agency.name |
| | | state.socialList = res.data.socialAttach.map(url => { |
| | | return { |
| | | url: import.meta.env.VITE_APP_BASE_API +'/'+url.path, |
| | |
| | | name: url.name |
| | | } |
| | | }); |
| | | const arr = [] |
| | | const certificateList = JSON.parse(res.data.certificateNo) |
| | | for( let key in certificateList) { |
| | | arr.push( { |
| | | id: parseInt(key), |
| | | certificateNo: certificateList[key], |
| | | }) |
| | | arr.forEach((item,index) => { |
| | | item.label = res.data.majorNames[index] |
| | | }) |
| | | const obj = { |
| | | url: import.meta.env.VITE_APP_BASE_API +'/'+ res.data.idPhoto |
| | | } |
| | | state.form.majorShow = arr; |
| | | console.log(state.form.majorShow,'certificateList') |
| | | state.photoList.push(obj); |
| | | if(res.data.certificateNo){ |
| | | const arr = [] |
| | | const certificateList = JSON.parse(res.data.certificateNo) |
| | | for( let key in certificateList) { |
| | | arr.push( { |
| | | id: parseInt(key), |
| | | certificateNo: certificateList[key], |
| | | }) |
| | | arr.forEach((item,index) => { |
| | | item.label = res.data.majorNames[index] |
| | | }) |
| | | } |
| | | state.form.majorShow = arr; |
| | | console.log(state.form,'certificateList') |
| | | } |
| | | |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | |
| | | }else if(type === 'add'){ |
| | | console.log("aa",props.majorList) |
| | | props.majorList.forEach(item => { |
| | | if(item.certificateNo){ |
| | | item.certificateNo = '' |
| | | } |
| | | }) |
| | | } |
| | | if(type == 'pwd'){ |
| | | state.form.id = value.id |
| | |
| | | if(res.code == 200){ |
| | | ElMessage.success(res.message) |
| | | emit('getList') |
| | | reset(); |
| | | superRef.value.clearValidate(); |
| | | superRef.value.resetFields(); |
| | | state.salaryList = []; |
| | | state.medicalList = []; |
| | | state.socialList = []; |
| | | |
| | | dialogVisible.value = false; |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | |
| | | if(res.code == 200){ |
| | | ElMessage.success(res.message) |
| | | emit('getList') |
| | | superRef.value.clearValidate(); |
| | | reset() |
| | | superRef.value.clearValidate(); |
| | | |
| | | dialogVisible.value = false; |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | |
| | | if(res.code == 200){ |
| | | ElMessage.success(res.message) |
| | | emit('getList') |
| | | superRef.value.clearValidate(); |
| | | reset() |
| | | superRef.value.clearValidate(); |
| | | |
| | | dialogVisible.value = false; |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | |
| | | socialAttach: [], |
| | | medicalAttach: [], |
| | | salaryAttach: [], |
| | | idPhoto: '', |
| | | post: '', |
| | | jobTitle: '', |
| | | level:'', |
| | |
| | | state.salaryList = []; |
| | | state.medicalList = []; |
| | | state.socialList = []; |
| | | state.photoList = []; |
| | | state.form.selectMajorList = []; |
| | | } |
| | | const picSize = async (rawFile) => { |
| | |
| | | } |
| | | } |
| | | |
| | | const handlePhotoSuccess = (res,file) => { |
| | | if(res.code == 200){ |
| | | state.form.idPhoto = res.data.path; |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '文件上传失败' |
| | | }) |
| | | } |
| | | } |
| | | const handleChangePic = (file,fileList) => { |
| | | if (fileList.length > 1) { |
| | | state.photoList.splice(0, 1); |
| | | } |
| | | } |
| | | |
| | | const handlePhotoRemove = async (file) => { |
| | | // state.form.idPhoto = '' |
| | | |
| | | let path = "" |
| | | if(file.response && file.response.data){ |
| | | path = file.response.data.path |
| | | }else { |
| | | const base = import.meta.env.VITE_APP_BASE_API |
| | | path = file.url.substring(base.length+1,file.url.length ) |
| | | } |
| | | await delPic({path: path}).then(res => { |
| | | if(res.code == 200){ |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // message: '文件已删除' |
| | | // }) |
| | | state.form.idPhoto = '' |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.message |
| | | }) |
| | | } |
| | | }).catch(() => { |
| | | state.form.idPhoto = '' |
| | | }); |
| | | |
| | | |
| | | // const res = await delPic({path: path}) |
| | | // if(res.code == 200){ |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // message: '文件已删除' |
| | | // }) |
| | | // state.form.idPhoto = '' |
| | | // }else{ |
| | | // ElMessage({ |
| | | // type: 'warning', |
| | | // message: res.message |
| | | // }) |
| | | // } |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | path = file.response.data.path |
| | | } |
| | | |
| | | const res = await delPic({path: path}) |
| | | await delPic({path: path}).then(res => { |
| | | if(res.code == 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '文件已删除' |
| | | }) |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // message: '文件已删除' |
| | | // }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.message |
| | | }) |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.message |
| | | }) |
| | | } |
| | | }).catch(() => { |
| | | if(type === 1){ |
| | | state.form.socialAttach = state.form.socialAttach.filter(item => item.path !== path) |
| | | }else if(type === 2){ |
| | | state.form.medicalAttach = state.form.medicalAttach.filter(item => item.path !== path) |
| | | }else { |
| | | state.form.salaryAttach = state.form.salaryAttach.filter(item => item.path !== path) |
| | | } |
| | | }); |
| | | |
| | | if(type === 1){ |
| | | state.form.socialAttach = state.form.socialAttach.filter(item => item.path !== path) |
| | | }else if(type === 2){ |
| | |
| | | } |
| | | } |
| | | const finshed = ref(false) |
| | | const getAgency = async () => { |
| | | const getAgency = async (type) => { |
| | | if (type === 'open' && state.pageNum !== 1) { |
| | | |
| | | } else { |
| | | const queryParams = { |
| | | pageNum: state.pageNum, |
| | | pageSize: state.pageSize, |
| | | pageNum: state.pageNum, |
| | | pageSize: state.pageSize, |
| | | } |
| | | const res = await getInsitutionList(queryParams) |
| | | if(res.code == 200){ |
| | | if(res.data.pageNum === state.pageNum){ |
| | | finshed.value = false; |
| | | if(state.pageNum == 1){ |
| | | state.agencyList = res.data.list |
| | | }else { |
| | | state.agencyList =state.agencyList .concat(res.data.list) |
| | | } |
| | | }else { |
| | | finshed.value = true; |
| | | if (res.code == 200) { |
| | | if (res.data.pageNum === state.pageNum) { |
| | | finshed.value = false; |
| | | if (state.pageNum == 1) { |
| | | state.agencyList = res.data.list |
| | | } else { |
| | | state.agencyList = state.agencyList.concat(res.data.list) |
| | | } |
| | | } else { |
| | | finshed.value = true; |
| | | } |
| | | |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | const getMajor = async () => { |
| | | const queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 50, |
| | | dictType: 'sys_major_orientation' |
| | | } |
| | | const res = await getDictList(queryParams); |
| | | if(res.code === 200){ |
| | | state.majorList = res.data.list |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | //触底函数 |
| | |
| | | setTimeout(() => { |
| | | if (finshed.value) return //值为true,则代表没有数据了 |
| | | state.pageNum += 1 |
| | | getAgency() |
| | | getAgency('') |
| | | }, 500) |
| | | } |
| | | |
| | |
| | | // state.form.selectMajorList= val; |
| | | console.log('选中的xxxx',val) |
| | | } |
| | | const selectValue = (val) => { |
| | | state.agencyList.forEach(item => { |
| | | if(item.name === val){ |
| | | state.form.agencyId = item.id |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | defineExpose({ |
| | | openDialog |