jhprjv2/ruoyi-ui/src/views/trouble/sspProblemmodify/modifyProblemDrawer.vue

485 lines
15 KiB
Vue
Raw Blame History

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="ssp-container-index-drawer">
<el-drawer
v-if="vOpen"
:visible.sync="vOpen"
ref="drawer"
v-loading="loading"
direction="rtl"
@close="closeCallBack"
size="60%"
>
<template slot="title">
<div>{{ typeName }}隐患详情查看</div>
</template>
<div class="block">
<div class="drawer">
<div class="drawerLeft">
<el-steps :active="active" finish-status="success" simple>
<el-step title="提交隐患"></el-step>
<el-step title="处理隐患"></el-step>
<el-step title="整改复检"></el-step>
<el-step title="处理完成"></el-step>
</el-steps>
<el-timeline>
<el-timeline-item
v-for="(item, index) in flowRecordList"
:key="index"
:icon="setIcon(item.processState)"
:color="setColor(item.processState)"
>
<p style="font-weight: 700">
{{ getProcess(index, item.process) }}
</p>
<el-card :body-style="{ padding: '10px' }">
<el-descriptions class="margin-top" :column="1" size="small" border>
<el-descriptions-item
v-if="item.createUserName"
label-class-name="my-label"
:labelStyle="labelStyle"
>
<template slot="label"
><i class="el-icon-user"></i>办理用户</template
>
{{ item.createUserName }}
<el-tag type="info" size="mini">{{ item.createUser }}</el-tag>
</el-descriptions-item>
<el-descriptions-item
v-if="item.createTime"
label-class-name="my-label"
:labelStyle="labelStyle"
>
<template slot="label"
><i class="el-icon-date"></i>办理时间</template
>
{{ item.createTime }}
</el-descriptions-item>
<el-descriptions-item
v-if="item.fileUrls"
label-class-name="my-label"
:labelStyle="labelStyle"
>
<template slot="label" v-if="item.processState == 1"
><i class="el-icon-picture-outline"></i>隐患图片</template
>
<template slot="label" v-if="item.processState != 1"
><i class="el-icon-picture-outline"></i>整改图片</template
>
<el-image
ref="preview"
v-for="img in item.fileUrls.split(',')"
:src="img + '.min.jpg'"
style="width: 50px; height: 50px; margin-right: 10px"
@click="onPreview(img)"
></el-image>
</el-descriptions-item>
<el-descriptions-item
v-if="item.opinion"
label-class-name="my-label"
:labelStyle="labelStyle"
>
<template slot="label"
><i class="el-icon-tickets"></i>处理意见</template
>
{{ item.opinion }}
</el-descriptions-item>
</el-descriptions>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
<div class="drawerRight">
<el-form
ref="form"
label-width="80px"
size="mini"
:model="form"
:rules="rules"
style="padding-right: 20px; padding-left: 20px"
>
<el-form-item label="项目名称">
{{ dataInfo.problemArea }}
</el-form-item>
<el-form-item label="隐患图片">
<el-image
ref="preview"
v-for="img in dataInfo.smarkUrl.split(',')"
:src="getImageUrl(img)"
style="width: 60px; height: 60px; margin-right: 8px"
@click="onPreview(img)"
></el-image>
</el-form-item>
<el-form-item label="问题类型">
<span v-if="dataInfo.problemType == '1'" class="timeline_for_state_1"
>常规检查</span
>
<span v-else class="timeline_for_state_2">专项检查</span>
</el-form-item>
<el-form-item label="隐患类型">
<dict-tag
v-if="dataInfo.infoType == 1"
:options="dict.type.ssp_zlyhlx"
:value="dataInfo.dangerType"
/>
<dict-tag
v-if="dataInfo.infoType == 0"
:options="dict.type.ssp_aqyhlx"
:value="dataInfo.dangerType"
/>
</el-form-item>
<el-form-item label="隐患描述">
{{ dataInfo.workParts }}
</el-form-item>
<el-form-item label="整改要求">
{{ dataInfo.changeInfo }}
</el-form-item>
<el-form-item label="检查单位">
{{ dataInfo.deptName }}
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="检查分类">
<el-tag v-if="dataInfo.roleType == 3">产发集团</el-tag>
<el-tag v-if="dataInfo.roleType == 4">责任主体(子公司)</el-tag>
<el-tag v-if="dataInfo.roleType == 5">甲方代表</el-tag>
<el-tag v-if="dataInfo.roleType == 6">总包单位</el-tag>
<el-tag v-if="dataInfo.roleType == 7">监理单位</el-tag>
<el-tag v-if="dataInfo.roleType == 8">分包单位</el-tag>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检查人">
{{ dataInfo.createUserName }}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="检查时间">
{{ dataInfo.createTime }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="整改人">
{{ dataInfo.lordSent }}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="抄送人">
{{ dataInfo.copySend }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="复检人">
{{ dataInfo.recheckSend }}
</el-form-item>
</el-col>
</el-row>
<el-form-item label="截至时间">
{{ dataInfo.nickedTime }}
</el-form-item>
<el-form-item
v-if="dataInfo.checkState == 0 || dataInfo.checkState == 3"
label="整改说明"
prop="flowComment"
>
<el-input
type="textarea"
:rows="3"
placeholder="请输入整改说明255字内"
v-model="form.flowComment"
/>
</el-form-item>
<el-form-item
v-if="dataInfo.checkState == 1"
label="复检意见"
prop="flowComment"
>
<el-input
type="textarea"
:rows="3"
placeholder="请输入复检意见255字内"
v-model="form.flowComment"
/>
</el-form-item>
<el-form-item
v-if="dataInfo.checkState == 0 || dataInfo.checkState == 3"
label="整改图片"
prop="files"
>
<image-upload v-model="form.files" :limit="5" />
</el-form-item>
<div style="text-align: center; padding-bottom: 20px">
<el-button @click="cancel">取 消</el-button>
<el-button
type="success"
v-if="dataInfo.checkState == 0 || dataInfo.checkState == 3"
icon="el-icon-check"
@click="submitForm(0)"
>提 交 整 改</el-button
>
<el-button
type="danger"
v-if="dataInfo.checkState == 1"
icon="el-icon-error"
@click="submitForm(2)"
>复 检 驳 回</el-button
>
<el-button
type="success"
v-if="dataInfo.checkState == 1"
icon="el-icon-success"
@click="submitForm(4)"
>复 检 通 过</el-button
>
</div>
</el-form>
</div>
</div>
</div>
</el-drawer>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="previewList"
style="z-index: 9999"
/>
</div>
</template>
<script>
import { auditinfoList, modifyProblem } from "@/api/trouble/sspProblemmodify";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
import { getSspProblemmodify } from "@/api/trouble/sspProblemmodify";
export default {
name: "modifyProblemDrawer",
components: { ElImageViewer },
props: {
closeCallBack: {
type: Function,
},
},
dicts: ["ssp_zlyhlx", "ssp_aqyhlx", "smz_ssp_checkstate"],
data() {
return {
vOpen: false,
option: {},
// 查询参数
queryParams: {
mainId: null,
},
form: {
flowComment: "",
files: "",
},
rules: {
flowComment: [
{ required: true, message: "请输入处理意见", trigger: "blur" },
{ max: 255, message: "处理意见最多255字符", trigger: "blur" },
],
files: [{ required: true, message: "请上传整改图片", trigger: "blur" }],
},
// 遮罩层
loading: true,
// 流程流转数据
flowRecordList: [],
//label样式
labelStyle: { width: "200px" },
showViewer: false,
previewList: [],
dataInfo: {
smarkUrl: "",
},
active: 100,
typeName: "",
};
},
computed: {},
watch: {},
created() {},
mounted() {},
beforeDestroy() {},
methods: {
getImageUrl(url) {
return process.env.VUE_APP_BASE_API + url + ".min.jpg";
},
onPreview(urls) {
this.previewList = [];
urls.split(",").forEach((item) => {
this.previewList.push(process.env.VUE_APP_BASE_API + item);
});
this.showViewer = true;
},
getProcess(i, v) {
let num = this.flowRecordList.length - i;
if (num < 10) {
num = "0" + num;
}
return num + ". " + v;
},
closeViewer() {
this.showViewer = false;
},
setIcon(val) {
if (val == 2) {
return "el-icon-close";
} else {
return "el-icon-check";
}
},
setColor(val) {
if (val == 2) {
return "#f56c6c";
} else {
return "#2bc418";
}
},
show(options) {
if (this.option.id != options.id) {
this.form.flowComment = "";
this.form.files = "";
}
if (options.infoType == 1) {
this.typeName = "质量";
} else {
this.typeName = "安全";
}
this.option = options;
this.initDataInfo();
this.getAuditinfoList();
this.vOpen = true;
},
initDataInfo() {
this.loading = true;
getSspProblemmodify(this.option.id).then((res) => {
if (res.data.checkState == 0) {
this.active = 1;
} else if (res.data.checkState == 1) {
this.active = 2;
} else if (res.data.checkState == 3) {
this.active = 1;
}
this.dataInfo = res.data;
this.loading = false;
});
},
/** 查询项目人员列表 */
getAuditinfoList() {
this.queryParams.mainId = this.option.id;
auditinfoList(this.queryParams).then((response) => {
this.flowRecordList = response.rows;
});
},
// 取消按钮
cancel() {
this.vOpen = false;
},
/** 提交按钮 */
submitForm(v) {
let that = this;
this.$refs["form"].validate((valid) => {
if (valid) {
let msg = "提交复检";
if (v == 2) {
msg = "复检驳回";
}
if (v == 4) {
msg = "复检通过";
}
this.$confirm("是否确认" + msg + "?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
that.loading = true;
let params = {
mainId: that.option.id,
processState: v,
opinion: that.form.flowComment,
fileUrls: that.form.files,
};
modifyProblem(params).then((res) => {
that.$modal.msgSuccess("操作成功");
that.loading = false;
//关闭并刷新列表
that.$refs.drawer.closeDrawer();
});
})
.catch(() => {
console.log("取消操作");
});
}
});
},
},
};
</script>
<style scope>
.el-alert {
display: flex !important;
}
.el-alert--info.is-light {
background: cornflowerblue !important;
color: #ffffff !important;
}
.el-alert--info .el-alert__description {
color: #ffffff !important;
}
.el-steps--simple {
padding: 5px 5px !important;
}
.el-timeline-item {
padding-bottom: 0px !important;
}
.el-timeline {
padding-left: 5px !important;
padding-top: 20px !important;
}
.el-timeline-item__wrapper {
padding-left: 15px !important;
}
.el-timeline-item__content {
font-weight: 900;
}
.el-form-item {
margin-bottom: 15px !important;
}
.el-step.is-simple .el-step__title {
font-size: 13px !important;
}
.el-card {
margin-left: -15px !important;
}
</style>
<style lang="scss">
.ssp-container-index-drawer {
.drawer {
width: 100%;
height: 100%;
padding-left: 20px;
padding-right: 20px;
padding-bottom: 20px;
.drawerLeft {
width: 50%;
min-width: 280px;
height: 100%;
float: left;
border-right: 1px solid #dcdfe6;
overflow-y: scroll;
padding-right: 20px;
}
.drawerRight {
width: 50%;
min-width: 400px;
height: 100%;
float: left;
padding-left: 20px;
}
}
}
</style>