zhouwenxuan
2023-12-06 e0efc30a2e3e748707dcb1da7295dd3c9f880e9a
专家用户
已修改6个文件
已添加2个文件
707 ■■■■■ 文件已修改
src/api/sysUsers.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Register/index.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/selectLoadMoreDirective.ts 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/loginForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue 510 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/index.vue 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/institutionUsers/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | 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('审批成功')