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