From 18e2812133add57c3b707f39555321e2a598eea2 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Thu, 18 Jan 2024 13:54:50 +0800
Subject: [PATCH] 新增
---
src/views/safetyReview/projectManage/components/expertsList.vue | 375 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 228 insertions(+), 147 deletions(-)
diff --git a/src/views/safetyReview/projectManage/components/expertsList.vue b/src/views/safetyReview/projectManage/components/expertsList.vue
index e08a46a..fbe7987 100644
--- a/src/views/safetyReview/projectManage/components/expertsList.vue
+++ b/src/views/safetyReview/projectManage/components/expertsList.vue
@@ -4,69 +4,146 @@
v-model="dialogVisible"
:title="title"
width="60%"
- :before-close="handleClose"
>
- <el-form :model="state.queryParams" ref="queryForm" :inline="true" v-show="state.showSearch" label-width="90px">
+ <el-form :model="queryParams" :inline="true" label-width="90px">
<el-form-item label="专业类别">
- <el-cascader
- clearable
- v-model="state.classiFy"
- :options="state.expertTypes"
- :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}"
- @change="handleChange"></el-cascader>
+ <el-radio-group v-model="queryParams.expertType">
+ <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>
</el-form-item>
- <el-form-item label="在岗情况" prop="dutyStatus">
- <el-select v-model="state.queryParams.dutyStatus" placeholder="岗位状态" clearable>
- <el-option :key="0" label="在岗" :value="0"/>
- <el-option :key="1" label="退休" :value="1"/>
- </el-select>
- </el-form-item>
- <el-form-item label="时间范围" prop="searchTime">
- <el-date-picker
- v-model="state.searchTime"
- type="daterange"
- @change="changeTime"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- value-format="YYYY-MM-DD"
+ <el-form-item label="姓名">
+ <el-input
+ v-model="queryParams.name"
+ placeholder="姓名"
+ style="width: 250px"
/>
</el-form-item>
+ <el-form-item label="手机号">
+ <el-input
+ v-model="queryParams.phone"
+ placeholder="手机号"
+ style="width: 250px"
+ />
+ </el-form-item>
+ <el-form-item label="评价师等级">
+ <el-select v-model="queryParams.level" style="width: 250px" placeholder="评价师等级" >
+ <el-option
+ v-for="item in levelList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="专业方向">
+ <el-select v-model="queryParams.major" value-key="id" style="width: 250px" placeholder="专业方向">
+ <el-option
+ v-for="item in majorList"
+ :key="item.id"
+ :label="item.label"
+ :value="item.id"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="专业方向">
+ <el-select v-model="queryParams.post" style="width: 250px" placeholder="请选择职务">
+ <el-option
+ v-for="item in postList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
<el-form-item>
- <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
- <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+ <el-button type="primary" icon="Search" @click="search">搜索</el-button>
+ <el-button icon="Refresh" @click="research">重置</el-button>
</el-form-item>
</el-form>
- <el-table ref="tableRef" v-loading="loading" :data="state.expertList" :border="true" @select="select" @selection-change="handleSelectionChange">
+ <el-table v-loading="loading" ref="tableRef" :data="dataList" :border="true" @select="select" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
- <el-table-column type="index" width="55" align="center" />
- <el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="出生日期" align="center" prop="birthday" />
- <el-table-column label="学历" align="center" prop="degree" />
- <el-table-column label="职称" align="center" prop="title"/>
- <el-table-column label="专业" align="center" prop="speciality" />
- <el-table-column label="推荐类别组别" align="center">
+ <el-table-column label="用户ID" prop="id" align="center" />
+ <el-table-column label="姓名" prop="name" align="center" width="110" />
+ <el-table-column label="手机号" prop="phone" align="center" width="125" />
+ <el-table-column label="用户名" prop="username" align="center" width="110" />
+ <el-table-column label="性别" prop="sex" align="center" >
<template #default="scope">
- {{findNodeById(state.expertTypes,scope.row.bigClassify)}}/{{findNodeById(state.expertTypes,scope.row.smallClassify)}}
+ <span v-if="scope.row.sex === 0">男</span>
+ <span v-if="scope.row.sex === 1">女</span>
</template>
</el-table-column>
- <el-table-column label="联系电话" align="center" prop="phone"/>
- <el-table-column label="申请时间" align="center" prop="createTime">
+ <el-table-column label="所属机构" prop="agency.name" align="center" width="110" />
+ <el-table-column label="社保" prop="socialSecurity" align="center" width="120">
<template #default="scope">
- {{scope.row.createTime?scope.row.createTime.substring(0,10):''}}
+ <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.socialAttach[0]"
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.socialAttach"
+ :initial-index="0"
+ fit="cover"
+ preview-teleported="true"
+ />
+ </div>
</template>
</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.medicalAttach && scope.row.medicalAttach.length>0">
+ <el-image
+ style="width: 100px; height: 100px"
+ :src="scope.row.medicalAttach[0]"
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.medicalAttach"
+ :initial-index="0"
+ fit="cover"
+ preview-teleported="true"
+ />
+ </div>
+ </template>
+ </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.salaryAttach && scope.row.salaryAttach.length>0">
+ <el-image
+ style="width: 100px; height: 100px"
+ :src= "scope.row.salaryAttach[0]"
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.salaryAttach"
+ :initial-index="0"
+ fit="cover"
+ preview-teleported="true"
+ />
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column label="职务" prop="post" align="center" width="120" />
+ <el-table-column label="职称" prop="jobTitle" align="center" />
+ <el-table-column label="专业方向" prop="majorNames" align="center" width="100" />
+ <el-table-column label="评价师等级" prop="level" align="center" width="100" />
+ <el-table-column label="业绩汇总" prop="summary" align="center" />
+ <el-table-column label="最近评价时间" prop="lastTime" align="center" width="120" />
</el-table>
+
<pagination
- v-show="state.total > 0"
- :total="state.total"
- v-model:page="state.queryParams.pageNum"
- v-model:limit="state.queryParams.pageSize"
+ v-show="total > 0"
+ :total="total"
+ v-model:page="queryParams.pageNum"
+ v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<template #footer>
<span class="dialog-footer">
- <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button @click="dialogVisible = false" size="default">取 消</el-button>
<el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
</span>
</template>
@@ -74,84 +151,120 @@
</div>
</template>
<script setup>
-import {defineEmits, reactive, ref, toRefs} from 'vue'
-import Editor from "@/components/Editor/index.vue";
-import {ElMessage} from "element-plus";
-import {addArea, editArea, getArea} from "@/api/backManage/area";
-import {getExpertsList, getExpertTypes} from "../../../../api/form";
-
-const dialogVisible = ref(false)
-const title = ref("")
-const loading = ref(false)
-const tableRef = ref()
-const emit = defineEmits([""]);
-const state = reactive({
- showSearch: true,
- total: 0,
- expertTypes: [],
- expertList: [],
+import {getCurrentInstance, onMounted, reactive, ref, toRefs,defineEmits} from "vue";
+import {getDictList} from "@/api/backManage/evaluate";
+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 emit = defineEmits(['getName'])
+const data = reactive({
queryParams: {
pageNum: 1,
pageSize: 10,
- state: 2,
- bigClassify: null,
- smallClassify: null,
- dutyStatus: null,
- params: {
- startTime: '',
- endTime: ''
- }
+ expertType: "",
+ name: '',
+ phone: '',
+ level: '',
+ major: null,
+ post: ''
},
- classiFy: [],
- searchTime: [],
+ total: 0,
+ dataList: [],
+ majorList: [],
+ levelList: [
+ {
+ id: '1',
+ name: '一级'
+ },
+ {
+ id: '2',
+ name: '二级'
+ },
+ {
+ id: '3',
+ name: '三级'
+ },
+ {
+ id: '4',
+ name: '其他'
+ },
+ ],
+ postList: [
+ {
+ id: '1',
+ name: '法人'
+ },
+ {
+ id: '2',
+ name: '过程控制负责人'
+ },
+ {
+ id: '3',
+ name: '机构负责人'
+ },
+ {
+ id: '4',
+ name: '技术负责人'
+ },
+ {
+ id: '5',
+ name: '员工'
+ },
+ ],
+ dialogVisible: false,
+ title: '',
selected: []
})
+const tableRef = ref()
+const { queryParams, total, dataList, majorList, levelList, postList, dialogVisible,title,selected } = toRefs(data);
const openDialog = (type) => {
- resetQuery()
- getTypes()
- state.selected = []
- title.value = type
- dialogVisible.value = true
+ getMajor()
+ research()
+ data.selected = []
+ data.title = type
+ data.dialogVisible = true
}
const onSubmit = async () => {
- if(state.selected.length>0)
- emit('getName',title.value,state.selected[state.selected.length - 1])
- dialogVisible.value = false
-}
-
-const handleQuery=()=> {
- state.queryParams.pageNum = 1
- if(state.classiFy && state.classiFy.length>0){
- state.queryParams.bigClassify = state.classiFy[0]
- state.queryParams.smallClassify = state.classiFy[1]
- }
- if(state.searchTime && state.searchTime.length>0){
- state.queryParams.params.startTime = state.searchTime[0]
- state.queryParams.params.endTime = state.searchTime[1]
- }
- getList()
+ if(data.selected.length>0)
+ emit('getName',data.title,data.selected[data.selected.length - 1])
+ data.dialogVisible = false
}
const getList = async () => {
- loading.value = true;
- const res = await getExpertsList(state.queryParams)
+ loading.value = true
+ const res = await getExpertList(data.queryParams)
if(res.code == 200){
- state.expertList = res.data.list
- state.total = res.data.total
+ 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.msg)
+ ElMessage.warning(res.message)
}
- loading.value = false;
+ loading.value = false
}
-const getTypes = async()=> {
- const res = await getExpertTypes()
- if(res.code == 200){
- state.expertTypes = res.data
+const getMajor = async () => {
+ const queryParams = {
+ pageNum: 1,
+ pageSize: 50,
+ dictType: 'sys_major_orientation'
+ }
+ const res = await getDictList(queryParams);
+ if(res.code === 200){
+ data.majorList = res.data.list
}else{
- ElMessage.warning(res.msg)
+ ElMessage.warning(res.message)
}
}
@@ -164,58 +277,26 @@
})
const handleSelectionChange = (val) => {
- state.selected = val
+ data.selected = val
}
-const resetQuery=()=> {
- state.queryParams = {
+const search = ()=>{
+ data.queryParams.pageNum = 1
+ getList()
+}
+
+const research = ()=>{
+ data.queryParams = {
pageNum: 1,
pageSize: 10,
- state: 2,
- bigClassify: null,
- smallClassify: null,
- dutyStatus: null,
- params: {
- startTime: '',
- endTime: ''
- }
- };
- state.classiFy = []
- state.searchTime = []
- handleQuery()
-}
-
-const handleChange=(value)=> {
- if(!value){
- data.classiFy = []
- data.queryParams.bigClassify = ""
- data.queryParams.smallClassify = ""
+ expertType: "",
+ name: '',
+ phone: '',
+ level: '',
+ major: null,
+ post: ''
}
-}
-const changeTime=(value)=>{
- if(!value){
- data.queryParams.params.endTime = ""
- data.queryParams.params.startTime = ""
- }
-}
-
-const findNodeById = (data,value)=> {
- for (const node of data) {
- if (node.id === value) {
- return node.classifyName;
- }
- if (node.children) {
- const foundNode = findNodeById(node.children, value);
- if (foundNode) {
- return foundNode;
- }
- }
- }
- return null;
-}
-
-const handleClose = () => {
- dialogVisible.value = false;
+ getList()
}
defineExpose({
--
Gitblit v1.9.2