<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="400px">
        <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>
          <el-button
            v-if="USER_ID=='1'"
            type="danger"
            icon="el-icon-view"
            @click="fnDelvaluation(row)">重置考评
          </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>{{ item.CREATTIME ? item.CREATTIME : "暂未考评" }}</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(
        '/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) => {
          })
        }
      })
    },
    fnDelvaluation(row) {
      this.$confirm('确定要重置选中的评审记录吗?', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.listLoading = true
        requestFN(
          '/hiddenevaluationrecord/deleteEvaluation',
          {
            HIDDEN_ID: row.HIDDEN_ID,
            USER_ID: row.CREATOR
          }
        ).then((data) => {
          this.listLoading = false
          if (data.result === 'success') {
            this.$message.success('删除成功')
            this.getList()
          } else {
            this.$message({
              message: data.message,
              type: 'error'
            })
          }
        }).catch((e) => {
        })
      }).catch(() => {
      })
    }
  }
}

</script>

<style lang="sass" scoped>
</style>