From 18e2812133add57c3b707f39555321e2a598eea2 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期四, 18 一月 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