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