From 18e2812133add57c3b707f39555321e2a598eea2 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期四, 18 一月 2024 13:54:50 +0800
Subject: [PATCH] 新增

---
 src/views/safetyReview/projectManage/components/employNoticeRecord.vue    |  190 +++++++
 src/views/safetyReview/projectManage/components/evaluatePlan.vue          |  306 ++++++++---
 src/views/safetyReview/baseSet/expertsType/index.vue                      |    2 
 src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue |   69 --
 src/views/safetyReview/projectManage/components/mapLocation.vue           |  118 ++++
 src/views/safetyReview/userManage/expertUsers/index.vue                   |  143 ++++
 src/views/safetyReview/projectManage/components/siteCheckRcd.vue          |  179 ++++++
 src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue    |  112 +---
 src/views/safetyReview/projectManage/process.vue                          |   19 
 src/views/safetyReview/projectManage/components/expertsList.vue           |  375 ++++++++-----
 src/views/safetyReview/projectManage/components/riskAnalysis.vue          |   17 
 11 files changed, 1,114 insertions(+), 416 deletions(-)

diff --git a/src/views/safetyReview/baseSet/expertsType/index.vue b/src/views/safetyReview/baseSet/expertsType/index.vue
index 55ecca9..019b523 100644
--- a/src/views/safetyReview/baseSet/expertsType/index.vue
+++ b/src/views/safetyReview/baseSet/expertsType/index.vue
@@ -44,7 +44,7 @@
 <!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
     </el-row>
 
-    <el-table v-loading="state.loading" :data="state.expertList" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :border="true">
+    <el-table v-loading="state.loading" :data="state.expertList" row-key="id" :border="true">
       <el-table-column label="分类名称" align="center" prop="classifyName" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
diff --git a/src/views/safetyReview/projectManage/components/employNoticeRecord.vue b/src/views/safetyReview/projectManage/components/employNoticeRecord.vue
new file mode 100644
index 0000000..7fa0b69
--- /dev/null
+++ b/src/views/safetyReview/projectManage/components/employNoticeRecord.vue
@@ -0,0 +1,190 @@
+<template>
+  <div class="riskBox">
+    <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top">
+      <el-row :gutter="30">
+        <el-col :span="12">
+          <el-form-item prop="timeRange" label="技术服务期限">
+            <el-date-picker
+                v-model="state.formData.timeRange"
+                style="width: 100%"
+                type="daterange"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="YYYY-MM-DD 00:00:00"
+                size="large"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item prop="investigationPlanDate" label="计划现场勘验时间">
+            <el-date-picker
+                style="width: 100%"
+                v-model="state.formData.investigationPlanDate"
+                type="date"
+                value-format="YYYY-MM-DD 00:00:00"
+                placeholder="选择日期"
+                size="large"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+<!--      <el-row :gutter="30">-->
+<!--        <el-col :span="6">-->
+<!--          <el-form-item label="附件上传">-->
+<!--            <el-upload-->
+<!--                accept="image/*"-->
+<!--                :action="state.uploadUrl"-->
+<!--                :headers="state.header"-->
+<!--                method="post"-->
+<!--                :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 1)"-->
+<!--                :on-preview="handlePictureCardPreview"-->
+<!--                v-model:file-list="state.socialList"-->
+<!--                list-type="picture-card"-->
+<!--                :before-upload="picSize"-->
+<!--                :on-remove="(file, file_list)=>{handleRemove(file, file_list, 1)}"-->
+<!--            >-->
+<!--              <el-icon><Plus /></el-icon>-->
+<!--              <template #tip>-->
+<!--                <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div>-->
+<!--              </template>-->
+<!--            </el-upload>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+<!--      </el-row>-->
+      <el-row>
+        <el-col :span="18">
+          <div style="display: flex;align-items: center">项目组成员<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">金属、非金属矿及其他矿采选业:安全、机械、电气、采矿、通风、地质、水工结构</span></div>
+        </el-col>
+      </el-row>
+      <el-table  :data="state.planPersons" :border="true" style="margin: 20px 0">
+        <el-table-column label="序号" width="60" align="center" type="index"></el-table-column>
+        <el-table-column label="评价组成员" prop="person.name" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="资格证书" prop="person.certificateNo" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="专业能力" prop="person.major" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="承担工作" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-select v-model="scope.row.work" multiple placeholder="承担工作" style="width: 100%" size="large" disabled>
+              <el-option v-for="item in state.workList" :key="item.value" :label="item.label" :value="item.value"/>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="承诺后期前往现场勘验" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-radio-group v-model="scope.row.laterPromise" size="large" disabled>
+              <el-radio :label="1" size="large">是</el-radio>
+              <el-radio :label="0" size="large">否</el-radio>
+            </el-radio-group>
+          </template>
+        </el-table-column>
+        <el-table-column label="未到现场勘验原因" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-input v-model="scope.row.reason" maxlength="30" show-word-limit type="text" size="large" readonly/>
+          </template>
+        </el-table-column>
+        <el-table-column label="是否已告知" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-radio-group v-model="scope.row.informed" size="large">
+              <el-radio :label="1" size="large">是</el-radio>
+              <el-radio :label="0" size="large">否</el-radio>
+            </el-radio-group>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-form>
+  </div>
+</template>
+<script setup>
+
+import {defineEmits, onMounted, reactive, ref} from "vue"
+import {ElMessage} from "element-plus"
+import {Search} from '@element-plus/icons-vue'
+import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis"
+import Cookies from "js-cookie"
+const emit = defineEmits(["getNextStatus"])
+
+const state = reactive({
+  formData: {
+    projectId: null,
+    timeRange: [],
+    serviceStartDate: '',
+    serviceEndDate: '',
+    investigationPlanDate: ''
+  },
+  planPersons: [],
+  rules: {
+    timeRange: [{required: true, message: '请选择技术服务期限', trigger: 'blur'}],
+    investigationPlanDate: [{required: true, message: '请选择计划现场勘验时间', trigger: 'blur'}],
+  }
+})
+
+const isAmin = ref(false)
+const formRef = ref()
+onMounted(() => {
+  const userInfo = JSON.parse(Cookies.get('userInfo'))
+  if(userInfo.identity === 0){
+    isAmin.value = true;
+  }
+});
+
+const riskOpen = async (type,val) => {
+  console.log("type",type,val)
+  if(type === 'detail' || type === 'edit' ){
+    const res = await getRiskDetail({projectId: val});
+    if(res.code == 200){
+      state.formData = res.data;
+      state.formData.project.business = parseInt(res.data.project.business);
+      state.formData.project.area = [res.data.project.province,res.data.project.city];
+    }else {
+      ElMessage.warning(res.message)
+    }
+  }
+  if(type === 'add' || type === 'clickEdit') {
+    const valid = await formRef.value.validate();
+    if(valid){
+      if (isAmin.value) {
+        ElMessage.warning("当前用户暂无权限");
+        return;
+      }
+      state.formData.serviceStartDate = state.formData.timeRange[0]
+      state.formData.serviceEndDate = state.formData.timeRange[1]
+      if(type === 'add'){
+        const {projectId,timeRange, ...data} = JSON.parse(JSON.stringify(state.formData))
+        const res = await addRisk(data);
+        if (res.code == 200) {
+          ElMessage.success('保存成功')
+          formRef.value.clearValidate();
+          emit('getNextStatus', res.data);
+
+        } else {
+          ElMessage.warning(res.message)
+        }
+      }else if(type === 'clickEdit'){
+        const {timeRange, ...data} = JSON.parse(JSON.stringify(state.formData))
+        const res = await editRisk(data);
+        if (res.code == 200) {
+          ElMessage.success('变更成功')
+          formRef.value.clearValidate();
+          // emit('getNextStatus', data.project.id);
+        } else {
+          ElMessage.warning(res.message)
+        }
+      }
+    }
+  }
+}
+
+defineExpose({
+  riskOpen
+});
+
+
+</script>
+<style scoped lang="scss">
+.riskBox{
+  :deep(.el-form .el-form-item__label) {
+    font-size: 15px;
+  }
+}
+
+</style>
diff --git a/src/views/safetyReview/projectManage/components/evaluatePlan.vue b/src/views/safetyReview/projectManage/components/evaluatePlan.vue
index 3446e59..13876a2 100644
--- a/src/views/safetyReview/projectManage/components/evaluatePlan.vue
+++ b/src/views/safetyReview/projectManage/components/evaluatePlan.vue
@@ -3,10 +3,10 @@
     <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top">
       <el-row :gutter="30">
         <el-col :span="6">
-          <el-form-item prop="evalStartDate" label="评价开始时间">
+          <el-form-item prop="startDate" label="评价开始时间">
             <el-date-picker
                 style="width: 100%"
-                v-model="state.formData.evalStartDate"
+                v-model="state.formData.startDate"
                 type="date"
                 value-format="YYYY-MM-DD 00:00:00"
                 placeholder="选择日期"
@@ -15,10 +15,10 @@
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item prop="evalEndDate" label="评价结束时间">
+          <el-form-item prop="endDate" label="评价结束时间">
             <el-date-picker
                 style="width: 100%"
-                v-model="state.formData.evalEndDate"
+                v-model="state.formData.endDate"
                 type="date"
                 value-format="YYYY-MM-DD 00:00:00"
                 placeholder="选择日期"
@@ -27,9 +27,9 @@
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item prop="deliver" label="机构评价负责人">
+          <el-form-item prop="auser.name" label="机构评价负责人">
             <el-input
-                v-model="state.formData.deliver"
+                v-model="state.formData.auser.name"
                 size="large"
                 placeholder="请选择机构评价负责人"
             >
@@ -39,23 +39,28 @@
             </el-input>
           </el-form-item>
         </el-col>
-        <el-col :span="6">
-          <el-form-item prop="deliver" label="技术负责人">
-            <el-input
-                v-model="state.formData.deliver"
-                size="large"
-                placeholder="请选择技术负责人"
-            >
-              <template #append>
-                <el-button :icon="Search" @click="openExperts('技术负责人')"/>
-              </template>
-            </el-input>
-          </el-form-item>
+<!--        <el-col :span="6">-->
+<!--          <el-form-item prop="deliver" label="技术负责人">-->
+<!--            <el-input-->
+<!--                v-model="state.formData.deliver"-->
+<!--                size="large"-->
+<!--                placeholder="请选择技术负责人"-->
+<!--            >-->
+<!--              <template #append>-->
+<!--                <el-button :icon="Search" @click="openExperts('技术负责人')"/>-->
+<!--              </template>-->
+<!--            </el-input>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+      </el-row>
+      <el-row>
+        <el-col :span="18">
+          <div style="display: flex;align-items: center">评价日程安排</div>
         </el-col>
       </el-row>
-      <el-table  :data="state.tableData" :border="true" style="margin: 20px 0">
+      <el-table :data="state.formData.estimateSchedules" :border="true" style="margin: 20px 0">
         <el-table-column label="序号" width="60" align="center" type="index"></el-table-column>
-        <el-table-column label="评价日程安排" prop="content" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="评价日程安排" prop="name" header-align="center" :show-overflow-tooltip="true"/>
         <el-table-column label="开始时间" header-align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-date-picker
@@ -81,6 +86,94 @@
           </template>
         </el-table-column>
       </el-table>
+      <el-row>
+        <el-col :span="18">
+          <div style="display: flex;align-items: center">项目组成员<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">金属、非金属矿及其他矿采选业:安全、机械、电气、采矿、通风、地质、水工结构</span></div>
+        </el-col>
+        <el-col :span="6">
+          <div style="width: 100%;display: flex;justify-content: right">
+            <el-button type="primary" icon="Plus" @click="openExperts('项目组成员')">添加成员</el-button>
+          </div>
+        </el-col>
+      </el-row>
+      <el-table  :data="state.formData.planPersons" :border="true" style="margin: 20px 0">
+        <el-table-column label="序号" width="60" align="center" type="index"></el-table-column>
+        <el-table-column label="评价组成员" prop="person.name" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="资格证书" prop="person.certificateNo" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="专业能力" prop="person.major" header-align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="承担工作" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-select v-model="scope.row.work" multiple placeholder="承担工作" style="width: 100%" size="large">
+              <el-option v-for="item in state.workList" :key="item.value" :label="item.label" :value="item.value"/>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="承诺后期前往现场勘验" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-radio-group v-model="scope.row.laterPromise" size="large">
+              <el-radio :label="1" size="large">是</el-radio>
+              <el-radio :label="0" size="large">否</el-radio>
+            </el-radio-group>
+          </template>
+        </el-table-column>
+        <el-table-column label="未到现场勘验原因" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-input v-model="scope.row.reason" maxlength="30" show-word-limit type="text" size="large"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="danger" @click="delMember(scope.$index)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-row>
+        <el-col :span="18">
+          <div style="display: flex;align-items: center">所需仪器设备</div>
+        </el-col>
+        <el-col :span="6">
+          <div style="width: 100%;display: flex;justify-content: right">
+            <el-button type="primary" icon="Plus" @click="addDevice">添加设备</el-button>
+          </div>
+        </el-col>
+      </el-row>
+      <el-table  :data="state.formData.devices" :border="true" style="margin: 20px 0">
+        <el-table-column label="序号" width="60" align="center" type="index"></el-table-column>
+        <el-table-column label="设备名称" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-input v-model="scope.row.deviceName" maxlength="30" show-word-limit type="text" size="large"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="开始时间" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-date-picker
+                style="width: 100%"
+                v-model="scope.row.startDate"
+                type="date"
+                value-format="YYYY-MM-DD 00:00:00"
+                placeholder="选择日期"
+                size="large"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="结束时间" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-date-picker
+                style="width: 100%"
+                v-model="scope.row.endDate"
+                type="date"
+                value-format="YYYY-MM-DD 00:00:00"
+                placeholder="选择日期"
+                size="large"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="danger" @click="delDevice(scope.$index)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
     </el-form>
     <experts-list ref="expertsListRef" @getName="getSelected"></experts-list>
   </div>
@@ -97,57 +190,85 @@
 
 const state = reactive({
   formData: {
-    project: {
-      id: '',
-
+    projectId: null,
+    auser: {
+      name: ''
     },
+    auserId: null,
+    estimateSchedules: [
+      {
+        id: 1,
+        name: '勘验准备',
+        startDate: '',
+        endDate: '',
+        scheduleType: 1
+      },
+      {
+        id: 2,
+        name: '现场勘验',
+        startDate: '',
+        endDate: '',
+        scheduleType: 2
+      },
+      {
+        id: 3,
+        name: '材料分析整理',
+        startDate: '',
+        endDate: '',
+        scheduleType: 3
+      },
+      {
+        id: 4,
+        name: '评价报告编写',
+        startDate: '',
+        endDate: '',
+        scheduleType: 4
+      },
+      {
+        id: 5,
+        name: '整改情况现场确认',
+        startDate: '',
+        endDate: '',
+        scheduleType: 5
+      },
+      {
+        id: 6,
+        name: '整理评价报告',
+        startDate: '',
+        endDate: '',
+        scheduleType: 6
+      },
+      {
+        id: 7,
+        name: '报告审核',
+        startDate: '',
+        endDate: '',
+        scheduleType: 7
+      },
+      {
+        id: 8,
+        name: '报告修改',
+        startDate: '',
+        endDate: '',
+        scheduleType: 8
+      },
+    ],
+    planPersons: [],
+    devices: [],
+    startDate: '',
+    endDate: '',
     id: ''
   },
   rules: {
-    "project.name": [{required: true, message: '请填写项目名称', trigger: 'blur'}],
-    riskCharacter: [{required: true, message: '请填写行业风险特性', trigger: 'blur'}],
+    "auser.name": [{required: true, message: '请填写机构评价负责人', trigger: 'blur'}],
+    startDate: [{required: true, message: '请选择评价开始时间', trigger: 'blur'}],
+    endDate: [{required: true, message: '请选择评价结束时间', trigger: 'blur'}]
   },
-  tableData: [
-    {
-      id: '1',
-      content: '勘验准备',
-      status: 1
-    },
-    {
-      id: '2',
-      content: '现场勘验',
-      status: 1
-    },
-    {
-      id: '3',
-      content: '材料分析整理',
-      status: 1
-    },
-    {
-      id: '4',
-      content: '评价报告编写',
-      status: 1
-    },
-    {
-      id: '5',
-      content: '整改情况现场确认',
-      status: 1
-    },
-    {
-      id: '6',
-      content: '整理评价报告',
-      status: 1
-    },
-    {
-      id: '7',
-      content: '报告审核',
-      status: 1
-    },
-    {
-      id: '8',
-      content: '报告修改',
-      status: 1
-    },
+  workList: [
+    {value: '报告编制',label: '报告编制'},
+    {value: '文字校对',label: '文字校对'},
+    {value: '现场勘验',label: '现场勘验'},
+    {value: '资料收集整理',label: '资料收集整理'}
   ]
 })
 const props = {
@@ -173,12 +294,6 @@
       state.formData = res.data;
       state.formData.project.business = parseInt(res.data.project.business);
       state.formData.project.area = [res.data.project.province,res.data.project.city];
-      state.tableData[0].status = res.data.isInBusiness ? 1 : 0;
-      state.tableData[1].status = res.data.isSatisfyNeed ? 1 : 0;
-      state.tableData[2].status = res.data.isNeedExpert ? 1 : 0;
-      state.tableData[3].status = res.data.isFinishReport ? 1 : 0;
-      state.tableData[4].status = res.data.isAcceptChargess ? 1 : 0;
-      state.tableData[5].status = res.data.isFeasibility ? 1 : 0;
     }else {
       ElMessage.warning(res.message)
     }
@@ -194,12 +309,6 @@
         const {id, ...data} = JSON.parse(JSON.stringify(state.formData))
         delete data.project.area;
         delete data.project.id;
-        data.isInBusiness = state.tableData[0].status === 1;
-        data.isSatisfyNeed = state.tableData[1].status === 1;
-        data.isNeedExpert = state.tableData[2].status === 1;
-        data.isFinishReport = state.tableData[3].status === 1;
-        data.isAcceptChargess = state.tableData[4].status === 1;
-        data.isFeasibility = state.tableData[5].status === 1;
         console.log('data', data)
         const res = await addRisk(data);
         if (res.code == 200) {
@@ -213,12 +322,6 @@
       }else if(type === 'clickEdit'){
         const { ...data} = JSON.parse(JSON.stringify(state.formData))
         delete data.project.area;
-        data.isInBusiness = state.tableData[0].status === 1;
-        data.isSatisfyNeed = state.tableData[1].status === 1;
-        data.isNeedExpert = state.tableData[2].status === 1;
-        data.isFinishReport = state.tableData[3].status === 1;
-        data.isAcceptChargess = state.tableData[4].status === 1;
-        data.isFeasibility = state.tableData[5].status === 1;
         console.log('data', data)
         const res = await editRisk(data);
         if (res.code == 200) {
@@ -239,11 +342,40 @@
 
 const getSelected = (type,obj)=>{
   if(type == '项目负责人'){
-    state.formData.project.leader = obj.name
+    state.formData.auser.name = obj.name
+    state.formData.auserId = obj.id
+  }else{
+    let member = {
+      person: {
+        name: obj.name,
+        certificateNo: obj.certificateNo?obj.certificateNo:'',
+        major: obj.speciality,
+      },
+      informed: 0,
+      work: '',
+      laterPromise: 0,
+      reason: ''
+    }
+    state.formData.planPersons.push(member)
   }
-  if(type == '任务下达人'){
-    state.formData.deliver = obj.name
+}
+
+const delMember = (index)=>{
+  state.formData.planPersons.splice(index,1)
+}
+
+const addDevice = ()=>{
+  let device = {
+    projectId: null,
+    deviceName: '',
+    startDate: '',
+    endDate: ''
   }
+  state.formData.devices.push(device)
+}
+
+const delDevice = (index)=>{
+  state.formData.devices.splice(index,1)
 }
 
 defineExpose({
diff --git a/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue b/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue
index ce56b11..d468496 100644
--- a/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue
+++ b/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue
@@ -3,9 +3,9 @@
     <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top">
       <el-row :gutter="30">
         <el-col :span="6">
-          <el-form-item prop="project.leader" label="项目负责人">
+          <el-form-item prop="leader.name" label="项目负责人">
             <el-input
-                v-model="state.formData.project.leader"
+                v-model="state.formData.leader.name"
                 size="large"
                 placeholder="请选择项目负责人"
             >
@@ -16,9 +16,9 @@
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item prop="project.contactor" label="联系人">
+          <el-form-item prop="linkMan" label="联系人">
             <el-input
-                v-model="state.formData.project.contactor"
+                v-model="state.formData.linkMan"
                 size="large"
                 placeholder="请选择联系人"
             >
@@ -26,9 +26,9 @@
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item prop="project.phone" label="联系电话">
+          <el-form-item prop="linkPhone" label="联系电话">
             <el-input
-                v-model="state.formData.project.phone"
+                v-model="state.formData.linkPhone"
                 size="large"
                 placeholder="请选择联系电话"
             >
@@ -38,7 +38,7 @@
         <el-col :span="6">
           <el-form-item label="传真">
             <el-input
-                v-model="state.formData.project.fax"
+                v-model="state.formData.fax"
                 size="large"
                 placeholder="请选择传真"
             >
@@ -48,9 +48,9 @@
       </el-row>
       <el-row :gutter="30">
         <el-col :span="6">
-          <el-form-item prop="deliver" label="任务下达人">
+          <el-form-item label="任务下达人">
             <el-input
-                v-model="state.formData.deliver"
+                v-model="state.formData.transmitPerson"
                 size="large"
                 placeholder="请选择任务下达人"
             >
@@ -61,10 +61,10 @@
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item prop="deliverDate" label="任务下达时间">
+          <el-form-item prop="transmitDate" label="任务下达时间">
             <el-date-picker
                 style="width: 100%"
-                v-model="state.formData.deliverDate"
+                v-model="state.formData.transmitDate"
                 type="date"
                 value-format="YYYY-MM-DD 00:00:00"
                 placeholder="选择日期"
@@ -90,56 +90,20 @@
 const state = reactive({
   formData: {
     id: '',
-    deliver: '',
-    deliverDate: '',
-    project: {
-      id: '',
-      leader: '',
-      contactor: '',
-      phone: ''
-    }
+    leader: {
+      name: ''
+    },
+    leaderId: null,
+    linkMan: '',
+    transmitPerson: '',
+    transmitDate: ''
   },
   rules: {
-    "project.leader": [{required: true, message: '请选择项目负责人', trigger: 'blur'}],
-    "project.contactor": [{required: true, message: '请输入联系人', trigger: 'blur'}],
-    "project.phone": [{required: true, message: '请输入联系电话', trigger: 'blur'}],
-    deliverDate: [{required: true, message: '请选择任务下达时间', trigger: 'blur'}]
-  },
-  estimateTypeList: [],
-  addressList: [],
-  businessList: [],
-  tableData: [
-    {
-      id: '1',
-      content: '评价项目是否在本机构资质业务范围内',
-      status: 1
-    },
-    {
-      id: '2',
-      content: '评价人员专业构成是否满足评价项目需要',
-      status: 1
-    },
-    {
-      id: '3',
-      content: '是否需要聘请相关专业的技术专家',
-      status: 1
-    },
-    {
-      id: '4',
-      content: '是否能在约定的时间内完成评价报告',
-      status: 1
-    },
-    {
-      id: '5',
-      content: '评价费用是否在本机构所接受的范围内',
-      status: 1
-    },
-    {
-      id: '6',
-      content: '项目的可行性(风险分析结论)',
-      status: 1
-    },
-  ]
+    "leader.name": [{required: true, message: '请选择项目负责人', trigger: 'blur'}],
+    linkMan: [{required: true, message: '请输入联系人', trigger: 'blur'}],
+    linkPhone: [{required: true, message: '请输入联系电话', trigger: 'blur'}],
+    transmitDate: [{required: true, message: '请选择任务下达时间', trigger: 'blur'}]
+  }
 })
 const props = {
   expandTrigger: 'hover',
@@ -157,19 +121,10 @@
 })
 
 const riskOpen = async (type,val) => {
-  console.log("type",type,val)
   if(type === 'detail' || type === 'edit' ){
     const res = await getRiskDetail({projectId: val});
     if(res.code == 200){
       state.formData = res.data;
-      state.formData.project.business = parseInt(res.data.project.business);
-      state.formData.project.area = [res.data.project.province,res.data.project.city];
-      state.tableData[0].status = res.data.isInBusiness ? 1 : 0;
-      state.tableData[1].status = res.data.isSatisfyNeed ? 1 : 0;
-      state.tableData[2].status = res.data.isNeedExpert ? 1 : 0;
-      state.tableData[3].status = res.data.isFinishReport ? 1 : 0;
-      state.tableData[4].status = res.data.isAcceptChargess ? 1 : 0;
-      state.tableData[5].status = res.data.isFeasibility ? 1 : 0;
     }else {
       ElMessage.warning(res.message)
     }
@@ -183,15 +138,6 @@
       }
       if(type === 'add'){
         const {id, ...data} = JSON.parse(JSON.stringify(state.formData))
-        delete data.project.area;
-        delete data.project.id;
-        data.isInBusiness = state.tableData[0].status === 1;
-        data.isSatisfyNeed = state.tableData[1].status === 1;
-        data.isNeedExpert = state.tableData[2].status === 1;
-        data.isFinishReport = state.tableData[3].status === 1;
-        data.isAcceptChargess = state.tableData[4].status === 1;
-        data.isFeasibility = state.tableData[5].status === 1;
-        console.log('data', data)
         const res = await addRisk(data);
         if (res.code == 200) {
           ElMessage.success('保存成功')
@@ -203,13 +149,6 @@
         }
       }else if(type === 'clickEdit'){
         const { ...data} = JSON.parse(JSON.stringify(state.formData))
-        delete data.project.area;
-        data.isInBusiness = state.tableData[0].status === 1;
-        data.isSatisfyNeed = state.tableData[1].status === 1;
-        data.isNeedExpert = state.tableData[2].status === 1;
-        data.isFinishReport = state.tableData[3].status === 1;
-        data.isAcceptChargess = state.tableData[4].status === 1;
-        data.isFeasibility = state.tableData[5].status === 1;
         const res = await editRisk(data);
         if (res.code == 200) {
           ElMessage.success('变更成功')
@@ -229,10 +168,11 @@
 
 const getSelected = (type,obj)=>{
   if(type == '项目负责人'){
-    state.formData.project.leader = obj.name
+    state.formData.leader.name = obj.name
+    state.formData.leaderId = obj.id
   }
   if(type == '任务下达人'){
-    state.formData.deliver = obj.name
+    state.formData.transmitPerson = obj.name
   }
 }
 
diff --git a/src/views/safetyReview/projectManage/components/expertsList.vue b/src/views/safetyReview/projectManage/components/expertsList.vue
index e08a46a..fbe7987 100644
--- a/src/views/safetyReview/projectManage/components/expertsList.vue
+++ b/src/views/safetyReview/projectManage/components/expertsList.vue
@@ -4,69 +4,146 @@
             v-model="dialogVisible"
             :title="title"
             width="60%"
-            :before-close="handleClose"
         >
-          <el-form :model="state.queryParams" ref="queryForm" :inline="true" v-show="state.showSearch" label-width="90px">
+          <el-form :model="queryParams" :inline="true" label-width="90px">
             <el-form-item label="专业类别">
-              <el-cascader
-                  clearable
-                  v-model="state.classiFy"
-                  :options="state.expertTypes"
-                  :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}"
-                  @change="handleChange"></el-cascader>
+              <el-radio-group v-model="queryParams.expertType">
+                <el-radio-button label="">全部</el-radio-button>
+                <el-radio-button label="1">安全评价</el-radio-button>
+                <el-radio-button label="2">检验检测</el-radio-button>
+              </el-radio-group>
             </el-form-item>
-            <el-form-item label="在岗情况" prop="dutyStatus">
-              <el-select v-model="state.queryParams.dutyStatus" placeholder="岗位状态" clearable>
-                <el-option :key="0" label="在岗" :value="0"/>
-                <el-option :key="1" label="退休" :value="1"/>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="时间范围" prop="searchTime">
-              <el-date-picker
-                  v-model="state.searchTime"
-                  type="daterange"
-                  @change="changeTime"
-                  range-separator="至"
-                  start-placeholder="开始日期"
-                  end-placeholder="结束日期"
-                  value-format="YYYY-MM-DD"
+            <el-form-item label="姓名">
+              <el-input
+                  v-model="queryParams.name"
+                  placeholder="姓名"
+                  style="width: 250px"
               />
             </el-form-item>
+            <el-form-item label="手机号">
+              <el-input
+                  v-model="queryParams.phone"
+                  placeholder="手机号"
+                  style="width: 250px"
+              />
+            </el-form-item>
+            <el-form-item label="评价师等级">
+              <el-select v-model="queryParams.level" style="width: 250px" placeholder="评价师等级" >
+                <el-option
+                    v-for="item in levelList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.name"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="专业方向">
+              <el-select v-model="queryParams.major" value-key="id" style="width: 250px" placeholder="专业方向">
+                <el-option
+                    v-for="item in majorList"
+                    :key="item.id"
+                    :label="item.label"
+                    :value="item.id"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="专业方向">
+              <el-select v-model="queryParams.post" style="width: 250px" placeholder="请选择职务">
+                <el-option
+                    v-for="item in postList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.name"
+                />
+              </el-select>
+            </el-form-item>
             <el-form-item>
-              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+              <el-button type="primary" icon="Search" @click="search">搜索</el-button>
+              <el-button icon="Refresh" @click="research">重置</el-button>
             </el-form-item>
           </el-form>
-          <el-table ref="tableRef" v-loading="loading" :data="state.expertList" :border="true" @select="select" @selection-change="handleSelectionChange">
+          <el-table v-loading="loading" ref="tableRef" :data="dataList" :border="true" @select="select" @selection-change="handleSelectionChange">
             <el-table-column type="selection" width="55" />
-            <el-table-column type="index" width="55" align="center" />
-            <el-table-column label="姓名" align="center" prop="name" />
-            <el-table-column label="出生日期" align="center" prop="birthday" />
-            <el-table-column label="学历" align="center" prop="degree" />
-            <el-table-column label="职称" align="center" prop="title"/>
-            <el-table-column label="专业" align="center" prop="speciality" />
-            <el-table-column label="推荐类别组别" align="center">
+            <el-table-column label="用户ID" prop="id" align="center"  />
+            <el-table-column label="姓名" prop="name" align="center" width="110" />
+            <el-table-column label="手机号" prop="phone" align="center" width="125" />
+            <el-table-column label="用户名" prop="username" align="center" width="110" />
+            <el-table-column label="性别" prop="sex" align="center" >
               <template #default="scope">
-                {{findNodeById(state.expertTypes,scope.row.bigClassify)}}/{{findNodeById(state.expertTypes,scope.row.smallClassify)}}
+                <span v-if="scope.row.sex === 0">男</span>
+                <span v-if="scope.row.sex === 1">女</span>
               </template>
             </el-table-column>
-            <el-table-column label="联系电话" align="center" prop="phone"/>
-            <el-table-column label="申请时间" align="center" prop="createTime">
+            <el-table-column label="所属机构" prop="agency.name" align="center" width="110"  />
+            <el-table-column label="社保" prop="socialSecurity" align="center" width="120">
               <template #default="scope">
-                {{scope.row.createTime?scope.row.createTime.substring(0,10):''}}
+                <div class="demo-image__preview" v-if="scope.row.socialAttach && scope.row.socialAttach.length>0">
+                  <el-image
+                      style="width: 100px; height: 100px"
+                      :src= "scope.row.socialAttach[0]"
+                      :zoom-rate="1.2"
+                      :max-scale="7"
+                      :min-scale="0.2"
+                      :preview-src-list="scope.row.socialAttach"
+                      :initial-index="0"
+                      fit="cover"
+                      preview-teleported="true"
+                  />
+                </div>
               </template>
             </el-table-column>
+            <el-table-column label="医保" prop="medicalInsurance" align="center" width="120">
+              <template #default="scope">
+                <div class="demo-image__preview" v-if="scope.row.medicalAttach && scope.row.medicalAttach.length>0">
+                  <el-image
+                      style="width: 100px; height: 100px"
+                      :src="scope.row.medicalAttach[0]"
+                      :zoom-rate="1.2"
+                      :max-scale="7"
+                      :min-scale="0.2"
+                      :preview-src-list="scope.row.medicalAttach"
+                      :initial-index="0"
+                      fit="cover"
+                      preview-teleported="true"
+                  />
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="工资清单" prop="salaryList" align="center" width="120">
+              <template #default="scope">
+                <div class="demo-image__preview" v-if="scope.row.salaryAttach && scope.row.salaryAttach.length>0">
+                  <el-image
+                      style="width: 100px; height: 100px"
+                      :src= "scope.row.salaryAttach[0]"
+                      :zoom-rate="1.2"
+                      :max-scale="7"
+                      :min-scale="0.2"
+                      :preview-src-list="scope.row.salaryAttach"
+                      :initial-index="0"
+                      fit="cover"
+                      preview-teleported="true"
+                  />
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="职务" prop="post" align="center" width="120" />
+            <el-table-column label="职称" prop="jobTitle" align="center"  />
+            <el-table-column label="专业方向" prop="majorNames" align="center" width="100" />
+            <el-table-column label="评价师等级" prop="level" align="center" width="100" />
+            <el-table-column label="业绩汇总" prop="summary" align="center"  />
+            <el-table-column label="最近评价时间" prop="lastTime" align="center" width="120" />
           </el-table>
+
           <pagination
-              v-show="state.total > 0"
-              :total="state.total"
-              v-model:page="state.queryParams.pageNum"
-              v-model:limit="state.queryParams.pageSize"
+              v-show="total > 0"
+              :total="total"
+              v-model:page="queryParams.pageNum"
+              v-model:limit="queryParams.pageSize"
               @pagination="getList"
           />
             <template #footer>
                     <span class="dialog-footer">
-                        <el-button @click="handleClose" size="default">取 消</el-button>
+                        <el-button @click="dialogVisible = false" size="default">取 消</el-button>
                         <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
                     </span>
             </template>
@@ -74,84 +151,120 @@
     </div>
 </template>
 <script setup>
-import {defineEmits, reactive, ref, toRefs} from 'vue'
-import Editor from "@/components/Editor/index.vue";
-import {ElMessage} from "element-plus";
-import {addArea, editArea, getArea} from "@/api/backManage/area";
-import {getExpertsList, getExpertTypes} from "../../../../api/form";
-
-const dialogVisible = ref(false)
-const title = ref("")
-const loading = ref(false)
-const tableRef = ref()
-const emit = defineEmits([""]);
-const state = reactive({
-  showSearch: true,
-  total: 0,
-  expertTypes: [],
-  expertList: [],
+import {getCurrentInstance, onMounted, reactive, ref, toRefs,defineEmits} from "vue";
+import {getDictList} from "@/api/backManage/evaluate";
+import {ElMessage, ElMessageBox} from "element-plus";
+import Cookies from "js-cookie";
+import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const emit = defineEmits(['getName'])
+const data = reactive({
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    state: 2,
-    bigClassify: null,
-    smallClassify: null,
-    dutyStatus: null,
-    params: {
-      startTime: '',
-      endTime: ''
-    }
+    expertType: "",
+    name: '',
+    phone: '',
+    level: '',
+    major: null,
+    post: ''
   },
-  classiFy: [],
-  searchTime: [],
+  total: 0,
+  dataList: [],
+  majorList: [],
+  levelList: [
+    {
+      id: '1',
+      name: '一级'
+    },
+    {
+      id: '2',
+      name: '二级'
+    },
+    {
+      id: '3',
+      name: '三级'
+    },
+    {
+      id: '4',
+      name: '其他'
+    },
+  ],
+  postList: [
+    {
+      id: '1',
+      name: '法人'
+    },
+    {
+      id: '2',
+      name: '过程控制负责人'
+    },
+    {
+      id: '3',
+      name: '机构负责人'
+    },
+    {
+      id: '4',
+      name: '技术负责人'
+    },
+    {
+      id: '5',
+      name: '员工'
+    },
+  ],
+  dialogVisible: false,
+  title: '',
   selected: []
 })
+const tableRef = ref()
+const { queryParams, total, dataList, majorList, levelList, postList, dialogVisible,title,selected } = toRefs(data);
 
 const openDialog = (type) => {
-  resetQuery()
-  getTypes()
-  state.selected = []
-  title.value = type
-  dialogVisible.value = true
+  getMajor()
+  research()
+  data.selected = []
+  data.title = type
+  data.dialogVisible = true
 }
 
 const onSubmit = async () => {
-  if(state.selected.length>0)
-  emit('getName',title.value,state.selected[state.selected.length - 1])
-  dialogVisible.value = false
-}
-
-const handleQuery=()=> {
-  state.queryParams.pageNum = 1
-  if(state.classiFy && state.classiFy.length>0){
-    state.queryParams.bigClassify = state.classiFy[0]
-    state.queryParams.smallClassify = state.classiFy[1]
-  }
-  if(state.searchTime && state.searchTime.length>0){
-    state.queryParams.params.startTime = state.searchTime[0]
-    state.queryParams.params.endTime = state.searchTime[1]
-  }
-  getList()
+  if(data.selected.length>0)
+  emit('getName',data.title,data.selected[data.selected.length - 1])
+  data.dialogVisible = false
 }
 
 const getList = async () => {
-  loading.value = true;
-  const res = await getExpertsList(state.queryParams)
+  loading.value = true
+  const res = await getExpertList(data.queryParams)
   if(res.code == 200){
-    state.expertList = res.data.list
-    state.total = res.data.total
+    data.dataList = res.data.list.map(item => {
+      return{
+        ...item,
+        socialAttach: item.socialAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
+        medicalAttach: item.medicalAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
+        salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path})
+      }
+    })
+    console.log('RES',data.dataList)
+    data.total = res.data.total
   }else{
-    ElMessage.warning(res.msg)
+    ElMessage.warning(res.message)
   }
-  loading.value = false;
+  loading.value = false
 }
 
-const getTypes = async()=> {
-  const res = await getExpertTypes()
-  if(res.code == 200){
-    state.expertTypes = res.data
+const getMajor = async () => {
+  const queryParams = {
+    pageNum: 1,
+    pageSize: 50,
+    dictType: 'sys_major_orientation'
+  }
+  const res = await getDictList(queryParams);
+  if(res.code === 200){
+    data.majorList = res.data.list
   }else{
-    ElMessage.warning(res.msg)
+    ElMessage.warning(res.message)
   }
 }
 
@@ -164,58 +277,26 @@
 })
 
 const handleSelectionChange = (val) => {
-  state.selected = val
+  data.selected = val
 }
 
-const resetQuery=()=> {
-  state.queryParams = {
+const search = ()=>{
+  data.queryParams.pageNum = 1
+  getList()
+}
+
+const research = ()=>{
+  data.queryParams = {
     pageNum: 1,
     pageSize: 10,
-    state: 2,
-    bigClassify: null,
-    smallClassify: null,
-    dutyStatus: null,
-    params: {
-      startTime: '',
-      endTime: ''
-    }
-  };
-  state.classiFy = []
-  state.searchTime = []
-  handleQuery()
-}
-
-const handleChange=(value)=> {
-  if(!value){
-    data.classiFy = []
-    data.queryParams.bigClassify = ""
-    data.queryParams.smallClassify = ""
+    expertType: "",
+    name: '',
+    phone: '',
+    level: '',
+    major: null,
+    post: ''
   }
-}
-const changeTime=(value)=>{
-  if(!value){
-    data.queryParams.params.endTime = ""
-    data.queryParams.params.startTime = ""
-  }
-}
-
-const findNodeById = (data,value)=> {
-  for (const node of data) {
-    if (node.id === value) {
-      return node.classifyName;
-    }
-    if (node.children) {
-      const foundNode = findNodeById(node.children, value);
-      if (foundNode) {
-        return foundNode;
-      }
-    }
-  }
-  return null;
-}
-
-const handleClose = () => {
-    dialogVisible.value = false;
+  getList()
 }
 
 defineExpose({
diff --git a/src/views/safetyReview/projectManage/components/mapLocation.vue b/src/views/safetyReview/projectManage/components/mapLocation.vue
new file mode 100644
index 0000000..27b8fd2
--- /dev/null
+++ b/src/views/safetyReview/projectManage/components/mapLocation.vue
@@ -0,0 +1,118 @@
+<template>
+    <el-dialog
+        v-model="state.mapLocationVisible"
+        append-to-body
+        :close-on-click-modal="false"
+        width="75%"
+        :title="state.title"
+    >
+        <div class="mapLocation_head">
+            <div>
+                <el-alert
+                    title="点击地点获取经纬度信息"
+                    type="info"
+                    :closable="false"
+                >
+                </el-alert>
+            </div>
+            <div class="mapLocation_latlng">
+                <span>经度:</span>
+                <el-input class="mapLocation_latlng_input" id="lng" v-model="state.longitude"></el-input>
+            </div>
+            <div class="mapLocation_latlng">
+                <span>纬度:</span>
+                <el-input class="mapLocation_latlng_input" id="lat" v-model="state.latitude"></el-input>
+            </div>
+        </div>
+        <div class="mapLocation_body">
+          <baidu-map class="map" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="state.center" :zoom="15" scroll-wheel-zoom @ready="initMap" @click="getPosition">
+            <bm-marker :position="{lng: state.longitude, lat: state.latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE">
+              <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/>
+            </bm-marker>
+          </baidu-map>
+        </div>
+        <div  align="right" style="margin-top: 10px">
+            <el-button @click="state.mapLocationVisible = false">取消</el-button>
+            <el-button type="primary" @click="submitLatLng()">确认</el-button>
+        </div>
+    </el-dialog>
+</template>
+
+<script setup>
+import {ref, onMounted, reactive, toRefs, defineComponent,defineExpose,defineEmits} from 'vue';
+import { BaiduMap,BmMarker } from 'vue-baidu-map-3x'
+const state = reactive({
+  title: '',
+  longitude: '',
+  latitude: '',
+  mapLocationVisible: false,
+  center: {
+    lng: '116.404',
+    lat: '39.915'
+  }
+})
+
+const emit = defineEmits(['giveLatLng'])
+
+onMounted(() => {
+  // ...(mounted钩子中的代码不变)
+});
+const map = reactive({})
+
+const getPosition = ({type, target, point, pixel, overlay})=>{
+  state.longitude = point.lng
+  state.latitude = point.lat
+}
+
+const openMapLocation=(longitude,latitude)=>{
+  state.longitude = longitude
+  state.latitude = latitude
+  state.mapLocationVisible = true
+}
+
+const submitLatLng=()=>{
+  state.mapLocationVisible = false
+  emit('giveLatLng',state.longitude,state.latitude);
+}
+
+const initMap=()=>{
+
+}
+
+defineExpose({
+  openMapLocation
+})
+</script>
+
+<style lang="scss" scoped>
+.map {
+  width: 100%;
+  height: 500px;
+
+  :deep(.BMap_cpyCtrl){
+    display: none!important;
+    visibility: hidden!important;
+  }
+
+  :deep(.anchorBL) {
+    display: none!important;
+    visibility: hidden!important;
+  }
+}
+.mapLocation_head{
+    width:100%;
+    height:100px;
+}
+.mapLocation_body{
+    width:100%;
+    height:500px
+}
+.mapLocation_latlng{
+    padding-top:10px;
+    display:inline-block;
+    margin-right: 20px;
+}
+.mapLocation_latlng_input{
+    width:250px;
+}
+</style>
diff --git a/src/views/safetyReview/projectManage/components/riskAnalysis.vue b/src/views/safetyReview/projectManage/components/riskAnalysis.vue
index cc167a3..ac08f96 100644
--- a/src/views/safetyReview/projectManage/components/riskAnalysis.vue
+++ b/src/views/safetyReview/projectManage/components/riskAnalysis.vue
@@ -195,7 +195,7 @@
                 size="large"
                 maxlength="30"
                 show-word-limit
-                placeholder="请输入风险评估人意见"
+                placeholder="风险评估人意见"
             >
             </el-input>
           </el-form-item>
@@ -207,7 +207,7 @@
                 show-word-limit
                 v-model="state.formData.agencyOpinon"
                 size="large"
-                placeholder="请输入机构评价负责人意见"
+                placeholder="机构评价负责人意见"
             >
             </el-input>
           </el-form-item>
@@ -408,13 +408,12 @@
         data.id = val;
         data.project.id = val;
         delete data.project.area;
-        data.isInBusiness = state.tableData[0].status === 1;
-        data.isSatisfyNeed = state.tableData[1].status === 1;
-        data.isNeedExpert = state.tableData[2].status === 1;
-        data.isFinishReport = state.tableData[3].status === 1;
-        data.isAcceptChargess = state.tableData[4].status === 1;
-        data.isFeasibility = state.tableData[5].status === 1;
-        console.log('data', data)
+        data.isInBusiness = state.tableData[0].status === 1
+        data.isSatisfyNeed = state.tableData[1].status === 1
+        data.isNeedExpert = state.tableData[2].status === 1
+        data.isFinishReport = state.tableData[3].status === 1
+        data.isAcceptChargess = state.tableData[4].status === 1
+        data.isFeasibility = state.tableData[5].status === 1
         const res = await editRisk(data);
         if (res.code == 200) {
           ElMessage.success('变更成功')
diff --git a/src/views/safetyReview/projectManage/components/siteCheckRcd.vue b/src/views/safetyReview/projectManage/components/siteCheckRcd.vue
new file mode 100644
index 0000000..1c0da84
--- /dev/null
+++ b/src/views/safetyReview/projectManage/components/siteCheckRcd.vue
@@ -0,0 +1,179 @@
+<template>
+  <div class="riskBox">
+    <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top">
+      <el-row :gutter="30">
+        <el-col :span="6">
+          <el-form-item prop="investigationDate" label="现场勘验时间">
+            <el-date-picker
+                style="width: 100%"
+                v-model="state.formData.investigationPlanDate"
+                type="date"
+                value-format="YYYY-MM-DD 00:00:00"
+                placeholder="选择日期"
+                size="large"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item prop="investigationDate" label="现场勘验位置">
+            <el-input
+                v-model="state.formData.location"
+                size="large"
+                placeholder="请填写现场勘验位置"
+            >
+              <template #append>
+                <el-button :icon="Search" @click="openLocation"/>
+              </template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item prop="isSafetyCheck" label="编制现场安全检查表">
+            <el-radio-group v-model="state.formData.isSafetyCheck" size="large">
+              <el-radio :label="true" size="large">是</el-radio>
+              <el-radio :label="false" size="large">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+<!--      <el-row :gutter="30">-->
+<!--        <el-col :span="6">-->
+<!--          <el-form-item label="附件上传">-->
+<!--            <el-upload-->
+<!--                accept="image/*"-->
+<!--                :action="state.uploadUrl"-->
+<!--                :headers="state.header"-->
+<!--                method="post"-->
+<!--                :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 1)"-->
+<!--                :on-preview="handlePictureCardPreview"-->
+<!--                v-model:file-list="state.socialList"-->
+<!--                list-type="picture-card"-->
+<!--                :before-upload="picSize"-->
+<!--                :on-remove="(file, file_list)=>{handleRemove(file, file_list, 1)}"-->
+<!--            >-->
+<!--              <el-icon><Plus /></el-icon>-->
+<!--              <template #tip>-->
+<!--                <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div>-->
+<!--              </template>-->
+<!--            </el-upload>-->
+<!--          </el-form-item>-->
+<!--        </el-col>-->
+<!--      </el-row>-->
+      <el-form-item prop="recordData" label="现场勘验记录">
+        <el-input
+            v-model="state.formData.recordData"
+            :autosize="{ minRows: 6 }"
+            maxlength="200"
+            show-word-limit
+            type="textarea">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="企业陪同照片">
+
+      </el-form-item>
+    </el-form>
+    <map-location ref="mapLocationRef" @giveLatLng="achieveLatLng"></map-location>
+  </div>
+</template>
+<script setup>
+
+import {defineEmits, onMounted, reactive, ref} from "vue"
+import {ElMessage} from "element-plus"
+import {Search} from '@element-plus/icons-vue'
+import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis"
+import Cookies from "js-cookie"
+const emit = defineEmits(["getNextStatus"])
+import MapLocation from "./mapLocation.vue"
+
+const state = reactive({
+  formData: {
+    id: null,
+    projectId: null,
+    investigationDate: '',
+    location: '',
+    isSafetyCheck: null,
+    recordData: ''
+  },
+  planPersons: [],
+  rules: {
+    recordData: [{required: true, message: '请填写现场勘验记录', trigger: 'blur'}]
+  }
+})
+
+const isAmin = ref(false)
+const formRef = ref()
+const mapLocationRef = ref()
+onMounted(() => {
+  const userInfo = JSON.parse(Cookies.get('userInfo'))
+  if(userInfo.identity === 0){
+    isAmin.value = true;
+  }
+});
+
+const riskOpen = async (type,val) => {
+  console.log("type",type,val)
+  if(type === 'detail' || type === 'edit' ){
+    const res = await getRiskDetail({projectId: val});
+    if(res.code == 200){
+      state.formData = res.data;
+      state.formData.project.business = parseInt(res.data.project.business);
+      state.formData.project.area = [res.data.project.province,res.data.project.city];
+    }else {
+      ElMessage.warning(res.message)
+    }
+  }
+  if(type === 'add' || type === 'clickEdit') {
+    const valid = await formRef.value.validate();
+    if(valid){
+      if (isAmin.value) {
+        ElMessage.warning("当前用户暂无权限");
+        return;
+      }
+      if(type === 'add'){
+        const {projectId, ...data} = JSON.parse(JSON.stringify(state.formData))
+        const res = await addRisk(data);
+        if (res.code == 200) {
+          ElMessage.success('保存成功')
+          formRef.value.clearValidate();
+          emit('getNextStatus', res.data);
+
+        } else {
+          ElMessage.warning(res.message)
+        }
+      }else if(type === 'clickEdit'){
+        const { ...data} = JSON.parse(JSON.stringify(state.formData))
+        const res = await editRisk(data);
+        if (res.code == 200) {
+          ElMessage.success('变更成功')
+          formRef.value.clearValidate();
+          // emit('getNextStatus', data.project.id);
+        } else {
+          ElMessage.warning(res.message)
+        }
+      }
+    }
+  }
+}
+
+const openLocation = ()=>{
+  mapLocationRef.value.openMapLocation(state.formData.location.split(',')[0],state.formData.location.split(',')[1])
+}
+
+const achieveLatLng=(lng,lat)=>{
+  state.formData.location = lng + ',' + lat
+}
+
+defineExpose({
+  riskOpen
+});
+
+
+</script>
+<style scoped lang="scss">
+.riskBox{
+  :deep(.el-form .el-form-item__label) {
+    font-size: 15px;
+  }
+}
+
+</style>
diff --git a/src/views/safetyReview/projectManage/process.vue b/src/views/safetyReview/projectManage/process.vue
index e40806e..970b2a2 100644
--- a/src/views/safetyReview/projectManage/process.vue
+++ b/src/views/safetyReview/projectManage/process.vue
@@ -38,10 +38,12 @@
         <div class="card-header">{{selectedObj.id}}- {{selectedObj.name}}</div>
         <div class="card-content">
           <div :style="'height:' + middleContentHeight + 'px'" style="overflow-y: scroll;">
-            <rickAnalysis ref="riskRef" v-if="selectedObj.id === 1" @getNextStatus="getNextStatus"></rickAnalysis>
+            <rickAnalysis ref="riskRef" v-if="selectedObj.id === 2" @getNextStatus="getNextStatus"></rickAnalysis>
             <contract-manage ref="contractMngRef" v-if="selectedObj.id === 2" @getNextStatus="getNextStatus"></contract-manage>
             <evaluate-task-notice ref="evaluteRef" v-if="selectedObj.id === 3" @getNextStatus="getNextStatus"></evaluate-task-notice>
             <evaluate-plan ref="evalPlanRef" v-if="selectedObj.id === 4" @getNextStatus="getNextStatus"></evaluate-plan>
+            <employ-notice-record ref="employNoticeRcdRef" v-if="selectedObj.id === 5" @getNextStatus="getNextStatus"></employ-notice-record>
+            <site-check-rcd ref="siteCheckRcdRef" v-if="selectedObj.id === 6" @getNextStatus="getNextStatus"></site-check-rcd>
           </div>
           <div style="display: flex;align-items: center;justify-content: center;margin-bottom: -20px">
             <el-button type="primary" v-if="selectedObj.id !== 1" style="width: 80px" @click="back">上一步</el-button>
@@ -53,7 +55,7 @@
       </el-card>
     </div>
     <div class="bottom">
-      <el-button type="primary" v-if="selectedObj.id === 1" plain @click="downloadFile">
+      <el-button type="primary" v-if="selectedObj.id === 3" plain @click="downloadFile">
         评价任务通知书<el-icon class="el-icon--right"><Download /></el-icon>
       </el-button>
     </div>
@@ -74,10 +76,12 @@
 import status2Png from "@/assets/images/status2.png"
 import itemStatus2Png from "@/assets/images/itemStatus2.png"
 import { useRoute } from 'vue-router'
-import {getProjectStatus} from "@/api/projectManage/project";
+import {getProjectStatus} from "@/api/projectManage/project"
 import ContractManage from "./components/contractManage";
-import EvaluateTaskNotice from "./components/evaluateTaskNotice";
+import EvaluateTaskNotice from "./components/evaluateTaskNotice"
 import EvaluatePlan from "./components/evaluatePlan";
+import EmployNoticeRecord from "./components/employNoticeRecord"
+import SiteCheckRcd from "./components/siteCheckRcd"
 
 const route = useRoute()
 const menuList = ref([
@@ -161,8 +165,7 @@
         id: 11,
         name: '过程控制负责人审核',
         status: 0
-      },
-
+      }
     ]
   },
   {
@@ -191,6 +194,9 @@
 const riskRef = ref();
 const contractMngRef = ref()
 const evaluteRef = ref()
+const evalPlanRef = ref()
+const employNoticeRcdRef = ref()
+const siteCheckRcdRef = ref()
 const isShowMenu = ref(false);
 const selectedObj = ref({})
 const middleHeight = ref(0);
@@ -511,7 +517,6 @@
 
 }
 const clickEdit = () => {
-
   goRouter(selectedObj.value.id,'clickEdit')
 }
 const getNextStatus = async (val) => {
diff --git a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
index 7ef55dd..4ba643a 100644
--- a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
+++ b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
@@ -54,7 +54,7 @@
 <!--                            <el-input v-model.trim="state.form.post" :maxlength="11" ></el-input>-->
                           <el-select v-model="state.form.post" class="m-2" style="width: 100%" placeholder="请选择职务" popper-class="more_select_dropdown"  >
                             <el-option
-                                v-for="item in state.postList"
+                                v-for="item in props.postList"
                                 :key="item.id"
                                 :label="item.name"
                                 :value="item.name"
@@ -73,7 +73,7 @@
                         <el-form-item label="专业方向:" prop="majorShow"  v-if="state.title !== '修改密码'" >
                           <el-select v-model="state.form.majorShow" value-key="id" class="m-2" style="width: 100%" multiple placeholder="请选择专业方向" popper-class="more_select_dropdown" @change="selectChange">
                             <el-option
-                                v-for="item in state.majorList"
+                                v-for="item in props.majorList"
                                 :key="item.id"
                                 :label="item.label"
                                 :value="item"
@@ -112,7 +112,7 @@
                   <el-form-item label="评价师等级:" prop="level" v-if="state.title !== '修改密码'">
                     <el-select v-model="state.form.level" class="m-2" style="width: 100%" placeholder="请选择评价师等级" popper-class="more_select_dropdown"  >
                       <el-option
-                          v-for="item in state.levelList"
+                          v-for="item in props.levelList"
                           :key="item.id"
                           :label="item.name"
                           :value="item.name"
@@ -196,7 +196,7 @@
     </div>
 </template>
 <script setup>
-import {reactive, ref, toRefs, defineEmits, onMounted, nextTick} from 'vue'
+import {reactive, ref, toRefs, defineEmits, defineProps, onMounted, nextTick} from 'vue'
 import { View } from "@element-plus/icons-vue";
 import {ElMessage} from "element-plus";
 import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate";
@@ -207,9 +207,8 @@
 import {resetUserPwd} from "../../../../../api/sysUsers";
 import {getToken} from "@/utils/auth";
 import {getInsitutionList} from "@/api/backManage/insitution";
-import {getDictList} from "@/api/backManage/evaluate";
-
 const emit = defineEmits(["getList"]);
+const props = defineProps(['majorList','levelList','postList'])
 const dialogVisible = ref(false)
 const superRef = ref(null)
 
@@ -339,53 +338,11 @@
     dialogImageUrl: '',
     dialogImg: false,
     pageNum: 1,
-    pageSize: 10,
-    postList: [
-      {
-        id: '1',
-        name: '法人'
-      },
-      {
-        id: '2',
-        name: '过程控制负责人'
-      },
-      {
-        id: '3',
-        name: '机构负责人'
-      },
-      {
-        id: '4',
-        name: '技术负责人'
-      },
-      {
-        id: '5',
-        name: '员工'
-      },
-    ],
-  majorList: [],
-  levelList: [
-    {
-      id: '1',
-      name: '一级'
-    },
-    {
-      id: '2',
-      name: '二级'
-    },
-    {
-      id: '3',
-      name: '三级'
-    },
-    {
-      id: '4',
-      name: '其他'
-    },
-  ]
+    pageSize: 10
 })
 
 onMounted(()=>{
     getAgency()
-    getMajor()
 })
 
 const openDialog = async (type, value) => {
@@ -669,20 +626,6 @@
         ElMessage.warning(res.message)
     }
 }
-const getMajor = async () => {
-  const queryParams = {
-        pageNum: 1,
-        pageSize: 50,
-        dictType: 'sys_major_orientation'
-  }
-  const res = await getDictList(queryParams);
-  if(res.code === 200){
-    state.majorList = res.data.list
-  }else{
-    ElMessage.warning(res.message)
-  }
-}
-
 
 
 //触底函数
diff --git a/src/views/safetyReview/userManage/expertUsers/index.vue b/src/views/safetyReview/userManage/expertUsers/index.vue
index ab11d71..96d9db1 100644
--- a/src/views/safetyReview/userManage/expertUsers/index.vue
+++ b/src/views/safetyReview/userManage/expertUsers/index.vue
@@ -8,12 +8,50 @@
                 @click="openDialog('add',{})"
             >新增</el-button>
         </div>
-        <div style="margin-top: 15px;margin-bottom: 15px;">
-            <el-radio-group v-model="queryParams.expertType" @change="changeType">
+        <div style="margin-top: 15px;margin-bottom: 15px">
+            <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>
+        </div>
+        <div style="margin-bottom: 15px; display: flex;align-items: center">
+          <el-input
+              v-model="queryParams.name"
+              placeholder="姓名"
+              style="width: 220px;margin-right: 12px"
+          />
+          <el-input
+              v-model="queryParams.phone"
+              placeholder="手机号"
+              style="width: 220px;margin-right: 12px"
+          />
+          <el-select v-model="queryParams.level" style="width: 220px;margin-right: 12px" placeholder="评价师等级" >
+            <el-option
+                v-for="item in levelList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.name"
+            />
+          </el-select>
+          <el-select v-model="queryParams.major" value-key="id" style="width: 220px;margin-right: 12px" placeholder="专业方向">
+            <el-option
+                v-for="item in majorList"
+                :key="item.id"
+                :label="item.label"
+                :value="item.id"
+            />
+          </el-select>
+          <el-select v-model="queryParams.post" style="width: 220px;margin-right: 12px" placeholder="请选择职务">
+            <el-option
+                v-for="item in postList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.name"
+            />
+          </el-select>
+          <el-button type="primary"  icon="Filter" @click="search">查询</el-button>
+          <el-button type="primary"  icon="Filter" @click="research">重置</el-button>
         </div>
 
         <!-- 表格数据 -->
@@ -102,13 +140,14 @@
             v-model:limit="queryParams.pageSize"
             @pagination="getList"
         />
-        <expert-dialog ref="expertRef" @getList="getList"></expert-dialog>
+        <expert-dialog ref="expertRef" @getList="getList" :majorList="majorList" :levelList="levelList" :postList="postList"></expert-dialog>
     </div>
 </template>
 
 <script setup>
 import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
 import expertDialog from "./components/expertDialog.vue"
+import {getDictList} from "@/api/backManage/evaluate";
 import {ElMessage, ElMessageBox} from "element-plus";
 import Cookies from "js-cookie";
 import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers";
@@ -117,19 +156,64 @@
 const expertRef = ref();
 const data = reactive({
     queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        expertType: ""
+      pageNum: 1,
+      pageSize: 10,
+      expertType: "",
+      name: '',
+      phone: '',
+      level: '',
+      major: null,
+      post: ''
     },
     total: 0,
-    dataList: []
-
-
+    dataList: [],
+    majorList: [],
+    levelList: [
+      {
+        id: '1',
+        name: '一级'
+      },
+      {
+        id: '2',
+        name: '二级'
+      },
+      {
+        id: '3',
+        name: '三级'
+      },
+      {
+        id: '4',
+        name: '其他'
+      },
+    ],
+    postList: [
+      {
+        id: '1',
+        name: '法人'
+      },
+      {
+        id: '2',
+        name: '过程控制负责人'
+      },
+      {
+        id: '3',
+        name: '机构负责人'
+      },
+      {
+        id: '4',
+        name: '技术负责人'
+      },
+      {
+        id: '5',
+        name: '员工'
+      },
+    ]
 });
 
-const { queryParams, total, dataList } = toRefs(data);
+const { queryParams, total, dataList, majorList, levelList, postList } = toRefs(data);
 onMounted(()=>{
     getList()
+  getMajor()
 })
 const getList = async () => {
     loading.value = true
@@ -151,14 +235,41 @@
     loading.value = false
 }
 
+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 search = ()=>{
+  data.queryParams.pageNum = 1
+  getList()
+}
+
+const research = ()=>{
+  data.queryParams = {
+    pageNum: 1,
+    pageSize: 10,
+    expertType: "",
+    name: '',
+    phone: '',
+    level: '',
+    major: null,
+    post: ''
+  }
+  getList()
+}
+
 const openDialog = (type, value) => {
     expertRef.value.openDialog(type, value);
-}
-const changeType = (val) => {
-    console.log("val", val)
-    queryParams.expertType = val;
-    queryParams.pageNum = 1;
-    getList();
 }
 
 /** 重置新增的表单以及其他数据  */

--
Gitblit v1.9.2