forked from integrated_whb/integrated_whb_vue
init
parent
0180e34d6e
commit
474c5ee580
1
.env
1
.env
|
@ -1,4 +1,5 @@
|
|||
VITE_BASE_URL=http://192.168.0.17:8001/
|
||||
VITE_PROXY=/api
|
||||
VITE_FILE_URL=https://file.zcloudchina.com/YTHFile
|
||||
VITE_TEMPLATE_URL='https://qaaq.qhdsafety.com/file/'
|
||||
|
||||
|
|
28
package.json
28
package.json
|
@ -10,10 +10,10 @@
|
|||
"lint": "eslint --ext .js,.vue --fix src .prettierrc.cjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.1.0",
|
||||
"@element-plus/icons-vue": "^2.3.1",
|
||||
"@icon-park/vue-next": "^1.4.2",
|
||||
"@vueuse/core": "^9.13.0",
|
||||
"@vueuse/integrations": "^10.7.0",
|
||||
"@vueuse/integrations": "^10.7.1",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.6.3",
|
||||
"dayjs": "^1.11.10",
|
||||
|
@ -22,39 +22,39 @@
|
|||
"mitt": "^3.0.1",
|
||||
"normalize.css": "^8.0.1",
|
||||
"pinia": "^2.1.7",
|
||||
"pinia-plugin-persistedstate": "^3.2.0",
|
||||
"pinia-plugin-persistedstate": "^3.2.1",
|
||||
"qrcode": "^1.5.3",
|
||||
"qs": "^6.11.2",
|
||||
"throttle-debounce": "^5.0.0",
|
||||
"v-viewer": "^3.0.11",
|
||||
"vue": "^3.3.13",
|
||||
"vue": "^3.4.3",
|
||||
"vue-router": "^4.2.5",
|
||||
"vue3-print-nb": "^0.1.4",
|
||||
"vue3-puzzle-vcode": "^1.0.16"
|
||||
"vue3-puzzle-vcode": "^1.1.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@our-patches/postcss-px-to-viewport": "^1.2.0",
|
||||
"@types/node": "^18.18.4",
|
||||
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
||||
"@vitejs/plugin-vue": "^4.4.0",
|
||||
"@types/node": "^18.19.4",
|
||||
"@vitejs/plugin-basic-ssl": "^1.0.2",
|
||||
"@vitejs/plugin-vue": "^4.6.2",
|
||||
"@vue/eslint-config-prettier": "^7.1.0",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"eslint": "^8.51.0",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-config-prettier": "^8.10.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-plugin-import": "^2.28.1",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-n": "^15.7.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-vue": "^9.17.0",
|
||||
"eslint-plugin-vue": "^9.19.2",
|
||||
"prettier": "^2.8.8",
|
||||
"sass": "^1.69.0",
|
||||
"unplugin-auto-import": "^0.12.2",
|
||||
"unplugin-vue-components": "^0.22.12",
|
||||
"vite": "^4.4.11",
|
||||
"vite": "^4.5.1",
|
||||
"vite-plugin-enhance-log": "^0.5.2",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-plugin-remove-console": "^2.1.1",
|
||||
"vue-eslint-parser": "^9.3.1"
|
||||
"vite-plugin-remove-console": "^2.2.0",
|
||||
"vue-eslint-parser": "^9.3.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,10 @@ import asyncRouter from "@/assets/js/asyncRouter";
|
|||
import { getAsyncRouter } from "@/request/api";
|
||||
// import { getRouteTreeAll } from "@/request/system_management.js";
|
||||
|
||||
const modules = import.meta.glob("./views/**/*.vue"); // 获取到views下所有的vue文件
|
||||
const modules = import.meta.glob([
|
||||
"./views/**/*.vue",
|
||||
"!./views/**/components/*.vue",
|
||||
]); // 获取到views下所有的vue文件
|
||||
let storageRouter = null; // 用来获取后台拿到的路由
|
||||
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
|
|
|
@ -380,6 +380,12 @@
|
|||
color: var(--el-text-color-regular) !important;
|
||||
}
|
||||
|
||||
.el-step__title{
|
||||
font-size: 14px !important;;
|
||||
.el-step__title {
|
||||
font-size: 14px !important;
|
||||
}
|
||||
|
||||
.el-step__description {
|
||||
* {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,4 +75,249 @@ export default [
|
|||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/confined_space",
|
||||
redirect: "/confined_space/job_data",
|
||||
meta: { title: "受限空间作业管理", model: MODEL["3"] },
|
||||
component: "children",
|
||||
children: [
|
||||
{
|
||||
path: "/confined_space/job_data",
|
||||
meta: { title: "受限空间作业数据", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "confined_space/job_data/index" },
|
||||
{
|
||||
path: "/confined_space/job_data/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/confined_space/job_data",
|
||||
},
|
||||
component: "confined_space/job_data/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/confined_space/ledger",
|
||||
meta: { title: "受限空间台账", isSubMenu: false },
|
||||
component: "confined_space/ledger/index",
|
||||
},
|
||||
{
|
||||
path: "/confined_space/archive",
|
||||
meta: { title: "归档管理", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "confined_space/archive/index" },
|
||||
{
|
||||
path: "/confined_space/archive/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/confined_space/archive",
|
||||
},
|
||||
component: "confined_space/archive/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/blind_plate_plugging",
|
||||
redirect: "/blind_plate_plugging/job_data",
|
||||
meta: { title: "盲板抽堵作业管理", model: MODEL["3"] },
|
||||
component: "children",
|
||||
children: [
|
||||
{
|
||||
path: "/blind_plate_plugging/job_data",
|
||||
meta: { title: "盲板抽堵作业数据", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "blind_plate_plugging/job_data/index" },
|
||||
{
|
||||
path: "/blind_plate_plugging/job_data/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/blind_plate_plugging/job_data",
|
||||
},
|
||||
component: "blind_plate_plugging/job_data/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/blind_plate_plugging/archive",
|
||||
meta: { title: "归档管理", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "blind_plate_plugging/archive/index" },
|
||||
{
|
||||
path: "/blind_plate_plugging/archive/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/blind_plate_plugging/archive",
|
||||
},
|
||||
component: "blind_plate_plugging/archive/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/groundbreaking",
|
||||
redirect: "/groundbreaking/job_data",
|
||||
meta: { title: "动土作业管理", model: MODEL["3"] },
|
||||
component: "children",
|
||||
children: [
|
||||
{
|
||||
path: "/groundbreaking/job_data",
|
||||
meta: { title: "动土作业数据", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "groundbreaking/job_data/index" },
|
||||
{
|
||||
path: "/groundbreaking/job_data/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/groundbreaking/job_data",
|
||||
},
|
||||
component: "groundbreaking/job_data/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/groundbreaking/archive",
|
||||
meta: { title: "归档管理", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "groundbreaking/archive/index" },
|
||||
{
|
||||
path: "/groundbreaking/archive/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/groundbreaking/archive",
|
||||
},
|
||||
component: "groundbreaking/archive/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/high",
|
||||
redirect: "/high/job_data",
|
||||
meta: { title: "高处作业管理", model: MODEL["3"] },
|
||||
component: "children",
|
||||
children: [
|
||||
{
|
||||
path: "/high/job_data",
|
||||
meta: { title: "高处作业数据", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "high/job_data/index" },
|
||||
{
|
||||
path: "/high/job_data/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/high/job_data",
|
||||
},
|
||||
component: "high/job_data/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/high/archive",
|
||||
meta: { title: "归档管理", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "high/archive/index" },
|
||||
{
|
||||
path: "/high/archive/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/high/archive",
|
||||
},
|
||||
component: "high/archive/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/hoisting",
|
||||
redirect: "/hoisting/job_data",
|
||||
meta: { title: "吊装作业管理", model: MODEL["3"] },
|
||||
component: "children",
|
||||
children: [
|
||||
{
|
||||
path: "/hoisting/job_data",
|
||||
meta: { title: "吊装作业数据", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "hoisting/job_data/index" },
|
||||
{
|
||||
path: "/hoisting/job_data/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/hoisting/job_data",
|
||||
},
|
||||
component: "hoisting/job_data/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/hoisting/archive",
|
||||
meta: { title: "归档管理", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "hoisting/archive/index" },
|
||||
{
|
||||
path: "/hoisting/archive/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/hoisting/archive",
|
||||
},
|
||||
component: "hoisting/archive/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/open_circuit",
|
||||
redirect: "/open_circuit/job_data",
|
||||
meta: { title: "断路作业管理", model: MODEL["3"] },
|
||||
component: "children",
|
||||
children: [
|
||||
{
|
||||
path: "/open_circuit/job_data",
|
||||
meta: { title: "断路作业数据", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "open_circuit/job_data/index" },
|
||||
{
|
||||
path: "/open_circuit/job_data/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/open_circuit/job_data",
|
||||
},
|
||||
component: "open_circuit/job_data/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/open_circuit/archive",
|
||||
meta: { title: "归档管理", isSubMenu: false },
|
||||
component: "children",
|
||||
children: [
|
||||
{ path: "", component: "open_circuit/archive/index" },
|
||||
{
|
||||
path: "/open_circuit/archive/view",
|
||||
meta: {
|
||||
title: "审批表详情",
|
||||
activeMenu: "/open_circuit/archive",
|
||||
},
|
||||
component: "open_circuit/archive/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
|
|
@ -53,6 +53,20 @@ export const layoutFnGetTrainingPlateType = async () => {
|
|||
});
|
||||
return ref(JSON.parse(resData.zTreeNodes));
|
||||
};
|
||||
// 受限空间类型
|
||||
export const layoutFnGetTypeOfConfinedSpace = async () => {
|
||||
const resData = await getLevels({
|
||||
DICTIONARIES_ID: "dad23a464729485ba364994942db83cc",
|
||||
});
|
||||
return ref(resData.list);
|
||||
};
|
||||
// 风险等级
|
||||
export const layoutFnGetRiskLevel = async () => {
|
||||
const resData = await getLevels({
|
||||
DICTIONARIES_ID: "a178357ce6ce4d6a9ac95def6aca3a14",
|
||||
});
|
||||
return ref(resData.list);
|
||||
};
|
||||
// 无法确定DICTIONARIES_ID的数据字典
|
||||
export const layoutFnGetLevels = async (DICTIONARIES_ID) => {
|
||||
const resData = await getLevels({ DICTIONARIES_ID });
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
import { ref } from "vue";
|
||||
|
||||
const buttonRef = ref(null);
|
||||
const THEAD_HEIGHT = 81.59;
|
||||
const A4_HEIGHT_MM = 297;
|
||||
const A4_HEIGHT_MM_TO_PX_PROPORTION = 3.78;
|
||||
let A4_HEIGHT_PX = A4_HEIGHT_MM * A4_HEIGHT_MM_TO_PX_PROPORTION - THEAD_HEIGHT;
|
||||
let elements = [];
|
||||
const printObj = {
|
||||
id: "printContent",
|
||||
closeCallback() {
|
||||
document.querySelector("#printContent").style.overflow = "hidden";
|
||||
},
|
||||
};
|
||||
const fnPrint = () => {
|
||||
document.querySelector("#printContent").style.overflow = "visible";
|
||||
elements = document.querySelectorAll("#printContent > table > tr");
|
||||
if (!document.querySelector("#printContent > table thead")) {
|
||||
A4_HEIGHT_PX = A4_HEIGHT_PX + THEAD_HEIGHT;
|
||||
}
|
||||
fnIsPaging();
|
||||
buttonRef.value.$el.click();
|
||||
};
|
||||
const fnIsPaging = (index = 0) => {
|
||||
for (let i = index; i < elements.length; i++) {
|
||||
if (
|
||||
elements[i].offsetHeight +
|
||||
elements[i].offsetTop -
|
||||
elements[index].offsetTop >=
|
||||
A4_HEIGHT_PX
|
||||
) {
|
||||
elements[i - 1].setAttribute("class", "page_break");
|
||||
fnIsPaging(i === index ? i + 1 : i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export { fnPrint, printObj, buttonRef };
|
|
@ -1,9 +1,9 @@
|
|||
import { post } from "@/request/axios";
|
||||
|
||||
// 按钮权限
|
||||
export const useButtonJurisdiction = async (type) => {
|
||||
export default async function useButtonJurisdiction(type) {
|
||||
const keys = `${type}:add,${type}:del,${type}:edit,toExcel`;
|
||||
const resData = await post("/api/head/hasButton", {
|
||||
const resData = await post("/head/hasButton", {
|
||||
loading: false,
|
||||
keys,
|
||||
});
|
||||
|
@ -13,4 +13,4 @@ export const useButtonJurisdiction = async (type) => {
|
|||
edit: resData[`${type}fhadminedit`],
|
||||
excel: resData.toExcel,
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ import { getDataType } from "@/assets/js/utils.js";
|
|||
|
||||
export default function useListData(api, options = {}) {
|
||||
if (getDataType(api) !== "Function") throw new Error("api必须是一个函数");
|
||||
if (getDataType(options) !== "Object")
|
||||
throw new Error("options必须是一个对象");
|
||||
if (options.immediate && getDataType(options.immediate) !== "Boolean")
|
||||
throw new Error("options.immediate必须是一个布尔值");
|
||||
if (options.usePagination && getDataType(options.usePagination) !== "Boolean")
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
import { ref } from "vue";
|
||||
|
||||
export default function usePrint(THEAD_HEIGHT = 81.59) {
|
||||
const buttonRef = ref(null);
|
||||
const A4_HEIGHT_MM = 297;
|
||||
const A4_HEIGHT_MM_TO_PX_PROPORTION = 3.78;
|
||||
let A4_HEIGHT_PX =
|
||||
A4_HEIGHT_MM * A4_HEIGHT_MM_TO_PX_PROPORTION - THEAD_HEIGHT;
|
||||
let elements = [];
|
||||
const printObj = {
|
||||
id: "printContent",
|
||||
closeCallback() {
|
||||
document.querySelector("#printContent").style.overflow = "hidden";
|
||||
},
|
||||
};
|
||||
const fnPrint = () => {
|
||||
document.querySelector("#printContent").style.overflow = "visible";
|
||||
elements = document.querySelectorAll("#printContent > table > tr");
|
||||
if (!document.querySelector("#printContent > table thead")) {
|
||||
A4_HEIGHT_PX = A4_HEIGHT_PX + THEAD_HEIGHT;
|
||||
}
|
||||
fnIsPaging();
|
||||
buttonRef.value.$el.click();
|
||||
};
|
||||
const fnIsPaging = (index = 0) => {
|
||||
for (let i = index; i < elements.length; i++) {
|
||||
if (
|
||||
elements[i].offsetHeight +
|
||||
elements[i].offsetTop -
|
||||
elements[index].offsetTop >=
|
||||
A4_HEIGHT_PX
|
||||
) {
|
||||
elements[i - 1].setAttribute("style", "page-break-after: always;");
|
||||
fnIsPaging(i === index ? i + 1 : i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return { fnPrint, printObj, buttonRef };
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
<template>
|
||||
<layout-card>
|
||||
<div
|
||||
v-for="print in 2"
|
||||
:key="print"
|
||||
:id="print === 2 ? 'printContent' : ''"
|
||||
>
|
||||
<slot></slot>
|
||||
</div>
|
||||
<div class="tc mt-10" v-if="entrance === 'archive'">
|
||||
<el-button
|
||||
type="primary"
|
||||
v-print="printObj"
|
||||
v-show="false"
|
||||
ref="buttonRef"
|
||||
>
|
||||
打印
|
||||
</el-button>
|
||||
<el-button type="primary" @click="fnPrint">打印</el-button>
|
||||
</div>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutCard from "@/components/card/index.vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import usePrint from "@/assets/js/usePrint.js";
|
||||
|
||||
const { fnPrint, printObj, buttonRef } = usePrint();
|
||||
defineOptions({
|
||||
name: "LayoutPrintTablePackage",
|
||||
});
|
||||
const route = useRoute();
|
||||
const { entrance } = route.query;
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#printContent {
|
||||
width: 210mm;
|
||||
margin: auto;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: 200px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
#printContent {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
:deep {
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
|
||||
td {
|
||||
border: 1px solid var(--el-border-color);
|
||||
padding: 8px 12px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.title {
|
||||
background: var(--el-fill-color-light);
|
||||
width: 200px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,6 @@
|
|||
import { post } from "@/request/axios.js";
|
||||
|
||||
export const getBlindPlatePluggingList = (params) =>
|
||||
post("/blindboard/list", params); // 盲板抽堵作业管理列表
|
||||
export const getBlindPlatePluggingView = (params) =>
|
||||
post("/blindboard/goEdit", params); // 盲板抽堵作业管理查看
|
|
@ -0,0 +1,12 @@
|
|||
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); // 台账导入
|
||||
export const setLedgerAdd = (params) => post("/limitspace/add", params); // 台账添加
|
||||
export const setLedgerEdit = (params) => post("/limitspace/edit", params); // 台账修改
|
||||
export const setLedgerDelete = (params) => post("/limitspace/delete", params); // 台账删除
|
|
@ -24,3 +24,9 @@ export const getLearningTrainType = (params) =>
|
|||
loading: false,
|
||||
...params,
|
||||
});
|
||||
// 获取用户
|
||||
export const getUserListAllByCorp = (params) =>
|
||||
post("/user/listUserByCorp", {
|
||||
loading: false,
|
||||
...params,
|
||||
});
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
import { post } from "@/request/axios.js";
|
||||
|
||||
export const getGroundbreakingList = (params) =>
|
||||
post("/breakground/list", params); // 动土作业管理列表
|
||||
export const getGroundbreakingView = (params) =>
|
||||
post("/breakground/goEdit", params); // 动土作业管理查看
|
|
@ -0,0 +1,4 @@
|
|||
import { post } from "@/request/axios.js";
|
||||
|
||||
export const getHighList = (params) => post("/highwork/list", params); // 高处作业管理列表
|
||||
export const getHighView = (params) => post("/highwork/goEdit", params); // 高处作业管理查看
|
|
@ -0,0 +1,4 @@
|
|||
import { post } from "@/request/axios.js";
|
||||
|
||||
export const getHoistingList = (params) => post("/hoisting/list", params); // 吊装作业管理列表
|
||||
export const getHoistingView = (params) => post("/hoisting/goEdit", params); // 吊装作业管理查看
|
|
@ -0,0 +1,4 @@
|
|||
import { post } from "@/request/axios.js";
|
||||
|
||||
export const getOpenCircuitList = (params) => post("/cutroad/list", params); // 断路作业管理列表
|
||||
export const getOpenCircuitView = (params) => post("/cutroad/goEdit", params); // 断路作业管理查看
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<index-view entrance="archive" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import IndexView from "../job_data/index.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<view-info />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ViewInfo from "../job_data/view.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,144 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="查看流程图" width="1200px">
|
||||
<el-steps
|
||||
:active="fnGetStatus()"
|
||||
:process-status="fnGetProcessStatus()"
|
||||
align-center
|
||||
finish-status="success"
|
||||
>
|
||||
<el-step title="盲板抽堵作业提交">
|
||||
<template #description>
|
||||
<div>{{ fnGetProcessMessage().title }}</div>
|
||||
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
|
||||
<div>{{ fnGetProcessMessage().OPERATTIME }}</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>{{ info.LEADER_USER_NAME }}</div>
|
||||
<div>{{ info.LEADER_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>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModel } from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
info: {
|
||||
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 = {
|
||||
"-2": {
|
||||
title: "作业负责人审核打回",
|
||||
USER_NAME: info.CONSTRUCTION_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-5": {
|
||||
title: "所在单位审核打回",
|
||||
USER_NAME: info.LEADER_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_NAME,
|
||||
OPERATTIME: info.CREATTIME,
|
||||
}
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,169 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="50px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="设备管道名称/编号"
|
||||
prop="KEYWORDS"
|
||||
label-width="130px"
|
||||
>
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="entrance === 'job_data'">
|
||||
<el-form-item label="状态" prop="APPLY_STATUS">
|
||||
<el-select v-model="searchForm.APPLY_STATUS">
|
||||
<el-option
|
||||
v-for="item in stateList"
|
||||
:key="item.ID"
|
||||
:label="item.NAME"
|
||||
:value="item.ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
v-model:pagination="pagination"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="70">
|
||||
<template v-slot="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="NAME"
|
||||
label="设备管道名称"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column prop="CHECK_NO" label="编号" show-overflow-tooltip />
|
||||
<el-table-column prop="APPLY_USER_NAME" label="申请人" width="100" />
|
||||
<el-table-column prop="APPLY_DEPARTMENT_NAME" label="申请部门" />
|
||||
<el-table-column
|
||||
prop="CONSTRUCTION_USER_NAME"
|
||||
label="作业负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="LEADER_USER_NAME"
|
||||
label="所在单位负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="ACCEPT_USER_NAME"
|
||||
label="验收部门负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="审核状态">
|
||||
<template v-slot="{ row }">
|
||||
{{
|
||||
entrance === "job_data"
|
||||
? translationStatus(row.APPLY_STATUS, stateList)
|
||||
: "已归档"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnFlowChart(row)"
|
||||
v-if="entrance === 'job_data'"
|
||||
>
|
||||
流程图
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path:
|
||||
props.entrance === 'job_data'
|
||||
? '/blind_plate_plugging/job_data/view'
|
||||
: '/blind_plate_plugging/archive/view',
|
||||
query: { BLINDBOARD_ID: row.BLINDBOARD_ID, entrance },
|
||||
})
|
||||
"
|
||||
>
|
||||
审批表详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<flow-chart
|
||||
v-model:visible="data.flowChartDialog.visible"
|
||||
:info="data.flowChartDialog.info"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { reactive } from "vue";
|
||||
import FlowChart from "./components/flow_chart.vue";
|
||||
import { getBlindPlatePluggingList } from "@/request/blind_plate_plugging.js";
|
||||
|
||||
const props = defineProps({
|
||||
entrance: {
|
||||
type: String,
|
||||
default: "job_data",
|
||||
},
|
||||
});
|
||||
const stateList = [
|
||||
{ ID: "0", NAME: "待提交" },
|
||||
{ ID: "1", NAME: "作业负责人待审核" },
|
||||
{ ID: "4", NAME: "所在单位领导人待审核" },
|
||||
{ ID: "5", NAME: "待验收" },
|
||||
{ ID: "6", NAME: "验收归档" },
|
||||
{ ID: "-2", NAME: "作业负责人待审核打回" },
|
||||
{ ID: "-5", NAME: "所在单位领导人待审核打回" },
|
||||
{ ID: "-6", NAME: "待验收打回" },
|
||||
];
|
||||
const router = useRouter();
|
||||
const listData = useListData(getBlindPlatePluggingList, {
|
||||
otherParams: {
|
||||
APPLY_STATUS: props.entrance === "archive" ? "6" : "",
|
||||
},
|
||||
});
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData;
|
||||
const data = reactive({
|
||||
flowChartDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnFlowChart = (info) => {
|
||||
data.flowChartDialog.visible = true;
|
||||
data.flowChartDialog.info = info;
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,322 @@
|
|||
<template>
|
||||
<layout-print-table-package>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left">
|
||||
盲板抽堵安全作业票
|
||||
</el-divider>
|
||||
<div class="tr">编号:{{ data.info.CHECK_NO }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">申请单位</td>
|
||||
<td colspan="2">{{ data.info.APPLY_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业单位</td>
|
||||
<td colspan="2">{{ data.info.CONSTRUCTION_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业类别</td>
|
||||
<td>
|
||||
<input
|
||||
:checked="data.info.WORK_TYPE === 1"
|
||||
type="checkbox"
|
||||
disabled
|
||||
/>堵盲板
|
||||
<input
|
||||
:checked="data.info.WORK_TYPE === 2"
|
||||
type="checkbox"
|
||||
disabled
|
||||
/>抽盲板
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2" class="title">设备、管道名称</td>
|
||||
<td colspan="3" class="title">管道参数</td>
|
||||
<td colspan="3" class="title">盲板参数</td>
|
||||
<td rowspan="2" class="title">实际作业开始时间</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">介质</td>
|
||||
<td class="title">温度</td>
|
||||
<td class="title">压力</td>
|
||||
<td class="title">材质</td>
|
||||
<td class="title">规格</td>
|
||||
<td class="title">编号</td>
|
||||
</tr>
|
||||
<tr v-for="(item, index) in data.boardList" :key="index">
|
||||
<td v-if="index === 0" :rowspan="data.boardList.length">
|
||||
{{ data.info.NAME }}
|
||||
</td>
|
||||
<td v-if="index === 0" :rowspan="data.boardList.length">
|
||||
{{ data.info.MEDIUM }}
|
||||
</td>
|
||||
<td v-if="index === 0" :rowspan="data.boardList.length">
|
||||
{{ data.info.TEMPERATURE }}
|
||||
</td>
|
||||
<td v-if="index === 0" :rowspan="data.boardList.length">
|
||||
{{ data.info.PRESSURE }}
|
||||
</td>
|
||||
<td>{{ item.BOARD_MATERIAL }}</td>
|
||||
<td>{{ item.BOARD_SPECIFICATION }}</td>
|
||||
<td>{{ item.BOARD_NO }}</td>
|
||||
<td v-if="index === 0" :rowspan="data.boardList.length">
|
||||
{{ data.info.BOARD_INSTALL_TIME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<div>盲板位置图(可另附图)及编号:</div>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
"
|
||||
>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.BOARD_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<div>
|
||||
编制人:
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.APPLY_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
{{ data.info.APPLY_USER_SIGNER_TIME }}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="title">作业负责人</td>
|
||||
<td colspan="2">{{ data.info.CONSTRUCTION_USER_NAME }}</td>
|
||||
<td class="title">作业人</td>
|
||||
<td>{{ data.info.WORK_USER }}</td>
|
||||
<td class="title">监护人</td>
|
||||
<td v-if="data.info.GUARDIAN_USER_SIGNER_PATH" colspan="5">
|
||||
<div 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 colspan="2" class="title">关联的其他特殊作业及安全作业票编号</td>
|
||||
<td colspan="6">{{ data.info.SPECIAL_WORK }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="title">风险辨识结果</td>
|
||||
<td colspan="6">{{ data.info.BOARD_HARM }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 80px">序号</td>
|
||||
<td>安全措施</td>
|
||||
<td style="width: 100px">是否涉及</td>
|
||||
<td style="width: 100px">确认人</td>
|
||||
</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" checked disabled /> 涉 及
|
||||
</span>
|
||||
<span v-if="item.STATUS === '-1'">
|
||||
<input type="radio" checked disabled /> 不涉及
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.CONFIRM_NAME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
v-if="
|
||||
data.info.APPLY_USER_MEASURES ||
|
||||
data.info.CONSTRUCTION_USER_MEASURES ||
|
||||
data.info.LEADER_USER_MEASURES
|
||||
"
|
||||
>
|
||||
<td>{{ data.measuresList.length + 1 }}</td>
|
||||
<td colspan="3">
|
||||
<div
|
||||
v-if="data.info.APPLY_USER_MEASURES"
|
||||
style="display: flex; justify-content: space-between"
|
||||
>
|
||||
<span>其他安全措施:{{ data.info.APPLY_USER_MEASURES }}</span>
|
||||
<span>编制人:{{ data.info.APPLY_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="data.info.CONSTRUCTION_USER_MEASURES"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.CONSTRUCTION_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.CONSTRUCTION_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="data.info.LEADER_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>
|
||||
</td>
|
||||
</tr>
|
||||
</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>
|
||||
<td colspan="10">
|
||||
<div
|
||||
v-for="item in data.imgList"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.CONSTRUCTION_USER_SIGNER_PATH">
|
||||
<td colspan="8">
|
||||
<div>作业负责人意见:{{ data.info.CONSTRUCTION_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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="8">
|
||||
<div>所在单位意见:{{ data.info.LEADER_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.imgList1.length > 0">
|
||||
<td colspan="10">
|
||||
<div>完工验收:{{ data.info.ACCEPT_CONTENT }}</div>
|
||||
<div
|
||||
v-for="item in data.imgList1"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</layout-print-table-package>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { getBlindPlatePluggingView } from "@/request/blind_plate_plugging.js";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { BLINDBOARD_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
imgList: [],
|
||||
imgList1: [],
|
||||
boardList: [],
|
||||
measuresList: [],
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
const resData = await getBlindPlatePluggingView({ BLINDBOARD_ID });
|
||||
data.info = resData.pd;
|
||||
data.imgList = resData.imgList;
|
||||
data.imgList1 = resData.imgList1;
|
||||
data.boardList = resData.boardList;
|
||||
data.measuresList = resData.measuresList;
|
||||
data.info.APPLY_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[0];
|
||||
data.info.CONSTRUCTION_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[1];
|
||||
data.info.LEADER_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[2];
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<index-view entrance="archive" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import IndexView from "../job_data/index.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<view-info />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ViewInfo from "../job_data/view.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,154 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="查看流程图" width="1200px">
|
||||
<el-steps
|
||||
:active="fnGetStatus()"
|
||||
:process-status="fnGetProcessStatus()"
|
||||
align-center
|
||||
finish-status="success"
|
||||
>
|
||||
<el-step title="受限空间作业提交">
|
||||
<template #description>
|
||||
<div>{{ fnGetProcessMessage().title }}</div>
|
||||
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
|
||||
<div>{{ fnGetProcessMessage().OPERATTIME }}</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>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModel } from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
info: {
|
||||
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,
|
||||
}
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,150 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="50px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="编号" prop="KEYWORDS">
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="entrance === 'job_data'">
|
||||
<el-form-item label="状态" prop="APPLY_STATUS">
|
||||
<el-select v-model="searchForm.APPLY_STATUS">
|
||||
<el-option
|
||||
v-for="item in stateList"
|
||||
:key="item.ID"
|
||||
:label="item.NAME"
|
||||
:value="item.ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
v-model:pagination="pagination"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="70">
|
||||
<template v-slot="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="CHECK_NO" label="编号" />
|
||||
<el-table-column prop="APPLY_USER_NAME" label="申请人" />
|
||||
<el-table-column prop="ANALYZE_USER_NAME" label="分析人" />
|
||||
<el-table-column prop="CONFIRM_USER_NAME" label="作业负责人" />
|
||||
<el-table-column prop="APPROVE_USER_NAME" label="所在单位负责人" />
|
||||
<el-table-column prop="ACCEPT_USER_NAME" label="验收部门负责人" />
|
||||
<el-table-column label="审核状态">
|
||||
<template v-slot="{ row }">
|
||||
{{
|
||||
entrance === "job_data"
|
||||
? translationStatus(row.APPLY_STATUS, stateList)
|
||||
: "已归档"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnFlowChart(row)"
|
||||
v-if="entrance === 'job_data'"
|
||||
>
|
||||
流程图
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path:
|
||||
props.entrance === 'job_data'
|
||||
? '/confined_space/job_data/view'
|
||||
: '/confined_space/archive/view',
|
||||
query: { CONFINEDSPACE_ID: row.CONFINEDSPACE_ID, entrance },
|
||||
})
|
||||
"
|
||||
>
|
||||
审批表详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<flow-chart
|
||||
v-model:visible="data.flowChartDialog.visible"
|
||||
:info="data.flowChartDialog.info"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { getConfinedSpaceList } from "@/request/confined_space.js";
|
||||
import { reactive } from "vue";
|
||||
import FlowChart from "./components/flow_chart.vue";
|
||||
|
||||
const props = defineProps({
|
||||
entrance: {
|
||||
type: String,
|
||||
default: "job_data",
|
||||
},
|
||||
});
|
||||
const stateList = [
|
||||
{ ID: "0", NAME: "受限空间作业待提交" },
|
||||
{ ID: "1", NAME: "作业负责人待审核" },
|
||||
{ ID: "4", NAME: "所在单位待审核" },
|
||||
{ ID: "5", NAME: "待验收" },
|
||||
{ ID: "6", NAME: "验收归档" },
|
||||
{ ID: "-4", NAME: "作业负责人审核打回" },
|
||||
{ ID: "-5", NAME: "所在单位审核打回" },
|
||||
{ ID: "-6", NAME: "验收打回" },
|
||||
{ ID: "-99", NAME: "已作废(监护人未签字)" },
|
||||
{ ID: "-98", NAME: "已作废(未进行气体检测)" },
|
||||
];
|
||||
const router = useRouter();
|
||||
const listData = useListData(getConfinedSpaceList, {
|
||||
otherParams: {
|
||||
APPLY_STATUS: props.entrance === "archive" ? "6" : "",
|
||||
},
|
||||
});
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData;
|
||||
const data = reactive({
|
||||
flowChartDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnFlowChart = (info) => {
|
||||
data.flowChartDialog.visible = true;
|
||||
data.flowChartDialog.info = info;
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,318 @@
|
|||
<template>
|
||||
<layout-print-table-package>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left">
|
||||
受限空间安全作业票
|
||||
</el-divider>
|
||||
<div class="tr">编号:{{ data.info.CHECK_NO }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">作业申请单位</td>
|
||||
<td colspan="5">{{ data.info.APPLY_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业申请时间</td>
|
||||
<td colspan="3">{{ data.info.CREATTIME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">受限空间名称</td>
|
||||
<td colspan="5">{{ data.info.LIMITSPACE_NAME }}</td>
|
||||
<td class="title">受限空间内原有介质名称</td>
|
||||
<td colspan="3">{{ data.info.MEDIUM_NAME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业内容</td>
|
||||
<td colspan="9">{{ data.info.WORK_CONTENT }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业单位</td>
|
||||
<td colspan="5">{{ data.info.CONFIRM_DEPARTMENT_NAME }}</td>
|
||||
<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>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">风险辨识结果</td>
|
||||
<td colspan="9">{{ data.info.RISK_IDENTIFICATION }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td :rowspan="3 + data.gasList.length" class="title">气体分析</td>
|
||||
<td class="title" rowspan="2">分析项目</td>
|
||||
<td class="title" colspan="2">有毒有害气体名称</td>
|
||||
<td class="title" colspan="2">可燃气体名称</td>
|
||||
<td class="title" rowspan="2">氧气含量</td>
|
||||
<td class="title" rowspan="3">取样分析时间</td>
|
||||
<td class="title" rowspan="3">分析部位</td>
|
||||
<td class="title" rowspan="3">分析人</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td :style="{ padding: data.gas.GAS_NAME1 ? '8px' : '16px' }">
|
||||
{{ data.gas.GAS_NAME1 }}
|
||||
</td>
|
||||
<td :style="{ padding: data.gas.GAS_NAME2 ? '8px' : '16px' }">
|
||||
{{ data.gas.GAS_NAME2 }}
|
||||
</td>
|
||||
<td :style="{ padding: data.gas.GAS_NAME3 ? '8px' : '16px' }">
|
||||
{{ data.gas.GAS_NAME3 }}
|
||||
</td>
|
||||
<td :style="{ padding: data.gas.GAS_NAME4 ? '8px' : '16px' }">
|
||||
{{ data.gas.GAS_NAME4 }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">合格标准</td>
|
||||
<td>{{ data.gas.GAS_STANDARD1 }}</td>
|
||||
<td>{{ data.gas.GAS_STANDARD2 }}</td>
|
||||
<td>{{ data.gas.GAS_STANDARD3 }}</td>
|
||||
<td>{{ data.gas.GAS_STANDARD4 }}</td>
|
||||
<td>19.5% 〜21%(体积分数)</td>
|
||||
</tr>
|
||||
<tr v-for="(item, index) in data.gasList" :key="index">
|
||||
<td v-if="index === 0" :rowspan="data.gasList.length" class="title">
|
||||
分析数据
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="data.gas.GAS_NAME1">{{ item.DATA1 }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="data.gas.GAS_NAME2">{{ item.DATA2 }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="data.gas.GAS_NAME3">{{ item.DATA3 }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="data.gas.GAS_NAME4">{{ item.DATA4 }}</span>
|
||||
</td>
|
||||
<td>{{ item.OXYGEN_CONTENT }}</td>
|
||||
<td>{{ item.ANALYZE_TIME }}</td>
|
||||
<td>{{ item.ANALYZE_PLACE }}</td>
|
||||
<td>{{ item.ANALYZE_USER }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业实施时间</td>
|
||||
<td colspan="9">
|
||||
{{ data.info.WORK_START_DATE }}至{{ data.info.WORK_END_DATE }}止
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="10">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 80px">序号</td>
|
||||
<td>安全措施</td>
|
||||
<td style="width: 100px">是否涉及</td>
|
||||
<td style="width: 100px">确认人</td>
|
||||
</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" checked disabled /> 涉 及
|
||||
</span>
|
||||
<span v-if="item.STATUS === '-1'">
|
||||
<input type="radio" checked disabled /> 不涉及
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.CONFIRM_NAME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
v-if="
|
||||
data.info.CONFIRM_USER_MEASURES ||
|
||||
data.info.APPROVE_USER_MEASURES
|
||||
"
|
||||
>
|
||||
<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>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</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>
|
||||
<td colspan="10">
|
||||
<div
|
||||
v-for="item in data.imgList"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.CONFIRM_USER_SIGNER_PATH">
|
||||
<td colspan="10">
|
||||
<div>作业负责人意见:{{ data.info.CONFIRM_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.CONFIRM_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ data.info.CONFIRM_USER_SIGNER_TIME }}</span>
|
||||
</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"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</layout-print-table-package>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
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";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { CONFINEDSPACE_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
gasList: [],
|
||||
gas: {},
|
||||
measuresList: [],
|
||||
imgList: [],
|
||||
imgList1: [],
|
||||
});
|
||||
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("");
|
||||
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.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];
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,191 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="type === 'edit' ? '修改' : '新增'"
|
||||
:before-close="fnClose"
|
||||
>
|
||||
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="受限空间名称" prop="NAME">
|
||||
<el-input v-model="form.NAME" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="受限空间编号" prop="NUMBER">
|
||||
<el-input v-model="form.NUMBER" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="受限空间类型" prop="LIMITSPACETYPE">
|
||||
<el-select v-model="form.LIMITSPACETYPE">
|
||||
<el-option
|
||||
v-for="item in typeOfConfinedSpaceList"
|
||||
:key="item.BIANMA"
|
||||
:label="item.NAME"
|
||||
:value="item.BIANMA"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="位置及范围" prop="POSITIONSCOPE">
|
||||
<el-input v-model="form.POSITIONSCOPE" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="主要危险及有害因素" prop="PRIMARYHAZARD">
|
||||
<el-input v-model="form.PRIMARYHAZARD" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="风险等级" prop="RISKGRADE">
|
||||
<el-select v-model="form.RISKGRADE">
|
||||
<el-option
|
||||
v-for="item in riskLevelList"
|
||||
:key="item.BIANMA"
|
||||
:label="item.NAME"
|
||||
:value="item.BIANMA"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="最多作业人数" prop="MAXPERSON">
|
||||
<el-input v-model="form.MAXPERSON" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="应急指导书" prop="HASINSTRUCTOR">
|
||||
<el-radio-group v-model="form.HASINSTRUCTOR">
|
||||
<el-radio :label="'1'">有</el-radio>
|
||||
<el-radio :label="'0'">无</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="DESCR">
|
||||
<el-input v-model="form.DESCR" type="textarea" autosize />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="填报人" prop="INFORMANT">
|
||||
<el-select v-model="form.INFORMANT">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.USER_ID"
|
||||
:label="item.USERNAME"
|
||||
:value="item.USER_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主要负责人" prop="PRINCIPAL">
|
||||
<el-select v-model="form.PRINCIPAL">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.USER_ID"
|
||||
:label="item.USERNAME"
|
||||
:value="item.USER_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="填报时间" prop="COMPILETIME">
|
||||
<el-date-picker
|
||||
v-model="form.COMPILETIME"
|
||||
value-format="YYYY-MM-DD"
|
||||
format="YYYY-MM-DD"
|
||||
type="date"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="fnClose">取消</el-button>
|
||||
<el-button type="primary" @click="fnSubmit"> 确定 </el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
import { useVModels } from "@vueuse/core";
|
||||
import {
|
||||
layoutFnGetRiskLevel,
|
||||
layoutFnGetTypeOfConfinedSpace,
|
||||
} from "@/assets/js/data_dictionary.js";
|
||||
import { getUserListAllByCorp } from "@/request/data_dictionary.js";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { setLedgerAdd, setLedgerEdit } from "@/request/confined_space.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
default: "",
|
||||
},
|
||||
form: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => ({}),
|
||||
},
|
||||
});
|
||||
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||
const { visible, form } = useVModels(props, emits);
|
||||
const rules = {
|
||||
NUMBER: [{ required: true, message: "请输入受限空间编号", trigger: "blur" }],
|
||||
NAME: [{ required: true, message: "请输入受限空间名称", trigger: "blur" }],
|
||||
LIMITSPACETYPE: [
|
||||
{ required: true, message: "请选择受限空间类型", trigger: "blur" },
|
||||
],
|
||||
POSITIONSCOPE: [
|
||||
{ required: true, message: "请输入位置及范围", trigger: "blur" },
|
||||
],
|
||||
PRIMARYHAZARD: [
|
||||
{ required: true, message: "请输入主要危险及有害因素", trigger: "blur" },
|
||||
],
|
||||
RISKGRADE: [{ required: true, message: "请选择风险等级", trigger: "blur" }],
|
||||
MAXPERSON: [
|
||||
{ required: true, message: "请输入最多作业人数", trigger: "blur" },
|
||||
],
|
||||
HASINSTRUCTOR: [
|
||||
{ required: true, message: "请输入应急指导书", trigger: "blur" },
|
||||
],
|
||||
INFORMANT: [{ required: true, message: "请选择填报人", trigger: "blur" }],
|
||||
PRINCIPAL: [{ required: true, message: "请选择主要负责人", trigger: "blur" }],
|
||||
COMPILETIME: [{ required: true, message: "请选择填报时间", trigger: "blur" }],
|
||||
};
|
||||
const formRef = ref(null);
|
||||
const typeOfConfinedSpaceList = await layoutFnGetTypeOfConfinedSpace();
|
||||
const riskLevelList = await layoutFnGetRiskLevel();
|
||||
const { userList } = await getUserListAllByCorp();
|
||||
const fnClose = () => {
|
||||
formRef.value.resetFields();
|
||||
visible.value = false;
|
||||
};
|
||||
const fnSubmit = debounce(
|
||||
1000,
|
||||
async () => {
|
||||
await useFormValidate(formRef);
|
||||
if (props.type === "add") await setLedgerAdd({ ...form.value });
|
||||
if (props.type === "edit") await setLedgerEdit({ ...form.value });
|
||||
fnClose();
|
||||
ElMessage.success("保存成功");
|
||||
emits("get-data");
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,68 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="导入" :before-close="fnClose">
|
||||
<el-form ref="formRef" :model="data.form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="附件" prop="file">
|
||||
<layout-upload v-model:file-list="data.form.file" accept=".xls" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="fnExportTemplates">导出模板</el-button>
|
||||
<el-button type="primary" @click="fnSubmit">确定</el-button>
|
||||
<el-button @click="fnClose">取消</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutUpload from "@/components/upload/index.vue";
|
||||
import { useVModel } from "@vueuse/core";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { reactive, ref } from "vue";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { setLedgerImport } from "@/request/confined_space.js";
|
||||
|
||||
const VITE_TEMPLATE_URL = import.meta.env.VITE_TEMPLATE_URL;
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
const emits = defineEmits(["update:visible", "get-data"]);
|
||||
const visible = useVModel(props, "visible", emits);
|
||||
const rules = {
|
||||
file: [{ required: true, message: "附件不能为空", trigger: "change" }],
|
||||
};
|
||||
const formRef = ref(null);
|
||||
const data = reactive({
|
||||
form: {
|
||||
file: [],
|
||||
},
|
||||
});
|
||||
const fnExportTemplates = async () => {
|
||||
await ElMessageBox.confirm("确定要下载excel模板吗?", { type: "warning" });
|
||||
window.open(`${VITE_TEMPLATE_URL}/template/limitSpace.xls`);
|
||||
};
|
||||
const fnClose = () => {
|
||||
formRef.value.resetFields();
|
||||
visible.value = false;
|
||||
};
|
||||
const fnSubmit = debounce(
|
||||
1000,
|
||||
async () => {
|
||||
await useFormValidate(formRef, "请上传附件");
|
||||
const formData = new FormData();
|
||||
formData.append("FFILE", data.form.file[0].raw);
|
||||
formData.append("FFILEName", data.form.file[0].name);
|
||||
const resData = await setLedgerImport(formData);
|
||||
ElMessage.success(resData.msg);
|
||||
fnClose();
|
||||
emits("get-data");
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,153 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="130px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="受限空间编号/名称" prop="KEYWORDS">
|
||||
<el-input v-model="searchForm.KEYWORDS" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px" class="end">
|
||||
<el-button @click="data.importDialogVisible = true">
|
||||
导入
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
@get-data="fnGetData"
|
||||
v-model:pagination="pagination"
|
||||
>
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="NUMBER" label="受限空间编号" />
|
||||
<el-table-column prop="NAME" label="受限空间名称" />
|
||||
<el-table-column prop="LIMITSPACETYPENAME" label="受限空间类型" />
|
||||
<el-table-column prop="RISKGRADENAME" label="风险等级" />
|
||||
<el-table-column prop="INFORMANTNAME" label="填报人" />
|
||||
<el-table-column prop="PRINCIPALNAME" label="主要负责人" />
|
||||
<el-table-column prop="COMPILETIME" label="填报时间" />
|
||||
<el-table-column label="操作" width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.edit"
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnAddOrEdit(row, 'edit')"
|
||||
>
|
||||
修改
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.del"
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnDelete(row.LIMITSPACE_ID)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<template #button>
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.add"
|
||||
type="primary"
|
||||
@click="fnAddOrEdit({}, 'add')"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</template>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<import-file
|
||||
v-model:visible="data.importDialogVisible"
|
||||
@get-data="fnResetPagination"
|
||||
/>
|
||||
<add
|
||||
v-model:visible="data.addOrEditDialog.visible"
|
||||
v-model:form="data.addOrEditDialog.form"
|
||||
:type="data.addOrEditDialog.type"
|
||||
@get-data="fnResetPagination"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { nextTick, reactive } from "vue";
|
||||
import LayoutTable from "@/components/table/index";
|
||||
import { serialNumber } from "@/assets/js/utils";
|
||||
import LayoutCard from "@/components/card/index.vue";
|
||||
import { getLedgerList, setLedgerDelete } from "@/request/confined_space.js";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||
import { cloneDeep } from "lodash-es";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import ImportFile from "./components/import_file.vue";
|
||||
import Add from "./components/add.vue";
|
||||
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||
useListData(getLedgerList);
|
||||
const data = reactive({
|
||||
importDialogVisible: false,
|
||||
addOrEditDialog: {
|
||||
visible: false,
|
||||
type: "",
|
||||
form: {
|
||||
NUMBER: "",
|
||||
NAME: "",
|
||||
LIMITSPACETYPE: "",
|
||||
POSITIONSCOPE: "",
|
||||
PRIMARYHAZARD: "",
|
||||
RISKGRADE: "",
|
||||
MAXPERSON: "",
|
||||
HASINSTRUCTOR: "1",
|
||||
INFORMANT: "",
|
||||
PRINCIPAL: "",
|
||||
COMPILETIME: "",
|
||||
DESCR: "",
|
||||
},
|
||||
},
|
||||
});
|
||||
const buttonJurisdiction = await useButtonJurisdiction("limitspace");
|
||||
const fnAddOrEdit = async (row, type) => {
|
||||
data.addOrEditDialog.visible = true;
|
||||
await nextTick();
|
||||
data.addOrEditDialog.type = type;
|
||||
if (type === "edit") data.addOrEditDialog.form = cloneDeep(row);
|
||||
};
|
||||
const fnDelete = debounce(
|
||||
1000,
|
||||
async (LIMITSPACE_ID) => {
|
||||
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||
await setLedgerDelete({ LIMITSPACE_ID });
|
||||
ElMessage.success("删除成功");
|
||||
fnResetPagination();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -2,7 +2,7 @@
|
|||
<layout-card>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:rules="data.rules"
|
||||
:rules="rules"
|
||||
:model="data.form"
|
||||
label-width="110px"
|
||||
>
|
||||
|
@ -57,6 +57,14 @@ import useFormValidate from "@/assets/js/useFormValidate.js";
|
|||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const { QUALIFICATIONS_ID } = route.query;
|
||||
const rules = {
|
||||
NAME: [{ required: true, message: "名称不能为空", trigger: "blur" }],
|
||||
VALIDITYTIME: [
|
||||
{ required: true, message: "证书有效期不能为空", trigger: "blur" },
|
||||
],
|
||||
NUMBER: [{ required: true, message: "证书编号不能为空", trigger: "blur" }],
|
||||
file: [{ required: true, message: "证书图片不能为空", trigger: "blur" }],
|
||||
};
|
||||
const formRef = ref(null);
|
||||
const data = reactive({
|
||||
form: {
|
||||
|
@ -67,14 +75,6 @@ const data = reactive({
|
|||
file: [],
|
||||
verifyFileUrl: "12",
|
||||
},
|
||||
rules: {
|
||||
NAME: [{ required: true, message: "名称不能为空", trigger: "blur" }],
|
||||
VALIDITYTIME: [
|
||||
{ required: true, message: "证书有效期不能为空", trigger: "blur" },
|
||||
],
|
||||
NUMBER: [{ required: true, message: "证书编号不能为空", trigger: "blur" }],
|
||||
file: [{ required: true, message: "证书图片不能为空", trigger: "blur" }],
|
||||
},
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
if (!QUALIFICATIONS_ID) return;
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
<layout-card>
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="证书名称">
|
||||
{{ data.info.NAME }}
|
||||
{{ info.NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="证书有效期">
|
||||
{{ data.info.VALIDITYTIME }}
|
||||
{{ info.VALIDITYTIME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="证书编号">
|
||||
{{ data.info.NUMBER }}
|
||||
{{ info.NUMBER }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="备注">
|
||||
{{ data.info.DESCR }}
|
||||
{{ info.DESCR }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="证书图片">
|
||||
<img
|
||||
v-viewer
|
||||
v-for="item in data.info.file"
|
||||
v-for="item in info.file"
|
||||
:key="item.FILEPATH"
|
||||
:src="item.url"
|
||||
width="100"
|
||||
|
@ -31,19 +31,17 @@
|
|||
<script setup>
|
||||
import LayoutCard from "@/components/card/index.vue";
|
||||
import { getIndustryQualificationsView } from "@/request/enterprise_management.js";
|
||||
import { reactive } from "vue";
|
||||
import { ref } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { addingPrefixToFile } from "@/assets/js/utils.js";
|
||||
|
||||
const route = useRoute();
|
||||
const { QUALIFICATIONS_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
});
|
||||
const info = ref({});
|
||||
const fnGetData = async () => {
|
||||
const resData = await getIndustryQualificationsView({ QUALIFICATIONS_ID });
|
||||
data.info = resData.pd;
|
||||
data.info.file = addingPrefixToFile(resData.hImgs);
|
||||
info.value = resData.pd;
|
||||
info.value.file = addingPrefixToFile(resData.hImgs);
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<el-form
|
||||
ref="formRef"
|
||||
:model="data.form"
|
||||
:rules="data.rules"
|
||||
:rules="rules"
|
||||
label-width="210px"
|
||||
>
|
||||
<el-row>
|
||||
|
@ -486,6 +486,77 @@ const formRef = ref(null);
|
|||
const territoryCascaderRef = ref(null);
|
||||
const industryCascaderRef = ref(null);
|
||||
const economicTypeCascaderRef = ref(null);
|
||||
const rules = {
|
||||
CORP_NAME: [{ required: true, message: "企业名称不能为空", trigger: "blur" }],
|
||||
CODE: [
|
||||
{ required: true, message: "统一社会信用代码不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/,
|
||||
message: "请输入正确的统一社会信用代码",
|
||||
},
|
||||
],
|
||||
POSSESSION: [{ required: true, message: "属地不能为空", trigger: "blur" }],
|
||||
INDUSTRYALL: [
|
||||
{ required: true, message: "所属行业不能为空", trigger: "blur" },
|
||||
],
|
||||
ECO_TYPEALL: [
|
||||
{ required: true, message: "经济类型不能为空", trigger: "blur" },
|
||||
],
|
||||
ADDRESS_BUSINESS: [
|
||||
{
|
||||
required: true,
|
||||
message: "企事业单位经营地址不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
CORP_STATE: [
|
||||
{ required: true, message: "企业状态不能为空", trigger: "blur" },
|
||||
],
|
||||
LONGITUDE: [{ required: true, message: "经度不能为空", trigger: "blur" }],
|
||||
LATITUDE: [{ required: true, message: "纬度不能为空", trigger: "blur" }],
|
||||
CONTACTS: [
|
||||
{ required: true, message: "主要负责人不能为空", trigger: "blur" },
|
||||
],
|
||||
CONTACTS_PHONE: [
|
||||
{ required: true, message: "主要负责人电话不能为空", trigger: "blur" },
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
TRAINTYPE: [
|
||||
{ required: true, message: "培训行业类型不能为空", trigger: "blur" },
|
||||
],
|
||||
bus_images: [
|
||||
{ required: true, message: "营业执照不能为空", trigger: "blur" },
|
||||
],
|
||||
LR_MOBILE: [
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
SAFETY_PHONE: [
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
SAFETY_NUMBER: [
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
};
|
||||
const data = reactive({
|
||||
form: {
|
||||
CORP_NAME: "",
|
||||
|
@ -537,79 +608,6 @@ const data = reactive({
|
|||
WHETHER_LIQUIDAMMONIA: "",
|
||||
WHETHER_PIPELINE: "",
|
||||
},
|
||||
rules: {
|
||||
CORP_NAME: [
|
||||
{ required: true, message: "企业名称不能为空", trigger: "blur" },
|
||||
],
|
||||
CODE: [
|
||||
{ required: true, message: "统一社会信用代码不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/,
|
||||
message: "请输入正确的统一社会信用代码",
|
||||
},
|
||||
],
|
||||
POSSESSION: [{ required: true, message: "属地不能为空", trigger: "blur" }],
|
||||
INDUSTRYALL: [
|
||||
{ required: true, message: "所属行业不能为空", trigger: "blur" },
|
||||
],
|
||||
ECO_TYPEALL: [
|
||||
{ required: true, message: "经济类型不能为空", trigger: "blur" },
|
||||
],
|
||||
ADDRESS_BUSINESS: [
|
||||
{
|
||||
required: true,
|
||||
message: "企事业单位经营地址不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
CORP_STATE: [
|
||||
{ required: true, message: "企业状态不能为空", trigger: "blur" },
|
||||
],
|
||||
LONGITUDE: [{ required: true, message: "经度不能为空", trigger: "blur" }],
|
||||
LATITUDE: [{ required: true, message: "纬度不能为空", trigger: "blur" }],
|
||||
CONTACTS: [
|
||||
{ required: true, message: "主要负责人不能为空", trigger: "blur" },
|
||||
],
|
||||
CONTACTS_PHONE: [
|
||||
{ required: true, message: "主要负责人电话不能为空", trigger: "blur" },
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
TRAINTYPE: [
|
||||
{ required: true, message: "培训行业类型不能为空", trigger: "blur" },
|
||||
],
|
||||
bus_images: [
|
||||
{ required: true, message: "营业执照不能为空", trigger: "blur" },
|
||||
],
|
||||
LR_MOBILE: [
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
SAFETY_PHONE: [
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
SAFETY_NUMBER: [
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern:
|
||||
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
},
|
||||
],
|
||||
},
|
||||
mapDialog: {
|
||||
visible: false,
|
||||
loading: true,
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<index-view entrance="archive" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import IndexView from "../job_data/index.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<view-info />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ViewInfo from "../job_data/view.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,171 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="查看流程图" width="1500px">
|
||||
<el-steps
|
||||
:active="fnGetStatus()"
|
||||
:process-status="fnGetProcessStatus()"
|
||||
align-center
|
||||
finish-status="success"
|
||||
>
|
||||
<el-step title="动土作业提交">
|
||||
<template #description>
|
||||
<div>{{ fnGetProcessMessage().title }}</div>
|
||||
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
|
||||
<div>{{ fnGetProcessMessage().OPERATTIME }}</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.PRODUCTION_USER_NAME">{{ "已跳过" }}</div>
|
||||
<div v-else>{{ info.PRODUCTION_USER_NAME }}</div>
|
||||
<div>{{ info.PRODUCTION_USER_SIGNER_TIME }}</div>
|
||||
</template>
|
||||
</el-step>
|
||||
<el-step title="有关部门意见">
|
||||
<template #description>
|
||||
<div v-if="!info.SAFETY_USER_NAME">{{ "已跳过" }}</div>
|
||||
<div v-else>{{ info.SAFETY_USER_NAME }}</div>
|
||||
<div>{{ info.SAFETY_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>{{ 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>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModel } from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
info: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => {},
|
||||
},
|
||||
});
|
||||
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.PRODUCTION_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-4": {
|
||||
title: "有关部门审核打回",
|
||||
USER_NAME: info.SAFETY_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-5": {
|
||||
title: "审批部门审核打回",
|
||||
USER_NAME: info.LEADER_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-6": {
|
||||
title: "验收打回",
|
||||
AUSER_NAME: info.ACCEPT_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
};
|
||||
return (
|
||||
result[props.info.APPLY_STATUS] || {
|
||||
title: "",
|
||||
USER_NAME: info.APPLY_USER_NAME,
|
||||
OPERATTIME: info.CREATTIME,
|
||||
}
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,175 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="50px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="编号" prop="KEYWORDS">
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="entrance === 'job_data'">
|
||||
<el-form-item label="状态" prop="APPLY_STATUS">
|
||||
<el-select v-model="searchForm.APPLY_STATUS">
|
||||
<el-option
|
||||
v-for="item in stateList"
|
||||
:key="item.ID"
|
||||
:label="item.NAME"
|
||||
:value="item.ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
v-model:pagination="pagination"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="70">
|
||||
<template v-slot="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="CHECK_NO" label="编号" show-overflow-tooltip />
|
||||
<el-table-column prop="CONSTRUCTION_DEPARTMENT_NAME" label="施工单位" />
|
||||
<el-table-column prop="APPLY_USER_NAME" label="申请人" width="100" />
|
||||
<el-table-column prop="APPLY_DEPARTMENT_NAME" label="申请部门" />
|
||||
<el-table-column
|
||||
prop="CONSTRUCTION_USER_NAME"
|
||||
label="作业负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="所在单位负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.PRODUCTION_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="有关部门负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.SAFETY_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批部门负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.LEADER_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="ACCEPT_USER_NAME"
|
||||
label="验收部门负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="审核状态">
|
||||
<template v-slot="{ row }">
|
||||
{{
|
||||
entrance === "job_data"
|
||||
? translationStatus(row.APPLY_STATUS, stateList)
|
||||
: "已归档"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnFlowChart(row)"
|
||||
v-if="entrance === 'job_data'"
|
||||
>
|
||||
流程图
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path:
|
||||
props.entrance === 'job_data'
|
||||
? '/groundbreaking/job_data/view'
|
||||
: '/groundbreaking/archive/view',
|
||||
query: { BREAKGROUND_ID: row.BREAKGROUND_ID, entrance },
|
||||
})
|
||||
"
|
||||
>
|
||||
审批表详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<flow-chart
|
||||
v-model:visible="data.flowChartDialog.visible"
|
||||
:info="data.flowChartDialog.info"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { reactive } from "vue";
|
||||
import FlowChart from "./components/flow_chart.vue";
|
||||
import { getGroundbreakingList } from "@/request/groundbreaking.js";
|
||||
|
||||
const props = defineProps({
|
||||
entrance: {
|
||||
type: String,
|
||||
default: "job_data",
|
||||
},
|
||||
});
|
||||
const stateList = [
|
||||
{ ID: "0", NAME: "动土作业待提交" },
|
||||
{ ID: "1", NAME: "作业负责人待审核" },
|
||||
{ ID: "2", NAME: "所在单位待审核" },
|
||||
{ ID: "3", NAME: "有关部门待审核" },
|
||||
{ ID: "4", NAME: "审批部门待审核" },
|
||||
{ ID: "5", NAME: "待验收" },
|
||||
{ ID: "6", NAME: "验收归档" },
|
||||
{ ID: "-2", NAME: "作业负责人审核打回" },
|
||||
{ ID: "-3", NAME: "所在单位审核打回" },
|
||||
{ ID: "-4", NAME: "有关部门审核打回" },
|
||||
{ ID: "-5", NAME: "审批部门审核打回" },
|
||||
{ ID: "-6", NAME: "验收打回" },
|
||||
];
|
||||
const router = useRouter();
|
||||
const listData = useListData(getGroundbreakingList, {
|
||||
otherParams: {
|
||||
APPLY_STATUS: props.entrance === "archive" ? "6" : "",
|
||||
},
|
||||
});
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData;
|
||||
const data = reactive({
|
||||
flowChartDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnFlowChart = (info) => {
|
||||
data.flowChartDialog.visible = true;
|
||||
data.flowChartDialog.info = info;
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,364 @@
|
|||
<template>
|
||||
<layout-print-table-package>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left"> 动土安全作业票 </el-divider>
|
||||
<div class="tr">编号:{{ data.info.CHECK_NO }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">申请单位</td>
|
||||
<td>{{ data.info.APPLY_DEPARTMENT_NAME }}</td>
|
||||
<td class="title" colspan="2">作业申请时间</td>
|
||||
<td colspan="2">{{ data.info.CREATTIME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业单位</td>
|
||||
<td>{{ data.info.CONSTRUCTION_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业地点</td>
|
||||
<td>{{ data.info.WORK_PLACE }}</td>
|
||||
<td class="title">作业内容</td>
|
||||
<td>{{ data.info.JOB_CONTENT }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">监护人</td>
|
||||
<td>
|
||||
<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>
|
||||
<td class="title" colspan="2">作业负责人</td>
|
||||
<td colspan="2">{{ data.info.CONSTRUCTION_USER_NAME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">关联的其他特殊作业及安全作业票编号</td>
|
||||
<td colspan="5">{{ data.info.SPECIAL_WORK }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<div>
|
||||
作业内容、范围、方式(包括深度、面积,并附简图):{{
|
||||
data.info.WORK_CONTENT
|
||||
}}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
"
|
||||
>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.CONTENT_IMG_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<div>
|
||||
编制人:
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.APPLY_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
{{ data.info.APPLY_USER_SIGNER_TIME }}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">风险辨识结果</td>
|
||||
<td colspan="5">
|
||||
{{ data.info.HAZARD_IDENTIFICATION?.split(";_;")[0] }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业实施时间</td>
|
||||
<td colspan="5">
|
||||
{{ data.info.WORK_START_DATE }}至{{ data.info.WORK_END_DATE }}止
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 80px">序号</td>
|
||||
<td>安全措施</td>
|
||||
<td style="width: 100px">是否涉及</td>
|
||||
<td style="width: 100px">确认人</td>
|
||||
</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 />涉 及
|
||||
</span>
|
||||
<span v-if="item.STATUS === '-1'">
|
||||
<input type="radio" disabled checked />不涉及
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.CONFIRM_NAME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
v-if="
|
||||
data.info.APPLY_USER_MEASURES ||
|
||||
data.info.CONSTRUCTION_USER_MEASURES ||
|
||||
data.info.PRODUCTION_USER_MEASURES ||
|
||||
data.info.SAFETY_USER_MEASURES ||
|
||||
data.info.LEADER_USER_MEASURES
|
||||
"
|
||||
>
|
||||
<td>{{ data.measuresList.length + 1 }}</td>
|
||||
<td colspan="3">
|
||||
<div
|
||||
v-if="data.info.APPLY_USER_MEASURES"
|
||||
style="display: flex; justify-content: space-between"
|
||||
>
|
||||
<span>其他安全措施:{{ data.info.APPLY_USER_MEASURES }}</span>
|
||||
<span>编制人:{{ data.info.APPLY_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="data.info.CONSTRUCTION_USER_MEASURES"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.CONSTRUCTION_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.CONSTRUCTION_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.PRODUCTION_USER_ID &&
|
||||
data.info.PRODUCTION_USER_MEASURES
|
||||
"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.PRODUCTION_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.PRODUCTION_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.SAFETY_USER_ID && data.info.SAFETY_USER_MEASURES
|
||||
"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.SAFETY_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.SAFETY_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.LEADER_USER_ID && data.info.LEADER_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>
|
||||
</td>
|
||||
</tr>
|
||||
</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>
|
||||
<td colspan="10">
|
||||
<div
|
||||
v-for="item in data.imgList"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.CONSTRUCTION_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>作业负责人意见:{{ data.info.CONSTRUCTION_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.PRODUCTION_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>所在单位意见:{{ data.info.PRODUCTION_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.PRODUCTION_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ data.info.PRODUCTION_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.SAFETY_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>
|
||||
有关水、电、汽、工艺、设备、消防、安全等部门会签意见:{{
|
||||
data.info.SAFETY_CONTENT
|
||||
}}
|
||||
</div>
|
||||
<div class="tr">
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.SAFETY_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ data.info.SAFETY_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.LEADER_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>审批部门意见:{{ data.info.LEADER_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.imgList1.length > 0">
|
||||
<td colspan="10">
|
||||
<div>完工验收:{{ data.info.ACCEPT_CONTENT }}</div>
|
||||
<div
|
||||
v-for="item in data.imgList1"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</layout-print-table-package>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { getGroundbreakingView } from "@/request/groundbreaking.js";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { BREAKGROUND_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
imgList: [],
|
||||
imgList1: [],
|
||||
measuresList: [],
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
const resData = await getGroundbreakingView({ BREAKGROUND_ID });
|
||||
data.info = resData.pd;
|
||||
data.imgList = resData.imgList;
|
||||
data.imgList1 = resData.imgList1;
|
||||
data.measuresList = resData.measuresList;
|
||||
data.info.APPLY_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[0];
|
||||
data.info.CONSTRUCTION_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[1];
|
||||
data.info.PRODUCTION_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[2];
|
||||
data.info.SAFETY_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[3];
|
||||
data.info.LEADER_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[4];
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<index-view entrance="archive" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import IndexView from "../job_data/index.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<view-info />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ViewInfo from "../job_data/view.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,171 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="查看流程图" width="1500px">
|
||||
<el-steps
|
||||
:active="fnGetStatus()"
|
||||
:process-status="fnGetProcessStatus()"
|
||||
align-center
|
||||
finish-status="success"
|
||||
>
|
||||
<el-step title="高处作业提交">
|
||||
<template #description>
|
||||
<div>{{ fnGetProcessMessage().title }}</div>
|
||||
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
|
||||
<div>{{ fnGetProcessMessage().OPERATTIME }}</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>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModel } from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
info: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => {},
|
||||
},
|
||||
});
|
||||
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,
|
||||
}
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,173 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="50px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="编号" prop="KEYWORDS">
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="entrance === 'job_data'">
|
||||
<el-form-item label="状态" prop="APPLY_STATUS">
|
||||
<el-select v-model="searchForm.APPLY_STATUS">
|
||||
<el-option
|
||||
v-for="item in stateList"
|
||||
:key="item.ID"
|
||||
:label="item.NAME"
|
||||
:value="item.ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
v-model:pagination="pagination"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="70">
|
||||
<template v-slot="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="CHECK_NO" label="编号" show-overflow-tooltip />
|
||||
<el-table-column prop="APPLY_USER" label="填写人" />
|
||||
<el-table-column
|
||||
prop="CONSTRUCTION_USER_NAME"
|
||||
label="作业负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="所在单位负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.LEADER_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审核部门负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.AUDIT_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批部门负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.APPROVE_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="ACCEPT_USER_NAME"
|
||||
label="验收部门负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="审核状态">
|
||||
<template v-slot="{ row }">
|
||||
{{
|
||||
entrance === "job_data"
|
||||
? translationStatus(row.APPLY_STATUS, stateList)
|
||||
: "已归档"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnFlowChart(row)"
|
||||
v-if="entrance === 'job_data'"
|
||||
>
|
||||
流程图
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path:
|
||||
props.entrance === 'job_data'
|
||||
? '/high/job_data/view'
|
||||
: '/high/archive/view',
|
||||
query: { HIGHWORK_ID: row.HIGHWORK_ID, entrance },
|
||||
})
|
||||
"
|
||||
>
|
||||
审批表详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<flow-chart
|
||||
v-model:visible="data.flowChartDialog.visible"
|
||||
:info="data.flowChartDialog.info"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { reactive } from "vue";
|
||||
import FlowChart from "./components/flow_chart.vue";
|
||||
import { getHighList } from "@/request/high.js";
|
||||
|
||||
const props = defineProps({
|
||||
entrance: {
|
||||
type: String,
|
||||
default: "job_data",
|
||||
},
|
||||
});
|
||||
const stateList = [
|
||||
{ ID: "0", NAME: "高处作业待提交" },
|
||||
{ ID: "1", NAME: "作业负责人待审核" },
|
||||
{ ID: "2", NAME: "所在单位待审核" },
|
||||
{ ID: "3", NAME: "审核部门待审核" },
|
||||
{ ID: "4", NAME: "审批部门待审核" },
|
||||
{ ID: "5", NAME: "待验收" },
|
||||
{ ID: "6", NAME: "验收归档" },
|
||||
{ ID: "-2", NAME: "作业负责人审核打回" },
|
||||
{ ID: "-3", NAME: "所在单位审核打回" },
|
||||
{ ID: "-4", NAME: "审核部门审核打回" },
|
||||
{ ID: "-5", NAME: "审批部门审核打回" },
|
||||
{ ID: "-6", NAME: "验收打回" },
|
||||
];
|
||||
const router = useRouter();
|
||||
const listData = useListData(getHighList, {
|
||||
otherParams: {
|
||||
APPLY_STATUS: props.entrance === "archive" ? "6" : "",
|
||||
},
|
||||
});
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData;
|
||||
const data = reactive({
|
||||
flowChartDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnFlowChart = (info) => {
|
||||
data.flowChartDialog.visible = true;
|
||||
data.flowChartDialog.info = info;
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,325 @@
|
|||
<template>
|
||||
<layout-print-table-package>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left"> 高处安全作业票 </el-divider>
|
||||
<div class="tr">编号:{{ data.info.CHECK_NO }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">作业申请单位</td>
|
||||
<td>{{ data.info.APPLY_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业申请时间</td>
|
||||
<td>{{ data.info.CREATTIME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业地点</td>
|
||||
<td>{{ data.info.WORK_PLACE }}</td>
|
||||
<td class="title">作业内容</td>
|
||||
<td>{{ data.info.WORK_CONTENT }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业高度</td>
|
||||
<td>{{ data.info.WORK_HIGH }}</td>
|
||||
<td class="title">高处作业级别</td>
|
||||
<td>
|
||||
{{ data.info.WORK_LEVEL === 1 ? "I级高处作业" : "" }}
|
||||
{{ data.info.WORK_LEVEL === 2 ? "II级高处作业" : "" }}
|
||||
{{ data.info.WORK_LEVEL === 3 ? "III级高处作业" : "" }}
|
||||
{{ data.info.WORK_LEVEL === 4 ? "IV级高处作业" : "" }}
|
||||
</td>
|
||||
</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 class="title">作业负责人</td>
|
||||
<td>{{ data.info.CONSTRUCTION_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>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业实施时间</td>
|
||||
<td colspan="3">
|
||||
{{ data.info.WORK_START_DATE }}至{{ data.info.WORK_END_DATE }}止
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 80px">序号</td>
|
||||
<td>安全措施</td>
|
||||
<td style="width: 100px">是否涉及</td>
|
||||
<td style="width: 100px">确认人</td>
|
||||
</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 />涉 及
|
||||
</span>
|
||||
<span v-if="item.STATUS === '-1'">
|
||||
<input type="radio" disabled checked />不涉及
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.CONFIRM_NAME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
v-if="
|
||||
data.info.CONFIRM_USER_MEASURES ||
|
||||
data.info.LEADER_USER_MEASURES ||
|
||||
data.info.AUDIT_USER_MEASURES ||
|
||||
data.info.APPROVE_USER_MEASURES
|
||||
"
|
||||
>
|
||||
<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>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">安全交底人</td>
|
||||
<td colspan="10">
|
||||
<div
|
||||
v-if="data.info.CONFESS_USER_SIGNER_PATH"
|
||||
style="text-align: right"
|
||||
>
|
||||
<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">
|
||||
<div
|
||||
v-for="item in data.imgList"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
style="text-align: right"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</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">
|
||||
<td colspan="10">
|
||||
<div>完工验收:{{ data.info.ACCEPT_CONTENT }}</div>
|
||||
<div
|
||||
v-for="item in data.imgList1"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
style="text-align: right"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</layout-print-table-package>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { getHighView } from "@/request/high.js";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { HIGHWORK_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
imgList: [],
|
||||
imgList1: [],
|
||||
measuresList: [],
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
const resData = await getHighView({ HIGHWORK_ID });
|
||||
data.info = resData.pd;
|
||||
data.imgList = resData.imgList;
|
||||
data.imgList1 = resData.imgList1;
|
||||
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];
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<index-view entrance="archive" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import IndexView from "../job_data/index.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<view-info />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ViewInfo from "../job_data/view.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,171 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="查看流程图" width="1500px">
|
||||
<el-steps
|
||||
:active="fnGetStatus()"
|
||||
:process-status="fnGetProcessStatus()"
|
||||
align-center
|
||||
finish-status="success"
|
||||
>
|
||||
<el-step title="吊装作业提交">
|
||||
<template #description>
|
||||
<div>{{ fnGetProcessMessage().title }}</div>
|
||||
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
|
||||
<div>{{ fnGetProcessMessage().OPERATTIME }}</div>
|
||||
</template>
|
||||
</el-step>
|
||||
<el-step title="作业指挥意见">
|
||||
<template #description>
|
||||
<div>{{ info.LEADER_USER_NAME }}</div>
|
||||
<div>{{ info.LEADER_USER_SIGNER_TIME }}</div>
|
||||
</template>
|
||||
</el-step>
|
||||
<el-step title="所在单位意见">
|
||||
<template #description>
|
||||
<div v-if="!info.CONSTRUCTION_USER_NAME">{{ "已跳过" }}</div>
|
||||
<div v-else>{{ info.CONSTRUCTION_USER_NAME }}</div>
|
||||
<div>{{ info.CONSTRUCTION_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>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModel } from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
info: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => {},
|
||||
},
|
||||
});
|
||||
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.LEADER_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-3": {
|
||||
title: "所在单位审核打回",
|
||||
USER_NAME: info.CONSTRUCTION_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>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,173 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="50px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="编号" prop="KEYWORDS">
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="entrance === 'job_data'">
|
||||
<el-form-item label="状态" prop="APPLY_STATUS">
|
||||
<el-select v-model="searchForm.APPLY_STATUS">
|
||||
<el-option
|
||||
v-for="item in stateList"
|
||||
:key="item.ID"
|
||||
:label="item.NAME"
|
||||
:value="item.ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
v-model:pagination="pagination"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="70">
|
||||
<template v-slot="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="CHECK_NO" label="编号" show-overflow-tooltip />
|
||||
<el-table-column prop="LEADER_DEPARTMENT_NAME" label="作业单位" />
|
||||
<el-table-column
|
||||
prop="LEADER_USER_NAME"
|
||||
label="作业指挥负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="所在单位负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.CONSTRUCTION_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审核部门负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.AUDIT_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批部门负责人" show-overflow-toolti>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.APPROVE_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="ACCEPT_USER_NAME"
|
||||
label="验收部门负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="审核状态">
|
||||
<template v-slot="{ row }">
|
||||
{{
|
||||
entrance === "job_data"
|
||||
? translationStatus(row.APPLY_STATUS, stateList)
|
||||
: "已归档"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnFlowChart(row)"
|
||||
v-if="entrance === 'job_data'"
|
||||
>
|
||||
流程图
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path:
|
||||
props.entrance === 'job_data'
|
||||
? '/hoisting/job_data/view'
|
||||
: '/hoisting/archive/view',
|
||||
query: { HOISTING_ID: row.HOISTING_ID, entrance },
|
||||
})
|
||||
"
|
||||
>
|
||||
审批表详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<flow-chart
|
||||
v-model:visible="data.flowChartDialog.visible"
|
||||
:info="data.flowChartDialog.info"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { reactive } from "vue";
|
||||
import FlowChart from "./components/flow_chart.vue";
|
||||
import { getHoistingList } from "@/request/hoisting.js";
|
||||
|
||||
const props = defineProps({
|
||||
entrance: {
|
||||
type: String,
|
||||
default: "job_data",
|
||||
},
|
||||
});
|
||||
const stateList = [
|
||||
{ ID: "0", NAME: "吊装作业待提交" },
|
||||
{ ID: "1", NAME: "作业指挥待审核" },
|
||||
{ ID: "2", NAME: "所在单位待审核" },
|
||||
{ ID: "3", NAME: "审核部门待审核" },
|
||||
{ ID: "4", NAME: "审批部门待审核" },
|
||||
{ ID: "5", NAME: "待验收" },
|
||||
{ ID: "6", NAME: "验收归档" },
|
||||
{ ID: "-2", NAME: "作业指挥审核打回" },
|
||||
{ ID: "-3", NAME: "所在单位审核打回" },
|
||||
{ ID: "-4", NAME: "审核部门审核打回" },
|
||||
{ ID: "-5", NAME: "审批部门审核打回" },
|
||||
{ ID: "-6", NAME: "验收打回" },
|
||||
];
|
||||
const router = useRouter();
|
||||
const listData = useListData(getHoistingList, {
|
||||
otherParams: {
|
||||
APPLY_STATUS: props.entrance === "archive" ? "6" : "",
|
||||
},
|
||||
});
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData;
|
||||
const data = reactive({
|
||||
flowChartDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnFlowChart = (info) => {
|
||||
data.flowChartDialog.visible = true;
|
||||
data.flowChartDialog.info = info;
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,340 @@
|
|||
<template>
|
||||
<layout-print-table-package>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left"> 吊装安全作业票 </el-divider>
|
||||
<div class="tr">编号:{{ data.info.CHECK_NO }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">作业申请单位</td>
|
||||
<td>{{ data.info.APPLY_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业单位</td>
|
||||
<td>{{ data.info.LEADER_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业申请时间</td>
|
||||
<td>{{ data.info.CREATTIME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">吊装地点</td>
|
||||
<td>{{ data.info.WORK_PLACE }}</td>
|
||||
<td class="title">吊具名称</td>
|
||||
<td>{{ data.info.TOOL_NAME }}</td>
|
||||
<td class="title">吊物内容</td>
|
||||
<td>{{ data.info.WORK_CONTENT }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">吊装作业人</td>
|
||||
<td>{{ data.info.WORK_USER }}</td>
|
||||
<td class="title">司索人</td>
|
||||
<td>{{ data.info.SISUO_USER }}</td>
|
||||
<td class="title">监护人</td>
|
||||
<td>
|
||||
<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>{{ data.info.PROJECT_MANAGER }}</td>
|
||||
<td class="title" colspan="2">吊物质量(t)及作业级别</td>
|
||||
<td colspan="2">
|
||||
<span>{{ data.info.PART_WEIGHT }}t</span>
|
||||
<span style="margin-left: 20px">
|
||||
{{ data.info.WORK_LEVEL === 1 ? "一级作业级别" : "" }}
|
||||
{{ data.info.WORK_LEVEL === 2 ? "二级作业级别" : "" }}
|
||||
{{ data.info.WORK_LEVEL === 3 ? "三级作业级别" : "" }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">关联的其他特殊作业及安全作业票编号</td>
|
||||
<td colspan="5">{{ data.info.SPECIAL_WORK }}</td>
|
||||
</tr>
|
||||
<tr />
|
||||
<tr>
|
||||
<td class="title">风险辨识结果</td>
|
||||
<td colspan="5">{{ data.info.HAZARD_IDENTIFICATION }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业实施时间</td>
|
||||
<td colspan="5">
|
||||
{{ data.info.WORK_START_DATE }}至{{ data.info.WORK_END_DATE }}止
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 80px">序号</td>
|
||||
<td>安全措施</td>
|
||||
<td style="width: 100px">是否涉及</td>
|
||||
<td style="width: 100px">确认人</td>
|
||||
</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 />涉 及
|
||||
</span>
|
||||
<span v-if="item.STATUS === '-1'">
|
||||
<input type="radio" disabled checked />不涉及
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.CONFIRM_NAME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
v-if="
|
||||
data.info.LEADER_USER_MEASURES ||
|
||||
data.info.CONFIRM_USER_MEASURES ||
|
||||
data.info.AUDIT_USER_MEASURES ||
|
||||
data.info.APPROVE_USER_MEASURES
|
||||
"
|
||||
>
|
||||
<td>{{ data.measuresList.length + 1 }}</td>
|
||||
<td colspan="3">
|
||||
<div
|
||||
v-if="data.info.LEADER_USER_MEASURES"
|
||||
style="display: flex; justify-content: space-between"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.LEADER_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.LEADER_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.CONSTRUCTION_USER_ID &&
|
||||
data.info.CONFIRM_USER_MEASURES
|
||||
"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.CONFIRM_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.CONSTRUCTION_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_ID && 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>
|
||||
</td>
|
||||
</tr>
|
||||
</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>
|
||||
<td colspan="10">
|
||||
<div
|
||||
v-for="item in data.imgList"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.LEADER_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>作业指挥意见:{{ data.info.LEADER_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.CONSTRUCTION_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>所在单位意见:{{ data.info.CONSTRUCTION_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.AUDIT_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>审核部门意见:{{ data.info.AUDIT_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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="6">
|
||||
<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"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</layout-print-table-package>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { getHoistingView } from "@/request/hoisting.js";
|
||||
import { findCharIndex } from "@/assets/js/utils.js";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { HOISTING_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
imgList: [],
|
||||
imgList1: [],
|
||||
measuresList: [],
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
const resData = await getHoistingView({ HOISTING_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.LEADER_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[0];
|
||||
data.info.CONFIRM_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();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<index-view entrance="archive" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import IndexView from "../job_data/index.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<view-info />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ViewInfo from "../job_data/view.vue";
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,171 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" title="查看流程图" width="1500px">
|
||||
<el-steps
|
||||
:active="fnGetStatus()"
|
||||
:process-status="fnGetProcessStatus()"
|
||||
align-center
|
||||
finish-status="success"
|
||||
>
|
||||
<el-step title="断路安全作业提交">
|
||||
<template #description>
|
||||
<div>{{ fnGetProcessMessage().title }}</div>
|
||||
<div>{{ fnGetProcessMessage().USER_NAME }}</div>
|
||||
<div>{{ fnGetProcessMessage().OPERATTIME }}</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.PRODUCTION_USER_NAME">{{ "已跳过" }}</div>
|
||||
<div v-else>{{ info.PRODUCTION_USER_NAME }}</div>
|
||||
<div>{{ info.PRODUCTION_USER_SIGNER_TIME }}</div>
|
||||
</template>
|
||||
</el-step>
|
||||
<el-step title="消防、安全管理部门意见">
|
||||
<template #description>
|
||||
<div v-if="!info.LEADER_USER_NAME">{{ "已跳过" }}</div>
|
||||
<div v-else>{{ info.SAFETY_USER_NAME }}</div>
|
||||
<div>{{ info.SAFETY_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>{{ 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>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModel } from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
info: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => {},
|
||||
},
|
||||
});
|
||||
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.PRODUCTION_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-4": {
|
||||
title: "消防、安全管理部门审核打回",
|
||||
USER_NAME: info.SAFETY_USER_NAME,
|
||||
OPERATTIME: info.OPERATTIME,
|
||||
},
|
||||
"-5": {
|
||||
title: "审批部门审核打回",
|
||||
USER_NAME: info.LEADER_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_NAME,
|
||||
OPERATTIME: info.CREATTIME,
|
||||
}
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,177 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="50px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="编号" prop="KEYWORDS">
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="entrance === 'job_data'">
|
||||
<el-form-item label="状态" prop="APPLY_STATUS">
|
||||
<el-select v-model="searchForm.APPLY_STATUS">
|
||||
<el-option
|
||||
v-for="item in stateList"
|
||||
:key="item.ID"
|
||||
:label="item.NAME"
|
||||
:value="item.ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
:data="list"
|
||||
v-model:pagination="pagination"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="70">
|
||||
<template v-slot="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="CHECK_NO" label="编号" show-overflow-tooltip />
|
||||
<el-table-column prop="APPLY_USER_NAME" label="填写人" />
|
||||
<el-table-column
|
||||
prop="CONSTRUCTION_USER_NAME"
|
||||
label="作业负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="所在单位负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.PRODUCTION_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="消防、安全管理部门负责人"
|
||||
show-overflow-tooltip
|
||||
width="200"
|
||||
>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.SAFETY_DEPARTMENT_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批部门负责人" show-overflow-tooltip>
|
||||
<template v-slot="{ row }">
|
||||
{{ row.LEADER_USER_NAME || " 已跳过" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="ACCEPT_USER_NAME"
|
||||
label="验收部门负责人"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="审核状态">
|
||||
<template v-slot="{ row }">
|
||||
{{
|
||||
entrance === "job_data"
|
||||
? translationStatus(row.APPLY_STATUS, stateList)
|
||||
: "已归档"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="fnFlowChart(row)"
|
||||
v-if="entrance === 'job_data'"
|
||||
>
|
||||
流程图
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path:
|
||||
props.entrance === 'job_data'
|
||||
? '/open_circuit/job_data/view'
|
||||
: '/open_circuit/archive/view',
|
||||
query: { CUTROAD_ID: row.CUTROAD_ID, entrance },
|
||||
})
|
||||
"
|
||||
>
|
||||
审批表详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<flow-chart
|
||||
v-model:visible="data.flowChartDialog.visible"
|
||||
:info="data.flowChartDialog.info"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { reactive } from "vue";
|
||||
import FlowChart from "./components/flow_chart.vue";
|
||||
import { getOpenCircuitList } from "@/request/open_circuit.js";
|
||||
|
||||
const props = defineProps({
|
||||
entrance: {
|
||||
type: String,
|
||||
default: "job_data",
|
||||
},
|
||||
});
|
||||
const stateList = [
|
||||
{ ID: "0", NAME: "断路安全作业待提交" },
|
||||
{ ID: "1", NAME: "作业负责人待审核" },
|
||||
{ ID: "2", NAME: "所在单位待审核" },
|
||||
{ ID: "3", NAME: "消防、安全管理部门待审核" },
|
||||
{ ID: "4", NAME: "审批部门待审核" },
|
||||
{ ID: "5", NAME: "待验收" },
|
||||
{ ID: "6", NAME: "验收归档" },
|
||||
{ ID: "-2", NAME: "作业负责人审核打回" },
|
||||
{ ID: "-3", NAME: "所在单位审核打回" },
|
||||
{ ID: "-4", NAME: "消防、安全管理部门审核打回" },
|
||||
{ ID: "-5", NAME: "审批部门审核打回" },
|
||||
{ ID: "-6", NAME: "验收打回" },
|
||||
];
|
||||
const router = useRouter();
|
||||
const listData = useListData(getOpenCircuitList, {
|
||||
otherParams: {
|
||||
APPLY_STATUS: props.entrance === "archive" ? "6" : "",
|
||||
},
|
||||
});
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData;
|
||||
const data = reactive({
|
||||
flowChartDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnFlowChart = (info) => {
|
||||
data.flowChartDialog.visible = true;
|
||||
data.flowChartDialog.info = info;
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,356 @@
|
|||
<template>
|
||||
<layout-print-table-package>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left"> 断路安全作业票 </el-divider>
|
||||
<div class="tr">编号:{{ data.info.CHECK_NO }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">申请单位</td>
|
||||
<td>{{ data.info.APPLY_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业单位</td>
|
||||
<td>{{ data.info.CONSTRUCTION_DEPARTMENT_NAME }}</td>
|
||||
<td class="title">作业负责人</td>
|
||||
<td>{{ data.info.CONSTRUCTION_USER_NAME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">涉及相关单位(部门)</td>
|
||||
<td colspan="3">{{ data.info.OTHER_DEPT }}</td>
|
||||
<td class="title">监护人</td>
|
||||
<td>
|
||||
<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="5">{{ data.info.WORK_REASON }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">关联的其他特殊作业及安全作业票编号</td>
|
||||
<td colspan="5">{{ data.info.SPECIAL_WORK }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<div>
|
||||
断路地段示意图(可另附图)及相关说明:{{ data.info.WORK_CONTENT }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
"
|
||||
>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.CONTENT_IMG_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<div>
|
||||
编制人:
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.APPLY_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
{{ data.info.APPLY_USER_SIGNER_TIME }}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">风险辨识结果</td>
|
||||
<td colspan="5">
|
||||
{{ data.info.HAZARD_IDENTIFICATION?.split(";_;")[0] }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">作业实施时间</td>
|
||||
<td colspan="5">
|
||||
{{ data.info.WORK_START_DATE }}至{{ data.info.WORK_END_DATE }}止
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 80px">序号</td>
|
||||
<td>安全措施</td>
|
||||
<td style="width: 100px">是否涉及</td>
|
||||
<td style="width: 100px">确认人</td>
|
||||
</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 />涉 及
|
||||
</span>
|
||||
<span v-if="item.STATUS === '-1'">
|
||||
<input type="radio" disabled checked />不涉及
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.CONFIRM_NAME }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
v-if="
|
||||
data.info.APPLY_USER_MEASURES ||
|
||||
data.info.CONSTRUCTION_USER_MEASURES ||
|
||||
data.info.PRODUCTION_USER_MEASURES ||
|
||||
data.info.SAFETY_USER_MEASURES ||
|
||||
data.info.LEADER_USER_MEASURES
|
||||
"
|
||||
>
|
||||
<td>{{ data.measuresList.length + 1 }}</td>
|
||||
<td colspan="3">
|
||||
<div
|
||||
v-if="data.info.APPLY_USER_MEASURES"
|
||||
style="display: flex; justify-content: space-between"
|
||||
>
|
||||
<span>其他安全措施:{{ data.info.APPLY_USER_MEASURES }}</span>
|
||||
<span>编制人:{{ data.info.APPLY_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="data.info.CONSTRUCTION_USER_MEASURES"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.CONSTRUCTION_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.CONSTRUCTION_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.PRODUCTION_USER_ID &&
|
||||
data.info.PRODUCTION_USER_MEASURES
|
||||
"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.PRODUCTION_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.PRODUCTION_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.SAFETY_USER_ID && data.info.SAFETY_USER_MEASURES
|
||||
"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
"
|
||||
>
|
||||
<span>
|
||||
其他安全措施:{{ data.info.SAFETY_USER_MEASURES }}
|
||||
</span>
|
||||
<span>编制人:{{ data.info.SAFETY_USER_NAME }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
data.info.LEADER_USER_ID && data.info.LEADER_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>
|
||||
</td>
|
||||
</tr>
|
||||
</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>
|
||||
<td colspan="10">
|
||||
<div
|
||||
v-for="item in data.imgList"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_CONFESS_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_CONFESS_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.CONSTRUCTION_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>作业负责人意见:{{ data.info.CONSTRUCTION_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.PRODUCTION_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>所在单位意见:{{ data.info.PRODUCTION_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.PRODUCTION_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ data.info.PRODUCTION_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.SAFETY_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>消防、安全管理部门意见:{{ data.info.SAFETY_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + data.info.SAFETY_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ data.info.SAFETY_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="data.info.LEADER_USER_SIGNER_PATH">
|
||||
<td colspan="6">
|
||||
<div>审批部门意见:{{ data.info.LEADER_CONTENT }}</div>
|
||||
<div class="tr">
|
||||
<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.imgList1.length > 0">
|
||||
<td colspan="10">
|
||||
<div>完工验收:{{ data.info.ACCEPT_CONTENT }}</div>
|
||||
<div
|
||||
v-for="item in data.imgList1"
|
||||
:key="item.ACCEPT_CONFESS_ID"
|
||||
class="tr"
|
||||
>
|
||||
<span>签字:</span>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item.ACCEPT_USER_SIGNER_PATH"
|
||||
alt=""
|
||||
width="100"
|
||||
height="100"
|
||||
/>
|
||||
<span>{{ item.ACCEPT_USER_SIGNER_TIME }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</layout-print-table-package>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { getOpenCircuitView } from "@/request/open_circuit.js";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { CUTROAD_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
imgList: [],
|
||||
imgList1: [],
|
||||
measuresList: [],
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
const resData = await getOpenCircuitView({ CUTROAD_ID });
|
||||
data.info = resData.pd;
|
||||
data.measuresList = resData.measuresList;
|
||||
data.imgList = resData.imgList;
|
||||
data.imgList1 = resData.imgList1;
|
||||
data.info.APPLY_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[0];
|
||||
data.info.CONSTRUCTION_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[1];
|
||||
data.info.PRODUCTION_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[2];
|
||||
data.info.SAFETY_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[3];
|
||||
data.info.LEADER_USER_MEASURES =
|
||||
data.info.OTHER_PROTECTIVE_MEASURES.split(";_;")[4];
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
Loading…
Reference in New Issue