From b609f47f586d94606d7f9dcc5750780867acebc7 Mon Sep 17 00:00:00 2001
From: dearlin <1261008090@qq.com>
Date: Mon, 13 Nov 2023 11:02:18 +0800
Subject: [PATCH] =?UTF-8?q?=E9=9A=90=E6=82=A3=E8=80=83=E8=AF=84=E5=88=9D?=
 =?UTF-8?q?=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/evaluation.vue                 | 430 +++++++++++++++
 .../components/hidden_info.vue                | 504 ++++++++++++++++++
 .../components/list.vue                       | 142 +++++
 .../branch_hazard_assessment/index.vue        |  30 ++
 .../configuration_group/components/list.vue   | 387 ++++++++++++++
 .../configuration_group/index.vue             |  22 +
 .../components/hidden_info.vue                | 486 +++++++++++++++++
 .../components/hidden_list.vue                | 285 ++++++++++
 .../components/list.vue                       | 155 ++++++
 .../components/personnel_list.vue             | 253 +++++++++
 .../components/redemption_records.vue         | 127 +++++
 .../personnel_evaluation_status/index.vue     |  35 ++
 .../tongji/components/list.vue                | 109 ++++
 .../keyproject_evaluation/tongji/index.vue    |  32 ++
 src/views/keyprojects/hidden/index.vue        |   3 +-
 15 files changed, 2999 insertions(+), 1 deletion(-)
 create mode 100644 src/views/keyproject_evaluation/branch_hazard_assessment/components/evaluation.vue
 create mode 100644 src/views/keyproject_evaluation/branch_hazard_assessment/components/hidden_info.vue
 create mode 100644 src/views/keyproject_evaluation/branch_hazard_assessment/components/list.vue
 create mode 100644 src/views/keyproject_evaluation/branch_hazard_assessment/index.vue
 create mode 100644 src/views/keyproject_evaluation/configuration_group/components/list.vue
 create mode 100644 src/views/keyproject_evaluation/configuration_group/index.vue
 create mode 100644 src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_info.vue
 create mode 100644 src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_list.vue
 create mode 100644 src/views/keyproject_evaluation/personnel_evaluation_status/components/list.vue
 create mode 100644 src/views/keyproject_evaluation/personnel_evaluation_status/components/personnel_list.vue
 create mode 100644 src/views/keyproject_evaluation/personnel_evaluation_status/components/redemption_records.vue
 create mode 100644 src/views/keyproject_evaluation/personnel_evaluation_status/index.vue
 create mode 100644 src/views/keyproject_evaluation/tongji/components/list.vue
 create mode 100644 src/views/keyproject_evaluation/tongji/index.vue

diff --git a/src/views/keyproject_evaluation/branch_hazard_assessment/components/evaluation.vue b/src/views/keyproject_evaluation/branch_hazard_assessment/components/evaluation.vue
new file mode 100644
index 0000000..cbdc512
--- /dev/null
+++ b/src/views/keyproject_evaluation/branch_hazard_assessment/components/evaluation.vue
@@ -0,0 +1,430 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="100px">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="隐患描述">
+            <el-input v-model="searchForm.hiddendescr" placeholder="请输入关键字"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="隐患来源">
+            <el-select v-model="searchForm.SOURCE" style="width: 100%;">
+              <el-option value="1" label="隐患快报"/>
+              <el-option value="2" label="清单排查"/>
+              <!--              <el-option value="3" label="清单排查"/>-->
+              <el-option value="4" label="安全环保检查(监管端)"/>
+              <el-option value="5" label="安全环保检查(企业端)"/>
+              <el-option value="6" label="消防点检"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="发现部门">
+            <Treeselect
+              :options="treeData"
+              :normalizer="normalizer"
+              v-model="searchForm.DEPARTMENT_ID"
+              placeholder="请选择发现部门"
+              no-options-text="暂无数据"
+              no-children-text="暂无数据"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="隐患发现人 ">
+            <el-input v-model="searchForm.KEYWORDS"/>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="8">
+          <el-form-item label="隐患发现时间">
+            <el-date-picker
+              v-model="searchForm.dates"
+              format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              style="width: 100%;"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="考评状态">
+            <el-select v-model="searchForm.STATE" style="width: 100%;">
+              <el-option value="1" label="是"/>
+              <el-option value="2" label="否"/>
+              <el-option value="3" label="考评合格"/>
+              <el-option value="4" label="考评不合格"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="隐患类型">
+            <Treeselect
+              :options="hiddenTypeList"
+              :normalizer="normalizer"
+              v-model="searchForm.HIDDENTYPE"
+              placeholder="请选择隐患类型"
+              no-options-text="暂无数据"
+              no-children-text="暂无数据"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="本人是否考评">
+            <el-select v-model="searchForm.userIs" clearable style="width: 100%;">
+              <el-option value="1" label="是"/>
+              <el-option value="2" label="否"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getList">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column label="隐患来源">
+        <template slot-scope="{row}">
+          <span v-if="row.SOURCE=='1'">
+            隐患快报
+          </span>
+          <span v-else-if="row.SOURCE=='2'">
+            清单排查
+          </span>
+          <span v-else-if="row.SOURCE=='3'">
+            清单排查
+          </span>
+          <span v-else-if="row.SOURCE=='4'">
+            安全环保检查(监管端)
+          </span>
+          <span v-else-if="row.SOURCE=='5'">
+            安全环保检查(企业端)
+          </span>
+          <span v-else-if="row.SOURCE=='6'">
+            消防点检
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="HIDDENDESCR" label="隐患描述"/>
+      <el-table-column prop="DISCOVERYTIME" label="隐患发现时间"/>
+      <el-table-column prop="CREATOR_NAME" label="隐患发现人"/>
+      <el-table-column label="隐患状态">已验收</el-table-column>
+      <el-table-column prop="CHECKOR_NAME" label="隐患验收人">
+        <template slot-scope="{row}">
+          <span v-if="row.RECTIFICATIONTYPE=='1'">
+            --
+          </span>
+          <span v-else>
+            {{ row.CHECKOR_NAME }}
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="CHECK_USER" label="已考评组成员"/>
+      <el-table-column prop="UN_CHECK_USER" label="待考评组成员"/>
+      <el-table-column prop="PASS_STATUS" label="考评结果">
+        <template slot-scope="{row}">
+          <template v-if="row.CHECK_COUNT !== 5">
+            <span>考核未完成</span>
+          </template>
+          <template v-else>
+            <template v-if="row.PASS_COUNT > 2">
+              <span>考核合格</span>
+            </template>
+            <template v-else>
+              <span>考核不合格</span>
+            </template>
+          </template>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" width="350px">
+        <template slot-scope="{row}">
+          <el-button type="info" icon="el-icon-view" @click="fnViewHidden(row.HIDDEN_ID)">查看隐患详情</el-button>
+          <el-button type="primary" icon="el-icon-view" @click="fnEvaluation(row.HIDDEN_ID,row.SOURCE, row.CREATOR,'view')">考评详情</el-button>
+          <el-button
+            v-if="isEvaluationShowButton(row.UN_CHECK_USER_ID)"
+            type="success"
+            icon="el-icon-view"
+            @click="fnEvaluation(row.HIDDEN_ID,row.SOURCE, row.CREATOR,'edit')">考评
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button icon="el-icon-arrow-left" @click="goBack">返回</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+    <el-dialog :visible.sync="evaluationDialog.visible" title="考评">
+      <table class="table-ui">
+        <template v-for="item in evaluationDialog.list">
+          <tr :key="item.CONFIG_USER_ID">
+            <td class="tbg">考评人员</td>
+            <td>{{ item.USER_NAME }}</td>
+            <td class="tbg">是否符合</td>
+            <td>
+              <span v-if="item.RESULT === 1">符合</span>
+              <span v-if="item.RESULT === 2">不符合</span>
+              <span v-if="!item.RESULT">未考评</span>
+            </td>
+          </tr>
+          <tr v-if="item.RESULT === 2" :key="item.CONFIG_USER_ID">
+            <td class="tbg">不符合原因</td>
+            <td colspan="3">{{ item.DESCR }}</td>
+          </tr>
+        </template>
+      </table>
+      <el-form
+        v-if="evaluationDialog.type === 'edit'"
+        ref="evaluationDialogForm"
+        :model="evaluationDialog.form"
+        :rules="evaluationDialog.rules"
+        label-width="100px"
+        class="mt-20">
+        <el-form-item label="考评人员">
+          <el-input v-model="evaluationDialog.form.USER_NAME" disabled/>
+        </el-form-item>
+        <el-form-item label="是否符合" prop="RESULT">
+          <el-select v-model="evaluationDialog.form.RESULT" style="width: 100%;">
+            <el-option value="1" label="符合"/>
+            <el-option value="2" label="不符合"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item v-if="evaluationDialog.form.RESULT === '2'" label="不符合原因" prop="DESCR">
+          <el-input v-model="evaluationDialog.form.DESCR" type="textarea" autosize/>
+        </el-form-item>
+      </el-form>
+      <template slot="footer">
+        <el-button @click="fnEvaluationDialogChangeShow">关闭</el-button>
+        <el-button v-if="evaluationDialog.type === 'edit'" type="primary" @click="fnEvaluationDialogSubmit">确认</el-button>
+      </template>
+    </el-dialog>
+    <hidden-info v-if="visible" :visible.sync="visible" :id="HIDDEN_ID"/>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import hiddenInfo from './hidden_info.vue'
+
+export default {
+  components: { Pagination, Treeselect, hiddenInfo },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      USER_ID: JSON.parse(sessionStorage.getItem('user')).USER_ID,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      normalizer(node) {
+        return {
+          id: node.id,
+          label: node.name,
+          children: node.nodes
+        }
+      },
+      treeData: [],
+      hiddenTypeList: [],
+      listLoading: false,	// 加载状态
+      searchForm: {
+        KEYWORDS: '',
+        SOURCE: '',
+        HIDDENTYPE: null,
+        dates: [],
+        DEPARTMENT_ID: null,
+        STATE: '',
+        hiddendescr: '',
+        userIs: ''
+      },
+      evaluationDialog: {
+        visible: false,
+        type: '',
+        HIDDEN_ID: '',
+        SOURCE: '',
+        CREATOR: '',
+        form: {
+          EVALUATIONCONFIGINFO_ID: '',
+          USER_NAME: '',
+          DESCR: '',
+          RESULT: ''
+        },
+        rules: {
+          RESULT: [{ required: true, message: '请选择是否符合', trigger: 'change' }],
+          DESCR: [{ required: true, message: '请输入不符合原因', trigger: 'blur' }]
+        },
+        list: []
+      },
+      visible: false,
+      HIDDEN_ID: ''
+    }
+  },
+  created() {
+    this.getList()
+    this.getTreeData()
+  },
+  methods: {
+    // 获得部门树
+    getTreeData() {
+      requestFN(
+        '/corpDepartment/listTreeManageAndCorp',
+        {}
+      ).then((data) => {
+        const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
+        this.treeData = this.removeEmptyChildren(treeData)
+      }).catch((e) => {
+      })
+
+      requestFN(
+        '/dictionaries/listSelectTree',
+        {
+          DICTIONARIES_ID: '3babc15144444bdc8d763d0af2bdfff6'
+        }
+      ).then((data) => {
+        this.hiddenTypeList = this.removeEmptyChildren(JSON.parse(data.zTreeNodes))
+      })
+    },
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.SOURCE = ''
+      this.searchForm.HIDDENTYPE = null
+      this.searchForm.dates = []
+      this.searchForm.DEPARTMENT_ID = null
+      this.searchForm.STATE = ''
+      this.searchForm.hiddendescr = ''
+      this.searchForm.userIs = ''
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        'keyProject/hiddenevaluationrecord/hiddenList?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm,
+          START_TIME: this.searchForm.dates && this.searchForm.dates[0],
+          END_TIME: this.searchForm.dates && this.searchForm.dates[1],
+          CORPINFO_ID: this.$parent.CORPINFO_ID,
+          EVALUATIONCONFIG_ID: this.$parent.EVALUATIONCONFIG_ID,
+          TYPE: this.$parent.TYPE
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    isEvaluationShowButton(UN_CHECK_USER_ID) {
+      if (!UN_CHECK_USER_ID) return false
+      else {
+        return UN_CHECK_USER_ID.split(',').indexOf(this.USER_ID) !== -1
+      }
+    },
+    goBack() {
+      this.$parent.activeName = 'List'
+    },
+    fnViewHidden(HIDDEN_ID) {
+      this.visible = true
+      this.HIDDEN_ID = HIDDEN_ID
+      // this.$parent.HIDDEN_ID = HIDDEN_ID
+      // this.$parent.activeName = 'HiddenInfo'
+    },
+    fnEvaluationDialogChangeShow() {
+      this.evaluationDialog.visible = !this.evaluationDialog.visible
+    },
+    fnEvaluation(HIDDEN_ID, SOURCE, CREATOR, type) {
+      this.evaluationDialog.HIDDEN_ID = HIDDEN_ID
+      this.evaluationDialog.SOURCE = SOURCE
+      this.evaluationDialog.CREATOR = CREATOR
+      this.evaluationDialog.type = type
+      this.evaluationDialog.list = []
+      this.fnEvaluationDialogChangeShow()
+      if (type === 'edit') {
+        this.$nextTick(() => {
+          this.$refs.evaluationDialogForm.resetFields()
+        })
+      }
+      requestFN(
+        '/hiddenevaluationrecord/goEdit',
+        {
+          HIDDEN_ID,
+          EVALUATIONCONFIG_ID: this.$parent.EVALUATIONCONFIG_ID
+        }
+      ).then((data) => {
+        const list = []
+        for (let i = 0; i < data.varList.length; i++) {
+          if (type === 'edit') {
+            if (data.varList[i].CONFIG_USER_ID !== this.USER_ID) {
+              list.push(data.varList[i])
+            } else {
+              this.evaluationDialog.form.EVALUATIONCONFIGINFO_ID = data.varList[i].CONFIG_EVALUATIONCONFIGINFO_ID
+              this.evaluationDialog.form.USER_NAME = data.varList[i].USER_NAME
+              this.evaluationDialog.form.DESCR = ''
+              this.evaluationDialog.form.RESULT = ''
+            }
+          } else {
+            list.push(data.varList[i])
+          }
+        }
+        this.evaluationDialog.list = list
+      }).catch((e) => {
+      })
+    },
+    fnEvaluationDialogSubmit() {
+      this.$refs.evaluationDialogForm.validate((valid) => {
+        if (valid) {
+          requestFN(
+            '/hiddenevaluationrecord/add',
+            {
+              CORPINFO_ID: this.$parent.CORPINFO_ID,
+              HIDDENTYPE: this.$parent.TYPE,
+              EVALUATIONCONFIG_ID: this.$parent.EVALUATIONCONFIG_ID,
+              SOURCE: this.evaluationDialog.SOURCE,
+              USER_ID: this.evaluationDialog.CREATOR,
+              HIDDEN_ID: this.evaluationDialog.HIDDEN_ID,
+              ...this.evaluationDialog.form
+            }
+          ).then((data) => {
+            if (data.result === 'success') {
+              this.$message.success('保存成功')
+              this.fnEvaluationDialogChangeShow()
+              this.getList()
+            }
+          }).catch((e) => {
+          })
+        }
+      })
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/branch_hazard_assessment/components/hidden_info.vue b/src/views/keyproject_evaluation/branch_hazard_assessment/components/hidden_info.vue
new file mode 100644
index 0000000..03ca396
--- /dev/null
+++ b/src/views/keyproject_evaluation/branch_hazard_assessment/components/hidden_info.vue
@@ -0,0 +1,504 @@
+<template>
+  <el-dialog :visible="visible" title="隐患查看" @close="goBack">
+    <div class="app-container">
+      <div class="level-title">
+        <h1>隐患信息</h1>
+      </div>
+      <div class="mb-20">
+        <table class="table-ui">
+          <tr>
+            <td class="tbg">隐患来源</td>
+            <template v-if="pd.SOURCE=='1'">
+              <td colspan="3">隐患快报</td>
+            </template>
+            <template v-else-if="pd.SOURCE=='2'">
+              <td colspan="3">清单排查</td>
+            </template>
+            <template v-else-if="pd.SOURCE=='3'">
+              <td colspan="3">清单排查</td>
+            </template>
+            <template v-else-if="pd.SOURCE=='4'">
+              <td colspan="3">安全环保检查(监管端)</td>
+            </template>
+            <template v-else-if="pd.SOURCE=='5'">
+              <td colspan="3">安全环保检查(企业端)</td>
+            </template>
+          </tr>
+          <!--<tr>
+            <td class="tbg">检查内容</td>
+            <td>{{ pd.CHECK_CONTENT }}</td>
+          </tr>-->
+          <tr>
+            <td class="tbg">隐患描述</td>
+            <td colspan="3">{{ pd.HIDDENDESCR }}</td>
+          </tr>
+          <tr v-if="pd.SOURCE=='2'">
+            <td class="tbg">风险点(单元)</td>
+            <td>{{ pd.RISK_UNIT }}</td>
+          </tr>
+          <tr v-if="pd.SOURCE=='2'">
+            <td class="tbg">辨识部位</td>
+            <td>{{ pd.IDENTIFICATION }}</td>
+          </tr>
+          <tr v-if="pd.SOURCE=='2'">
+            <td class="tbg">存在风险</td>
+            <td>{{ pd.RISK_DESCR }}</td>
+          </tr>
+          <tr v-if="pd.SOURCE=='2'">
+            <td class="tbg">风险分级</td>
+            <td>{{ pd.LEVEL }}</td>
+          </tr>
+          <tr v-if="pd.SOURCE=='2'">
+            <td class="tbg">检查内容</td>
+            <td>{{ pd.CHECK_CONTENT }}</td>
+          </tr>
+          <tr/><tr>
+            <td class="tbg">隐患级别</td>
+            <td colspan="3">{{ pd.HIDDENLEVELNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患类型</td>
+            <td colspan="3">{{ pd.HIDDENTYPENAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患状态</td>
+            <td colspan="3">
+              <template v-if="pd.STATE=='1'">
+                未整改
+              </template>
+              <template v-else-if="pd.STATE=='2'">
+                已整改
+              </template>
+              <template v-else-if="pd.STATE=='3'">
+                已整改
+              </template>
+              <template v-else-if="pd.STATE=='4'">
+                已验收
+              </template>
+              <template v-else-if="pd.STATE=='5'">
+                忽略隐患
+              </template>
+              <template v-else-if="pd.STATE=='6'">
+                重大隐患
+              </template>
+              <template v-else-if="pd.STATE=='7'">
+                待处理的特殊隐患
+              </template>
+              <template v-else-if="pd.STATE=='8'">
+                已处理的特殊隐患
+              </template>
+              <template v-else-if="pd.STATE=='-1'">
+                已超期
+              </template>
+              <template v-else-if="pd.STATE=='-2'">
+                待确认
+              </template>
+              <template v-else-if="pd.STATE=='10'">
+                验收打回
+              </template>
+            </td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患部位</td>
+            <!--          <td>{{ pd.hregionName }}{{ pd.HIDDENPART }}</td>-->
+            <td v-if="pd.hregionName" colspan="3">{{ pd.hregionName }}</td>
+            <td v-else colspan="3">{{ pd.HIDDENPART }}</td>
+          </tr>
+          <!--<tr>
+            <td class="tbg">隐患类型2</td>
+            <td>{{ pd.HIDDENTYPENAME2 }}</td>
+          </tr>-->
+          <tr>
+            <td class="tbg">隐患上报位置</td>
+            <td colspan="3">经度:{{ pd.LONGITUDE }} , 纬度:{{ pd.LATITUDE }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患位置描述</td>
+            <td colspan="3">{{ pd.POSITIONDESC }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患图片</td>
+            <td ref="hImgs" colspan="3" class="img-select">
+              <viewer :images="hImgs">
+                <img v-for="item in hImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+              </viewer>
+            </td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患发现人</td>
+            <td colspan="3">{{ pd.CREATORNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患发现时间</td>
+            <td colspan="3">{{ pd.DISCOVERYTIME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改类型</td>
+            <td colspan="3">
+              <template v-if="pd.RECTIFICATIONTYPE=='1'">
+                立即整改
+              </template>
+              <template v-else-if="pd.RECTIFICATIONTYPE=='2'">
+                限期整改
+              </template>
+            </td>
+          </tr>
+          <tr>
+            <td class="tbg">整改负责部门</td>
+            <td colspan="3">{{ pd.editDeptName ?pd.editDeptName :pd.RECTIFICATIONDEPTNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改负责人</td>
+            <td colspan="3">{{ pd.RECTIFICATIONORNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">是否相关方</td>
+            <td colspan="3">{{ pd.ISRELEVANT=='1'?'是':'否' }}</td>
+          </tr>
+          <tr v-if="playerOptions.sources[0].src">
+            <td class="tbg">隐患视频</td>
+            <td colspan="3">
+              <span v-if="playerOptions.sources[0].src" style="color: #4395ff;cursor: pointer" @click="dialogVisible = true">隐患视频</span>
+            </td>
+          </tr>
+          <tr v-if="pd.RECTIFICATIONTYPE=='2'">
+            <td class="tbg">整改期限</td>
+            <td colspan="3">{{ pd.RECTIFICATIONDEADLINE }}</td>
+          </tr>
+          <tr/>
+          <!--        <tr>-->
+          <!--          <td class="tbg">整改完成期限</td>-->
+          <!--          <td colspan="3">{{ pd.RECTIFICATIONDEADLINE }}</td>-->
+          <!--        </tr>-->
+          <!--        <tr>-->
+          <!--          <td class="tbg">隐患确认人</td>-->
+          <!--          <td colspan="3">{{ pd.conUserName }}</td>-->
+          <!--        </tr>-->
+          <template v-if="repulsecause">
+            <tr v-for="item in repulsecause" :key="item.USER_ID">
+              <td class="tbg">打回原因</td>
+              <td>{{ item.REPULSE_CAUSE }}</td>
+              <td class="tbg">打回时间</td>
+              <td>{{ item.OPERATTIME }}</td>
+            </tr>
+          </template>
+        </table>
+      </div>
+
+      <div>
+        <div class="level-title">
+          <h1>确认信息</h1>
+        </div>
+        <table class="table-ui">
+          <tr>
+            <td class="tbg">隐患级别</td>
+            <td >{{ pd.HIDDENLEVELNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改负责人</td>
+            <td >{{ pd.RECTIFICATIONORNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改完成期限</td>
+            <td >{{ pd.RECTIFICATIONDEADLINE }}</td>
+          </tr>
+          <tr >
+            <td class="tbg">隐患确认人</td>
+            <td>{{ pd.conUserName }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">隐患确认时间</td>
+            <td colspan="3">{{ pd.CONFIRM_TIME }}</td>
+          </tr>
+        </table>
+      </div>
+
+      <div v-show="pd.STATE>=2 && pd.STATE <16">
+        <div class="level-line" />
+        <div class="level-title">
+          <h1>整改信息</h1>
+        </div>
+        <table class="table-ui">
+          <tr>
+            <td class="tbg">整改描述</td>
+            <td>{{ pd.RECTIFYDESCR }}</td>
+          </tr>
+
+          <tr>
+            <td class="tbg">整改部门</td>
+            <td>{{ pd.RECTIFICATIONDEPTNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改人</td>
+            <td>{{ pd.RECTIFICATIONORNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改时间</td>
+            <td>{{ pd.RECTIFICATIONTIME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">投入资金</td>
+            <td>{{ pd.INVESTMENT_FUNDS }}元</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改后图片</td>
+            <td class="img-select">
+              <viewer :images="rImgs">
+                <img v-for="item in rImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+              </viewer>
+            </td>
+          </tr>
+          <tr>
+            <td class="tbg">整改方案</td>
+            <td v-if="pd.HAVESCHEME==0">无</td>
+            <td v-else-if="pd.HAVESCHEME==1">有</td>
+            <td v-else/>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">排查日期</td>
+            <td>{{ hs.SCREENINGDATE }}</td>
+          </tr>
+          <!--        <tr v-if="hs && pd.HAVESCHEME==1">-->
+          <!--          <td class="tbg">隐患清单</td>-->
+          <!--          <td>{{ hs.LISTNAME }}</td>-->
+          <!--        </tr>-->
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">治理标准要求</td>
+            <td>{{ hs.GOVERNSTANDARDS }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">治理方法</td>
+            <td>{{ hs.GOVERNMETHOD }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">经费和物资的落实</td>
+            <td>{{ hs.EXPENDITURE }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">负责治理人员</td>
+            <td>{{ hs.PRINCIPAL }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">工时安排</td>
+            <td>{{ hs.PROGRAMMING }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">时限要求</td>
+            <td>{{ hs.TIMELIMITFOR }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">工作要求</td>
+            <td>{{ hs.JOBREQUIREMENT }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">其他事项</td>
+            <td>{{ hs.OTHERBUSINESS }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">方案图片</td>
+            <td class="img-select">
+              <viewer :images="sImgs">
+                <img v-for="item in sImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+              </viewer>
+            </td>
+          </tr>
+        </table>
+      </div>
+
+      <div v-show="pd.STATE ==4 || pd.RECTIFICATIONTYPE=='1'">
+        <div class="level-line" />
+        <div class="level-title">
+          <h1>验收信息</h1>
+        </div>
+        <template v-if="pd.RECTIFICATIONTYPE!='1'">
+          <table v-for="(data) in checkList" :key="data.value" class="table-ui">
+            <tr>
+              <td class="tbg">验收描述</td>
+              <td>{{ data.CHECKDESCR }}</td>
+            </tr>
+            <tr>
+              <td class="tbg">是否合格</td>
+              <td>
+                <template v-if="data.STATUS=='1'">
+                  是
+                </template>
+                <template v-else-if="data.STATUS=='0'">
+                  否
+                </template>
+              </td>
+            </tr>
+            <tr>
+              <td class="tbg">验收部门</td>
+              <td>{{ data.CHECKDEPTNAME }}</td>
+            </tr>
+            <tr>
+              <td class="tbg">验收人</td>
+              <td>{{ data.CHECKORNAME }}</td>
+            </tr>
+
+            <tr>
+              <td class="tbg">验收时间</td>
+              <td>{{ data.CHECK_TIME }}</td>
+            </tr>
+            <tr>
+              <td class="tbg">验收图片</td>
+              <td class="img-select">
+                <viewer :images="data.cImgs">
+                  <img v-for="item in data.cImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+                </viewer>
+              </td>
+            </tr>
+          </table>
+        </template>
+        <template v-if="pd.RECTIFICATIONTYPE=='1'">
+          <table class="table-ui">
+            <tr>
+              <td class="tbg">验收人</td>
+              <td>{{ pd.CHECKORNAME }}</td>
+            </tr>
+          </table>
+        </template>
+      </div>
+      <el-dialog :visible.sync="dialogVisible" :append-to-body="true" title="隐患视频">
+        <div>
+          <video-player
+            ref="videoPlayer"
+            :playsinline="true"
+            :options="playerOptions"
+            style="width: 100%;"
+            class="video-player vjs-custom-skin"/>
+        </div>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="dialogVisible = false">关 闭</el-button>
+        </span>
+      </el-dialog>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button plain type="info" @click="goBack">关闭</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import 'video.js/dist/video-js.css'
+import { videoPlayer } from 'vue-video-player'
+import { create } from 'lodash'
+export default {
+  components: { Pagination, videoPlayer },
+  directives: { waves },
+  props: {
+    visible: {
+      type: Boolean,
+      default: false,
+      required: true
+    },
+    id: {
+      type: String,
+      default: '',
+      required: true
+    }
+  },
+  data() {
+    return {
+      config: config,
+      listLoading: true,
+      findperson: {},
+      chargeperson: {},
+      changeperson: {},
+      ISCHANGE: '',
+      ISEXAMINE: '',
+      examine: {},
+      pd: [],
+      hivideo: [],
+      hImgs: [],
+      repulsecause: [],
+      hImgList: [],
+      rImgs: [],
+      cImgs: [],
+      sImgs: [],
+      hs: [],
+      checkList: [],
+      playerOptions: {
+        playbackRates: [0.5, 1.0, 1.5, 2.0], // 可选的播放速度
+        autoplay: false, // 如果为true,浏览器准备好时开始回放。
+        muted: false, // 默认情况下将会消除任何音频。
+        loop: false, // 是否视频一结束就重新开始。
+        preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
+        language: 'zh-CN',
+        aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
+        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
+        sources: [{
+          type: 'video/mp4', // 类型
+          src: '' // url地址
+        }],
+        poster: '', // 封面地址
+        notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
+        controlBar: {
+          timeDivider: true, // 当前时间和持续时间的分隔符
+          durationDisplay: true, // 显示持续时间
+          remainingTimeDisplay: false, // 是否显示剩余时间功能
+          fullscreenToggle: true // 是否显示全屏按钮
+        }
+      },
+      dialogVisible: false
+    }
+  },
+  created() {
+    this.getData()
+  },
+  methods: {
+    download(filePah) {
+      window.open(this.config.fileUrl + filePah, '_blank')
+    },
+    getData() {
+      requestFN(
+        '/hidden/goEdit',
+        {
+          HIDDEN_ID: this.id
+        }
+      ).then((data) => {
+        this.pd = data.pd							// 参数map
+        this.hs = data.hs
+        this.findperson = data.findperson
+        this.chargeperson = data.chargeperson
+        this.repulsecause = data.repulsecause
+        this.ISCHANGE = data.ISCHANGE
+        this.ISEXAMINE = data.ISEXAMINE
+        this.examine = data.examine
+        this.checkList = data.checkList
+        this.changeperson = data.changeperson
+        /* if (undefined != data.hImgs && data.hImgs != null && data.hImgs.length > 0) {
+          const hImgs = data.hImgs
+          for (let i = 0; i < hImgs.length; i++) {
+            const src = this.config.fileUrl + hImgs[i].FILEPATH
+            this.hImgList.push(src)
+          }
+        }*/
+        this.hImgs = data.hImgs
+        this.rImgs = data.rImgs
+        this.cImgs = data.cImgs
+        this.sImgs = data.sImgs
+        if (this.playerOptions) this.playerOptions.sources[0].src = config.fileUrl + data.hiddenVideo[0].FILEPATH
+        this.$nextTick(() => {
+          if (undefined != data.hImgs && data.hImgs != null && data.hImgs.length > 0) {
+            const hImgs = data.hImgs
+            for (let i = 0; i < hImgs.length; i++) {
+              const src = this.config.fileUrl + hImgs[i].FILEPATH
+              this.hImgList.push(src)
+            }
+          }
+        })
+      }).catch((e) => {
+
+      })
+    },
+    goBack() {
+      // this.$parent.activeName = 'Evaluation'
+      this.$emit('update:visible', false)
+    }
+  }
+}
+</script>
diff --git a/src/views/keyproject_evaluation/branch_hazard_assessment/components/list.vue b/src/views/keyproject_evaluation/branch_hazard_assessment/components/list.vue
new file mode 100644
index 0000000..b6179ed
--- /dev/null
+++ b/src/views/keyproject_evaluation/branch_hazard_assessment/components/list.vue
@@ -0,0 +1,142 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="120px">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="分公司名称">
+            <el-input v-model="searchForm.KEYWORDS" placeholder="请输入关键字"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="隐患考评组类型">
+            <el-select v-model="searchForm.TYPE" style="width: 100%;">
+              <el-option value="1" label="安全类"/>
+              <el-option value="2" label="环保类"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="考评组成员">
+            <el-input v-model="searchForm.USER_NAME" placeholder="请输入关键字"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getList">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column prop="CORP_NAME" label="分公司名称"/>
+      <el-table-column label="隐患考评组类型">
+        <template slot-scope="{row}">
+          {{ row.TYPE === 1 ? '安全类' : '环保类' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="重点工程Ai报警奖惩监管端">
+        <template slot-scope="{row}">
+          {{ row.checked_count3 }} / {{ row.count3 }}
+        </template>
+      </el-table-column>
+      <el-table-column label="重点工程安全环保奖惩监管端">
+        <template slot-scope="{row}">
+          {{ row.checked_count3 }} / {{ row.count3 }}
+        </template>
+      </el-table-column>
+      <el-table-column label="重点工程安全环保奖惩企业端">
+        <template slot-scope="{row}">
+          {{ row.checked_count4 }} / {{ row.count4 }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="CHECK_USER" label="考评组成员"/>
+      <el-table-column label="操作" width="100px">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-view" @click="fnEvaluation(row)">考评</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div/>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {
+        KEYWORDS: '',
+        TYPE: '',
+        USER_NAME: ''
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.TYPE = ''
+      this.searchForm.USER_NAME = ''
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        'keyProject/hiddenevaluationrecord/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    fnEvaluation({ CORPINFO_ID, EVALUATIONCONFIG_ID, TYPE }) {
+      this.$parent.CORPINFO_ID = CORPINFO_ID
+      this.$parent.EVALUATIONCONFIG_ID = EVALUATIONCONFIG_ID
+      this.$parent.TYPE = TYPE
+      this.$parent.activeName = 'Evaluation'
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/branch_hazard_assessment/index.vue b/src/views/keyproject_evaluation/branch_hazard_assessment/index.vue
new file mode 100644
index 0000000..92425b1
--- /dev/null
+++ b/src/views/keyproject_evaluation/branch_hazard_assessment/index.vue
@@ -0,0 +1,30 @@
+<template>
+  <div>
+    <component :is="activeName" />
+  </div>
+</template>
+
+<script>
+import List from './components/list'
+import Evaluation from './components/evaluation'
+import HiddenInfo from './components/hidden_info.vue'
+export default {
+  components: {
+    List,
+    Evaluation,
+    HiddenInfo
+  },
+  data() {
+    return {
+      activeName: 'List',
+      CORPINFO_ID: '',
+      EVALUATIONCONFIG_ID: '',
+      HIDDEN_ID: '',
+      TYPE: ''
+    }
+  }
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/configuration_group/components/list.vue b/src/views/keyproject_evaluation/configuration_group/components/list.vue
new file mode 100644
index 0000000..36d319a
--- /dev/null
+++ b/src/views/keyproject_evaluation/configuration_group/components/list.vue
@@ -0,0 +1,387 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="100px">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="分公司名称">
+            <el-input v-model="searchForm.KEYWORDS" placeholder="请输入关键字"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="考评组状态">
+            <el-select v-model="searchForm.TYPE" style="width: 100%;">
+              <el-option value="1" label="安全类已分配"/>
+              <el-option value="2" label="安全类未分配"/>
+              <el-option value="3" label="环保类已分配"/>
+              <el-option value="4" label="环保类未分配"/>
+              <el-option value="5" label="安全类和环保类已分配"/>
+              <el-option value="6" label="安全类和环保类未分配"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getList">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column prop="CORP_NAME" label="分公司名称"/>
+      <el-table-column label="安全类隐患考评组分配状态">
+        <template slot-scope="{row}">
+          {{ row.TYPES && row.TYPES.indexOf('1') !== -1 ? '已分配' : '未分配' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="AQ_USERS" label="考评组成员"/>
+      <el-table-column prop="FIRE_CHECK_TYPE" label="环保类隐患考评组分配状态">
+        <template slot-scope="{row}">
+          {{ row.TYPES && row.TYPES.indexOf('2') !== -1 ? '已分配' : '未分配' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="HB_USERS" label="考评组成员"/>
+      <el-table-column label="操作" width="480px">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-view" @click="fnViewAssignGroup(row)">查看</el-button>
+          <el-button type="success" icon="el-icon-tickets" @click="fnAssignGroup(row.CORPINFO_ID,'1')">安全类组分配
+          </el-button>
+          <el-button type="success" icon="el-icon-tickets" @click="fnAssignGroup(row.CORPINFO_ID,'2')">环保类组分配
+          </el-button>
+          <el-button type="info" icon="el-icon-tickets" @click="fnChangeRecord(row.CORPINFO_ID)">变更记录
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div/>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+    <el-dialog
+      :visible.sync="assignGroupDialog.visible"
+      :title="assignGroupDialog.type === '1' ? '安全类隐患考评组分配' : '环保类隐患考评组分配'">
+      <el-form ref="assignGroupDialogForm" :model="assignGroupDialog.form" label-width="100px">
+        <el-form-item label="隐患类型">
+          <el-input :value="assignGroupDialog.type === '1' ? '安全类' : '环保类'" disabled/>
+        </el-form-item>
+        <el-row v-for="(item,index) in assignGroupDialog.form.other" :key="index">
+          <el-col :span="12">
+            <el-form-item
+              :prop="'other.' + index + '.DEPARTMENT_ID'"
+              :rules="{
+                required: true, message: '考评部门不能为空', trigger: 'blur'
+              }"
+              label="考评部门">
+              <Treeselect
+                :options="treeData"
+                :normalizer="normalizer"
+                v-model="item.DEPARTMENT_ID"
+                placeholder="请选择考评部门"
+                no-options-text="暂无数据"
+                no-children-text="暂无数据"
+                @select="item.USER_ID = '';getUserList($event,index)"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              :prop="'other.' + index + '.USER_ID'"
+              :rules="{
+                required: true, message: '考评人员不能为空', trigger: 'blur'
+              }"
+              label="考评人员">
+              <el-select :value="item.USER_ID" clearable placeholder="请选择" style="width: 100%;" @change="acceptedByChange($event,index)">
+                <el-option
+                  v-for="item1 in item.userList"
+                  :key="item1.USER_ID"
+                  :label="item1.NAME"
+                  :value="item1.USER_ID"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template slot="footer">
+        <el-button @click="fnAssignGroupDialogChangeShow">关闭</el-button>
+        <el-button type="primary" @click="fnAssignGroupDialogSubmit">确定</el-button>
+      </template>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="viewAssignGroupDialog.visible"
+      title="查看">
+      <table class="table-ui">
+        <tr>
+          <td class="tbg">隐患类型</td>
+          <td>安全类</td>
+        </tr>
+        <tr>
+          <td class="tbg">考评组成员</td>
+          <td>{{ viewAssignGroupDialog.info.AQ_USERS }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患类型</td>
+          <td>环保类</td>
+        </tr>
+        <tr>
+          <td class="tbg">考评组成员</td>
+          <td>{{ viewAssignGroupDialog.info.HB_USERS }}</td>
+        </tr>
+      </table>
+      <template slot="footer">
+        <el-button @click="viewAssignGroupDialog.visible = false">关闭</el-button>
+      </template>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="changeRecordDialog.visible"
+      title="变更记录">
+      <table class="table-ui">
+        <tr v-for="(item,index) in changeRecordDialog.list" :key="index">
+          <td class="tbg">隐患类型</td>
+          <td>{{ item.TYPE === 1 ? '安全类' : '环保类' }}</td>
+          <td class="tbg">变更前</td>
+          <td>{{ item.OLD_USER_NAME }}</td>
+          <td class="tbg">变更后</td>
+          <td>{{ item.NEW_USER_NAME }}</td>
+        </tr>
+      </table>
+      <template slot="footer">
+        <el-button @click="changeRecordDialog.visible = false">关闭</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import { differenceBy, cloneDeep } from 'lodash'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      treeData: [],
+      normalizer(node) {
+        return {
+          id: node.id,
+          label: node.name,
+          children: node.nodes
+        }
+      },
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {},
+      assignGroupDialog: {
+        visible: false,
+        type: '',
+        CORPINFO_ID: '',
+        editType: '',
+        form: {
+          other: [
+            { DEPARTMENT_ID: null, USER_ID: '', userList: [] },
+            { DEPARTMENT_ID: null, USER_ID: '', userList: [] },
+            { DEPARTMENT_ID: null, USER_ID: '', userList: [] },
+            { DEPARTMENT_ID: null, USER_ID: '', userList: [] },
+            { DEPARTMENT_ID: null, USER_ID: '', userList: [] }
+          ]
+        },
+        oldOther: []
+      },
+      viewAssignGroupDialog: {
+        visible: false,
+        info: {
+          AQ_USERS: '',
+          HB_USERS: ''
+        }
+      },
+      changeRecordDialog: {
+        visible: false,
+        list: []
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getTreeData()
+  },
+  methods: {
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.TYPE = ''
+      this.getList()
+    },
+    getUserList(event, index) { // 根据部门获取部门内的人员
+      requestFN(
+        '/user/listAll',
+        {
+          DEPARTMENT_ID: event.id,
+          tm: new Date().getTime()
+        }
+      ).then((data) => {
+        if (this.assignGroupDialog.form.other[index].userList) {
+          this.assignGroupDialog.form.other[index].userList = data.userList
+        } else {
+          this.$set(this.assignGroupDialog.form.other[index], 'userList', data.userList)
+        }
+      }).catch((e) => {
+      })
+    },
+    acceptedByChange(event, index) {
+      let flag = false
+      for (let i = 0; i < this.assignGroupDialog.form.other.length; i++) {
+        if (this.assignGroupDialog.form.other[i].USER_ID === event) {
+          flag = true
+          break
+        }
+      }
+      if (flag) {
+        this.$message.warning('不能选择重复的考评人')
+      } else {
+        this.assignGroupDialog.form.other[index].USER_ID = event
+      }
+    },
+    // 获得部门树
+    getTreeData() {
+      requestFN(
+        '/department/listTree',
+        {}
+      ).then((data) => {
+        this.treeData = this.removeEmptyChildren(JSON.parse(data.zTreeNodes))
+      }).catch((e) => {
+      })
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        'keyProject/evaluationconfig/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    fnAssignGroupDialogChangeShow() {
+      this.assignGroupDialog.visible = !this.assignGroupDialog.visible
+    },
+    fnAssignGroup(CORPINFO_ID, type) {
+      this.assignGroupDialog.CORPINFO_ID = CORPINFO_ID
+      this.assignGroupDialog.type = type
+      this.fnAssignGroupDialogChangeShow()
+      this.$nextTick(() => {
+        this.$refs.assignGroupDialogForm.resetFields()
+      })
+      requestFN(
+        'keyProject/evaluationconfig/goEdit',
+        {
+          CORPINFO_ID,
+          TYPE: type
+        }
+      ).then((data) => {
+        if (data.result === 'success') {
+          if (data.varlist.length === 0) {
+            this.assignGroupDialog.editType = 'add'
+          } else {
+            this.assignGroupDialog.editType = 'edit'
+            this.assignGroupDialog.form.other = cloneDeep(data.varlist)
+            this.assignGroupDialog.oldOther = cloneDeep(data.varlist)
+            for (let i = 0; i < data.varlist.length; i++) {
+              this.getUserList({ id: data.varlist[i].DEPARTMENT_ID }, i)
+            }
+          }
+        }
+      }).catch((e) => {
+      })
+    },
+    fnAssignGroupDialogSubmit() {
+      this.$refs.assignGroupDialogForm.validate(valid => {
+        if (valid) {
+          if (this.assignGroupDialog.editType === 'add') {
+            requestFN(
+              'keyProject/evaluationconfig/add',
+              {
+                CORPINFO_ID: this.assignGroupDialog.CORPINFO_ID,
+                TYPE: this.assignGroupDialog.type,
+                users: JSON.stringify(this.assignGroupDialog.form.other)
+              }
+            ).then((data) => {
+              if (data.result === 'success') {
+                this.$message.success('保存成功')
+                this.fnAssignGroupDialogChangeShow()
+                this.getList()
+              }
+            }).catch((e) => {
+            })
+          } else {
+            const changeUsers = differenceBy(this.assignGroupDialog.form.other, this.assignGroupDialog.oldOther, 'USER_ID')
+            console.log(changeUsers)
+            requestFN(
+              'keyProject/evaluationconfig/edit',
+              {
+                CORPINFO_ID: this.assignGroupDialog.CORPINFO_ID,
+                TYPE: this.assignGroupDialog.type,
+                changeUsers: JSON.stringify(changeUsers)
+              }
+            ).then((data) => {
+              if (data.result === 'success') {
+                this.$message.success('保存成功')
+                this.fnAssignGroupDialogChangeShow()
+                this.getList()
+              }
+            }).catch((e) => {
+            })
+          }
+        } else {
+          this.$message.warning('请补全必填项')
+        }
+      })
+    },
+    fnViewAssignGroup(row) {
+      this.viewAssignGroupDialog.info = row
+      this.viewAssignGroupDialog.visible = true
+    },
+    fnChangeRecord(CORPINFO_ID) {
+      requestFN(
+        'keyProject/evaluationconfig/changeLogs',
+        {
+          CORPINFO_ID
+        }
+      ).then((data) => {
+        console.log(data.varlist)
+        this.changeRecordDialog.list = data.varlist
+        this.changeRecordDialog.visible = true
+      }).catch((e) => {
+      })
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/configuration_group/index.vue b/src/views/keyproject_evaluation/configuration_group/index.vue
new file mode 100644
index 0000000..4b783ef
--- /dev/null
+++ b/src/views/keyproject_evaluation/configuration_group/index.vue
@@ -0,0 +1,22 @@
+<template>
+  <div>
+    <component :is="activeName" />
+  </div>
+</template>
+
+<script>
+import List from './components/list'
+export default {
+  components: {
+    List: List
+  },
+  data() {
+    return {
+      activeName: 'List'
+    }
+  }
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_info.vue b/src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_info.vue
new file mode 100644
index 0000000..2cbea49
--- /dev/null
+++ b/src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_info.vue
@@ -0,0 +1,486 @@
+<template>
+  <div class="app-container">
+    <div class="level-title">
+      <h1>隐患信息</h1>
+    </div>
+    <div class="mb-20">
+      <table class="table-ui">
+        <tr>
+          <td class="tbg">隐患来源</td>
+          <template v-if="pd.SOURCE=='1'">
+            <td colspan="3">隐患快报</td>
+          </template>
+          <template v-else-if="pd.SOURCE=='2'">
+            <td colspan="3">清单排查</td>
+          </template>
+          <template v-else-if="pd.SOURCE=='3'">
+            <td colspan="3">清单排查</td>
+          </template>
+          <template v-else-if="pd.SOURCE=='4'">
+            <td colspan="3">安全环保检查(监管端)</td>
+          </template>
+          <template v-else-if="pd.SOURCE=='5'">
+            <td colspan="3">安全环保检查(企业端)</td>
+          </template>
+        </tr>
+        <!--<tr>
+          <td class="tbg">检查内容</td>
+          <td>{{ pd.CHECK_CONTENT }}</td>
+        </tr>-->
+        <tr>
+          <td class="tbg">隐患描述</td>
+          <td colspan="3">{{ pd.HIDDENDESCR }}</td>
+        </tr>
+        <tr v-if="pd.SOURCE=='2'">
+          <td class="tbg">风险点(单元)</td>
+          <td>{{ pd.RISK_UNIT }}</td>
+        </tr>
+        <tr v-if="pd.SOURCE=='2'">
+          <td class="tbg">辨识部位</td>
+          <td>{{ pd.IDENTIFICATION }}</td>
+        </tr>
+        <tr v-if="pd.SOURCE=='2'">
+          <td class="tbg">存在风险</td>
+          <td>{{ pd.RISK_DESCR }}</td>
+        </tr>
+        <tr v-if="pd.SOURCE=='2'">
+          <td class="tbg">风险分级</td>
+          <td>{{ pd.LEVEL }}</td>
+        </tr>
+        <tr v-if="pd.SOURCE=='2'">
+          <td class="tbg">检查内容</td>
+          <td>{{ pd.CHECK_CONTENT }}</td>
+        </tr>
+        <tr/><tr>
+          <td class="tbg">隐患级别</td>
+          <td colspan="3">{{ pd.HIDDENLEVELNAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患类型</td>
+          <td colspan="3">{{ pd.HIDDENTYPENAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患状态</td>
+          <td colspan="3">
+            <template v-if="pd.STATE=='1'">
+              未整改
+            </template>
+            <template v-else-if="pd.STATE=='2'">
+              已整改
+            </template>
+            <template v-else-if="pd.STATE=='3'">
+              已整改
+            </template>
+            <template v-else-if="pd.STATE=='4'">
+              已验收
+            </template>
+            <template v-else-if="pd.STATE=='5'">
+              忽略隐患
+            </template>
+            <template v-else-if="pd.STATE=='6'">
+              重大隐患
+            </template>
+            <template v-else-if="pd.STATE=='7'">
+              待处理的特殊隐患
+            </template>
+            <template v-else-if="pd.STATE=='8'">
+              已处理的特殊隐患
+            </template>
+            <template v-else-if="pd.STATE=='-1'">
+              已超期
+            </template>
+            <template v-else-if="pd.STATE=='-2'">
+              待确认
+            </template>
+            <template v-else-if="pd.STATE=='10'">
+              验收打回
+            </template>
+          </td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患部位</td>
+          <!--          <td>{{ pd.hregionName }}{{ pd.HIDDENPART }}</td>-->
+          <td v-if="pd.hregionName" colspan="3">{{ pd.hregionName }}</td>
+          <td v-else colspan="3">{{ pd.HIDDENPART }}</td>
+        </tr>
+        <!--<tr>
+          <td class="tbg">隐患类型2</td>
+          <td>{{ pd.HIDDENTYPENAME2 }}</td>
+        </tr>-->
+        <tr>
+          <td class="tbg">隐患上报位置</td>
+          <td colspan="3">经度:{{ pd.LONGITUDE }} , 纬度:{{ pd.LATITUDE }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患位置描述</td>
+          <td colspan="3">{{ pd.POSITIONDESC }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患图片</td>
+          <td ref="hImgs" colspan="3" class="img-select">
+            <viewer :images="hImgs">
+              <img v-for="item in hImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+            </viewer>
+          </td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患发现人</td>
+          <td colspan="3">{{ pd.CREATORNAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患发现时间</td>
+          <td colspan="3">{{ pd.DISCOVERYTIME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">整改类型</td>
+          <td colspan="3">
+            <template v-if="pd.RECTIFICATIONTYPE=='1'">
+              立即整改
+            </template>
+            <template v-else-if="pd.RECTIFICATIONTYPE=='2'">
+              限期整改
+            </template>
+          </td>
+        </tr>
+        <tr>
+          <td class="tbg">整改负责部门</td>
+          <td colspan="3">{{ pd.editDeptName ?pd.editDeptName :pd.RECTIFICATIONDEPTNAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">整改负责人</td>
+          <td colspan="3">{{ pd.RECTIFICATIONORNAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">是否相关方</td>
+          <td colspan="3">{{ pd.ISRELEVANT=='1'?'是':'否' }}</td>
+        </tr>
+        <tr v-if="playerOptions.sources[0].src">
+          <td class="tbg">隐患视频</td>
+          <td colspan="3">
+            <span v-if="playerOptions.sources[0].src" style="color: #4395ff;cursor: pointer" @click="dialogVisible = true">隐患视频</span>
+          </td>
+        </tr>
+        <tr v-if="pd.RECTIFICATIONTYPE=='2'">
+          <td class="tbg">整改期限</td>
+          <td colspan="3">{{ pd.RECTIFICATIONDEADLINE }}</td>
+        </tr>
+        <tr/>
+        <!--        <tr>-->
+        <!--          <td class="tbg">整改完成期限</td>-->
+        <!--          <td colspan="3">{{ pd.RECTIFICATIONDEADLINE }}</td>-->
+        <!--        </tr>-->
+        <!--        <tr>-->
+        <!--          <td class="tbg">隐患确认人</td>-->
+        <!--          <td colspan="3">{{ pd.conUserName }}</td>-->
+        <!--        </tr>-->
+        <template v-if="repulsecause">
+          <tr v-for="item in repulsecause" :key="item.USER_ID">
+            <td class="tbg">打回原因</td>
+            <td>{{ item.REPULSE_CAUSE }}</td>
+            <td class="tbg">打回时间</td>
+            <td>{{ item.OPERATTIME }}</td>
+          </tr>
+        </template>
+      </table>
+    </div>
+    <div>
+      <div class="level-title">
+        <h1>确认信息</h1>
+      </div>
+      <table class="table-ui">
+        <tr>
+          <td class="tbg">隐患级别</td>
+          <td >{{ pd.HIDDENLEVELNAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">整改负责人</td>
+          <td >{{ pd.RECTIFICATIONORNAME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">整改完成期限</td>
+          <td >{{ pd.RECTIFICATIONDEADLINE }}</td>
+        </tr>
+        <tr >
+          <td class="tbg">隐患确认人</td>
+          <td>{{ pd.conUserName }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">隐患确认时间</td>
+          <td colspan="3">{{ pd.CONFIRM_TIME }}</td>
+        </tr>
+      </table>
+      <div v-show="pd.STATE>=2 && pd.STATE <16">
+        <div class="level-line" />
+        <div class="level-title">
+          <h1>整改信息</h1>
+        </div>
+        <table class="table-ui">
+          <tr>
+            <td class="tbg">整改描述</td>
+            <td>{{ pd.RECTIFYDESCR }}</td>
+          </tr>
+
+          <tr>
+            <td class="tbg">整改部门</td>
+            <td>{{ pd.RECTIFICATIONDEPTNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改人</td>
+            <td>{{ pd.RECTIFICATIONORNAME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改时间</td>
+            <td>{{ pd.RECTIFICATIONTIME }}</td>
+          </tr>
+          <tr>
+            <td class="tbg">投入资金</td>
+            <td>{{ pd.INVESTMENT_FUNDS }}元</td>
+          </tr>
+          <tr>
+            <td class="tbg">整改后图片</td>
+            <td class="img-select">
+              <viewer :images="rImgs">
+                <img v-for="item in rImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+              </viewer>
+            </td>
+          </tr>
+          <tr>
+            <td class="tbg">整改方案</td>
+            <td v-if="pd.HAVESCHEME==0">无</td>
+            <td v-else-if="pd.HAVESCHEME==1">有</td>
+            <td v-else/>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">排查日期</td>
+            <td>{{ hs.SCREENINGDATE }}</td>
+          </tr>
+          <!--        <tr v-if="hs && pd.HAVESCHEME==1">-->
+          <!--          <td class="tbg">隐患清单</td>-->
+          <!--          <td>{{ hs.LISTNAME }}</td>-->
+          <!--        </tr>-->
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">治理标准要求</td>
+            <td>{{ hs.GOVERNSTANDARDS }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">治理方法</td>
+            <td>{{ hs.GOVERNMETHOD }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">经费和物资的落实</td>
+            <td>{{ hs.EXPENDITURE }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">负责治理人员</td>
+            <td>{{ hs.PRINCIPAL }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">工时安排</td>
+            <td>{{ hs.PROGRAMMING }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">时限要求</td>
+            <td>{{ hs.TIMELIMITFOR }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">工作要求</td>
+            <td>{{ hs.JOBREQUIREMENT }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">其他事项</td>
+            <td>{{ hs.OTHERBUSINESS }}</td>
+          </tr>
+          <tr v-if="hs && pd.HAVESCHEME==1">
+            <td class="tbg">方案图片</td>
+            <td class="img-select">
+              <viewer :images="sImgs">
+                <img v-for="item in sImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+              </viewer>
+            </td>
+          </tr>
+        </table>
+      </div>
+      <div v-show="pd.STATE ==4 || pd.RECTIFICATIONTYPE=='1'">
+        <div class="level-line" />
+        <div class="level-title">
+          <h1>验收信息</h1>
+        </div>
+        <template v-if="pd.RECTIFICATIONTYPE!='1'">
+          <table v-for="(data) in checkList" :key="data.value" class="table-ui">
+            <tr>
+              <td class="tbg">验收描述</td>
+              <td>{{ data.CHECKDESCR }}</td>
+            </tr>
+            <tr>
+              <td class="tbg">是否合格</td>
+              <td>
+                <template v-if="data.STATUS=='1'">
+                  是
+                </template>
+                <template v-else-if="data.STATUS=='0'">
+                  否
+                </template>
+              </td>
+            </tr>
+            <tr>
+              <td class="tbg">验收部门</td>
+              <td>{{ data.CHECKDEPTNAME }}</td>
+            </tr>
+            <tr>
+              <td class="tbg">验收人</td>
+              <td>{{ data.CHECKORNAME }}</td>
+            </tr>
+
+            <tr>
+              <td class="tbg">验收时间</td>
+              <td>{{ data.CHECK_TIME }}</td>
+            </tr>
+            <tr>
+              <td class="tbg">验收图片</td>
+              <td class="img-select">
+                <viewer :images="data.cImgs">
+                  <img v-for="item in data.cImgs" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="100" height="100">
+                </viewer>
+              </td>
+            </tr>
+          </table>
+        </template>
+        <template v-if="pd.RECTIFICATIONTYPE=='1'">
+          <table class="table-ui">
+            <tr>
+              <td class="tbg">验收人</td>
+              <td>{{ pd.CHECKORNAME }}</td>
+            </tr>
+          </table>
+        </template>
+      </div>
+    </div>
+    <div class="ui-height" />
+    <div class="ui-foot" style="margin-top: 20px">
+      <el-button plain type="info" @click="goBack">返 回</el-button>
+    </div>
+    <el-dialog :visible.sync="dialogVisible" title="隐患视频">
+      <div>
+        <video-player
+          ref="videoPlayer"
+          :playsinline="true"
+          :options="playerOptions"
+          style="width: 100%;"
+          class="video-player vjs-custom-skin"/>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">关 闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import 'video.js/dist/video-js.css'
+import { videoPlayer } from 'vue-video-player'
+export default {
+  components: { Pagination, videoPlayer },
+  directives: { waves },
+  data() {
+    return {
+      config: config,
+      listLoading: true,
+      findperson: {},
+      chargeperson: {},
+      changeperson: {},
+      ISCHANGE: '',
+      ISEXAMINE: '',
+      examine: {},
+      pd: [],
+      hivideo: [],
+      hImgs: [],
+      repulsecause: [],
+      hImgList: [],
+      rImgs: [],
+      cImgs: [],
+      sImgs: [],
+      hs: [],
+      checkList: [],
+      playerOptions: {
+        playbackRates: [0.5, 1.0, 1.5, 2.0], // 可选的播放速度
+        autoplay: false, // 如果为true,浏览器准备好时开始回放。
+        muted: false, // 默认情况下将会消除任何音频。
+        loop: false, // 是否视频一结束就重新开始。
+        preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
+        language: 'zh-CN',
+        aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
+        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
+        sources: [{
+          type: 'video/mp4', // 类型
+          src: '' // url地址
+        }],
+        poster: '', // 封面地址
+        notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
+        controlBar: {
+          timeDivider: true, // 当前时间和持续时间的分隔符
+          durationDisplay: true, // 显示持续时间
+          remainingTimeDisplay: false, // 是否显示剩余时间功能
+          fullscreenToggle: true // 是否显示全屏按钮
+        }
+      },
+      dialogVisible: false
+    }
+  },
+  async created() {
+    this.getData()
+  },
+  methods: {
+    download(filePah) {
+      window.open(this.config.fileUrl + filePah, '_blank')
+    },
+    getData() {
+      requestFN(
+        '/hidden/goEdit',
+        {
+          HIDDEN_ID: this.$parent.HIDDEN_ID
+        }
+      ).then((data) => {
+        this.pd = data.pd							// 参数map
+        this.hs = data.hs
+        this.findperson = data.findperson
+        this.chargeperson = data.chargeperson
+        this.repulsecause = data.repulsecause
+        this.ISCHANGE = data.ISCHANGE
+        this.ISEXAMINE = data.ISEXAMINE
+        this.examine = data.examine
+        this.checkList = data.checkList
+        this.changeperson = data.changeperson
+        /* if (undefined != data.hImgs && data.hImgs != null && data.hImgs.length > 0) {
+          const hImgs = data.hImgs
+          for (let i = 0; i < hImgs.length; i++) {
+            const src = this.config.fileUrl + hImgs[i].FILEPATH
+            this.hImgList.push(src)
+          }
+        }*/
+        this.hImgs = data.hImgs
+        this.rImgs = data.rImgs
+        this.cImgs = data.cImgs
+        this.sImgs = data.sImgs
+        if (this.playerOptions) this.playerOptions.sources[0].src = config.fileUrl + data.hiddenVideo[0].FILEPATH
+        this.$nextTick(() => {
+          if (undefined != data.hImgs && data.hImgs != null && data.hImgs.length > 0) {
+            const hImgs = data.hImgs
+            for (let i = 0; i < hImgs.length; i++) {
+              const src = this.config.fileUrl + hImgs[i].FILEPATH
+              this.hImgList.push(src)
+            }
+          }
+        })
+      }).catch((e) => {
+
+      })
+    },
+    goBack() {
+      this.$parent.activeName = 'HiddenList'
+    }
+  }
+}
+</script>
diff --git a/src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_list.vue b/src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_list.vue
new file mode 100644
index 0000000..2e11935
--- /dev/null
+++ b/src/views/keyproject_evaluation/personnel_evaluation_status/components/hidden_list.vue
@@ -0,0 +1,285 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="100px">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="隐患来源">
+            <el-select v-model="searchForm.SOURCE" style="width: 100%;">
+              <el-option value="1" label="隐患快报"/>
+              <el-option value="2" label="清单排查"/>
+              <!--              <el-option value="3" label="清单排查"/>-->
+              <el-option value="4" label="安全环保检查(监管端)"/>
+              <el-option value="5" label="安全环保检查(企业端)"/>
+              <el-option value="6" label="消防点检"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="发现部门">
+            <Treeselect
+              :options="treeData"
+              :normalizer="normalizer"
+              v-model="searchForm.DEPARTMENT_ID"
+              placeholder="请选择发现部门"
+              no-options-text="暂无数据"
+              no-children-text="暂无数据"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="隐患发现人">
+            <el-input v-model="searchForm.KEYWORDS"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="隐患类型">
+            <Treeselect
+              :options="hiddenTypeList"
+              :normalizer="normalizer"
+              v-model="searchForm.HIDDENTYPE"
+              placeholder="请选择隐患类型"
+              no-options-text="暂无数据"
+              no-children-text="暂无数据"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="兑换时间">
+            <el-date-picker
+              v-model="searchForm.dates"
+              format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              style="width: 100%;"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getQuery">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column label="隐患来源">
+        <template slot-scope="{row}">
+          <span v-if="row.SOURCE=='1'">
+            隐患快报
+          </span>
+          <span v-else-if="row.SOURCE=='2'">
+            清单排查
+          </span>
+          <span v-else-if="row.SOURCE=='3'">
+            清单排查
+          </span>
+          <span v-else-if="row.SOURCE=='4'">
+            安全环保检查(监管端)
+          </span>
+          <span v-else-if="row.SOURCE=='5'">
+            安全环保检查(企业端)
+          </span>
+          <span v-else-if="row.SOURCE=='6'">
+            消防点检
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="HIDDENDESCR" label="隐患描述"/>
+      <el-table-column prop="CREATTIME" label="隐患发现时间"/>
+      <el-table-column prop="CREATOR_NAME" label="隐患发现人"/>
+      <el-table-column label="隐患状态">已验收</el-table-column>
+      <el-table-column prop="CHECKOR_NAME" label="隐患验收人">
+        <template slot-scope="{row}">
+          <span v-if="row.RECTIFICATIONTYPE=='2'">
+            {{ row.YQ_CHECKOR_NAME }}
+          </span>
+          <span v-else>
+            {{ row.CHECKOR_NAME }}
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="CHECK_USER" label="考评组成员"/>
+      <el-table-column label="兑换状态">
+        <template slot-scope="{row}">
+          {{ row.EVALUATIONSCOREEXCHANGE_ID ? '已兑换' : '未兑换' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" width="260px">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-view" @click="fnDetailsOfHiddenDangers(row.HIDDEN_ID)">查看隐患详情</el-button>
+          <el-button type="success" icon="el-icon-view" @click="fnAssessmentDetails(row.HIDDEN_ID)">考评详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button icon="el-icon-arrow-left" @click="goBack">返回</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+    <el-dialog :visible.sync="evaluationDialog.visible" title="考评详情">
+      <table class="table-ui">
+        <template v-for="item in evaluationDialog.list">
+          <tr :key="item.CONFIG_USER_ID">
+            <td class="tbg">考评人员</td>
+            <td>{{ item.USER_NAME }}</td>
+            <td class="tbg">是否符合</td>
+            <td>
+              <span v-if="item.RESULT === 1">符合</span>
+              <span v-if="item.RESULT === 2">不符合</span>
+              <span v-if="!item.RESULT">未考评</span>
+            </td>
+          </tr>
+          <tr v-if="item.RESULT === 2" :key="item.CONFIG_USER_ID">
+            <td class="tbg">不符合原因</td>
+            <td colspan="3">{{ item.DESCR }}</td>
+          </tr>
+        </template>
+      </table>
+      <template slot="footer">
+        <el-button @click="evaluationDialog.visible = false">关闭</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      treeData: [],
+      hiddenTypeList: [],
+      normalizer(node) {
+        return {
+          id: node.id,
+          label: node.name,
+          children: node.nodes
+        }
+      },
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {
+        KEYWORDS: '',
+        SOURCE: '',
+        DEPARTMENT_ID: null,
+        HIDDENTYPE: null,
+        dates: []
+      },
+      evaluationDialog: {
+        visible: false,
+        list: []
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getTreeData()
+  },
+  methods: {
+    // 搜索
+    getQuery() {
+      this.getList()
+    },
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.SOURCE = ''
+      this.searchForm.DEPARTMENT_ID = null
+      this.searchForm.HIDDENTYPE = null
+      this.searchForm.dates = []
+      this.getList()
+    },
+    // 获得部门树
+    getTreeData() {
+      requestFN(
+        '/corpDepartment/listTreeManageAndCorp',
+        {}
+      ).then((data) => {
+        const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
+        this.treeData = this.removeEmptyChildren(treeData)
+      }).catch((e) => {
+      })
+      requestFN(
+        '/dictionaries/listSelectTree',
+        {
+          DICTIONARIES_ID: '3babc15144444bdc8d763d0af2bdfff6'
+        }
+      ).then((data) => {
+        this.hiddenTypeList = this.removeEmptyChildren(JSON.parse(data.zTreeNodes))
+      })
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/evaluationscore/exchangeHiddenList?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm,
+          START_TIME: this.searchForm.dates[0] && this.searchForm.dates[0] + ' 00:00:00',
+          END_TIME: this.searchForm.dates[1] && this.searchForm.dates[1] + ' 23:59:59',
+          EVALUATIONSCOREEXCHANGE_ID: this.$parent.EVALUATIONSCOREEXCHANGE_ID,
+          USER_ID: this.$parent.USER_ID,
+          CORPINFO_ID: this.$parent.CORPINFO_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    fnAssessmentDetails(HIDDEN_ID) {
+      requestFN(
+        '/evaluationscore/getHiddenEvaluation',
+        {
+          HIDDEN_ID
+        }
+      ).then((data) => {
+        this.evaluationDialog.list = data.varList
+        this.evaluationDialog.visible = true
+      }).catch((e) => {
+      })
+    },
+    fnDetailsOfHiddenDangers(HIDDEN_ID) {
+      this.$parent.HIDDEN_ID = HIDDEN_ID
+      this.$parent.activeName = 'HiddenInfo'
+    },
+    goBack() {
+      this.$parent.activeName = this.$parent.HiddenListEntrance
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/personnel_evaluation_status/components/list.vue b/src/views/keyproject_evaluation/personnel_evaluation_status/components/list.vue
new file mode 100644
index 0000000..097822a
--- /dev/null
+++ b/src/views/keyproject_evaluation/personnel_evaluation_status/components/list.vue
@@ -0,0 +1,155 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="100px">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="考核部门">
+            <Treeselect
+              :options="treeData"
+              :normalizer="normalizer"
+              v-model="searchForm.DEPARTMENT_ID"
+              placeholder="请选择考核部门"
+              no-options-text="暂无数据"
+              no-children-text="暂无数据"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="考核部门人员">
+            <el-input v-model="searchForm.KEYWORDS" placeholder="请输入关键字"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getList">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column prop="CORP_NAME" label="单位名称"/>
+      <el-table-column label="完成考评隐患数">
+        <template slot-scope="{row}">
+          {{ row.checked_count1 + row.checked_count2 + row.checked_count3 + row.checked_count4 + row.checked_count5 }}
+        </template>
+      </el-table-column>
+      <el-table-column label="待考评隐患数">
+        <template slot-scope="{row}">
+          {{ (row.count1 + row.count2 + row.count3 + row.count4 + row.count5) - (row.checked_count1 + row.checked_count2 + row.checked_count3 + row.checked_count4 + row.checked_count5) }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="SCORE_USERS" label="涉及奖励人数"/>
+      <el-table-column label="奖励兑换情况">
+        <template slot-scope="{row}">
+          {{ row.USERD_SCORE }} / {{ row.TOTAL_SCORE }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="AQ_USERS" label="安全类隐患考评组成员"/>
+      <el-table-column prop="HB_USERS" label="环保类隐患考评组成员"/>
+      <el-table-column label="操作" width="100px">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-view" @click="fnView(row.CORPINFO_ID)">查看</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div/>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      treeData: [],
+      normalizer(node) {
+        return {
+          id: node.id,
+          label: node.name,
+          children: node.nodes
+        }
+      },
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {
+        KEYWORDS: '',
+        TYPE: '',
+        DEPARTMENT_ID: null
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getTreeData()
+  },
+  methods: {
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.TYPE = ''
+      this.searchForm.DEPARTMENT_ID = null
+      this.getList()
+    },
+    // 获得部门树
+    getTreeData() {
+      requestFN(
+        '/department/listTree',
+        {}
+      ).then((data) => {
+        this.treeData = this.removeEmptyChildren(JSON.parse(data.zTreeNodes))
+      }).catch((e) => {
+      })
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/keyProject/evaluationscore/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    fnView(CORPINFO_ID) {
+      this.$parent.CORPINFO_ID = CORPINFO_ID
+      this.$parent.activeName = 'PersonnelList'
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/personnel_evaluation_status/components/personnel_list.vue b/src/views/keyproject_evaluation/personnel_evaluation_status/components/personnel_list.vue
new file mode 100644
index 0000000..729e52b
--- /dev/null
+++ b/src/views/keyproject_evaluation/personnel_evaluation_status/components/personnel_list.vue
@@ -0,0 +1,253 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="80px">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="考核部门">
+            <Treeselect
+              :options="treeData"
+              :normalizer="normalizer"
+              v-model="searchForm.DEPARTMENT_ID"
+              placeholder="请选择考核部门"
+              no-options-text="暂无数据"
+              no-children-text="暂无数据"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="姓名">
+            <el-input v-model="searchForm.KEYWORDS" placeholder="请输入关键字"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="时间">
+            <el-date-picker
+              v-model="searchForm.dates"
+              format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              style="width: 100%;"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getQuery">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column prop="USERNAME" label="用户名"/>
+      <el-table-column prop="NAME" label="姓名"/>
+      <el-table-column prop="DEPTMENT_NAME" label="部门"/>
+      <el-table-column prop="PORT_NAME" label="岗位"/>
+      <el-table-column prop="TOTAL_SCORE" label="奖励总得分"/>
+      <el-table-column prop="USERD_SCORE" label="已兑换分数"/>
+      <el-table-column label="未兑换奖励数">
+        <template slot-scope="{row}">
+          {{ row.TOTAL_SCORE - row.USERD_SCORE }}
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" width="240px">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-view" @click="fnRedemptionRecords(row.USER_ID)">兑换记录</el-button>
+          <el-button type="success" icon="el-icon-view" @click="fnAssessmentDetails(row.USER_ID)">考评详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button icon="el-icon-arrow-left" @click="goBack">返回</el-button>
+        <el-button type="primary" icon="el-icon-check" @click="batchRedemption">批量兑换</el-button>
+        <el-button type="success" icon="el-icon-folder-checked" @click="redeemAll">全选兑换</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      treeData: [],
+      normalizer(node) {
+        return {
+          id: node.id,
+          label: node.name,
+          children: node.nodes
+        }
+      },
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {
+        KEYWORDS: '',
+        DEPARTMENT_ID: null,
+        dates: []
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getTreeData()
+  },
+  methods: {
+    getRowKey(row) {
+      return row.USER_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.DEPARTMENT_ID = null
+      this.searchForm.dates = []
+      this.getList()
+    },
+    // 获得部门树
+    getTreeData() {
+      requestFN(
+        '/corpDepartment/listTreeManageAndCorp',
+        {}
+      ).then((data) => {
+        const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
+        for (let i = 0; i < treeData.length; i++) {
+          if (treeData[i].id === this.$parent.CORPINFO_ID) {
+            this.treeData = this.removeEmptyChildren([treeData[i]])
+            break
+          }
+        }
+      }).catch((e) => {
+      })
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/evaluationscore/userList?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm,
+          START_TIME: this.searchForm.dates[0] && this.searchForm.dates[0] + ' 00:00:00',
+          END_TIME: this.searchForm.dates[1] && this.searchForm.dates[1] + ' 23:59:59',
+          CORPINFO_ID: this.$parent.CORPINFO_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+
+    batchRedemption() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData.length === 0) {
+        this.$message.warning('请选择需要兑换的人员')
+        return
+      }
+      this.$confirm('确定要兑换吗?', '提示', {
+        type: 'warning'
+      }).then(() => {
+        const user_ids = _selectData.map(item => item.USER_ID).join(',')
+        requestFN(
+          '/evaluationscore/exchange',
+          {
+            user_ids,
+            CORPINFO_ID: this.$parent.CORPINFO_ID,
+            START_TIME: this.searchForm.dates[0] && this.searchForm.dates[0] + ' 00:00:00',
+            END_TIME: this.searchForm.dates[1] && this.searchForm.dates[1] + ' 23:59:59'
+          }
+        ).then((data) => {
+          if (data.result === 'success') {
+            this.$message.success('兑换成功')
+            this.getQuery()
+          }
+        }).catch((e) => {
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消兑换'
+        })
+      })
+    },
+
+    redeemAll() {
+      this.$confirm('确定要兑换所有人得分吗?', '提示', {
+        type: 'warning'
+      }).then(() => {
+        requestFN(
+          '/evaluationscore/exchange',
+          {
+            CORPINFO_ID: this.$parent.CORPINFO_ID,
+            START_TIME: this.searchForm.dates[0] && this.searchForm.dates[0] + ' 00:00:00',
+            END_TIME: this.searchForm.dates[1] && this.searchForm.dates[1] + ' 23:59:59'
+          }
+        ).then((data) => {
+          if (data.result === 'success') {
+            this.$message.success('兑换成功')
+            this.getQuery()
+          }
+        }).catch((e) => {
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消兑换'
+        })
+      })
+    },
+    fnRedemptionRecords(USER_ID) {
+      this.$parent.USER_ID = USER_ID
+      this.$parent.activeName = 'RedemptionRecords'
+    },
+    fnAssessmentDetails(USER_ID) {
+      this.$parent.USER_ID = USER_ID
+      this.$parent.EVALUATIONSCOREEXCHANGE_ID = ''
+      this.$parent.activeName = 'HiddenList'
+      this.$parent.HiddenListEntrance = 'PersonnelList'
+    },
+    goBack() {
+      this.$parent.activeName = 'List'
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/personnel_evaluation_status/components/redemption_records.vue b/src/views/keyproject_evaluation/personnel_evaluation_status/components/redemption_records.vue
new file mode 100644
index 0000000..176ca48
--- /dev/null
+++ b/src/views/keyproject_evaluation/personnel_evaluation_status/components/redemption_records.vue
@@ -0,0 +1,127 @@
+<template>
+  <div class="app-container">
+    <el-form :model="searchForm" label-width="80px">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="兑换时间">
+            <el-date-picker
+              v-model="searchForm.dates"
+              format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              style="width: 100%;"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getQuery">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" native-type="reset" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column type="index" label="序号" width="55" align="center"/>
+      <el-table-column prop="CREATTIME" label="兑换时间"/>
+      <el-table-column prop="CREATOR" label="兑换操作人员"/>
+      <el-table-column prop="SCORE" label="兑换隐患数"/>
+      <el-table-column prop="SCORE" label="兑换积分"/>
+      <el-table-column prop="LAST_SCORE" label="剩余积分数"/>
+      <el-table-column label="操作" width="120px">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-view" @click="fnDetailsOfHiddenDangers(row.EVALUATIONSCOREEXCHANGE_ID)">隐患详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button icon="el-icon-arrow-left" @click="goBack">返回</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {
+        dates: []
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    // 搜索
+    getQuery() {
+      this.getList()
+    },
+    goKeyReset() {
+      this.searchForm.dates = []
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/evaluationscore/exchangeList?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm,
+          START_TIME: this.searchForm.dates[0] && this.searchForm.dates[0] + ' 00:00:00',
+          END_TIME: this.searchForm.dates[1] && this.searchForm.dates[1] + ' 23:59:59',
+          USER_ID: this.$parent.USER_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    fnDetailsOfHiddenDangers(EVALUATIONSCOREEXCHANGE_ID) {
+      this.$parent.EVALUATIONSCOREEXCHANGE_ID = EVALUATIONSCOREEXCHANGE_ID
+      this.$parent.activeName = 'HiddenList'
+      this.$parent.HiddenListEntrance = 'RedemptionRecords'
+    },
+    goBack() {
+      this.$parent.activeName = 'PersonnelList'
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/personnel_evaluation_status/index.vue b/src/views/keyproject_evaluation/personnel_evaluation_status/index.vue
new file mode 100644
index 0000000..c327f3d
--- /dev/null
+++ b/src/views/keyproject_evaluation/personnel_evaluation_status/index.vue
@@ -0,0 +1,35 @@
+<template>
+  <div>
+    <component :is="activeName" />
+  </div>
+</template>
+
+<script>
+import List from './components/list'
+import PersonnelList from './components/personnel_list.vue'
+import RedemptionRecords from './components/redemption_records.vue'
+import HiddenList from './components/hidden_list.vue'
+import HiddenInfo from './components/hidden_info.vue'
+export default {
+  components: {
+    List,
+    PersonnelList,
+    RedemptionRecords,
+    HiddenList,
+    HiddenInfo
+  },
+  data() {
+    return {
+      activeName: 'List',
+      CORPINFO_ID: '',
+      USER_ID: '',
+      EVALUATIONSCOREEXCHANGE_ID: '',
+      HIDDEN_ID: '',
+      HiddenListEntrance: ''
+    }
+  }
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/tongji/components/list.vue b/src/views/keyproject_evaluation/tongji/components/list.vue
new file mode 100644
index 0000000..1066986
--- /dev/null
+++ b/src/views/keyproject_evaluation/tongji/components/list.vue
@@ -0,0 +1,109 @@
+<template>
+  <div class="app-container">
+    <el-table
+      v-loading="listLoading"
+      :data="varList"
+      :span-method="objectSpanMethod"
+      border
+      tooltip-effect="dark"
+      style="width: 100%">
+      <el-table-column prop="CORP_NAME" label="分公司名称" >
+        <template slot-scope="{row}">
+          <span class="link-type" @click="fnEvaluation(row)">{{ row.CORP_NAME }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="HIDDENTYPE2" label="隐患考评组类型"/>
+      <el-table-column prop="hiddenCount" label="发现隐患数"/>
+      <el-table-column prop="hiddenYanshouCount" label="已验收隐患数"/>
+      <el-table-column prop="hegeCount" label="已评审合格数"/>
+      <el-table-column prop="buhegeCount" label="已评审不合格数"/>
+      <el-table-column label="待评审数量">
+        <template slot-scope="{row}">
+          <span>{{ row.hiddenYanshouCount - (row.hegeCount+row.buhegeCount) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="yiduihuan" label="已兑换积分"/>
+      <el-table-column prop="weiduihuan" label="未兑换积分"/>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+export default {
+  components: { Pagination, Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      total: 0,
+      varList: [],
+      KEYWORDS: '',
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      listLoading: false,	// 加载状态
+      searchForm: {
+        KEYWORDS: '',
+        TYPE: '',
+        USER_NAME: ''
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    goKeyReset() {
+      this.searchForm.KEYWORDS = ''
+      this.searchForm.TYPE = ''
+      this.searchForm.USER_NAME = ''
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/keyProject/evaluationTongji/corpInfoTongjiList?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          ...this.searchForm
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) {
+        if (rowIndex % 2 === 0) {
+          return {
+            rowspan: 2,
+            colspan: 1
+          }
+        } else {
+          return {
+            rowspan: 0,
+            colspan: 0
+          }
+        }
+      }
+    },
+    fnEvaluation(row) {
+      this.$parent.CORPINFO_ID = row.CORPINFO_ID
+      this.$parent.activeName = 'PersonnelList'
+    }
+  }
+}
+
+</script>
+
+<style lang="sass" scoped>
+</style>
diff --git a/src/views/keyproject_evaluation/tongji/index.vue b/src/views/keyproject_evaluation/tongji/index.vue
new file mode 100644
index 0000000..79acfd3
--- /dev/null
+++ b/src/views/keyproject_evaluation/tongji/index.vue
@@ -0,0 +1,32 @@
+<template>
+  <div>
+    <component :is="activeName" />
+  </div>
+</template>
+
+<script>
+import List from './components/list'
+import PersonnelList from '../personnel_evaluation_status/components/personnel_list.vue'
+import RedemptionRecords from '../personnel_evaluation_status/components/redemption_records.vue'
+import HiddenList from '../personnel_evaluation_status/components/hidden_list.vue'
+import HiddenInfo from '../personnel_evaluation_status/components/hidden_info.vue'
+
+export default {
+  components: {
+    List, PersonnelList, RedemptionRecords, HiddenList, HiddenInfo
+  },
+  data() {
+    return {
+      activeName: 'List',
+      CORPINFO_ID: '',
+      USER_ID: '',
+      EVALUATIONSCOREEXCHANGE_ID: '',
+      HIDDEN_ID: '',
+      HiddenListEntrance: ''
+    }
+  }
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/keyprojects/hidden/index.vue b/src/views/keyprojects/hidden/index.vue
index c5341aa..957f15e 100644
--- a/src/views/keyprojects/hidden/index.vue
+++ b/src/views/keyprojects/hidden/index.vue
@@ -1,7 +1,8 @@
 <template>
   <div>
     <OutSourced v-show="activeName=='OutSourced'" ref="outSourced" active-name="List"/>
-    <component :is="activeName"/>
+    <List v-if="activeName=='List'" />
+    <Info v-if="activeName=='Info'"/>
   </div>
 </template>