<template>
|
<div class="app-container">
|
<div style="display: flex;justify-content: space-between">
|
<el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" >
|
<!-- <el-form-item>-->
|
<!-- <el-button-->
|
<!-- type="primary"-->
|
<!-- plain-->
|
<!-- icon="Plus"-->
|
<!-- @click="openDialog('add',{})"-->
|
<!-- >新增</el-button>-->
|
<!-- </el-form-item>-->
|
<el-form-item label="隐患名称:" >
|
<el-input v-model.trim="queryParams.hazardName" placeholder="隐患名称"></el-input>
|
</el-form-item>
|
<el-form-item label="隐患来源:" >
|
<el-select v-model="queryParams.hazardSource" placeholder="请选择" clearable>
|
<el-option
|
v-for="item in sourceList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="隐患等级:" >
|
<el-select v-model="queryParams.hazardLevel" placeholder="请选择" clearable>
|
<el-option
|
v-for="item in levelList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="整改部门/研究组:" >
|
<el-select v-model="queryParams.reformDeptId" placeholder="请选择" clearable>
|
<el-option
|
v-for="item in deptList"
|
:key="item.deptId"
|
:label="item.deptName"
|
:value="item.deptId">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="整改人:" >
|
<el-select v-model="queryParams.reformUserId" placeholder="请选择" clearable>
|
<el-option
|
v-for="item in userList"
|
:key="item.userId"
|
:label="item.userName"
|
:value="item.userId">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="隐患状态:" >
|
<el-select v-model="queryParams.state" placeholder="请选择" clearable>
|
<el-option :key="0" label="未整改" :value="0"></el-option>
|
<el-option :key="1" label="已整改" :value="1"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item >
|
<el-button type="primary" @click="getList">查询</el-button>
|
<el-button type="primary" plain @click="reset">重置</el-button>
|
<!-- <el-button type="primary">导出</el-button>-->
|
</el-form-item>
|
</el-form>
|
</div>
|
<!-- 表格数据 -->
|
<el-table v-loading="loading" :data="dataList" :border="true">
|
<el-table-column type="index" label="序号"></el-table-column>
|
<el-table-column prop="hazardName" align="center" label="隐患名称"/>
|
<el-table-column prop="hazardSource" align="center" label="隐患来源">
|
<template #default="scope">
|
{{getSourceName(scope.row.hazardSource)}}
|
</template>
|
</el-table-column>
|
<el-table-column prop="hazardLevel" align="center" label="隐患等级">
|
<template #default="scope">
|
{{getLevelName(scope.row.hazardLevel)}}
|
</template>
|
</el-table-column>
|
<el-table-column prop="hazardPlace" align="center" label="隐患地点"/>
|
<el-table-column prop="hazardRoom" align="center" label="房间号"/>
|
<el-table-column prop="reformDeptName" align="center" label="整改部门/研究组"/>
|
<el-table-column prop="reformUserName" align="center" label="整改人"/>
|
<el-table-column prop="updateBy" align="center" label="隐患等记人"/>
|
<el-table-column prop="updateTime" align="center" label="隐患等记时间"/>
|
<el-table-column prop="hazardLevel" align="center" label="整改状态">
|
<template #default="scope">
|
<el-tag v-if="scope.row.state == 1" type="primary">已整改</el-tag>
|
<el-tag v-else type="danger">未整改</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column label="操作" align="center">
|
<template #default="scope">
|
<el-button link type="primary" v-if="isAuthority || scope.row.reformUserId == userStore.id" @click="openDialog('rectify',scope.row)">整改</el-button>
|
<el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
|
<pagination
|
v-show="total > 0"
|
:total="total"
|
v-model:page="queryParams.pageNum"
|
v-model:limit="queryParams.pageSize"
|
@pagination="getList"
|
/>
|
<form-dialog ref="dialogRef" :config="formConfig" :data-loader="dataLoader" :api="api" @submit="handleSubmit"></form-dialog>
|
</div>
|
</template>
|
|
<script setup>
|
import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
|
import {ElMessage, ElMessageBox} from "element-plus";
|
import Cookies from "js-cookie";
|
import FormDialog from "@/views/components/formDialog"
|
import useUserStore from "@/store/modules/user";
|
import {generateWordDocument} from "@/utils/exportWord";
|
import {listDept} from "@/api/system/dept";
|
import {listUser} from "@/api/system/user";
|
import {delDailySafetyInspect, getDailySafetyInspectList, saveDailySafetyInspect} from "@/api/saftyCheck";
|
import {delHazard, getHazardList, saveHazard, updateHazard} from "@/api/hazardMng";
|
const { proxy } = getCurrentInstance();
|
const loading = ref(false);
|
const dialogRef = ref();
|
const state = reactive({
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
hazardName: '',
|
hazardSource: null,
|
hazardLevel: null,
|
reformDeptId: null,
|
reformUserId: null,
|
state: null
|
},
|
dataList: [],
|
deptList: [],
|
userList: [],
|
sourceList: [
|
{
|
id: 1,
|
name: '日常排查'
|
},
|
{
|
id: 2,
|
name: '综合性排查'
|
},
|
{
|
id: 3,
|
name: '专业性排查'
|
},
|
{
|
id: 4,
|
name: '季节性排查'
|
},
|
{
|
id: 5,
|
name: '重点时段及节假日前排查'
|
},
|
{
|
id: 6,
|
name: '外聘专家诊断式排查'
|
},
|
{
|
id: 7,
|
name: '其他'
|
}
|
],
|
levelList: [
|
{
|
id: 1,
|
name: '一般隐患'
|
},
|
{
|
id: 2,
|
name: '重大隐患'
|
}
|
],
|
total: 0,
|
formConfig: {
|
formItems: [
|
{
|
type: 'divider',
|
content: '隐患信息'
|
},
|
{
|
label: '隐患名称',
|
prop: 'hazardName',
|
type: 'text',
|
disabled: true,
|
rules: [{ required: true, message: '请输入名称', trigger: 'blur' }]
|
},
|
{
|
label: '隐患描述',
|
prop: 'hazardDescription',
|
type: 'textarea',
|
disabled: true,
|
autosize: { minRows: 3 },
|
rules: [{ required: true, message: '请输入描述', trigger: 'blur' }]
|
},
|
{
|
label: '隐患来源',
|
prop: 'hazardSource',
|
type: 'select',
|
disabled: true,
|
rules: [{ required: true, message: '请选择', trigger: 'blur' }],
|
options: () => {
|
return state.sourceList.map(source => ({
|
value: source.id,
|
label: source.name
|
}))
|
}
|
},
|
{
|
label: '隐患等级',
|
prop: 'hazardLevel',
|
type: 'select',
|
disabled: true,
|
rules: [{ required: true, message: '请选择', trigger: 'blur' }],
|
options: () => {
|
return state.levelList.map(level => ({
|
value: level.id,
|
label: level.name
|
}))
|
}
|
},
|
{
|
label: '隐患地点',
|
prop: 'hazardPlace',
|
type: 'text',
|
disabled: true,
|
rules: [{ required: true, message: '请输入地点', trigger: 'blur' }]
|
},
|
{
|
label: '房间号',
|
prop: 'hazardRoom',
|
type: 'text',
|
disabled: true,
|
rules: [{ required: true, message: '请输入房间号', trigger: 'blur' }]
|
},
|
{
|
label: '整改部门/研究组',
|
prop: 'reformDeptId',
|
type: 'select',
|
disabled: true,
|
rules: [{ required: true, message: '请选择部门', trigger: 'blur' }],
|
options: () => {
|
return state.deptList.map(dept => ({
|
value: dept.deptId,
|
label: dept.deptName
|
}))
|
},
|
changeEvent: 'getUserList'
|
},
|
{
|
label: '整改人',
|
prop: 'reformUserId',
|
type: 'select',
|
disabled: true,
|
rules: [{ required: true, message: '请选择人员', trigger: 'change' }],
|
options: () => {
|
return state.userList.map(user => ({
|
value: user.userId,
|
label: user.userName
|
}))
|
}
|
},
|
{
|
label: '隐患图片',
|
prop: 'hazardPics',
|
type: 'upload',
|
uploadType: 'img',
|
required: true,
|
limit: 3,
|
maxSize: 5,
|
disabled: true,
|
accept: 'image/*',
|
tip: '支持上传支持图片格式,尺寸小于5M,最多可上传3份'
|
},
|
{
|
type: 'divider',
|
content: '整改信息'
|
},
|
{
|
label: '整改时间',
|
prop: 'reformPeriod',
|
type: 'date',
|
dateType: 'date',
|
valueFormat: 'YYYY-MM-DD',
|
rules: [{ required: true, message: '请选择整改时间', trigger: 'blur' }]
|
},
|
{
|
label: '原因分析',
|
prop: 'reasonAnalysis',
|
type: 'textarea',
|
autosize: { minRows: 3 },
|
rules: [{ required: true, message: '请输入原因分析', trigger: 'blur' }]
|
},
|
{
|
label: '整改措施',
|
prop: 'rectificationMeasures',
|
type: 'textarea',
|
autosize: { minRows: 3 },
|
rules: [{ required: true, message: '请输入整改措施', trigger: 'blur' }]
|
},
|
{
|
label: '整改图片',
|
prop: 'reformPics',
|
type: 'upload',
|
uploadType: 'img',
|
required: true,
|
limit: 3,
|
maxSize: 5,
|
accept: 'image/*',
|
tip: '支持上传支持图片格式,尺寸小于5M,最多可上传3份'
|
}
|
]
|
},
|
dataLoader: {
|
async getUserList(reformDeptId) {
|
const res = await listUser({deptId: reformDeptId})
|
return res.code === 200 ? res.rows : []
|
}
|
},
|
api: {},
|
isAuthority: false
|
});
|
|
const { queryParams, total, dataList, deptList, userList, formConfig, dataLoader, api, sourceList, levelList, isAuthority } = toRefs(state)
|
const userStore = useUserStore()
|
onMounted(async ()=>{
|
await getList()
|
await getDeptList()
|
await getUserList()
|
if(userStore.roles.includes('admin') || userStore.roles.includes('sys_admin')){
|
state.isAuthority = true
|
}else{
|
state.isAuthority = false
|
}
|
})
|
|
onUnmounted(()=>{
|
|
})
|
|
function getDeptList() {
|
listDept({}).then(response => {
|
state.deptList = response.data
|
});
|
}
|
|
function getUserList() {
|
listUser().then(res => {
|
state.userList = res.rows;
|
state.total = res.total;
|
})
|
};
|
|
const getList = async () => {
|
loading.value = true
|
const res = await getHazardList(state.queryParams)
|
if(res.code == 200){
|
state.dataList = res.rows || []
|
state.total = res.total
|
}else{
|
ElMessage.warning(res.msg)
|
}
|
loading.value = false
|
}
|
|
const getSourceName = (val)=>{
|
return state.sourceList.find(i=>i.id == val)?.name
|
}
|
|
const getLevelName = (val)=>{
|
return state.levelList.find(i=>i.id == val)?.name
|
}
|
|
const openDialog = (type, value) => {
|
let initalData = JSON.parse(JSON.stringify(value))
|
if(type == 'edit' || type == 'view'){
|
|
}
|
dialogRef.value.openDialog(type, initalData)
|
}
|
|
/** 重置新增的表单以及其他数据 */
|
const reset= async()=> {
|
state.queryParams = {
|
pageNum: 1,
|
pageSize: 10,
|
hazardName: '',
|
hazardSource: null,
|
hazardLevel: null,
|
reformDeptId: null,
|
reformUserId: null,
|
state: null
|
}
|
await getList()
|
}
|
|
const handleSubmit = async (data, type) => {
|
const {id,reasonAnalysis,rectificationMeasures,reformPeriod,reformPics} = JSON.parse(JSON.stringify(data))
|
const params = {id,reasonAnalysis,rectificationMeasures,reformPeriod,reformPics}
|
console.log(params,'para')
|
const res = await updateHazard(params)
|
if(res.code == 200){
|
ElMessage.success(res.msg)
|
await handleClose()
|
await getList()
|
}else{
|
ElMessage.warning(res.msg)
|
}
|
}
|
|
const handleClose = () => {
|
dialogRef.value.closeDialog()
|
}
|
|
</script>
|