src/api/sysUsers.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Register/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/selectLoadMoreDirective.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/loginForm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/userManage/expertUsers/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/userManage/institutionUsers/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/sysUsers.js
@@ -78,4 +78,23 @@ method: 'put', data: data }) } } // 专家用户分页 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 }) } 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)) 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 并且设置全局的大小 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 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)) } 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> 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) } }) } 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('审批成功')