You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

520 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="container">
<!-- 查询配置 -->
<div style="padding: 0px 20px">
<div ref="lxHeader">
<LxHeader icon="md-apps" text="安全风险信息" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<div>
<Input style="width: 200px; margin-right: 10px" v-model="searchFields.KeyWord" placeholder="关键字搜索" />
<Button type="primary" @click="load" style="margin-left: 10px">查询</Button>
<Button type="primary" @click="edit()" style="margin-left: 10px">新增</Button>
</div>
</slot>
</LxHeader>
</div>
<div ref="lxTable">
<el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column type="index" width="50" align="center" fixed="left"> </el-table-column>
<el-table-column :prop="column.field" :align="column.align" v-for="(column,index) in columns"
:label="column.title" :width="column.width" :fixed="column.fixed">
<template slot-scope="scope">
<div v-if="column.type=='opt'">
<Button ghost size="small" @click="edit(scope.row)" type="primary"
style="margin-left: 10px;">编辑</Button>
<Button ghost size="small" @click="del(scope.row)" type="error" style="margin-left: 10px;">删除</Button>
</div>
<div v-else-if="column.type=='level'">
<div v-for="risklevel in parameters.riskLevel">
<div v-if='scope.row[column.field]==risklevel.id'>
{{risklevel.value}}
</div>
</div>
</div>
<div v-else-if="column.type=='type'">
<div v-for="risktype in parameters.riskType">
<div v-if='scope.row[column.field]==risktype.id'>
{{risktype.value}}
</div>
</div>
</div>
<div v-else-if="column.type=='format'">
<div v-if="column.field=='admin'||column.field=='department'||column.field=='maintenance_department'">
{{scope.row[column.field]?scope.row[column.field].name:""}}
</div>
</div>
<div v-else>{{scope.row[column.field]}}</div>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination @current-change="handleCurrentChange" :current-page="paginations.page"
:page-size="paginations.page_size" background layout="prev, pager, next" :total="paginations.total">
</el-pagination>
</div>
</div>
</div>
<el-dialog title="安全风险信息编辑" :visible.sync="dialogFormVisible" fullscreen width="90%">
<div class="dialogConcent" :style="{height:clientHeight+'px'}">
<el-scrollbar style="flex: 1">
<el-form :model="form" :rules="rules" ref="form" label-position="right" :label-width="formLabelWidth">
<el-row>
<el-col :span="8">
<el-form-item label="风险类别" prop="type" label-position="right">
<el-select v-model="form.type" placeholder="请选择风险类别" style="width: 100%">
<el-option v-for="item in parameters.riskType" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" :offset="8">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请填写名称" autocomplete="off"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item class="longtext" label="风险分析综述(至少包括人身事故/财产损失和环境破坏)" prop="overview">
<el-input type="textarea" :rows="3" v-model="form.overview" placeholder="请填写风险分析综述" autocomplete="off"></el-input>
</el-form-item>
<el-form-item class="longtext" label="控制措施描述(包括工程技术措施/个人防护措施等)" prop="measure">
<el-input type="textarea" :rows="3" v-model="form.measure" placeholder="请填写控制措施描述" autocomplete="off"></el-input>
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item class="longtext" label="控制级别" prop="level" label-position="right">
<el-select v-model="form.level" placeholder="请选择控制级别" style="width: 100%">
<el-option v-for="item in parameters.riskLevel" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item class="longtext" label="备注" prop="remark">
<el-input type="textarea" :rows="3" v-model="form.remark" placeholder="请填写备注" autocomplete="off"></el-input>
</el-form-item>
<el-form-item class="uploads" label="附件" prop="files_list">
<el-upload class="upload-demo" :on-success="handlesuccess" :data="uploadOther"
:action="action" :on-remove="handleRemove" :before-remove="beforeRemove"
:on-exceed="handleExceed" :file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<div style="padding: 20px 0px;" class="form-sub-title">
<span>详细信息
</span>
</div>
<div class="table-tree tableswidth">
<div style="display: flex;justify-content: flex-end;margin-right: 20px;margin-bottom: 10px;">
<Button type="primary" @click="addRow()" size="small" style="margin-left: 10px;" ghost>新增</Button>
</div>
<el-table :data="form.details_list" height="400" class="v-table" style="width: 100%;margin-bottom: 20px;">
<el-table-column type="index" align="center">
</el-table-column>
<el-table-column prop="element" label="危险因素" width="320px">
<template slot-scope="scope">
<el-input v-model="scope.row.element" />
</el-input>
</template>
</el-table-column>
<el-table-column prop="evaluate_way" align="center" label="评价方法">
<template slot-scope="scope">
<el-input v-model="scope.row.evaluate_way" />
</el-input>
</template>
</el-table-column>
<el-table-column prop="level" align="center" label="风险等级" width="200px">
<template slot-scope="scope">
<el-select v-model="scope.row.level" placeholder="请选择风险等级" style="width: 100%">
<el-option v-for="item in parameters.riskInfoLevel" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="操作" width="120px" align="center">
<template slot-scope="scope">
<Button type="error" @click="delRow(scope.$index)" size="small" style="margin-left: 10px;"
ghost>删除</Button>
</template>
</el-table-column>
</el-table>
</div>
</el-form>
</el-scrollbar>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="resetForm('form')">取 消</el-button>
<el-button type="primary" v-preventReClick @click="submitForm('form')"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getToken
} from '@/utils/auth'
import LxHeader from "@/components/LxHeader/index.vue";
import Tinymce from '@/components/Tinymce'
import {
save,
store,
del,
get,
listtask
} from "../../api/risk/riskindex.js";
import {
getparameteritem
} from "../../api/system/dictionary.js";
export default {
components: {
LxHeader,
Tinymce
},
data() {
return { action:`${process.env.VUE_APP_BASE_API}/api/admin/upload-file`,
checkAll: false,
isIndeterminate: true,
infoFormVisible:false,
parameters: {
riskLevel: [],
riskType:[],
riskInfoLevel:[]
},
paginations: {
page: 1,
page_size: 15,
total: 0
},
tableHeight: 0,
dialogFormVisible: false,
formLabelWidth: "120px",
clientHeight: 0,
form: {
type: "",
name: "",
overview: "",
measure: "",
level: "",
remark: "",
files_list: [],
details_list: [{
element:"",
evaluate_way:"",
level:""
}],
},
//查询条件字段
searchFields: {
KeyWord: ""
},
fileList: [],
details_list: [],
tableData: [],
rules: {
type: [{
required: true,
message: '请选择风险类别',
trigger: 'blur'
}],
name: [{
required: true,
message: '请填写名称',
trigger: 'blur'
}],
overview: [{
required: true,
message: '请填写风险分析综述',
trigger: 'blur'
}],
measure: [{
required: true,
message: '请填写控制措施描述',
trigger: 'blur'
}],
level: [{
required: true,
message: '请选择控制级别',
trigger: 'blur'
}],
remark: [{
message: '请填写备注',
trigger: 'blur'
}],
},
columns: [{
field: "name",
title: "名称",
type: "string",
width: 240
},{
field: "type",
title: "类别",
type: "type",
width:120,
align:'center'
},
{
field: "level",
title: "控制等级",
type: "level",
width: 120,
align:"center"
},
{
field: "overview",
title: "风险分析综述",
type: "string",
width: 240
},
{
field: "measure",
title: "控制措施描述",
width: 240,
},
{
field: "created_at",
title: "创建时间",
type: "string",
width: 180,
align: "center"
},
{
field: "admin",
title: "创建人",
type: "format",
width: 120,
align: "center"
},
{
field: "department",
title: "创建人科室",
type: "format",
width: 120,
align: "center"
},
{
field: "操作",
title: "操作",
width: 220,
type: "opt",
fixed:'right'
}
],
uploadOther: {
token: ""
},
}
},
created() {
this.uploadOther.token = getToken();
this.initLoad();
this.load();
},
methods: {
addRow() {
var len = this.form.details_list.length;
this.form.details_list.push({
element:"",
evaluate_way:"",
level:""
});
},
delRow(index) {
this.form.details_list.splice(index, 1);
},
initLoad() {
var that = this;
var clientHeight = document.documentElement.clientHeight
var lxHeader_height = 96.5; //查询 头部
var paginationHeight = 37; //分页的高度
var topHeight = 50; //页面 头部
let tableHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.tableHeight = tableHeight;
//加载自定义参数
getparameteritem("riskLevel").then(res => {
this.parameters.riskLevel = res.detail;
});
//加载自定义参数
getparameteritem("riskType").then(res => {
this.parameters.riskType = res.detail;
});
//加载自定义参数
getparameteritem("riskInfoLevel").then(res => {
this.parameters.riskInfoLevel = res.detail;
});
},
handleCurrentChange(page) {
this.paginations.page = page;
this.load();
},
load() {
listtask({
page: this.paginations.page,
page_size: this.paginations.page_size,
keyword:this.searchFields.KeyWord
}).then(response => {
this.tableData = response.data;
this.paginations.total = response.total;
}).catch(error => {
console.log(error)
reject(error)
})
},
del(obj) {
var that = this;
if (obj) {
this.$Modal.confirm({
title: '确认要删除数据?',
onOk: () => {
del(obj.id).then(response => {
this.$Message.success('操作成功');
that.load();
}).catch(error => {
console.log(error)
reject(error)
})
},
onCancel: () => {
//this.$Message.info('Clicked cancel');
}
});
}
},
info(obj) {
var that = this;
get(obj.id).then(res => {
let result = Object.assign(that.form, res);
that.form = result;
let _files = [];
for (var mod of result.safety_risk_files) {
let m = Object.assign({}, mod["files"]);
m.name = mod["files"].original_name;
_files.push(m);
}
that.fileList = _files;
that.form.details_list = result.details;
}).catch(error => {
//reject(error)
})
},
edit(obj) {
this.form = this.$options.data().form;
this.clientHeight = document.documentElement.clientHeight - 84 - 110;
if (obj) {
var that = this;
that.info(obj);
} else {}
this.dialogFormVisible = true;
},
submitForm(formName) {
var that = this;
this.$refs[formName].validate((valid) => {
if (valid) {
if (that.form.id) {
that.form.id = that.form.id;
save(that.form).then(response => {
//console.log(response)
this.$Message.success('操作成功');
that.load();
that.dialogFormVisible = false;
}).catch(error => {
//reject(error)
})
} else {
store(that.form).then(response => {
//console.log(response)
this.$Message.success('操作成功');
that.load();
that.dialogFormVisible = false;
}).catch(error => {
//reject(error)
})
}
that.fileList = [];
} else {
this.$Message.error('数据校验失败');
console.log('error submit!!');
return false;
}
});
},
handleRemove(file, fileList) {
let listUrl = [];
for (var m of fileList) {
if (m.response)
listUrl.push({"upload_id":m.response.id});
else
listUrl.push({"upload_id":m.id});
}
this.form.files_list = listUrl;
},
handleExceed(files, fileList) {},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${ file.name }`);
},
handlesuccess(response, file, fileList) {
let listUrl = [];
for (var m of fileList) {
if (m.response)
listUrl.push({"upload_id":m.response.id});
else
listUrl.push({"upload_id":m.id});
}
this.form.files_list = listUrl;
},
resetForm(formName) {
var that = this;
that.fileList = [];
this.$refs[formName].resetFields();
that.dialogFormVisible = false;
},
}
}
</script>
<style>
.dialogConcent {
overflow-y: auto;
}
.longtext{
margin-left:43px;
}
.longtext label{
float:none;
text-align: left;
}
.longtext .el-form-item__content{
margin-left:0!important;
width:80%;
}
.tableswidth table{
width:100%!important;
}
.uploads label{
width: 85px!important;
}
.uploads .el-form-item__content{
margin-left: 90px!important;
}
</style>