From e0efc30a2e3e748707dcb1da7295dd3c9f880e9a Mon Sep 17 00:00:00 2001 From: zhouwenxuan <1175765986@qq.com> Date: 星期三, 06 十二月 2023 08:32:05 +0800 Subject: [PATCH] 专家用户 --- src/layout/components/Register/index.vue | 22 + src/utils/selectLoadMoreDirective.ts | 27 ++ src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue | 510 ++++++++++++++++++++++++++++++++++++++++++ src/main.js | 4 src/views/safetyReview/userManage/expertUsers/index.vue | 92 +++++-- src/api/sysUsers.js | 21 + src/views/components/loginForm.vue | 2 src/views/safetyReview/userManage/institutionUsers/index.vue | 29 +- 8 files changed, 654 insertions(+), 53 deletions(-) diff --git a/src/api/sysUsers.js b/src/api/sysUsers.js index f835ede..4ad2986 100644 --- a/src/api/sysUsers.js +++ b/src/api/sysUsers.js @@ -78,4 +78,23 @@ method: 'put', data: data }) -} \ No newline at end of file +} + +// 专家用户分页 +export function getExpertList(params) { + return request({ + url: '/system/user/expertList', + method: 'get', + params: params + }) +} + + +// 新增 +export function addExpert(data) { + return request({ + url: '/system/user/addExpert', + method: 'post', + data: data + }) +} diff --git a/src/layout/components/Register/index.vue b/src/layout/components/Register/index.vue index 210e786..88446c0 100644 --- a/src/layout/components/Register/index.vue +++ b/src/layout/components/Register/index.vue @@ -11,6 +11,7 @@ <el-col :span="8"> <el-form-item prop="agency.name" label="机构名称"> <el-input + :disabled="isAbleEdit" v-model="registerForm.agency.name" size="large" placeholder="请输入机构名称" @@ -21,6 +22,7 @@ <el-col :span="8"> <el-form-item prop="agency.creditCode" label="社会信用代码"> <el-input + :disabled="isAbleEdit" v-model="registerForm.agency.creditCode" size="large" placeholder="请输入社会信用代码" @@ -179,7 +181,7 @@ </el-col> <el-col :span="8"> <el-form-item prop="agency.business" label="申请的法定安全评价业务范围"> - <el-select v-model="registerForm.agency.business" placeholder="请选择业务范围" multiple size="large" style="width: 100%"> + <el-select :disabled="isAbleEdit" v-model="registerForm.agency.business" placeholder="请选择业务范围" multiple size="large" style="width: 100%"> <el-option v-for="item in state.busList" :key="item.id" @@ -302,6 +304,7 @@ let { proxy } = getCurrentInstance() import { Base64 } from 'js-base64' import {getAgencyById} from "../../../api/sysUsers"; +import Cookies from "js-cookie"; const emit = defineEmits(["getList"]); const props = { @@ -353,6 +356,8 @@ confirmPassword: '' } }) +const isSuper = ref(false); + const {registerForm} = toRefs(state); const startUsername = ref(''); const startPhone = ref(''); @@ -461,22 +466,29 @@ const registerRef = ref(null) onMounted(()=>{ + const userInfo = JSON.parse(Cookies.get('userInfo')) + if(userInfo.identity == 0){isSuper.value = true} getBusiness() watchEffect(() => { // 在副作用中调用 getArea() getArea(); }); }) - +const isAbleEdit = ref(false); const openDialog=(type, value)=>{ state.title = type === 'add' ? '新增/注册' : type ==='edit' ? '编辑' : '查看' ; if(type === 'edit' || type == 'view') { state.registerForm.id = value.id state.registerForm.username = value.username state.registerForm.phone = value.phone - startUsername.value = value.username - startPhone.value = value.phone - state.registerForm.agency.id = value.agencyId + startUsername.value = value.username + startPhone.value = value.phone + state.registerForm.agency.id = value.agencyId + if(value.state == 2 && isSuper.value){ + isAbleEdit.value = false + }else { + isAbleEdit.value = true + } getAgencyById({agencyId: value.agencyId}).then((res)=>{ if(res.code == 200){ const info = JSON.parse(JSON.stringify(res.data)) diff --git a/src/main.js b/src/main.js index f2db41f..1e46077 100644 --- a/src/main.js +++ b/src/main.js @@ -45,7 +45,7 @@ import { Boot } from '@wangeditor/editor' import attachmentModule from '@wangeditor/plugin-upload-attachment' - +import loadMore from '@/utils/selectLoadMoreDirective' Boot.registerModule(attachmentModule) const app = createApp(App) @@ -74,7 +74,7 @@ app.use(plugins) app.use(elementIcons) app.component('svg-icon', SvgIcon) - +app.directive('loadMore',loadMore) directive(app) // 使用element-plus 并且设置全局的大小 diff --git a/src/utils/selectLoadMoreDirective.ts b/src/utils/selectLoadMoreDirective.ts new file mode 100644 index 0000000..dd52340 --- /dev/null +++ b/src/utils/selectLoadMoreDirective.ts @@ -0,0 +1,27 @@ +import {Directive, DirectiveBinding, nextTick} from 'vue' +const loadMore: Directive = { + beforeMount(el: any, binding: DirectiveBinding) { + console.log(el) + const selectDom = (document.querySelector(".more_select_dropdown") as any).querySelector(".el-select-dropdown .el-select-dropdown__wrap"); + console.log(selectDom, 'selectDom++++++++++++++'); + function loadMores(this: any) { + const isBase = this.scrollHeight - this.scrollTop <= this.clientHeight + if (isBase) { + binding.value && binding.value() + } + } + el.selectDomInfo = selectDom + el.userLoadMore = loadMores + nextTick(() => { + selectDom?.addEventListener('scroll', loadMores) + }) + }, + beforeUnmount(el: any) { + if (el.userLoadMore) { + el.selectDomInfo.removeEventListener('scroll', el.userLoadMore) + delete el.selectDomInfo + delete el.userLoadMore + } + } +} +export default loadMore diff --git a/src/views/components/loginForm.vue b/src/views/components/loginForm.vue index fa5154d..7e7889c 100644 --- a/src/views/components/loginForm.vue +++ b/src/views/components/loginForm.vue @@ -142,7 +142,7 @@ // return acc; // }, {}); const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0) { + if(userInfo.identity === 0 || userInfo.identity === 1 ) { sidebarRouters.value = menu.adminMenu Cookies.set('routers',JSON.stringify(sidebarRouters.value)) } diff --git a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue new file mode 100644 index 0000000..3c833b2 --- /dev/null +++ b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue @@ -0,0 +1,510 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + :title="state.title" + width="800px" + :before-close="handleClose" + > + <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="110px" > + <el-row :gutter="22"> + <el-col :span="11"> + <el-form-item label="姓名:" prop="name" v-if="state.title !== '修改密码'"> + <el-input v-model.trim="state.form.name" ></el-input> + </el-form-item> + + </el-col> + <el-col :span="11"> + <el-form-item label="手机号:" prop="phone" v-if="state.title !== '修改密码'"> + <el-input v-model.trim="state.form.phone" :maxlength="11" ></el-input> + </el-form-item> + + </el-col> + </el-row> + <el-row :gutter="22"> + <el-col :span="11"> + <el-form-item label="用户名:" prop="username" v-if="state.title !== '修改密码'"> + <el-input v-model.trim="state.form.username" ></el-input> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="性别:" prop="sex" v-if="state.title !== '修改密码'"> + <el-radio-group v-model="state.form.sex" class="ml-4"> + <el-radio :label="0" >男</el-radio> + <el-radio :label="1" >女</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <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" v-loadMore="loadMore" class="m-2" placeholder="请选择机构" popper-class="more_select_dropdown" @change="selectChange" > + <el-option + v-for="item in state.agencyList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="职务:" prop="post" v-if="state.title !== '修改密码'"> + <el-input v-model.trim="state.form.post" :maxlength="11" ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="22"> + <el-col :span="11"> + <el-form-item label="职称:" prop="jobTitle" v-if="state.title !== '修改密码'"> + <el-input v-model.trim="state.form.jobTitle" :maxlength="11" ></el-input> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="专业方向:" prop="major" v-if="state.title !== '修改密码'"> + <el-input v-model.trim="state.form.major" :maxlength="11" ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="22"> + <el-col :span="11"> + <el-form-item label="密码:" prop="password" v-if="state.title == '新增' || state.title == '修改密码'"> + <el-input v-model.trim="state.form.password" type="password" show-password placeholder="请输入密码"></el-input> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="重复密码:" prop="confirmPassword" v-if="state.title == '新增' || state.title == '修改密码'"> + <el-input v-model.trim="state.form.confirmPassword" type="password" show-password placeholder="请输入确认密码"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="专家类型:" prop="expertType" v-if="state.title !== '修改密码'"> + <el-radio-group v-model="state.form.expertType" class="ml-4"> + <el-radio :label="1" >安全评价</el-radio> + <el-radio :label="2" >检验检测</el-radio> + </el-radio-group> + </el-form-item> + + <el-form-item prop="socialAttach" label="社保:" v-if="state.title !== '修改密码'"> + <el-upload + accept="image/*" + :action="state.uploadUrl" + :headers="state.header" + method="post" + :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 1)" + :on-preview="handlePictureCardPreview" + v-model:file-list="state.socialList" + list-type="picture-card" + :before-upload="picSize" + :on-remove="(file, file_list)=>{handleRemove(file, file_list, 1)}" + > + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div> + </template> + </el-upload> + + </el-form-item> + <el-form-item prop="medicalAttach" label="医保:" v-if="state.title !== '修改密码'"> + <el-upload + accept="image/*" + :action="state.uploadUrl" + :headers="state.header" + method="post" + :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 2)" + :on-preview="handlePictureCardPreview" + v-model:file-list="state.medicalList" + list-type="picture-card" + :before-upload="picSize" + :on-remove="(file, file_list)=>{handleRemove(file, file_list, 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-item prop="salaryAttach" label="工资清单:" v-if="state.title !== '修改密码'"> + <el-upload + accept="image/*" + :action="state.uploadUrl" + :headers="state.header" + method="post" + :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 3)" + :on-preview="handlePictureCardPreview" + v-model:file-list="state.salaryList" + list-type="picture-card" + :before-upload="picSize" + :on-remove="(file, file_list)=>{handleRemove(file, file_list, 3)}" + > + <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 > + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default">确认</el-button> + </span> + </template> + <el-dialog v-model="state.dialogImg"> + <el-image style="width: 100%; height: 100%" :src="state.dialogImageUrl"/> + </el-dialog> + </el-dialog> + </div> +</template> +<script setup> +import {reactive, ref, toRefs, defineEmits, onMounted} from 'vue' +import { View } from "@element-plus/icons-vue"; +import {ElMessage} from "element-plus"; +import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate"; +import {checkUserName, checkPhone, delPic} from "@/api/login" +import { getRegionTree } from "@/api/area" +import {addExpert, addMonitor, editMonitor, getMonitorList} from "@/api/sysUsers" +import {Base64} from "js-base64" +import {resetUserPwd} from "../../../../../api/sysUsers"; +import {getToken} from "@/utils/auth"; +import {getInsitutionList} from "@/api/backManage/insitution"; + +const emit = defineEmits(["getList"]); +const dialogVisible = ref(false) +const superRef = ref(null) + +const equalToPassword = (rule, value, callback) => { + if (state.form.password !== value) { + callback(new Error("两次输入的密码不一致")); + } else { + callback(); + } +}; + +const validateUserPhone = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入手机号')) + }else{ + if(!verifyPhone(value)){ + callback(new Error('手机号格式有误')) + }else{ + checkPhone({phone:value,id: state.form.id}).then((res)=>{ + if(res.data == false){ + callback(new Error('该手机号已被绑定用户,请更换其他手机号')) + }else{ + callback() + } + }) + } + } +} + +const validateUsername = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入登录时用户名')) + }else{ + if(!verifyUsername(value)){ + callback(new Error('用户名须使用字母+数字,长度在5-16之间')) + }else{ + checkUserName({username:value,id: state.form.id}).then((res)=>{ + if(res.data == false){ + callback(new Error('用户名已被占用,请更换其他用户名')) + }else{ + callback() + } + }) + } + } +} + +let validatePwd = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入密码')) + }else{ + if(!verifyPwd(value)){ + callback(new Error('密码须包含字母、数字、特殊字符(不包括下划线),长度在6-16之间')) + }else{ + callback() + } + } +} + +const state = reactive({ + title: '', + form: { + id: null, + name: '', + username: '', + sex: 0, + phone: '', + agencyId: '', + socialAttach: [], + medicalAttach: [], + salaryAttach: [], + post: '', + jobTitle: '', + major: '', + expertType: 1, + password: '', + confirmPassword: '', + }, + socialList: [], + medicalList: [], + salaryList: [], + formRules:{ + 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: 'blur' }], + jobTitle:[{ required: true, message: '请输入职称', trigger: 'blur' }], + major:[{ required: true, message: '请输入专业方向', trigger: 'blur' }], + // agencyId: [{ required: true, message: '请选择所属机构', trigger: 'blur' }], + socialAttach: [{required: true, trigger: "blur", message: "请上传社保图片"}], + medicalAttach: [{required: true, trigger: "blur", message: "请上传医保图片"}], + salaryAttach: [{required: true, trigger: "blur", message: "请上传工资清单"}], + }, + areaList: [], + agencyList: [], + header: { + Authorization: 'Bearer ' + getToken() + }, + uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', + dialogImageUrl: '', + dialogImg: false, + pageNum: 1, + pageSize: 10, +}) + +onMounted(()=>{ + getAgency() +}) + +const openDialog = (type, value) => { + getArea() + state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ; + if(type === 'edit') { + for(let i in state.form){ + if(validKey(i,value)){ + state.form[i] = value[i] + } + } + } + if(type == 'pwd'){ + state.form.id = value.id + } + dialogVisible.value = true +} + +const validKey=(key,obj)=>{ + return key in obj +} + +const getArea = async ()=>{ + const res = await getRegionTree({name: '',parentId: null,regionType: 0}) + if(res.code == 200){ + state.areaList = res.data + state.areaList.unshift({ + id: 0, + name: '新疆维吾尔自治区' + }) + }else{ + ElMessage.warning(res.message) + } +} + +const onSubmit = async () => { + const valid = await superRef.value.validate(); + if(valid){ + if(state.title == '新增'){ + const {confirmPassword,id,socialList,salaryList,medicalList,...data} = state.form + data.password = Base64.encode(data.password) + console.log('data',data) + const res = await addExpert(data); + if(res.code == 200){ + ElMessage.success(res.message) + emit('getList') + superRef.value.clearValidate(); + superRef.value.resetFields(); + state.salaryList = []; + state.medicalList = []; + state.socialList = []; + dialogVisible.value = false; + }else{ + ElMessage.warning(res.message) + } + }else if(state.title == '编辑'){ + // const {confirmPassword,...data} = state.form + // data.password = Base64.encode(data.password) + // const res = await editMonitor(data) + // if(res.code == 200){ + // ElMessage.success(res.message) + // emit('getList') + // superRef.value.clearValidate(); + // superRef.value.resetFields(); + // dialogVisible.value = false; + // }else{ + // ElMessage.warning(res.message) + // } + }else{ + const {id,password} = state.form + const data = {id,password} + data.password = Base64.encode(data.password) + const res = await resetUserPwd(data) + if(res.code == 200){ + ElMessage.success(res.message) + emit('getList') + superRef.value.clearValidate(); + superRef.value.resetFields(); + dialogVisible.value = false; + }else{ + ElMessage.warning(res.message) + } + } + } +} + +const handleClose = () => { + superRef.value.clearValidate(); + superRef.value.resetFields() + dialogVisible.value = false; + state.salaryList = []; + state.medicalList = []; + state.socialList = []; + +} +const picSize = async (rawFile) => { + if(rawFile.size / 1024 / 1024 > 5){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M' + }); + return false + } +}; +const handlePictureCardPreview = (uploadFile) => { + state.dialogImageUrl = uploadFile.url + state.dialogImg = true +}; + + + +const handleAvatarSuccess = (res, uploadFile,fileList,type) => { + if(res.code == 200){ + if(type === 1){ + let obj = { + name: res.data.filename, + path: res.data.path, + type: type + } + state.form.socialAttach.push(obj) + }else if(type === 2) { + let obj = { + name: res.data.filename, + path: res.data.path, + type: type + } + state.form.medicalAttach.push(obj) + }else { + let obj = { + name: res.data.filename, + path: res.data.path, + type: type + } + state.form.salaryAttach.push(obj) + } + }else{ + ElMessage({ + type: 'warning', + message: '文件上传失败' + }) + } +} + + + + +const handleRemove = async (file, uploadFiles,type) => { + const path = file.response.data.path + const res = await delPic({path: path}) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '文件已删除' + }) + }else{ + ElMessage({ + type: 'warning', + message: res.message + }) + } + if(type === 1){ + state.form.socialAttach = state.form.socialAttach.filter(item => item.path !== file.response.data.path) + }else if(type === 2){ + state.form.medicalAttach = state.form.medicalAttach.filter(item => item.path !== file.response.data.path) + }else { + state.form.salaryAttach = state.form.salaryAttach.filter(item => item.path !== file.response.data.path) + } +} +const finshed = ref(false) +const getAgency = async () => { + const queryParams = { + 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; + } + + }else{ + ElMessage.warning(res.message) + } +} + + + +//触底函数 +const loadMore = () => { + console.log(' 触底了'); + // 防抖处理 + setTimeout(() => { + if (finshed.value) return //值为true,则代表没有数据了 + state.pageNum += 1 + getAgency() + }, 500) +} +//选中值发生变化时触发 +const selectChange = () => { + console.log('选中的xxxx') +} + +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } +} +</style> diff --git a/src/views/safetyReview/userManage/expertUsers/index.vue b/src/views/safetyReview/userManage/expertUsers/index.vue index 68dd33b..d081eb8 100644 --- a/src/views/safetyReview/userManage/expertUsers/index.vue +++ b/src/views/safetyReview/userManage/expertUsers/index.vue @@ -9,8 +9,8 @@ >新增</el-button> </div> <div style="margin-top: 15px;margin-bottom: 15px;"> - <el-radio-group v-model="queryParams.checkType" @change="changeType"> - <el-radio-button label="all">全部</el-radio-button> + <el-radio-group v-model="queryParams.expertType" @change="changeType"> + <el-radio-button label="">全部</el-radio-button> <el-radio-button label="1">安全评价</el-radio-button> <el-radio-button label="2">检验检测</el-radio-button> </el-radio-group> @@ -18,22 +18,27 @@ <!-- 表格数据 --> <el-table v-loading="loading" :data="dataList" :border="true"> - <el-table-column label="用户ID" prop="userID" align="center" /> + <el-table-column label="用户ID" prop="id" align="center" /> <el-table-column label="姓名" prop="name" align="center" /> <el-table-column label="手机号" prop="phone" align="center" /> <el-table-column label="用户名" prop="username" align="center" /> - <el-table-column label="性别" prop="sex" align="center" /> - <el-table-column label="所属机构" prop="institution" align="center" /> + <el-table-column label="性别" prop="sex" align="center" > + <template #default="scope"> + <span v-if="scope.row.sex === 0">男</span> + <span v-if="scope.row.sex === 1">女</span> + </template> + </el-table-column> + <el-table-column label="所属机构" prop="agency.name" align="center" /> <el-table-column label="社保" prop="socialSecurity" align="center" width="120"> <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.socialList && scope.row.socialList.length>0"> + <div class="demo-image__preview" v-if="scope.row.socialAttach && scope.row.socialAttach.length>0"> <el-image style="width: 100px; height: 100px" - :src="scope.row.socialList[0]" + :src= "scope.row.socialAttach[0]" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" - :preview-src-list="scope.row.socialList" + :preview-src-list="scope.row.socialAttach" :initial-index="0" fit="cover" preview-teleported="true" @@ -43,14 +48,14 @@ </el-table-column> <el-table-column label="医保" prop="medicalInsurance" align="center" width="120"> <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.medicalList && scope.row.medicalList.length>0"> + <div class="demo-image__preview" v-if="scope.row.medicalAttach && scope.row.medicalAttach.length>0"> <el-image style="width: 100px; height: 100px" - :src="scope.row.medicalList[0]" + :src="scope.row.medicalAttach[0]" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" - :preview-src-list="scope.row.medicalList" + :preview-src-list="scope.row.medicalAttach" :initial-index="0" fit="cover" preview-teleported="true" @@ -60,14 +65,14 @@ </el-table-column> <el-table-column label="工资清单" prop="salaryList" align="center" width="120"> <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.salaryList && scope.row.salaryList.length>0"> + <div class="demo-image__preview" v-if="scope.row.salaryAttach && scope.row.salaryAttach.length>0"> <el-image style="width: 100px; height: 100px" - :src="scope.row.salaryList[0]" + :src= "scope.row.salaryAttach[0]" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" - :preview-src-list="scope.row.salaryList" + :preview-src-list="scope.row.salaryAttach" :initial-index="0" fit="cover" preview-teleported="true" @@ -75,15 +80,16 @@ </div> </template> </el-table-column> - <el-table-column label="职务" prop="duty" align="center" /> - <el-table-column label="职称" prop="lecture" align="center" /> + <el-table-column label="职务" prop="post" align="center" /> + <el-table-column label="职称" prop="jobTitle" align="center" /> <el-table-column label="专业方向" prop="major" align="center" /> <el-table-column label="业绩汇总" prop="summary" align="center" /> <el-table-column label="最近评价时间" prop="lastTime" align="center" width="120" /> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120" > <template #default="scope"> - <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['system:role:edit']">编辑</el-button> - <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']">删除</el-button> + <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)" >删除</el-button> + <el-button link type="primary" @click="openDialog('pwd',scope.row)">修改密码</el-button> </template> </el-table-column> </el-table> @@ -96,11 +102,15 @@ @pagination="getList" /> </div> + <expert-dialog ref="expertRef" @getList="getList"></expert-dialog> </template> <script setup> -import {getCurrentInstance, reactive, ref, toRefs} from "vue"; -import {ElMessageBox} from "element-plus"; +import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue"; +import expertDialog from "./components/expertDialog.vue" +import {ElMessage, ElMessageBox} from "element-plus"; +import Cookies from "js-cookie"; +import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers"; const { proxy } = getCurrentInstance(); const loading = ref(false); const expertRef = ref(); @@ -108,22 +118,36 @@ queryParams: { pageNum: 1, pageSize: 10, - checkType: "all" - + expertType: "" }, total: 0, - dataList: [ - ] + dataList: [] }); const { queryParams, total, dataList } = toRefs(data); - -const getList = () => { - loading.value = true; - console.log("获取数据") - loading.value = false; +onMounted(()=>{ + getList() +}) +const getList = async () => { + loading.value = true + const res = await getExpertList(data.queryParams) + if(res.code == 200){ + data.dataList = res.data.list.map(item => { + return{ + ...item, + socialAttach: item.socialAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), + medicalAttach: item.medicalAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), + salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}) + } + }) + console.log('RES',data.dataList) + data.total = res.data.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false } const openDialog = (type, value) => { @@ -131,7 +155,7 @@ } const changeType = (val) => { console.log("val", val) - queryParams.checkType = val; + queryParams.expertType = val; queryParams.pageNum = 1; getList(); } @@ -150,7 +174,13 @@ type: 'warning', }) .then( async() => { - + const res = await delMonitor(val.id) + if(res.code == 200){ + ElMessage.success('数据删除成功') + getList() + }else{ + ElMessage.warning(res.message) + } }) } diff --git a/src/views/safetyReview/userManage/institutionUsers/index.vue b/src/views/safetyReview/userManage/institutionUsers/index.vue index 86103c2..3e73bb5 100644 --- a/src/views/safetyReview/userManage/institutionUsers/index.vue +++ b/src/views/safetyReview/userManage/institutionUsers/index.vue @@ -15,17 +15,17 @@ <el-table-column label="信用代码" prop="agency.creditCode" align="center"/> <el-table-column label="用户名" prop="username" align="center" /> <el-table-column label="注册手机号" prop="phone" align="center"/> - <el-table-column label="注册审批" prop="approve" align="center"> + <el-table-column label="注册审批" prop="state" align="center"> <template #default="scope"> - <el-tag :type="scope.row.approve == 0?'success':scope.row.approve == 1?'':'danger'"> - {{scope.row.approve == 0?'审批通过':scope.row.approve == 1?'待审批':'未通过'}} + <el-tag :type=" scope.row.state == 0 ? 'info' : scope.row.state == 1 ? '' : scope.row.state == 2 ?'success': scope.row.state == 3 || scope.row.state == 4 ?'danger':''"> + {{scope.row.state == 0?'暂存':scope.row.state == 1 ? '审核中':scope.row.state == 2 ? '审批通过':scope.row.state == 3? '审批驳回':'已作废' }} </el-tag> </template> </el-table-column> <el-table-column label="状态" prop="status" align="center"> <template #default="scope"> <el-switch - v-if="scope.row.approve == 0" + v-if="scope.row.state == 2" v-model="scope.row.status" :active-value="0" :inactive-value="1" @@ -42,7 +42,7 @@ <el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button> <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> - <el-button link type="primary" v-if="isSuper && scope.row.approve !==0 " @click="openApprove(scope.row)">审批</el-button> + <el-button link type="primary" v-if="isSuper && scope.row.state ==1 " @click="openApprove(scope.row)">审批</el-button> <el-button link type="primary" @click="openPwd('pwd',scope.row)">修改密码</el-button> </template> </el-table-column> @@ -59,9 +59,9 @@ <register ref="regRef" @getList=getList /> <review-dialog ref="reviewRef" @getList=getList></review-dialog> <el-dialog v-model="appDialog" title="审批用户" width="30%" center align-center> - <el-radio-group v-model="appoveForm.approve" style="width: 100%"> - <el-radio :label="0" size="large" border>通过</el-radio> - <el-radio :label="2" size="large" border>驳回</el-radio> + <el-radio-group v-model="appoveForm.state" style="width: 100%"> + <el-radio :label="2" size="large" border>通过</el-radio> + <el-radio :label="3" size="large" border>驳回</el-radio> </el-radio-group> <template #footer> <span class="dialog-footer"> @@ -74,7 +74,7 @@ </template> <script setup> -import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {getCurrentInstance, nextTick, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; import {ElMessage, ElMessageBox} from "element-plus"; import superviseDialog from "../superviseUsers/components/superviseDialog.vue" import { Register } from "@/layout/components"; @@ -98,16 +98,19 @@ appDialog: false, appoveForm: { id: null, - approve: null + state: null } }); const { queryParams, total, dataList, isSuper, appDialog, appoveForm } = toRefs(data); onMounted(()=>{ + const userInfo = JSON.parse(Cookies.get('userInfo')) if(userInfo.identity == 0){data.isSuper = true} - getList() + nextTick(() => { + getList() + }) }) onUnmounted(()=>{ @@ -141,14 +144,14 @@ const openApprove =(val)=>{ data.appoveForm = { id: null, - approve: null + state: null } data.appoveForm.id = val.id data.appDialog = true } const confirmApproval = async () =>{ - if(data.appoveForm.approve !== null){ + if(data.appoveForm.state !== null){ const res = await changeApprove(data.appoveForm) if(res.code == 200){ ElMessage.success('审批成功') -- Gitblit v1.9.2