八项作业受限空间和高处作业PC端显示

pull/1/head
chenxinying 2024-02-03 08:46:43 +08:00
parent d699e3472f
commit 8c7cb413fe
9 changed files with 484 additions and 601 deletions

View File

@ -1561,6 +1561,14 @@ export default [
},
component: "confined_space/job_data/view",
},
{
path: "/confined_space/job_data/add_video",
meta: {
title: "添加监控",
activeMenu: "/confined_space/job_data",
},
component: "eightwork_videomanager/index",
},
],
},
{
@ -1686,6 +1694,14 @@ export default [
},
component: "high/job_data/view",
},
{
path: "/high/job_data/add_video",
meta: {
title: "添加监控",
activeMenu: "/high/job_data",
},
component: "eightwork_videomanager/index",
},
],
},
{
@ -1846,6 +1862,14 @@ export default [
},
component: "hot_work/job_data/view",
},
{
path: "/hot_work/job_data/add_video",
meta: {
title: "添加监控",
activeMenu: "/hot_work/job_data",
},
component: "eightwork_videomanager/index",
},
],
},
{

View File

@ -1,9 +1,5 @@
import { post, upload } from "@/request/axios.js";
export const getConfinedSpaceList = (params) =>
post("/confinedspace/list", params); // 受限空间作业管理列表
export const getConfinedSpaceView = (params) =>
post("/confinedspace/goEdit", params); // 受限空间作业管理查看
export const getLedgerList = (params) => post("/limitspace/list", params); // 台账列表
export const setLedgerImport = (params) =>
upload("/limitspace/readExcel2", params); // 台账导入

View File

@ -1,4 +0,0 @@
import { post } from "@/request/axios.js";
export const getHighList = (params) => post("/highwork/list", params); // 高处作业管理列表
export const getHighView = (params) => post("/highwork/goEdit", params); // 高处作业管理查看

View File

@ -1,81 +1,15 @@
<template>
<el-dialog v-model="visible" title="查看流程图" width="1200px">
<el-steps
:active="fnGetStatus()"
:process-status="fnGetProcessStatus()"
align-center
finish-status="success"
>
<el-step title="受限空间作业提交">
<el-dialog v-model="visible" title="查看流程图" width="1500px">
<el-steps align-center finish-status="success">
<template v-for="(item, index) in flowList" :key="index">
<el-step :title="item.STEP_NAME" :status="fnGetStatus(item)">
<template #description>
<div>{{ fnGetProcessMessage().title }}</div>
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
<div>{{ fnGetProcessMessage().OPERATTIME }}</div>
<div>{{ item.ACT_USER_NAME || item.SIGN_USER }}</div>
<div>{{ item.ACT_TIME }}</div>
</template>
</el-step>
<el-step title="作业负责人意见">
<template #description>
<div>{{ info.CONFIRM_USER_NAME }}</div>
<div>{{ info.CONFIRM_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="所在单位意见">
<template #description>
<div>{{ info.APPROVE_USER_NAME }}</div>
<div>{{ info.APPROVE_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="完成验收">
<template #description>
<div>{{ info.ACCEPT_USER_NAME }}</div>
<div>{{ info.ACCEPT_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="验收归档">
<template #description>
<div>{{ info.ACCEPT_USER_NAME }}</div>
<div>{{ info.ACCEPT_USER_SIGNER_TIME }}</div>
</template>
</el-step>
</el-steps>
<div
style="
margin: 60px 60px 0 60px;
display: flex;
justify-content: space-between;
"
>
<div v-if="info.GUARDIAN_USER_SIGNER_TIME">
<div class="el-step__title is-success">
监护人{{ info.GUARDIAN_USER_NAME }}已签字
</div>
</div>
<div v-if="!info.GUARDIAN_USER_SIGNER_TIME">
<div class="el-step__title is-error">
监护人{{ info.GUARDIAN_USER_NAME }}未签字
</div>
</div>
<div v-if="info.CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-success">
安全交底人{{ info.CONFESS_USER_NAME }}已签字
</div>
</div>
<div v-if="!info.CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-error">
安全交底人{{ info.CONFESS_USER_NAME }}未签字
</div>
</div>
<div v-if="info.ACCEPT_CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-success">
接受交底人{{ info.ACCEPT_CONFESS_USER_NAME }}已签字
</div>
</div>
<div v-if="!info.ACCEPT_CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-error">
接受交底人{{ info.ACCEPT_CONFESS_USER_NAME }}未签字
</div>
</div>
</div>
<template #footer>
<el-button @click="visible = false">关闭</el-button>
</template>
@ -91,63 +25,23 @@ const props = defineProps({
required: true,
default: false,
},
info: {
flowList: {
type: Object,
required: true,
default: () => {},
},
});
const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits);
const fnGetStatus = () => {
const result = {
1: 1,
4: 2,
5: 3,
6: 5,
};
return result[props.info.APPLY_STATUS] || 0;
};
const fnGetProcessStatus = () => {
if (props.info.APPLY_STATUS < "0") return "error";
else return "process";
};
const fnGetProcessMessage = () => {
const info = props.info;
const result = {
"-4": {
title: "作业负责人审核打回",
USER_NAME: info.CONFIRM_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-5": {
title: "所在单位审核打回",
USER_NAME: info.APPROVE_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-6": {
title: "验收打回",
AUSER_NAME: info.ACCEPT_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-99": {
title: "已作废(监护人未签字)",
AUSER_NAME: "",
OPERATTIME: info.OPERATTIME,
},
"-98": {
title: "已作废(未进行气体检测)",
AUSER_NAME: "",
OPERATTIME: info.OPERATTIME,
},
};
return (
result[props.info.APPLY_STATUS] || {
title: "",
USER_NAME: info.APPLY_USER_NAME,
OPERATTIME: info.CREATTIME,
const fnGetStatus = (step) => {
if (step.STATUS === 1) {
return "finish";
} else if (step.STATUS < 0) {
return "error";
} else if (step.CURRENT_STEP) {
return "process";
}
);
};
</script>

View File

@ -117,7 +117,7 @@
</layout-card>
<flow-chart
v-model:visible="data.flowChartDialog.visible"
:flowList="data.flowChartDialog.flowList"
:flow-list="data.flowChartDialog.flowList"
/>
</div>
</template>

View File

@ -33,24 +33,7 @@
<td class="title">作业负责人</td>
<td colspan="3">{{ data.info.CONFIRM_USER_NAME }}</td>
</tr>
<tr>
<td class="title">作业人</td>
<td colspan="5">{{ data.info.WORK_USER }}</td>
<td class="title">监护人</td>
<td colspan="5">
<div v-if="data.info.GUARDIAN_USER_SIGNER_PATH" class="tr">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.GUARDIAN_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.GUARDIAN_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr>
<td class="title">关联的其他特殊作业及安全作业票编号</td>
<td colspan="9">{{ data.info.SPECIAL_WORK }}</td>
@ -120,7 +103,7 @@
</tr>
<tr>
<td colspan="10">
<table>
<table class="table-ui">
<tr>
<td style="width: 80px">序号</td>
<td>安全措施</td>
@ -131,135 +114,216 @@
<td>{{ index + 1 }}</td>
<td>
{{ item.PROTECTIVE_MEASURES }}
<div v-if="item.IMG_PATH">
<template v-for="img in item.IMG_PATH.split(',')" :key="img">
<img
v-viewer
:src="VITE_FILE_URL + img"
alt=""
width="100"
height="100"
/>
</template>
</div>
</td>
<td>
<span v-if="item.STATUS === '1'">
<input type="radio" checked disabled /> &nbsp;&nbsp;&nbsp;
</span>
<span v-if="item.STATUS === '-1'">
<input type="radio" checked disabled /> 不涉及
</span>
<span v-if="item.STATUS === '1'"> &nbsp;&nbsp;&nbsp; </span>
<span v-if="item.STATUS === '-1'"> </span>
</td>
<td>
{{ item.CONFIRM_NAME }}
<img
v-if="item.SIGN_PATH"
v-viewer
:src="VITE_FILE_URL + item.SIGN_PATH"
alt=""
width="100"
height="100"
/>
</td>
</tr>
<template v-if="data.signs.MEASURES_CONFIRM">
<tr
v-if="
data.info.CONFIRM_USER_MEASURES ||
data.info.APPROVE_USER_MEASURES
"
v-for="(item, index) in data.signs.MEASURES_CONFIRM"
:key="item.BUS_CONFINEDSPACE_MEASURES_ID"
>
<td>{{ data.measuresList.length + 1 }}</td>
<td colspan="3">
<div
v-if="data.info.CONFIRM_USER_MEASURES"
style="display: flex; justify-content: space-between"
>
<span>
其他安全措施{{ data.info.CONFIRM_USER_MEASURES }}
</span>
<span>编制人{{ data.info.CONFIRM_USER_NAME }}</span>
</div>
<div
v-if="data.info.APPROVE_USER_MEASURES"
style="display: flex; justify-content: space-between"
>
<span>
其他安全措施{{ data.info.APPROVE_USER_MEASURES }}
</span>
<span>编制人{{ data.info.APPROVE_USER_NAME }}</span>
<td>{{ data.measuresList.length + 1 + index }}</td>
<td colspan="2">
<div style="display: flex; justify-content: space-between">
<span> 其他安全措施 {{ item.DESCR }} </span>
</div>
</td>
<td>
<img
v-if="item.SIGN_PATH[0]"
v-viewer
:src="VITE_FILE_URL + item.SIGN_PATH[0]"
alt=""
width="100"
height="100"
/>
</td>
</tr>
</template>
</table>
</td>
</tr>
<tr>
<td class="title">安全交底人</td>
<td colspan="10">
<div v-if="data.info.CONFESS_USER_SIGNER_PATH" class="tr">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.CONFESS_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.CONFESS_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr>
<td class="title">接受交底人</td>
<tr v-if="data.signs.GUARDIAN">
<td colspan="10">
<div>监护人</div>
<div
v-for="item in data.imgList"
:key="item.ACCEPT_CONFESS_ID"
v-for="(item, index) in data.signs.GUARDIAN[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
:src="VITE_FILE_URL + data.signs.GUARDIAN[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
<span>{{ data.signs.GUARDIAN[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.info.CONFIRM_USER_SIGNER_PATH">
<tr v-if="data.signs.CONFESS">
<td colspan="10">
<div>作业负责人意见{{ data.info.CONFIRM_CONTENT }}</div>
<div class="tr">
<span>签字</span>
<div>
安全交底人
<div v-if="data.signs.CONFESS[0].IMG_PATH">
<template
v-for="img in data.signs.CONFESS[0].IMG_PATH"
:key="img"
>
<img
v-viewer
:src="VITE_FILE_URL + data.info.CONFIRM_USER_SIGNER_PATH"
:src="VITE_FILE_URL + img"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.CONFIRM_USER_SIGNER_TIME }}</span>
</template>
</div>
</td>
</tr>
<tr v-if="data.info.APPROVE_USER_SIGNER_PATH">
<td colspan="10">
<div>所在单位意见{{ data.info.APPROVE_CONTENT }}</div>
<div class="tr">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.APPROVE_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.APPROVE_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr v-if="data.imgList1.length > 0">
<td colspan="10">
<div>完工验收{{ data.info.ACCEPT_CONTENT }}</div>
<div
v-for="item in data.imgList1"
:key="item.ACCEPT_CONFESS_ID"
v-for="(item, index) in data.signs.CONFESS[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
:src="VITE_FILE_URL + data.signs.CONFESS[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
<span>{{ data.signs.CONFESS[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.ACCEPT_CONFESS">
<td colspan="10">
<div>接受交底人</div>
<div
v-for="(item, index) in data.signs.ACCEPT_CONFESS[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="
VITE_FILE_URL + data.signs.ACCEPT_CONFESS[0].SIGN_PATH[index]
"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.ACCEPT_CONFESS[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.CONFIRM">
<td colspan="10">
<div>作业负责人意见{{ data.signs.CONFIRM[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.CONFIRM[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.CONFIRM[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.CONFIRM[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.WORK_USER">
<td colspan="10">
<div>作业人</div>
<div
v-for="(item, index) in data.signs.WORK_USER[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.WORK_USER[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.WORK_USER[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.LEADER">
<td colspan="10">
<div>所在单位意见{{ data.signs.LEADER[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.LEADER[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.LEADER[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.LEADER[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.ACCEPT">
<td colspan="10">
<div>完工验收{{ data.signs.ACCEPT[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.ACCEPT[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.ACCEPT[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.ACCEPT[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
@ -272,7 +336,7 @@ import LayoutPrintTablePackage from "@/components/print_table_package/index.vue"
import { reactive } from "vue";
import { useRoute } from "vue-router";
import { findCharIndex } from "@/assets/js/utils.js";
import { getConfinedSpaceView } from "@/request/confined_space.js";
import { getConfinedSpaceView } from "@/request/eight_work.js";
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
const route = useRoute();
@ -282,14 +346,11 @@ const data = reactive({
gasList: [],
gas: {},
measuresList: [],
imgList: [],
imgList1: [],
signs: [],
});
const fnGetData = async () => {
const resData = await getConfinedSpaceView({ CONFINEDSPACE_ID });
data.info = resData.pd;
data.imgList = resData.imgList;
data.imgList1 = resData.imgList1;
for (let i = 0; i < resData.measuresList.length; i++) {
const PROTECTIVE_MEASURES =
resData.measuresList[i].PROTECTIVE_MEASURES.split("");
@ -307,10 +368,7 @@ const fnGetData = async () => {
data.measuresList = resData.measuresList;
data.gasList = resData.gasList;
data.gas = resData.gas || {};
data.info.CONFIRM_USER_MEASURES =
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[0];
data.info.APPROVE_USER_MEASURES =
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[1];
data.signs = resData.signs;
};
fnGetData();
</script>

View File

@ -1,96 +1,15 @@
<template>
<el-dialog v-model="visible" title="查看流程图" width="1500px">
<el-steps
:active="fnGetStatus()"
:process-status="fnGetProcessStatus()"
align-center
finish-status="success"
>
<el-step title="高处作业提交">
<el-steps align-center finish-status="success">
<template v-for="(item, index) in flowList" :key="index">
<el-step :title="item.STEP_NAME" :status="fnGetStatus(item)">
<template #description>
<div>{{ fnGetProcessMessage().title }}</div>
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
<div>{{ fnGetProcessMessage().OPERATTIME }}</div>
<div>{{ item.ACT_USER_NAME || item.SIGN_USER }}</div>
<div>{{ item.ACT_TIME }}</div>
</template>
</el-step>
<el-step title="作业负责人意见">
<template #description>
<div>{{ info.CONSTRUCTION_USER_NAME }}</div>
<div>{{ info.CONSTRUCTION_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="所在单位意见">
<template #description>
<div v-if="!info.LEADER_USER_NAME">{{ "" }}</div>
<div v-else>{{ info.LEADER_USER_NAME }}</div>
<div>{{ info.LEADER_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="审核部门意见">
<template #description>
<div v-if="!info.AUDIT_USER_NAME">{{ "" }}</div>
<div v-else>{{ info.AUDIT_USER_NAME }}</div>
<div>{{ info.AUDIT_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="审批部门意见">
<template #description>
<div v-if="!info.APPROVE_USER_NAME">{{ "" }}</div>
<div v-else>{{ info.APPROVE_USER_NAME }}</div>
<div>{{ info.APPROVE_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="完成验收">
<template #description>
<div>{{ info.ACCEPT_USER_NAME }}</div>
<div>{{ info.ACCEPT_USER_SIGNER_TIME }}</div>
</template>
</el-step>
<el-step title="验收归档">
<template #description>
<div>{{ info.ACCEPT_USER_NAME }}</div>
<div>{{ info.ACCEPT_USER_SIGNER_TIME }}</div>
</template>
</el-step>
</el-steps>
<div
style="
margin: 60px 60px 0 60px;
display: flex;
justify-content: space-between;
"
>
<div v-if="info.GUARDIAN_USER_SIGNER_TIME">
<div class="el-step__title is-success">
监护人{{ info.GUARDIAN_USER_NAME }}已签字
</div>
</div>
<div v-if="!info.GUARDIAN_USER_SIGNER_TIME">
<div class="el-step__title is-error">
监护人{{ info.GUARDIAN_USER_NAME }}未签字
</div>
</div>
<div v-if="info.CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-success">
安全交底人{{ info.CONFESS_USER_NAME }}已签字
</div>
</div>
<div v-if="!info.CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-error">
安全交底人{{ info.CONFESS_USER_NAME }}未签字
</div>
</div>
<div v-if="info.ACCEPT_CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-success">
接受交底人{{ info.ACCEPT_CONFESS_USER_NAME }}已签字
</div>
</div>
<div v-if="!info.ACCEPT_CONFESS_USER_SIGNER_TIME">
<div class="el-step__title is-error">
接受交底人{{ info.ACCEPT_CONFESS_USER_NAME }}未签字
</div>
</div>
</div>
<template #footer>
<el-button @click="visible = false">关闭</el-button>
</template>
@ -106,7 +25,7 @@ const props = defineProps({
required: true,
default: false,
},
info: {
flowList: {
type: Object,
required: true,
default: () => {},
@ -114,57 +33,15 @@ const props = defineProps({
});
const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits);
const fnGetStatus = () => {
const result = {
1: 1,
2: 2,
3: 3,
4: 4,
5: 5,
6: 7,
};
return result[props.info.APPLY_STATUS] || 0;
};
const fnGetProcessStatus = () => {
if (props.info.APPLY_STATUS < "0") return "error";
else return "process";
};
const fnGetProcessMessage = () => {
const info = props.info;
const result = {
"-2": {
title: "作业负责人审核打回",
USER_NAME: info.CONSTRUCTION_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-3": {
title: "所在单位审核打回",
USER_NAME: info.LEADER_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-4": {
title: "审核部门审核打回",
USER_NAME: info.AUDIT_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-5": {
title: "审批部门审核打回",
USER_NAME: info.APPROVE_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
"-6": {
title: "验收打回",
USER_NAME: info.ACCEPT_USER_NAME,
OPERATTIME: info.OPERATTIME,
},
};
return (
result[props.info.APPLY_STATUS] || {
title: "",
USER_NAME: info.APPLY_USER,
OPERATTIME: info.CREATTIME,
const fnGetStatus = (step) => {
if (step.STATUS === 1) {
return "finish";
} else if (step.STATUS < 0) {
return "error";
} else if (step.CURRENT_STEP) {
return "process";
}
);
};
</script>

View File

@ -34,38 +34,18 @@
</tr>
<tr>
<td class="title">作业单位</td>
<td>{{ data.info.CONSTRUCTION_DEPARTMENT_NAME }}</td>
<td class="title">监护人</td>
<td>
<div
v-if="data.info.GUARDIAN_USER_SIGNER_PATH"
style="text-align: right"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.GUARDIAN_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.GUARDIAN_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr>
<td class="title">作业人</td>
<td>{{ data.info.PROJECT_MANAGER }}</td>
<td>{{ data.info.CONFIRM_DEPARTMENT_NAME }}</td>
<td class="title">作业负责人</td>
<td>{{ data.info.CONSTRUCTION_USER_NAME }}</td>
<td>{{ data.info.CONFIRM_USER_NAME }}</td>
</tr>
<tr>
<td class="title">关联的其他特殊作业及安全作业票编号</td>
<td colspan="3">{{ data.info.SPECIAL_WORK }}</td>
</tr>
<tr>
<td class="title">风险辨识结果</td>
<td colspan="3">{{ data.info.HAZARD_IDENTIFICATION }}</td>
<td colspan="3">{{ data.info.RISK_IDENTIFICATION }}</td>
</tr>
<tr>
<td class="title">作业实施时间</td>
@ -75,7 +55,7 @@
</tr>
<tr>
<td colspan="4">
<table>
<table class="table-ui">
<tr>
<td style="width: 80px">序号</td>
<td>安全措施</td>
@ -84,204 +64,259 @@
</tr>
<tr v-for="(item, index) in data.measuresList" :key="index">
<td>{{ index + 1 }}</td>
<td>{{ item.PROTECTIVE_MEASURES }}</td>
<td>
<span v-if="item.STATUS === '1'">
<input type="radio" disabled checked />&nbsp;&nbsp;&nbsp;
</span>
<span v-if="item.STATUS === '-1'">
<input type="radio" disabled checked />不涉及
</span>
{{ item.PROTECTIVE_MEASURES }}
<div v-if="item.IMG_PATH">
<template v-for="img in item.IMG_PATH.split(',')" :key="img">
<img
v-viewer
:src="VITE_FILE_URL + img"
alt=""
width="100"
height="100"
/>
</template>
</div>
</td>
<td>
{{ item.CONFIRM_NAME }}
<span v-if="item.STATUS === '1'"> &nbsp;&nbsp;&nbsp; </span>
<span v-if="item.STATUS === '-1'"> </span>
</td>
<td>
<img
v-if="item.SIGN_PATH"
v-viewer
:src="VITE_FILE_URL + item.SIGN_PATH"
alt=""
width="100"
height="100"
/>
</td>
</tr>
<template v-if="data.signs.MEASURES_CONFIRM">
<tr
v-if="
data.info.CONFIRM_USER_MEASURES ||
data.info.LEADER_USER_MEASURES ||
data.info.AUDIT_USER_MEASURES ||
data.info.APPROVE_USER_MEASURES
"
v-for="(item, index) in data.signs.MEASURES_CONFIRM"
:key="item.BUS_HOTWORK_MEASURES_ID"
>
<td>{{ data.measuresList.length + 1 }}</td>
<td colspan="3">
<div
v-if="data.info.CONFIRM_USER_MEASURES"
style="display: flex; justify-content: space-between"
>
<span>
其他安全措施{{ data.info.CONFIRM_USER_MEASURES }}
</span>
<span>编制人{{ data.info.CONSTRUCTION_USER_NAME }}</span>
</div>
<div
v-if="
data.info.LEADER_USER_ID && data.info.CONFIRM_USER_MEASURES
"
style="
display: flex;
justify-content: space-between;
margin-top: 10px;
"
>
<span>
其他安全措施{{ data.info.LEADER_USER_MEASURES }}
</span>
<span>编制人{{ data.info.LEADER_USER_NAME }}</span>
</div>
<div
v-if="
data.info.AUDIT_USER_ID && data.info.AUDIT_USER_MEASURES
"
style="
display: flex;
justify-content: space-between;
margin-top: 10px;
"
>
<span>其他安全措施{{ data.info.AUDIT_USER_MEASURES }}</span>
<span>编制人{{ data.info.AUDIT_USER_NAME }}</span>
</div>
<div
v-if="data.info.APPROVE_USER_MEASURES"
style="
display: flex;
justify-content: space-between;
margin-top: 10px;
"
>
<span>
其他安全措施{{ data.info.APPROVE_USER_MEASURES }}
</span>
<span>编制人{{ data.info.APPROVE_USER_NAME }}</span>
<td>{{ data.measuresList.length + 1 + index }}</td>
<td colspan="2">
<div style="display: flex; justify-content: space-between">
<span> 其他安全措施 {{ item.DESCR }} </span>
</div>
</td>
<td>
<img
v-if="item.SIGN_PATH[0]"
v-viewer
:src="VITE_FILE_URL + item.SIGN_PATH[0]"
alt=""
width="100"
height="100"
/>
</td>
</tr>
</template>
</table>
</td>
</tr>
<tr>
<td class="title">安全交底人</td>
<tr v-if="data.signs.GUARDIAN">
<td colspan="10">
<div>监护人</div>
<div
v-if="data.info.CONFESS_USER_SIGNER_PATH"
style="text-align: right"
v-for="(item, index) in data.signs.GUARDIAN[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.CONFESS_USER_SIGNER_PATH"
:src="VITE_FILE_URL + data.signs.GUARDIAN[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.CONFESS_USER_SIGNER_TIME }}</span>
<span>{{ data.signs.GUARDIAN[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr>
<td class="title">接受交底人</td>
<tr v-if="data.signs.CONFESS">
<td colspan="10">
<div>
安全交底人
<div v-if="data.signs.CONFESS[0].IMG_PATH">
<template
v-for="img in data.signs.CONFESS[0].IMG_PATH"
:key="img"
>
<img
v-viewer
:src="VITE_FILE_URL + img"
alt=""
width="100"
height="100"
/>
</template>
</div>
</div>
<div
v-for="item in data.imgList"
:key="item.ACCEPT_CONFESS_ID"
style="text-align: right"
v-for="(item, index) in data.signs.CONFESS[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
:src="VITE_FILE_URL + data.signs.CONFESS[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
<span>{{ data.signs.CONFESS[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.info.CONSTRUCTION_USER_SIGNER_PATH">
<td colspan="4">
<div>作业负责人意见{{ data.info.CONSTRUCTION_CONTENT }}</div>
<div style="text-align: right">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.CONSTRUCTION_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.CONSTRUCTION_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr v-if="data.info.LEADER_USER_SIGNER_PATH">
<td colspan="4">
<div>所在单位意见{{ data.info.LEADER_CONTENT }}</div>
<div style="text-align: right">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.LEADER_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.LEADER_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr v-if="data.info.AUDIT_USER_SIGNER_PATH">
<td colspan="4">
<div>审核部门意见{{ data.info.AUDIT_CONTENT }}</div>
<div style="text-align: right">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.AUDIT_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.AUDIT_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr v-if="data.info.APPROVE_USER_SIGNER_PATH">
<td colspan="4">
<div>审批部门意见{{ data.info.APPROVE_CONTENT }}</div>
<div style="text-align: right">
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.info.APPROVE_USER_SIGNER_PATH"
alt=""
width="100"
height="100"
/>
<span>{{ data.info.APPROVE_USER_SIGNER_TIME }}</span>
</div>
</td>
</tr>
<tr v-if="data.imgList1.length > 0">
<tr v-if="data.signs.ACCEPT_CONFESS">
<td colspan="10">
<div>完工验收{{ data.info.ACCEPT_CONTENT }}</div>
<div>接受交底人</div>
<div
v-for="item in data.imgList1"
:key="item.ACCEPT_CONFESS_ID"
style="text-align: right"
v-for="(item, index) in data.signs.ACCEPT_CONFESS[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
:src="
VITE_FILE_URL + data.signs.ACCEPT_CONFESS[0].SIGN_PATH[index]
"
alt=""
width="100"
height="100"
/>
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
<span>{{ data.signs.ACCEPT_CONFESS[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.CONFIRM">
<td colspan="10">
<div>作业负责人意见{{ data.signs.CONFIRM[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.CONFIRM[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.CONFIRM[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.CONFIRM[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.WORK_USER">
<td colspan="10">
<div>作业人</div>
<div
v-for="(item, index) in data.signs.WORK_USER[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.WORK_USER[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.WORK_USER[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.LEADER">
<td colspan="10">
<div>所在单位意见{{ data.signs.LEADER[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.LEADER[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.LEADER[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.LEADER[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.AUDIT">
<td colspan="10">
<div>审核部门意见{{ data.signs.AUDIT[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.AUDIT[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.AUDIT[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.AUDIT[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.APPROVE">
<td colspan="10">
<div>审批部门意见{{ data.signs.APPROVE[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.APPROVE[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.APPROVE[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.APPROVE[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
<tr v-if="data.signs.ACCEPT">
<td colspan="10">
<div>完工验收{{ data.signs.ACCEPT[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.ACCEPT[0].SIGN_TIME"
:key="index"
class="tr"
>
<span>签字</span>
<img
v-viewer
:src="VITE_FILE_URL + data.signs.ACCEPT[0].SIGN_PATH[index]"
alt=""
width="100"
height="100"
/>
<span>{{ data.signs.ACCEPT[0].SIGN_TIME[index] }}</span>
</div>
</td>
</tr>
@ -293,31 +328,36 @@
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
import { reactive } from "vue";
import { useRoute } from "vue-router";
import { getHighView } from "@/request/high.js";
import { getHighWorkView } from "@/request/eight_work.js";
import { findCharIndex } from "@/assets/js/utils.js";
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
const route = useRoute();
const { HIGHWORK_ID, entrance } = route.query;
const data = reactive({
info: {},
imgList: [],
imgList1: [],
measuresList: [],
signs: [],
});
const fnGetData = async () => {
const resData = await getHighView({ HIGHWORK_ID });
const resData = await getHighWorkView({ HIGHWORK_ID });
data.info = resData.pd;
data.imgList = resData.imgList;
data.imgList1 = resData.imgList1;
for (let i = 0; i < resData.measuresList.length; i++) {
const PROTECTIVE_MEASURES =
resData.measuresList[i].PROTECTIVE_MEASURES.split("");
for (let j = 1; j <= 3; j++) {
if (findCharIndex(PROTECTIVE_MEASURES, "", j) !== -1) {
PROTECTIVE_MEASURES.splice(
findCharIndex(PROTECTIVE_MEASURES, "", j) + 1,
0,
resData.measuresList[i]["ANSWER" + j]
);
}
}
resData.measuresList[i].PROTECTIVE_MEASURES = PROTECTIVE_MEASURES.join("");
}
data.measuresList = resData.measuresList;
data.info.CONFIRM_USER_MEASURES =
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[0];
data.info.LEADER_USER_MEASURES =
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[1];
data.info.AUDIT_USER_MEASURES =
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[2];
data.info.APPROVE_USER_MEASURES =
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[3];
data.signs = resData.signs;
};
fnGetData();
</script>

View File

@ -134,7 +134,7 @@
<tr v-if="data.signs.GUARDIAN">
<td colspan="10">
<div>监护人{{ data.signs.GUARDIAN[0].DESCR }}</div>
<div>监护人</div>
<div
v-for="(item, index) in data.signs.GUARDIAN[0].SIGN_TIME"
:key="index"
@ -156,10 +156,10 @@
<tr v-if="data.signs.CONFESS">
<td colspan="10">
<div>
安全交底人{{ data.signs.CONFESS[0].DESCR }}
安全交底人
<div v-if="data.signs.CONFESS[0].IMG_PATH">
<template
v-for="img in data.signs.CONFESS[0].IMG_PATH.split(',')"
v-for="img in data.signs.CONFESS[0].IMG_PATH"
:key="img"
>
<img
@ -192,7 +192,7 @@
<tr v-if="data.signs.ACCEPT_CONFESS">
<td colspan="10">
<div>接受交底人{{ data.signs.ACCEPT_CONFESS[0].DESCR }}</div>
<div>接受交底人</div>
<div
v-for="(item, index) in data.signs.ACCEPT_CONFESS[0].SIGN_TIME"
:key="index"
@ -354,8 +354,6 @@ const route = useRoute();
const { HOTWORK_ID, entrance } = route.query;
const data = reactive({
info: {},
imgList: [],
imgList1: [],
measuresList: [],
gasList: [],
signs: [],