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 |  317 +++++++++++++++++++++++-----------------------------
 1 files changed, 139 insertions(+), 178 deletions(-)

diff --git a/src/views/safetyReview/projectManage/components/expertsList.vue b/src/views/safetyReview/projectManage/components/expertsList.vue
index 2d78c70..c344be6 100644
--- a/src/views/safetyReview/projectManage/components/expertsList.vue
+++ b/src/views/safetyReview/projectManage/components/expertsList.vue
@@ -6,140 +6,73 @@
             width="60%"
         >
           <el-form :model="queryParams" :inline="true" label-width="90px">
-            <el-form-item label="专业类别">
-              <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="姓名">
               <el-input
-                  v-model="queryParams.name"
+                  v-model.trim="queryParams.name"
                   placeholder="姓名"
+                  clearable
                   style="width: 250px"
               />
             </el-form-item>
             <el-form-item label="手机号">
               <el-input
-                  v-model="queryParams.phone"
+                  v-model.trim="queryParams.phone"
                   placeholder="手机号"
+                  clearable
                   style="width: 250px"
               />
             </el-form-item>
-            <el-form-item label="评价师等级">
-              <el-select v-model="queryParams.level" style="width: 250px" placeholder="评价师等级" >
+            <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.name"
-                />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="专业方向">
-              <el-select v-model="queryParams.major" clearable 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" clearable 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 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="search">搜索</el-button>
               <el-button icon="Refresh" @click="research">重置</el-button>
             </el-form-item>
           </el-form>
-          <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 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" >
+          <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="idCard" />
+            <el-table-column label="出生日期" align="center" prop="birthdayName" />
+            <el-table-column label="性别" align="center" prop="sex"  >
               <template #default="scope">
-                <span v-if="scope.row.sex === 0">男</span>
-                <span v-if="scope.row.sex === 1">女</span>
+                <span>{{scope.row.sex === 0 ? '男' : '女'}}</span>
               </template>
             </el-table-column>
-            <el-table-column label="所属机构" prop="agency.name" align="center" width="110"  />
-            <el-table-column label="社保" prop="socialSecurity" align="center" width="120">
+            <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="dutyStatus" >
               <template #default="scope">
-                <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>
+                <span>{{scope.row.dutyStatus === 0 ? '在岗' : '退休'}}</span>
               </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">
-              <template #default="scope">
-                <div style="cursor:pointer;color: #3b82f6;" @click="openList(scope.row)">
-                  <span>{{scope.row.projectCount}}</span>
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column label="最近评价时间" prop="lastEstimateTime" align="center" width="120" />
+            <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="total > 0"
               :total="total"
@@ -158,12 +91,13 @@
     </div>
 </template>
 <script setup>
-import {getCurrentInstance, onMounted, reactive, ref, toRefs,defineEmits} from "vue";
+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'])
@@ -171,127 +105,149 @@
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    expertType: "",
     name: '',
     phone: '',
-    level: '',
-    major: null,
-    post: ''
+    ratingLevel: '',
+    smallClassify: null,
+    bigClassify: null,
   },
   total: 0,
-  dataList: [],
-  majorList: [],
+  choosed: [],
+  expertList: [],
+  domainList: [],
+  dialogVisible: false,
+  title: '',
+  selected: [],
+  expertType: [],
   levelList: [
     {
-      id: '1',
+      id: 1,
       name: '一级'
     },
     {
-      id: '2',
+      id: 2,
       name: '二级'
     },
     {
-      id: '3',
+      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 { queryParams, total, expertList, domainList, levelList , dialogVisible,title,selected, expertType } = toRefs(data);
 
-const openDialog = (type) => {
-  getMajor()
+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
-  data.dialogVisible = true
+
 }
 
 const onSubmit = async () => {
-  if(data.selected.length>0)
-  emit('getName',data.title,data.selected[data.selected.length - 1])
-  data.dialogVisible = false
+  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('请选择专家')
+  }
 }
 
 const getList = async () => {
-  loading.value = true
-  const res = await getExpertList(data.queryParams)
+  loading.value = true;
+  const res = await getExpertsList(data.queryParams)
   if(res.code == 200){
-    data.dataList = res.data.list.map(item => {
+    data.expertList = res.rows.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}),
-        lastEstimateTime: item.personProjectVO ? item.personProjectVO.lastEstimateTime.slice(0,10) : '',
-        projectCount: item.personProjectVO ? item.personProjectVO.projectCount : ''
+        birthdayName: item.birthday ? item.birthday.slice(0,10) : '',
+        supportName: item.supportDirectionSafety.split(',')
       }
     })
-    console.log('RES',data.dataList)
-    data.total = res.data.total
+    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.message)
+    ElMessage.warning(res.msg)
   }
-  loading.value = false
+  loading.value = false;
 }
 const projectRef = ref();
 const openList = (val) => {
   projectRef.value.openDialog(val);
 }
 
-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.message)
-  }
-}
+// 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) => {
-  data.selected = val
+  // debugger
+  // data.selected = val
 }
 
 const search = ()=>{
@@ -300,19 +256,24 @@
 }
 
 const research = ()=>{
+  data.expertType = []
   data.queryParams = {
     pageNum: 1,
     pageSize: 10,
-    expertType: "",
     name: '',
     phone: '',
-    level: '',
-    major: null,
-    post: ''
+    ratingLevel: '',
+    smallClassify: null,
+    bigClassify: null,
   }
   getList()
 }
 
+const professionChange=(value)=> {
+  console.log(value,'val')
+  data.queryParams.domain = value[1]
+}
+
 defineExpose({
     openDialog
 });

--
Gitblit v1.9.2