From b609f77709c4646daf155341475ae14fc0c7943d Mon Sep 17 00:00:00 2001 From: 祖安之光 <11848914+light-of-zuan@user.noreply.gitee.com> Date: 星期五, 27 六月 2025 13:25:30 +0800 Subject: [PATCH] 修改 --- src/views/safetyReview/projectManage/components/expertsList.vue | 350 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 203 insertions(+), 147 deletions(-) diff --git a/src/views/safetyReview/projectManage/components/expertsList.vue b/src/views/safetyReview/projectManage/components/expertsList.vue index e08a46a..c344be6 100644 --- a/src/views/safetyReview/projectManage/components/expertsList.vue +++ b/src/views/safetyReview/projectManage/components/expertsList.vue @@ -4,218 +4,274 @@ 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-item label="专业类别"> - <el-cascader + <el-form :model="queryParams" :inline="true" label-width="90px"> + <el-form-item label="姓名"> + <el-input + v-model.trim="queryParams.name" + placeholder="姓名" clearable - v-model="state.classiFy" - :options="state.expertTypes" - :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}" - @change="handleChange"></el-cascader> - </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" + style="width: 250px" /> </el-form-item> + <el-form-item label="手机号"> + <el-input + v-model.trim="queryParams.phone" + placeholder="手机号" + clearable + style="width: 250px" + /> + </el-form-item> + <el-form-item label="等级"> + <el-select v-model="queryParams.ratingLevel" clearable style="width: 250px" placeholder="等级" > + <el-option + v-for="item in levelList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + <el-form-item label="专业领域"> + <el-cascader + clearable + style="width: 100%" + v-model="expertType" + :options="domainList" + :props="{ expandTrigger: 'hover',value: 'classifyName',label: 'classifyName' }" + @change="professionChange" + > + </el-cascader> + </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-column type="selection" width="55" /> - <el-table-column type="index" width="55" align="center" /> + <el-table v-loading="loading" ref="tableRef" :data="expertList" :border="true" row-key="id" @select="select" @selection-change="handleSelectionChange"> + <el-table-column type="selection" :reserve-selection="true" width="55" /> <el-table-column label="姓名" align="center" prop="name" /> - <el-table-column label="出生日期" align="center" prop="birthday" /> + <el-table-column label="身份证号" align="center" prop="idCard" /> + <el-table-column label="出生日期" align="center" prop="birthdayName" /> + <el-table-column label="性别" align="center" prop="sex" > + <template #default="scope"> + <span>{{scope.row.sex === 0 ? '男' : '女'}}</span> + </template> + </el-table-column> <el-table-column label="学历" align="center" prop="degree" /> + <el-table-column label="所学专业" align="center" prop="speciality" /> <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="在岗情况" align="center" prop="dutyStatus" > <template #default="scope"> - {{findNodeById(state.expertTypes,scope.row.bigClassify)}}/{{findNodeById(state.expertTypes,scope.row.smallClassify)}} + <span>{{scope.row.dutyStatus === 0 ? '在岗' : '退休'}}</span> </template> </el-table-column> - <el-table-column label="联系电话" align="center" prop="phone"/> - <el-table-column label="申请时间" align="center" prop="createTime"> - <template #default="scope"> - {{scope.row.createTime?scope.row.createTime.substring(0,10):''}} - </template> - </el-table-column> + <el-table-column label="单位全称" align="center" prop="companyName" width="180"/> + <el-table-column label="现从事专业及方向" align="center" prop="currentProfession"/> + <el-table-column label="联系方式" align="center" prop="phone"/> + <el-table-column label="支撑方向" align="center" prop="supportName" width="165"/> + <el-table-column label="专家领域" align="center" prop="domain"/> + <el-table-column label="入库分级" align="center" prop="level"/> </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> </el-dialog> + <project-dialog ref="projectRef" @getList="getList"></project-dialog> </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, nextTick} from "vue"; +import {getDictList} from "@/api/backManage/evaluate"; +import {ElMessage, ElMessageBox} from "element-plus"; +import projectDialog from "@/views/safetyReview/userManage/expertUsers/components/projectDialog.vue" +import Cookies from "js-cookie"; +import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers"; +import {getExpertsList, getExpertTypes} from "@/api/form"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const emit = defineEmits(['getName']) +const data = reactive({ queryParams: { pageNum: 1, pageSize: 10, - state: 2, - bigClassify: null, + name: '', + phone: '', + ratingLevel: '', smallClassify: null, - dutyStatus: null, - params: { - startTime: '', - endTime: '' - } + bigClassify: null, }, - classiFy: [], - searchTime: [], - selected: [] + total: 0, + choosed: [], + expertList: [], + domainList: [], + dialogVisible: false, + title: '', + selected: [], + expertType: [], + levelList: [ + { + id: 1, + name: '一级' + }, + { + id: 2, + name: '二级' + }, + { + id: 3, + name: '三级' + }, + ] }) +const tableRef = ref() +const { queryParams, total, expertList, domainList, levelList , dialogVisible,title,selected, expertType } = toRefs(data); -const openDialog = (type) => { - resetQuery() - getTypes() - state.selected = [] - title.value = type - dialogVisible.value = true +const openDialog = (type,choosedData,domainList) => { + research() + nextTick(() => { + if(tableRef.value){ + tableRef.value.clearSelection() + } + + }) + data.dialogVisible = true + data.choosed = choosedData.map(item => { + return{ + ...item, + id: item.expertId ? item.expertId : item.id + } + }) + nextTick(() => { + data.choosed.forEach(item => { + tableRef.value.toggleRowSelection(item, true); + }) + }) + data.domainList = domainList + data.selected = [] + data.title = type + } 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(data.selected.length>0){ + data.choosed = JSON.parse(JSON.stringify(data.selected)) + data.selected.length = 0 + data.queryParams.pageNum = 1 + data.queryParams.pageSize = 10 + emit('getName',data.title,data.choosed) + tableRef.value.clearSelection() + data.dialogVisible = false + }else{ + ElMessage.warning('请选择专家') } - if(state.searchTime && state.searchTime.length>0){ - state.queryParams.params.startTime = state.searchTime[0] - state.queryParams.params.endTime = state.searchTime[1] - } - getList() } const getList = async () => { loading.value = true; - const res = await getExpertsList(state.queryParams) + const res = await getExpertsList(data.queryParams) if(res.code == 200){ - state.expertList = res.data.list - state.total = res.data.total + data.expertList = res.rows.map(item => { + return{ + ...item, + birthdayName: item.birthday ? item.birthday.slice(0,10) : '', + supportName: item.supportDirectionSafety.split(',') + } + }) + data.expertList.forEach(item => { + item.supportName.forEach((s,index) => { + switch (s){ + case '1': + item.supportName[index] = '现场检查' + break; + case '2': + item.supportName[index] = '调查评估' + break; + case '3': + item.supportName[index] = '咨询服务' + break; + case '4': + item.supportName[index] = '教育培训' + break; + case '5': + item.supportName[index] = '其他' + break; + } + }) + }) + data.total = res.total }else{ ElMessage.warning(res.msg) } loading.value = false; } - -const getTypes = async()=> { - const res = await getExpertTypes() - if(res.code == 200){ - state.expertTypes = res.data - }else{ - ElMessage.warning(res.msg) - } +const projectRef = ref(); +const openList = (val) => { + projectRef.value.openDialog(val); } +// const getDomain = async () => { +// const res = await getExpertTypes() +// if(res.code == 200){ +// data.domainList = res.data +// }else{ +// ElMessage.warning(res.message) +// } +// } + const select = ((selection, row) => { + // data.expertList.forEach(item => { + // + // }) + // nextTick(() => { + // tableRef.value.toggleRowSelection(item, true) + // }) + tableRef.value.clearSelection() if(selection.length == 0) { return } tableRef.value.toggleRowSelection(row, true); + data.selected = [row] }) const handleSelectionChange = (val) => { - state.selected = val + // debugger + // data.selected = val } -const resetQuery=()=> { - state.queryParams = { +const search = ()=>{ + data.queryParams.pageNum = 1 + getList() +} + +const research = ()=>{ + data.expertType = [] + data.queryParams = { pageNum: 1, pageSize: 10, - state: 2, - bigClassify: null, + name: '', + phone: '', + ratingLevel: '', smallClassify: null, - dutyStatus: null, - params: { - startTime: '', - endTime: '' - } - }; - state.classiFy = [] - state.searchTime = [] - handleQuery() + bigClassify: null, + } + getList() } -const handleChange=(value)=> { - if(!value){ - data.classiFy = [] - data.queryParams.bigClassify = "" - data.queryParams.smallClassify = "" - } -} -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; +const professionChange=(value)=> { + console.log(value,'val') + data.queryParams.domain = value[1] } defineExpose({ -- Gitblit v1.9.2