Merge remote-tracking branch 'origin/dev' into dev

pull/1/head
dearlin 2024-02-03 09:43:12 +08:00
commit 0a53421386
9 changed files with 484 additions and 601 deletions

View File

@ -1561,6 +1561,14 @@ export default [
}, },
component: "confined_space/job_data/view", 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", 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", 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"; 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 getLedgerList = (params) => post("/limitspace/list", params); // 台账列表
export const setLedgerImport = (params) => export const setLedgerImport = (params) =>
upload("/limitspace/readExcel2", 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> <template>
<el-dialog v-model="visible" title="查看流程图" width="1200px"> <el-dialog v-model="visible" title="查看流程图" width="1500px">
<el-steps <el-steps align-center finish-status="success">
:active="fnGetStatus()" <template v-for="(item, index) in flowList" :key="index">
:process-status="fnGetProcessStatus()" <el-step :title="item.STEP_NAME" :status="fnGetStatus(item)">
align-center
finish-status="success"
>
<el-step title="受限空间作业提交">
<template #description> <template #description>
<div>{{ fnGetProcessMessage().title }}</div> <div>{{ item.ACT_USER_NAME || item.SIGN_USER }}</div>
<div>{{ fnGetProcessMessage().USER_NAME }}</div> <div>{{ item.ACT_TIME }}</div>
<div>{{ fnGetProcessMessage().OPERATTIME }}</div>
</template> </template>
</el-step> </el-step>
<el-step title="作业负责人意见">
<template #description>
<div>{{ info.CONFIRM_USER_NAME }}</div>
<div>{{ info.CONFIRM_USER_SIGNER_TIME }}</div>
</template> </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> </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> <template #footer>
<el-button @click="visible = false">关闭</el-button> <el-button @click="visible = false">关闭</el-button>
</template> </template>
@ -91,63 +25,23 @@ const props = defineProps({
required: true, required: true,
default: false, default: false,
}, },
info: { flowList: {
type: Object, type: Object,
required: true, required: true,
default: () => {}, default: () => {},
}, },
}); });
const emits = defineEmits(["update:visible"]); const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits); const visible = useVModel(props, "visible", emits);
const fnGetStatus = () => { const fnGetStatus = (step) => {
const result = { if (step.STATUS === 1) {
1: 1, return "finish";
4: 2, } else if (step.STATUS < 0) {
5: 3, return "error";
6: 5, } else if (step.CURRENT_STEP) {
}; return "process";
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,
} }
);
}; };
</script> </script>

View File

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

View File

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

View File

@ -1,96 +1,15 @@
<template> <template>
<el-dialog v-model="visible" title="查看流程图" width="1500px"> <el-dialog v-model="visible" title="查看流程图" width="1500px">
<el-steps <el-steps align-center finish-status="success">
:active="fnGetStatus()" <template v-for="(item, index) in flowList" :key="index">
:process-status="fnGetProcessStatus()" <el-step :title="item.STEP_NAME" :status="fnGetStatus(item)">
align-center
finish-status="success"
>
<el-step title="高处作业提交">
<template #description> <template #description>
<div>{{ fnGetProcessMessage().title }}</div> <div>{{ item.ACT_USER_NAME || item.SIGN_USER }}</div>
<div>{{ fnGetProcessMessage().USER_NAME }}</div> <div>{{ item.ACT_TIME }}</div>
<div>{{ fnGetProcessMessage().OPERATTIME }}</div>
</template> </template>
</el-step> </el-step>
<el-step title="作业负责人意见">
<template #description>
<div>{{ info.CONSTRUCTION_USER_NAME }}</div>
<div>{{ info.CONSTRUCTION_USER_SIGNER_TIME }}</div>
</template> </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> </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> <template #footer>
<el-button @click="visible = false">关闭</el-button> <el-button @click="visible = false">关闭</el-button>
</template> </template>
@ -106,7 +25,7 @@ const props = defineProps({
required: true, required: true,
default: false, default: false,
}, },
info: { flowList: {
type: Object, type: Object,
required: true, required: true,
default: () => {}, default: () => {},
@ -114,57 +33,15 @@ const props = defineProps({
}); });
const emits = defineEmits(["update:visible"]); const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits); const visible = useVModel(props, "visible", emits);
const fnGetStatus = () => {
const result = { const fnGetStatus = (step) => {
1: 1, if (step.STATUS === 1) {
2: 2, return "finish";
3: 3, } else if (step.STATUS < 0) {
4: 4, return "error";
5: 5, } else if (step.CURRENT_STEP) {
6: 7, return "process";
};
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,
} }
);
}; };
</script> </script>

View File

@ -34,38 +34,18 @@
</tr> </tr>
<tr> <tr>
<td class="title">作业单位</td> <td class="title">作业单位</td>
<td>{{ data.info.CONSTRUCTION_DEPARTMENT_NAME }}</td> <td>{{ data.info.CONFIRM_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 class="title">作业负责人</td> <td class="title">作业负责人</td>
<td>{{ data.info.CONSTRUCTION_USER_NAME }}</td> <td>{{ data.info.CONFIRM_USER_NAME }}</td>
</tr> </tr>
<tr> <tr>
<td class="title">关联的其他特殊作业及安全作业票编号</td> <td class="title">关联的其他特殊作业及安全作业票编号</td>
<td colspan="3">{{ data.info.SPECIAL_WORK }}</td> <td colspan="3">{{ data.info.SPECIAL_WORK }}</td>
</tr> </tr>
<tr> <tr>
<td class="title">风险辨识结果</td> <td class="title">风险辨识结果</td>
<td colspan="3">{{ data.info.HAZARD_IDENTIFICATION }}</td> <td colspan="3">{{ data.info.RISK_IDENTIFICATION }}</td>
</tr> </tr>
<tr> <tr>
<td class="title">作业实施时间</td> <td class="title">作业实施时间</td>
@ -75,7 +55,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="4"> <td colspan="4">
<table> <table class="table-ui">
<tr> <tr>
<td style="width: 80px">序号</td> <td style="width: 80px">序号</td>
<td>安全措施</td> <td>安全措施</td>
@ -84,204 +64,259 @@
</tr> </tr>
<tr v-for="(item, index) in data.measuresList" :key="index"> <tr v-for="(item, index) in data.measuresList" :key="index">
<td>{{ index + 1 }}</td> <td>{{ index + 1 }}</td>
<td>{{ item.PROTECTIVE_MEASURES }}</td>
<td> <td>
<span v-if="item.STATUS === '1'"> {{ item.PROTECTIVE_MEASURES }}
<input type="radio" disabled checked />&nbsp;&nbsp;&nbsp; <div v-if="item.IMG_PATH">
</span> <template v-for="img in item.IMG_PATH.split(',')" :key="img">
<span v-if="item.STATUS === '-1'"> <img
<input type="radio" disabled checked />不涉及 v-viewer
</span> :src="VITE_FILE_URL + img"
alt=""
width="100"
height="100"
/>
</template>
</div>
</td> </td>
<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> </td>
</tr> </tr>
<template v-if="data.signs.MEASURES_CONFIRM">
<tr <tr
v-if=" v-for="(item, index) in data.signs.MEASURES_CONFIRM"
data.info.CONFIRM_USER_MEASURES || :key="item.BUS_HOTWORK_MEASURES_ID"
data.info.LEADER_USER_MEASURES ||
data.info.AUDIT_USER_MEASURES ||
data.info.APPROVE_USER_MEASURES
"
> >
<td>{{ data.measuresList.length + 1 }}</td> <td>{{ data.measuresList.length + 1 + index }}</td>
<td colspan="3"> <td colspan="2">
<div <div style="display: flex; justify-content: space-between">
v-if="data.info.CONFIRM_USER_MEASURES" <span> 其他安全措施 {{ item.DESCR }} </span>
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>
</div> </div>
</td> </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> </tr>
</template>
</table> </table>
</td> </td>
</tr> </tr>
<tr> <tr v-if="data.signs.GUARDIAN">
<td class="title">安全交底人</td>
<td colspan="10"> <td colspan="10">
<div>监护人</div>
<div <div
v-if="data.info.CONFESS_USER_SIGNER_PATH" v-for="(item, index) in data.signs.GUARDIAN[0].SIGN_TIME"
style="text-align: right" :key="index"
class="tr"
> >
<span>签字</span> <span>签字</span>
<img <img
v-viewer v-viewer
:src="VITE_FILE_URL + data.info.CONFESS_USER_SIGNER_PATH" :src="VITE_FILE_URL + data.signs.GUARDIAN[0].SIGN_PATH[index]"
alt="" alt=""
width="100" width="100"
height="100" height="100"
/> />
<span>{{ data.info.CONFESS_USER_SIGNER_TIME }}</span> <span>{{ data.signs.GUARDIAN[0].SIGN_TIME[index] }}</span>
</div> </div>
</td> </td>
</tr> </tr>
<tr> <tr v-if="data.signs.CONFESS">
<td class="title">接受交底人</td>
<td colspan="10"> <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 <div
v-for="item in data.imgList" v-for="(item, index) in data.signs.CONFESS[0].SIGN_TIME"
:key="item.ACCEPT_CONFESS_ID" :key="index"
style="text-align: right" class="tr"
> >
<span>签字</span> <span>签字</span>
<img <img
v-viewer v-viewer
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH" :src="VITE_FILE_URL + data.signs.CONFESS[0].SIGN_PATH[index]"
alt="" alt=""
width="100" width="100"
height="100" height="100"
/> />
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span> <span>{{ data.signs.CONFESS[0].SIGN_TIME[index] }}</span>
</div> </div>
</td> </td>
</tr> </tr>
<tr v-if="data.info.CONSTRUCTION_USER_SIGNER_PATH"> <tr v-if="data.signs.ACCEPT_CONFESS">
<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">
<td colspan="10"> <td colspan="10">
<div>完工验收{{ data.info.ACCEPT_CONTENT }}</div> <div>接受交底人</div>
<div <div
v-for="item in data.imgList1" v-for="(item, index) in data.signs.ACCEPT_CONFESS[0].SIGN_TIME"
:key="item.ACCEPT_CONFESS_ID" :key="index"
style="text-align: right" class="tr"
> >
<span>签字</span> <span>签字</span>
<img <img
v-viewer v-viewer
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH" :src="
VITE_FILE_URL + data.signs.ACCEPT_CONFESS[0].SIGN_PATH[index]
"
alt="" alt=""
width="100" width="100"
height="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> </div>
</td> </td>
</tr> </tr>
@ -293,31 +328,36 @@
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue"; import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
import { reactive } from "vue"; import { reactive } from "vue";
import { useRoute } from "vue-router"; 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 VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
const route = useRoute(); const route = useRoute();
const { HIGHWORK_ID, entrance } = route.query; const { HIGHWORK_ID, entrance } = route.query;
const data = reactive({ const data = reactive({
info: {}, info: {},
imgList: [],
imgList1: [],
measuresList: [], measuresList: [],
signs: [],
}); });
const fnGetData = async () => { const fnGetData = async () => {
const resData = await getHighView({ HIGHWORK_ID }); const resData = await getHighWorkView({ HIGHWORK_ID });
data.info = resData.pd; data.info = resData.pd;
data.imgList = resData.imgList; for (let i = 0; i < resData.measuresList.length; i++) {
data.imgList1 = resData.imgList1; 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.measuresList = resData.measuresList;
data.info.CONFIRM_USER_MEASURES = data.signs = resData.signs;
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];
}; };
fnGetData(); fnGetData();
</script> </script>

View File

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