From cc3e08bda13360c88b7189e8f8d043b60783c7fb Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期四, 21 十一月 2024 16:46:32 +0800
Subject: [PATCH] 新增

---
 src/views/safetyReview/baseSet/evaluateType/index.vue                            |   39 +
 src/api/login.js                                                                 |    5 
 src/views/safetyReview/expertManage/applyRecords/index.vue                       |   30 
 src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue       |  348 +++++++++-----
 src/views/system/dept/index.vue                                                  |    8 
 src/views/safetyReview/baseSet/openApply/index.vue                               |   81 +++
 src/api/system/dept.js                                                           |   11 
 src/views/safetyReview/expertManage/evaluateRecord/index.vue                     |  120 +---
 src/api/backManage/evaluate.js                                                   |   79 +++
 src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue            |   66 +-
 src/views/safetyReview/expertManage/fillForm/index.vue                           |   68 +-
 src/views/safetyReview/baseSet/expertsType/index.vue                             |    4 
 src/views/safetyReview/expertManage/experts/index.vue                            |  141 ++++-
 src/layout/components/Sidebar/Logo.vue                                           |    2 
 src/views/safetyReview/expertManage/checkProgress/index.vue                      |  152 ++++--
 src/views/safetyReview/expertManage/evaluateRecord/components/evaluateDetail.vue |   62 +-
 src/views/components/loginForm.vue                                               |   36 +
 src/api/form.js                                                                  |   13 
 src/views/safetyReview/expertManage/postEvaluation/index.vue                     |   67 --
 19 files changed, 830 insertions(+), 502 deletions(-)

diff --git a/src/api/backManage/evaluate.js b/src/api/backManage/evaluate.js
index 0ff7148..c8ce9d7 100644
--- a/src/api/backManage/evaluate.js
+++ b/src/api/backManage/evaluate.js
@@ -36,3 +36,82 @@
     })
 }
 
+export function getReviewList(params) {
+    return request({
+        url: '/system/evaluation/list',
+        method: 'get',
+        params: params
+    })
+}
+export function addReview(data) {
+    return request({
+        url: '/system/evaluation/add',
+        method: 'post',
+        data: data
+    })
+}
+
+export function editReview(params) {
+    return request({
+        url: `/system/evaluation/edit`,
+        method: 'put',
+        data: params
+    })
+}
+
+export function delReview(data) {
+    return request({
+        url: `/system/evaluation/` + data.id,
+        method: 'delete'
+    })
+}
+
+export function getApplyList(params) {
+    return request({
+        url: '/system/settings/applyList',
+        method: 'get',
+        params: params
+    })
+}
+
+export function getSettings(params) {
+    return request({
+        url: '/system/settings/getSettings',
+        method: 'get',
+        params: params
+    })
+}
+
+export function updateSettings(params) {
+    return request({
+        url: '/system/settings/updateSettings',
+        method: 'get',
+        params: params
+    })
+}
+
+// 事后评价分页
+export function getProjectExpertList(params) {
+    return request({
+        url: '/system/management/projectExpertList',
+        method: 'get',
+        params: params
+    })
+}
+
+// 专家考评记录
+export function getExpertEvaList(params) {
+    return request({
+        url: '/system/management/projectExpertEvaList',
+        method: 'get',
+        params: params
+    })
+}
+
+export function getExpertEvaDetail(params) {
+    return request({
+        url: '/system/management/selectProjectExpertDetailList',
+        method: 'get',
+        params: params
+    })
+}
\ No newline at end of file
diff --git a/src/api/form.js b/src/api/form.js
index 78913d3..e4f2475 100644
--- a/src/api/form.js
+++ b/src/api/form.js
@@ -12,8 +12,8 @@
 // 获取专家列表
 export function delExpert(id) {
   return request({
-    url: '/expert/info/del/'+id,
-    method: 'get'
+    url: '/system/expert_info/del/'+id,
+    method: 'delete'
   })
 }
 
@@ -78,6 +78,15 @@
   })
 }
 
+// 查询审批结果
+export function queryApprove(data) {
+  return request({
+    url: '/system/expert_info/queryApprove',
+    method: 'post',
+    data: data
+  })
+}
+
 // 根据id获取专家信息
 export function getInfo(id) {
   return request({
diff --git a/src/api/login.js b/src/api/login.js
index 8539913..a494c70 100644
--- a/src/api/login.js
+++ b/src/api/login.js
@@ -82,10 +82,7 @@
 // 删除图片
 export function delPic(path) {
   return request({
-    url: '/system/common/removeFile',
-    headers: {
-      isToken: false
-    },
+    url: '/common/removeFile',
     method: 'delete',
     params: path,
     timeout: 20000
diff --git a/src/api/system/dept.js b/src/api/system/dept.js
index fc943cd..2632179 100644
--- a/src/api/system/dept.js
+++ b/src/api/system/dept.js
@@ -9,6 +9,15 @@
   })
 }
 
+// 查询部门列表
+export function listOutDept(query) {
+  return request({
+    url: '/system/dept/getOutDeptList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询部门列表(排除节点)
 export function listDeptExcludeChild(deptId) {
   return request({
@@ -28,7 +37,7 @@
 // 新增部门
 export function addDept(data) {
   return request({
-    url: '/system/dept',
+    url: '/system/dept/add',
     method: 'post',
     data: data
   })
diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue
index ff486bb..6beb78c 100644
--- a/src/layout/components/Sidebar/Logo.vue
+++ b/src/layout/components/Sidebar/Logo.vue
@@ -15,7 +15,7 @@
 
 <script setup>
 import variables from '@/assets/styles/variables.module.scss'
-import logo from '@/assets/logo/logo.png'
+import logo from '@/assets/logo/logo2.png'
 import useSettingsStore from '@/store/modules/settings'
 import usePermissionStore from '@/store/modules/permission'
 defineProps({
diff --git a/src/views/components/loginForm.vue b/src/views/components/loginForm.vue
index 7d4fd1b..be9abc5 100644
--- a/src/views/components/loginForm.vue
+++ b/src/views/components/loginForm.vue
@@ -48,7 +48,7 @@
           </el-form-item>
           <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 25px">
             <div class="btn-cont">
-              <button class="login-btn" @click.prevent="handleLogin">
+              <button class="login-btn" @click.prevent="handleLogin" v-preReClick>
                 <span v-if="!loading">登 录</span>
                 <span v-else>登 录 中...</span>
               </button>
@@ -59,8 +59,8 @@
           </div>
         </el-form>
         <div class="other-btns">
-          <el-button link type="primary" style="color: #fff" @click="openApply()">专家申请</el-button>
-          <el-button link type="primary" style="color: #fff" @click="openCheck">专家评定进度查询</el-button>
+          <el-button link type="primary" style="color: #fff" @click="openApply()" v-preReClick>专家申请</el-button>
+          <el-button link type="primary" style="color: #fff" @click="openCheck" v-preReClick>专家评定进度查询</el-button>
         </div>
       </div>
     </el-col>
@@ -72,6 +72,7 @@
 <script setup>
 import {onMounted, ref, watch, defineAsyncComponent, nextTick, computed} from "vue"
 import { getCodeImg } from "@/api/login";
+import {getSettings} from "@/api/backManage/evaluate";
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from "@/utils/jsencrypt";
 import useUserStore from '@/store/modules/user'
@@ -79,6 +80,7 @@
 import { Base64 } from 'js-base64'
 import ExpertForm from "../safetyReview/expertManage/applyRecords/components/expertForm";
 import usePermissionStore from '@/store/modules/permission'
+import {ElMessage} from "element-plus";
 const permissionStore = usePermissionStore()
 const sidebarRouters =  computed(() => permissionStore.sidebarRouters);
 const userStore = useUserStore()
@@ -104,6 +106,7 @@
 const regRef = ref(null)
 // 验证码开关
 const captchaEnabled = ref(true);
+const applyStatus = ref('1')
 // 注册开关
 const isRegister = ref(true);
 const redirect = ref(undefined);
@@ -122,12 +125,27 @@
 
 
 const expertFormRef = ref()
-const openApply = () => {
-  // expertFormRef.value.openApply(type, value)
-  const routePath = '/fillForm';
-  const resolvedRoute = router.resolve(routePath);
-  const fullPath = resolvedRoute.href
-  window.open(fullPath, '_blank');
+
+const getApplyStatus = async ()=>{
+  const res = await getSettings()
+  if(res.code == 200){
+    return res.data
+  }else{
+    ElMessage.warning(res.msg)
+    return '0'
+  }
+}
+
+const openApply = async () => {
+  const status = await getApplyStatus();
+  if(status == '1'){
+    const routePath = '/fillForm';
+    const resolvedRoute = router.resolve(routePath);
+    const fullPath = resolvedRoute.href
+    window.open(fullPath, '_blank');
+  }else{
+    ElMessage.warning('抱歉,专家申请暂未开启,请联系相关人员进行处理')
+  }
 }
 
 
diff --git a/src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue b/src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue
index 603ba8b..d188447 100644
--- a/src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue
+++ b/src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue
@@ -8,9 +8,9 @@
         >
             <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="110px" >
               <el-form-item label="类型:" prop="label">
-                <el-radio-group v-model="state.form.type">
-                  <el-radio :label="0" size="large" border>加分项</el-radio>
-                  <el-radio :label="1" size="large" border>扣分项</el-radio>
+                <el-radio-group v-model="state.form.scoreType">
+                  <el-radio label="1" size="large" border>加分项</el-radio>
+                  <el-radio label="2" size="large" border>扣分项</el-radio>
                 </el-radio-group>
               </el-form-item>
               <el-form-item label="标准分值:" prop="score">
@@ -34,7 +34,7 @@
 import Editor from "@/components/Editor/index.vue";
 import {ElMessage} from "element-plus";
 import {addNotice} from "@/api/backManage/notice";
-import {addDict, editDict, getDictDetail} from "@/api/backManage/evaluate";
+import {addDict, addReview, editDict, editReview, getDictDetail} from "@/api/backManage/evaluate";
 
 const dialogVisible = ref(false);
 const title = ref("");
@@ -43,33 +43,25 @@
 const emit = defineEmits(["getList"]);
 const state = reactive({
     form: {
-        id: '',
-        label: '',
-        value: '',
-        dictType: "sys_assess_type",
+      id: '',
+      score: '',
+      content: '',
+      scoreType: null
     },
     formRules:{
-        label: [{ required: true, message: '请输入类型', trigger: 'blur' }],
+      scoreType: [{ required: true, message: '请选择类型', trigger: 'blur' }],
+      score: [{ required: true, message: '请输入标准分值', trigger: 'blur' }],
+      content: [{ required: true, message: '请输入内容', trigger: 'blur' }]
     },
 
 })
 
 const openDialog = async (type, value) => {
-    length.value = value.listLength
-    title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
+    title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看';
     if(type === 'edit') {
-        state.form = value;
-        const param = {
-            dictId: value.id
-        }
-        const res = await getDictDetail(param);
-        if(res.code === 200){
-            state.form = res.data
-        }else{
-            ElMessage.warning(res.message)
-        }
+        state.form = value
     }
-    dialogVisible.value = true;
+    dialogVisible.value = true
 }
 
 const onSubmit = async () => {
@@ -77,11 +69,11 @@
     if(valid){
         if(title.value === '新增'){
             const param = {
-                dictType: "sys_assess_type",
-                label: state.form.label,
-                value: length.value.toString()
+              score: state.form.score,
+              content: state.form.content,
+              scoreType: state.form.scoreType
             }
-            const res = await addDict(param)
+            const res = await addReview(param)
             if(res.code === 200){
                 ElMessage({
                     type: 'success',
@@ -92,27 +84,25 @@
             }
             emit("getList")
             busRef.value.clearValidate();
-            reset();
             dialogVisible.value = false;
         }else if(title.value === '编辑'){
             const param = {
-                id: state.form.id,
-                dictType: state.form.dictType,
-                label: state.form.label,
-                value: state.form.value
+              id: state.form.id,
+              score: state.form.score,
+              content: state.form.content,
+              scoreType: state.form.scoreType
             }
-            const res = await editDict(param)
+            const res = await editReview(param)
             if(res.code === 200){
                 ElMessage({
                     type: 'success',
-                    message: '新增成功'
+                    message: '修改成功'
                 });
             }else{
                 ElMessage.warning(res.message)
             }
             emit("getList")
             busRef.value.clearValidate();
-            reset();
             dialogVisible.value = false;
         }
     }
@@ -126,10 +116,10 @@
 }
 const reset = () => {
     state.form = {
-        id: '',
-        label: '',
-        value: '',
-        dictType: "sys_assess_type",
+      id: '',
+      score: '',
+      content: '',
+      scoreType: null
     }
 }
 defineExpose({
diff --git a/src/views/safetyReview/baseSet/evaluateType/index.vue b/src/views/safetyReview/baseSet/evaluateType/index.vue
index a44c44f..3754b30 100644
--- a/src/views/safetyReview/baseSet/evaluateType/index.vue
+++ b/src/views/safetyReview/baseSet/evaluateType/index.vue
@@ -9,7 +9,7 @@
             >新增</el-button>
         </div>
       <div style="margin-top: 15px;margin-bottom: 15px;">
-        <el-radio-group v-model="queryParams.expertType">
+        <el-radio-group v-model="queryParams.scoreType" @change="reSearch()">
           <el-radio-button label="">全部</el-radio-button>
           <el-radio-button label="1">加分项</el-radio-button>
           <el-radio-button label="2">扣分项</el-radio-button>
@@ -17,9 +17,13 @@
       </div>
         <!-- 表格数据 -->
         <el-table v-loading="loading" :data="dataList" :border="true">
-          <el-table-column label="项目内容" prop="label" align="center"  />
-          <el-table-column label="类型" prop="label" align="center"  />
-          <el-table-column label="标准分值" prop="label" align="center"  />
+          <el-table-column label="项目内容" prop="content" align="center"/>
+          <el-table-column label="类型" prop="scoreType" align="center">
+            <template #default="scope">
+              {{scope.row.scoreType == '1'?'加分项':scope.row.scoreType == '2'?'扣分项':''}}
+            </template>
+          </el-table-column>
+          <el-table-column label="标准分值" prop="score" align="center"  />
           <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
               <template #default="scope">
                   <el-button link type="primary"  @click="openDialog('edit',scope.row)">编辑</el-button>
@@ -47,15 +51,16 @@
 import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
 import typeDialog from "./components/typeDialog.vue"
 import {ElMessage, ElMessageBox} from "element-plus";
-import {delDict, getDictList,} from "@/api/backManage/evaluate";
+import {delDict, delReview, getDictList, getReviewList,} from "@/api/backManage/evaluate";
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
 const typeRef = ref();
 const dictType = ref("sys_assess_type")
 const data = reactive({
     queryParams: {
-        pageNum: 1,
-        pageSize: 10,
+      scoreType: '',
+      pageNum: 1,
+      pageSize: 10,
     },
     total: 0,
     dataList: [
@@ -66,14 +71,14 @@
 
 const { queryParams, total, dataList } = toRefs(data);
 onMounted(() => {
-    // getList();
+    getList();
 });
 const getList = async () => {
     loading.value = true;
-    const res = await getDictList({dictType: dictType.value});
-    if(res.code === 200){
-        dataList.value = res.data.list
-        total.value = res.data.total
+    const res = await getReviewList(data.queryParams);
+    if(res.code == 200){
+        dataList.value = res.rows
+        total.value = res.total
     }else{
         ElMessage.warning(res.message)
     }
@@ -97,6 +102,12 @@
 function reset() {
     proxy.resetForm("roleRef");
 }
+
+const reSearch=()=>{
+  data.queryParams.pageNum = 1
+  getList()
+}
+
 const handleDelete = (val) => {
     ElMessageBox.confirm(
         '确定删除此条数据?',
@@ -107,13 +118,13 @@
             type: 'warning',
         })
         .then( async() => {
-            const res = await delDict(val);
+            const res = await delReview(val);
             if(res.code === 200){
                 ElMessage({
                     type: 'success',
                     message: '删除成功'
                 });
-                getList();
+                await getList();
             }else{
                 ElMessage.warning(res.message)
             }
diff --git a/src/views/safetyReview/baseSet/expertsType/index.vue b/src/views/safetyReview/baseSet/expertsType/index.vue
index 3808ca5..379022e 100644
--- a/src/views/safetyReview/baseSet/expertsType/index.vue
+++ b/src/views/safetyReview/baseSet/expertsType/index.vue
@@ -100,10 +100,10 @@
 const formRef = ref()
 
   onMounted(()=>{
-    // getList()
+    getList()
   })
     /** 查询岗位列表 */
-  const getList = async()=> {
+    const getList = async()=> {
       state.loading = true;
       const res = await getExpertTypes()
       if(res.code == 200){
diff --git a/src/views/safetyReview/baseSet/openApply/index.vue b/src/views/safetyReview/baseSet/openApply/index.vue
index d50a03d..77d6aec 100644
--- a/src/views/safetyReview/baseSet/openApply/index.vue
+++ b/src/views/safetyReview/baseSet/openApply/index.vue
@@ -1,8 +1,18 @@
 <template>
     <div class="app-container">
         <div style="margin-bottom: 10px">
-          <el-button type="primary" plain icon="Open">开启专家申请</el-button>
-          <el-button type="danger" plain icon="TurnOff">关闭专家申请</el-button>
+<!--          <el-button type="primary" plain icon="Open">开启专家申请</el-button>-->
+<!--          <el-button type="danger" plain icon="TurnOff">关闭专家申请</el-button>-->
+          <el-switch
+              v-model="applyStatus"
+              inline-prompt
+              style="--el-switch-on-color: #ff4949; --el-switch-off-color: #13ce66"
+              active-text="关闭专家申请"
+              inactive-text="开启专家申请"
+              active-value="2"
+              inactive-value="1"
+              @change="handleChange"
+          />
         </div>
         <!-- 表格数据 -->
         <el-table v-loading="loading" :data="dataList" :border="true">
@@ -28,7 +38,7 @@
 <script setup>
 import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
 import {ElMessage, ElMessageBox} from "element-plus";
-import {delDict, getDictList} from "@/api/backManage/evaluate";
+import {getApplyList, getSettings, updateSettings} from "@/api/backManage/evaluate";
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
 const busRef = ref();
@@ -36,8 +46,7 @@
 const data = reactive({
     queryParams: {
         pageNum: 1,
-        pageSize: 10,
-        dictType: dictType.value
+        pageSize: 10
     },
     total: 0,
     dataList: [
@@ -49,16 +58,45 @@
 const { queryParams, total, dataList } = toRefs(data);
 
 onMounted(() => {
-    // getList();
+  getList()
+  getApplyStatus()
 });
+const applyStatus = ref()
+const isInitialized = ref(false)
+
+const getApplyStatus = async ()=>{
+  const res = await getSettings()
+  if(res.code == 200){
+    applyStatus.value = res.data
+    isInitialized.value = true
+  }else{
+    ElMessage.warning(res.msg)
+  }
+}
+
+const handleChange = (val)=>{
+  if (!isInitialized.value) return
+  changeStatus(val);
+}
+
+const changeStatus = async (val) => {
+  const res = await updateSettings({ sysSettings: val });
+  if (res.code == 200) {
+    ElMessage.success('专家申请设置已更新');
+    await getList()
+  } else {
+    ElMessage.warning(res.msg);
+  }
+}
+
 const getList = async () => {
     loading.value = true;
-    const res = await getDictList(data.queryParams);
+    const res = await getApplyList(data.queryParams);
     if(res.code === 200){
-        dataList.value = res.data.list
-        total.value = res.data.total
+        dataList.value = res.rows
+        total.value = res.total
     }else{
-        ElMessage.warning(res.message)
+        ElMessage.warning(res.msg)
     }
     loading.value = false;
 }
@@ -102,7 +140,26 @@
 </script>
 <style>
 .pag-container{
-float: right;
-margin-top: 10px;
+  float: right;
+  margin-top: 10px;
 }
+.el-switch__core{
+  height: 32px;
+  padding: 10px 30px;
+  border-radius: 16px;
+
+  .el-switch__inner{
+    height: 32px;
+  }
+  .el-switch__action{
+    width: 24px;
+    height: 24px;
+    left: 4px;
+  }
+}
+
+.el-switch.is-checked .el-switch__core .el-switch__action{
+  left: calc(100% - 28px);
+}
+
 </style>
diff --git a/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue b/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
index 5e88339..59cf27e 100644
--- a/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
+++ b/src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
@@ -12,29 +12,29 @@
             <el-form :model="state.form" :rules="state.rules" ref="ruleFormRef" label-width="200px">
               <el-row>
                 <el-col :span="20">
-                  <el-form-item label="专业类别" prop="profession">
+                  <el-form-item label="专业类别" prop="domain">
                     <el-cascader
                         :disabled="state.disable"
                         style="width: 100%"
-                        v-model="state.form.profession"
+                        v-model="state.form.domain"
                         :options="state.expertsType"
-                        :props="{ expandTrigger: 'hover',value: 'id',label: 'classifyName' }"
+                        :props="{ expandTrigger: 'hover',value: 'classifyName',label: 'classifyName',emitPath: false }"
                         @change="professionChange"></el-cascader>
                   </el-form-item>
                 </el-col>
               </el-row>
-              <!--        <el-row>-->
-              <!--          <el-col :span="20">-->
-              <!--            <el-form-item label="填报日期" prop="date">-->
-              <!--              <el-date-picker-->
-              <!--                style="width: 100%"-->
-              <!--                v-model="form.date"-->
-              <!--                type="date"-->
-              <!--                placeholder="选择日期">-->
-              <!--              </el-date-picker>-->
-              <!--            </el-form-item>-->
-              <!--          </el-col>-->
-              <!--        </el-row>-->
+              <el-row>
+                <el-col :span="20">
+                  <el-form-item label="业务处室:" prop="deptId">
+                    <el-cascader
+                        style="width: 100%"
+                        clearable
+                        v-model="state.form.deptId"
+                        :options="state.deptList"
+                        :props="{ expandTrigger: 'hover', value: 'deptId',label: 'deptName',emitPath: false}"></el-cascader>
+                  </el-form-item>
+                </el-col>
+              </el-row>
               <el-row>
                 <el-col :span="20">
                   <el-form-item label="姓名" prop="name">
@@ -58,7 +58,7 @@
                     <el-date-picker
                         style="width: 100%"
                         v-model="state.form.birthday"
-                        value-format="YYYY-MM-DD 00:00:00"
+                        value-format="YYYY-MM-DD"
                         type="date"
                         placeholder="选择日期" :disabled="state.disable">
                     </el-date-picker>
@@ -310,7 +310,39 @@
               </el-row>
             </el-form>
             <el-dialog v-model="imgDialog">
-              <img w-full :src="state.dialogImageUrl" alt="">
+              <img style="width: 100%" w-full :src="state.dialogImageUrl" alt="">
+            </el-dialog>
+            <el-dialog
+                v-model="state.assessDialog"
+                title="评定详情"
+                width="50%"
+                :before-close="closeAssess"
+            >
+              <el-form :model="state.assessForm" :rules="state.assessRules" ref="assessFormRef" label-width="200px">
+                <el-form-item label="专家聘用期限" prop="employTime">
+                  <el-date-picker
+                      v-model="state.assessForm.employTime"
+                      type="daterange"
+                      range-separator="至"
+                      start-placeholder="开始日期"
+                      end-placeholder="结束日期"
+                      value-format="YYYY-MM-DD"
+                  />
+                </el-form-item>
+                <el-form-item label="专家评定等级" prop="ratingLevel">
+                  <el-radio-group v-model="state.assessForm.ratingLevel">
+                    <el-radio label="1">一级</el-radio>
+                    <el-radio label="2">二级</el-radio>
+                    <el-radio label="3">三级</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </el-form>
+              <template #footer>
+                <span class="dialog-footer">
+                  <el-button @click="closeAssess" size="default">取 消</el-button>
+                  <el-button type="primary" @click="assessSubmit(assessFormRef)" size="default" v-preReClick>确认</el-button>
+                </span>
+              </template>
             </el-dialog>
           </div>
             <template #footer>
@@ -319,25 +351,29 @@
                   <el-button type="primary" @click="onSubmit(ruleFormRef)" size="default" v-preReClick>确认</el-button>
               </span>
               <span class="dialog-footer" v-if="state.title == '评定'">
-                  <el-button type="danger" size="default" @click="assess(3)"  v-preReClick>评定驳回</el-button>
-                  <el-button type="primary" @click="assess(2)" size="default" v-preReClick>评定通过</el-button>
+                  <el-button type="danger" size="default" @click="startAssess(3)"  v-preReClick>评定驳回</el-button>
+                  <el-button type="primary" @click="startAssess(2)" size="default" v-preReClick>评定通过</el-button>
               </span>
             </template>
         </el-dialog>
+
     </div>
 </template>
 <script setup>
-import {reactive, ref, toRefs, defineEmits, nextTick, onMounted} from 'vue'
+import {reactive, ref, toRefs, defineEmits, nextTick, onMounted, getCurrentInstance} from 'vue'
 import {ElMessage, ElMessageBox} from "element-plus"
 import {verifyPhone, verifyIdCard} from "../../../../../utils/validate"
 import {addExpertInfo, getExpertTypes, getInfo, modExpertInfo, uploadFile, changeApprove} from "@/api/form"
 import {delPic} from "@/api/login"
 import { getToken } from "@/utils/auth"
 import {Base64} from "js-base64"
+import {listOutDept} from "@/api/system/dept";
 const emit = defineEmits(["getList"])
 const dialogVisible = ref(false)
 const imgDialog = ref(false)
 const ruleFormRef = ref()
+const assessFormRef = ref()
+const { proxy } = getCurrentInstance()
 var validatePass = (rule, value, callback) => {
   if (state.fileList.length == 0) {
     callback(new Error('请上传证件照'));
@@ -369,13 +405,13 @@
 }
 
 const state = reactive({
+  assessDialog: false,
   form:{
     id: null,
     name:'',
     sex:'',
-    profession: [],
-    bigClassify:null,
-    smallClassify: null,
+    domain: '',
+    deptId: null,
     birthday: '',
     phone:'',
     title: '',
@@ -405,9 +441,14 @@
     remark: '',
     source: 2
   },
+  assessForm: {
+    employTime: [],
+    ratingLevel: ''
+  },
   hasDeleteFile: false,
   disable: false,
   expertsType: [],
+  deptList: [],
   directionList: [
     {
       value: 1,
@@ -430,7 +471,7 @@
       label: '其他'
     }
   ],
-  uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
+  uploadUrl: import.meta.env.VITE_APP_BASE_API + '/common/upload',
   header: {
     Authorization: 'Bearer ' + getToken()
   },
@@ -445,7 +486,8 @@
   rules:{
     name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
     sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
-    profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
+    domain: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
+    deptId: [{ required: true, message: '请选择业务处室', trigger: 'blur' }],
     birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
     phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
     title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
@@ -454,6 +496,10 @@
     dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
     companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
     degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }]
+  },
+  assessRules:{
+    employTime: [{ required: true, message: '请选择聘用期限', trigger: 'blur' }],
+    ratingLevel: [{ required: true, message: '请选择评定等级', trigger: 'blur' }]
   }
 })
 
@@ -463,98 +509,113 @@
   const openDialog = (type, value) => {
     state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='view' ?'查看':'评定'
     getExpertsType()
-      if(type == 'edit'||type=='view'||type=='assess'){
-        getInfo(value.id).then((res)=>{
-          if(res.code == 200){
-            if(res.data) {
-              const val = res.data
-              for(let i in state.form) {
-                if (validKey(i, val)) {
-                  state.form[i] = val[i]
-                }
-              }
-              state.form.profession[0] = val.bigClassify
-              state.form.profession[1] = val.smallClassify
-              if(val.supportDirectionSafety){
-                state.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i=>Number(i))
-              }
-              if(val.supportDirectionPrevention){
-                state.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i=>Number(i))
-              }
-              if(val.supportDirectionEmergency){
-                state.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i=>Number(i))
-              }
-              state.fileList.push({
-                name: state.form.electronicPhoto,
-                url: import.meta.env.VITE_APP_BASE_API + '/' + state.form.electronicPhoto,
-              })
-              if(state.form.resumeKey !== ''){
-                state.resumeList = state.form.resumeKey.split(',').map(i=>{
-                  return {
-                    name: i,
-                    url: import.meta.env.VITE_APP_BASE_API + '/' + i,
-                  }
-                })
-              }
-              if(state.form.paperSituationKey !== ''){
-                state.inventionList = state.form.paperSituationKey.split(',').map(i=>{
-                  return {
-                    name: i,
-                    url: import.meta.env.VITE_APP_BASE_API + '/' + i,
-                  }
-                })
-              }
-              if(state.form.rewardKey !== ''){
-                state.rewardList = state.form.rewardKey.split(',').map(i=>{
-                  return {
-                    name: i,
-                    url: import.meta.env.VITE_APP_BASE_API + '/' + i,
-                  }
-                })
-              }
-              if(state.form.achievementKey !== ''){
-                state.achievementList = state.form.achievementKey.split(',').map(i=>{
-                  return {
-                    name: i,
-                    url: import.meta.env.VITE_APP_BASE_API + '/' + i,
-                  }
-                })
-              }
-              if(state.form.personalOpinionKey !== ''){
-                state.proAdviceList = state.form.personalOpinionKey.split(',').map(i=>{
-                  return {
-                    name: i,
-                    url: import.meta.env.VITE_APP_BASE_API + '/' + i,
-                  }
-                })
-              }
-              if(state.form.recommendUnitOpinionKey !== ''){
-                state.adviceList = state.form.recommendUnitOpinionKey.split(',').map(i=>{
-                  return {
-                    name: i,
-                    url: import.meta.env.VITE_APP_BASE_API + '/' + i,
-                  }
-                })
+    getDepList()
+    state.fileList = []
+    if(type == 'edit'||type=='view'||type=='assess'){
+      getInfo(value.id).then((res)=>{
+        if(res.code == 200){
+          if(res.data) {
+            const val = res.data
+            for(let i in state.form) {
+              if (validKey(i, val)) {
+                state.form[i] = val[i]
               }
             }
-            dialogVisible.value = true
-          }else{
-            ElMessage.warning('数据获取失败:'+res.message)
+            if(val.supportDirectionSafety && val.supportDirectionSafety!==''){
+              state.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i=>Number(i))
+            }else{
+              state.form.supportDirectionSafety = []
+            }
+            if(val.supportDirectionPrevention && val.supportDirectionPrevention!==''){
+              state.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i=>Number(i))
+            }else{
+              state.form.supportDirectionPrevention = []
+            }
+            if(val.supportDirectionEmergency && val.supportDirectionEmergency!==''){
+              state.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i=>Number(i))
+            }else{
+              state.form.supportDirectionEmergency = []
+            }
+            state.fileList.push({
+              name: state.form.electronicPhoto,
+              url: state.form.electronicPhoto,
+            })
+            if(state.form.resumeKey !== ''){
+              state.resumeList = state.form.resumeKey.split(',').map(i=>{
+                return {
+                  name: i,
+                  url: i,
+                }
+              })
+            }
+            if(state.form.paperSituationKey !== ''){
+              state.inventionList = state.form.paperSituationKey.split(',').map(i=>{
+                return {
+                  name: i,
+                  url: i,
+                }
+              })
+            }
+            if(state.form.rewardKey !== ''){
+              state.rewardList = state.form.rewardKey.split(',').map(i=>{
+                return {
+                  name: i,
+                  url: i,
+                }
+              })
+            }
+            if(state.form.achievementKey !== ''){
+              state.achievementList = state.form.achievementKey.split(',').map(i=>{
+                return {
+                  name: i,
+                  url: i,
+                }
+              })
+            }
+            if(state.form.personalOpinionKey !== ''){
+              state.proAdviceList = state.form.personalOpinionKey.split(',').map(i=>{
+                return {
+                  name: i,
+                  url: i,
+                }
+              })
+            }
+            if(state.form.recommendUnitOpinionKey !== ''){
+              state.adviceList = state.form.recommendUnitOpinionKey.split(',').map(i=>{
+                return {
+                  name: i,
+                  url: i,
+                }
+              })
+            }
           }
-        })
-        if(type == 'edit'){
-          state.disable = false
+          console.log(state.form,'form')
+          dialogVisible.value = true
         }else{
-          state.disable = true
+          ElMessage.warning('数据获取失败:'+res.msg)
         }
-      }else{
+      })
+      if(type == 'edit'){
         state.disable = false
-        dialogVisible.value = true
+      }else{
+        state.disable = true
       }
+    }else{
+      state.disable = false
+      dialogVisible.value = true
+    }
   }
 
   const validKey=(key,obj)=>{
     return key in obj
+  }
+
+  const startAssess = async (num)=>{
+    if(num == 2){
+      state.assessDialog = true
+    }else{
+      await assess(num)
+    }
   }
 
   const assess = (num)=>{
@@ -567,18 +628,34 @@
           type: 'warning',
         })
         .then(async() => {
-          const res = await changeApprove({id:state.form.id,state: num})
+          let params = {}
+          if(num == 2){
+            params = {
+              id: state.form.id,
+              state: num,
+              employmentDateStart: state.assessForm.employTime[0],
+              employmentDateEnd: state.assessForm.employTime[1],
+              ratingLevel: state.assessForm.ratingLevel
+            }
+          }else{
+            params = {
+              id:state.form.id,
+              state: num
+            }
+          }
+          const res = await changeApprove(params)
           if(res.code == 200){
             ElMessage({
               type: 'success',
               message: '审批成功'
             });
             emit('getList')
+            state.assessDialog = false
             dialogVisible.value = false
           }else{
             ElMessage({
               type: 'warning',
-              message: res.message
+              message: res.msg
             });
           }
         })
@@ -595,6 +672,12 @@
       });
     }
   }
+
+function getDepList() {
+  listOutDept({}).then(response => {
+    state.deptList = proxy.handleTree(response.data, "deptId",'parentId','children');
+  });
+}
 
   const professionChange=(value)=> {
     console.log(value,'val')
@@ -628,9 +711,9 @@
   const handleAvatarSuccess = (res, uploadFile,type) => {
     if(res.code == 200){
       if(type == '证件照'){
-        state.form.electronicPhoto = res.data.path
+        state.form.electronicPhoto = res.url
       }else{
-        uploadFile.name = res.data.path
+        uploadFile.name = res.url
       }
     }else{
       ElMessage({
@@ -641,6 +724,7 @@
   }
 
   const handleRemove = (file, uploadFiles,type) => {
+    console.log(file, uploadFiles)
     if(file && file.status == 'success') {
       ElMessageBox.confirm(
           '该操作将永久删除此文件内容,是否继续?',
@@ -667,7 +751,7 @@
             } else {
               ElMessage({
                 type: 'warning',
-                message: res.message
+                message: res.msg
               })
             }
           })
@@ -683,23 +767,20 @@
         return
       }
       let data = JSON.parse(JSON.stringify(state.form))
-      data.supportDirectionSafety = data.supportDirectionSafety.join(',')
-      data.supportDirectionPrevention = data.supportDirectionPrevention.join(',')
-      data.supportDirectionEmergency = data.supportDirectionEmergency.join(',')
-      data.bigClassify = data.profession[0]
-      data.smallClassify = data.profession[1]
+      data.supportDirectionSafety = Array.isArray(data.supportDirectionSafety)?data.supportDirectionSafety.join(','):''
+      data.supportDirectionPrevention = Array.isArray(data.supportDirectionPrevention)?data.supportDirectionPrevention.join(','):''
+      data.supportDirectionEmergency = Array.isArray(data.supportDirectionEmergency)?data.supportDirectionEmergency.join(','):''
       data.resumeKey = state.resumeList.map(i=>i.name).join(',')
       data.paperSituationKey = state.inventionList.map(i=>i.name).join(',')
       data.rewardKey = state.rewardList.map(i=>i.name).join(',')
       data.achievementKey = state.achievementList.map(i=>i.name).join(',')
       data.personalOpinionKey = state.proAdviceList.map(i=>i.name).join(',')
       data.recommendUnitOpinionKey = state.adviceList.map(i=>i.name).join(',')
-      delete data.profession
       if(state.title == '新增'){
         delete data.id
         const res= await addExpertInfo(data)
         if(res.code == 200){
-          ElMessage.success(res.message)
+          ElMessage.success(res.msg)
           state.fileList = []
           state.resumeList = []
           state.inventionList = []
@@ -711,12 +792,12 @@
           state.hasDeleteFile = false
           dialogVisible.value = false
         }else{
-          ElMessage.warning(res.message)
+          ElMessage.warning(res.msg)
         }
       }else{
         const res= await modExpertInfo(data)
         if(res.code == 200){
-          ElMessage.success(res.message)
+          ElMessage.success(res.msg)
           state.fileList = []
           state.resumeList = []
           state.inventionList = []
@@ -728,13 +809,33 @@
           state.hasDeleteFile = false
           dialogVisible.value = false
         }else{
-          ElMessage.warning(res.message)
+          ElMessage.warning(res.msg)
         }
       }
     } else {
       ElMessage.warning('请完善必填信息')
     }
   })
+}
+
+const assessSubmit = async (formEl)=> {
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      await assess(2)
+    }else {
+      ElMessage.warning('请完善必填信息')
+    }
+    })
+}
+
+const closeAssess = ()=>{
+  assessFormRef.value.clearValidate()
+  state.assessForm = {
+    employTime: [],
+    ratingLevel: ''
+  }
+  state.assessDialog = false;
 }
 
 const handleClose = () => {
@@ -744,9 +845,8 @@
         id: null,
         name:'',
         sex:'',
-        profession: [],
-        bigClassify:null,
-        smallClassify: null,
+        domain: '',
+        deptId: null,
         birthday: '',
         phone:'',
         title: '',
diff --git a/src/views/safetyReview/expertManage/applyRecords/index.vue b/src/views/safetyReview/expertManage/applyRecords/index.vue
index 96084d0..c62e07f 100644
--- a/src/views/safetyReview/expertManage/applyRecords/index.vue
+++ b/src/views/safetyReview/expertManage/applyRecords/index.vue
@@ -4,9 +4,9 @@
         <el-form-item label="专业类别">
           <el-cascader
               clearable
-              v-model="classiFy"
+              v-model="queryParams.domain"
               :options="expertTypes"
-              :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}"
+              :props="{ expandTrigger: 'hover', value: 'classifyName',label: 'classifyName'}"
               @change="handleChange"></el-cascader>
         </el-form-item>
         <el-form-item label="姓名">
@@ -52,15 +52,15 @@
       <el-table v-loading="loading" :data="expertList" :border="true">
         <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="birthday">
+          <template #default="scope">
+            {{scope.row.birthday.slice(0,10)}}
+          </template>
+        </el-table-column>
         <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">
-          <template #default="scope">
-            {{findNodeById(expertTypes,scope.row.bigClassify)}}/{{findNodeById(expertTypes,scope.row.smallClassify)}}
-          </template>
-        </el-table-column>
+        <el-table-column label="推荐类别组别" align="center" prop="domain"/>
         <el-table-column label="联系电话" align="center" prop="phone"/>
         <el-table-column label="申请时间" align="center" prop="createTime">
           <template #default="scope">
@@ -112,8 +112,7 @@
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    bigClassify: null,
-    smallClassify: null,
+    domain: '',
     dutyStatus: null,
     name: '',
     params: {
@@ -176,10 +175,6 @@
 
 const handleQuery=()=> {
   data.queryParams.pageNum = 1
-  if(data.classiFy && data.classiFy.length>0){
-    data.queryParams.bigClassify = data.classiFy[0]
-    data.queryParams.smallClassify = data.classiFy[1]
-  }
   if(data.searchTime && data.searchTime.length>0){
     data.queryParams.params.startTime = data.searchTime[0]
     data.queryParams.params.endTime = data.searchTime[1]
@@ -191,8 +186,8 @@
   loading.value = true;
   const res = await getExpertsList(data.queryParams)
   if(res.code == 200){
-    data.expertList = res.data.list
-    data.total = res.data.total
+    data.expertList = res.rows
+    data.total = res.total
   }else{
     ElMessage.warning(res.msg)
   }
@@ -226,8 +221,7 @@
   data.queryParams = {
     pageNum: 1,
     pageSize: 10,
-    bigClassify: null,
-    smallClassify: null,
+    domain: '',
     dutyStatus: null,
     name: '',
     params: {
diff --git a/src/views/safetyReview/expertManage/checkProgress/index.vue b/src/views/safetyReview/expertManage/checkProgress/index.vue
index 30173e0..b448ce7 100644
--- a/src/views/safetyReview/expertManage/checkProgress/index.vue
+++ b/src/views/safetyReview/expertManage/checkProgress/index.vue
@@ -1,45 +1,36 @@
 <template>
   <div class="form-container">
-    <el-dialog
-        v-model="dialogVisible"
-        title="专家申请进度查询"
-        width="550px"
-        :before-close="handleClose"
-        center
-    >
-      <el-form :model="state.form" size="default" ref="formRef" :rules="state.formRules" label-width="110px" >
-        <el-form-item label="身份证号:" prop="idCard">
-          <el-input v-model.trim="state.form.idCard" placeholder="请输入身份证号"></el-input>
-        </el-form-item>
-        <el-form-item label="手机号:" prop="phone">
-          <el-input v-model.trim="state.form.phone" placeholder="请输入申报时预留的手机号"></el-input>
-        </el-form-item>
-        <el-form-item label="业务处室:" prop="roomId">
-          <el-select v-model="state.form.roomId"  style="width: 100%" class="m-2" placeholder="请选择申请的业务处室">
-            <el-option
-                v-for="item in state.agencyList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.name"
-            />
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-            <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>进度查询</el-button>
-        </span>
-      </template>
-    </el-dialog>
-    <div class="pro-map">
+    <el-form :model="queryParams" size="default" ref="formRef" inline :rules="formRules" label-width="110px" >
+      <el-form-item label="身份证号:" prop="idCard">
+        <el-input v-model.trim="queryParams.idCard" placeholder="请输入身份证号"></el-input>
+      </el-form-item>
+      <el-form-item label="手机号:" prop="phone">
+        <el-input v-model.trim="queryParams.phone" placeholder="请输入申报时预留的手机号"></el-input>
+      </el-form-item>
+      <el-form-item label="业务处室:" prop="deptId">
+        <el-cascader
+            clearable
+            placeholder="请选择申请的业务处室"
+            v-model="queryParams.deptId"
+            :options="deptList"
+            :props="{ expandTrigger: 'hover', value: 'deptId',label: 'deptName',checkStrictly: true,emitPath: false}"></el-cascader>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="onSubmit(formRef)" v-preReClick>进度查询</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="pro-map" v-if="showProgress">
       <button class="pro-btn-active">申请提交</button>
-      <button class="pro-btn">
-        <span>待评定</span>
+      <button :class="(result.state == 4 ||result.state == 2) ?'pro-btn-active':result.state == 3?'pro-btn-red':result.state == 1?'pro-btn-blue':'pro-btn'">
+        <span v-if="result.state == 1">待评定</span>
+        <span v-if="result.state == 3">评定不符合</span>
+        <span v-if="result.state == 2">评定通过</span>
       </button>
-      <button class="pro-btn">
+      <button :class="result.state == 4?'pro-btn-active':'pro-btn'">
         专家入库
       </button>
-      <button class="pro-btn">
+      <button :class="result.state == 4?'pro-download-active':'pro-download'">
         专家证书下载
       </button>
     </div>
@@ -50,7 +41,10 @@
 import {ElMessage, ElMessageBox} from "element-plus"
 import {verifyPhone, verifyIdCard} from "../../../../utils/validate"
 import { getToken } from "@/utils/auth"
+import {getExpertsList, queryApprove} from "@/api/form";
+import {listOutDept} from "@/api/system/dept";
 
+const { proxy } = getCurrentInstance();
 
 let validatePhone = (rule, value, callback)=>{
   if(value === ''){
@@ -75,27 +69,34 @@
   }
 }
 
-const dialogVisible = ref(false)
-const formRef = ref()
-const handleClose = () => {
-  reset();
-  formRef.value.clearValidate();
-  dialogVisible.value = false;
-}
-
-
-const state = reactive({
-  form:{
-    idCard: null,
+const data = reactive({
+  queryParams: {
+    idCard: '',
     phone: '',
-    roomId: null
+    deptId: null
   },
   formRules:{
     idCard:[{ required: true, validator: verifyId, trigger: 'blur' }],
     phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
-    roomId: [{ required: true, message: '请选择申请的业务处室', trigger: 'blur' }]
-  }
+    deptId: [{ required: true, message: '请选择申请的业务处室', trigger: 'blur' }]
+  },
+  result: {}
 })
+
+const {queryParams,formRules,result} = toRefs(data)
+const deptList = ref([]);
+onMounted(()=>{
+  getDepList()
+})
+
+const showProgress = ref(false)
+const formRef = ref()
+
+function getDepList() {
+  listOutDept({}).then(response => {
+    deptList.value = proxy.handleTree(response.data, "deptId",'parentId','children');
+  })
+}
 
 onMounted(()=>{
 
@@ -105,19 +106,36 @@
   if (!formEl) return
   await formEl.validate(async (valid, fields) => {
     if (valid) {
-
+      const res = await queryApprove(data.queryParams)
+      if(res.code == 200){
+        data.result = res.data
+        showProgress.value = true
+      }else{
+        showProgress.value = false
+        ElMessage.warning(res.msg)
+      }
     } else {
       ElMessage.warning('请完善必填信息')
     }
   })
 }
 
+
+const resetQuery = ()=>{
+  data.queryParams = {
+    idCard: '',
+    phone: '',
+    deptId: null
+  }
+  showProgress.value = false
+}
 </script>
 
 <style scoped lang="scss">
 .form-container{
   padding: 20px;
   display: flex;
+  flex-direction: column;
   justify-content: center;
   align-items: center;
 
@@ -127,28 +145,42 @@
     display: flex;
     justify-content: space-around;
 
-    .pro-btn {
+    .pro-btn,.pro-download{
       width: calc(25% - 20px);
-      color: #fff;
+      color: #333;
       cursor: pointer;
-      border: 1px solid #000;
+      border: 1px solid #666;
       border-radius: 40px 99px 99px 40px;
       padding: 2em 4em;
-      background: #000;
+      background: #ccc;
       transition: 0.2s;
     }
 
-    .pro-btn-active {
+    .pro-btn-active,.pro-btn-red,.pro-btn-blue,.pro-download-active {
       width: calc(25% - 20px);
       color: #fff;
       cursor: pointer;
-      border: 1px solid #000;
+      border: 1px solid #666;
       border-radius: 40px 99px 99px 40px;
       padding: 2em 4em;
       transition: 0.2s;
       transform: translate(-0.25rem, -0.25rem);
-      background: #03a9f4;
-      box-shadow: 0.25rem 0.25rem #000;
+      background: #67C23A;
+      box-shadow: 0.25rem 0.25rem #ccc;
+    }
+
+    .pro-download-active,.pro-download{
+      border-radius: 20px;
+    }
+
+    .pro-btn-red{
+      color: #fff;
+      background: #F56C6C;
+    }
+
+    .pro-btn-blue{
+      color: #fff;
+      background: #2563EB;
     }
   }
 }
diff --git a/src/views/safetyReview/expertManage/evaluateRecord/components/evaluateDetail.vue b/src/views/safetyReview/expertManage/evaluateRecord/components/evaluateDetail.vue
index 5cc296e..09328b7 100644
--- a/src/views/safetyReview/expertManage/evaluateRecord/components/evaluateDetail.vue
+++ b/src/views/safetyReview/expertManage/evaluateRecord/components/evaluateDetail.vue
@@ -7,27 +7,27 @@
             :before-close="handleClose"
         >
             <el-form :model="state.form" inline size="default" ref="busRef" :rules="state.formRules" label-width="140px" >
-              <el-form-item label="姓名:" prop="score">
-                  <el-input v-model.trim="state.form.score" readonly></el-input>
+              <el-form-item label="姓名:" prop="name">
+                  <el-input v-model.trim="state.form.name" readonly></el-input>
               </el-form-item>
-              <el-form-item label="身份证号:" prop="content">
-                <el-input v-model.trim="state.form.content" readonly></el-input>
+              <el-form-item label="身份证号:" prop="idCard">
+                <el-input v-model.trim="state.form.idCard" readonly></el-input>
               </el-form-item>
-              <el-form-item label="项目名称:" prop="score">
+              <el-form-item label="项目名称:" prop="projectName">
+                <el-input v-model.trim="state.form.projectName" readonly></el-input>
+              </el-form-item>
+              <el-form-item label="是否为专家组组长:" prop="leader">
+                <el-input v-model.trim="state.form.leader" readonly></el-input>
+              </el-form-item>
+              <el-form-item label="考评记录时间:" prop="updateTime">
+                <el-input v-model.trim="state.form.updateTime" readonly></el-input>
+              </el-form-item>
+              <el-form-item label="总计:" prop="score">
                 <el-input v-model.trim="state.form.score" readonly></el-input>
               </el-form-item>
-              <el-form-item label="是否为专家组组长:" prop="content">
-                <el-input v-model.trim="state.form.content" readonly></el-input>
-              </el-form-item>
-              <el-form-item label="考评记录时间:" prop="content">
-                <el-input v-model.trim="state.form.content" readonly></el-input>
-              </el-form-item>
-              <el-form-item label="总计:" prop="content">
-                <el-input v-model.trim="state.form.content" readonly></el-input>
-              </el-form-item>
             </el-form>
-          <el-table :data="tableData" border style="width: 100%">
-            <el-table-column prop="name" label="加(扣)分项目"/>
+          <el-table :data="state.form.tableData" border style="width: 100%">
+            <el-table-column prop="content" label="加(扣)分项目"/>
             <el-table-column prop="score" label="分值明细" />
           </el-table>
             <template #footer>
@@ -43,20 +43,21 @@
 import Editor from "@/components/Editor/index.vue";
 import {ElMessage} from "element-plus";
 import {addNotice} from "@/api/backManage/notice";
-import {addDict, editDict, getDictDetail} from "@/api/backManage/evaluate";
+import {addDict, editDict, getDictDetail, getExpertEvaDetail} from "@/api/backManage/evaluate";
 
 const dialogVisible = ref(false);
 const title = ref("");
 const busRef = ref();
-const length = ref()
 const emit = defineEmits(["getList"]);
 const state = reactive({
     form: {
-      score: null,
-        id: '',
-        label: '',
-        value: '',
-        dictType: "sys_assess_type",
+      name: '',
+      idCard: '',
+      projectName: '',
+      leader: '',
+      updateTime: '',
+      score: '',
+      tableData: []
     },
     formRules:{
         label: [{ required: true, message: '请输入类型', trigger: 'blur' }],
@@ -65,20 +66,21 @@
 })
 
 const openDialog = async (type, value) => {
-    length.value = value.listLength
     title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
-    if(type === 'edit') {
-        state.form = value;
+    if(type === 'edit' || type === 'view') {
+        state.form = value
+      state.form.leader = value.teamLeader==1?'是':'否'
         const param = {
-            dictId: value.id
+          projectExpertId: value.projectExpertId
         }
-        const res = await getDictDetail(param);
+        const res = await getExpertEvaDetail(param);
         if(res.code === 200){
-            state.form = res.data
+            state.form.tableData = res.data
         }else{
-            ElMessage.warning(res.message)
+            ElMessage.warning(res.msg)
         }
     }
+    console.log(state.form,'form')
     dialogVisible.value = true;
 }
 
diff --git a/src/views/safetyReview/expertManage/evaluateRecord/index.vue b/src/views/safetyReview/expertManage/evaluateRecord/index.vue
index f19dd68..a02fba2 100644
--- a/src/views/safetyReview/expertManage/evaluateRecord/index.vue
+++ b/src/views/safetyReview/expertManage/evaluateRecord/index.vue
@@ -2,29 +2,29 @@
     <div class="app-container">
       <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
         <el-form-item label="项目名称">
-          <el-input v-model="queryParams.name" placeholder="请输入项目名称" />
+          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" />
         </el-form-item>
-        <el-form-item label="姓名">
+        <el-form-item label="专家姓名">
           <el-input v-model="queryParams.name" placeholder="请输入姓名" />
         </el-form-item>
         <el-form-item label="身份证号">
-          <el-input v-model="queryParams.name" placeholder="请输入身份证号" />
+          <el-input v-model="queryParams.idCard" placeholder="请输入身份证号" />
         </el-form-item>
-        <el-form-item label="领域" prop="dutyStatus">
-          <el-select v-model="queryParams.dutyStatus" placeholder="岗位状态" clearable>
-            <el-option :key="0" label="已评估" :value="0"/>
-            <el-option :key="1" label="未评估" :value="1"/>
-          </el-select>
+        <el-form-item label="专家领域">
+          <el-cascader
+              clearable
+              v-model="queryParams.domain"
+              :options="expertTypes"
+              :props="{ expandTrigger: 'hover', value: 'classifyName',label: 'classifyName',emitPath: false}"></el-cascader>
         </el-form-item>
         <el-form-item label="时间范围" prop="searchTime">
           <el-date-picker
               v-model="searchTime"
-              type="daterange"
-              @change="changeTime"
+              type="datetimerange"
               range-separator="至"
               start-placeholder="开始日期"
               end-placeholder="结束日期"
-              value-format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD HH:mm:ss"
           />
         </el-form-item>
         <el-form-item>
@@ -33,28 +33,24 @@
         </el-form-item>
       </el-form>
 
-      <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
-          <el-button type="primary" plain :icon="Plus" @click="openDialog('add',{})">新增</el-button>
-        </el-col>
-      </el-row>
+<!--      <el-row :gutter="10" class="mb8">-->
+<!--        <el-col :span="1.5">-->
+<!--          <el-button type="primary" plain :icon="Plus" @click="openDialog('add',{})">新增</el-button>-->
+<!--        </el-col>-->
+<!--      </el-row>-->
       <el-table v-loading="loading" :data="expertList" :border="true">
         <el-table-column type="index" width="55" align="center" />
-        <el-table-column label="考评时间" align="center" prop="birthday" />
-        <el-table-column label="姓名" align="center" prop="birthday" />
-        <el-table-column label="身份证号" align="center" prop="birthday" />
-        <el-table-column label="考评应用领域" align="center" prop="birthday" />
-        <el-table-column label="项目名称" align="center" prop="name" />
-        <el-table-column label="是否为专家组" align="center">
+        <el-table-column label="考评时间" align="center" prop="updateTime" />
+        <el-table-column label="姓名" align="center" prop="name" />
+        <el-table-column label="身份证号" align="center" prop="idCard" />
+        <el-table-column label="考评应用领域" align="center" prop="domain" />
+        <el-table-column label="项目名称" align="center" prop="projectName" />
+        <el-table-column label="是否为专家组组长" align="center" prop="teamLeader">
           <template #default="scope">
-            {{findNodeById(expertTypes,scope.row.bigClassify)}}/{{findNodeById(expertTypes,scope.row.smallClassify)}}
+            {{scope.row.teamLeader == 1?'是':'否'}}
           </template>
         </el-table-column>
-        <el-table-column label="考评分数" align="center">
-          <template #default="scope">
-            {{findNodeById(expertTypes,scope.row.bigClassify)}}/{{findNodeById(expertTypes,scope.row.smallClassify)}}
-          </template>
-        </el-table-column>
+        <el-table-column label="考评分数" align="center" prop="score"/>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button type="primary" link @click="openDialog('view',scope.row)">查看明细</el-button>
@@ -78,6 +74,7 @@
 import EvaluateDetail from "./components/evaluateDetail";
 import {delExpert, getExpertsList, getExpertTypes} from "../../../../api/form";
 import { Plus } from '@element-plus/icons-vue'
+import {getExpertEvaList, getProjectExpertList} from "@/api/backManage/evaluate";
 
 const loading = ref(false);
 const data = reactive({
@@ -88,24 +85,21 @@
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    bigClassify: null,
-    smallClassify: null,
-    dutyStatus: null,
+    projectName: '',
     name: '',
-    params: {
-      startTime: '',
-      endTime: ''
-    }
+    idCard: '',
+    domain: '',
+    startTime: '',
+    endTime: ''
   },
-  classiFy: [],
   searchTime: []
 });
 
 const { showSearch,total, expertTypes,expertList,queryParams,classiFy,searchTime} = toRefs(data);
 const evaluateFormRef = ref()
 onMounted(()=>{
-  // getList()
-  // getTypes()
+  getList()
+  getTypes()
 })
 
 onUnmounted(()=>{
@@ -117,22 +111,8 @@
   if(res.code == 200){
     data.expertTypes = res.data
   }else{
-    ElMessage.warning(res.msg)
+    ElMessage.warning(res.message)
   }
-}
-
-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)=> {
@@ -152,23 +132,17 @@
 
 const handleQuery=()=> {
   data.queryParams.pageNum = 1
-  if(data.classiFy && data.classiFy.length>0){
-    data.queryParams.bigClassify = data.classiFy[0]
-    data.queryParams.smallClassify = data.classiFy[1]
-  }
-  if(data.searchTime && data.searchTime.length>0){
-    data.queryParams.params.startTime = data.searchTime[0]
-    data.queryParams.params.endTime = data.searchTime[1]
-  }
   getList()
 }
 
 const getList = async () => {
-  loading.value = true;
-  const res = await getExpertsList(data.queryParams)
+  loading.value = true
+  data.queryParams.startTime = data.searchTime[0] || ''
+  data.queryParams.endTime = data.searchTime[1] || ''
+  const res = await getExpertEvaList(data.queryParams)
   if(res.code == 200){
-    data.expertList = res.data.list
-    data.total = res.data.total
+    data.expertList = res.rows
+    data.total = res.total
   }else{
     ElMessage.warning(res.msg)
   }
@@ -176,7 +150,6 @@
 }
 
 const openDialog = async (type, value) => {
-  console.log(evaluateFormRef.value,666)
   evaluateFormRef.value.openDialog(type, value)
 }
 
@@ -203,16 +176,13 @@
   data.queryParams = {
     pageNum: 1,
     pageSize: 10,
-    bigClassify: null,
-    smallClassify: null,
-    dutyStatus: null,
+    projectName: '',
     name: '',
-    params: {
-      startTime: '',
-      endTime: ''
-    }
-  };
-  data.classiFy = []
+    idCard: '',
+    domain: '',
+    startTime: '',
+    endTime: ''
+  }
   data.searchTime = []
   handleQuery()
 }
diff --git a/src/views/safetyReview/expertManage/experts/index.vue b/src/views/safetyReview/expertManage/experts/index.vue
index b8435a5..26a6f23 100644
--- a/src/views/safetyReview/expertManage/experts/index.vue
+++ b/src/views/safetyReview/expertManage/experts/index.vue
@@ -4,12 +4,15 @@
         <el-form-item label="姓名">
           <el-input v-model.trim="queryParams.name" placeholder="请输入姓名"></el-input>
         </el-form-item>
+        <el-form-item label="身份证号">
+          <el-input v-model.trim="queryParams.idCard" placeholder="请输入身份证号"></el-input>
+        </el-form-item>
         <el-form-item label="专业类别">
           <el-cascader
               clearable
-              v-model="classiFy"
+              v-model="queryParams.domain"
               :options="expertTypes"
-              :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}"
+              :props="{ expandTrigger: 'hover', value: 'classifyName',label: 'classifyName'}"
               @change="handleChange"></el-cascader>
         </el-form-item>
         <el-form-item label="在岗情况" prop="dutyStatus">
@@ -29,6 +32,13 @@
               value-format="YYYY-MM-DD"
           />
         </el-form-item>
+        <el-form-item label="评定级别">
+          <el-radio-group v-model="queryParams.ratingLevel">
+            <el-radio-button label="1">一级</el-radio-button>
+            <el-radio-button label="2">二级</el-radio-button>
+            <el-radio-button label="3">三级</el-radio-button>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item>
           <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
           <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -38,7 +48,11 @@
         <el-table-column type="index" width="55" align="center" />
         <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="birthday">
+          <template #default="scope">
+            {{scope.row.birthday.slice(0,10)}}
+          </template>
+        </el-table-column>
         <el-table-column label="性别" align="center" prop="sex"  >
           <template #default="scope">
             <span>{{scope.row.sex === 0 ? '男' : '女'}}</span>
@@ -55,10 +69,42 @@
         <el-table-column label="单位全称" align="center" prop="companyName"/>
         <el-table-column label="现从事专业及方向" align="center" prop="currentProfession"/>
         <el-table-column label="联系方式" align="center" prop="phone"/>
-        <el-table-column label="支撑方向" align="center" prop="supportDirectionSafety"/>
+        <el-table-column label="支撑方向" align="center">
+          <template #default="scope">
+            {{ getSupport(scope.row.supportDirectionSafety, scope.row.supportDirectionPrevention, scope.row.supportDirectionEmergency) }}
+<!--            directionList-->
+          </template>
+        </el-table-column>
         <el-table-column label="专家领域" align="center" prop="domain"/>
         <el-table-column label="入库分级" align="center" prop="level"/>
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <el-table-column label="评定级别" align="center" prop="ratingLevel">
+          <template #default="scope">
+            {{scope.row.ratingLevel == 1?'一级':scope.row.ratingLevel == 2?'二级':scope.row.ratingLevel == 3?'三级':'--'}}
+          </template>
+        </el-table-column>
+        <el-table-column label="聘书有效时间" align="center" prop="">
+          <template #default="scope">
+            {{scope.row.employmentDateStart}}/{{scope.row.employmentDateEnd}}
+          </template>
+        </el-table-column>
+        <el-table-column label="专家聘书" align="center" prop="expertCertificate">
+          <template #default="scope">
+            <div class="demo-image__preview" v-if="scope.row.expertCertificate && scope.row.expertCertificate!==''">
+              <el-image
+                  style="width: 100px; height: 100px"
+                  :src= "scope.row.expertCertificate"
+                  :zoom-rate="1.2"
+                  :max-scale="7"
+                  :min-scale="0.2"
+                  :preview-src-list="[scope.row.expertCertificate]"
+                  :initial-index="0"
+                  fit="cover"
+                  :preview-teleported=true
+              />
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button type="primary" link @click="openDialog('view',scope.row)">查看</el-button>
           </template>
@@ -89,26 +135,49 @@
   expertTypes: [],
   expertList: [],
   queryParams: {
+    name: '',
     pageNum: 1,
     pageSize: 10,
-    state: 2,
-    bigClassify: null,
-    smallClassify: null,
-    dutyStatus: null,
+    idCard: '',
+    dutyStatus: '',
+    domain: '',
+    ratingLevel: null,
     params: {
       startTime: '',
       endTime: ''
     }
   },
   classiFy: [],
-  searchTime: []
+  searchTime: [],
+  directionList: [
+    {
+      value: '1',
+      label: '现场检查'
+    },
+    {
+      value: '2',
+      label: '调查评估'
+    },
+    {
+      value: '3',
+      label: '咨询服务'
+    },
+    {
+      value: '4',
+      label: '教育培训'
+    },
+    {
+      value: '5',
+      label: '其他'
+    }
+  ],
 });
 
 const { showSearch,total, expertTypes,expertList,queryParams,classiFy,searchTime} = toRefs(data);
 const expertFormRef = ref()
 onMounted(()=>{
-  // getList()
-  // getTypes()
+  getList()
+  getTypes()
 })
 
 onUnmounted(()=>{
@@ -153,12 +222,34 @@
   return null;
 }
 
+const getSupport =(safety,prevention,emergency)=>{
+  let str = []
+  let safeArr = safety?.split(',')
+  let preventArr = prevention?.split(',')
+  let emergencyArr = emergency?.split(',')
+  if(Array.isArray(safeArr) && !safeArr.includes("")){
+    safeArr = safeArr.map(i=>{
+      return data.directionList.find(item=>item.value == i)?.label
+    })
+    str.push(`安全生产(${safeArr.join('、')})`)
+  }
+  if(Array.isArray(preventArr) && !preventArr.includes("")){
+    preventArr = preventArr.map(i=>{
+      return data.directionList.find(item=>item.value == i)?.label
+    })
+    str.push(`防灾减灾(${preventArr.join('、')})`)
+  }
+  if(Array.isArray(emergencyArr) && !emergencyArr.includes("")){
+    emergencyArr = emergencyArr.map(i=>{
+      return data.directionList.find(item=>item.value == i)?.label
+    })
+    str.push(`应急救援(${emergencyArr.join('、')})`)
+  }
+  return str.join(',')
+}
+
 const handleQuery=()=> {
   data.queryParams.pageNum = 1
-  if(data.classiFy && data.classiFy.length>0){
-    data.queryParams.bigClassify = data.classiFy[0]
-    data.queryParams.smallClassify = data.classiFy[1]
-  }
   if(data.searchTime && data.searchTime.length>0){
     data.queryParams.params.startTime = data.searchTime[0]
     data.queryParams.params.endTime = data.searchTime[1]
@@ -170,13 +261,8 @@
   loading.value = true;
   const res = await getExpertsList(data.queryParams)
   if(res.code == 200){
-    data.expertList = res.data.map(item => {
-      return{
-        ...item,
-        birthdayName: item.birthday ? item.birthday.slice(0,10) : ''
-      }
-    })
-    data.total = res.data.total
+    data.expertList = res.rows
+    data.total = res.total
   }else{
     ElMessage.warning(res.msg)
   }
@@ -189,12 +275,13 @@
 
 const resetQuery=()=> {
   data.queryParams = {
+    name: '',
     pageNum: 1,
     pageSize: 10,
-    state: 2,
-    bigClassify: null,
-    smallClassify: null,
-    dutyStatus: null,
+    idCard: '',
+    dutyStatus: '',
+    domain: '',
+    ratingLevel: null,
     params: {
       startTime: '',
       endTime: ''
diff --git a/src/views/safetyReview/expertManage/fillForm/index.vue b/src/views/safetyReview/expertManage/fillForm/index.vue
index 543b20b..996a55d 100644
--- a/src/views/safetyReview/expertManage/fillForm/index.vue
+++ b/src/views/safetyReview/expertManage/fillForm/index.vue
@@ -5,28 +5,29 @@
             <el-form :model="state.form" :rules="state.rules" ref="ruleFormRef" label-width="200px">
               <el-row>
                 <el-col :span="20">
-                  <el-form-item label="专业类别" prop="profession">
+                  <el-form-item label="专业类别" prop="domain">
                     <el-cascader
                         style="width: 100%"
-                        v-model="state.form.profession"
+                        clearable
+                        v-model="state.form.domain"
                         :options="state.expertsType"
-                        :props="{ expandTrigger: 'hover',value: 'id',label: 'classifyName' }"
+                        :props="{ expandTrigger: 'hover',value: 'classifyName',label: 'classifyName',emitPath: false }"
                         @change="professionChange"></el-cascader>
                   </el-form-item>
                 </el-col>
               </el-row>
-              <!--        <el-row>-->
-              <!--          <el-col :span="20">-->
-              <!--            <el-form-item label="填报日期" prop="date">-->
-              <!--              <el-date-picker-->
-              <!--                style="width: 100%"-->
-              <!--                v-model="form.date"-->
-              <!--                type="date"-->
-              <!--                placeholder="选择日期">-->
-              <!--              </el-date-picker>-->
-              <!--            </el-form-item>-->
-              <!--          </el-col>-->
-              <!--        </el-row>-->
+                <el-row>
+                  <el-col :span="20">
+                    <el-form-item label="业务处室:" prop="deptId">
+                      <el-cascader
+                          style="width: 100%"
+                          clearable
+                          v-model="state.form.deptId"
+                          :options="state.deptList"
+                          :props="{ expandTrigger: 'hover', value: 'deptId',label: 'deptName',emitPath: false}"></el-cascader>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
               <el-row>
                 <el-col :span="20">
                   <el-form-item label="姓名" prop="name">
@@ -50,7 +51,7 @@
                     <el-date-picker
                         style="width: 100%"
                         v-model="state.form.birthday"
-                        value-format="YYYY-MM-DD 00:00:00"
+                        value-format="YYYY-MM-DD"
                         type="date"
                         placeholder="选择日期">
                     </el-date-picker>
@@ -318,7 +319,9 @@
 import {delPic} from "@/api/login"
 import { getToken } from "@/utils/auth"
 import {Base64} from "js-base64"
+import {listDept, listOutDept} from "@/api/system/dept";
 
+const { proxy } = getCurrentInstance();
 const imgDialog = ref(false)
 const ruleFormRef = ref()
 var validatePass = (rule, value, callback) => {
@@ -355,9 +358,8 @@
   form:{
     name:'',
     sex:'',
-    profession: [],
-    bigClassify:null,
-    smallClassify: null,
+    domain: '',
+    deptId: null,
     birthday: '',
     phone:'',
     title: '',
@@ -388,6 +390,7 @@
     source: 1
   },
   expertsType: [],
+  deptList: [],
   directionList: [
     {
       value: 1,
@@ -410,7 +413,7 @@
       label: '其他'
     }
   ],
-  uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
+  uploadUrl: import.meta.env.VITE_APP_BASE_API + '/common/upload',
   header: {
     Authorization: 'Bearer ' + getToken()
   },
@@ -425,7 +428,8 @@
   rules:{
     name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
     sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
-    profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
+    domain: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
+    deptId: [{ required: true, message: '请选择业务处室', trigger: 'blur' }],
     birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
     phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
     title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
@@ -439,6 +443,7 @@
 
   onMounted(()=>{
     getExpertsType()
+    getDepList()
   })
 
   const getExpertsType = async ()=>{
@@ -451,6 +456,12 @@
         message: res.message
       });
     }
+  }
+
+  function getDepList() {
+    listOutDept({}).then(response => {
+      state.deptList = proxy.handleTree(response.data, "deptId",'parentId','children');
+    });
   }
 
   const professionChange=(value)=> {
@@ -485,9 +496,9 @@
   const handleAvatarSuccess = (res, uploadFile,type) => {
     if(res.code == 200){
       if(type == '证件照'){
-        state.form.electronicPhoto = res.data.path
+        state.form.electronicPhoto = res.url
       }else{
-        uploadFile.name = res.data.path
+        uploadFile.name = res.url
       }
     }else{
       ElMessage({
@@ -542,25 +553,20 @@
       data.supportDirectionSafety = data.supportDirectionSafety.join(',')
       data.supportDirectionPrevention = data.supportDirectionPrevention.join(',')
       data.supportDirectionEmergency = data.supportDirectionEmergency.join(',')
-      data.bigClassify = data.profession[0]
-      data.smallClassify = data.profession[1]
       data.resumeKey = state.resumeList.map(i=>i.name).join(',')
       data.paperSituationKey = state.inventionList.map(i=>i.name).join(',')
       data.rewardKey = state.rewardList.map(i=>i.name).join(',')
       data.achievementKey = state.achievementList.map(i=>i.name).join(',')
       data.personalOpinionKey = state.proAdviceList.map(i=>i.name).join(',')
       data.recommendUnitOpinionKey = state.adviceList.map(i=>i.name).join(',')
-      delete data.profession
       delete data.id
       const res= await addExpertInfo(data)
       if(res.code == 200){
-        ElMessage.success(res.message)
+        ElMessage.success(res.msg)
         state.form = {
           name:'',
           sex:'',
-          profession: [],
-          bigClassify:null,
-          smallClassify: null,
+          domain: '',
           birthday: '',
           phone:'',
           title: '',
@@ -598,7 +604,7 @@
         state.proAdviceList = []
         state.adviceList = []
       }else{
-        ElMessage.warning(res.message)
+        ElMessage.warning(res.msg)
       }
     } else {
       ElMessage.warning('请完善必填信息')
diff --git a/src/views/safetyReview/expertManage/postEvaluation/index.vue b/src/views/safetyReview/expertManage/postEvaluation/index.vue
index 909d1fa..3f91c8e 100644
--- a/src/views/safetyReview/expertManage/postEvaluation/index.vue
+++ b/src/views/safetyReview/expertManage/postEvaluation/index.vue
@@ -2,20 +2,20 @@
     <div class="app-container">
       <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
         <el-form-item label="项目名称">
-          <el-input v-model="queryParams.name" placeholder="请输入姓名" />
+          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" />
         </el-form-item>
-        <el-form-item label="评估情况" prop="dutyStatus">
+        <el-form-item label="评估情况" prop="evaluationState">
           <el-select v-model="queryParams.dutyStatus" placeholder="岗位状态" clearable>
-            <el-option :key="0" label="已评估" :value="0"/>
-            <el-option :key="1" label="未评估" :value="1"/>
+            <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-form-item label="审批时间" prop="projectCheckTime">
           <el-date-picker
               v-model="searchTime"
-              type="date"
+              type="datetime"
               @change="changeTime"
-              value-format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD HH:mm:ss"
           />
         </el-form-item>
         <el-form-item>
@@ -71,6 +71,7 @@
 import ExpertDialog from "./components/expertList";
 import {delExpert, getExpertsList, getExpertTypes} from "../../../../api/form";
 import { Plus } from '@element-plus/icons-vue'
+import {getProjectExpertList} from "@/api/backManage/evaluate";
 
 const loading = ref(false)
 const data = reactive({
@@ -81,14 +82,9 @@
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    bigClassify: null,
-    smallClassify: null,
+    projectName: '',
     dutyStatus: null,
-    name: '',
-    params: {
-      startTime: '',
-      endTime: ''
-    }
+    projectCheckTime: ''
   },
   classiFy: [],
   searchTime: []
@@ -98,7 +94,7 @@
 const expertListRef = ref()
 
 onMounted(()=>{
-  // getList()
+  getList()
   // getTypes()
 })
 
@@ -113,20 +109,6 @@
   }else{
     ElMessage.warning(res.msg)
   }
-}
-
-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)=> {
@@ -146,23 +128,15 @@
 
 const handleQuery=()=> {
   data.queryParams.pageNum = 1
-  if(data.classiFy && data.classiFy.length>0){
-    data.queryParams.bigClassify = data.classiFy[0]
-    data.queryParams.smallClassify = data.classiFy[1]
-  }
-  if(data.searchTime && data.searchTime.length>0){
-    data.queryParams.params.startTime = data.searchTime[0]
-    data.queryParams.params.endTime = data.searchTime[1]
-  }
   getList()
 }
 
 const getList = async () => {
   loading.value = true;
-  const res = await getExpertsList(data.queryParams)
+  const res = await getProjectExpertList(data.queryParams)
   if(res.code == 200){
-    data.expertList = res.data.list
-    data.total = res.data.total
+    data.expertList = res.rows
+    data.total = res.total
   }else{
     ElMessage.warning(res.msg)
   }
@@ -196,17 +170,10 @@
   data.queryParams = {
     pageNum: 1,
     pageSize: 10,
-    bigClassify: null,
-    smallClassify: null,
+    projectName: '',
     dutyStatus: null,
-    name: '',
-    params: {
-      startTime: '',
-      endTime: ''
-    }
-  };
-  data.classiFy = []
-  data.searchTime = []
+    projectCheckTime: ''
+  }
   handleQuery()
 }
 
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index a4a3c8d..13afa61 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -143,9 +143,9 @@
 <script setup name="Dept">
 import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
 import {onMounted,ref} from "vue";
-
+import {parseTime} from "@/utils/ruoyi";
 const { proxy } = getCurrentInstance();
-// const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
+const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
 
 const deptList = ref([]);
 const open = ref(false);
@@ -174,14 +174,14 @@
 const { queryParams, form, rules } = toRefs(data);
 
 onMounted(()=>{
-  // getList()
+  getList()
 })
 
 /** 查询部门列表 */
 function getList() {
   loading.value = true;
   listDept(queryParams.value).then(response => {
-    deptList.value = proxy.handleTree(response.data, "deptId");
+    deptList.value = proxy.handleTree(response.data, "deptId",'parentId','children');
     loading.value = false;
   });
 }

--
Gitblit v1.9.2