|
|
@@ -0,0 +1,548 @@
|
|
|
+<template>
|
|
|
+ <el-drawer
|
|
|
+ :title="title"
|
|
|
+ :modal-append-to-body="false"
|
|
|
+ :modal="false"
|
|
|
+ :wrapper-closable="false"
|
|
|
+ size="100%"
|
|
|
+ :visible.sync="dialogVisible"
|
|
|
+ >
|
|
|
+ <div class="content-container">
|
|
|
+ <el-row class="counter-wrap">
|
|
|
+ <el-col :span="4" class="left-counter-wrap">
|
|
|
+ <div class="list-group">
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">执行部门:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.handleGroupName }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">执行人员:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count"><i class="el-icon-user" />{{ viewData.handleAccountName }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">优先级:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count"><el-tag type="info" effect="plain" color="rgb(38 69 90)">{{ viewData.taskPriority | taskPriorityFilter }}</el-tag></p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">状态:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.status | taskStatusFilter }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">检查分类:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.checkCatTitle }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">风险点:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.riskPointTitle }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">检查清单:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.checklistTitle }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">预计开始时间:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.expectedStartTime }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">预计结束时间:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.expectedEndTime }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">实际开始时间:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.actualStartTime }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="list-item">
|
|
|
+ <el-col :span="10">
|
|
|
+ <p class="title">实际结束时间:</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14">
|
|
|
+ <p class="count">{{ viewData.actualEndTime }}</p>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+ <el-row class="btn-group">
|
|
|
+ <el-button class="send-menu" @click="handleTransfer">转交任务</el-button>
|
|
|
+ <el-button class="send-menu" @click="handleComplete">完成任务</el-button>
|
|
|
+ <el-button class="send-menu" @click="handleCancel">撤消任务</el-button>
|
|
|
+ </el-row>
|
|
|
+ <el-row class="btn-group">
|
|
|
+ <el-button class="send-menu" @click="handleBatchPass">全部通过</el-button>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="20" class="right-counter-wrap">
|
|
|
+ <table class="ck-table">
|
|
|
+ <tr class="tr-head">
|
|
|
+ <td class="td-sno">序号</td>
|
|
|
+ <td class="td-riskCode">风险编码</td>
|
|
|
+ <td class="td-riskSource">场所/步骤/部位</td>
|
|
|
+ <td class="td-riskType">类别</td>
|
|
|
+ <td class="td-riskReason">危险因素</td>
|
|
|
+ <td class="td-riskConsequence">事故后果</td>
|
|
|
+ <td class="td-riskLevel">等级</td>
|
|
|
+ <td class="td-measure">管控措施</td>
|
|
|
+ <td class="td-reference">依据</td>
|
|
|
+ <td class="td-checkResult">巡检结果</td>
|
|
|
+ <td class="td-action">操作</td>
|
|
|
+
|
|
|
+ </tr>
|
|
|
+ <template v-for="(hazard, hdx) in viewData.hazardList">
|
|
|
+ <tr :key="hazard.hazardId" class="tr-hazard">
|
|
|
+ <td colspan="11">{{ hdx+1 }}. {{ hazard.hazardTitle }}</td>
|
|
|
+ </tr>
|
|
|
+ <template v-for="(risk, rdx) in hazard.riskList">
|
|
|
+ <template v-for="(measure, mdx) in risk.measureList">
|
|
|
+ <tr v-if="mdx==0" :key="measure.measureId">
|
|
|
+ <td class="text-center" :rowspan="risk.measureCount">{{ rdx+1 }}</td>
|
|
|
+ <td class="text-center" :rowspan="risk.measureCount">{{ risk.riskCode }}</td>
|
|
|
+ <td class="text-center" :rowspan="risk.measureCount">{{ risk.riskSource }}</td>
|
|
|
+ <td class="text-center" :rowspan="risk.measureCount">{{ risk.riskTypeId | riskTypeFilter }}</td>
|
|
|
+ <td class="text-left" :rowspan="risk.measureCount">{{ risk.riskReason }}</td>
|
|
|
+ <td class="text-center" :rowspan="risk.measureCount">{{ risk.riskConsequence }}</td>
|
|
|
+ <td class="text-center" :rowspan="risk.measureCount">{{ risk.riskLevel | riskLevelFilter }}</td>
|
|
|
+ <td class="text-left">
|
|
|
+ <span>
|
|
|
+ {{ mdx+1 }}.{{ measure.measureContent }}<br>
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td class="text-left">
|
|
|
+ <span>
|
|
|
+ {{ mdx+1 }}.{{ measure.measureReference }}<br>
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span>{{ measure.checkResult | checkResultFilter }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <el-link @click="handleCheckResult(measure.checkRecordId)">检查</el-link>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr v-else :key="measure.measureId">
|
|
|
+ <td class="text-left">
|
|
|
+ <span>
|
|
|
+ {{ mdx+1 }}.{{ measure.measureContent }}<br>
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td class="text-left">
|
|
|
+ <span>
|
|
|
+ {{ mdx+1 }}.{{ measure.measureReference }}<br>
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span>{{ measure.checkResult | checkResultFilter }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <el-link @click="handleCheckResult(measure.checkRecordId)">检查</el-link>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </table>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <transfer-task ref="TransferTask" title="转交任务" />
|
|
|
+ <check-result ref="CheckResult" title="巡检" @formSuccess="getData" />
|
|
|
+ </div>
|
|
|
+ </el-drawer>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { handleCheckTask, completeCheckTask, cancelCheckTask } from '@/api/aqpt/checkTaskApi'
|
|
|
+import { batchUpdateCheckTaskDoingItem } from '@/api/aqpt/checkTaskDoingApi'
|
|
|
+import { riskType, riskLevel, taskPriority, taskStatus, checkResult } from '@/utils'
|
|
|
+import TransferTask from './Transfer.vue'
|
|
|
+import CheckResult from './CheckResult.vue'
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ TransferTask,
|
|
|
+ CheckResult
|
|
|
+ },
|
|
|
+ filters: {
|
|
|
+ riskTypeFilter(val) {
|
|
|
+ return riskType(val)
|
|
|
+ },
|
|
|
+ riskLevelFilter(val) {
|
|
|
+ return riskLevel(val)
|
|
|
+ },
|
|
|
+ taskPriorityFilter(val) {
|
|
|
+ return taskPriority(val)
|
|
|
+ },
|
|
|
+ taskStatusFilter(val) {
|
|
|
+ return taskStatus(val)
|
|
|
+ },
|
|
|
+ checkResultFilter(val) {
|
|
|
+ return checkResult(val)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ ops: {
|
|
|
+ bar: {
|
|
|
+ keepShow: false,
|
|
|
+ background: 'rgba(144, 147, 153, 0.4)',
|
|
|
+ onlyShowBarOnScroll: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ title: '',
|
|
|
+ dialogVisible: false,
|
|
|
+ viewData: {
|
|
|
+ taskId: undefined,
|
|
|
+ taskTitle: '',
|
|
|
+ taskCatId: undefined,
|
|
|
+ taskCatTitle: '',
|
|
|
+ launchGroupId: undefined,
|
|
|
+ launchGroupName: '',
|
|
|
+ launchPositionId: undefined,
|
|
|
+ launchPositionName: '',
|
|
|
+ launchAccountId: undefined,
|
|
|
+ launchAccountName: '',
|
|
|
+ executeGroupId: undefined,
|
|
|
+ executeGroupName: '',
|
|
|
+ executePositionId: undefined,
|
|
|
+ executePositionName: '',
|
|
|
+ executeAccountId: undefined,
|
|
|
+ executeAccountName: '',
|
|
|
+ status: undefined,
|
|
|
+ taskDesc: '',
|
|
|
+ expectedStartTime: undefined,
|
|
|
+ expectedEndTime: undefined,
|
|
|
+ actualStartTime: undefined,
|
|
|
+ actualEndTime: undefined,
|
|
|
+ riskPointId: undefined,
|
|
|
+ riskPointTitle: '',
|
|
|
+ checklistId: undefined,
|
|
|
+ checklistTitle: '',
|
|
|
+ checklistCatId: undefined,
|
|
|
+ checklistCatTitle: '',
|
|
|
+ checklistDesc: '',
|
|
|
+ checklistVersion: '',
|
|
|
+ hazardCount: 0,
|
|
|
+ hazardList: []
|
|
|
+ },
|
|
|
+ conditions: {
|
|
|
+ checklistId: undefined
|
|
|
+ },
|
|
|
+ total: 0
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {},
|
|
|
+ methods: {
|
|
|
+
|
|
|
+ // 显示视图
|
|
|
+ showView(checklistId) {
|
|
|
+ this.conditions.checklistId = checklistId
|
|
|
+ this.dialogVisible = true
|
|
|
+ this.getData()
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化数据
|
|
|
+ getData() {
|
|
|
+ const checklistId = this.conditions.checklistId
|
|
|
+ handleCheckTask(checklistId).then((resp) => {
|
|
|
+ const { code, data, msg } = resp
|
|
|
+ if (code === 0) {
|
|
|
+ this.title = data.taskTitle
|
|
|
+ this.viewData = data
|
|
|
+ } else {
|
|
|
+ this.$message.error(msg)
|
|
|
+ }
|
|
|
+ }).catch((error) => {
|
|
|
+ console.log(error)
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 转交任务
|
|
|
+ handleTransfer() {
|
|
|
+ const taskId = this.viewData.taskId
|
|
|
+ this.$refs['TransferTask'].showView(taskId)
|
|
|
+ },
|
|
|
+
|
|
|
+ // 转交任务
|
|
|
+ handleCheckResult(checkRecordId) {
|
|
|
+ const taskId = this.viewData.taskId
|
|
|
+ this.$refs['CheckResult'].showView(taskId, checkRecordId)
|
|
|
+ },
|
|
|
+
|
|
|
+ // 批量通过
|
|
|
+ handleBatchPass() {
|
|
|
+ const taskId = this.viewData.taskId
|
|
|
+ const checkResult = 1
|
|
|
+ this.$confirm('确定批量通过?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ batchUpdateCheckTaskDoingItem(taskId, checkResult).then((resp) => {
|
|
|
+ const { code, msg } = resp
|
|
|
+ if (code === 0) {
|
|
|
+ this.$message.success(msg)
|
|
|
+ this.getData()
|
|
|
+ } else {
|
|
|
+ this.$message.error(msg)
|
|
|
+ }
|
|
|
+ }).catch((error) => {
|
|
|
+ console.log(error)
|
|
|
+ })
|
|
|
+ }).catch(() => {
|
|
|
+ this.$message.info('已取消操作')
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 取消任务
|
|
|
+ handleCancel() {
|
|
|
+ const taskId = this.viewData.taskId
|
|
|
+ this.$confirm('此操作将取消任务, 是否继续?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ cancelCheckTask(taskId).then((resp) => {
|
|
|
+ const { code, msg } = resp
|
|
|
+ if (code === 0) {
|
|
|
+ this.$message.success(msg)
|
|
|
+ this.formSuccess()
|
|
|
+ } else {
|
|
|
+ this.$message.error(msg)
|
|
|
+ }
|
|
|
+ }).catch((error) => {
|
|
|
+ console.log(error)
|
|
|
+ })
|
|
|
+ }).catch(() => {
|
|
|
+ this.$message.info('已取消操作')
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 完成任务
|
|
|
+ handleComplete() {
|
|
|
+ const taskId = this.viewData.taskId
|
|
|
+ this.$confirm('此操作将完成任务, 是否继续?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ completeCheckTask(taskId).then((resp) => {
|
|
|
+ const { code, msg } = resp
|
|
|
+ if (code === 0) {
|
|
|
+ this.$message.success((msg))
|
|
|
+ this.formSuccess()
|
|
|
+ } else {
|
|
|
+ this.$message.error(msg)
|
|
|
+ }
|
|
|
+ }).catch((error) => {
|
|
|
+ console.log(error)
|
|
|
+ })
|
|
|
+ }).catch(() => {
|
|
|
+ this.$message.info('已取消操作')
|
|
|
+ })
|
|
|
+ },
|
|
|
+ formSuccess() {
|
|
|
+ this.$emit('formSuccess')
|
|
|
+ },
|
|
|
+ resetFormField(formName) {
|
|
|
+ this.$refs[formName].resetFields()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+</style>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.content-container {
|
|
|
+ margin: 0 0 15px 15px;
|
|
|
+ height: calc(100vh - 100px);
|
|
|
+
|
|
|
+ .title-bar {
|
|
|
+ border-left: 6px solid #36556B;
|
|
|
+ height: 40px;
|
|
|
+ line-height: 40px;
|
|
|
+ text-indent: 15px;
|
|
|
+ background: #113849;
|
|
|
+ margin-bottom: 15px;
|
|
|
+
|
|
|
+ .page-title {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #FFF;
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-group {
|
|
|
+ width: 100%;
|
|
|
+ padding-right: 15px;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ .send-menu {
|
|
|
+ width: 60%;
|
|
|
+ background: #3D5F76;
|
|
|
+ color: #FFF;
|
|
|
+ border-color: #3D5F76;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #283c4c;
|
|
|
+ color: #FFF;
|
|
|
+ border-color: #283c4c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .list-group {
|
|
|
+ height: calc(100vh - 85px);
|
|
|
+ background: #193142;
|
|
|
+
|
|
|
+ .sub-title-bar {
|
|
|
+ font-size: 16px;
|
|
|
+ color: #FFF;
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ text-align:right;
|
|
|
+ margin: 0;
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .count {
|
|
|
+ padding: 0;
|
|
|
+ text-align:left;
|
|
|
+ color: #8b8b8b;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ck-desc {
|
|
|
+ text-align: left;
|
|
|
+ text-indent: 24px;
|
|
|
+ color: #8b8b8b;
|
|
|
+ }
|
|
|
+
|
|
|
+ .list-item {
|
|
|
+ height: 40px;
|
|
|
+ line-height: 40px;
|
|
|
+ color: #FFF;
|
|
|
+ padding: 0 5px;
|
|
|
+ font-size: 13px;
|
|
|
+
|
|
|
+ &.active {
|
|
|
+ color: #08A6DC;
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ position: absolute;
|
|
|
+ content: "";
|
|
|
+ width: 0;
|
|
|
+ height: 0;
|
|
|
+ top: calc(50% - 3.5px);
|
|
|
+ right: -3px;
|
|
|
+ border-left: 7px solid transparent;
|
|
|
+ border-right: 7px solid transparent;
|
|
|
+ border-bottom: 7px solid #08A6DC;
|
|
|
+ transform: rotate(270deg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .ck-table {
|
|
|
+ color: #FFF;
|
|
|
+ background-color: #0C3444;
|
|
|
+ font-size: 14px;
|
|
|
+ text-indent: initial;
|
|
|
+ border-spacing: 1px;
|
|
|
+ border: #1F3C51 1px solid;
|
|
|
+ padding: 10px 20px;
|
|
|
+ flex: 1;
|
|
|
+ width: 100%;
|
|
|
+ max-width: 100%;
|
|
|
+ .tr-head{
|
|
|
+ padding: 10px 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tr-hazard {
|
|
|
+ font-size: 13px;
|
|
|
+ font-weight: bold;
|
|
|
+ text-indent: 12px;
|
|
|
+ background: #164153;
|
|
|
+ padding: 10px 20px;
|
|
|
+ }
|
|
|
+ .tr-risk {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ td {
|
|
|
+ box-sizing: border-box;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ vertical-align: middle;
|
|
|
+ position: relative;
|
|
|
+ padding: 2px 5px;
|
|
|
+ transition: background-color 0.25s ease;
|
|
|
+ }
|
|
|
+
|
|
|
+ .td-sno{ width: 5%; text-align:center; }
|
|
|
+ .td-riskCode{width: 5%; text-align: center; }
|
|
|
+ .td-riskSource{width: 15%; text-align: center; }
|
|
|
+ .td-riskType{width: 5%; text-align: center; }
|
|
|
+ .td-riskLevel{width: 5%; text-align: center; }
|
|
|
+ .td-riskReason{width: 15%; text-align: left; }
|
|
|
+ .td-riskConsequence{width: 10%; text-align: center; }
|
|
|
+ .td-measure{width: 20%; text-align: left; }
|
|
|
+ .td-reference{width: 10%; text-align: left; }
|
|
|
+ .td-checkResult{width: 5%; text-align: left; }
|
|
|
+ .td-action{width: 5%; text-align: left;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .el-link--inner{
|
|
|
+ color: #08A6DC!important;
|
|
|
+ font-size: 12px!important;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+</style>
|