From 3b75798cc41993f9016610296907d2338545a345 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期五, 16 八月 2024 15:43:01 +0800 Subject: [PATCH] Default Changelist --- src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue | 41 package-lock.json | 150 ++ src/views/newSpecialWorkSystem/workTicket/zysq/index.vue | 8 src/views/system/saftyManage/component/saftyDialog.vue | 4 src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue | 42 src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 40 src/views/newHome/index.vue | 26 src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue | 46 src/views/specialWorkSystem/specialIndex/index.vue | 196 +- src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue | 41 src/router/route.ts | 17 src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue | 45 src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue | 62 src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue | 1078 +++++++++++++++++++ src/api/specialWorkSystem/workApply/index.ts | 14 src/views/loginPage/component/accountLogin.vue | 1 src/router/index.ts | 6 src/views/system/saftyManage/index.vue | 4 src/layout/navBars/breadcrumb/user.vue | 3 src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 20 src/views/specialWorkSystem/flow/ruleofApp/index.vue | 3 src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue | 18 src/utils/request.ts | 2 src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue | 2 src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue | 36 src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue | 52 src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue | 995 +++++++++++++++++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue | 57 src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue | 46 src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue | 45 .env.development | 4 src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue | 56 src/views/system/user/index.vue | 2 src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue | 40 src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue | 40 src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue | 40 src/views/specialWorkSystem/specialIndex/components/workRecord.vue | 4 src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue | 36 38 files changed, 2,824 insertions(+), 498 deletions(-) diff --git a/.env.development b/.env.development index 0f074d0..f852ed7 100644 --- a/.env.development +++ b/.env.development @@ -4,7 +4,7 @@ #VITE_API_URL = 'http://192.168.0.35:8008' #李宇飞接口地址 -VITE_API_URL = 'http://192.168.0.70:8008' +VITE_API_URL = 'http://192.168.2.11:8008' #张凤接口地址 #VITE_API_URL = 'http://192.168.0.47:8008' @@ -13,7 +13,7 @@ #VITE_API_URL = 'http://192.168.0.179:8008' #施正红接口地址 -#VITE_API_URL = 'http://192.168.0.69:8008' +#VITE_API_URL = 'http://192.168.0.30:8008' #戚会山接口地址 #VITE_API_URL = 'http://121.239.169.27:16016/safeplatform' diff --git a/package-lock.json b/package-lock.json index 1e0dc6f..5a90871 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,10 +33,12 @@ "sortablejs": "^1.15.0", "splitpanes": "^3.1.1", "vue": "^3.2.36", + "vue-baidu-map-3x": "^1.0.35", "vue-clipboard3": "^2.0.0", "vue-grid-layout": "^3.0.0-beta1", "vue-i18n": "^9.1.10", "vue-router": "^4.0.15", + "vuedraggable": "^4.1.0", "wangeditor": "^4.7.15", "xlsx": "^0.18.5" }, @@ -47,7 +49,7 @@ "@types/sortablejs": "^1.13.0", "@typescript-eslint/eslint-plugin": "^5.27.0", "@typescript-eslint/parser": "^5.27.0", - "@vitejs/plugin-vue": "^2.3.3", + "@vitejs/plugin-vue": "^2.3.4", "@vue/compiler-sfc": "^3.2.36", "dotenv": "^16.0.1", "eslint": "^8.17.0", @@ -880,9 +882,9 @@ } }, "node_modules/@vitejs/plugin-vue": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz", - "integrity": "sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==", + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", + "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", "dev": true, "engines": { "node": ">=12.0.0" @@ -1578,6 +1580,39 @@ "engines": { "node": ">=8" } + }, + "node_modules/bmaplib.curveline": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz", + "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q==" + }, + "node_modules/bmaplib.distancetool": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bmaplib.distancetool/-/bmaplib.distancetool-1.0.2.tgz", + "integrity": "sha512-EvxMnQRH6xM036zx5OLPyTg5tMCTbFBuGTTHOtExLy2/T0X6v5Va0YE7c3IPm/a/Eo5V/ynYpOLOLZbRY8ccyA==" + }, + "node_modules/bmaplib.heatmap": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz", + "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q==" + }, + "node_modules/bmaplib.lushu": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz", + "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w==" + }, + "node_modules/bmaplib.markerclusterer": { + "version": "1.0.13", + "resolved": "https://registry.npmmirror.com/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz", + "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==", + "dependencies": { + "bmaplib.texticonoverlay": "^1.0.2" + } + }, + "node_modules/bmaplib.texticonoverlay": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz", + "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg==" }, "node_modules/boolbase": { "version": "1.0.0", @@ -4490,6 +4525,24 @@ "@vue/shared": "3.2.36" } }, + "node_modules/vue-baidu-map-3x": { + "version": "1.0.35", + "resolved": "https://registry.npmmirror.com/vue-baidu-map-3x/-/vue-baidu-map-3x-1.0.35.tgz", + "integrity": "sha512-1FDzxgd+X7MVcG8JbyyxDOSYRDUi96qEuuNICQmwlAE/EDwf4vz1oYRhRz05s/MuDpW7aIBlubF/PlSTpBlUEw==", + "dependencies": { + "bmaplib.curveline": "^1.0.0", + "bmaplib.distancetool": "^1.0.2", + "bmaplib.heatmap": "^1.0.4", + "bmaplib.lushu": "^1.0.7", + "bmaplib.markerclusterer": "^1.0.13", + "tiny-emitter": "^2.1.0", + "vue": "^3.2.25", + "vue-router": "^4.0.14" + }, + "peerDependencies": { + "vue": "^3.2.25" + } + }, "node_modules/vue-clipboard3": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz", @@ -4593,6 +4646,22 @@ "peerDependencies": { "vue": "^3.2.0" } + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/vuedraggable/node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" }, "node_modules/wangeditor": { "version": "4.7.15", @@ -4748,7 +4817,7 @@ }, "node_modules/xlsx": { "version": "0.18.5", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz", "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "dependencies": { "adler-32": "~1.3.0", @@ -5402,9 +5471,9 @@ } }, "@vitejs/plugin-vue": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz", - "integrity": "sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==", + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", + "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", "dev": true, "requires": {} }, @@ -5939,6 +6008,39 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true + }, + "bmaplib.curveline": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz", + "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q==" + }, + "bmaplib.distancetool": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bmaplib.distancetool/-/bmaplib.distancetool-1.0.2.tgz", + "integrity": "sha512-EvxMnQRH6xM036zx5OLPyTg5tMCTbFBuGTTHOtExLy2/T0X6v5Va0YE7c3IPm/a/Eo5V/ynYpOLOLZbRY8ccyA==" + }, + "bmaplib.heatmap": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz", + "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q==" + }, + "bmaplib.lushu": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz", + "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w==" + }, + "bmaplib.markerclusterer": { + "version": "1.0.13", + "resolved": "https://registry.npmmirror.com/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz", + "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==", + "requires": { + "bmaplib.texticonoverlay": "^1.0.2" + } + }, + "bmaplib.texticonoverlay": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz", + "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg==" }, "boolbase": { "version": "1.0.0", @@ -7973,6 +8075,21 @@ "@vue/shared": "3.2.36" } }, + "vue-baidu-map-3x": { + "version": "1.0.35", + "resolved": "https://registry.npmmirror.com/vue-baidu-map-3x/-/vue-baidu-map-3x-1.0.35.tgz", + "integrity": "sha512-1FDzxgd+X7MVcG8JbyyxDOSYRDUi96qEuuNICQmwlAE/EDwf4vz1oYRhRz05s/MuDpW7aIBlubF/PlSTpBlUEw==", + "requires": { + "bmaplib.curveline": "^1.0.0", + "bmaplib.distancetool": "^1.0.2", + "bmaplib.heatmap": "^1.0.4", + "bmaplib.lushu": "^1.0.7", + "bmaplib.markerclusterer": "^1.0.13", + "tiny-emitter": "^2.1.0", + "vue": "^3.2.25", + "vue-router": "^4.0.14" + } + }, "vue-clipboard3": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz", @@ -8052,6 +8169,21 @@ "integrity": "sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg==", "requires": { "@vue/devtools-api": "^6.0.0" + } + }, + "vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "requires": { + "sortablejs": "1.14.0" + }, + "dependencies": { + "sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + } } }, "wangeditor": { @@ -8172,7 +8304,7 @@ }, "xlsx": { "version": "0.18.5", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz", "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "requires": { "adler-32": "~1.3.0", diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts index 83b5d0d..c00e5e5 100644 --- a/src/api/specialWorkSystem/workApply/index.ts +++ b/src/api/specialWorkSystem/workApply/index.ts @@ -186,6 +186,20 @@ data: data }); }, + submitOpenApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/openJob`, + method: 'post', + data: data + }); + }, + modOpenApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/openJob`, + method: 'post', + data: data + }); + }, // 所有记录列表 getApplyList: (data: object) => { diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue index 70ef2c0..1f01e1c 100644 --- a/src/layout/navBars/breadcrumb/user.vue +++ b/src/layout/navBars/breadcrumb/user.vue @@ -346,8 +346,7 @@ if (!Cookies.get('token')) return false; const res = await menuApi.getMenuAdmin(Cookies.get('projectId') === null ? '' : Cookies.get('projectId')); if (res.data.code === '200') { - state.systemName = res.data.data[1].project.projectName; - console.log(state.systemName); + state.systemName = res.data.data[0].project.projectName; } else { console.log('有问题'); } diff --git a/src/router/index.ts b/src/router/index.ts index 322d85c..c562cd5 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -78,13 +78,15 @@ Session.clear(); NProgress.done(); } else if (token && to.path === '/login') { - next('/home'); + next('/newMenu'); + NProgress.done(); + } else if (token && to.path === '/newMenu') { + next(); NProgress.done(); } else { const storesRoutesList = useRoutesList(pinia); const { routesList } = storeToRefs(storesRoutesList); if (routesList.value.length === 0) { - // 后端控制路由:路由数据初始化,防止刷新时丢失 await initBackEndControlRoutes(); // 动态添加路由:防止非首页刷新时跳转回首页的问题 diff --git a/src/router/route.ts b/src/router/route.ts index 27f6937..aa2cd7f 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -5,14 +5,14 @@ path: '/', name: '/', component: () => import('/@/layout/index.vue'), - redirect: '/home', + redirect: '/newMenu', meta: { isKeepAlive: false }, children: [ { - path: '/home', - name: 'home', + path: '/newMenu', + name: 'newMenu', component: () => import('/@/views/newHome/index.vue'), meta: { title: '首页', @@ -85,7 +85,16 @@ name: 'warningScreen', component: () => import('/@/views/riskWarningSys/warningBigScreen/index.vue'), meta: { - title: '预警预报' + title: '预警预报', + } + }, + { + path: '/screenPage', + name: 'screenPage', + component: () => import('/@/views/riskWarningSys/warningBigScreen/indexs/index.vue'), + meta: { + title: '预警详情', + isKeepAlive: false } }, { diff --git a/src/utils/request.ts b/src/utils/request.ts index 9647e83..486f416 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -9,7 +9,7 @@ // 配置新建一个 axios 实例 const service = axios.create({ // baseURL: import.meta.env.VITE_API_URL as any, - timeout: 500000, + timeout: 10000, headers: { 'Content-Type': 'application/json' } }); diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue index d67fed6..5a1e9ca 100644 --- a/src/views/loginPage/component/accountLogin.vue +++ b/src/views/loginPage/component/accountLogin.vue @@ -244,6 +244,7 @@ // 登录成功后的跳转 const signInSuccess = async () => { // 初始化登录成功时间问候语 + console.log('登录>>>') let currentTimeInfo = currentTime.value; // 登录成功,跳到转首页 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue index e2d09ca..96e8cd6 100644 --- a/src/views/newHome/index.vue +++ b/src/views/newHome/index.vue @@ -164,16 +164,16 @@ </div> <img class="bgImg" src="../../assets/newMenu/card-6.png" /> </div> - <div class="grid-content cont-bg-2" v-throttle @click="toSmartFactory"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon13.png" /> - <div> - <div class="itemTit">智能工厂系统</div> - <div class="enTit">Intelligent Factory System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-13.png" /> - </div> +<!-- <div class="grid-content cont-bg-2" v-throttle @click="toSmartFactory">--> +<!-- <div class="toplayer">--> +<!-- <img class="iconImg" src="../../assets/newMenu/icon13.png" />--> +<!-- <div>--> +<!-- <div class="itemTit">智能工厂系统</div>--> +<!-- <div class="enTit">Intelligent Factory System</div>--> +<!-- </div>--> +<!-- </div>--> +<!-- <img class="bgImg" src="../../assets/newMenu/card-13.png" />--> +<!-- </div>--> <div class="grid-content cont-bg-2" @click="render('1')"> <div class="toplayer"> <img class="iconImg" src="../../assets/newMenu/icon11.png" /> @@ -413,8 +413,8 @@ userInfos.value.projectId = state.projectId; await initBackEndControlRoutes().then(() => { let linkToMenu = [...routesList.value]; - if (linkToMenu && linkToMenu.length > 1) { - router.push(linkToFirstMenu(JSON.parse(JSON.stringify(linkToMenu))[1])); + if (linkToMenu && linkToMenu.length > 0) { + router.push(linkToFirstMenu(JSON.parse(JSON.stringify(linkToMenu))[0])); } else { ElMessage({ type: 'warning', message: '你没有该子系统的权限' }); } @@ -432,7 +432,7 @@ const renderToNew = () => { // window.open('http://222.92.213.22:18001/smartlab/', '_blank'); - window.open('http://106.15.95.149:8005/nanoweb/foreground/', '_blank'); + window.open('http://47.108.222.15:8000/', '_blank'); }; // //点击进入特殊作业 // const toSpecialWorkSys = () => { diff --git a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue index f8fdcc8..10d99b1 100644 --- a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue @@ -741,7 +741,7 @@ } } &:last-of-type { - height: calc(100% - 100px); + height: calc(100% - 130px); } } .stepItem { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue index 3d640aa..616cc6b 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue @@ -291,8 +291,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -330,19 +330,18 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> </el-row> </div> </el-form> @@ -419,7 +418,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -476,7 +475,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -527,9 +526,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId state.form.workDetail.involvedDepIds = row.workDetail.involvedDepIds.split(',').map(i=>Number(i)) state.fileList = row.workDetail.bcPath.split(',').map(item => { return { @@ -567,7 +566,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -706,7 +705,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modBrokenApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue index a8915c1..ce336ee 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue @@ -37,7 +37,7 @@ <div class="d-row"> <div class="d-tit">作业范围、内容、方式</div><div class="d-cont">{{details.workDetail.gbDesc}}</div> </div> - <div class="d-row"> + <div class="d-row" v-if="details.workDetail.gbPath !== ''"> <div class="d-tit">示意图</div> <div class="d-cont"> <el-image v-for="item in details.workDetail.gbPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> @@ -54,7 +54,7 @@ <div class="d-row"> <div class="d-tit">断路地段相关说明</div><div class="d-cont">{{details.workDetail.bcExplain}}</div> </div> - <div class="d-row"> + <div class="d-row" v-if="details.workDetail.bcPath !== ''"> <div class="d-tit">断路地段示意图</div> <div class="d-cont"> <el-image v-for="(item,index) in details.workDetail.bcPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover"/> @@ -103,12 +103,46 @@ <div class="d-tit">盲板编号</div><div class="d-cont">{{details.workDetail.bpCode}}</div> </div> <div class="d-row"> - <div class="d-tit">盲板位置相关描述</div><div class="d-cont">{{details.workDetail.bpLocationDesc}}</div> + <div class="d-tit">编制人</div><div class="d-cont">{{details.workDetail.preparedByName}}</div> </div> <div class="d-row"> + <div class="d-tit">编制时间</div><div class="d-cont">{{details.workDetail.preparedTime}}</div> + </div> + <div class="d-row"> + <div class="d-tit">盲板位置相关描述</div><div class="d-cont">{{details.workDetail.bpLocationDesc}}</div> + </div> + <div class="d-row" v-if="details.workDetail.bpLocationMapPath !== ''"> <div class="d-tit">盲板位置示意图</div> <div class="d-cont"> <el-image v-for="item in details.workDetail.bpLocationMapPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </div> + </div> + </div> + <div v-if="type == 9"> + <div class="d-row"> + <div class="d-tit">设备管线信息</div> + <div class="d-cont"> + <el-table :data="details.workDetail.qpDetails" style="width: 90%" border> + <el-table-column prop="qpName" label="设备管线名称"/> + <el-table-column prop="originalHazardousMedia" label="原有危险介质"/> + <el-table-column prop="originalTemperature" label="原有温度(℃)"/> + <el-table-column prop="originalPressure" label="原有压力(kPa)"/> + </el-table> + </div> + </div> + <div class="d-row"> + <div class="d-tit">编制人</div><div class="d-cont">{{details.workDetail.preparedBy}}</div> + </div> + <div class="d-row"> + <div class="d-tit">编制时间</div><div class="d-cont">{{details.workDetail.preparedTime}}</div> + </div> + <div class="d-row"> + <div class="d-tit">安全工作方案</div><div class="d-cont">{{details.workDetail.workProgramme == 1?'有':'无'}}</div> + </div> + <div class="d-row" v-if="details.workDetail.sketchMapPath !== ''"> + <div class="d-tit">示意图</div> + <div class="d-cont"> + <el-image v-for="item in details.workDetail.sketchMapPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> </div> </div> </div> @@ -152,7 +186,7 @@ <div class="d-tit">安全措施确认人</div><div class="d-cont">{{details.safetyMeasureList.map(i=>{return i.userName + '(' + i.phone+ ')'}).join('、')}}</div> </div> <div class="d-row"> - <div class="d-tit">完工验收人</div><div class="d-cont">{{details.acceptUser.userName + '(' + details.acceptUser.phone+ ')'}}</div> + <div class="d-tit">完工验收人</div><div class="d-cont">{{details.acceptUserList.map(i=>{return i.userName + '(' + i.phone+ ')'}).join('、')}}</div> </div> <div class="d-row"> <div class="d-tit">现场开始结束确认人</div><div class="d-cont">{{details.startOrEndList.map(i=>{return i.userName + '(' + i.phone+ ')'}).join('、')}}</div> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue index d984ea7..3d1d4bd 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue @@ -301,8 +301,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -327,21 +327,20 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -408,7 +407,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -510,7 +509,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.methodList": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -557,10 +556,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - console.log(state.form.approvalDepBasicList,777) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId state.form.workDetail.methodList = state.form.workDetail.workMethod.split(',') if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) @@ -597,7 +595,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -739,7 +737,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2EObj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2EObj(data.lastApprover) const res = await workApplyApi().modFireApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue index 6d8e8a3..bb0cce6 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue @@ -274,8 +274,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -313,19 +313,18 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> </el-row> </div> </el-form> @@ -402,7 +401,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -448,7 +447,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.gbDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -498,9 +497,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId state.fileList = row.workDetail.gbPath.split(',').map(item => { return { url: item, @@ -536,7 +535,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -683,7 +682,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modGroundApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue index d587381..e99ba6e 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue @@ -189,8 +189,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="安全措施确认人" filterable prop="safetyMeasureUids"> - <el-select v-model="form.safetyMeasureUids" multiple clearable> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple filterable clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -216,9 +216,9 @@ </el-form-item> </template> </el-table-column> - <el-table-column prop="approvalUids" filterable label="审批人" align="center"> + <el-table-column prop="approvalUids" label="审批人" align="center"> <template #default="scope"> - <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-select v-model="scope.row.approvalUids" multiple filterable :disabled="isFirstRow(scope.$index)" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -232,8 +232,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" clearable filterable multiple> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -245,8 +245,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="现场开始结束确认人" filterable prop="startOrEndUids"> - <el-select v-model="form.startOrEndUids" multiple clearable> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable filterable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -258,21 +258,20 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -337,7 +336,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -394,7 +393,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.hight": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] @@ -441,9 +440,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ @@ -472,7 +471,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -605,7 +604,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modHeightApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue index d98c55a..6ec322f 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue @@ -297,8 +297,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -323,21 +323,20 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -403,7 +402,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -459,7 +458,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -509,9 +508,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ @@ -541,7 +540,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -688,7 +687,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modHoistApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue index ecea5c2..8ead0fe 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue @@ -14,6 +14,14 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="报告编号"> + <el-input + v-model="jsaForm.judgeJsaCode" + placeholder="请输入报告编号" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="风险研判报告记录附件"> <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl"> <el-icon><Plus /></el-icon> @@ -36,10 +44,14 @@ <div class="d-tit">jsa风险研判结论</div><div class="d-cont">{{detail.judgeRecord}}</div> </div> <div class="d-row"> + <div class="d-tit">报告编号</div><div class="d-cont">{{detail.judgeJsaCode}}</div> + </div> + <div class="d-row"> <div class="d-tit">风险研判报告记录附件</div> - <div class="d-cont"> + <div class="d-cont" v-if="detail.judgePicturePath"> <el-image v-for="item in detail.judgePicturePath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> </div> + <div class="d-cont" v-else>暂无附件</div> </div> <div class="d-row"> <div class="d-tit">研判人</div><div class="d-cont">{{detail.judgeUname}}</div> @@ -67,6 +79,7 @@ jsaForm: { workApplyId: number | null; judgeRecord: string + judgeJsaCode: string judgePicturePath: Array<string> }; jsaFormRules: {}; @@ -93,6 +106,7 @@ jsaForm: { workApplyId: null, judgeRecord: '', + judgeJsaCode: '', judgePicturePath: [] }, jsaFormRules: { @@ -111,10 +125,10 @@ if (type === '上传') { state.disabled = true; state.title = '上传风险研判报告'; - console.log(value.id,'id') state.jsaForm = { workApplyId: value.id, judgeRecord: '', + judgeJsaCode: '', judgePicturePath: [] }; } else { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue new file mode 100644 index 0000000..fb45479 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue @@ -0,0 +1,1078 @@ +<template> + <div class="home-container"> + <el-dialog v-model="showDialog" title="修改申报" @close="clearFile" width="80%" :close-on-click-modal="false"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + <!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepIds"> + <el-cascader style="width: 100%" v-model="form.workDepIds" :props="depProps" @change="getWorkerList" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业人" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <el-option + v-for="item in zyList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> + <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="设备管线信息" prop="workDetail.qpDetailList"> + <el-table :data="form.workDetail.qpDetailList" style="width: 90%" border> + <el-table-column prop="qpName" label="设备管线名称"/> + <el-table-column prop="originalHazardousMedia" label="原有危险介质"/> + <el-table-column prop="originalTemperature" label="原有温度(℃)"/> + <el-table-column prop="originalPressure" label="原有压力(kPa)"/> + <el-table-column label="操作" width="100"> + <template #default="scope"> + <el-button size="small" text type="danger" @click="delInfo(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + <el-button type="primary" style="width: 8%;margin-left: 2%" @click="addQPList">新增</el-button> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编制人姓名" prop="workDetail.preparedBy"> + <el-input + v-model="form.workDetail.preparedBy" + placeholder="请输入编制人姓名" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编制时间" prop="workDetail.preparedTime"> + <el-date-picker + v-model="form.workDetail.preparedTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="有无示意图" prop="workDetail.sketchMapStatus"> + <el-radio-group v-model="form.workDetail.sketchMapStatus"> + <el-radio :label="1">有</el-radio> + <el-radio :label="2">无</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12" v-if="form.workDetail.sketchMapStatus == 1"> + <el-form-item label="示意图" prop="workDetail.sketchMapPath"> + <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于2M,最多可上传3张</div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="安全工作方案" prop="workDetail.workProgramme"> + <el-radio-group v-model="form.workDetail.workProgramme"> + <el-radio :label="1">有</el-radio> + <el-radio :label="2">无</el-radio> + </el-radio-group> + </el-form-item> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <el-dialog v-model="qpVisible" @open="startAdd"> + <el-form :model="qpForm" label-width="170px" ref="qpFormRef" :rules="qpFormRules"> + <el-row :gutter="20"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="设备管线名称" prop="qpName"> + <el-input + v-model="qpForm.qpName" + placeholder="请输入设备管线名称" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="原有危险介质" prop="originalHazardousMedia"> + <el-input + v-model="qpForm.originalHazardousMedia" + placeholder="请输入原有危险介质" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="原有温度(℃)" prop="originalTemperature"> + <el-input + v-model="qpForm.originalTemperature" + type="number" + placeholder="请输入原有温度" + ><template #append>℃</template></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="原有压力(kPa)" prop="originalPressure"> + <el-input + v-model="qpForm.originalPressure" + type="number" + placeholder="请输入原有压力" + ><template #append>kPa</template></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="confirmAdd(qpFormRef)">新增</el-button> + </span> + </template> + </el-dialog> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + <el-dialog v-model="dialogVisible"> + <img w-full :src="dialogImageUrl" alt="Preview Image" /> + </el-dialog> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import {ElMessage, ElMessageBox, UploadProps, UploadUserFile} from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import axios from "axios"; + import {userApi} from "/@/api/systemManage/user"; + import {verifyPwd} from "/@/utils/toolsValidate"; + interface stateType { + showDialog: boolean + form: Object, + qpForm: Object, + equipmentDialog: boolean, + qpVisible: boolean + zyList: [] + props1:{}, + depProps:{}, + casProps:{} + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + dialogImageUrl: string | null, + imgLimit: number + tabLoading: boolean + } + interface file { + url: string; + } + export default defineComponent({ + name: 'openForm', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + showDialog: false, + tabLoading: false, + equipmentDialog: false, + qpVisible: false, + safetyMeasureBasicList: [], + zyList: [], + form: { + id: null, + workType: 9, + workLevel: 0, + depIdList: [], + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepIds: [], + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUids: [], + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + qpDetailList: [], + preparedBy: '', + preparedTime: '', + sketchMapStatus: null, + sketchMapPath: [], + workProgramme: 1, + }, + remark: '' + }, + qpForm: { + qpName: '', + originalHazardousMedia: '', + originalTemperature: null, + originalPressure: null, + }, + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId' + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + multiple: true, + checkStrictly: true, + emitPath: false + }, + casProps: { + expandTrigger: 'hover', + value: 'uid', + label: 'username', + multiple: true, + lazy: true, + async lazyLoad(node, resolve){ + const { value, level } = node + let nodes = [] + if(level == 0){ + nodes = props.lists.workerList + }else{ + let res = await userApi().getCtf({uid: value}) + if(res.data.code == 200){ + nodes = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + nodes=nodes.map(item => ({ + uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, + username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', + leaf: level >= 1 + })) + resolve(nodes) + } + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null, + }); + // let validateList = (rule: any, value: any, callback: any)=>{ + // if(value.length==0){ + // callback(new Error('请完善设备管线信息')) + // }else{ + // callback() + // } + // } + const ruleFormRef = ref<FormInstance>() + const qpFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + depIdList: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedBy": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedTime": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.sketchMapStatus": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.sketchMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workProgramme": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + // "workDetail.qpDetailList": [{ required: true, validator: validateList, trigger: 'blur' }] + }); + const qpFormRules = reactive<FormRules>({ + qpName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + originalHazardousMedia: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + originalTemperature: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + originalPressure: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }) + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + state.zyList = props.lists.spList.opList + getBasicData() + }); + + const openDialog = (row)=>{ + state.zyList = props.lists.spList.opList + getBasicData() + Object.keys(state.form).forEach(key => { + if (row.hasOwnProperty(key)) { + state.form[key] = JSON.parse(JSON.stringify(row))[key] + } + }) + state.form.operatorUids = row.operatorList.map(i=>i.userId) + state.form.headUids = row.headList.map(i=>i.userId) + state.form.analystUids = row.analystList.map(i=>i.userId) + state.form.guardianUids = row.guardianList.map(i=>i.userId) + state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId) + state.form.riskIdentification = row.riskIdentification.split(',') + state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId) + state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId) + state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({ + content: item.content, + approvalDepBasicId: item.approvalDepBasicId, + approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), + approvalType: item.approvalType + })) + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) + state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) + // state.form.lastApprover = row.lastApprover.userId + if(row.workDetail.sketchMapPath && row.workDetail.sketchMapPath !== ''){ + state.fileList = row.workDetail.sketchMapPath.split(',').map(item => { + return { + url: item, + name: item.match(/specialWork9step\/(.*?)\?/)[1] + } + }) + state.form.workDetail.sketchMapPath = row.workDetail.sketchMapPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1]) + }else{ + state.fileList = [] + state.form.workDetail.sketchMapPath = [] + } + state.form.workDetail.qpDetailList = row.workDetail.qpDetails + if(row.workDepList && row.workDepList.length>0){ + state.form.workDepIds = row.workDepList.map(i=>i.workDepId) + }else{ + state.form.workDepIds.push(row.workDepId) + } + getWorkerList() + state.showDialog = true + } + + const clearFile = ()=>{ + state.form = { + id: null, + workType: 9, + workLevel: 0, + depIdList: [], + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepIds: [], + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUids: [], + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + qpDetailList: [], + preparedBy: '', + preparedTime: '', + sketchMapStatus: null, + sketchMapPath: [], + workProgramme: 1, + }, + remark: '' + } + state.showDialog = false + } + + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const addQPList = ()=>{ + state.qpVisible = true + } + + const startAdd =()=>{ + state.qpForm={ + qpName: '', + originalHazardousMedia: '', + originalTemperature: null, + originalPressure: null, + } + } + + const confirmAdd=async (formEl: FormInstance | undefined)=>{ + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + state.form.workDetail.qpDetailList.push(state.qpForm) + state.qpVisible = false + } else { + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const delInfo=(index: number)=>{ + state.form.workDetail.qpDetailList.splice(index,1) + } + + const getWorkerList = ()=>{ + const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + if(filteredList && filteredList.length>0){ + state.zyList = filteredList + }else{ + state.zyList = props.lists.spList.opList + } + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + const findParent = ()=>{ + state.form.applyDepId = state.form.depIdList[state.form.depIdList.length - 1] + state.form.seDepId = state.form.depIdList[0] + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(9) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // let selected = value + // if(selected.length>1){ + // const temp = [] + // for(let i of selected){ + // const index = temp.findIndex(item => item[0] === i[0]); + // if (index !== -1) { + // temp[index] = i + // }else{ + // temp.push(i) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const transformArr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i[0], + certificate: i[1].split(',')[0], + certExpiredAt: i[1].split(',')[1], + certTypeName: i[1].split(',')[2] + } + }) + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id: any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + if(state.form.workDetail.sketchMapStatus == 2){ + state.form.workDetail.sketchMapPath = [] + } + state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') + const {depIdList,...data} = state.form + data.operatorUids = transform2Arr(data.operatorUids) + data.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUids = transform2Arr(data.acceptUids) + data.lastApprover = transform2Obj(data.lastApprover) + const res = await workApplyApi().modOpenApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }) + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.sketchMapPath = [] + state.fileList = [] + state.form.workDetail.qpDetailList = [] + clearFile() + context.emit('refresh') + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + } else { + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async(rawFile: any) => { + if(rawFile.size / 1024 / 1024 > 2){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过2M。' + }); + return Promise.reject(false) + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name) + state.form.workDetail.sketchMapPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + if (file && file.status === "success") { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.sketchMapPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.sketchMapPath)) + fileList.map((item, index) => { + if (item.uid === file.uid) { + fileList.splice(index, 1) + state.form.workDetail.sketchMapPath.splice(index, 1) + // 请求删除接口 + deletePic(list[index]) + } + }) + console.log(state.form.workDetail.sketchMapPath, 'sketchMapPath') + }) + .catch(() => { + reject(false); + }); + }); + return result; + } + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + clearFile, + openDialog, + addQPList, + startAdd, + confirmAdd, + delInfo, + renderMenu, + getBasicData, + getWorkerList, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + openWorkSelect, + getSelected, + singleSelect, + workSelectRef, + Search, + ruleFormRef, + qpFormRef, + applyRules, + qpFormRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue index 3567cec..16ee8a3 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue @@ -340,8 +340,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable clearable multiple> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -366,21 +366,20 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -453,7 +452,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -515,7 +514,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.pipingName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -573,9 +572,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId state.fileList = row.workDetail.bpLocationMapPath.split(',').map(item => { return { url: item, @@ -583,6 +582,7 @@ } }) state.form.workDetail.bpLocationMapPath = row.workDetail.bpLocationMapPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1]) + console.log(state.fileList,state.form.workDetail.bpLocationMapPath,'854') if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ @@ -611,7 +611,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -664,16 +664,6 @@ const res = await workApplyApi().getFormData(8) if (res.data.code === '200') { state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) - // if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ - // state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ - // content, - // approvalDepBasicId: id, - // approvalUids: [], - // approvalType: null - // })) - // }else{ - // state.form.approvalDepBasicList = [] - // } } else { ElMessage({ type: 'warning', @@ -766,7 +756,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modPlateApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue index 03b1c55..437d685 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue @@ -312,8 +312,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -338,21 +338,20 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -417,7 +416,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -460,7 +459,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -511,9 +510,9 @@ approvalType: item.approvalType })) state.form.workDetail.electricityUids = row.workDetail.electricityUids.split(',').map(i=>Number(i)) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ @@ -543,7 +542,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -681,7 +680,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modPowerApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue index 4b37e9d..d5e9798 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue @@ -251,8 +251,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -277,21 +277,20 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> -<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -356,7 +355,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -397,7 +396,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -447,10 +446,9 @@ approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId), approvalType: item.approvalType })) - console.log(state.form.approvalDepBasicList,777) - state.form.acceptUid = row.acceptUser.userId + state.form.acceptUids = row.acceptUserList.map(i=>i.userId) state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId) - state.form.lastApprover = row.lastApprover.userId + // state.form.lastApprover = row.lastApprover.userId if(row.workDepList && row.workDepList.length>0){ state.form.workDepIds = row.workDepList.map(i=>i.workDepId) }else{ @@ -480,7 +478,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -600,7 +598,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().modSpaceApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue index 4aa3e83..50bcae1 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue @@ -106,6 +106,7 @@ <el-table-column label="风险研判" align="center"> <template #default="scope"> <el-button v-if="scope.row.status == 0" link type="primary" size="small" @click="openReport('上传', scope.row)">上传研判报告</el-button> + <el-tag type="danger" v-else-if="scope.row.status == 15">已取消</el-tag> <el-tag type="danger" v-else-if="scope.row.status == 16">已废止</el-tag> <el-button v-else link type="primary" size="small" @click="openReport('查看', scope.row)">查看研判报告</el-button> </template> @@ -113,9 +114,10 @@ <el-table-column fixed="right" label="操作" align="center" width="150"> <template #default="scope"> <span v-if="scope.row.status == 16">已废止</span> + <span v-if="scope.row.status == 15">已取消</span> <el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="danger" size="small" :icon="Delete" @click="abortRecordBtn(scope.row)">取消</el-button> <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button v-if="scope.row.status !== 16" link type="primary" size="small" v-throttle :icon="Edit" @click="openEdit(scope.row)">修改</el-button> + <el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="primary" size="small" v-throttle :icon="Edit" @click="openEdit(scope.row)">修改</el-button> <el-button link type="success" v-throttle v-if="scope.row.status == 0 || scope.row.status == 1" size="small" :icon="Download" @click="checkTicket(scope.row)">正式办票</el-button> <!-- <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>--> </template> @@ -151,7 +153,8 @@ <ground-dialog ref="groundRef" :lists="lists" @refresh="getListByPage"></ground-dialog> <broken-dialog ref="brokenRef" :lists="lists" @refresh="getListByPage"></broken-dialog> <height-dialog ref="heightRef" :lists="lists" @refresh="getListByPage"></height-dialog> - <power-dialog ref="powerRef" :lists="lists" @refresh="getListByPage"></power-dialog> + <power-dialog ref="powerRef" :lists="lists" @refresh="getListByPage"></power-dialog> + <open-dialog ref="openRef" :lists="lists" @refresh="getListByPage"></open-dialog> </div> </template> @@ -220,7 +223,8 @@ groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')), brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')), heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')), - powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')) + powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')), + openDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue')) }, setup() { const userInfo = useUserInfo(); @@ -235,6 +239,7 @@ const brokenRef = ref() const heightRef = ref() const powerRef = ref() + const openRef = ref() const state = reactive<stateType>({ pageIndex1: 1, pageSize1: 10, @@ -276,7 +281,8 @@ { id: 5, name: '断路作业' }, { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, - { id: 8, name: '盲板抽堵作业' } + { id: 8, name: '盲板抽堵作业' }, + { id: 9, name: '打开作业' } ], lists: { workerList: [], @@ -400,6 +406,9 @@ } if(row.workType == 8){ plateRef.value.openDialog(row) + } + if(row.workType == 9){ + openRef.value.openDialog(row) } } @@ -758,6 +767,7 @@ brokenRef, heightRef, powerRef, + openRef, openEdit, getAllDepartment, checkTicket, @@ -835,7 +845,7 @@ } } &:last-of-type { - height: calc(100% - 100px); + height: calc(100% - 130px); } } .el-row { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue index 65d59ab..27b96a1 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue @@ -79,7 +79,7 @@ <el-row> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" filterable multiple :multiple-limit="1" @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -290,8 +290,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -329,19 +329,19 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> +<!-- </el-form-item>--> +<!-- </el-col>--> </el-row> </div> </el-form> @@ -419,7 +419,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -594,7 +594,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -756,7 +756,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().submitBrokenApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue index e715770..f9288e6 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue @@ -58,7 +58,7 @@ </el-col> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -294,8 +294,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -320,21 +320,21 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -402,7 +402,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -623,7 +623,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.methodList": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -800,7 +800,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2EObj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2EObj(data.lastApprover) const res = await workApplyApi().submitFireApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue index 0f5a025..bb9c260 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue @@ -22,7 +22,7 @@ </el-col> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -273,8 +273,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -312,19 +312,19 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> +<!-- </el-form-item>--> +<!-- </el-col>--> </el-row> </div> </el-form> @@ -402,7 +402,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -566,7 +566,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.gbDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -727,7 +727,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().submitGroundApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue index 49be4fd..0ca2810 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue @@ -55,7 +55,7 @@ </el-col> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" filterable multiple :multiple-limit="1" @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -188,8 +188,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="安全措施确认人" filterable prop="safetyMeasureUids"> - <el-select v-model="form.safetyMeasureUids" multiple clearable> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable filterable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -215,9 +215,9 @@ </el-form-item> </template> </el-table-column> - <el-table-column prop="approvalUids" filterable label="审批人" align="center"> + <el-table-column prop="approvalUids" label="审批人" align="center"> <template #default="scope"> - <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-select v-model="scope.row.approvalUids" multiple filterable :disabled="isFirstRow(scope.$index)" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -231,8 +231,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -244,8 +244,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="现场开始结束确认人" filterable prop="startOrEndUids"> - <el-select v-model="form.startOrEndUids" multiple clearable> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -257,21 +257,21 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -337,7 +337,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -512,7 +512,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.hight": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] @@ -670,7 +670,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().submitHeightApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue index 306cecb..449a455 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue @@ -51,6 +51,18 @@ /> </el-form-item> </el-col> + <el-col :span="12"> + <el-form-item label="吊装指挥" prop="workDetail.commanderUid"> + <el-select v-model="form.workDetail.commanderUid" filterable clearable @change="getCommand"> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </el-form-item> + </el-col> </el-row> <el-row> <el-col :span="12"> @@ -65,7 +77,7 @@ </el-col> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -296,8 +308,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -322,21 +334,21 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -403,12 +415,13 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], workDetail: { hoistingToolName: '', + commanderUid: null, weightMass: '', solicitorUids: [] } @@ -577,7 +590,8 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.commanderUid": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -653,7 +667,11 @@ // state.form.startOrEndUids = state.form.headUids // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] state.form.startOrEndUids = state.form.headUids - state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getCommand =()=>{ + state.form.approvalDepBasicList[0].approvalUids = [state.form.workDetail.commanderUid] } const getSafetyIds = ()=>{ @@ -738,8 +756,9 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) + // data.commanderUid = transform2Obj(data.commanderUid) const res = await workApplyApi().submitHoistApply(data) if (res.data.code === '200') { ElMessage({ @@ -810,6 +829,7 @@ getBasicData, getWorkerList, getStartEndIds, + getCommand, getSafetyIds, isFirstRow, submitForm, diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue new file mode 100644 index 0000000..94d244a --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue @@ -0,0 +1,995 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="depIdList"> + <el-cascader style="width: 100%" v-model="form.depIdList" :options="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + <!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepIds"> + <el-cascader style="width: 100%" v-model="form.workDepIds" :props="depProps" @change="getWorkerList" :options="lists.departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业人" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <el-option + v-for="item in zyList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> + <!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + <el-col :span="12" class="valueSelect"> + <el-form-item label="关联其他特殊作业"> +<!-- <el-select v-model="form.involveOtherWork" multiple clearable>--> +<!-- <el-option--> +<!-- v-for="item in otherWorkList"--> +<!-- :key="item.value"--> +<!-- :label="item.label"--> +<!-- :value="item.label"--> +<!-- />--> +<!-- </el-select>--> + <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect"> + <el-option v-for="item in lists.otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" filterable multiple clearable> + <el-option + v-for="item in lists.spList.jhList" + :key="item.uid" + :label="item.realName" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <el-option + v-for="item in lists.deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="设备管线信息" prop="workDetail.qpDetailList"> + <el-table :data="form.workDetail.qpDetailList" style="width: 90%" border> + <el-table-column prop="qpName" label="设备管线名称"/> + <el-table-column prop="originalHazardousMedia" label="原有危险介质"/> + <el-table-column prop="originalTemperature" label="原有温度(℃)"/> + <el-table-column prop="originalPressure" label="原有压力(kPa)"/> + <el-table-column label="操作" width="100"> + <template #default="scope"> + <el-button size="small" text type="danger" @click="delInfo(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + <el-button type="primary" style="width: 8%;margin-left: 2%" @click="addQPList">新增</el-button> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编制人姓名" prop="workDetail.preparedBy"> + <el-input + v-model="form.workDetail.preparedBy" + placeholder="请输入编制人姓名" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编制时间" prop="workDetail.preparedTime"> + <el-date-picker + v-model="form.workDetail.preparedTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="有无示意图" prop="workDetail.sketchMapStatus"> + <el-radio-group v-model="form.workDetail.sketchMapStatus"> + <el-radio :label="1">有</el-radio> + <el-radio :label="2">无</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12" v-if="form.workDetail.sketchMapStatus == 1"> + <el-form-item label="示意图" prop="workDetail.sketchMapPath"> + <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于2M,最多可上传3张</div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="安全工作方案" prop="workDetail.workProgramme"> + <el-radio-group v-model="form.workDetail.workProgramme"> + <el-radio :label="1">有</el-radio> + <el-radio :label="2">无</el-radio> + </el-radio-group> + </el-form-item> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预计(整体)开始时间" prop="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-select v-model="form.riskIdentification" multiple clearable> + <el-option + v-for="item in lists.riskList" + :key="item.id" + :label="item.content" + :value="item.content" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading"> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid" label-width="0"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" filterable multiple clearable> + <el-option + v-for="item in lists.workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> +<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>--> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> +<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <el-dialog v-model="qpVisible" @open="startAdd"> + <el-form :model="qpForm" label-width="170px" ref="qpFormRef" :rules="qpFormRules"> + <el-row :gutter="20"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="设备管线名称" prop="qpName"> + <el-input + v-model="qpForm.qpName" + placeholder="请输入设备管线名称" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="原有危险介质" prop="originalHazardousMedia"> + <el-input + v-model="qpForm.originalHazardousMedia" + placeholder="请输入原有危险介质" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="原有温度(℃)" prop="originalTemperature"> + <el-input + v-model="qpForm.originalTemperature" + type="number" + placeholder="请输入原有温度" + ><template #append>℃</template></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="原有压力(kPa)" prop="originalPressure"> + <el-input + v-model="qpForm.originalPressure" + type="number" + placeholder="请输入原有压力" + ><template #append>kPa</template></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="confirmAdd(qpFormRef)">新增</el-button> + </span> + </template> + </el-dialog> + <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select> + <el-dialog v-model="dialogVisible"> + <img w-full :src="dialogImageUrl" alt="Preview Image" /> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search, Edit } from '@element-plus/icons-vue' + import {ElMessage, ElMessageBox, UploadProps, UploadUserFile} from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue"; + import axios from "axios"; + import {userApi} from "/@/api/systemManage/user"; + import {verifyPwd} from "/@/utils/toolsValidate"; + interface stateType { + form: Object, + qpForm: Object, + equipmentDialog: boolean, + qpVisible: boolean + zyList: [] + props1:{}, + depProps:{}, + casProps:{} + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + dialogImageUrl: string | null, + imgLimit: number + tabLoading: boolean + } + interface file { + url: string; + } + export default defineComponent({ + name: 'openForm', + components: {workSelect}, + props:['lists'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + tabLoading: false, + equipmentDialog: false, + qpVisible: false, + safetyMeasureBasicList: [], + zyList: [], + form: { + workType: 9, + workLevel: 0, + depIdList: [], + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepIds: [], + workContent: '', + workLocation: '', + riskIdentification: [], + involveOtherWork: [], + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUids: [], + lastApprover: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + qpDetailList: [], + preparedBy: '', + preparedTime: '', + sketchMapStatus: null, + sketchMapPath: [], + workProgramme: 1, + }, + remark: '' + }, + qpForm: { + qpName: '', + originalHazardousMedia: '', + originalTemperature: null, + originalPressure: null, + }, + props1:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId' + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + multiple: true, + checkStrictly: true, + emitPath: false + }, + casProps: { + expandTrigger: 'hover', + value: 'uid', + label: 'username', + multiple: true, + lazy: true, + async lazyLoad(node, resolve){ + const { value, level } = node + let nodes = [] + if(level == 0){ + nodes = props.lists.workerList + }else{ + let res = await userApi().getCtf({uid: value}) + if(res.data.code == 200){ + nodes = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + } + nodes=nodes.map(item => ({ + uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName, + username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')', + leaf: level >= 1 + })) + resolve(nodes) + } + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null, + }); + // let validateList = (rule: any, value: any, callback: any)=>{ + // if(value.length==0){ + // callback(new Error('请完善设备管线信息')) + // }else{ + // callback() + // } + // } + const ruleFormRef = ref<FormInstance>() + const qpFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + depIdList: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedBy": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedTime": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.sketchMapStatus": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.sketchMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workProgramme": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + // "workDetail.qpDetailList": [{ required: true, validator: validateList, trigger: 'blur' }] + }); + const qpFormRules = reactive<FormRules>({ + qpName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + originalHazardousMedia: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + originalTemperature: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + originalPressure: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }) + const workSelectRef = ref() + // 页面载入时执行方法 + onMounted(() => { + state.zyList = props.lists.spList.opList + getBasicData() + }); + const openWorkSelect = ()=>{ + workSelectRef.value.openDialog(state.form.involveOtherWork) + } + + const addQPList = ()=>{ + state.qpVisible = true + } + + const startAdd =()=>{ + state.qpForm={ + qpName: '', + originalHazardousMedia: '', + originalTemperature: null, + originalPressure: null, + } + } + + const confirmAdd=async (formEl: FormInstance | undefined)=>{ + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + state.form.workDetail.qpDetailList.push(state.qpForm) + state.qpVisible = false + } else { + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const delInfo=(index: number)=>{ + state.form.workDetail.qpDetailList.splice(index,1) + } + + const getWorkerList = (val)=>{ + const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId)); + if(filteredList && filteredList.length>0){ + state.zyList = filteredList + }else{ + state.zyList = props.lists.spList.opList + } + } + + const getSelected = ()=>{ + state.form.involveOtherWork = workSelectRef.value.selected + } + const findParent = ()=>{ + state.form.applyDepId = state.form.depIdList[state.form.depIdList.length - 1] + state.form.seDepId = state.form.depIdList[0] + } + + // 获取基础数据 + const getBasicData = async ()=>{ + state.tabLoading = true + const res = await workApplyApi().getFormData(9) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + state.tabLoading = false + }; + + const getStartEndIds = (value)=>{ + // let selected = value + // if(selected.length>1){ + // const temp = [] + // for(let i of selected){ + // const index = temp.findIndex(item => item[0] === i[0]); + // if (index !== -1) { + // temp[index] = i + // }else{ + // temp.push(i) + // } + // } + // state.form.headUids = temp + // } + // state.form.startOrEndUids = state.form.headUids + // state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))] + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const transformArr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i[0], + certificate: i[1].split(',')[0], + certExpiredAt: i[1].split(',')[1], + certTypeName: i[1].split(',')[2] + } + }) + } + + const transform2Arr = (arr: Array<any>)=>{ + return arr.map((i)=>{ + return { + uid: i, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + }) + } + + const transform2Obj = (id: any)=>{ + return { + uid: id, + certificate: '', + certExpiredAt: '', + certTypeName: '' + } + } + + const singleSelect=(value,type)=>{ + let selected = value + if(selected.length>1){ + const temp = [] + for(let i of selected){ + const index = temp.findIndex(item => item[0] === i[0]); + if (index !== -1) { + temp[index] = i + }else{ + temp.push(i) + } + } + if(type == '作业人'){state.form.operatorUids = temp} + if(type == '监护人'){state.form.guardianUids = temp} + if(type == '确认人'){state.form.safetyMeasureUids = temp} + if(type == '结束人'){state.form.startOrEndUids = temp} + } + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + // if(Array.isArray(state.form.involveOtherWork)){ + // state.form.involveOtherWork = state.form.involveOtherWork.join(',') + // } + if(state.form.workDetail.sketchMapStatus == 2){ + state.form.workDetail.sketchMapPath = [] + } + state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.join(',') + state.form.riskIdentification = state.form.riskIdentification.join(',') + const {depIdList,...data} = state.form + data.operatorUids = transform2Arr(data.operatorUids) + data.headUids = transform2Arr(data.headUids) + data.guardianUids = transform2Arr(data.guardianUids) + data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) + data.startOrEndUids = transform2Arr(data.startOrEndUids) + data.acceptUids = transform2Arr(data.acceptUids) + data.lastApprover = transform2Obj(data.lastApprover) + const res = await workApplyApi().submitOpenApply(data) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + state.form.guardianUids = [] + state.form.involveOtherWork = [] + getBasicData() + state.form.workDetail.sketchMapPath = [] + state.fileList = [] + state.form.workDetail.qpDetailList = [] + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + // state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',') + state.form.riskIdentification = state.form.riskIdentification.split(',') + } + } else { + ElMessage({ + type: 'warning', + message: '有表单内容未完成,请再次检查完善' + }) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async(rawFile: any) => { + if(rawFile.size / 1024 / 1024 > 2){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过2M。' + }); + return Promise.reject(false) + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name) + state.form.workDetail.sketchMapPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + if (file && file.status === "success") { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.sketchMapPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.sketchMapPath)) + fileList.map((item, index) => { + if (item.uid === file.uid) { + fileList.splice(index, 1) + state.form.workDetail.sketchMapPath.splice(index, 1) + // 请求删除接口 + deletePic(list[index]) + } + }) + console.log(state.form.workDetail.sketchMapPath, 'sketchMapPath') + }) + .catch(() => { + reject(false); + }); + }); + return result; + } + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + addQPList, + startAdd, + confirmAdd, + delInfo, + renderMenu, + getBasicData, + getWorkerList, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + openWorkSelect, + getSelected, + singleSelect, + workSelectRef, + Search, + ruleFormRef, + qpFormRef, + applyRules, + qpFormRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + overflow-y: scroll; + &::-webkit-scrollbar{ + width: 0; + background-color: transparent; + } + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding: 20px 0; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + .valueSelect{ + ::v-deep(.el-popper){ + display: none !important; + } + } + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue index df77756..15fa75d 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue @@ -144,7 +144,7 @@ <el-row> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -339,8 +339,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -365,21 +365,21 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -455,7 +455,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -637,7 +637,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.pipingName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -805,7 +805,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().submitPlateApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue index e5d46c7..031d931 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue @@ -79,7 +79,7 @@ <el-row> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -311,8 +311,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -337,21 +337,21 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -417,7 +417,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -578,7 +578,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -740,7 +740,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().submitPowerApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue index ffb5bd8..d026ece 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue @@ -44,7 +44,7 @@ </el-col> <el-col :span="12"> <el-form-item label="作业负责人" prop="headUids"> - <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable> + <el-select v-model="form.headUids" multiple :multiple-limit="1" filterable @change="getStartEndIds" clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -250,8 +250,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="acceptUid"> - <el-select v-model="form.acceptUid" filterable clearable> + <el-form-item label="完工验收" prop="acceptUids"> + <el-select v-model="form.acceptUids" filterable multiple clearable> <el-option v-for="item in lists.workerList" :key="item.uid" @@ -276,21 +276,21 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="最终审批人" prop="lastApprover"> - <el-select v-model="form.lastApprover" filterable clearable> - <el-option - v-for="item in lists.workerList" - :key="item.uid" - :label="item.username" - :value="item.uid" - /> - </el-select> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="最终审批人" prop="lastApprover">--> +<!-- <el-select v-model="form.lastApprover" filterable clearable>--> +<!-- <el-option--> +<!-- v-for="item in lists.workerList"--> +<!-- :key="item.uid"--> +<!-- :label="item.username"--> +<!-- :value="item.uid"--> +<!-- />--> +<!-- </el-select>--> <!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>--> - </el-form-item> - </el-col> - </el-row> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> </div> </el-form> <div class="applyBtn"> @@ -356,7 +356,7 @@ involveOtherWork: [], safetyMeasureUids: [], approvalDepBasicList: [], - acceptUid: null, + acceptUids: [], lastApprover: null, startOrEndUids: [], cameraIds: [], @@ -515,7 +515,7 @@ expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], "workDetail.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], @@ -676,7 +676,7 @@ data.guardianUids = transform2Arr(data.guardianUids) data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids) data.startOrEndUids = transform2Arr(data.startOrEndUids) - data.acceptUid = transform2Obj(data.acceptUid) + data.acceptUids = transform2Arr(data.acceptUids) data.lastApprover = transform2Obj(data.lastApprover) const res = await workApplyApi().submitSpaceApply(data) if (res.data.code === '200') { diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue index fba0b5c..19a277c 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue @@ -25,6 +25,9 @@ <el-tab-pane :lazy="true" label="盲板抽堵作业" name="plate"> <plate-form ref="plate" :lists="lists"></plate-form> </el-tab-pane> + <el-tab-pane :lazy="true" label="打开作业" name="open"> + <open-form ref="open" :lists="lists"></open-form> + </el-tab-pane> </el-tabs> <!-- <material-dialog ref="material"></material-dialog>--> <!-- <el-radio-group v-model="activeName" size="large" @change="(value)=>handleClick(value)">--> @@ -81,6 +84,7 @@ heightForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue')), powerForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue')), plateForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue')), + openForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue')), }, setup() { const userInfo = useUserInfo() @@ -111,6 +115,7 @@ const height = ref() const power = ref() const plate = ref() + const open = ref() const handleClick = (tab: TabsPaneContext, event: Event) => { state.loading = true @@ -205,7 +210,7 @@ // state.departmentList = JSON.parse(JSON.stringify(res.data.data)) // state.departmentList2 = state.departmentList[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50) state.lists.departList = JSON.parse(JSON.stringify(res.data.data)) - state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50) + state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47) } else { ElMessage({ type: 'warning', @@ -266,6 +271,7 @@ hoist, plate, power, + open, handleClick, getOtherWork }; diff --git a/src/views/specialWorkSystem/flow/ruleofApp/index.vue b/src/views/specialWorkSystem/flow/ruleofApp/index.vue index df52430..ab589da 100644 --- a/src/views/specialWorkSystem/flow/ruleofApp/index.vue +++ b/src/views/specialWorkSystem/flow/ruleofApp/index.vue @@ -145,7 +145,8 @@ { id: 5, name: '断路作业' }, { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, - { id: 8, name: '盲板抽堵作业' } + { id: 8, name: '盲板抽堵作业' }, + { id: 9, name: '打开作业' } ], workLevelList: [ { id: 3, name: '特级动火作业' }, diff --git a/src/views/specialWorkSystem/specialIndex/components/workRecord.vue b/src/views/specialWorkSystem/specialIndex/components/workRecord.vue index bfe8a50..25b7d7e 100644 --- a/src/views/specialWorkSystem/specialIndex/components/workRecord.vue +++ b/src/views/specialWorkSystem/specialIndex/components/workRecord.vue @@ -21,10 +21,10 @@ <div>操作内容:{{item.content}}</div> <div>操作意见:{{item.approvalOpinions}}</div> <div v-if="item.fileUrl" style="display: flex;align-items: flex-start">附件内容: - <el-image style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item.fileUrl" fit="cover" /> + <el-image v-for="(i,index) in item.fileUrl.split(',')" :key="index" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" /> </div> <div v-if="item.signUrl" style="display: flex;align-items: flex-start">签字图片: - <el-image style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item.signUrl" fit="cover" /> + <el-image v-for="(i,index) in item.signUrl.split(',')" :key="index" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" /> </div> </div> </div> diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue index fb47fb3..08ce261 100644 --- a/src/views/specialWorkSystem/specialIndex/index.vue +++ b/src/views/specialWorkSystem/specialIndex/index.vue @@ -15,10 +15,38 @@ </el-button> </div> <div class="topChart"> +<!-- <div class="chart-item">--> +<!-- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>--> +<!-- <div class="chart-tit">--> +<!-- <span class="tit">各事业部关联作业分析</span>--> +<!-- <div class="filter-part">--> +<!-- <el-cascader :teleported="false" v-model="chartSearch2.depId" @change="changeDep2()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>--> +<!-- <el-select v-model="chartSearch2.type" size="small" :teleported="false" @change="changeType2()">--> +<!-- <el-option--> +<!-- v-for="item in workType1"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.id"--> +<!-- />--> +<!-- </el-select>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="chart" :id="slfx"></div>--> +<!-- </div>--> <div class="chart-item"> <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> <div class="chart-tit"> - <span class="tit">八大作业各分类分布图</span> + <span class="tit">特殊作业数量趋势</span> + <div class="filter-part filter-part2"> + <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> + </div> + </div> + <div class="chart" :id="zyqs"></div> + </div> + <div class="chart-item"> + <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> + <div class="chart-tit"> + <span class="tit">作业分类分布图</span> <div class="filter-part filter-part2"> <el-cascader :teleported="false" v-model="chartSearch1.depId" @change="changeDep1()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> </div> @@ -31,81 +59,48 @@ <el-radio :label='365' border>近一年</el-radio> </el-radio-group> </div> - <div class="chart-item"> - <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> - <div class="chart-tit"> - <span class="tit">各事业部关联作业分析</span> - <div class="filter-part"> - <el-cascader :teleported="false" v-model="chartSearch2.depId" @change="changeDep2()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - <el-select v-model="chartSearch2.type" size="small" :teleported="false" @change="changeType2()"> - <el-option - v-for="item in workType1" - :key="item.id" - :label="item.name" - :value="item.id" - /> - </el-select> - </div> - </div> - <div class="chart" :id="slfx"></div> - </div> </div> - <div class="topChart"> - <div class="chart-item"> - <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> - <div class="chart-tit"> - <span class="tit">关联作业趋势图</span> - <div class="filter-part filter-part2"> - <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> - </div> - </div> - <div class="chart" :id="zyqs"></div> - </div> - <div class="chart-item"> - <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> - <div class="chart-tit"> - <span class="tit">作业警报记录</span> - <div class="filter-part"> -<!-- <el-switch--> -<!-- v-model="chartSearch4.type"--> -<!-- inline-prompt--> -<!-- style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66"--> -<!-- active-text="作业人"--> -<!-- inactive-text="监护人"--> -<!-- />--> - <el-select :teleported="false" v-model="chartSearch4.days" size="small" @change="(value)=>changeTime4(value)"> - <el-option label="近7天" :value="7"/> - <el-option label="近30天" :value="30"/> - <el-option label="近90天" :value="90"/> - <el-option label="近1年" :value="365"/> - </el-select> - <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()"> - <el-option - v-for="item in workType1" - :key="item.id" - :label="item.name" - :value="item.id" - /> - </el-select> - </div> - </div> - <div class="chart"> - <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> - <el-table-column property="operatorUname" label="姓名" align="center"/> - <el-table-column property="deptName" label="所属部门" align="center"/> - <el-table-column property="warningCount" label="异常报警次数" align="center"/> -<!-- <el-table-column property="role" label="角色" align="center"/>--> -<!-- <el-table-column property="isCard" label="是否持证" align="center">--> -<!-- <template #default="scope">--> -<!-- <span>{{scope.row.isCard == 1?'是':'否'}}</span>--> -<!-- </template>--> -<!-- </el-table-column>--> - </el-table> -<!-- <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button>--> - </div> - <!-- <div class="chart" :id="slfx"></div>--> - </div> - </div> +<!-- <div class="topChart">--> +<!-- <div class="chart-item">--> +<!-- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>--> +<!-- <div class="chart-tit">--> +<!-- <span class="tit">关联作业趋势图</span>--> +<!-- <div class="filter-part filter-part2">--> +<!-- <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="chart" :id="zyqs"></div>--> +<!-- </div>--> +<!-- <div class="chart-item">--> +<!-- <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>--> +<!-- <div class="chart-tit">--> +<!-- <span class="tit">作业警报记录</span>--> +<!-- <div class="filter-part">--> +<!-- <el-select :teleported="false" v-model="chartSearch4.days" size="small" @change="(value)=>changeTime4(value)">--> +<!-- <el-option label="近7天" :value="7"/>--> +<!-- <el-option label="近30天" :value="30"/>--> +<!-- <el-option label="近90天" :value="90"/>--> +<!-- <el-option label="近1年" :value="365"/>--> +<!-- </el-select>--> +<!-- <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()">--> +<!-- <el-option--> +<!-- v-for="item in workType1"--> +<!-- :key="item.id"--> +<!-- :label="item.name"--> +<!-- :value="item.id"--> +<!-- />--> +<!-- </el-select>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="chart">--> +<!-- <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }">--> +<!-- <el-table-column property="operatorUname" label="姓名" align="center"/>--> +<!-- <el-table-column property="deptName" label="所属部门" align="center"/>--> +<!-- <el-table-column property="warningCount" label="异常报警次数" align="center"/>--> +<!-- </el-table>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> <div> <div class="homeCard"> <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> @@ -143,7 +138,7 @@ <!-- </div>--> <!-- </el-col>--> <el-col :span="6" style="display:flex;align-items: center;"> - <span style="white-space: nowrap;margin-left: 20px">申请时间:</span> + <span style="white-space: nowrap">申请时间:</span> <div class="grid-content topInfo"> <el-date-picker v-model="searchDate" @@ -159,13 +154,19 @@ </div> </el-col> <el-col :span="4" style="display:flex;align-items: center"> - <span style="white-space: nowrap;margin-left: 20px">作业票编号:</span> + <span style="white-space: nowrap">作业票编号:</span> <div class="grid-content topInfo"> <el-input v-model="searchParams.workPermitNo" placeholder="请输入作业票编号" size="small" /> + </div> + </el-col> + <el-col :span="4" style="display:flex;align-items: center"> + <span style="white-space: nowrap">申请单位:</span> + <div class="grid-content topInfo"> + <el-cascader :teleported="false" v-model="searchParams.applyDepId" @change="changeDep4()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> </div> </el-col> <el-button type="primary" style="margin-left: 20px" @click="searchRecord" size="small">查询</el-button> @@ -205,16 +206,26 @@ <el-table-column property="applyUname" label="申请人" align="center"/> <el-table-column property="applyDepName" label="申请单位" align="center"/> <el-table-column property="applyTime" label="申请时间" align="center"/> - <el-table-column property="startUname" label="开始人" align="center"> + <el-table-column property="workLocation" label="作业地点" align="center"> <template #default="scope"> - <span>{{scope.row.startUname?scope.row.startUname:'--'}}</span> + <span>{{scope.row.workLocation?scope.row.workLocation:'--'}}</span> </template> </el-table-column> - <el-table-column property="finishUname" label="结束人" align="center"> + <el-table-column property="workContent" label="作业内容" align="center"> <template #default="scope"> - <span>{{scope.row.finishUname?scope.row.finishUname:'--'}}</span> + <span>{{scope.row.workContent?scope.row.workContent:'--'}}</span> </template> </el-table-column> +<!-- <el-table-column property="startUname" label="开始人" align="center">--> +<!-- <template #default="scope">--> +<!-- <span>{{scope.row.startUname?scope.row.startUname:'--'}}</span>--> +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column property="finishUname" label="结束人" align="center">--> +<!-- <template #default="scope">--> +<!-- <span>{{scope.row.finishUname?scope.row.finishUname:'--'}}</span>--> +<!-- </template>--> +<!-- </el-table-column>--> <el-table-column property="workStartTime" label="作业开始时间" align="center"> <template #default="scope"> <span>{{scope.row.workStartTime?scope.row.workStartTime:'--'}}</span> @@ -417,7 +428,8 @@ workPermitNo: '', startTime: '', endTime: '', - workAllStatus: null + workAllStatus: null, + applyDepId: null }, dialogReview: false, departmentList: [], @@ -455,7 +467,6 @@ operators: [] }, casProps: { - expandTrigger: 'hover', emitPath: false, value: 'depId', label: 'depName', @@ -472,7 +483,8 @@ { id: 5, name: '断路作业' }, { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, - { id: 8, name: '盲板抽堵作业' } + { id: 8, name: '盲板抽堵作业' }, + { id: 9, name: '打开作业' } ], workTypeList: [ { id: 1, name: '动火作业' }, @@ -482,7 +494,8 @@ { id: 5, name: '断路作业' }, { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, - { id: 8, name: '盲板抽堵作业' } + { id: 8, name: '盲板抽堵作业' }, + { id: 9, name: '打开作业' } ], workStatusList: [ { @@ -560,6 +573,9 @@ } const changeDep3=()=>{ getDepMonth() + } + const changeDep4=()=>{ + searchRecord() } const toFullscreen =()=>{ const element = document.getElementById('bigScreen') @@ -831,6 +847,7 @@ } // 刷新 const reLoadData = async () => { + state.pageIndex = 1 getMydepList() }; @@ -882,6 +899,7 @@ // 关键词查询记录 const searchRecord = async () => { + state.pageIndex = 1 getMydepList() }; // 重置搜索 @@ -892,7 +910,8 @@ workPermitNo: '', startTime: '', endTime: '', - workAllStatus: null + workAllStatus: null, + applyDepId: null } state.searchDate = [] state.pageIndex = 1 @@ -1058,6 +1077,7 @@ changeType2, changeType4, changeDep3, + changeDep4, toFullscreen, // handleReview, openVideo, @@ -1120,7 +1140,7 @@ justify-content: space-between; align-items: flex-start; margin-bottom: 20px; - height: 40%; + height: 50%; &:last-of-type{ margin-bottom: 0; } @@ -1178,6 +1198,8 @@ width: 100%; height: 85%; overflow-y: scroll; + scrollbar-width: none; /* firefox */ + -ms-overflow-style: none; /* IE 10+ */ .el-table{ //:deep(.el-table__inner-wrapper){ // height: 100% !important; diff --git a/src/views/system/saftyManage/component/saftyDialog.vue b/src/views/system/saftyManage/component/saftyDialog.vue index 48a99ea..715a7fa 100644 --- a/src/views/system/saftyManage/component/saftyDialog.vue +++ b/src/views/system/saftyManage/component/saftyDialog.vue @@ -142,6 +142,10 @@ { label: "盲板抽堵作业", value: 8 + }, + { + label: "打开作业", + value: 9 } ] }); diff --git a/src/views/system/saftyManage/index.vue b/src/views/system/saftyManage/index.vue index afdc253..c72c07d 100644 --- a/src/views/system/saftyManage/index.vue +++ b/src/views/system/saftyManage/index.vue @@ -154,6 +154,10 @@ { label: "盲板抽堵作业", value: 8 + }, + { + label: "打开作业", + value: 9 } ] }); diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 5aca7e7..2c935bc 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -12,7 +12,7 @@ size="default" ></el-cascader> <el-input size="default" v-model.trim="userTableData.listQuery.searchParams.username" placeholder="请输入用户名" style="max-width: 180px;margin-left: 10px;margin-right: 10px"> </el-input> - <el-input size="default" v-model.trim="userTableData.listQuery.searchParams.realName" placeholder="请输入真实姓名" style="max-width: 180px"> </el-input> +<!-- <el-input size="default" v-model.trim="userTableData.listQuery.searchParams.realName" placeholder="请输入真实姓名" style="max-width: 180px"> </el-input>--> <el-button size="default" type="primary" class="ml10" @click="initUserTableData"> <el-icon> <ele-Search /> -- Gitblit v1.9.2