guarantee-lsq 2 лет назад
Родитель
Сommit
ac9e1f8154

+ 127 - 0
src/api/hidden/hidden-danger.js

@@ -0,0 +1,127 @@
+import { axios } from '@/utils/request'
+import { stringify } from 'qs'
+
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getHiddenDangerPage (parameter) {
+  return axios({
+    url: '/hidden/dangers/page?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * add func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function addHiddenDanger (parameter) {
+  return axios({
+    url: '/hidden/dangers',
+    method: 'POST',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function updateHiddenDanger (parameter) {
+  return axios({
+    url: '/hidden/dangers/' + parameter.id,
+    method: 'PUT',
+    data: parameter
+  })
+}
+
+/**
+ * fetch single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function fetchHiddenDanger (parameter) {
+  return axios({
+    url: '/hidden/dangers/' + parameter.id,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * query list func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function queryHiddenDanger (parameter) {
+  return axios({
+    url: '/hidden/dangers?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * delete batch func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteHiddenDangers (parameter) {
+  return axios({
+    url: '/hidden/dangers',
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * delete single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteHiddenDanger (parameter) {
+  return axios({
+    url: '/hidden/dangers/' + parameter.id,
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+  * @returns {*}
+ */
+export function exportHiddenDanger (parameter) {
+  return axios({
+    url: '/hidden/dangers/export?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    responseType: 'blob'
+  })
+}

+ 2 - 0
src/router/generator-platform-routers.js

@@ -269,6 +269,8 @@ const constantRouterComponents = {
   'MyStart': () => import('@/views/activiti/task/MyStart'), // 我的申请
   'ActivitiUserModel': () => import('@/views/activiti/user-model/ActivitiUserModel'), // 流程审批节点设置
   'DesignForm': () => import('@/views/design/designForm/DesignForm'),
+  // 隐患管理
+  'HiddenDanger': () => import('@/views/hidden/hidden/HiddenDanger'), // 隐患任务
   // 调拨申请
   'SbAllocateApply': () => import('@/views/sb/allocate-apply/ProjectSbAllocateApply'),
   'GroupToProjectSbAllocateApply': () => import('@/views/sb/allocate-apply/GroupToProjectSbAllocateApply'),

+ 307 - 0
src/views/hidden/hidden/HiddenDanger.vue

@@ -0,0 +1,307 @@
+<template>
+  <a-card :bordered='false'>
+    <div v-show='visible'>
+      <div class='table-page-search-wrapper' @keyup.enter='handleEnter'>
+        <a-form layout='inline'>
+          <a-row :gutter='48' v-show='advanced'>
+            <a-col :md='6' :sm='24'>
+              <a-form-item label='关键字'>
+                <a-input v-model='queryParam.keyword' placeholder='请输入名称/类型名称' />
+              </a-form-item>
+            </a-col>
+          </a-row>
+          <a-row :gutter='48'>
+            <a-col :md='24 || 24' :sm='24' style='text-align: right'>
+              <span class='table-page-search-submitButtons'>
+                <a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
+                <a-button style='margin-left: 8px' @click='resetSearchForm'>重置</a-button>
+                <a @click='()=>{ this.advanced = !this.advanced}' style='margin-left: 8px'>
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'" />
+                </a>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class='table-operator' style='margin-bottom: 8px;'>
+        <a-row>
+          <a-col :md='16'>
+            <a-button v-if="$auth('hidden-dangers-add')" type='primary' icon='plus' @click='handleAdd()'>新增</a-button>
+            <a-button style='margin-left: 8px' v-if="$auth('hidden-dangers-export')" type='primary' icon='download'
+                      @click='doExport'>导出
+            </a-button>
+            <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('hidden-dangers-del')">
+              <a-menu slot='overlay'>
+                <a-popconfirm title='是否要删除所选数据?' @confirm='batchDelete()'>
+                  <a-menu-item key='1'>
+                    <a-icon type='delete' />
+                    <a>删除</a></a-menu-item>
+                </a-popconfirm>
+              </a-menu>
+              <a-button style='margin-left: 8px'>
+                批量操作
+                <a-icon type='down' />
+              </a-button>
+            </a-dropdown>
+          </a-col>
+        </a-row>
+      </div>
+
+      <s-table
+        ref='table'
+        size='default'
+        rowKey='id'
+        :columns='columns'
+        :data='loadData'
+        :alert='options.alert'
+        :rowSelection='options.rowSelection'
+        showPagination='auto'
+      >
+        <span slot='action' slot-scope='record'>
+          <template>
+            <a @click='handleView(record)'>查看</a>
+            <operation-button
+              v-if="$auth('hidden-hiddens-edit')" @click='handleEdit(record)'
+            >修改</operation-button>
+            <operation-button
+              v-if="$auth('hidden-hiddens-del')"
+              :type='2'
+              title='是否要删除该条数据?'
+              @confirm='batchDelete(record.id)'>删除</operation-button>
+          </template>
+        </span>
+      </s-table>
+    </div>
+    <base-form ref='baseModal' @ok='handleOk' />
+    <detail ref='detailModal' @ok='handleOk' />
+  </a-card>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import BaseForm from './modules/BaseForm'
+import Detail from './modules/Detail'
+import { getHiddenDangerPage, deleteHiddenDangers, fetchHiddenDanger, exportHiddenDanger } from '@/api/hidden/hidden-danger'
+
+export default {
+  name: 'HiddenDanger',
+  components: {
+    STable,
+    Ellipsis,
+    BaseForm,
+    Detail
+  },
+  data() {
+    return {
+      advanced: false,
+      visible: true,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '设备',
+          dataIndex: 'sbId'
+        },
+        {
+          title: '设备位号',
+          dataIndex: 'positionNo'
+        },
+        {
+          title: '检查区域',
+          dataIndex: 'positionId'
+        },
+        {
+          title: '存在问题',
+          dataIndex: 'existsQuestion'
+        },
+        {
+          title: '可能风险',
+          dataIndex: 'hiddenRisk'
+        },
+        {
+          title: '整改建议',
+          dataIndex: 'opition'
+        },
+        {
+          title: '整改责任人',
+          dataIndex: 'dutyUser'
+        },
+        {
+          title: '属地负责人',
+          dataIndex: 'areaUser'
+        },
+        {
+          title: '备注',
+          dataIndex: 'remark'
+        },
+        {
+          title: '添加人',
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '完成状态 closed,delay,on going',
+          dataIndex: 'status'
+        },
+        {
+          title: '专业类型 仪表 电气 机械',
+          dataIndex: 'professorType'
+        },
+        {
+          title: '检查级别  公司级-部门组织-专业自查',
+          dataIndex: 'checkLevel'
+        },
+        {
+          title: '整改时限',
+          dataIndex: 'requireTime'
+        },
+        {
+          title: '添加时间',
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getHiddenDangerPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: {
+          show: true, clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created() {
+    // 下拉框map
+    this.tableOption()
+  },
+  methods: {
+    tableOption() {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: {
+            show: true, clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    batchDelete(id) {
+      let ids = []
+      if (this.BaseTool.String.isBlank(id)) {
+        const length = this.selectedRows.length
+        if (length === 0) {
+          this.$message.info('请选择要删除的记录')
+          return
+        }
+        ids = this.selectedRows.map(item => item.id)
+      } else {
+        ids = [id]
+      }
+      deleteHiddenDangers(ids).then(res => {
+        this.$message.info('删除成功')
+        this.handleOk()
+        this.$refs.table.clearSelected()
+      })
+    },
+    handleAdd() {
+      this.visible = false
+      const modal = this.$refs.baseModal
+      modal.base()
+    },
+    handleEdit(record) {
+      this.visible = false
+      fetchHiddenDanger({ id: record.id }).then(res => {
+        const modal = this.$refs.baseModal
+        modal.base(res.data)
+      })
+    },
+    handleView(record) {
+      this.visible = false
+      fetchHiddenDanger({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    },
+    handleOk(values) {
+      this.visible = true
+      this.$refs.table.refresh()
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm() {
+      this.queryParam = {}
+      this.$refs.table.refresh(true)
+    },
+    doExport() {
+      const parameter = {
+        ...this.queryParam
+      }
+      exportHiddenDanger(parameter).then(file => {
+        this.BaseTool.Util.downLoadExportExcel(file)
+      })
+    },
+    handleEnter() {
+      this.$refs.table.refresh(true)
+    }
+  }
+}
+</script>

+ 264 - 0
src/views/hidden/hidden/modules/BaseForm.vue

@@ -0,0 +1,264 @@
+<template>
+  <a-card :bordered='false' v-show='visible' class='card' :title='modalTitle'>
+    <a-row :gutter='48' slot='extra'>
+      <a-col :md='48' :sm='48'>
+        <span class='table-page-search-submitButtons' style='float: right'>
+          <a-button :loading='confirmLoading' type='primary' @click='save()'>保存</a-button>
+          <a-button style='margin-left: 8px' type='default' @click='handleCancel()'>返回</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <a-form :form='form'>
+
+      <a-form-item v-show='false'>
+        <a-input v-decorator="['id']" type='hidden' />
+      </a-form-item>
+
+      <row-list :col='2'>
+        <row-item>
+
+          <a-form-item
+            label='设备'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['sbId', {rules: [{required: true, message: '设备不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='设备位号'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['positionNo', {rules: [{required: true, message: '设备位号不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='检查区域'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['positionId', {rules: [{required: true, message: '检查区域不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='存在问题'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='可能风险'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='整改建议'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='整改责任人'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['dutyUser', {rules: [{required: true, message: '整改责任人不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='属地负责人'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['areaUser', {rules: [{required: true, message: '属地负责人不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='备注'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['remark', {rules: [{required: true, message: '备注不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='完成状态 closed,delay,on going'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input-number
+              style='width: 100%'
+              :min='0'
+              :formatter='BaseTool.Amount.formatter'
+              :parser='BaseTool.Amount.parser'
+              v-decorator="['status', {rules: [{required: true, message: '完成状态 closed,delay,on going不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='专业类型 仪表 电气 机械'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input-number
+              style='width: 100%'
+              :min='0'
+              :formatter='BaseTool.Amount.formatter'
+              :parser='BaseTool.Amount.parser'
+              v-decorator="['professorType', {rules: [{required: true, message: '专业类型 仪表 电气 机械不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='检查级别  公司级-部门组织-专业自查'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input-number
+              style='width: 100%'
+              :min='0'
+              :formatter='BaseTool.Amount.formatter'
+              :parser='BaseTool.Amount.parser'
+              v-decorator="['checkLevel', {rules: [{required: true, message: '检查级别  公司级-部门组织-专业自查不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='整改时限'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-date-picker
+              showTime
+              style='width: 100%'
+              :format='BaseTool.Date.PICKER_NORM_DATE_PATTERN'
+              v-decorator="['requireTime', {rules: [{required: true, message: '整改时限不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+      </row-list>
+    </a-form>
+  </a-card>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import { addHiddenDanger, updateHiddenDanger } from '@/api/hidden/hidden-danger'
+
+export default {
+  name: 'BaseHiddenDanger',
+  data() {
+    return {
+      confirmLoading: false,
+      modalTitle: null,
+      form: this.$form.createForm(this),
+      visible: false
+      // 下拉框map
+    }
+  },
+  props: {},
+  created() {
+    // 下拉框map
+  },
+  methods: {
+    base(record) {
+      this.visible = true
+      // 如果是空标识添加
+      if (this.BaseTool.Object.isBlank(record)) {
+        this.modalTitle = '添加'
+        return
+      }
+      this.modalTitle = '编辑'
+      const { form: { setFieldsValue } } = this
+      // 日期处理
+      record.requireTime = this.BaseTool.Moment(record.requireTime, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id',
+          'sbId',
+          'positionNo',
+          'positionId',
+          'existsQuestion',
+          'hiddenRisk',
+          'opition',
+          'dutyUser',
+          'areaUser',
+          'remark',
+          'status',
+          'professorType',
+          'checkLevel',
+          'requireTime'
+        ])))
+      })
+    },
+    save() {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        // 日期处理
+        values.requireTime = this.BaseTool.Date.formatter(values.requireTime, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+        if (this.BaseTool.String.isBlank(values.id)) {
+          addHiddenDanger(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+            this.confirmLoading = false
+          })
+        } else {
+          updateHiddenDanger(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+            this.confirmLoading = false
+          })
+        }
+      })
+    },
+    handleCancel(values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.form.resetFields()
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        this.$emit('ok', values)
+      } else {
+        this.$emit('ok')
+      }
+    }
+  }
+}
+</script>

+ 88 - 0
src/views/hidden/hidden/modules/Detail.vue

@@ -0,0 +1,88 @@
+<template>
+  <a-card :bordered='false' v-show='visible' class='card' :title='modalTitle'>
+    <a-row :gutter='48' slot='extra'>
+      <a-col :md='48' :sm='48'>
+        <span class='table-page-search-submitButtons' style='float: right'>
+          <a-button style='margin-left: 8px' type='default' @click='handleCancel()'>返回</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <detail-list title='' :col='2'>
+      <detail-list-item term='设备'>{{ model.sbId }}</detail-list-item>
+      <detail-list-item term='设备位号'>{{ model.positionNo }}</detail-list-item>
+      <detail-list-item term='检查区域'>{{ model.positionId }}</detail-list-item>
+      <detail-list-item term='存在问题'>{{ model.existsQuestion }}</detail-list-item>
+      <detail-list-item term='可能风险'>{{ model.hiddenRisk }}</detail-list-item>
+      <detail-list-item term='整改建议'>{{ model.opition }}</detail-list-item>
+      <detail-list-item term='整改责任人'>{{ model.dutyUser }}</detail-list-item>
+      <detail-list-item term='属地负责人'>{{ model.areaUser }}</detail-list-item>
+      <detail-list-item term='备注'>{{ model.remark }}</detail-list-item>
+      <detail-list-item term='添加人ID'>{{ model.createdUserId }}</detail-list-item>
+      <detail-list-item term='修改人ID'>{{ model.updateUserId }}</detail-list-item>
+      <detail-list-item term='修改人'>{{ model.updateUserName }}</detail-list-item>
+      <detail-list-item term='完成状态 closed,delay,on going'>{{ model.status }}</detail-list-item>
+      <detail-list-item term='专业类型 仪表 电气 机械'>{{ model.professorType }}</detail-list-item>
+      <detail-list-item term='检查级别  公司级-部门组织-专业自查'>{{ model.checkLevel }}</detail-list-item>
+      <detail-list-item term='整改时限'>{{ model.requireTime }}</detail-list-item>
+      <detail-list-item term='修改时间'>{{ model.updateTime }}</detail-list-item>
+    </detail-list>
+  </a-card>
+</template>
+
+<script>
+import DetailList from '@/components/tools/DetailList'
+
+const DetailListItem = DetailList.Item
+
+export default {
+  name: 'HiddenDangerDetail',
+  components: {
+    DetailList,
+    DetailListItem
+  },
+  data() {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      // 下拉框map
+      model: {
+        'sbId': null,
+        'positionNo': null,
+        'positionId': null,
+        'existsQuestion': null,
+        'hiddenRisk': null,
+        'opition': null,
+        'dutyUser': null,
+        'areaUser': null,
+        'remark': null,
+        'createdUserId': null,
+        'updateUserId': null,
+        'updateUserName': null,
+        'status': null,
+        'professorType': null,
+        'checkLevel': null,
+        'requireTime': null,
+        'updateTime': null
+      }
+    }
+  },
+  created() {
+    // 下拉框map
+
+  },
+  methods: {
+    base(record) {
+      this.visible = true
+      this.modalTitle = '详情'
+      this.model = record
+    },
+    handleCancel() {
+      this.visible = false
+      this.confirmLoading = false
+      this.$emit('ok')
+    }
+  }
+}
+</script>

+ 336 - 0
src/views/hidden/hidden/modules/HiddenDangerSelectModal.vue

@@ -0,0 +1,336 @@
+<template>
+  <a-modal
+    :title='modalTitle'
+    :width='1000'
+    :visible='visible'
+    :confirmLoading='confirmLoading'
+    class='ant-modal2'
+    @cancel='handleCancel'
+  >
+    <a-card :bordered='false'>
+      <div class='table-page-search-wrapper'>
+        <a-form layout='inline'>
+          <a-row :gutter='48'>
+            <a-col :md='6' :sm='24'>
+              <a-form-item label='关键字'>
+                <a-input v-model='queryParam.keyword' placeholder='请输入名称/类型名称' />
+              </a-form-item>
+            </a-col>
+            <a-col :md='6 || 24' :sm='24'>
+              <span class='table-page-search-submitButtons'>
+                <a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
+                <a-button style='margin-left: 8px' @click='resetSearchForm'>重置</a-button>
+                <a @click='()=>{ this.advanced = !this.advanced}' style='margin-left: 8px'>
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'" />
+                </a>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class='table-operator'>
+      </div>
+
+      <s-table
+        ref='table'
+        size='default'
+        rowKey='id'
+        :columns='columns'
+        :data='loadData'
+        :alert='options.alert'
+        :customRow='options.customRow'
+        :rowSelection='options.rowSelection'
+        showPagination='auto'
+      >
+        <span slot='action' slot-scope='record1'>
+          <template>
+            <a @click='handleView(record1)'>查看</a>
+          </template>
+        </span>
+      </s-table>
+      <detail ref='detailModal' />
+    </a-card>
+    <template slot='footer'>
+      <a-button :loading='confirmLoading' type='primary' @click='handleCancel()'>取消</a-button>
+      <a-button :loading='confirmLoading' type='primary' @click='handleSelect()'>确定</a-button>
+    </template>
+  </a-modal>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import Detail from './Detail'
+import { getHiddenDangerPage, fetchHiddenDanger } from '@/api/hidden/hidden-danger'
+
+export default {
+  name: 'HiddenDangerSelectModal',
+  components: {
+    STable,
+    Ellipsis,
+    Detail
+  },
+  props: {
+    type: {
+      type: String,
+      default: 'radio'
+    },
+    selectedRowKey: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    selectedRow: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    }
+  },
+  data() {
+    return {
+      advanced: false,
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      record: null,
+      // 查询参数
+      queryParam: {},
+      extraQueryParam: {},
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '设备',
+          dataIndex: 'sbId'
+        },
+        {
+          title: '设备位号',
+          dataIndex: 'positionNo'
+        },
+        {
+          title: '检查区域',
+          dataIndex: 'positionId'
+        },
+        {
+          title: '存在问题',
+          dataIndex: 'existsQuestion'
+        },
+        {
+          title: '可能风险',
+          dataIndex: 'hiddenRisk'
+        },
+        {
+          title: '整改建议',
+          dataIndex: 'opition'
+        },
+        {
+          title: '整改责任人',
+          dataIndex: 'dutyUser'
+        },
+        {
+          title: '属地负责人',
+          dataIndex: 'areaUser'
+        },
+        {
+          title: '备注',
+          dataIndex: 'remark'
+        },
+        {
+          title: '添加人',
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '完成状态 closed,delay,on going',
+          dataIndex: 'status',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '专业类型 仪表 电气 机械',
+          dataIndex: 'professorType',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '检查级别  公司级-部门组织-专业自查',
+          dataIndex: 'checkLevel',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '整改时限',
+          dataIndex: 'requireTime'
+        },
+        {
+          title: '添加时间',
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          ...this.extraQueryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getHiddenDangerPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: {
+          show: true, clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false,
+      isCreated: false
+    }
+  },
+  created() {
+    // 下拉框map
+  },
+  methods: {
+    tableOption() {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: {
+            show: true, clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            type: this.type,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          },
+          customRow: (record) => {
+            return {
+              on: { // 事件
+                click: (event) => { // 点击行
+                  // 选择对象
+                  this.mySelect([record.id], [record])
+                },
+                dblclick: (event) => {
+                  this.mySelect([record.id], [record])
+                  this.handleSelect()
+                }
+              }
+            }
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    handleView(record) {
+      fetchHiddenDanger({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm() {
+      this.queryParam = {}
+      this.$refs.table.refresh(true)
+    },
+    base(record, queryParam = {}) {
+      this.visible = true
+      this.modalTitle = '选择信息'
+      this.extraQueryParam = queryParam
+      this.record = record
+      if (this.isCreated) {
+        this.$refs.table.clearSelected()
+        this.options.rowSelection.type = this.type
+        this.handleOk()
+      } else {
+        this.tableOption()
+        this.isCreated = true
+      }
+    },
+    handleCancel() {
+      this.visible = false
+      this.confirmLoading = false
+    },
+    handleSelect() {
+      if (this.selectedRowKeys.length === 0) {
+        this.$message.warn('请至少选择一项信息')
+      } else {
+        this.confirmLoading = true
+        this.$emit('selected', this.record, this.selectedRowKeys, this.selectedRows)
+        this.confirmLoading = false
+        this.visible = false
+      }
+    },
+    mySelect(selectedRowKeys, selectedRows) {
+      if (this.type === 'radio') {
+        this.$refs.table.updateSelect(selectedRowKeys, selectedRows)
+        this.$refs.table.rowSelection.onChange(selectedRowKeys, selectedRows)
+      } else {
+        let mySelectedRowKeys
+        let mySelectedRows = this.selectedRows.filter(item => item.id !== selectedRowKeys[0])
+        if (this.selectedRowKeys.includes(selectedRowKeys[0])) {
+          mySelectedRowKeys = this.selectedRowKeys.filter(item => item !== selectedRowKeys[0])
+        } else {
+          mySelectedRowKeys = [...selectedRowKeys, ...this.selectedRowKeys]
+          mySelectedRows = [...mySelectedRows, ...selectedRows]
+        }
+        this.$refs.table.updateSelect(mySelectedRowKeys, mySelectedRows)
+        this.$refs.table.rowSelection.onChange(mySelectedRowKeys, mySelectedRows)
+      }
+
+    }
+  }
+}
+</script>