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_BASE_URL=http://192.168.0.17:8001/
|
||||||
VITE_PROXY=/api
|
VITE_PROXY=/api
|
||||||
VITE_FILE_URL=https://file.zcloudchina.com/YTHFile
|
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"
|
"lint": "eslint --ext .js,.vue --fix src .prettierrc.cjs"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@element-plus/icons-vue": "^2.1.0",
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
"@icon-park/vue-next": "^1.4.2",
|
"@icon-park/vue-next": "^1.4.2",
|
||||||
"@vueuse/core": "^9.13.0",
|
"@vueuse/core": "^9.13.0",
|
||||||
"@vueuse/integrations": "^10.7.0",
|
"@vueuse/integrations": "^10.7.1",
|
||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"axios": "^1.6.3",
|
"axios": "^1.6.3",
|
||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.10",
|
||||||
|
|
@ -22,39 +22,39 @@
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
"pinia": "^2.1.7",
|
"pinia": "^2.1.7",
|
||||||
"pinia-plugin-persistedstate": "^3.2.0",
|
"pinia-plugin-persistedstate": "^3.2.1",
|
||||||
"qrcode": "^1.5.3",
|
"qrcode": "^1.5.3",
|
||||||
"qs": "^6.11.2",
|
"qs": "^6.11.2",
|
||||||
"throttle-debounce": "^5.0.0",
|
"throttle-debounce": "^5.0.0",
|
||||||
"v-viewer": "^3.0.11",
|
"v-viewer": "^3.0.11",
|
||||||
"vue": "^3.3.13",
|
"vue": "^3.4.3",
|
||||||
"vue-router": "^4.2.5",
|
"vue-router": "^4.2.5",
|
||||||
"vue3-print-nb": "^0.1.4",
|
"vue3-print-nb": "^0.1.4",
|
||||||
"vue3-puzzle-vcode": "^1.0.16"
|
"vue3-puzzle-vcode": "^1.1.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@our-patches/postcss-px-to-viewport": "^1.2.0",
|
"@our-patches/postcss-px-to-viewport": "^1.2.0",
|
||||||
"@types/node": "^18.18.4",
|
"@types/node": "^18.19.4",
|
||||||
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
"@vitejs/plugin-basic-ssl": "^1.0.2",
|
||||||
"@vitejs/plugin-vue": "^4.4.0",
|
"@vitejs/plugin-vue": "^4.6.2",
|
||||||
"@vue/eslint-config-prettier": "^7.1.0",
|
"@vue/eslint-config-prettier": "^7.1.0",
|
||||||
"autoprefixer": "^10.4.16",
|
"autoprefixer": "^10.4.16",
|
||||||
"eslint": "^8.51.0",
|
"eslint": "^8.56.0",
|
||||||
"eslint-config-prettier": "^8.10.0",
|
"eslint-config-prettier": "^8.10.0",
|
||||||
"eslint-config-standard": "^17.1.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-n": "^15.7.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
"eslint-plugin-promise": "^6.1.1",
|
"eslint-plugin-promise": "^6.1.1",
|
||||||
"eslint-plugin-vue": "^9.17.0",
|
"eslint-plugin-vue": "^9.19.2",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
"sass": "^1.69.0",
|
"sass": "^1.69.0",
|
||||||
"unplugin-auto-import": "^0.12.2",
|
"unplugin-auto-import": "^0.12.2",
|
||||||
"unplugin-vue-components": "^0.22.12",
|
"unplugin-vue-components": "^0.22.12",
|
||||||
"vite": "^4.4.11",
|
"vite": "^4.5.1",
|
||||||
"vite-plugin-enhance-log": "^0.5.2",
|
"vite-plugin-enhance-log": "^0.5.2",
|
||||||
"vite-plugin-eslint": "^1.8.1",
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
"vite-plugin-remove-console": "^2.1.1",
|
"vite-plugin-remove-console": "^2.2.0",
|
||||||
"vue-eslint-parser": "^9.3.1"
|
"vue-eslint-parser": "^9.3.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,10 @@ import asyncRouter from "@/assets/js/asyncRouter";
|
||||||
import { getAsyncRouter } from "@/request/api";
|
import { getAsyncRouter } from "@/request/api";
|
||||||
// import { getRouteTreeAll } from "@/request/system_management.js";
|
// 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; // 用来获取后台拿到的路由
|
let storageRouter = null; // 用来获取后台拿到的路由
|
||||||
|
|
||||||
router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async (to, from, next) => {
|
||||||
|
|
|
||||||
|
|
@ -380,6 +380,12 @@
|
||||||
color: var(--el-text-color-regular) !important;
|
color: var(--el-text-color-regular) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-step__title{
|
.el-step__title {
|
||||||
font-size: 14px !important;;
|
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));
|
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的数据字典
|
// 无法确定DICTIONARIES_ID的数据字典
|
||||||
export const layoutFnGetLevels = async (DICTIONARIES_ID) => {
|
export const layoutFnGetLevels = async (DICTIONARIES_ID) => {
|
||||||
const resData = await getLevels({ 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";
|
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 keys = `${type}:add,${type}:del,${type}:edit,toExcel`;
|
||||||
const resData = await post("/api/head/hasButton", {
|
const resData = await post("/head/hasButton", {
|
||||||
loading: false,
|
loading: false,
|
||||||
keys,
|
keys,
|
||||||
});
|
});
|
||||||
|
|
@ -13,4 +13,4 @@ export const useButtonJurisdiction = async (type) => {
|
||||||
edit: resData[`${type}fhadminedit`],
|
edit: resData[`${type}fhadminedit`],
|
||||||
excel: resData.toExcel,
|
excel: resData.toExcel,
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ import { getDataType } from "@/assets/js/utils.js";
|
||||||
|
|
||||||
export default function useListData(api, options = {}) {
|
export default function useListData(api, options = {}) {
|
||||||
if (getDataType(api) !== "Function") throw new Error("api必须是一个函数");
|
if (getDataType(api) !== "Function") throw new Error("api必须是一个函数");
|
||||||
|
if (getDataType(options) !== "Object")
|
||||||
|
throw new Error("options必须是一个对象");
|
||||||
if (options.immediate && getDataType(options.immediate) !== "Boolean")
|
if (options.immediate && getDataType(options.immediate) !== "Boolean")
|
||||||
throw new Error("options.immediate必须是一个布尔值");
|
throw new Error("options.immediate必须是一个布尔值");
|
||||||
if (options.usePagination && getDataType(options.usePagination) !== "Boolean")
|
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,
|
loading: false,
|
||||||
...params,
|
...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>
|
<layout-card>
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:rules="data.rules"
|
:rules="rules"
|
||||||
:model="data.form"
|
:model="data.form"
|
||||||
label-width="110px"
|
label-width="110px"
|
||||||
>
|
>
|
||||||
|
|
@ -57,6 +57,14 @@ import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { QUALIFICATIONS_ID } = route.query;
|
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 formRef = ref(null);
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: {
|
form: {
|
||||||
|
|
@ -67,14 +75,6 @@ const data = reactive({
|
||||||
file: [],
|
file: [],
|
||||||
verifyFileUrl: "12",
|
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 () => {
|
const fnGetData = async () => {
|
||||||
if (!QUALIFICATIONS_ID) return;
|
if (!QUALIFICATIONS_ID) return;
|
||||||
|
|
|
||||||
|
|
@ -2,21 +2,21 @@
|
||||||
<layout-card>
|
<layout-card>
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="证书名称">
|
<el-descriptions-item label="证书名称">
|
||||||
{{ data.info.NAME }}
|
{{ info.NAME }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="证书有效期">
|
<el-descriptions-item label="证书有效期">
|
||||||
{{ data.info.VALIDITYTIME }}
|
{{ info.VALIDITYTIME }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="证书编号">
|
<el-descriptions-item label="证书编号">
|
||||||
{{ data.info.NUMBER }}
|
{{ info.NUMBER }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="备注">
|
<el-descriptions-item label="备注">
|
||||||
{{ data.info.DESCR }}
|
{{ info.DESCR }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="证书图片">
|
<el-descriptions-item label="证书图片">
|
||||||
<img
|
<img
|
||||||
v-viewer
|
v-viewer
|
||||||
v-for="item in data.info.file"
|
v-for="item in info.file"
|
||||||
:key="item.FILEPATH"
|
:key="item.FILEPATH"
|
||||||
:src="item.url"
|
:src="item.url"
|
||||||
width="100"
|
width="100"
|
||||||
|
|
@ -31,19 +31,17 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import LayoutCard from "@/components/card/index.vue";
|
import LayoutCard from "@/components/card/index.vue";
|
||||||
import { getIndustryQualificationsView } from "@/request/enterprise_management.js";
|
import { getIndustryQualificationsView } from "@/request/enterprise_management.js";
|
||||||
import { reactive } from "vue";
|
import { ref } from "vue";
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute } from "vue-router";
|
||||||
import { addingPrefixToFile } from "@/assets/js/utils.js";
|
import { addingPrefixToFile } from "@/assets/js/utils.js";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { QUALIFICATIONS_ID } = route.query;
|
const { QUALIFICATIONS_ID } = route.query;
|
||||||
const data = reactive({
|
const info = ref({});
|
||||||
info: {},
|
|
||||||
});
|
|
||||||
const fnGetData = async () => {
|
const fnGetData = async () => {
|
||||||
const resData = await getIndustryQualificationsView({ QUALIFICATIONS_ID });
|
const resData = await getIndustryQualificationsView({ QUALIFICATIONS_ID });
|
||||||
data.info = resData.pd;
|
info.value = resData.pd;
|
||||||
data.info.file = addingPrefixToFile(resData.hImgs);
|
info.value.file = addingPrefixToFile(resData.hImgs);
|
||||||
};
|
};
|
||||||
fnGetData();
|
fnGetData();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="data.form"
|
:model="data.form"
|
||||||
:rules="data.rules"
|
:rules="rules"
|
||||||
label-width="210px"
|
label-width="210px"
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
|
|
@ -486,61 +486,8 @@ const formRef = ref(null);
|
||||||
const territoryCascaderRef = ref(null);
|
const territoryCascaderRef = ref(null);
|
||||||
const industryCascaderRef = ref(null);
|
const industryCascaderRef = ref(null);
|
||||||
const economicTypeCascaderRef = ref(null);
|
const economicTypeCascaderRef = ref(null);
|
||||||
const data = reactive({
|
const rules = {
|
||||||
form: {
|
CORP_NAME: [{ required: true, message: "企业名称不能为空", trigger: "blur" }],
|
||||||
CORP_NAME: "",
|
|
||||||
POSTAL_CODE: "",
|
|
||||||
CODE: "",
|
|
||||||
INDUSTRY_DEPARTMENTName: "",
|
|
||||||
INDUSTRY_DEPARTMENT: "",
|
|
||||||
POSSESSION: [],
|
|
||||||
REGULARTYPE: "",
|
|
||||||
INDUSTRYALL: [],
|
|
||||||
ECO_TYPEALL: [],
|
|
||||||
ADDRESS_BUSINESS: "",
|
|
||||||
CORP_STATE: "",
|
|
||||||
LONGITUDE: "",
|
|
||||||
LATITUDE: "",
|
|
||||||
CONTACTS: "",
|
|
||||||
CONTACTS_PHONE: "",
|
|
||||||
LR_NAME: "",
|
|
||||||
LR_MOBILE: "",
|
|
||||||
AREA_COVERED: "",
|
|
||||||
EMPLOYEES: "",
|
|
||||||
CREATE_DATE: "",
|
|
||||||
REGCAPITAL: "",
|
|
||||||
TOTALASSETS: "",
|
|
||||||
SUBORDINATION: "",
|
|
||||||
SCALE: "",
|
|
||||||
SCALE_TYPE: "",
|
|
||||||
TRAINTYPE: [],
|
|
||||||
USERS_NUM: "",
|
|
||||||
FOURTYPE: "",
|
|
||||||
four_images: [],
|
|
||||||
bus_images: [],
|
|
||||||
SAFETY_NAME: "",
|
|
||||||
SAFETY_POST: "",
|
|
||||||
SAFETY_NUMBER: "",
|
|
||||||
SAFETY_PHONE: "",
|
|
||||||
WHETHER_HYGIENE: "",
|
|
||||||
WHETHER_HAZARDS: "",
|
|
||||||
WHETHER_SCARCE: "",
|
|
||||||
WHETHER_CHEMICALS: "",
|
|
||||||
WHETHER_SPECIALEQUIPMENT: "",
|
|
||||||
WHETHER_SPECIALPEOPLE: "",
|
|
||||||
WHETHER_COALGAS: "",
|
|
||||||
WHETHER_FIRE: "",
|
|
||||||
WHETHER_CONFINED: "",
|
|
||||||
WHETHER_POWDER: "",
|
|
||||||
WHETHER_LIGHTNING: "",
|
|
||||||
WHETHER_ACTINOGEN: "",
|
|
||||||
WHETHER_LIQUIDAMMONIA: "",
|
|
||||||
WHETHER_PIPELINE: "",
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
CORP_NAME: [
|
|
||||||
{ required: true, message: "企业名称不能为空", trigger: "blur" },
|
|
||||||
],
|
|
||||||
CODE: [
|
CODE: [
|
||||||
{ required: true, message: "统一社会信用代码不能为空", trigger: "blur" },
|
{ required: true, message: "统一社会信用代码不能为空", trigger: "blur" },
|
||||||
{
|
{
|
||||||
|
|
@ -609,6 +556,57 @@ const data = reactive({
|
||||||
message: "请输入正确的手机号码",
|
message: "请输入正确的手机号码",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
};
|
||||||
|
const data = reactive({
|
||||||
|
form: {
|
||||||
|
CORP_NAME: "",
|
||||||
|
POSTAL_CODE: "",
|
||||||
|
CODE: "",
|
||||||
|
INDUSTRY_DEPARTMENTName: "",
|
||||||
|
INDUSTRY_DEPARTMENT: "",
|
||||||
|
POSSESSION: [],
|
||||||
|
REGULARTYPE: "",
|
||||||
|
INDUSTRYALL: [],
|
||||||
|
ECO_TYPEALL: [],
|
||||||
|
ADDRESS_BUSINESS: "",
|
||||||
|
CORP_STATE: "",
|
||||||
|
LONGITUDE: "",
|
||||||
|
LATITUDE: "",
|
||||||
|
CONTACTS: "",
|
||||||
|
CONTACTS_PHONE: "",
|
||||||
|
LR_NAME: "",
|
||||||
|
LR_MOBILE: "",
|
||||||
|
AREA_COVERED: "",
|
||||||
|
EMPLOYEES: "",
|
||||||
|
CREATE_DATE: "",
|
||||||
|
REGCAPITAL: "",
|
||||||
|
TOTALASSETS: "",
|
||||||
|
SUBORDINATION: "",
|
||||||
|
SCALE: "",
|
||||||
|
SCALE_TYPE: "",
|
||||||
|
TRAINTYPE: [],
|
||||||
|
USERS_NUM: "",
|
||||||
|
FOURTYPE: "",
|
||||||
|
four_images: [],
|
||||||
|
bus_images: [],
|
||||||
|
SAFETY_NAME: "",
|
||||||
|
SAFETY_POST: "",
|
||||||
|
SAFETY_NUMBER: "",
|
||||||
|
SAFETY_PHONE: "",
|
||||||
|
WHETHER_HYGIENE: "",
|
||||||
|
WHETHER_HAZARDS: "",
|
||||||
|
WHETHER_SCARCE: "",
|
||||||
|
WHETHER_CHEMICALS: "",
|
||||||
|
WHETHER_SPECIALEQUIPMENT: "",
|
||||||
|
WHETHER_SPECIALPEOPLE: "",
|
||||||
|
WHETHER_COALGAS: "",
|
||||||
|
WHETHER_FIRE: "",
|
||||||
|
WHETHER_CONFINED: "",
|
||||||
|
WHETHER_POWDER: "",
|
||||||
|
WHETHER_LIGHTNING: "",
|
||||||
|
WHETHER_ACTINOGEN: "",
|
||||||
|
WHETHER_LIQUIDAMMONIA: "",
|
||||||
|
WHETHER_PIPELINE: "",
|
||||||
},
|
},
|
||||||
mapDialog: {
|
mapDialog: {
|
||||||
visible: false,
|
visible: false,
|
||||||
|
|
|
||||||
|
|
@ -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