From 30e36368e54581fcc0c581a004f1f68873c1e819 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期二, 10 五月 2022 08:37:34 +0800 Subject: [PATCH] 地图 --- src/components/Tab/Plot.vue | 63 src/views/majorHazardSourceMonitoring/productionEquipment/index.vue | 1 src/views/specialWorkManage/specialWork/taskCreate/components/taskCreate.vue | 1336 +++++++ src/views/specialWorkManage/workPlan/reserve.vue | 238 + src/views/doublePreventAction/hiddenDanger/inspectionRecord/index.vue | 64 src/views/specialWorkManage/specialWork/taskCreate/components/file/index.vue | 251 + src/views/specialWorkManage/specialWork/taskCreate/components/safetyAndRiskConfirm/index.vue | 298 + src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionComplete/index.vue | 2 config/dev.env.js | 9 src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionUnusual/index.vue | 8 src/views/doublePreventAction/hiddenDanger/inspectionTask/components/inpectionPoint.vue | 7 src/views/specialWorkManage/specialWork/taskCreate/components/equipment/index.vue | 91 src/views/specialWorkManage/specialWork/taskCreate/components/taskBasic/index.vue | 1552 ++++++++ src/components/Tab/Model.vue | 6 src/views/doublePreventAction/riskLevelManage/fourColorMap/oneHundredAndThirty/index.vue | 288 + src/views/specialWorkManage/specialWork/index.vue | 13 src/views/specialWorkManage/specialWork/taskCreate/components/file/constructionFile.vue | 247 + src/views/login/register.vue | 1139 ----- src/views/specialWorkManage/workPlan/form/dialog.vue | 224 + src/views/specialWorkManage/specialWork/taskInfo/components/equipment/index.vue | 72 src/permission.js | 2 src/api/login.js | 2 src/views/doublePreventAction/hiddenDanger/inspectionTask/index.vue | 40 src/views/specialWorkManage/specialWork/taskInfo/components/taskInfo.vue | 179 src/views/specialWorkManage/specialWork/taskInfo/components/hotFireBasic/index.vue | 723 +++ src/api/user.js | 9 src/views/doublePreventAction/riskLevelManage/fourColorMap/index.vue | 277 - src/router/index.js | 10 src/views/doublePreventAction/hiddenDanger/inspectionRecord/components/detail.vue | 160 src/views/specialWorkManage/specialWork/taskInfo/components/safetyAndRiskConfirm/index.vue | 277 + public/data/plots_namisuo.geojson | 4 src/assets/tileset.json | 1 src/views/login/pwdChange.vue | 174 src/views/specialWorkManage/specialWork/taskInfo/components/fireMan/index.vue | 68 src/views/systemManage/appFile/index.vue | 469 ++ src/views/specialWorkManage/workPlan/statistics.vue | 216 + src/views/specialWorkManage/specialWork/taskCreate/components/fireMan/index.vue | 127 src/views/specialWorkManage/specialWork/taskInfo/components/reviewInfo/index.vue | 72 src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionPerson/index.vue | 10 src/views/specialWorkManage/specialWork/taskInfo/components/fileAndEquipment/index.vue | 207 + src/views/systemManage/userManage/index.vue | 106 src/views/specialWorkManage/specialWork/taskInfo/index.vue | 528 ++ src/views/specialWorkManage/specialWork/taskCreate/index.vue | 344 + src/views/specialWorkManage/specialWork/taskCreate/components/reviewInfo/index.vue | 73 src/views/doublePreventAction/hiddenDanger/inspectionStatistics/index.vue | 6 src/views/layout/components/Navbar.vue | 19 src/views/specialWorkManage/specialWork/taskCreate/components/safetyAction/index.vue | 170 public/wutu3d/cesium-wutu/wutu3d.js | 2 src/views/login/components/login-form.vue | 26 src/views/specialWorkManage/specialWork/taskInfo/components/safetyAction/index.vue | 118 src/views/doublePreventAction/riskLevelManage/fourColorMap/sixty/index.vue | 302 + src/views/specialWorkManage/index.vue | 13 src/views/specialWorkManage/specialWork/taskCreate/components/file/allFire.vue | 244 + src/views/specialWorkManage/workPlan/index.vue | 13 src/api/fourColorMap.js | 24 55 files changed, 9,565 insertions(+), 1,359 deletions(-) diff --git a/config/dev.env.js b/config/dev.env.js index 548512a..d475b72 100644 --- a/config/dev.env.js +++ b/config/dev.env.js @@ -5,8 +5,8 @@ // BASE_API: '"http://10.142.119.232:8100"', // IMG_API: '"http://10.142.119.232:8100/upload/"', - // BASE_API: '"http://222.92.213.22:8101/api"', - // IMG_API: '"http://222.92.213.22:8101/api/upload/"', + // BASE_API: '"http://222.92.213.22:8006/zhongtai"', + // IMG_API: '"http://222.92.213.22:8006/zhongtai/upload/"', // // BASE_API: '"https://sinanoaq.cn:8100"', // BASE_API: '"http://127.0.0.1:8100"', @@ -16,11 +16,16 @@ // IMG_API: '"https://sinanoaq.com:8100/upload/"', // BASE_API: '"http://220.171.99.118:4100"', // IMG_API: '"http://220.171.99.118:4100/upload/"', + // BASE_API: '"http://192.168.0.35:8006"', + // IMG_API: '"http://192.168.0.35:8006/upload/"', BASE_API: '"http://192.168.0.35:8006"', IMG_API: '"http://192.168.0.35:8006/upload/"', + // BASE_API: '"http://222.92.213.21:8006/zhongtai"', // IMG_API: '"http://222.92.213.21:8006/zhongtai/upload/"', NANO_API: '"http://127.0.0.1:8081/zhongtaiexam"', // BASE_API: '"http://220.171.99.118:4101/api"', // IMG_API: '"http://220.171.99.118:4101/api/upload/"', + // BASE_API: '"http://112.86.23.31:8006"', + // IMG_API: '"http://112.86.23.31:8006/upload/"', }; diff --git a/public/data/plots_namisuo.geojson b/public/data/plots_namisuo.geojson index a19bf6e..9a882b5 100644 --- a/public/data/plots_namisuo.geojson +++ b/public/data/plots_namisuo.geojson @@ -8,7 +8,7 @@ "style": { "text": "F号楼", "clampToGround": true }, "attr": { "name": "F号楼", - "id": "cabe679c-373b-4890-ae0c-7a7061f89dfd" + "id": "1" } }, "geometry": { @@ -57,7 +57,7 @@ "type": "Feature", "properties": { "type": "polygon", - "style": { "text": "E号楼", "clampToGround": true, "color": "#ff0000" }, + "style": { "text": "E号楼", "clampToGround": true }, "attr": { "name": "E号楼", "id": "7a3094db-d227-4b3f-bf35-1ce64c365e42" diff --git a/public/wutu3d/cesium-wutu/wutu3d.js b/public/wutu3d/cesium-wutu/wutu3d.js index 990c840..d94fe70 100644 --- a/public/wutu3d/cesium-wutu/wutu3d.js +++ b/public/wutu3d/cesium-wutu/wutu3d.js @@ -1961,10 +1961,12 @@ }, o.ScreenSpaceEventType.LEFT_DOUBLE_CLICK) }, endDraw: function () { + debugger if (!this._enabled) return this; this._positions_draw.length < this._minPointNum || (this.updateAttrForDrawing(), this.disable()) }, finish: function () { + debugger var e = this.entity; e.editing = this.getEditClass(e), e._positions_draw = this.getDrawPosition(), e.polyline.positions = new o.CallbackProperty(function (t) { return e._positions_draw diff --git a/src/api/fourColorMap.js b/src/api/fourColorMap.js new file mode 100644 index 0000000..e21e91e --- /dev/null +++ b/src/api/fourColorMap.js @@ -0,0 +1,24 @@ +import {getToken} from "../utils/auth"; +import request from '@/utils/request' + +export function addMap(data) { + return request({ + headers:{ + 'Authorization': getToken() + }, + url: process.env.BASE_API+'/fourColorMap/add2', + method: 'post', + data + }); +} + +export function getMap(params) { + return request({ + headers:{ + 'Authorization': getToken() + }, + url: process.env.BASE_API+'/fourColorMap/get/list2', + method: 'post', + params:params?params:{} + }); +} \ No newline at end of file diff --git a/src/api/login.js b/src/api/login.js index ab903dc..54261e3 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -51,7 +51,7 @@ }, url: process.env.BASE_API+'/register/add', method: 'post', - data:data + data }) } diff --git a/src/api/user.js b/src/api/user.js index da92fd9..268dd5c 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -244,3 +244,12 @@ data }) } + + +export function pwdChange(data) { + return request({ + url: process.env.BASE_API + '/pwd-change', + method: 'post', + data + }) +} diff --git a/src/assets/tileset.json b/src/assets/tileset.json new file mode 100644 index 0000000..29cc7ea --- /dev/null +++ b/src/assets/tileset.json @@ -0,0 +1 @@ +{"asset":{"generatetool":"cesiumlab2@www.cesiumlab.com/osgb2tiles3","gltfUpAxis":"Z","version":"1.0"},"geometricError":1483.9877869095,"root":{"boundingVolume":{"box":[-163.46875,141.668724060059,1254.39343261719,646.749145507813,0,0,0,360.510932922363,0,0,0,47.9827880859375]},"children":[{"boundingVolume":{"box":[-163.46875,141.668724060059,1254.39343261719,646.749145507813,0,0,0,360.510932922363,0,0,0,47.9827880859375]},"content":{"uri":"top/0_0_0_0.json"},"geometricError":741.99389345475}],"geometricError":1483.9877869095,"transform":[-0.989732660191945,0.142930967076336,0.0,0.0,-0.0953358071431997,-0.660157584780009,0.745052378785398,0.0,0.106491057022322,0.737402672837608,0.667005961642188,0.0,680094.759938871,4709350.32278489,4231252.07610948,1.0]}} diff --git a/src/components/Tab/Model.vue b/src/components/Tab/Model.vue index 7b613e7..4b62e25 100644 --- a/src/components/Tab/Model.vue +++ b/src/components/Tab/Model.vue @@ -101,7 +101,13 @@ return this.timestamp && global.map ? global.map.models : []; } }, + mounted() { + this.beginSet() + }, methods: { + beginSet() { + this.focusHandle(this.models[0].id) + }, editHandle(model) { if (!global.map) return; this.model = { diff --git a/src/components/Tab/Plot.vue b/src/components/Tab/Plot.vue index 1082c5a..15a6b1b 100644 --- a/src/components/Tab/Plot.vue +++ b/src/components/Tab/Plot.vue @@ -79,6 +79,7 @@ </template> <script> + import { addMap } from '@/api/fourColorMap' import { global } from '../../global'; // 默认样式 @@ -106,6 +107,35 @@ }, showCreatePanel: false, showPlot: true, + form:{ + id:'', + etype:1, + "type": "Feature", + "properties": { + "type": "polygon", + "style": { "text": "D号楼", "clampToGround": true }, + "attr": { + "name": "D号楼", + "id": "8a65b4df-2450-4dab-958d-fbd182cfd92d" + } + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [120.728524, 31.258178, 0], + [120.727911, 31.257992, 0], + [120.728024, 31.25772, 0], + [120.727986, 31.2577, 0], + [120.728039, 31.257535, 0], + [120.728759, 31.257714, 0], + [120.728524, 31.258178, 0], + [120.728524, 31.258178, 0], + [120.728524, 31.258178, 0] + ] + ] + } + }, }; }, computed: { @@ -149,7 +179,11 @@ name: '', }; }, - createHandle() { + async createHandle() { + // debugger + // this.form.geometry = JSON.stringify(this.form.geometry) + // this.form.properties = JSON.stringify(this.form.properties) + // let res = await addMap(this.form) if (!global.map) return; let map = global.map; const { id, name } = this.label; @@ -169,9 +203,34 @@ name, }, }, - () => { + (entity) => { this._initLabel(); this.$store.dispatch('map/updateTimestamp'); + this.form = { + id:'', + etype:1, + "type": "Feature", + "properties": + JSON.stringify(entity.attribute), + "geometry": JSON.stringify({ + "type": "Polygon", + "coordinates": [ + + wutu3d.draw.attr.getCoordinates(entity) + + ] + }) + } + addMap(this.form).then(res =>{ + if(res.data.code === '200'){ + this.$message({ + type:'success', + duration:2000, + title:'成功', + message:'四色图新增成功', + }) + } + }) } ); } diff --git a/src/permission.js b/src/permission.js index 3e68d61..e5247a6 100644 --- a/src/permission.js +++ b/src/permission.js @@ -17,7 +17,7 @@ return roles.some(role => permissionRoles.indexOf(role) >= 0) } -const whiteList = ['/login', '/auth-redirect','/agreement','/register','/productionEquipment','/instrumentData','/equipmentAlarm'] // no redirect whitelist +const whiteList = ['/login','/pwdChange', '/auth-redirect','/agreement','/register','/productionEquipment','/instrumentData','/equipmentAlarm'] // no redirect whitelist router.beforeEach((to, from, next) => { NProgress.start() // start progress bar diff --git a/src/router/index.js b/src/router/index.js index 084971d..e545e78 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -53,13 +53,19 @@ hidden: true }, { + path: '/pwdChange', + // 密码变更 + component: () => import('@/views/login/pwdChange'), + hidden: true + }, + { path: '/', component: Layout, - redirect: '/workPlan/workPlan/reserve', + redirect: '/specialWorkManage/index/specialWorkManage/workPlan/index/specialWorkManage/workPlan/reserve', children: [ { path: 'dashboard', - component: () => import('@/views/workPlan/reserve'), + component: () => import('@/views/specialWorkManage/workPlan/reserve'), name: 'Dashboard1', meta: { title: '首页', icon: 'el-icon-dash', noCache: true, affix: true } } diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionRecord/components/detail.vue b/src/views/doublePreventAction/hiddenDanger/inspectionRecord/components/detail.vue new file mode 100644 index 0000000..96ca670 --- /dev/null +++ b/src/views/doublePreventAction/hiddenDanger/inspectionRecord/components/detail.vue @@ -0,0 +1,160 @@ +<template> + <div class="app-container"> + <el-dialog title="巡检记录详情" :visible.sync="inspectionRecordFormVisible" append-to-body :close-on-click-modal="false" width="40%"> + <el-form ref="inspectionRecordForm" :model="inspectionRecordForm" label-position="right" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item label="任务名称" prop="title"> + <el-input v-model="inspectionRecordForm.title" class="analyseUnit_input" :disabled="ifShow"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="检查类型" prop="type"> + <el-select v-model="inspectionRecordForm.type" class="analyseUnit_input" :disabled="ifShow"> + <el-option + v-for="item in typeList" + :key=item.id + :label=item.name + :value=item.id + ></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="任务名称" prop="noticeUname"> + <el-input v-model="inspectionRecordForm.noticeUname" class="analyseUnit_input" :disabled="ifShow"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="检查类型" prop="execUname"> + <el-input v-model="inspectionRecordForm.execUname" class="analyseUnit_input" :disabled="ifShow"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="巡检开始时间" prop="startTime"> + <el-date-picker v-model="inspectionRecordForm.execUname" value-format="yyyy-MM-dd HH:mm:ss" type="datetime" placeholder="周期开始时间" class="analyseUnit_input" :disabled="ifShow" ></el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="巡检结束时间" prop="startTime"> + <el-date-picker v-model="inspectionRecordForm.execUname" value-format="yyyy-MM-dd HH:mm:ss" type="datetime" placeholder="周期开始时间" class="analyseUnit_input" :disabled="ifShow"></el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="巡检提交时间" prop="execUname"> + <el-date-picker v-model="inspectionRecordForm.execUname" value-format="yyyy-MM-dd HH:mm:ss" type="datetime" placeholder="周期开始时间" class="analyseUnit_input" :disabled="ifShow"></el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="任务状态" prop="status"> + <el-select v-model="inspectionRecordForm.status" class="analyseUnit_input" :disabled="ifShow"> + <el-option + v-for="item in statusList" + :key="item.id" + :label="item.name" + :value="item.id" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + </el-dialog> + <el-dialog title="巡检单元详情" :visible.sync="inspectionRecordDetailFormVisible" append-to-body :close-on-click-modal="false" width="30%"> + <el-form ref="inspectionRecordDetailForm" :model="inspectionRecordDetailForm" label-position="right" label-width="120px"> + <el-row> + <el-col :span="24"> + <el-form-item label="隐患排查内容" prop="content"> + <el-input v-model="inspectionRecordDetailForm.content" class="input" :disabled="ifShow"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="上报说明" prop="info"> + <el-input v-model="inspectionRecordDetailForm.info" class="input" :disabled="ifShow"> + </el-input> + </el-form-item> + </el-col> + + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="上报照片" prop="img"> + <el-input v-model="inspectionRecordDetailForm.img" class="input" :disabled="ifShow"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="状态" prop="status"> + <el-select v-model="inspectionRecordDetailForm.status" class="input" :disabled="ifShow"> + <el-option + v-for="item in statusList" + :key="item.id" + :label="item.name" + :value="item.id" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + </el-dialog> + </div> +</template> + +<script> + export default { + name: "detail", + data(){ + return{ + inspectionRecordForm:{}, + inspectionRecordFormVisible:false, + inspectionRecordDetailForm:{}, + inspectionRecordDetailFormVisible:false, + ifShow:true, + typeList:[{id:1,name:'日常检查'},{id:2,name:'周期检查'}], + statusList:[{id:1,name:'待巡检'},{id:2,name:'巡检中'},{id:3,name:'已完成'},{id:4,name:'超时未巡检'},{id:5,name:'已取消'}], + } + }, + components:{ + + }, + methods:{ + showInspectionRecordForm(value) { + this.inspectionRecordFormVisible = true + this.inspectionRecordForm = JSON.parse(JSON.stringify(value)) + }, + showInspectionRecordDetailForm(value) { + this.inspectionRecordDetailFormVisible = true + this.inspectionRecordDetailForm = value + } + } + } +</script> + +<style scoped> +/deep/.filter-container{ + padding-left: 0px !important; +} + .analyseUnit_input{ + width:200px; + } + .input{ + width:400px; + } +</style> diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionRecord/index.vue b/src/views/doublePreventAction/hiddenDanger/inspectionRecord/index.vue index 4c61f8c..34e3041 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionRecord/index.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionRecord/index.vue @@ -91,15 +91,18 @@ </el-table-column> <el-table-column label="隐患排查内容" prop="content" align="center"> </el-table-column> - <el-table-column label="巡检内容" prop="info" align="center"> + <el-table-column label="上报说明" prop="info" align="center"> </el-table-column> - <el-table-column label="巡检照片" prop="img" align="center"> + <el-table-column label="上报照片" prop="img" align="center"> </el-table-column> <el-table-column label="状态" prop="status" align="center"> + <template slot-scope="scope"> + {{ scope.row.status | parseStatusList}} + </template> </el-table-column> <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> <template slot-scope="scope"> - <el-button type="text" @click="showMeasureDetail(scope.row)">详情</el-button> + <el-button type="text" @click="showInspectionRecordDetailForm(scope.row)">详情</el-button> </template> </el-table-column> </el-table> @@ -116,6 +119,12 @@ </el-table-column> <el-table-column label="巡检人" prop="execUname" align="center"> </el-table-column> + <el-table-column label="巡检开始时间" prop="execUname" align="center"> + </el-table-column> + <el-table-column label="巡检结束时间" prop="execUname" align="center"> + </el-table-column> + <el-table-column label="巡检提交时间" prop="execUname" align="center"> + </el-table-column> <el-table-column label="任务状态" prop="status" align="center"> <template slot-scope="scope"> {{ scope.row.status | parseStatus}} @@ -123,7 +132,7 @@ </el-table-column> <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> <template slot-scope="scope"> - <el-button type="text" @click="showInspectionRecordForm(scope.row,'编辑')">查看</el-button> + <el-button type="text" @click="showInspectionRecordDetailForm(scope.row,'编辑')">查看</el-button> </template> </el-table-column> </el-table> @@ -168,15 +177,19 @@ <el-button @click="unitFormVisible = false">取消</el-button> </div> </el-dialog> + <detail ref="detail"></detail> </div> </template> <script> + import detail from './components/detail.vue' import { mapGetters } from 'vuex' import { computePageCount } from '@/utils' import { getInspectionRecord } from '@/api/inspectionTask' import {getAllDepartment, getDepartmentList} from "../../../../api/departmentManage"; + import {safetyInspectionItemName} from "../../../../api/safetySelfInspection"; export default { + components: { detail }, name: 'index', filters: { parseType(type){ @@ -193,6 +206,19 @@ return "任务关闭" } }, + parseStatusList(status) { + if(status === 1){ + return "待巡检" + }else if(status === 2) { + return "巡检中" + }else if(status === 3) { + return "已完成" + }else if(status === 4) { + return "超时未巡检" + }else{ + return "已取消" + } + } }, computed: { ...mapGetters([ @@ -234,9 +260,13 @@ }, } }, + components: { + detail + }, created() { this.getInspectionRecordData() this.getDepartment() + this.getUser() }, methods: { async getInspectionRecordData(){ @@ -264,21 +294,23 @@ }) } }, - showAnalyseUnitForm(value,type){ - this.inspectionRecordVisible = true - this.$nextTick(() =>{ - this.$refs["analyseUnitForm"].clearValidate() - }) - if(type === '新增'){ - this.title = '新增' - this.inspectionRecordData = { - - } + async getUser(){ + let res = await safetyInspectionItemName() + if(res.data.code === '200'){ + this.userList = res.data.result }else{ - this.title = '修改' - this.inspectionRecordData = value + this.$message({ + message:res.data.message, + type:'warning' + }) } }, + showInspectionRecordForm(value){ + this.$refs.detail.showInspectionRecordForm(value) + }, + showInspectionRecordDetailForm(value) { + this.$refs.detail.showInspectionRecordDetailForm(value) + }, refreshHandle(){ this.getInspectionRecordData() }, diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionComplete/index.vue b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionComplete/index.vue index 8c79628..95d33c8 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionComplete/index.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionComplete/index.vue @@ -25,7 +25,7 @@ xAxis: { type: 'category', boundaryGap: false, - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + data: ['2022-4-1', '2022-4-2', '2022-4-4', '2022-4-4', '2022-4-5', '2022-4-6', '2022-4-7'] }, yAxis: { type: 'value' diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionPerson/index.vue b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionPerson/index.vue index ab48306..ab266c5 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionPerson/index.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionPerson/index.vue @@ -17,6 +17,14 @@ this.drawLine() }, methods:{ + // setCount(val){ + // this.numData = val.map(item =>{ + // return item.num + // }) + // this.timeData = val.map(item =>{ + // return item.errorTaskIdList + // }) + // }, async drawLine(){ this.myChart = this.$echarts.init(document.getElementById('inspectionPerson')) this.myChart.setOption({ @@ -30,7 +38,7 @@ color:'#fac858', xAxis: { type: 'category', - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + data: ['2022-4-1', '2022-4-2', '2022-4-4', '2022-4-4', '2022-4-5', '2022-4-6', '2022-4-7'] }, yAxis: { type: 'value' diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionUnusual/index.vue b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionUnusual/index.vue index ee83469..80d2946 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionUnusual/index.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/components/inspectionUnusual/index.vue @@ -1,5 +1,5 @@ <template> - <div id="toadyLine" style="width:90%;height:360px;margin: 0 auto;"> + <div id="inspectionUnusual" style="width:90%;height:360px;margin: 0 auto;"> </div> </template> @@ -18,9 +18,9 @@ }, methods:{ async drawTodayLine(){ - this.timeData = [1,2,3,4,] - this.numData = [2,5,7,9] - let myChart = this.$echarts.init(document.getElementById('toadyLine')) + this.timeData = ['2022-4-1', '2022-4-2', '2022-4-4', '2022-4-4', '2022-4-5', '2022-4-6', '2022-4-7'] + this.numData = [2,5,7,9,1,15,6] + let myChart = this.$echarts.init(document.getElementById('inspectionUnusual')) myChart.setOption({ xAxis: { type: 'category', diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/index.vue b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/index.vue index ba480e3..f938c1c 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/index.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionStatistics/index.vue @@ -81,8 +81,6 @@ value3:['',''], listQuery:{ "dateList": [ - "", - "" ], "endDate": "", "execUid": null, @@ -111,7 +109,7 @@ this.listQuery.startDate = this.value1[0] this.listQuery.endDate = this.value1[1] let res = await getInspectionCount(this.listQuery) - debugger + // this.$refs.inspectionPerson.setCount(res.data.result) }, async changeInspectionPerson() { let res = await getInspectionCount(this.listQuery) @@ -122,7 +120,7 @@ <style scoped> /deep/.el-divider--horizontal { - margin-top: 0px !important; + margin-top: 1px !important; } .inspectionStatistics{ width:100%; diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionTask/components/inpectionPoint.vue b/src/views/doublePreventAction/hiddenDanger/inspectionTask/components/inpectionPoint.vue index 5846821..083b51d 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionTask/components/inpectionPoint.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionTask/components/inpectionPoint.vue @@ -84,8 +84,10 @@ // content:item.riskMeasureDesc // } // }))) - this.inspectionPointData.push({id:value.id,content:value.riskMeasureDesc}) - this.$emit('giveToForm',this.inspectionPointData) + if(this.inspectionPointData.findIndex(item => item.id === value.id) === -1) { + this.inspectionPointData.push({id:value.id,content:value.riskMeasureDesc}) + this.$emit('giveToForm',this.inspectionPointData) + } } }else{ this.controlActionForm.workId = JSON.stringify(this.inspectionTaskForm.workId) @@ -109,7 +111,6 @@ }, deleteById(value){ if(this.title === '新建巡检计划设定'){ - debugger this.inspectionPointData.splice(value,1) }else{ this.$confirm('删除此条措施,是否继续','提示',{ diff --git a/src/views/doublePreventAction/hiddenDanger/inspectionTask/index.vue b/src/views/doublePreventAction/hiddenDanger/inspectionTask/index.vue index c72d513..ccebb06 100644 --- a/src/views/doublePreventAction/hiddenDanger/inspectionTask/index.vue +++ b/src/views/doublePreventAction/hiddenDanger/inspectionTask/index.vue @@ -343,10 +343,14 @@ execDepartment:'', inspectionTaskVisible:false, inspectionTaskFormRules:{ - hazardDep: [{ required: true, message: '责任部门不能为空', trigger: 'change' }], - hazardLiablePerson: [{ required: true, message: '责任人不能为空', trigger: 'blur' }], - hazardCode: [{ required: true, message: '安全风险分析对象编码不能为空', trigger: 'blur' }], - riskUnitName: [{ required: true, message: '安全风险分析单元名称不能为空', trigger: 'blur' }], + title: [{ required: true, message: '任务名称不能为空', trigger: 'blur' }], + type: [{ required: true, message: '检查类型不能为空', trigger: 'change' }], + intervalSeconds: [{ required: true, message: '检查频次不能为空', trigger: 'change' }], + noticeSeconds: [{ required: true, message: '提前通知时间不能为空', trigger: 'change' }], + startTime: [{ required: true, message: '周期开始时间不能为空', trigger: 'change' }], + effectSeconds: [{ required: true, message: '任务有效时间不能为空', trigger: 'change' }], + noticeUid: [{ required: true, message: '异常通知人员不能为空', trigger: 'change' }], + execUid: [{ required: true, message: '执行巡检人员不能为空', trigger: 'change' }], }, inspectionTaskForm:{ type:null, @@ -467,7 +471,7 @@ this.noticeDepartment = this.handleDepartment(JSON.parse(JSON.stringify(value)).noticeUid) this.changeNotice() this.execDepartment = this.handleDepartment(JSON.parse(JSON.stringify(value)).execUid) - this.changeExec() + this.changeExec() this.inspectionTaskForm = JSON.parse(JSON.stringify(value)) // this.inspectionTaskForm.execUid = value.execUname // this.inspectionTaskForm.noticeUid = value.noticeUname @@ -499,6 +503,11 @@ this.$message({ type:'warning', message:'任务持续时间不能大于检查频次' + }) + }else if(this.justifyTime(this.inspectionTaskForm.startTime,this.inspectionTaskForm.noticeSeconds)){ + this.$message({ + type:'warning', + message:'周期开始时间减去当前时间和提前通知时间要大于等于半小时' }) }else{ if(this.title === '新建巡检计划设定'){ @@ -558,6 +567,18 @@ }) }, + justifyTime(time,interval) { + debugger + let timeStr = new Date(time.replace(/-/g,'/')) + let date = parseInt(timeStr.getTime()/1000) + let newTimeStr = new Date() + let newDate = parseInt(newTimeStr.getTime()/1000) + if(date - newDate - interval - 1800 >= 0){ + return false + }else{ + return true + } + }, deleteById(val){ this.$confirm('删除此条信息,是否继续','提示',{ confirmButtonText:'确定', @@ -576,10 +597,11 @@ }) }, receiveToForm(value) { - this.inspectionTaskForm.riskControlMeasureIdList = [] - this.inspectionTaskForm.riskControlMeasureIdList = value.map( item => { - return item.id - }) + // this.inspectionTaskForm.riskControlMeasureIdList = [] + // this.inspectionTaskForm.riskControlMeasureIdList = value.map( item => { + // return item.id + // }) + this.inspectionTaskForm.riskControlMeasureIdList.push({id:value.id}) }, refreshHandle(){ this.getInspectionTaskData() diff --git a/src/views/doublePreventAction/riskLevelManage/fourColorMap/index.vue b/src/views/doublePreventAction/riskLevelManage/fourColorMap/index.vue index 5ec579a..9e73e6b 100644 --- a/src/views/doublePreventAction/riskLevelManage/fourColorMap/index.vue +++ b/src/views/doublePreventAction/riskLevelManage/fourColorMap/index.vue @@ -1,284 +1,9 @@ <template> - <div class="map-layout"> - <Map @init="init" :option="option" v-if="option" /> - <Tab v-if="loaded" /> - </div> + <router-view /> </template> <script> - import Map from '../../../../components/Map'; - import Tab from '../../../../components/Tab'; - import { global } from '../../../../global'; - import { - getCatesian3FromPX, - Cartesian3_to_WGS84, - } from '../../../../components/Map/libs/Point'; - - export default { - name: 'App', - components: { - Map, - Tab, - }, - data() { - return { - loaded: false, - map: null, - option: null, - heatLayer: null, - shineishiwai: true, - }; - }, - mounted() { - // 地图配置初始化 - this.option = { - // 初始化视图中心点 - viewpoint: { - y: 31.254992, - x: 120.727592, - z: 289.24, - heading: 13.8, - pitch: -37.3, - roll: 360, - }, - - // 显示位置初始化按钮 - homeButton: true, - - // 当前时间 - currentTime: '08:30:00', - - // 影像底图 - imageryProvider: new Cesium.WebMapTileServiceImageryProvider({ - url: - 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer', - layer: '', - style: 'default', - tileMatrixSetID: 'w', - format: 'tiles', - maximumLevel: 18, - }), - }; - window.sss = this; - }, - methods: { - init(map) { - this.loaded = true; - - map.addModel({ - link: 'http://222.92.213.21:8006/zhongtaiweb/tileset.json', - name: '商业园区', - callback: tileset => { - var boundingSphere = tileset.boundingSphere; - var cartographic = Cesium.Cartographic.fromCartesian( - boundingSphere.center - ); - var surface = Cesium.Cartesian3.fromRadians( - cartographic.longitude, - cartographic.latitude, - 0.0 - ); - var offset = Cesium.Cartesian3.fromRadians( - cartographic.longitude, - cartographic.latitude, - 102 - ); - var translation = Cesium.Cartesian3.subtract( - offset, - surface, - new Cesium.Cartesian3() - ); - tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); - }, - }); - - map.viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString( - '#050F1F' - ); - map.viewer.scene.logarithmicDepthBuffer = false; - map.viewer.scene.globe.enableLighting = true; - map.viewer.scene.sun.show = false; - map.viewer.scene.moon.show = false; - map.viewer.scene.fog.enabled = false; - map.viewer.scene.skyBox = null; - - // 初始化事件 - this.initEvent(map); - - this.testLoadedData(); - }, - // 加载测试数据 - testLoadedData() { - const map = global.map; - if (!map) return; - $.get('./public/data/plots_namisuo.geojson', res => { - map.loadGeoJSON(res); - }); - }, - initEvent(map) { - let popup = null; - const _this = this; - map.on( - 'click', - ({ - position, - cartesian3, - latLngPositionGlobe, - latLngPosition, - entity, - attr, - }) => { - if (popup) { - popup.destroy(); - popup = null; - } - let type = entity && entity.attribute && entity.attribute.type; - if (type) { - popup = new wutu3d.DivPoint(map.viewer, { - html: - "<div class='popup-wrapper'>" + - attr.name + - '<br/><br/>XXXXXXXX</div>', - position: cartesian3, - anchor: [-170, -80], - }); - popup.visible = true; - } - if (attr.name && attr.name === '含内景大楼') { - _this.changeModel(!_this.shineishiwai); - _this.shineishiwai = !_this.shineishiwai; - } - - const pos = getCatesian3FromPX(position, map.viewer); - const pos1 = Cartesian3_to_WGS84(pos); - console.log(pos1); - - var pt = turf.point([Number(pos1.lng), Number(pos1.lat)]); - var poly = turf.polygon([ - [ - [120.159277, 30.227512], - [120.158919, 30.227569], - [120.158777, 30.227431], - [120.158904, 30.227151], - [120.15911, 30.227119], - [120.159339, 30.227347], - [120.159277, 30.227512], - ], - ]); - - const inPoly = turf.booleanPointInPolygon(pt, poly); - - if ( - //自己测量对应建筑的空间范围 - inPoly && - pos1.alt > 0 && //20.562718744748462 - pos1.alt < 121.7 - ) { - _this.changeModel(!_this.shineishiwai); - _this.shineishiwai = !_this.shineishiwai; - } - } - ); - // map.on( - // 'mousemove', - // ({ cartesian3, latLngPositionGlobe, latLngPosition, entity, attr }) => { - // if (popup) { - // popup.destroy(); - // popup = null; - // } - // let type = entity && entity.attribute && entity.attribute.type; - // if (type) { - // popup = new wutu3d.DivPoint(map.viewer, { - // html: - // "<div class='popup-wrapper'>信息内容<br/><br/>XXXXXXXX</div>", - // position: cartesian3, - // anchor: [-170, -80], - // }); - // popup.visible = true; - // } - // } - // ); - }, - changeModel(val) { - console.log(val); - if (!val) { - global.map.models.map(model => { - if (model.name === '室内') { - global.map.setModelVisible(model.id, true); - global.map.flyToModel(model.id); - } else { - global.map.setModelVisible(model.id, false); - } - }); - - let viewer = global.map.viewer; - viewer.scene.skyBox = null; - viewer.scene.sun.show = false; - viewer.scene.moon.show = false; - viewer.scene.globe.show = false; - viewer.scene.logarithmicDepthBuffer = false; - viewer.scene.skyAtmosphere.show = false; - viewer.scene.backgroundColor = Cesium.Color.fromCssColorString( - 'rgba(0,0,0, 1)' - ); - } else { - global.map.models.map(model => { - if (model.name === '室内') { - global.map.setModelVisible(model.id, false); - } else { - global.map.setModelVisible(model.id, true); - } - }); - - global.map.setViewpoint( - { - y: 30.231104, - x: 120.157372, - z: 298.45, - heading: 173, - pitch: -28.8, - roll: 6.2, - }, - { duration: 1.5 } - ); - - let viewer = global.map.viewer; - viewer.scene.skyBox = null; - viewer.scene.sun.show = true; - viewer.scene.moon.show = true; - viewer.scene.globe.show = true; - viewer.scene.logarithmicDepthBuffer = true; - viewer.scene.skyAtmosphere.show = true; - viewer.scene.backgroundColor = Cesium.Color.fromCssColorString( - 'rgba(0,0,0, 1)' - ); - } - }, - }, - }; </script> <style scoped> - .map-layout { - height: 100%; - position: relative; - } - - .tool-btns { - position: absolute; - z-index: 999; - top: 10px; - left: 500px; - } - .sn-tool { - position: absolute; - bottom: 10px; - right: 10px; - z-index: 1; - padding: 3px; - background: #fff; - } - .left-switch { - margin-right: 10px; - } </style> diff --git a/src/views/doublePreventAction/riskLevelManage/fourColorMap/oneHundredAndThirty/index.vue b/src/views/doublePreventAction/riskLevelManage/fourColorMap/oneHundredAndThirty/index.vue new file mode 100644 index 0000000..4920741 --- /dev/null +++ b/src/views/doublePreventAction/riskLevelManage/fourColorMap/oneHundredAndThirty/index.vue @@ -0,0 +1,288 @@ +<template> + + <div class="map-layout"> + <Map @init="init" :option="option" v-if="option" /> + <Tab v-if="loaded" /> + </div> + + +</template> + +<script> + import Map from '../../../../../components/Map'; + import Tab from '../../../../../components/Tab'; + import { global } from '../../../../../global'; + import { + getCatesian3FromPX, + Cartesian3_to_WGS84, + } from '../../../../../components/Map/libs/Point'; + + export default { + name: 'App', + components: { + Map, + Tab, + }, + data() { + return { + activeName:'first', + loaded: false, + map: null, + option: null, + heatLayer: null, + shineishiwai: true, + }; + }, + mounted() { + // 地图配置初始化 + this.option = { + // 初始化视图中心点 + viewpoint: { + y: 31.254992, + x: 120.727592, + z: 289.24, + heading: 13.8, + pitch: -37.3, + roll: 360, + }, + + // 显示位置初始化按钮 + homeButton: true, + + // 当前时间 + currentTime: '08:30:00', + + // 影像底图 + imageryProvider: new Cesium.WebMapTileServiceImageryProvider({ + url: + 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer', + layer: '', + style: 'default', + tileMatrixSetID: 'w', + format: 'tiles', + maximumLevel: 18, + }), + }; + window.sss = this; + }, + methods: { + init(map) { + this.loaded = true; + + map.addModel({ + link: 'http://222.92.213.22:8006/b3dm130/tileset.json', + name: '130吨模型图', + callback: tileset => { + var boundingSphere = tileset.boundingSphere; + var cartographic = Cesium.Cartographic.fromCartesian( + boundingSphere.center + ); + var surface = Cesium.Cartesian3.fromRadians( + cartographic.longitude, + cartographic.latitude, + 0.0 + ); + var offset = Cesium.Cartesian3.fromRadians( + cartographic.longitude, + cartographic.latitude, + 102 + ); + var translation = Cesium.Cartesian3.subtract( + offset, + surface, + new Cesium.Cartesian3() + ); + tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); + }, + }); + + map.viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString( + '#050F1F' + ); + map.viewer.scene.logarithmicDepthBuffer = false; + map.viewer.scene.globe.enableLighting = true; + map.viewer.scene.sun.show = false; + map.viewer.scene.moon.show = false; + map.viewer.scene.fog.enabled = false; + map.viewer.scene.skyBox = null; + + // 初始化事件 + this.initEvent(map); + + this.testLoadedData(); + }, + // 加载测试数据 + testLoadedData() { + const map = global.map; + if (!map) return; + $.get('./public/data/plots_namisuo.geojson', res => { + map.loadGeoJSON(res); + }); + }, + initEvent(map) { + let popup = null; + const _this = this; + map.on( + 'click', + ({ + position, + cartesian3, + latLngPositionGlobe, + latLngPosition, + entity, + attr, + }) => { + if (popup) { + popup.destroy(); + popup = null; + } + let type = entity && entity.attribute && entity.attribute.type; + if (type) { + popup = new wutu3d.DivPoint(map.viewer, { + html: + "<div class='popup-wrapper'>" + + attr.name + + '<br/><br/>XXXXXXXX</div>', + position: cartesian3, + anchor: [-170, -80], + }); + popup.visible = true; + } + if (attr.name && attr.name === '含内景大楼') { + _this.changeModel(!_this.shineishiwai); + _this.shineishiwai = !_this.shineishiwai; + } + + const pos = getCatesian3FromPX(position, map.viewer); + const pos1 = Cartesian3_to_WGS84(pos); + console.log(pos1); + + var pt = turf.point([Number(pos1.lng), Number(pos1.lat)]); + var poly = turf.polygon([ + [ + [120.159277, 30.227512], + [120.158919, 30.227569], + [120.158777, 30.227431], + [120.158904, 30.227151], + [120.15911, 30.227119], + [120.159339, 30.227347], + [120.159277, 30.227512], + ], + ]); + + const inPoly = turf.booleanPointInPolygon(pt, poly); + + if ( + //自己测量对应建筑的空间范围 + inPoly && + pos1.alt > 0 && //20.562718744748462 + pos1.alt < 121.7 + ) { + _this.changeModel(!_this.shineishiwai); + _this.shineishiwai = !_this.shineishiwai; + } + } + ); + // map.on( + // 'mousemove', + // ({ cartesian3, latLngPositionGlobe, latLngPosition, entity, attr }) => { + // if (popup) { + // popup.destroy(); + // popup = null; + // } + // let type = entity && entity.attribute && entity.attribute.type; + // if (type) { + // popup = new wutu3d.DivPoint(map.viewer, { + // html: + // "<div class='popup-wrapper'>信息内容<br/><br/>XXXXXXXX</div>", + // position: cartesian3, + // anchor: [-170, -80], + // }); + // popup.visible = true; + // } + // } + // ); + }, + changeModel(val) { + console.log(val); + if (!val) { + global.map.models.map(model => { + if (model.name === '室内') { + global.map.setModelVisible(model.id, true); + global.map.flyToModel(model.id); + } else { + global.map.setModelVisible(model.id, false); + } + }); + + let viewer = global.map.viewer; + viewer.scene.skyBox = null; + viewer.scene.sun.show = false; + viewer.scene.moon.show = false; + viewer.scene.globe.show = false; + viewer.scene.logarithmicDepthBuffer = false; + viewer.scene.skyAtmosphere.show = false; + viewer.scene.backgroundColor = Cesium.Color.fromCssColorString( + 'rgba(0,0,0, 1)' + ); + } else { + global.map.models.map(model => { + if (model.name === '室内') { + global.map.setModelVisible(model.id, false); + } else { + global.map.setModelVisible(model.id, true); + } + }); + + global.map.setViewpoint( + { + y: 30.231104, + x: 120.157372, + z: 298.45, + heading: 173, + pitch: -28.8, + roll: 6.2, + }, + { duration: 1.5 } + ); + + let viewer = global.map.viewer; + viewer.scene.skyBox = null; + viewer.scene.sun.show = true; + viewer.scene.moon.show = true; + viewer.scene.globe.show = true; + viewer.scene.logarithmicDepthBuffer = true; + viewer.scene.skyAtmosphere.show = true; + viewer.scene.backgroundColor = Cesium.Color.fromCssColorString( + 'rgba(0,0,0, 1)' + ); + } + }, + }, + }; +</script> + +<style scoped> + .map-layout { + height: 820px;; + position: relative; + } + + .tool-btns { + position: absolute; + z-index: 999; + top: 10px; + left: 500px; + } + .sn-tool { + position: absolute; + bottom: 10px; + right: 10px; + z-index: 1; + padding: 3px; + background: #fff; + } + .left-switch { + margin-right: 10px; + } +</style> diff --git a/src/views/doublePreventAction/riskLevelManage/fourColorMap/sixty/index.vue b/src/views/doublePreventAction/riskLevelManage/fourColorMap/sixty/index.vue new file mode 100644 index 0000000..18f51e6 --- /dev/null +++ b/src/views/doublePreventAction/riskLevelManage/fourColorMap/sixty/index.vue @@ -0,0 +1,302 @@ +<template> + + <div class="map-layout"> + <Map @init="init" :option="option" v-if="option" /> + <Tab v-if="loaded" /> + </div> + + +</template> + +<script> + import Map from '../../../../../components/Map'; + import Tab from '../../../../../components/Tab'; + import { global } from '../../../../../global'; + import { + getCatesian3FromPX, + Cartesian3_to_WGS84, + } from '../../../../../components/Map/libs/Point'; + import { getMap } from '@/api/fourColorMap' + export default { + name: 'App', + components: { + Map, + Tab, + }, + data() { + return { + activeName:'first', + loaded: false, + map: null, + option: null, + heatLayer: null, + shineishiwai: true, + }; + }, + mounted() { + // 地图配置初始化 + this.option = { + // 初始化视图中心点 + viewpoint: { + y: 31.254992, + x: 120.727592, + z: 289.24, + heading: 13.8, + pitch: -37.3, + roll: 360, + }, + + // 显示位置初始化按钮 + homeButton: true, + + // 当前时间 + currentTime: '08:30:00', + + // 影像底图 + imageryProvider: new Cesium.WebMapTileServiceImageryProvider({ + url: + 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer', + layer: '', + style: 'default', + tileMatrixSetID: 'w', + format: 'tiles', + maximumLevel: 18, + }), + }; + window.sss = this; + }, + methods: { + init(map) { + this.loaded = true; + + map.addModel({ + link: 'http://222.92.213.22:8006/b3dm60/tileset.json', + name: '60吨模型图', + callback: tileset => { + var boundingSphere = tileset.boundingSphere; + var cartographic = Cesium.Cartographic.fromCartesian( + boundingSphere.center + ); + var surface = Cesium.Cartesian3.fromRadians( + cartographic.longitude, + cartographic.latitude, + 0.0 + ); + var offset = Cesium.Cartesian3.fromRadians( + cartographic.longitude, + cartographic.latitude, + 102 + ); + var translation = Cesium.Cartesian3.subtract( + offset, + surface, + new Cesium.Cartesian3() + ); + tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); + }, + }); + + map.viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString( + '#050F1F' + ); + map.viewer.scene.logarithmicDepthBuffer = false; + map.viewer.scene.globe.enableLighting = true; + map.viewer.scene.sun.show = false; + map.viewer.scene.moon.show = false; + map.viewer.scene.fog.enabled = false; + map.viewer.scene.skyBox = null; + + // 初始化事件 + this.initEvent(map); + + this.testLoadedData(); + }, + // 加载测试数据 + testLoadedData() { + const map = global.map; + if (!map) return; + let params = {} + params['eType'] = 1 + getMap(params).then(res =>{ + const list = res.data.result.map(item =>{ + return{ + type:item.type, + geometry:JSON.parse(item.geometry), + properties:JSON.parse(item.properties) + } + }) + const fourMapList = { + "type": "FeatureCollection", + "features": list + } + debugger + map.loadGeoJSON(fourMapList) + }) + }, + initEvent(map) { + let popup = null; + const _this = this; + map.on( + 'click', + ({ + position, + cartesian3, + latLngPositionGlobe, + latLngPosition, + entity, + attr, + }) => { + if (popup) { + popup.destroy(); + popup = null; + } + + let type = entity && entity.attribute && entity.attribute.type; + if (type) { + popup = new wutu3d.DivPoint(map.viewer, { + html: + "<div class='popup-wrapper'>" + + attr.name + + '<br/><br/>XXXXXXXX</div>', + position: cartesian3, + anchor: [-170, -80], + }); + popup.visible = true; + } + if (attr.name && attr.name === '含内景大楼') { + _this.changeModel(!_this.shineishiwai); + _this.shineishiwai = !_this.shineishiwai; + } + + const pos = getCatesian3FromPX(position, map.viewer); + const pos1 = Cartesian3_to_WGS84(pos); + + var pt = turf.point([Number(pos1.lng), Number(pos1.lat)]); + var poly = turf.polygon([ + [ + [120.159277, 30.227512], + [120.158919, 30.227569], + [120.158777, 30.227431], + [120.158904, 30.227151], + [120.15911, 30.227119], + [120.159339, 30.227347], + [120.159277, 30.227512], + ], + ]); + + const inPoly = turf.booleanPointInPolygon(pt, poly); + + if ( + //自己测量对应建筑的空间范围 + inPoly && + pos1.alt > 0 && //20.562718744748462 + pos1.alt < 121.7 + ) { + _this.changeModel(!_this.shineishiwai); + _this.shineishiwai = !_this.shineishiwai; + } + } + ); + // map.on( + // 'mousemove', + // ({ cartesian3, latLngPositionGlobe, latLngPosition, entity, attr }) => { + // if (popup) { + // popup.destroy(); + // popup = null; + // } + // let type = entity && entity.attribute && entity.attribute.type; + // if (type) { + // popup = new wutu3d.DivPoint(map.viewer, { + // html: + // "<div class='popup-wrapper'>信息内容<br/><br/>XXXXXXXX</div>", + // position: cartesian3, + // anchor: [-170, -80], + // }); + // popup.visible = true; + // } + // } + // ); + }, + changeModel(val) { + console.log(val); + if (!val) { + global.map.models.map(model => { + if (model.name === '室内') { + global.map.setModelVisible(model.id, true); + global.map.flyToModel(model.id); + } else { + global.map.setModelVisible(model.id, false); + } + }); + + let viewer = global.map.viewer; + viewer.scene.skyBox = null; + viewer.scene.sun.show = false; + viewer.scene.moon.show = false; + viewer.scene.globe.show = false; + viewer.scene.logarithmicDepthBuffer = false; + viewer.scene.skyAtmosphere.show = false; + viewer.scene.backgroundColor = Cesium.Color.fromCssColorString( + 'rgba(0,0,0, 1)' + ); + } else { + global.map.models.map(model => { + if (model.name === '室内') { + global.map.setModelVisible(model.id, false); + } else { + global.map.setModelVisible(model.id, true); + } + }); + + global.map.setViewpoint( + { + y: 30.231104, + x: 120.157372, + z: 298.45, + heading: 173, + pitch: -28.8, + roll: 6.2, + }, + { duration: 1.5 } + ); + + let viewer = global.map.viewer; + viewer.scene.skyBox = null; + viewer.scene.sun.show = true; + viewer.scene.moon.show = true; + viewer.scene.globe.show = true; + viewer.scene.logarithmicDepthBuffer = true; + viewer.scene.skyAtmosphere.show = true; + viewer.scene.backgroundColor = Cesium.Color.fromCssColorString( + 'rgba(0,0,0, 1)' + ); + } + }, + }, + }; +</script> + +<style scoped> + .map-layout { + height: 850px;; + position: relative; + } + + .tool-btns { + position: absolute; + z-index: 999; + top: 10px; + left: 500px; + } + .sn-tool { + position: absolute; + bottom: 10px; + right: 10px; + z-index: 1; + padding: 3px; + background: #fff; + } + .left-switch { + margin-right: 10px; + } +</style> diff --git a/src/views/layout/components/Navbar.vue b/src/views/layout/components/Navbar.vue index 870bb71..2343d63 100644 --- a/src/views/layout/components/Navbar.vue +++ b/src/views/layout/components/Navbar.vue @@ -37,7 +37,7 @@ <el-dialog :visible.sync="appDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="320px" - title="监管APP安卓版浏览器扫码下载"> + title="APP安卓版浏览器扫码下载"> <div id="appcode" style="height: 200px;width: 200px"/> </el-dialog> </div> @@ -79,6 +79,7 @@ }, data() { return { + prefixUrl:process.env.IMG_API, warnBJList: [], warnBJVisible: false, pageSize: 10, @@ -124,20 +125,20 @@ methods: { getAppCode(){ const roles = this.roles - for (let role in roles){ - if(roles[role].name == '生产企业' || - roles[role].name == '销售企业'){ - this.appShow = false; - } - } + // for (let role in roles){ + // if(roles[role].name == '生产企业' || + // roles[role].name == '销售企业'){ + // this.appShow = false; + // } + // } const _this = this const params = {} - params['filetype'] = "监管" + params['filetype'] = "众泰APP" newAppFile(params).then(response => { const res = response.data; if (res.code == 200) { const result = res.result; - _this.appCode = result.fileurl + _this.appCode = this.prefixUrl + result.fileurl } }).catch(error => { }) diff --git a/src/views/login/components/login-form.vue b/src/views/login/components/login-form.vue index 1d73ecd..3056ab0 100644 --- a/src/views/login/components/login-form.vue +++ b/src/views/login/components/login-form.vue @@ -37,11 +37,18 @@ </div> </el-form> </div> + <div class="pwd-change-redirect"><el-link :underline="false" type="primary" @click="()=>{ this.$router.push({path:'/pwdChange'})}">忘记密码</el-link></div> <div class="login-form-button"> <el-button class="login-form-login-button" :loading="logingLoading" type="primary" @click.native.prevent="handleSubmit"> <span> 登录 </span> + </el-button> + </div> + + <div style="padding-top: 20px" class="login-form-button"> + <el-button class="register-btn" @click="handleRegister"> + <span style="color: black">注册</span> </el-button> </div> </div> @@ -133,6 +140,9 @@ created(){ }, methods: { + handleRegister(){ + this.$router.push({path:'/register'}) + }, showLoginPwd() { if (this.loginPasswordType === 'password') { this.loginPasswordType = '' @@ -178,7 +188,7 @@ } .login-form-title{ width: 60px; - height: 143px; + height: 130px; font-size: 30px; font-family: PingFangSC-Medium, PingFang SC; font-weight: 600; @@ -232,8 +242,20 @@ } .login-form-login-button { width: 364px; - height: 48px; + height: 40px; background: #4778FF; border-radius: 4px; } + + .register-btn{ + width: 364px; + height: 40px; + color: white; + border-radius: 4px; + } + .pwd-change-redirect{ + position: relative; + top: 10px; + right: 10px; + } </style> diff --git a/src/views/login/pwdChange.vue b/src/views/login/pwdChange.vue new file mode 100644 index 0000000..a246398 --- /dev/null +++ b/src/views/login/pwdChange.vue @@ -0,0 +1,174 @@ +<template> + <div class="register_main"> + <div class="register_main_body"> + <span class="register_main_body_span">密码重置</span> + </div> + <div class="register_main_form"> + <el-form :model="pwdForm" :rules="rules" ref="ruleForm" label-width="150px"> + <el-row> + <el-col :span="20"> + <el-form-item label="姓名" prop="username"> + <el-input v-model="pwdForm.username"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="手机号(账户)" prop="phone"> + <el-input v-model="pwdForm.phone" ref="tel"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="密码" prop="password"> + <el-input v-model="pwdForm.password"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="20"> + <el-form-item label="确认密码" prop="repassword"> + <el-input v-model="pwdForm.repassword"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + </el-row> + </el-form> + <div align="center" style="padding-bottom: 30px"> + <el-button type="primary" :disabled="submitting" @click="submit()">修改密码</el-button> + </div> + </div> + </div> +</template> + +<script> +import {pwdChange} from "../../api/user"; +import {parseError} from "../../utils/messageDialog"; + +export default { + name: "register", + data(){ + return{ + submitting: false, + pwdForm:{ + username:'', + password:'', + repassword:'', + phone:'', + }, + rules:{ + username:[ + { required: true, message: '请填写姓名', trigger: 'blur' }, + ], + phone:[ + { required: true, message: '请填写手机号', trigger: 'blur' }, + ], + password:[ + { required: true, message: '请填写密码', trigger: 'blur' }, + ], + repassword:[ + { required: true, message: '请填写确认密码', trigger: 'blur' }, + ], + + + }, + } + }, + watch:{ + }, + created(){ + + }, + methods:{ + async submit(){ + if (this.pwdForm.password !== this.pwdForm.repassword) { + this.$message({ + type:'warning', + message:'两次密码输入不一致' + }) + return + } + if (this.pwdForm.phone.length !== 11) { + this.$message({ + type:'warning', + message:'手机号长度不为11' + }) + return + } + this.$refs["ruleForm"].validate((valid) =>{ + if(valid){ + this.register() + }else{ + this.$message({ + type:'warning', + message:'请填写基本信息' + }) + } + }); + + }, + + register(){ + this.submitting = true + pwdChange(this.pwdForm) + .then(res=>{ + if (res.data.code === '200') { + this.$message({ + type:'success', + message:'修改成功' + }) + setTimeout(()=>{ + this.$router.push({path:'/login'}) + },1000) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + .catch(err=>{ + console.log(err) + this.$message({ + type:'warning', + message:'请求超时' + }) + }) + .finally(()=>{ + this.submitting = false + }); + } + } +} +</script> + +<style rel="stylesheet/scss" lang="scss"> +$dark_gray:#889aa4; +.register_main{ + display: block; + width: 100%; + max-width: 1200px; + padding: 0 20px; + margin: 30px auto +} +.register_main_body{ + font-size: 24px; +} +.register_main_form{ + padding-top: 70px; + margin: 30px auto; + max-width: 800px; + display: block; + width: 100%; +} +.register_main_body_span{ + padding: 6px 5px 6px 15px; + color: $dark_gray; + vertical-align: middle; + width: 30px; + display: inline-block; +} +</style> diff --git a/src/views/login/register.vue b/src/views/login/register.vue index ddf5bd9..c3c8547 100644 --- a/src/views/login/register.vue +++ b/src/views/login/register.vue @@ -4,25 +4,12 @@ <span class="register_main_body_span">用户注册</span> </div> <div class="register_main_form"> - <el-form :model="registerForm" :rules="rules" ref="ruleForm" label-width="200px"> + <el-form :model="registerForm" :rules="rules" ref="ruleForm" label-width="150px"> <el-row> <el-col :span="20"> - <el-form-item label="企业名称" prop="enterprisename"> - <el-input v-model="registerForm.enterprisename" @change="checkNameAndNumber('name')"></el-input> + <el-form-item label="姓名" prop="realname"> + <el-input v-model="registerForm.realname"></el-input> </el-form-item> - </el-col> - <el-col :span="4" style="margin-top:10px;" v-if="showName"> - <span style="margin-left:5px;color: red">企业名称已存在</span> - </el-col> - </el-row> - <el-row> - <el-col :span="20"> - <el-form-item label="企业编号" prop="enterprisenumber"> - <el-input v-model="registerForm.enterprisenumber" @change="checkNameAndNumber('number')"></el-input> - </el-form-item> - </el-col> - <el-col :span="4" style="margin-top:10px;" v-if="showNumber"> - <span style="margin-left:5px;color: red">企业编号已存在</span> </el-col> </el-row> <el-row> @@ -33,943 +20,118 @@ </el-col> </el-row> <el-row> - <el-form-item label="企业类型" prop="type"> - <el-select v-model="registerForm.type" @change="showMaterial"> - <el-option - v-for="item in typeList" - :key="item.id" - :value="item.name" - :label="item.name" - ></el-option> - </el-select> - </el-form-item> - </el-row> - <el-row> <el-col :span="20"> - <el-form-item label="经营范围" prop="businessrange"> - <el-input v-model="registerForm.businessrange"></el-input> + <el-form-item label="手机号(账户)" prop="username"> + <el-input v-model="registerForm.username" ref="tel"></el-input> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="20"> - <el-form-item label="负责人" prop="legalperson"> - <el-input v-model="registerForm.legalperson"></el-input> + <el-form-item label="身份证" prop="idcard"> + <el-input v-model="registerForm.idcard" ref="idcard"></el-input> </el-form-item> </el-col> </el-row> <el-row> - <el-col :span="20"> - <el-form-item label="负责人手机号" prop="legalpersonphone"> - <el-input v-model="registerForm.legalpersonphone"></el-input> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="10"> - <el-form-item label="许可证开始时间" prop="licensestart"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.licensestart" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="许可证结束时间" prop="licenseend"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.licenseend" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="10"> - <el-form-item label="省:" prop="province"> - <el-select v-model="registerForm.province" clearable filterable @change="changeArea('province')"> - <el-option - v-for="item in provinceList" - :key="item.id" - :label="item.name" - :value="item.name" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="市:" prop="city"> - <el-select v-model="registerForm.city" clearable filterable @change="changeArea('city')"> - <el-option - v-for="item in cityList" - :key="item.id" - :label="item.name" - :value="item.name" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="10"> - <el-form-item label="区/县:" prop="district"> - <el-select v-model="registerForm.district" clearable filterable @change="changeArea('district')"> - <el-option - v-for="item in districtList" - :key="item.id" - :label="item.name" - :value="item.name" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="街道:" prop="street"> - <el-select v-model="registerForm.street" clearable filterable @change="changeArea('street')"> - <el-option - v-for="item in streetList" - :key="item.id" - :label="item.name" - :value="item.name" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="10"> - <el-form-item label="居委会:" prop="committee"> - <el-select v-model="registerForm.committee" clearable filterable @change="changeArea('committee')"> - <el-option - v-for="item in committeeList" - :key="item.id" - :label="item.name" - :value="item.name" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="20"> - <el-form-item label="详细地址" prop="address"> - <el-input v-model="registerForm.address"></el-input> - </el-form-item> - </el-col> - </el-row> - <el-row v-if="longMaterial"> - <el-form-item label="企业营业执照、生产许可证:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="businessLicense" - :on-change="handleChangeOne" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" - > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" - > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'one')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> - </el-form-item> - </el-row> - <el-row v-if="shortMaterial"> - <el-form-item label="法人身份证复印件加盖公章:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="idCard" - :on-change="handleChangeTwo" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" - > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" - > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'two')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> - </el-form-item> - </el-row> - <div v-if="shortMaterial"> - <el-row> - <el-col :span="10"> - <el-form-item label="有效期开始时间(主要负责人):" prop="legalpersonstart"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.legalpersonstart" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="结束时间" prop="legalpersonend"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.legalpersonend" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - </el-row> - <el-row > - <el-form-item label="主要负责人、安全生产管理人员考核合格的证明材料:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="legalPerson" - :on-change="handleChangeThree" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" + <el-col :span="11"> + <el-form-item label="单位:" prop="company"> + <el-select v-model.trim="registerForm.company" value-key="item" auto-complete="on" style="width:100%;" @change="companyChange"> + <el-option + v-for="item in companyList" + :key="item.id" + :value="item" + :label="item.company" > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" - > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'three')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> + </el-option> + </el-select> </el-form-item> - </el-row> - </div> - <div v-if="produceMaterial"> - <el-row> - <el-col :span="10"> - <el-form-item label="有效期开始时间(特种人员):" prop="qualificationstart"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.qualificationstart" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="结束时间" prop="qualificationend"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.qualificationend" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - </el-row> - <el-row > - <el-form-item label="特种作业人员取得操作资格证书的证明材料,从业人员安全生产教育和培训合格的证明材料:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="operationQualification" - :on-change="handleChangeFour" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" - > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" + </el-col> + <el-col :span="9"> + <el-form-item label="部门:" prop="department" v-if="isMain"> + <el-select v-model.trim="registerForm.department" auto-complete="on" style="width:100%;"> + <el-option + v-for="item in departmentList" + :key="item.id" + :value="item.department" + :label="item.department" > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'four')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> + </el-option> + </el-select> </el-form-item> - </el-row> - <el-row> - <el-col :span="10"> - <el-form-item label="有效期开始时间(押运公司):" prop="escortstart"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.escortstart" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="结束时间" prop="escortend"> - <el-date-picker - value-format="yyyy-MM-dd" - type="date" - v-model="registerForm.escortend" - placeholder="选择日期时间"> - </el-date-picker> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-form-item label="押运公司营业执照、道路运输经营许可证、危险品准运证:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="escortCompany" - :on-change="handleChangeFive" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" - > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" - > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'five')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> - </el-form-item> - </el-row> - </div> - <el-row v-if="shortMaterial"> - <el-form-item label="安全责任险、意外险投保材料:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="insurance" - :on-change="handleChangeSix" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" - > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" - > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'six')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> - </el-form-item> + </el-col> </el-row> - <el-row v-if="buyMaterial"> - <el-form-item label="安全生产标准化证书材料:" prop="imgs"> - <el-upload - action="#" - list-type="picture-card" - :file-list="safetyProduction" - :on-change="handleChangeSeven" - :auto-upload="false"> - <i slot="default" class="el-icon-plus"></i> - <div slot="file" slot-scope="{file}"> - <img - class="el-upload-list__item-thumbnail" - :src="file.url" alt="" - > - <span class="el-upload-list__item-actions"> - <span - class="el-upload-list__item-preview" - @click="handlePictureCardPreview(file)" - > - <i class="el-icon-zoom-in"></i> - </span> - <span - v-if="!disabled" - class="el-upload-list__item-delete" - @click="handleRemove(file,'seven')" - > - <i class="el-icon-delete"></i> - </span> - </span> - </div> - </el-upload> - </el-form-item> + <el-row> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="职位" prop="job"> + <el-input v-model="registerForm.job"></el-input> + </el-form-item> + </el-col> </el-row> </el-form> <div align="center" style="padding-bottom: 30px"> - <el-button type="primary" @click="submit()">同意协议并注册</el-button> + <el-button type="primary" :disabled="submitting" @click="submit()">同意协议并注册</el-button> </div> - <el-dialog :visible.sync="dialogVisible"> - <img width="100%" :src="dialogImageUrl" alt=""> - </el-dialog> </div> </div> </template> <script> import {isNameExist, isNumberExist, register} from "../../api/login"; -import {getCityListData, getProvinceListData} from "../../api/area"; import {parseError} from "../../utils/messageDialog"; +import { getAllCompany } from '@/api/unitManage' +import { getAllDepartment } from '@/api/departmentManage' export default { name: "register", data(){ return{ - showNumber:false, - showName:false, - shortMaterial:false, - longMaterial:false, - produceMaterial:false, - buyMaterial:false, + companyList:[], + departmentList:[], + submitting: false, + isMain:false, registerForm:{ - enterprisename:'', - enterprisenumber:'', + username:'', + realname:'', password:'', - type:'', - businessrange:'', - licensestart:'', - licenseend:'', - legalpersonstart:'', - legalpersonend:'', - qualificationstart:'', - qualificationend:'', - escortstart:'', - escortend:'', - legalperson:'', - legalpersonphone:'', - province:'', - city:'', - district:'', - street:'', - committee:'', - address:'', + idcard:'', + company:'', + department:'', + job:'' }, - businessLicense:[], - idCard:[], - legalPerson:[], - operationQualification:[], - escortCompany:[], - insurance:[], - safetyProduction:[], rules:{ - enterprisename:[ - { required: true, message: '请填写企业名称', trigger: 'blur' }, + realname:[ + { required: true, message: '请填写姓名', trigger: 'blur' }, ], - enterprisenumber:[ - { required: true, message: '请填写企业编号', trigger: 'blur' }, + username:[ + { required: true, message: '请填写手机号', trigger: 'blur' }, ], password:[ - { required: true, message: '请填写密码', trigger: 'change' }, + { required: true, message: '请填写密码', trigger: 'blur' }, ], - type:[ - { required: true, message: '请选择企业类型', trigger: 'blur' }, + idcard:[ + { required: true, message: '请填写身份证', trigger: 'blur' }, ], - businessrange:[ - { required: true, message: '请填写经营范围', trigger: 'blur' }, - ], - legalperson:[ - { required: true, message: '请填写负责人', trigger: 'blur' }, - ], - legalpersonphone:[ - { required: true, message: '请填写负责人电话', trigger: 'blur' }, - ], - licensestart:[ - { required: true, message: '请填写许可证有效期开始日期', trigger: 'blur' }, - ], - licenseend:[ - { required: true, message: '请填写许可证有效期结束日期', trigger: 'blur' }, - ], - province:[ - { required: true, message: '请填写省', trigger: 'change' }, - ], - city:[ - { required: true, message: '请填写市', trigger: 'change' }, - ], - district:[ - { required: true, message: '请填写区', trigger: 'change' }, - ], - address:[ - { required: true, message: '请填写区', trigger: 'blur' }, - ], - legalpersonstart:[ - { required: true, message: '请填写', trigger: 'change' }, - ], - legalpersonend:[ - { required: true, message: '请填写', trigger: 'change' }, - ], - qualificationstart:[ - { required: true, message: '请填写', trigger: 'change' }, - ], - qualificationend:[ - { required: true, message: '请填写', trigger: 'change' }, - ], - escortstart:[ - { required: true, message: '请填写', trigger: 'change' }, - ], - escortend:[ - { required: true, message: '请填写', trigger: 'change' }, + company:[ + { required: true, message: '请填写单位', trigger: 'blur' }, ], }, - typeList:[{id:1,name:'烟花爆竹生产'},{id:2,name:'烟花爆竹批发经营'},{id:3,name:'烟花爆竹零售经营(长期)'},{id:4,name:'烟花爆竹零售经营(短期)'}], - provinceList:[], - cityList:[], - districtList: [], - streetList:[], - committeeList:[], - dialogImageUrl: '', - dialogVisible: false, - disabled: false } }, watch:{ }, created(){ - this.getProvince() + //初始化 单位和 部门 + this.getDepartmentData() + this.getCompanyData() }, methods:{ - handleRemove(file,value) { - return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ - confirmButtonText:'确定', - cancelButtonText:'取消', - type:'warning', - }).then(()=> { - switch (value) { - case 'one':this.businessLicense.splice(this.businessLicense.findIndex(item =>item.name === file.name),1); - break; - case 'two':this.idCard.splice(this.idCard.findIndex(item =>item.name === file.name),1); - break; - case 'three':this.legalPerson.splice(this.legalPerson.findIndex(item =>item.name === file.name),1); - break; - case 'four':this.operationQualification.splice(this.operationQualification.findIndex(item =>item.name === file.name),1); - break; - case 'five':this.escortCompany.splice(this.escortCompany.findIndex(item =>item.name === file.name),1); - break; - case 'six':this.insurance.splice(this.insurance.findIndex(item =>item.name === file.name),1); - break; - case 'seven':this.safetyProduction.splice(this.safetyProduction.findIndex(item =>item.name === file.name),1); - break; - } - }) - }, - handlePictureCardPreview(file) { - this.dialogImageUrl = file.url; - this.dialogVisible = true; - }, - handleChangeOne(file, fileList) { - this.businessLicense = fileList.slice(0); - }, - handleChangeTwo(file, fileList){ - this.idCard = fileList.slice(0); - }, - handleChangeThree(file, fileList) { - this.legalPerson = fileList.slice(0); - }, - handleChangeFour(file, fileList){ - this.operationQualification = fileList.slice(0); - }, - handleChangeFive(file, fileList) { - this.escortCompany = fileList.slice(0); - }, - handleChangeSix(file, fileList){ - this.insurance = fileList.slice(0); - }, - handleChangeSeven(file,fileList){ - this.safetyProduction = fileList.slice(0) - }, - async getProvince(){ - let res = await getProvinceListData() - if(res.data.code === "200"){ - this.provinceList = res.data.result.provinceList - } - },//获取省 async submit(){ this.$refs["ruleForm"].validate((valid) =>{ if(valid){ - if(this.registerForm.type === '烟花爆竹生产' && this.businessLicense.length !== 0 && this.idCard.length !== 0 && this.legalPerson.length !== 0 && this.operationQualification.length !== 0 && this.escortCompany.length !== 0 && this.insurance.length !==0){ - this.businessLicense = this.businessLicense.map((item,index,arr) =>{ - return item.raw - },this.businessLicense) - this.idCard = this.idCard.map((item,index,arr) =>{ - return item.raw - },this.idCard) - this.legalPerson = this.legalPerson.map((item,index,arr) =>{ - return item.raw - },this.legalPerson) - this.operationQualification = this.operationQualification.map((item,index,arr) =>{ - return item.raw - },this.operationQualification) - this.escortCompany = this.escortCompany.map((item,index,arr) =>{ - return item.raw - },this.escortCompany) - this.insurance = this.insurance.map((item,index,arr) =>{ - return item.raw - },this.insurance) - this.safetyProduction = this.safetyProduction.map((item,index,arr) =>{ - return item.raw - },this.safetyProduction) - const formData = new FormData(); - for (const i in this.registerForm) { - if ( - this.registerForm[i] != undefined && - this.registerForm[i].toString() != "" - ) { - formData.append(i, this.registerForm[i]); - } - } - if (this.businessLicense && this.businessLicense.length > 0) { - for (let i = 0; i < this.businessLicense.length; i++) - formData.append("businessLicense", this.businessLicense[i]); - } - if (this.idCard && this.idCard.length > 0) { - for (let i = 0; i < this.idCard.length; i++) - formData.append("idCard", this.idCard[i]); - } - if (this.legalPerson && this.legalPerson.length > 0) { - for (let i = 0; i < this.legalPerson.length; i++) - formData.append("legalPersonFile", this.legalPerson[i]); - } - if (this.operationQualification && this.operationQualification.length > 0) { - for (let i = 0; i < this.operationQualification.length; i++) - formData.append("operationQualification", this.operationQualification[i]); - } - if (this.escortCompany && this.escortCompany.length > 0) { - for (let i = 0; i < this.escortCompany.length; i++) - formData.append("escortCompany", this.escortCompany[i]); - } - if (this.insurance && this.insurance.length > 0) { - for (let i = 0; i < this.insurance.length; i++) - formData.append("insurance", this.insurance[i]); - } - if (this.safetyProduction && this.safetyProduction.length > 0) { - for (let i = 0; i < this.safetyProduction.length; i++) - formData.append("safetyProduction", this.safetyProduction[i]); - } - register(formData).then(res =>{ - if(res.data.code === '200'){ - this.$message({ - type:'success', - message:'注册成功', - duration:2000, - title:'成功' - }) - this.$router.push('/login') - }else{ - this.$message({ - type:'warning', - message:res.data.message - }) - } - }).catch(error => { - parseError({error: error, vm: this}) - }) - }else if(this.registerForm.type === '烟花爆竹批发经营'&& this.businessLicense.length !== 0 && this.idCard.length !== 0 && this.legalPerson.length !== 0 && this.operationQualification.length !== 0 && this.escortCompany.length !== 0 && this.insurance.length !== 0 && this.safetyProduction.length !== 0){ - this.businessLicense = this.businessLicense.map((item,index,arr) =>{ - return item.raw - },this.businessLicense) - this.idCard = this.idCard.map((item,index,arr) =>{ - return item.raw - },this.idCard) - this.legalPerson = this.legalPerson.map((item,index,arr) =>{ - return item.raw - },this.legalPerson) - this.operationQualification = this.operationQualification.map((item,index,arr) =>{ - return item.raw - },this.operationQualification) - this.escortCompany = this.escortCompany.map((item,index,arr) =>{ - return item.raw - },this.escortCompany) - this.insurance = this.insurance.map((item,index,arr) =>{ - return item.raw - },this.insurance) - this.safetyProduction = this.safetyProduction.map((item,index,arr) =>{ - return item.raw - },this.safetyProduction) - const formData = new FormData(); - for (const i in this.registerForm) { - if ( - this.registerForm[i] != undefined && - this.registerForm[i].toString() != "" - ) { - formData.append(i, this.registerForm[i]); - } - } - if (this.businessLicense && this.businessLicense.length > 0) { - for (let i = 0; i < this.businessLicense.length; i++) - formData.append("businessLicense", this.businessLicense[i]); - } - if (this.idCard && this.idCard.length > 0) { - for (let i = 0; i < this.idCard.length; i++) - formData.append("idCard", this.idCard[i]); - } - if (this.legalPerson && this.legalPerson.length > 0) { - for (let i = 0; i < this.legalPerson.length; i++) - formData.append("legalPersonFile", this.legalPerson[i]); - } - if (this.operationQualification && this.operationQualification.length > 0) { - for (let i = 0; i < this.operationQualification.length; i++) - formData.append("operationQualification", this.operationQualification[i]); - } - if (this.escortCompany && this.escortCompany.length > 0) { - for (let i = 0; i < this.escortCompany.length; i++) - formData.append("escortCompany", this.escortCompany[i]); - } - if (this.insurance && this.insurance.length > 0) { - for (let i = 0; i < this.insurance.length; i++) - formData.append("insurance", this.insurance[i]); - } - if (this.safetyProduction && this.safetyProduction.length > 0) { - for (let i = 0; i < this.safetyProduction.length; i++) - formData.append("safetyProduction", this.safetyProduction[i]); - } - register(formData).then(res =>{ - if(res.data.code === '200'){ - this.$message({ - type:'success', - message:'注册成功', - duration:2000, - title:'成功' - }) - this.$router.push('/login') - }else{ - this.$message({ - type:'warning', - message:res.data.message - }) - } - }).catch(error => { - parseError({error: error, vm: this}) - }) - }else if(this.registerForm.type === '烟花爆竹零售经营(长期)' && this.businessLicense.length !== 0 && this.idCard.length !== 0 && this.legalPerson.length !== 0 && this.insurance.length !== 0){ - this.businessLicense = this.businessLicense.map((item,index,arr) =>{ - return item.raw - },this.businessLicense) - this.idCard = this.idCard.map((item,index,arr) =>{ - return item.raw - },this.idCard) - this.legalPerson = this.legalPerson.map((item,index,arr) =>{ - return item.raw - },this.legalPerson) - this.operationQualification = this.operationQualification.map((item,index,arr) =>{ - return item.raw - },this.operationQualification) - this.escortCompany = this.escortCompany.map((item,index,arr) =>{ - return item.raw - },this.escortCompany) - this.insurance = this.insurance.map((item,index,arr) =>{ - return item.raw - },this.insurance) - this.safetyProduction = this.safetyProduction.map((item,index,arr) =>{ - return item.raw - },this.safetyProduction) - const formData = new FormData(); - for (const i in this.registerForm) { - if ( - this.registerForm[i] != undefined && - this.registerForm[i].toString() != "" - ) { - formData.append(i, this.registerForm[i]); - } - } - if (this.businessLicense && this.businessLicense.length > 0) { - for (let i = 0; i < this.businessLicense.length; i++) - formData.append("businessLicense", this.businessLicense[i]); - } - if (this.idCard && this.idCard.length > 0) { - for (let i = 0; i < this.idCard.length; i++) - formData.append("idCard", this.idCard[i]); - } - if (this.legalPerson && this.legalPerson.length > 0) { - for (let i = 0; i < this.legalPerson.length; i++) - formData.append("legalPersonFile", this.legalPerson[i]); - } - if (this.operationQualification && this.operationQualification.length > 0) { - for (let i = 0; i < this.operationQualification.length; i++) - formData.append("operationQualification", this.operationQualification[i]); - } - if (this.escortCompany && this.escortCompany.length > 0) { - for (let i = 0; i < this.escortCompany.length; i++) - formData.append("escortCompany", this.escortCompany[i]); - } - if (this.insurance && this.insurance.length > 0) { - for (let i = 0; i < this.insurance.length; i++) - formData.append("insurance", this.insurance[i]); - } - if (this.safetyProduction && this.safetyProduction.length > 0) { - for (let i = 0; i < this.safetyProduction.length; i++) - formData.append("safetyProduction", this.safetyProduction[i]); - } - register(formData).then(res =>{ - if(res.data.code === '200'){ - this.$message({ - type:'success', - message:'注册成功', - duration:2000, - title:'成功' - }) - this.$router.push('/login') - }else{ - this.$message({ - type:'warning', - message:res.data.message - }) - } - }).catch(error => { - parseError({error: error, vm: this}) - }) - }else if(this.registerForm.type==='烟花爆竹零售经营(短期)' && this.idCard.length !== 0 && this.legalPerson.length !== 0 && this.insurance.length !== 0){ - this.businessLicense = this.businessLicense.map((item,index,arr) =>{ - return item.raw - },this.businessLicense) - this.idCard = this.idCard.map((item,index,arr) =>{ - return item.raw - },this.idCard) - this.legalPerson = this.legalPerson.map((item,index,arr) =>{ - return item.raw - },this.legalPerson) - this.operationQualification = this.operationQualification.map((item,index,arr) =>{ - return item.raw - },this.operationQualification) - this.escortCompany = this.escortCompany.map((item,index,arr) =>{ - return item.raw - },this.escortCompany) - this.insurance = this.insurance.map((item,index,arr) =>{ - return item.raw - },this.insurance) - this.safetyProduction = this.safetyProduction.map((item,index,arr) =>{ - return item.raw - },this.safetyProduction) - const formData = new FormData(); - for (const i in this.registerForm) { - if ( - this.registerForm[i] != undefined && - this.registerForm[i].toString() != "" - ) { - formData.append(i, this.registerForm[i]); - } - } - if (this.businessLicense && this.businessLicense.length > 0) { - for (let i = 0; i < this.businessLicense.length; i++) - formData.append("businessLicense", this.businessLicense[i]); - } - if (this.idCard && this.idCard.length > 0) { - for (let i = 0; i < this.idCard.length; i++) - formData.append("idCard", this.idCard[i]); - } - if (this.legalPerson && this.legalPerson.length > 0) { - for (let i = 0; i < this.legalPerson.length; i++) - formData.append("legalPersonFile", this.legalPerson[i]); - } - if (this.operationQualification && this.operationQualification.length > 0) { - for (let i = 0; i < this.operationQualification.length; i++) - formData.append("operationQualification", this.operationQualification[i]); - } - if (this.escortCompany && this.escortCompany.length > 0) { - for (let i = 0; i < this.escortCompany.length; i++) - formData.append("escortCompany", this.escortCompany[i]); - } - if (this.insurance && this.insurance.length > 0) { - for (let i = 0; i < this.insurance.length; i++) - formData.append("insurance", this.insurance[i]); - } - if (this.safetyProduction && this.safetyProduction.length > 0) { - for (let i = 0; i < this.safetyProduction.length; i++) - formData.append("safetyProduction", this.safetyProduction[i]); - } - register(formData).then(res =>{ - if(res.data.code === '200'){ - this.$message({ - type:'success', - message:'注册成功', - duration:2000, - title:'成功' - }) - this.$router.push('/login') - }else{ - this.$message({ - type:'warning', - message:res.data.message - }) - } - }).catch(error => { - parseError({error: error, vm: this}) - }) - }else{ - this.$message({ - type:'warning', - message:'请提交相关材料' - }) - } + this.register() }else{ this.$message({ type:'warning', @@ -979,136 +141,73 @@ }) }, - async changeArea(value){ - if(value === 'province'){ - this.registerForm.city = '' - this.registerForm.district = '' - this.registerForm.street = '' - this.registerForm.committee = '' - this.areaListQuery = { - type: 2, - parenttype: 1, - parentname: this.registerForm.province, + getDepartmentData(){ + getAllDepartment().then(res=>{ + if(res.data.code === '200'){ + this.departmentList = res.data.result + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) } - let res = await getCityListData(this.areaListQuery) - if(res.data.code === "200"){ - this.cityList = res.data.result + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }, + getCompanyData(){ + getAllCompany().then(res=>{ + if(res.data.code === '200'){ + this.companyList = res.data.result + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) } - }else if(value === 'city'){ - this.registerForm.district = '' - this.registerForm.street = '' - this.registerForm.committee = '' - this.areaListQuery = { - type: 3, - parenttype: 2, - parentname: this.registerForm.city, - } - let res = await getCityListData(this.areaListQuery) - if(res.data.code === "200"){ - this.districtList = res.data.result - } - }else if(value === 'district'){ - this.registerForm.street = '' - this.registerForm.committee = '' - this.areaListQuery = { - type: 4, - parenttype: 3, - parentname: this.registerForm.district, - } - let res = await getCityListData(this.areaListQuery) - if(res.data.code === "200"){ - this.streetList = res.data.result - } - }else if(value === 'street'){ - this.registerForm.committee = '' - this.areaListQuery = { - type: 5, - parenttype: 4, - parentname: this.registerForm.street, - } - let res = await getCityListData(this.areaListQuery) - if(res.data.code === "200"){ - this.committeeList = res.data.result - } - } - },//市、镇、街道、委员会 - showMaterial(){ - if(this.registerForm.type === '烟花爆竹生产'){ - this.shortMaterial = true - this.longMaterial = true - this.produceMaterial = true - this.buyMaterial = false - }else if(this.registerForm.type === '烟花爆竹批发经营'){ - this.shortMaterial = true - this.longMaterial = true - this.produceMaterial = true - this.buyMaterial = true - }else if(this.registerForm.type === '烟花爆竹零售经营(长期)'){ - this.shortMaterial = true - this.longMaterial = true - this.produceMaterial = false - this.buyMaterial = false + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }, + companyChange(val){ + this.registerForm.company = val.company + if (val.ismain === 1) { + this.isMain = true; }else{ - this.shortMaterial = true - this.longMaterial = false - this.produceMaterial = false - this.buyMaterial = false + this.isMain = false; + this.registerForm.department = '' } }, - checkNameAndNumber(value){ - if(value === 'name'){ - isNameExist(this.registerForm.enterprisename).then(res =>{ - if(res.data.code === '200'){ - if(res.data.result === true) { - this.showName = true - this.$message({ - type: 'warning', - message: '企业名称已存在', - }) - }else{ - this.$message({ - type:'success', - message:'企业名称可以使用' - }) - this.showName = false - } + + register(){ + this.submitting = true + register(this.registerForm) + .then(res=>{ + if (res.data.code === '200') { + this.$message({ + type:'success', + message:'注册成功' + }) + setTimeout(()=>{ + this.$router.push({path:'/login'}) + },1000) }else{ - this.showName = false this.$message({ type:'warning', - message:res.data.message, + message:res.data.message }) } - }).catch(error => { - parseError({error: error, vm: this}) }) - }else if(value === 'number'){ - isNumberExist(this.registerForm.enterprisenumber).then(res =>{ - if(res.data.code === '200'){ - if(res.data.result === true) { - this.showNumber = true - this.$message({ - type: 'warning', - message: '企业编号已存在', - }) - }else{ - this.$message({ - type:'success', - message:'企业编号可以使用' - }) - this.showNumber = false - } - }else{ - this.showNumber = false - this.$message({ - type:'warning', - message:res.data.message, - }) - } - }).catch(error => { - parseError({error: error, vm: this}) + .catch(err=>{ + console.log(err) + this.$message({ + type:'warning', + message:'请求超时' + }) }) - } + .finally(()=>{ + this.submitting = false + }) } } } @@ -1129,7 +228,7 @@ .register_main_form{ padding-top: 70px; margin: 30px auto; - max-width: 900px; + max-width: 800px; display: block; width: 100%; } diff --git a/src/views/majorHazardSourceMonitoring/productionEquipment/index.vue b/src/views/majorHazardSourceMonitoring/productionEquipment/index.vue index 46f0476..2949b54 100644 --- a/src/views/majorHazardSourceMonitoring/productionEquipment/index.vue +++ b/src/views/majorHazardSourceMonitoring/productionEquipment/index.vue @@ -129,6 +129,7 @@ v-model="form.userId" placeholder="请选择负责人" style="width: 100%" + filterable > <el-option v-for="item in personInCharge" diff --git a/src/views/specialWorkManage/index.vue b/src/views/specialWorkManage/index.vue new file mode 100644 index 0000000..ea834ff --- /dev/null +++ b/src/views/specialWorkManage/index.vue @@ -0,0 +1,13 @@ +<template> + <router-view></router-view> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/index.vue b/src/views/specialWorkManage/specialWork/index.vue new file mode 100644 index 0000000..ea834ff --- /dev/null +++ b/src/views/specialWorkManage/specialWork/index.vue @@ -0,0 +1,13 @@ +<template> + <router-view></router-view> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/equipment/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/equipment/index.vue new file mode 100644 index 0000000..211a7b3 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/equipment/index.vue @@ -0,0 +1,91 @@ +<template> + <div> + <div style="padding-bottom: 10px"> + <el-button type="primary" @click="addEquipment">添加设备</el-button> + </div> + <el-table :data="equipmentData" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="taskcode" label="作业编号" align="left"> + </el-table-column> + <el-table-column prop="name" label="设备名称" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.name"></el-input> + </template> + </el-table-column> + <el-table-column prop="type" label="设备类型" align="left"> + <template slot-scope="scope"> + <el-select v-model="scope.row.type"> + <el-option + v-for="item in typeList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column prop="num" label="设备数量" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.num"></el-input> + </template> + </el-table-column> + <el-table-column label="操作" align="center"> + <template slot-scope="scope"> + <el-button type="text" @click="deleteEquipment(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div align="center" style="padding-top: 20px" v-if="title === '新增' || title === '编辑' || title=== '施工单位确认' || title === '施工单位信息填写' || title === '复制'"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + </div> +</template> + +<script> +import { getSafetyActionList } from '@/api/task' + +export default { + props:['basicInformation','title'], + name: 'index', + data(){ + return{ + typeList:[{id:1,name:'安全防护设备及工具'},{id:2,name:'安全施工防护用具'},{id:3,name:'有毒有害防护设备'},{id:4,name:'个人防护设备'},{id:5,name:'安全措施设备及工器具'}], + equipmentData:[], + } + }, + created(){ + }, + methods:{ + addEquipment(){ + this.equipmentData.push({ + createdat: "", + createdby: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + name: "", + num: "", + taskcode: this.basicInformation.code, + }) + }, + deleteEquipment(val){ + this.equipmentData.splice(val,1) + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else if(this.title === '施工单位信息填写'){ + this.$emit('confirmConstruction') + }else { + this.$emit('changeToCardFile') + } + }, + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/file/allFire.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/file/allFire.vue new file mode 100644 index 0000000..c09ab0b --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/file/allFire.vue @@ -0,0 +1,244 @@ +<template> + <div> + <el-form ref="form" :model="fileForm" label-width="160px" label-position="right"> + <!-- <el-form-item label="事故救援预案:">--> + <!-- <el-upload--> + <!-- accept=".pdf,.jpg,.png"--> + <!-- :action="fileRoad"--> + <!-- class="upload-demo"--> + <!-- ref="upload"--> + <!-- :headers="header"--> + <!-- :data="uploadForm"--> + <!-- :on-change="handleChangeOne"--> + <!-- :auto-upload="true"--> + <!-- :on-remove="onRemove"--> + <!-- :on-success="onSuccess"--> + <!-- :on-preview="onPreview"--> + <!-- :file-list="fileListOne">--> + <!-- <el-button size="small" type="primary">点击上传</el-button>--> + <!-- </el-upload>--> + <!-- </el-form-item>--> + <el-form-item label="作业人员身体健康:"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-preview="onPreview" + :file-list="fileListTwo"> + <el-button size="small" type="primary" v-if="false">点击上传</el-button> + </el-upload> + </el-form-item> + <el-form-item label="作业资质证书:" v-if="false"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :data="uploadForm" + :on-preview="onPreview" + :file-list="fileListThree"> + <el-button size="small" type="primary" v-if="false">点击上传</el-button> + </el-upload> + </el-form-item> + <el-form-item label="事故救援预案:" v-if="false"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-preview="onPreview" + :file-list="fileListOne"> + </el-upload> + </el-form-item> + <!-- <el-form-item label="作业人员身体健康:" v-if="ifConstruction">--> + <!-- <el-upload--> + <!-- accept=".pdf,.jpg,.png"--> + <!-- :action="fileRoad"--> + <!-- class="upload-demo"--> + <!-- ref="upload"--> + <!-- :headers="header"--> + <!-- :data="uploadForm"--> + <!-- :on-change="handleChangeTwo"--> + <!-- :auto-upload="true"--> + <!-- :on-remove="onRemove"--> + <!-- :on-success="onSuccess"--> + <!-- :on-preview="onPreview"--> + <!-- :file-list="fileListTwo">--> + <!-- <el-button size="small" type="primary">点击上传</el-button>--> + <!-- </el-upload>--> + <!-- </el-form-item>--> + <!-- <el-form-item label="作业资质证书:" v-if="ifConstruction">--> + <!-- <el-upload--> + <!-- accept=".pdf,.jpg,.png"--> + <!-- :action="fileRoad"--> + <!-- class="upload-demo"--> + <!-- ref="upload"--> + <!-- :headers="header"--> + <!-- :data="uploadForm"--> + <!-- :on-change="handleChangeThree"--> + <!-- :on-remove="onRemove"--> + <!-- :on-success="onSuccess"--> + <!-- :auto-upload="true"--> + <!-- :on-preview="onPreview"--> + <!-- :file-list="fileListThree">--> + <!-- <el-button size="small" type="primary">点击上传</el-button>--> + <!-- </el-upload>--> + <!-- </el-form-item>--> + </el-form> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> +</template> + +<script> + import Cookies from 'js-cookie' + import { deleteFile, getFileData } from '@/api/task' + + export default { + props:['basicInformation','title'], + name: 'index', + data(){ + return{ + ifApply:'', + ifCompany:'', + ifConstruction:'', + ifApplyButton:'', + ifCompanyButton:'', + disabled:'', + fileForm:{}, + header:{Authorization:''}, + fileRoad:process.env.BASE_API + '/task/upload', + dialogVisible:false, + dialogImageUrl:'', + riskAndDanger:[], + safetyOrganizeAction:[], + workSecurityAction:[], + fileList:[], + fileListOne:[], + fileListTwo:[], + fileListThree:[], + uploadForm:{ + taskcode:'', + type:'', + } + } + }, + mounted(){ + this.getFileList() + }, + methods:{ + async onPreview(file){ + window.open( process.env.IMG_API + file.fileurl,'_blank') + }, + async getFileList(){ + let params = {} + params["taskCode"] = this.basicInformation.code + let res = await getFileData(params) + if(res.data.code === '200'){ + this.fileList = [] + this.fileListOne = [] + this.fileListTwo = [] + this.fileListThree = [] + this.fileList = res.data.result + this.fileList.map(item =>{ + return Object.assign(item,{name:item.originalname}) + }) + for(let i in this.fileList){ + if(this.fileList[i].type === '事故救援预案'){ + this.fileListOne.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业人员身体健康'){ + this.fileListTwo.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业资质证书'){ + this.fileListThree.push(this.fileList[i]) + } + } + } + }, + submit(){ + this.uploadForm.type = "事故救援预案" + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + this.$refs.upload.submit() + }, + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleChangeOne(file, fileList) { + this.uploadForm.type = '事故救援预案' + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeTwo(file, fileList) { + this.uploadForm.type = '作业人员身体健康'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeThree(file, fileList) { + this.uploadForm.type = '作业资质证书'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + onSuccess(response){ + if(response.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + this.getFileList() + } + }, + onRemove(file,fileList){ + return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(() =>{ + let params = {} + params["id"] = file.id + deleteFile(params).then(res =>{ + if(res.data.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'删除成功', + title:'成功', + }) + this.getFileList() + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + }) + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else{ + this.$emit('confirmConstruction') + } + }, + } + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/file/constructionFile.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/file/constructionFile.vue new file mode 100644 index 0000000..66eb654 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/file/constructionFile.vue @@ -0,0 +1,247 @@ +<template> + <div> + <el-form ref="form" :model="fileForm" label-width="160px" label-position="right"> +<!-- <el-form-item label="事故救援预案:">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-change="handleChangeOne"--> +<!-- :auto-upload="true"--> +<!-- :on-remove="onRemove"--> +<!-- :on-success="onSuccess"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListOne">--> +<!-- <el-button size="small" type="primary">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- <el-form-item label="作业人员身体健康:" v-if="ifApply">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListTwo">--> +<!-- <el-button size="small" type="primary" v-if="false">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- <el-form-item label="作业资质证书:" v-if="ifApply">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListThree">--> +<!-- <el-button size="small" type="primary" v-if="false">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> + <el-form-item label="事故救援预案:" v-if="ifCompany"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-preview="onPreview" + :file-list="fileListOne"> + </el-upload> + </el-form-item> + <el-form-item label="作业人员身体健康:" v-if="ifConstruction"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-change="handleChangeTwo" + :auto-upload="true" + :on-remove="onRemove" + :on-success="onSuccess" + :on-preview="onPreview" + :file-list="fileListTwo"> + <el-button size="small" type="primary">点击上传</el-button> + </el-upload> + </el-form-item> + <el-form-item label="作业资质证书:" v-if="ifConstruction"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-change="handleChangeThree" + :on-remove="onRemove" + :on-success="onSuccess" + :auto-upload="true" + :on-preview="onPreview" + :file-list="fileListThree"> + <el-button size="small" type="primary">点击上传</el-button> + </el-upload> + </el-form-item> + </el-form> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> +</template> + +<script> + import Cookies from 'js-cookie' + import { deleteFile, getFileData } from '@/api/task' + + export default { + props:['basicInformation','title'], + name: 'index', + data(){ + return{ + ifApply:'', + ifCompany:'', + ifConstruction:'', + ifApplyButton:'', + ifCompanyButton:'', + disabled:'', + fileForm:{}, + header:{Authorization:''}, + fileRoad:process.env.BASE_API + '/task/upload', + dialogVisible:false, + dialogImageUrl:'', + riskAndDanger:[], + safetyOrganizeAction:[], + workSecurityAction:[], + fileList:[], + fileListOne:[], + fileListTwo:[], + fileListThree:[], + uploadForm:{ + taskcode:'', + type:'', + } + } + }, + mounted(){ + this.getFileList() + }, + methods:{ + async onPreview(file){ + window.open( process.env.IMG_API + file.fileurl,'_blank') + }, + async getFileList(){ + let params = {} + params["taskCode"] = this.basicInformation.code + let res = await getFileData(params) + if(res.data.code === '200'){ + this.fileList = [] + this.fileListOne = [] + this.fileListTwo = [] + this.fileListThree = [] + this.fileList = res.data.result + this.fileList.map(item =>{ + return Object.assign(item,{name:item.originalname}) + }) + for(let i in this.fileList){ + if(this.fileList[i].type === '事故救援预案'){ + this.fileListOne.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业人员身体健康'){ + this.fileListTwo.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业资质证书'){ + this.fileListThree.push(this.fileList[i]) + } + } + } + }, + submit(){ + this.uploadForm.type = "事故救援预案" + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + this.$refs.upload.submit() + }, + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleChangeOne(file, fileList) { + this.uploadForm.type = '事故救援预案' + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeTwo(file, fileList) { + this.uploadForm.type = '作业人员身体健康'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeThree(file, fileList) { + this.uploadForm.type = '作业资质证书'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + onSuccess(response){ + if(response.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + this.getFileList() + } + }, + onRemove(file,fileList){ + return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(() =>{ + let params = {} + params["id"] = file.id + deleteFile(params).then(res =>{ + if(res.data.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'删除成功', + title:'成功', + }) + this.getFileList() + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + }) + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else{ + this.$emit('confirmConstruction') + } + }, + } + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/file/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/file/index.vue new file mode 100644 index 0000000..1055d78 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/file/index.vue @@ -0,0 +1,251 @@ +<template> + <div> + <el-form ref="form" :model="fileForm" label-width="160px" label-position="right"> + <el-form-item label="事故救援预案:"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-change="handleChangeOne" + :auto-upload="true" + :on-remove="onRemove" + :on-success="onSuccess" + :on-preview="onPreview" + :file-list="fileListOne"> + <el-button size="small" type="primary">点击上传</el-button> + </el-upload> + </el-form-item> +<!-- <el-form-item label="作业人员身体健康:" v-if="ifApply">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListTwo">--> +<!-- <el-button size="small" type="primary" v-if="false">点击上传</el-button>--> +<!-- </el-upload>--> +<!--<!– </el-form-item>–>--> +<!-- <el-form-item label="作业资质证书:" v-if="ifApply">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListThree">--> +<!-- <el-button size="small" type="primary" v-if="false">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- <el-form-item label="事故救援预案:" v-if="ifCompany">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListOne">--> +<!-- <el-button size="small" type="primary" v-if="false">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- <el-form-item label="作业人员身体健康:" v-if="ifCompany">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-change="handleChangeTwo"--> +<!-- :auto-upload="true"--> +<!-- :on-remove="onRemove"--> +<!-- :on-success="onSuccess"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListTwo">--> +<!-- <el-button size="small" type="primary" v-if="ifCompanyButton">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- <el-form-item label="作业资质证书:" v-if="ifCompany">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-change="handleChangeThree"--> +<!-- :on-remove="onRemove"--> +<!-- :on-success="onSuccess"--> +<!-- :auto-upload="true"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListThree">--> +<!-- <el-button size="small" type="primary" v-if="ifCompanyButton">点击上传</el-button>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> + </el-form> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> +</template> + +<script> +import Cookies from 'js-cookie' +import { deleteFile, getFileData } from '@/api/task' + +export default { + props:['basicInformation','title'], + name: 'index', + data(){ + return{ + ifApply:'', + ifCompany:'', + ifApplyButton:'', + ifCompanyButton:'', + disabled:'', + fileForm:{}, + header:{Authorization:''}, + fileRoad:process.env.BASE_API + '/task/upload', + dialogVisible:false, + dialogImageUrl:'', + riskAndDanger:[], + safetyOrganizeAction:[], + workSecurityAction:[], + fileList:[], + fileListOne:[], + fileListTwo:[], + fileListThree:[], + uploadForm:{ + taskcode:'', + type:'', + } + } + }, + mounted(){ + this.getFileList() + }, + methods:{ + async onPreview(file){ + window.open( process.env.IMG_API + file.fileurl,'_blank') + }, + async getFileList(){ + let params = {} + params["taskCode"] = this.basicInformation.code + let res = await getFileData(params) + if(res.data.code === '200'){ + this.fileList = [] + this.fileListOne = [] + this.fileListTwo = [] + this.fileListThree = [] + this.fileList = res.data.result + this.fileList.map(item =>{ + return Object.assign(item,{name:item.originalname}) + }) + for(let i in this.fileList){ + if(this.fileList[i].type === '事故救援预案'){ + this.fileListOne.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业人员身体健康'){ + this.fileListTwo.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业资质证书'){ + this.fileListThree.push(this.fileList[i]) + } + } + } + }, + submit(){ + this.uploadForm.type = "事故救援预案" + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + this.$refs.upload.submit() + }, + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleChangeOne(file, fileList) { + this.uploadForm.type = '事故救援预案' + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeTwo(file, fileList) { + this.uploadForm.type = '作业人员身体健康'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeThree(file, fileList) { + this.uploadForm.type = '作业资质证书'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + onSuccess(response){ + if(response.code === '200'){ + console.log(this.fileListOne) + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + this.getFileList() + } + }, + onRemove(file,fileList){ + return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(() =>{ + let params = {} + params["id"] = file.id + deleteFile(params).then(res =>{ + if(res.data.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'删除成功', + title:'成功', + }) + this.getFileList() + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + }) + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else if(this.title === '施工单位信息填写'){ + + }else { + this.$emit('confirm') + } + + }, + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/fireMan/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/fireMan/index.vue new file mode 100644 index 0000000..442e6e8 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/fireMan/index.vue @@ -0,0 +1,127 @@ +<template> + <div> + <div style="padding-bottom: 10px"> + <el-button type="primary" @click="addTaskWorker">添加作业人</el-button> + </div> + <el-table :data="taskWorkers" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="taskcode" label="作业编号" align="left"> + </el-table-column> + <el-table-column prop="unit" label="作业类型" align="left"> + <template slot-scope="scope"> + <el-select v-model="scope.row.tasktype"> + <el-option + v-for="item in taskTypeList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column prop="unit" label="施工单位" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.unit"></el-input> + </template> + </el-table-column> + <el-table-column prop="worker" label="作业人姓名" align="left"> + <template slot-scope="scope"> + <el-select v-model="scope.row.worker"> + <el-option + v-for="item in workerList" + :key="item.id" + :value="item.realname" + :label="item.realname" + > + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column prop="branch" label="特种作业工种" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.branch"></el-input> + </template> + </el-table-column> + <el-table-column prop="number" label="特种作业证号" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.number"></el-input> + </template> + </el-table-column> + <el-table-column label="操作" align="center"> + <template slot-scope="scope"> + <el-button type="text" @click="deleteWorker(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div align="center" style="padding-top: 20px" v-if="title === '新增' || title === '编辑' || title=== '施工单位确认' || title === '施工单位信息填写' || title === '复制'"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + </div> +</template> + +<script> + +import { userList } from '@/api/user' + +export default { + props:['basicInformation','title'], + name: 'index', + data(){ + return{ + taskWorkers:[], + workerList:[], + taskTypeList:[ + {id:0,name:'受限空间作业'}, + {id:1,name:'吊装作业'}, + {id:2,name:'动土作业'}, + {id:3,name:'断路作业'}, + {id:4,name:'高处作业'}, + {id:5,name:'临时用电作业'}, + {id:6,name:'盲板抽堵作业'}, + {id:7,name:'动火作业'}, + ], + } + }, + created(){ + this.getWorker() + }, + methods:{ + addTaskWorker(){ + this.taskWorkers.push({ + createdat: "", + createdby: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + taskcode: this.basicInformation.code, + unit: "", + worker: "", + branch: "", + number: "", + tasktype:'', + }) + }, + deleteWorker(val){ + this.taskWorkers.splice(val,1) + }, + goNext(){ + this.$emit('confirmConstruction') + }, + async getWorker(){ + let params = {} + params['pageIndex'] = 1 + params['pageSize'] = 1000 + let res = await userList(params) + if(res.data.code === '200'){ + this.workerList = res.data.result.result + } + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/reviewInfo/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/reviewInfo/index.vue new file mode 100644 index 0000000..b1649a9 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/reviewInfo/index.vue @@ -0,0 +1,73 @@ +<template> + <el-dialog title="审批" :visible.sync="reviewInfoDialog" :modal-append-to-body="false" :close-on-click-modal="false" width="50%"> + <div class="block"> + <el-timeline> + <el-timeline-item + v-for="(activity, index) in activities" + :key="index" + :color="'#0bbd87'" + :size="activity.size" + :timestamp="activity.reviewat"> + <div style="padding-bottom: 10px;font-weight: bolder">{{activity.level}}</div> + <el-card> + <el-row> + <el-col :span="2"> + <div>签字:</div> + </el-col> + <el-col :span="22"> + <img :src="activity.autograph" style="width:40px;height:40px;margin-left:10px;cursor:pointer" @click="showPic(activity.autograph)"></img> + </el-col> + </el-row> + <el-row> + <span>现场图:</span> + <img slot="reference" v-for="(item,index) in activity.pictures" :src="item.url" :key="index" style="width:40px;height:40px;margin-left:10px;cursor:pointer" @click="showPic()"></img> + </el-row> + + </el-card> + </el-timeline-item> + </el-timeline> + </div> + <el-dialog :visible.sync="dialogVisible" :append-to-body="true"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </el-dialog> +</template> + +<script> + export default { + name: 'index', + data(){ + return{ + reviewInfoDialog:false, + dialogVisible:false, + dialogImageUrl:'', + activities: [] + } + }, + methods:{ + openReviewInfo(value){ + this.reviewInfoDialog = true + debugger + this.activities = JSON.parse(JSON.stringify(value.taskReviews)) + for(let i in this.activities){ + if(this.activities[i].pictures !== null && this.activities[i].pictures.length !== 0){ + this.activities[i].pictures = this.activities[i].pictures.map( item =>{ + return process.env.IMG_API + item + }) + } + this.activities[i].autograph = process.env.IMG_API + this.activities[i].autograph + } + + + }, + showPic(value){ + this.dialogVisible = true + this.dialogImageUrl = value + }, + } + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/safetyAction/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/safetyAction/index.vue new file mode 100644 index 0000000..2f00b61 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/safetyAction/index.vue @@ -0,0 +1,170 @@ +<template> + <div> + <el-table :data="tasksecurity" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="content" label="安全措施" align="left"> + <template slot-scope="scope"> + <div v-if="scope.row.checktype === '判断'"> + {{scope.row.content}} + </div> + <div v-if="scope.row.checktype === '填空'"> + <span>{{scope.row.content.split('_')[0]}}</span> + <el-input style="width:50px" v-model="scope.row.num"></el-input> + <span>{{scope.row.content.split('_')[1]}}</span> + </div> + </template> + </el-table-column> + <el-table-column prop="checked" label="选项" align="center" width="300"> + <template slot-scope="scope"> + <el-radio v-model="scope.row.checked" :label="1">是</el-radio> + <el-radio v-model="scope.row.checked" :label="0">否</el-radio> + <el-radio v-model="scope.row.checked" :label="2">不涉及</el-radio> + </template> + </el-table-column> + </el-table> + <div align="center" style="padding-top: 20px" v-if="title === '新增' || title === '编辑' || title=== '施工单位确认' || title === '施工单位信息填写' || title === '复制'"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + </div> +</template> + +<script> +import { getSafetyActionList } from '@/api/task' + +export default { + props:['basicInformation','title'], + name: 'index', + data(){ + return{ + currentPage:0, + pageSize:1000, + tasksecurity:[], + safetyActionData:[ + // {id:0,selected:true,action:'动火设备内部构件清理干净,蒸汽吹扫或水洗合格,达到用火条件。',type:0}, + // {id:1,selected:null,actionOne:'',actionTwo:'',type:1}, + // {id:2,selected:null,action:'动火点10m范围内及动火点下部区域严禁同时进行可燃溶剂清洗和喷漆等作业。在受限空间内进行动火作业、临时用电作业时,不得同时进行刷漆、喷漆作业或使用可燃溶剂清洗等其他可能散发易燃气体、可燃液体的作业。',type:0}, + // {id:3,selected:null,action:'动火点周围的下水井、地漏、地沟、电缆沟等已清除易燃物,并已采取覆盖、铺沙、水封等手段进行隔离。',type:0}, + // {id:4,selected:null,action:'动火点周围易燃物已清除。',type:0}, + // {id:5,selected:null,action:'罐区内动火点同一围堰内和防火间距内的储罐不同时进行脱水作业,排凝等作业。',type:0}, + // {id:6,selected:null,action:'距动火点30m内严禁排放可燃气体,15m内严禁排放各类可燃液体。',type:0}, + // {id:7,selected:null,action:'电焊回路线已接在焊件上,把线未穿过下水井或其它设备搭接。',type:0}, + // {id:8,selected:null,action:'高处作业已采取防火花飞溅措施。',type:0}, + // {id:9,selected:null,action:'乙炔气瓶(直立放置)、氧气瓶与火源间的距离大于10m,二者间距不应小于5m。',type:0}, + // {id:10,selected:null,actionOne:'',actionTwo:'',actionThree:'',actionFour:'',type:2}, + // {id:11,selected:null,actionOne:'',type:3}, + ], + } + }, + methods:{ + async getSafeTyAction(){ + let typeList = [] + for(let i in this.basicInformation.subTaskInfos){ + typeList.push(this.basicInformation.subTaskInfos[i].type) + } + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['type'] = '申请单位负责检查项' + this.safetyActionData = [] + this.tasksecurity = [] + let res = await getSafetyActionList(params) + if(res.data.code === '200'){ + this.safetyActionData = res.data.result + for(let i in this.safetyActionData){ + if(typeList.indexOf(this.safetyActionData[i].tasktype) !== -1){ + this.tasksecurity.push({ + id:this.safetyActionData[i].id, + taskcode: this.basicInformation.code, + content: this.safetyActionData[i].content, + checked: this.safetyActionData[i].check, + num: this.safetyActionData[i].number, + confirmedby: "test", + checktype:this.safetyActionData[i].checktype, + tasktype:this.safetyActionData[i].tasktype + }) + } + } + // this.safetyActionData.filter(item =>{ + // if(typeList.indexOf(item.tasktype) !== -1){ + // return{ + // id:item.id, + // taskcode: this.basicInformation.code, + // content: item.content, + // checked: item.check, + // num: item.number, + // confirmedby: "test", + // checktype:item.checktype, + // tasktype:item.tasktype + // } + // } + // }) + // console.log(typeList) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }, + async getConstructionAction(){ + // let typeList = [] + // for(let i in this.basicInformation.subTaskInfos){ + // typeList.push(this.basicInformation.subTaskInfos[i].type) + // } + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['type'] = '施工单位负责检查项' + this.safetyActionData = [] + this.tasksecurity = [] + let res = await getSafetyActionList(params) + if(res.data.code === '200'){ + this.safetyActionData = res.data.result + // for(let i in this.safetyActionData){ + // if(typeList.indexOf(this.safetyActionData[i].tasktype) !== -1){ + // this.tasksecurity.push({ + // id:this.safetyActionData[i].id, + // taskcode: this.basicInformation.code, + // content: this.safetyActionData[i].content, + // checked: this.safetyActionData[i].check, + // num: this.safetyActionData[i].number, + // confirmedby: "test", + // checktype:this.safetyActionData[i].checktype, + // tasktype:this.safetyActionData[i].tasktype + // }) + // } + // } + this.tasksecurity = this.safetyActionData.map(item =>{ + return { + id:item.id, + taskcode: this.basicInformation.code, + content: item.content, + checked: item.check, + num: item.number, + confirmedby: "test", + checktype:item.checktype, + } + }) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else if(this.title === '施工单位信息填写'){ + this.$emit('confirmConstruction') + }else { + this.$emit('changeToCardFile') + } + }, + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/safetyAndRiskConfirm/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/safetyAndRiskConfirm/index.vue new file mode 100644 index 0000000..6f36966 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/safetyAndRiskConfirm/index.vue @@ -0,0 +1,298 @@ +<template> + <div class="safetyAndRiskConfirm"> + <div class="safetyAndRiskConfirm_title"> + <span>{{"安全交底和风险告知确认卡"}}</span> + <span style="color:red">{{"(*必填项)"}}</span> + </div> + <el-descriptions class="margin-top" :column="2" border> + <el-descriptions-item :span="1"> + <template slot="label"> + <i class="el-icon-office-building"></i> + 作业单位 + </template> + <div class="safetyAndRiskConfirm_input">{{constructionUnit}}</div> + </el-descriptions-item> + <el-descriptions-item :span="1" class="test"> + <template slot="label"> + <i class="el-icon-user-solid"></i> + 车间项目负责人 + </template> + <div class="safetyAndRiskConfirm_input">{{director}}</div> + </el-descriptions-item> + <el-descriptions-item :span="2"> + <template slot="label" > + <i class="el-icon-notebook-2"></i> + 作业内容 + <span style="color:red">*</span> + <span>:</span> + </template> + <el-input class="safetyAndRiskConfirm_input" v-model="taskRiskForm.content"></el-input> + </el-descriptions-item> + <el-descriptions-item :span="2"> + <template slot="label" > + <i class="el-icon-time"></i> + 作业时间 + </template> + <div class="safetyAndRiskConfirm_input">{{startTime + '-' + endTime}}</div> + </el-descriptions-item> + <el-descriptions-item :span="2"> + <template slot="label" > + <i class="el-icon-user"></i> + 作业人员 + </template> + <el-input class="safetyAndRiskConfirm_input"></el-input> + </el-descriptions-item> + </el-descriptions> + <el-descriptions title="基本要求" direction="vertical" :column="4" border> + </el-descriptions> + <div class="safetyAndRiskConfirm_top"> + <div class="safetyAndRiskConfirm_top_title"> + {{"作业前,项目负责人应对施工作业人员进行安全交底和风险告知,内容包括作业许可范围及作业环境、作业风险、防范措施(工艺、设备、个体防护等)、应急措施及其他注意事项。作业人员应按照风险告知内容,逐条对接确认,落实到位后方可作业。"}} + </div> + </div> + <div class="safetyAndRiskConfirm_middle"> + <div class="safetyAndRiskConfirm_middle_left"> + <div class="safetyAndRiskConfirm_middle_left_title">{{'安全交底和风险告知内容'}}</div> + </div> + <div class="safetyAndRiskConfirm_middle_right"> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"作业许可范围及作业环境"}} + <span style="color:red">*</span> + <span>:</span> + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.environment"></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"作业风险:"}} + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="hazard" readonly></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"防范措施(工艺、设备、个体防护等)"}} + <span style="color:red">*</span> + <span>:</span> + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.preventive"></el-input> + + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"应急措施"}} + <span style="color:red">*</span> + <span>:</span> + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.emergency"></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"其他注意事项"}} + <span style="color:red">*</span> + <span>:</span> + </div> + <div calss="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.other"></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_two"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"企业负责人确认:"}} + </div> + <div calss="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea"></el-input> + </div> + </div> + </div> + </div> + <div class="safetyAndRiskConfirm_bottom"> + <div class="safetyAndRiskConfirm_bottom_title"> + {{"我方所有施工作业人员已明确该项目的风险并清楚了危害、防范措施和其它注意事项。"}} + </div> + </div> + <div align="center" style="padding-top: 20px" v-if="title === '新增' || title === '编辑' || title=== '施工单位确认' || title === '施工单位信息填写' || title === '复制'"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + </div> +</template> + +<script> +export default { + name: 'index', + props:['basicInformation','title'], + data(){ + return{ + director:'', + startTime:'', + endTime:'', + constructionUnit:'', + hazard:'', + taskRiskForm:{ + id:'', + taskcode:'', + content:'', + environment:'', + preventive:'', + emergency:'', + other:'', + director:'', + taskdirector:'', + confirmat:'', + createdat:'', + createdby:'', + modifiedat:'', + modifiedby:'', + flag:'', + }, + } + }, + mounted(){ + this.getBasic() + }, + methods:{ + getBasic(){ + this.constructionUnit = this.basicInformation.constructionunit + this.director = this.basicInformation.director + this.startTime = this.basicInformation.starttime + this.endTime = this.basicInformation.endtime + this.hazard = this.basicInformation.hazard + this.taskRiskForm.taskcode = this.basicInformation.code + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else { + this.$emit('changeToCardFile') + } + }, + } +} +</script> + +<style scoped> +.safetyAndRiskConfirm{ + width:60%; + margin:0 auto; +} +.safetyAndRiskConfirm_title{ + padding-bottom: 15px; + font-weight: bold; + font-size: 25px; + text-align: center; +} +/deep/.el-descriptions__header{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:30px; + text-align: center; +} +/deep/.el-descriptions__title{ + text-align: center; + width:100%; + margin: 0px auto; +} +.safetyAndRiskConfirm_top{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:80px; + font-size: 18px; + text-indent: 2em; +} +.safetyAndRiskConfirm_top_title{ + position: relative; + top: 50%; /*偏移*/ + transform: translateY(-50%); +} +/*.safetyAndRiskConfirm_basic{*/ +/* border-left: 1px solid #EBEEF5;*/ +/* border-right: 1px solid #EBEEF5;*/ +/* border-bottom: 1px solid #EBEEF5;*/ +/* margin: 0px auto;*/ +/* height:80px;*/ +/* font-size: 18px;*/ +/* text-indent: 2em;*/ +/*}*/ +.safetyAndRiskConfirm_middle{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:550px; + font-size: 18px; +} +.safetyAndRiskConfirm_middle_left{ + height:100%; + width:10%; + border-right: 1px solid #EBEEF5; + display:inline-block; + float: left; +} +.safetyAndRiskConfirm_middle_left_title{ + padding-left: 12px; + padding-right: 12px; + text-align: center; + position: relative; + top: 50%; /*偏移*/ + transform: translateY(-50%); +} +.safetyAndRiskConfirm_middle_right{ + float: left; + height:100%; + width:90%; +} +.safetyAndRiskConfirm_middle_right_one{ + height:16.6%; + width:100%; + border-bottom: 1px solid #EBEEF5; +} +.safetyAndRiskConfirm_middle_right_two{ + height:16.6%; + width:100%; +} +.safetyAndRiskConfirm_middle_right_one_top{ + height:30%; + width:100%; + padding-top:5px; + padding-left: 5px; +} +.safetyAndRiskConfirm_middle_right_one_textarea{ + padding-left: 5px; + padding-right:5px ; + padding-top: 2px; +} +.safetyAndRiskConfirm_middle_right_one_text{ + height:70%; + width:100%; +} + +.safetyAndRiskConfirm_bottom{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:100px; + font-size: 18px; +} +.safetyAndRiskConfirm_bottom_title{ + text-align: center; + position: relative; + top: 50%; /*偏移*/ + transform: translateY(-50%); +} +.test{ + /*border: 0px;*/ +} +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/taskBasic/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/taskBasic/index.vue new file mode 100644 index 0000000..cd582aa --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/taskBasic/index.vue @@ -0,0 +1,1552 @@ +<template> + <div style="padding:20px 50px 0 50px;"> + <el-form ref="form" :rules="taskBasicRules" :model="taskBasicForm" label-position="center" label-width="150px"> + <el-collapse v-model="activeNames"> + <el-collapse-item title="基本信息" name="0"> + + <el-row> + <el-col :span="8"> + <el-form-item label="申请单位:" prop="unit"> + <el-input v-model="taskBasicForm.unit" readonly></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="申请人:" prop="applicant"> + <el-input v-model="taskBasicForm.applicant" readonly></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="负责人:" prop="director"> + <el-input v-model="taskBasicForm.director"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="8"> + <el-form-item label="危害辨识:" prop="hazard"> + <el-select v-model="taskBasicForm.hazard" filterable class="taskBasic_select" multiple> + <el-option + v-for="item in hazardList" + :key="item.id" + :label="item.text" + :value="item.text" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="开始时间:" style="margin-right: 0px" prop="starttime"> + <el-date-picker value-format="yyyy-MM-dd HH:mm" type="datetime" v-model="taskBasicForm.starttime" placeholder="选择开始日期" class="taskBasic_select"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="结束时间:" prop="endtime"> + <el-date-picker value-format="yyyy-MM-dd HH:mm" type="datetime" v-model="taskBasicForm.endtime" placeholder="选择结束日期" class="taskBasic_select"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + + <el-row> + + <el-col :span="8"> + <el-form-item label="施工单位:" prop="constructionunit" > + <el-select v-model="taskBasicForm.constructionunit" clearable class="taskBasic_select"> + <el-option + v-for="item in companyList" + :key="item.id" + :value="item.company" + :label="item.company" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item label="作业地点:" prop="area"> + <el-input v-model="taskBasicForm.area"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + + <el-col :span="8"> + <el-form-item label="是否节假日:" prop="isholiday" > + <el-select v-model="taskBasicForm.isholiday" clearable class="taskBasic_select"> + <el-option + v-for="item in list" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item label="作业内容:" prop="description"> + <el-input v-model="taskBasicForm.description"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="是否需要检测气体:" prop="isanalysis" > + <el-select v-model="taskBasicForm.isanalysis" clearable class="taskBasic_select" @change="showAnalysis"> + <el-option + v-for="item in list" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8" v-if="ifAnalysis"> + <el-form-item label="分析地点:" prop="analysisarea" > + <el-input v-model="taskBasicForm.analysisarea"></el-input> + </el-form-item> + </el-col> + <el-col :span="8" v-if="ifAnalysis"> + <el-form-item label="分析介质:" prop="analysismedium" > + <el-input v-model="taskBasicForm.analysismedium"></el-input> + </el-form-item> + </el-col> + </el-row> + + </el-collapse-item> + <el-collapse-item title="受限空间作业" name="1"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeArea" :label="1">是</el-radio> + <el-radio v-model="ifIncludeArea" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeArea"> + <el-row> + <el-col :span="8"> + <el-form-item label="受限空间分类:" prop="spacecategory"> + <el-select v-model="taskBasicForm.spacecategory" class="taskBasic_select" @change="handleSpaceCategory"> + <el-option + v-for="item in spaceCategoryList" + :key="item.id" + :value="item.name" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="受限空间名称:" prop="spacename"> + <el-select v-model="taskBasicForm.spacename" class="taskBasic_select"> + <el-option + v-for="item in spaceNameList" + :key="item.id" + :value="item.name" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="受限空间介质名称:" prop="spacemedium"> + <el-input v-model="taskBasicForm.spacemedium" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="是否受酸碱腐蚀:" prop="acibase"> + <el-select v-model="taskBasicForm.acibase" class="taskBasic_select"> + <el-option + v-for="item in acibaseList" + :key="item.id" + :value="item.name" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </div> + + </el-collapse-item> + <el-collapse-item title="吊装作业" name="2"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifHoisting" :label="1">是</el-radio> + <el-radio v-model="ifHoisting" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifHoisting"> + <el-row> + <el-col :span="8"> + <el-form-item label="吊装重物等级:" prop="hoistinglevel"> + <el-select v-model="taskBasicForm.hoistinglevel" class="taskBasic_select"> + <el-option value="一级吊装(质量>100吨)"></el-option> + <el-option value="二级吊装(40吨<=质量<=100吨)"></el-option> + <el-option value="三级吊装(质量<40吨)"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="吊装重物质量(t):" prop="hoistingweight"> + <el-input v-model="taskBasicForm.hoistingweight" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="动土作业" name="3"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifBuilding" :label="1">是</el-radio> + <el-radio v-model="ifBuilding" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifBuilding"> + <el-row> + <el-col :span="8"> + <el-form-item label="动土作业深度:" prop="soildepth"> + <el-input v-model="taskBasicForm.soildepth" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="动土作业面积:" prop="soilarea"> + <el-input v-model="taskBasicForm.soilarea" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="动土方案文件:" prop="soilfile"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + list-type="picture-card" + :file-list="taskBasicForm.soilfile" + :on-change="handleChangeBuildingFile" + :on-success="onSoilFileSuccess" + :auto-upload="true"> + <i slot="default" class="el-icon-plus"></i> + <div slot="file" slot-scope="{file}"> + <img + class="el-upload-list__item-thumbnail" + :src="file.url" alt="" + > + <span class="el-upload-list__item-actions"> + <span + class="el-upload-list__item-preview" + @click="handleFile(file)" + > + <i class="el-icon-zoom-in"></i> + </span> + <span + v-if="!disabled" + class="el-upload-list__item-delete" + @click="handleRemove(file,'one')" + > + <i class="el-icon-delete"></i> + </span> + </span> + </div> + </el-upload> + </el-form-item> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="断路作业" name="4"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeRoad" :label="1">是</el-radio> + <el-radio v-model="ifIncludeRoad" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeRoad"> + <el-row> + <el-col :span="16"> + <el-form-item label="断路原因:" prop="breakreason"> + <el-input v-model="taskBasicForm.breakreason" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="断路地段示意图:" prop="breakfile"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + list-type="picture-card" + :file-list="taskBasicForm.breakfile" + :on-success="onBreakFileSuccess" + :on-change="handleChangeRoadFile" + :auto-upload="true"> + <i slot="default" class="el-icon-plus"></i> + <div slot="file" slot-scope="{file}"> + <img + class="el-upload-list__item-thumbnail" + :src="file.url" alt="" + > + <span class="el-upload-list__item-actions"> + <span + class="el-upload-list__item-preview" + @click="handleFile(file)" + > + <i class="el-icon-zoom-in"></i> + </span> + <span + v-if="!disabled" + class="el-upload-list__item-delete" + @click="handleRemove(file,'two')" + > + <i class="el-icon-delete"></i> + </span> + </span> + </div> + </el-upload> + </el-form-item> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="高处作业" name="5"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeHigh" :label="1">是</el-radio> + <el-radio v-model="ifIncludeHigh" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeHigh"> + <el-row> + <el-col :span="8"> + <el-form-item label="作业等级:" prop="heightlevel"> + <el-select v-model="taskBasicForm.heightlevel" class="taskBasic_select"> + <el-option value="一级高处作业(2米≤高度<5米)"></el-option> + <el-option value="二级高处作业(5米≤高度<15米)"></el-option> + <el-option value="三级高处作业(15米≤高度<30米)"></el-option> + <el-option value="特级高处作业(高度≥30米)"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="作业高度:" prop="workheight"> + <el-input type="number" v-model="taskBasicForm.workheight" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="临时用电作业" name="6"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeElectricity" :label="1">是</el-radio> + <el-radio v-model="ifIncludeElectricity" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeElectricity"> + <el-row> + <el-col :span="8"> + <el-form-item label="电压接入点:" prop="electricityarea"> + <el-input v-model="taskBasicForm.electricityarea" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="工作电压:" prop="voltage"> + <el-input v-model="taskBasicForm.voltage" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="用电设备及功率:" prop="power"> + <el-input v-model="taskBasicForm.power" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="盲板抽堵作业" name="7"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludePump" :label="1" >是</el-radio> + <el-radio v-model="ifIncludePump" :label="0" >否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludePump"> + <el-row> + <el-col :span="8"> + <el-form-item label="设备管道名称:" prop="pipename"> + <el-input v-model="taskBasicForm.pipename" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="设备管道介质:" prop="pipemedium"> + <el-input v-model="taskBasicForm.pipemedium" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="设备管道温度:" prop="pipetemperature"> + <el-input v-model="taskBasicForm.pipetemperature" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="设备管道压力:" prop="pipepressure"> + <el-input v-model="taskBasicForm.pipepressure" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="盲板材质:" prop="blindboardmaterial"> + <el-input v-model="taskBasicForm.blindboardmaterial" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="盲板规格11:" prop="blindboardspecification"> + <el-input v-model="taskBasicForm.blindboardspecification" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="盲板编号:" prop="blindboardnumber"> + <el-input v-model="taskBasicForm.blindboardnumber" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="盲板位置图:" prop="blindboardlocation"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + list-type="picture-card" + :file-list="taskBasicForm.blindboardlocation" + :on-success="onPumpFileSuccess" + :on-change="handleChangePumpFile" + :auto-upload="true"> + <i slot="default" class="el-icon-plus"></i> + <div slot="file" slot-scope="{file}"> + <img + class="el-upload-list__item-thumbnail" + :src="file.url" alt="" + > + <span class="el-upload-list__item-actions"> + <span + class="el-upload-list__item-preview" + @click="handleFile(file)" + > + <i class="el-icon-zoom-in"></i> + </span> + <span + v-if="!disabled" + class="el-upload-list__item-delete" + @click="handleRemove(file,'three')" + > + <i class="el-icon-delete"></i> + </span> + </span> + </div> + </el-upload> + </el-form-item> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="动火作业" name="8"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeFire" :label="1">是</el-radio> + <el-radio v-model="ifIncludeFire" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeFire"> + <el-row> + <el-col :span="8"> + <el-form-item label="动火级别:" prop="firelevel"> + <el-select v-model="taskBasicForm.firelevel" class="taskBasic_select"> + <el-option + v-for="item in levelList" + :key="item.id" + :label="item.name" + :value="item.id" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="动火方式:" prop="firetype"> + <el-select v-model="taskBasicForm.firetype" filterable class="taskBasic_select"> + <el-option + v-for="item in fireTypeList" + :key="item.id" + :value="item.text" + :label="item.text" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + </el-collapse> + </el-form> + <div align="center" style="padding-top: 20px" v-if="title === '新增' || title === '编辑' || title=== '施工单位确认' || title === '施工单位信息填写'|| title === '施工单位信息填写' || title === '复制'"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + <el-dialog :visible.sync="dialogVisible" :append-to-body="true"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> +</template> + +<script> + import { getUnitList } from '@/api/unitManage' + import Cookies from 'js-cookie' + import { addTask, updateTask } from '@/api/task' + import { dictionaryAllItems } from '@/api/dictionary' + + export default { + name: 'index', + props:['title'], + data(){ + return{ + type:'', + fileRoad:process.env.BASE_API + '/task/web/upload', + uploadForm:{ + name:'', + }, + header:{Authorization:''}, + taskBasicForm:{ + applicant: "", + applyunitname: "", + applyunitopinion: "", + applyunittime: "", + approverprofession: "", + approversupervisor: "", + area: "", + code: "", + completedconfirm: "", + completedname: "", + completedtime: "", + constructionname: "", + constructionopinion: "", + constructiontime: "", + constructionunit: "", + createdat: "", + createdby: "", + department: "", + director: "", + endtime: "", + enterprisename: "", + enterpriseopinion: "", + enterprisetime: "", + flag: 0, + hazard: [], + id: 0, + isdel: 0, + isholiday: null, + level:'', + modifiedat: "", + modifiedby: "", + othertask: "", + partdirector: "", + profession: "", + relevantname: "", + relevantopinion: "", + relevanttime: "", + resources: [ + ], + securityname: "", + securityopinion: "", + securitytime: "", + securitydep: "", + shiftleadername: "", + shiftleaderopinion: "", + shiftleadertime: "", + starttime: "", + status: 0, + supervisor: "", + taskAnalyses: [ + ], + taskEquipments: [ + ], + taskRisk: { + confirmat: "", + content: "", + createdat: "", + createdby: "", + director: "", + emergency: "", + environment: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + other: "", + preventive: "", + taskcode: "", + taskdirector: "" + }, + taskSecurities: [ + ], + taskWorkers: [ + ], + unit: "", + subTaskInfos:[], + type:'', + category:'', + firelevel:'', + checked:'', + spacecategory:'', + spacename:'', + spacemedium:'', + acibase:'', + hoistinglevel:'', + hoistingweight:'', + soildepth:'', + soilarea:'', + soilfile:[], + breakreason:'', + breakfile:[], + workheight:'', + heightlevel:'', + electricityarea:'', + voltage:'', + power:'', + pipename:'', + pipemedium:'', + pipetemperature:'', + pipepressure:'', + blindboardmaterial:'', + blindboardspecification:'', + blindboardnumber:'', + commander:'', + blindboardlocation:[], + firetype:'', + description:'', + isanalysis:'', + analysisarea:'', + analysismedium:'' + }, + activeNames:['0'], + companyList:[], + fireTypeList:[], + hazardList:[], + list:[{id:0,name:'否'},{id:1,name:'是'}], + levelList:[{id:2,name:'特级'},{id:1,name:'一级'},{id:0,name:'二级'},], + spaceCategoryList:[{id:0,name:'密闭设备:如船舱、贮罐、车载槽罐、反应塔(釜)、冷藏箱、压力容器、管道、烟道、锅炉等'},{id:1,name:'地下有限空间:如地下管道、地下室、地下仓库、地下工程、暗沟、隧道、涵洞、地坑、废井、地窖、污水池(井)、沼气池、化粪池、下水道等'},{id:2,name:'地上有限空间:如储藏室、酒糟池、发酵池、垃圾站、温室、冷库、粮仓、料仓等'},], + spaceNameList:[], + acibaseList:[{id:0,name:'酸腐蚀'},{id:1,name:'碱腐蚀'},{id:2,name:'其他腐蚀'},{id:3,name:'没有腐蚀'}], + taskBasicRules:{ + unit: [{ required: true, message: '申请单位不能为空', trigger: 'blur' }], + applicant: [{ required: true, message: '申请人不能为空', trigger: 'blur' }], + level: [{ required: true, message: '动火作业级别不能为空', trigger: 'change' }], + mode: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], + hazard: [{ required: true, message: '危害辨识不能为空', trigger: 'blur' }], + director: [{ required: true, message: '负责人不能为空', trigger: 'blur' }], + area: [{ required: true, message: '动火地点不能为空', trigger: 'blur' }], + constructionunit: [{ required: true, message: '施工部门不能为空', trigger: 'change' }], + starttime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }], + endtime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }], + spacecategory: [{ required: true, message: '受限空间分类不能为空', trigger: 'change' }], + spacename: [{ required: true, message: '受限空间名称不能为空', trigger: 'change' }], + spacemedium: [{ required: true, message: '受限空间介质名称不能为空', trigger: 'change' }], + acibase: [{ required: true, message: '是否酸碱腐蚀不能为空', trigger: 'change' }], + hoistinglevel: [{ required: true, message: '吊装重物等级不能为空', trigger: 'change' }], + hoistingweight: [{ required: true, message: '吊装重物质量不能为空', trigger: 'blur' }], + soildepth: [{ required: true, message: '动土作业深度不能为空', trigger: 'blur' }], + soilarea: [{ required: true, message: '动土作业面积不能为空', trigger: 'blur' }], + // soilfile: [{ required: true, message: '动土方案文件不能为空', trigger: 'blur' }], + breakreason: [{ required: true, message: '断路原因不能为空', trigger: 'blur' }], + // breakfile: [{ required: true, message: '断路地段示意图不能为空', trigger: 'blur' }], + heightlevel: [{ required: true, message: '作业等级不能为空', trigger: 'change' }], + workheight: [{ required: true, message: '作业高度不能为空', trigger: 'blur' }], + electricityarea: [{ required: true, message: '电压接入点不能为空', trigger: 'blur' }], + voltage: [{ required: true, message: '工作电压不能为空', trigger: 'blur' }], + power: [{ required: true, message: '用电设备及功率不能为空', trigger: 'blur' }], + pipename: [{ required: true, message: '设备管道名称不能为空', trigger: 'blur' }], + pipemedium: [{ required: true, message: '设备管道介质不能为空', trigger: 'blur' }], + pipetemperature: [{ required: true, message: '设备管道温度不能为空', trigger: 'blur' }], + pipepressure: [{ required: true, message: '设备管道压力不能为空', trigger: 'blur' }], + blindboardmaterial: [{ required: true, message: '盲板材质不能为空', trigger: 'blur' }], + blindboardspecification: [{ required: true, message: '盲板规格不能为空', trigger: 'blur' }], + blindboardnumber: [{ required: true, message: '盲板编号不能为空', trigger: 'blur' }], + // blindboardlocation: [{ required: true, message: '盲板位置图不能为空', trigger: 'blur' }], + firelevel: [{ required: true, message: '动火级别不能为空', trigger: 'blur' }], + firetype: [{ required: true, message: '动火类型不能为空', trigger: 'blur' }], + isholiday:[{ required: true, message: '是否节假日不能为空', trigger: 'change' }], + description:[{ required: true, message: '作业内容不能为空', trigger: 'blur' }], + isanalysis:[{ required: true, message: '是否需要气体检测不能为空', trigger: 'change' }], + analysisarea:[{ required: true, message: '分析地点不能为空', trigger: 'blur' }], + analysismedium:[{ required: true, message: '分析介质不能为空', trigger: 'blur' }] + }, + ifIncludeArea:null, + ifHoisting:null, + ifBuilding:null, + ifIncludeRoad:null, + ifIncludeHigh:null, + ifIncludeElectricity:null, + ifIncludePump:null, + ifIncludeFire:null, + dialogImageUrl:false, + dialogVisible:false, + disabled: false, + ifAnalysis:false, + } + }, + watch:{ + ifIncludeArea: { + handler(newName, oldName) { + if(newName === 1){ + this.ifAnalysis = true + this.taskBasicForm.isanalysis = 1 + }else{ + this.ifAnalysis = false + this.taskBasicForm.isanalysis = 0 + } + }, + immediate:true, + deep:true + }, + ifIncludeFire: { + handler(newName, oldName) { + if(newName === 1){ + this.ifAnalysis = true + this.taskBasicForm.isanalysis = 1 + }else{ + this.ifAnalysis = false + this.taskBasicForm.isanalysis = 0 + } + }, + immediate:true, + deep:true + } + }, + created(){ + this.getCompany() + this.getFireTypeList() + this.getHazardList() + }, + methods:{ + giveTaskBasic(){ + this.taskBasicForm = JSON.parse(JSON.stringify(this.taskBasicForm)) + }, + handlePictureCardPreview(file){ + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + showAnalysis(){ + if(this.taskBasicForm.isanalysis === 0){ + this.ifAnalysis = false + }else{ + this.ifAnalysis = true + } + }, + goNext(){ + if(this.title === '施工单位确认'){ + this.$emit('changeToConstructionConfirm') + }else{ + this.$refs["form"].validate((valid) =>{ + if(valid){ + if(this.type === 1){ + this.addTask() + }else if(this.type === 2){ + this.updateTask() + } + }else{ + this.$message({ + type:'warning', + message:'请完善基本信息' + }) + if(this.ifIncludeArea === true){ + + }else if(this.ifHoisting === true){ + + }else if(this.ifBuilding === true){ + + }else if(this.ifIncludeRoad === true){ + + }else if(this.ifIncludeHigh === true){ + + }else if(this.ifIncludeElectricity === true){ + + }else if(this.ifIncludePump === true){ + + }else if(this.ifIncludeFire === true){ + + } + } + }) + } + }, + async addTask(){ + if(this.taskBasicForm.soilfile.length === 0 && this.ifBuilding === 1){ + this.$message({ + type:'warning', + message:'请上传动图方案文件' + }) + }else if(this.taskBasicForm.breakfile.length === 0 && this.ifIncludeRoad === 1){ + this.$message({ + type:'warning', + message:'请上传短路地段示意图' + }) + }else if(this.taskBasicForm.blindboardlocation.length === 0 && this.ifIncludePump === 1){ + this.$message({ + type:'warning', + message:'请上传盲板位置图' + }) + }else{ + this.taskBasicForm.hazard = this.taskBasicForm.hazard.join('、') + let addForm = JSON.parse(JSON.stringify(this.taskBasicForm)) + let level = [] + addForm.subTaskInfos = [] + if(this.ifIncludeArea === 1){ + level.push(0) + addForm.subTaskInfos.push({id:'',taskcode:'',type:'受限空间作业',category:'',level:'',checked:1,spacecategory:this.taskBasicForm.spacecategory,spacename:this.taskBasicForm.spacename,spacemedium:this.taskBasicForm.spacemedium,acibase:this.taskBasicForm.acibase,hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + if(this.ifHoisting === 1){ + if(this.taskBasicForm.hoistinglevel === '一级吊装(质量>100吨)'){ + level.push(2) + }else if(this.taskBasicForm.hoistinglevel === '二级吊装(40吨<=质量<=100吨)'){ + level.push(1) + }else{ + level.push(0) + } + addForm.subTaskInfos.push({id:'',taskcode:'',type:'吊装作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:this.taskBasicForm.hoistinglevel,hoistingweight:this.taskBasicForm.hoistingweight,soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + if(this.ifBuilding === 1){ + level.push(1) + addForm.subTaskInfos.push({id:'',taskcode:'',type:'动土作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:'',hoistingweight:'',soildepth:this.taskBasicForm.soildepth,soilarea:this.taskBasicForm.soilarea,soilfile:this.taskBasicForm.soilfile,breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + if(this.ifIncludeRoad === 1){ + level.push(1) + addForm.subTaskInfos.push({id:'',taskcode:'',type:'断路作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:this.taskBasicForm.breakreason,breakfile:this.taskBasicForm.breakfile,heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + if(this.ifIncludeHigh === 1){ + if (this.taskBasicForm.heightlevel = '特级高处作业(高度≥30米)'){ + level.push(2) + }else if(this.taskBasicForm.heightlevel = '三级高处作业(15米≤高度<30米)' || this.taskBasicForm.heightlevel === '二级高处作业(5米≤高度<15米)'){ + level.push(1) + }else{ + level.push(0) + } + addForm.subTaskInfos.push({id:'',taskcode:'',type:'高处作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:this.taskBasicForm.heightlevel,workheight:this.taskBasicForm.workheight,electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + if(this.ifIncludeElectricity === 1){ + level.push(1) + addForm.subTaskInfos.push({id:'',taskcode:'',type:'临时用电作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:this.taskBasicForm.electricityarea,voltage:this.taskBasicForm.voltage,power:this.taskBasicForm.power,pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + if(this.ifIncludePump === 1){ + level.push(0) + addForm.subTaskInfos.push({id:'',taskcode:'',type:'盲板抽堵作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:this.taskBasicForm.pipename,pipemedium:this.taskBasicForm.pipemedium,pipetemperature:this.taskBasicForm.pipetemperature,pipepressure:this.taskBasicForm.pipepressure,blindboardmaterial:this.taskBasicForm.blindboardmaterial,blindboardspecification:this.taskBasicForm.blindboardspecification,blindboardnumber:this.taskBasicForm.blindboardnumber,commander:'',blindboardlocation:this.taskBasicForm.blindboardlocation,firetype:'',level:''}) + } + if(this.ifIncludeFire === 1){ + level.push(this.taskBasicForm.firelevel) + addForm.subTaskInfos.push({id:'',taskcode:'',type:'动火作业',category:'',level:'',checked:1,spacecategory:'',spacename:'',spacemedium:'',acibase:'',hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:this.taskBasicForm.firetype,level:this.taskBasicForm.firelevel}) + } + + let largeNum = 0 + for(let i in level){ + if(level[i] > largeNum){ + largeNum = level[i] + } + } + addForm.level = largeNum + + this.$delete(addForm,'type') + this.$delete(addForm,'category') + this.$delete(addForm,'firelevel') + this.$delete(addForm,'checked') + this.$delete(addForm,'spacecategory') + this.$delete(addForm,'spacename') + this.$delete(addForm,'spacemedium') + this.$delete(addForm,'acibase') + this.$delete(addForm,'hoistinglevel') + this.$delete(addForm,'hoistingweight') + this.$delete(addForm,'soildepth') + this.$delete(addForm,'soilarea') + this.$delete(addForm,'soilfile') + this.$delete(addForm,'breakreason') + this.$delete(addForm,'breakfile') + this.$delete(addForm,'workheight') + this.$delete(addForm,'heightlevel') + this.$delete(addForm,'electricityarea') + this.$delete(addForm,'voltage') + this.$delete(addForm,'power') + this.$delete(addForm,'pipename') + this.$delete(addForm,'pipemedium') + this.$delete(addForm,'pipetemperature') + this.$delete(addForm,'pipepressure') + this.$delete(addForm,'blindboardmaterial') + this.$delete(addForm,'blindboardspecification') + this.$delete(addForm,'blindboardnumber') + this.$delete(addForm,'commander') + this.$delete(addForm,'blindboardlocation') + this.$delete(addForm,'firetype') + + let res = await addTask(addForm) + if(res.data.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'基本信息新建成功', + title:'成功' + }) + this.$emit('changeCardToSafetyActionEdit',res.data.result) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + } + }, + async updateTask(){ + if(this.taskBasicForm.soilfile.length === 0 && this.ifBuilding === 1){ + this.$message({ + type:'warning', + message:'请上传动图方案文件' + }) + }else if(this.taskBasicForm.breakfile.length === 0 && this.ifIncludeRoad === 1){ + this.$message({ + type:'warning', + message:'请上传短路地段示意图' + }) + }else if(this.taskBasicForm.blindboardlocation.length === 0 && this.ifIncludePump === 1){ + this.$message({ + type:'warning', + message:'请上传盲板位置图' + }) + }else { + this.taskBasicForm.hazard = this.taskBasicForm.hazard.join('、') + let addForm = JSON.parse(JSON.stringify(this.taskBasicForm)) + let level = [] + if (this.ifIncludeArea === 1) { + level.push(0) + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '受限空间作业'){ + ifFirst = false + addForm.subTaskInfos[i].spacecategory = this.taskBasicForm.spacecategory + addForm.subTaskInfos[i].spacename = this.taskBasicForm.spacename + addForm.subTaskInfos[i].spacemedium = this.taskBasicForm.spacemedium + addForm.subTaskInfos[i].acibase = this.taskBasicForm.acibase + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({id:'',taskcode:'',type:'受限空间作业',category:'',level:'',checked:1,spacecategory:this.taskBasicForm.spacecategory,spacename:this.taskBasicForm.spacename,spacemedium:this.taskBasicForm.spacemedium,acibase:this.taskBasicForm.acibase,hoistinglevel:'',hoistingweight:'',soildepth:'',soilarea:'',soilfile:[],breakreason:'',breakfile:[],heightlevel:'',workheight:'',electricityarea:'',voltage:'',power:'',pipename:'',pipemedium:'',pipetemperature:'',pipepressure:'',blindboardmaterial:'',blindboardspecification:'',blindboardnumber:'',commander:'',blindboardlocation:[],firetype:'',level:''}) + } + + } + if (this.ifHoisting === 1) { + if (this.taskBasicForm.hoistinglevel === '一级吊装(质量>100吨)') { + level.push(2) + } else if (this.taskBasicForm.hoistinglevel === '二级吊装(40吨<=质量<=100吨)') { + level.push(1) + } else { + level.push(0) + } + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '吊装作业'){ + ifFirst = false + addForm.subTaskInfos[i].hoistinglevel = this.taskBasicForm.hoistinglevel + addForm.subTaskInfos[i].hoistingweight = this.taskBasicForm.hoistingweight + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '吊装作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: this.taskBasicForm.hoistinglevel, + hoistingweight: this.taskBasicForm.hoistingweight, + soildepth: '', + soilarea: '', + soilfile: [], + breakreason: '', + breakfile: [], + heightlevel: '', + workheight: '', + electricityarea: '', + voltage: '', + power: '', + pipename: '', + pipemedium: '', + pipetemperature: '', + pipepressure: '', + blindboardmaterial: '', + blindboardspecification: '', + blindboardnumber: '', + commander: '', + blindboardlocation: [], + firetype: '', + level: '' + }) + } + + } + if (this.ifBuilding === 1) { + level.push(1) + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '动土作业'){ + ifFirst = false + addForm.subTaskInfos[i].soildepth = this.taskBasicForm.soildepth + addForm.subTaskInfos[i].soilarea = this.taskBasicForm.soilarea + addForm.subTaskInfos[i].soilfile = this.taskBasicForm.soilfile + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '动土作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: '', + hoistingweight: '', + soildepth: this.taskBasicForm.soildepth, + soilarea: this.taskBasicForm.soilarea, + soilfile: this.taskBasicForm.soilfile, + breakreason: '', + breakfile: [], + heightlevel: '', + workheight: '', + electricityarea: '', + voltage: '', + power: '', + pipename: '', + pipemedium: '', + pipetemperature: '', + pipepressure: '', + blindboardmaterial: '', + blindboardspecification: '', + blindboardnumber: '', + commander: '', + blindboardlocation: [], + firetype: '', + level: '' + }) + } + } + if (this.ifIncludeRoad === 1) { + level.push(1) + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '断路作业'){ + ifFirst = false + addForm.subTaskInfos[i].breakreason = this.taskBasicForm.breakreason + addForm.subTaskInfos[i].breakfile = this.taskBasicForm.breakfile + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '断路作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: '', + hoistingweight: '', + soildepth: '', + soilarea: '', + soilfile: [], + breakreason: this.taskBasicForm.breakreason, + breakfile: this.taskBasicForm.breakfile, + heightlevel: '', + workheight: '', + electricityarea: '', + voltage: '', + power: '', + pipename: '', + pipemedium: '', + pipetemperature: '', + pipepressure: '', + blindboardmaterial: '', + blindboardspecification: '', + blindboardnumber: '', + commander: '', + blindboardlocation: [], + firetype: '', + level: '' + }) + } + + } + if (this.ifIncludeHigh === 1) { + if (this.taskBasicForm.heightlevel = '特级高处作业(高度≥30米)') { + level.push(2) + } else if (this.taskBasicForm.heightlevel = '三级高处作业(15米≤高度<30米)' || this.taskBasicForm.heightlevel === '二级高处作业(5米≤高度<15米)') { + level.push(1) + } else { + level.push(0) + } + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '高处作业'){ + ifFirst = false + addForm.subTaskInfos[i].breakreason = this.taskBasicForm.breakreason + addForm.subTaskInfos[i].breakfile = this.taskBasicForm.breakfile + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '高处作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: '', + hoistingweight: '', + soildepth: '', + soilarea: '', + soilfile: [], + breakreason: '', + breakfile: [], + heightlevel: this.taskBasicForm.heightlevel, + workheight: this.taskBasicForm.workheight, + electricityarea: '', + voltage: '', + power: '', + pipename: '', + pipemedium: '', + pipetemperature: '', + pipepressure: '', + blindboardmaterial: '', + blindboardspecification: '', + blindboardnumber: '', + commander: '', + blindboardlocation: [], + firetype: '', + level: '' + }) + } + + } + if (this.ifIncludeElectricity === 1) { + level.push(1) + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '临时用电作业'){ + ifFirst = false + addForm.subTaskInfos[i].electricityarea = this.taskBasicForm.electricityarea + addForm.subTaskInfos[i].voltage = this.taskBasicForm.voltage + addForm.subTaskInfos[i].power = this.taskBasicForm.power + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '临时用电作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: '', + hoistingweight: '', + soildepth: '', + soilarea: '', + soilfile: [], + breakreason: '', + breakfile: [], + heightlevel: '', + workheight: '', + electricityarea: this.taskBasicForm.electricityarea, + voltage: this.taskBasicForm.voltage, + power: this.taskBasicForm.power, + pipename: '', + pipemedium: '', + pipetemperature: '', + pipepressure: '', + blindboardmaterial: '', + blindboardspecification: '', + blindboardnumber: '', + commander: '', + blindboardlocation: [], + firetype: '', + level: '' + }) + } + + } + if (this.ifIncludePump === 1) { + level.push(0) + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '盲板抽堵作业'){ + ifFirst = false + addForm.subTaskInfos[i].pipename = this.taskBasicForm.pipename + addForm.subTaskInfos[i].pipemedium = this.taskBasicForm.pipemedium + addForm.subTaskInfos[i].pipetemperature = this.taskBasicForm.pipetemperature + addForm.subTaskInfos[i].pipepressure = this.taskBasicForm.pipepressure + addForm.subTaskInfos[i].blindboardmaterial = this.taskBasicForm.blindboardmaterial + addForm.subTaskInfos[i].blindboardspecification = this.taskBasicForm.blindboardspecification + addForm.subTaskInfos[i].blindboardlocation = this.taskBasicForm.blindboardlocation + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '盲板抽堵作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: '', + hoistingweight: '', + soildepth: '', + soilarea: '', + soilfile: [], + breakreason: '', + breakfile: [], + heightlevel: '', + workheight: '', + electricityarea: '', + voltage: '', + power: '', + pipename: this.taskBasicForm.pipename, + pipemedium: this.taskBasicForm.pipemedium, + pipetemperature: this.taskBasicForm.pipetemperature, + pipepressure: this.taskBasicForm.pipepressure, + blindboardmaterial: this.taskBasicForm.blindboardmaterial, + blindboardspecification: this.taskBasicForm.blindboardspecification, + blindboardnumber: this.taskBasicForm.blindboardnumber, + commander: '', + blindboardlocation: this.taskBasicForm.blindboardlocation, + firetype: '', + level: '' + }) + } + + } + if (this.ifIncludeFire === 1) { + level.push(this.taskBasicForm.firelevel) + let ifFirst = true + for(let i in addForm.subTaskInfos){ + if(addForm.subTaskInfos[i].type === '动火作业'){ + ifFirst = false + addForm.subTaskInfos[i].firetype = this.taskBasicForm.firetype + addForm.subTaskInfos[i].level = this.taskBasicForm.firelevel + } + } + if(ifFirst === true){ + addForm.subTaskInfos.push({ + id: '', + taskcode: '', + type: '动火作业', + category: '', + level: '', + checked: 1, + spacecategory: '', + spacename: '', + spacemedium: '', + acibase: '', + hoistinglevel: '', + hoistingweight: '', + soildepth: '', + soilarea: '', + soilfile: [], + breakreason: '', + breakfile: [], + heightlevel: '', + workheight: '', + electricityarea: '', + voltage: '', + power: '', + pipename: '', + pipemedium: '', + pipetemperature: '', + pipepressure: '', + blindboardmaterial: '', + blindboardspecification: '', + blindboardnumber: '', + commander: '', + blindboardlocation: [], + firetype: this.taskBasicForm.firetype, + level: this.taskBasicForm.firelevel + }) + } + + } + + let largeNum = 0 + for (let i in level) { + if (level[i] > largeNum) { + largeNum = level[i] + } + } + if(largeNum === 2){ + largeNum = 2 + }else{ + largeNum += 1 + } + addForm.level = largeNum + + this.$delete(addForm,'type') + this.$delete(addForm,'category') + this.$delete(addForm,'firelevel') + this.$delete(addForm,'checked') + this.$delete(addForm,'spacecategory') + this.$delete(addForm,'spacename') + this.$delete(addForm,'spacemedium') + this.$delete(addForm,'acibase') + this.$delete(addForm,'hoistinglevel') + this.$delete(addForm,'hoistingweight') + this.$delete(addForm,'soildepth') + this.$delete(addForm,'soilarea') + this.$delete(addForm,'soilfile') + this.$delete(addForm,'breakreason') + this.$delete(addForm,'breakfile') + this.$delete(addForm,'workheight') + this.$delete(addForm,'heightlevel') + this.$delete(addForm,'electricityarea') + this.$delete(addForm,'voltage') + this.$delete(addForm,'power') + this.$delete(addForm,'pipename') + this.$delete(addForm,'pipemedium') + this.$delete(addForm,'pipetemperature') + this.$delete(addForm,'pipepressure') + this.$delete(addForm,'blindboardmaterial') + this.$delete(addForm,'blindboardspecification') + this.$delete(addForm,'blindboardnumber') + this.$delete(addForm,'commander') + this.$delete(addForm,'blindboardlocation') + this.$delete(addForm,'firetype') + + let res = await updateTask(addForm) + if(res.data.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'基本信息编辑成功', + title:'成功' + }) + this.$emit('changeCardToSafetyActionEdit',addForm) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + } + }, + handleSpaceCategory(value){ + if(value === '密闭设备'){ + this.taskBasicForm.spacename = '' + this.spaceNameList = [{id:0,name:'如船舱'},{id:1,name:'贮罐'},{id:2,name:'车载槽罐'},{id:4,name:'反应塔(釜)'},{id:5,name:'冷藏箱'},{id:6,name:'压力容器'},{id:7,name:'管道'},{id:8,name:'烟道'},{id:9,name:'锅炉'},{id:10,name:'其他'}] + }else if(value === '地下有限空间'){ + this.taskBasicForm.spacename = '' + this.spaceNameList = [{id:0,name:'地下管道'},{id:1,name:'地下室'},{id:2,name:'地下仓库'},{id:4,name:'地下工程'},{id:5,name:'暗沟'},{id:6,name:'隧道'},{id:7,name:'涵洞'},{id:8,name:'地坑'},{id:9,name:'废井'},{id:10,name:'地窖'},{id:11,name:'污水池(井)'},{id:12,name:'沼气池'},{id:13,name:'化粪池'},{id:14,name:'下水道'},{id:15,name:'其他'}] + }else{ + this.taskBasicForm.spacename = '' + this.spaceNameList = [{id:0,name:'储藏室'},{id:1,name:'酒糟池'},{id:2,name:'发酵池'},{id:4,name:'垃圾站'},{id:5,name:'温室'},{id:6,name:'冷库'},{id:7,name:'粮仓'},{id:8,name:'料仓'},{id:9,name:'其他'}] + } + }, + resetFormRules(){ + this.$nextTick(() =>{ + this.$refs["form"].clearValidate() + }) + }, + async getCompany(){ + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + params['code'] = this.code + let res = await getUnitList(params) + if(res.data.code === '200'){ + this.companyList = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }, + async getFireTypeList(){ + const params = {} + params['dictionaryType'] = '动火方式' + let res = await dictionaryAllItems(params) + if (res.data.code === '200') { + this.fireTypeList = res.data.result + } else { + this.$message({ + type:'warning', + message:res.data.message + }) + } + }, + async getHazardList(){ + let params = {} + params['dictionaryType'] = '危害辨识' + let res = await dictionaryAllItems(params) + if(res.data.code === '200'){ + this.hazardList = res.data.result + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }, + handleChangeBuildingFile(file,fileList){ + this.uploadForm.name = file.name + this.header.Authorization = Cookies.get('token') + }, + onSoilFileSuccess(response){ + if(response.code === '200'){ + this.taskBasicForm.soilfile.push({url:process.env.IMG_API + response.result.path,name:response.result.name,fileurl:response.result.path}) + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + } + }, + handleChangeRoadFile(){ + this.header.Authorization = Cookies.get('token') + }, + onBreakFileSuccess(response){ + if(response.code === '200'){ + this.taskBasicForm.breakfile.push({url:process.env.IMG_API + response.result.path,name:response.result.name,fileurl:response.result.path}) + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + } + }, + handleChangePumpFile(){ + this.header.Authorization = Cookies.get('token') + }, + onPumpFileSuccess(response){ + if(response.code === '200'){ + this.taskBasicForm.blindboardlocation.push({url:process.env.IMG_API + response.result.path,name:response.result.name,fileurl:response.result.path}) + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + } + }, + handleFile(file){ + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleRemove(file,value) { + return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + switch (value) { + case 'one':this.taskBasicForm.soilfile.splice(this.taskBasicForm.soilfile.findIndex(item =>item.name === file.name),1); + break; + case 'two':this.taskBasicForm.breakfile.splice(this.taskBasicForm.breakfile.findIndex(item =>item.name === file.name),1); + break; + case 'three':this.taskBasicForm.blindboardlocation.splice(this.taskBasicForm.blindboardlocation.findIndex(item =>item.name === file.name),1); + break; + } + }) + }, + } + } +</script> + +<style scoped> +.taskBasic_title{ + font-weight: bolder; + font-size: large; + text-align: center; + margin-top: 24px; +} +/deep/.el-collapse-item__header{ + margi:0 auto; + width:100%; + font-weight: bolder; + font-size: large; + text-align: center; + padding-left: 45%; +} +.taskBasic_select{ + width: 100%; +} +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/components/taskCreate.vue b/src/views/specialWorkManage/specialWork/taskCreate/components/taskCreate.vue new file mode 100644 index 0000000..0215494 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/components/taskCreate.vue @@ -0,0 +1,1336 @@ +<template> + <div> + <el-dialog :title="title" :visible.sync="taskCreateDialog" :modal-append-to-body="false" :close-on-click-modal="false" width="70%"> + <el-tabs type="border-card" class="active" v-model="activeName"> + <el-tab-pane label="作业基本信息" name="taskBasic" v-if="ifHotFireBasic"> + <task-basic ref="taskBasic" :title="title" @changeCardToSafetyActionEdit="changeToSecond" @changeToConstructionConfirm="constructionConfirm"></task-basic> + </el-tab-pane> + <el-tab-pane label="安全措施" name="safetyAction" v-if="ifSafetyAction"> + <safety-action ref="safetyAction" :basicInformation="basicForm" :title="title" @changeToCardFile="changeToThird" @changeToConstructionConfirm="constructionConfirm" @confirmConstruction="confirmConstruction"></safety-action> + </el-tab-pane> + <el-tab-pane label="安全交底和风险告知确认卡" name="safetyAndRiskConfirm" v-if="ifSafetyAndRisk"> + <safety-and-risk-confirm ref="safetyAndRiskConfirm" :title="title" :basicInformation="basicForm" @changeToCardFile="changeToThird" @changeToConstructionConfirm="constructionConfirm"></safety-and-risk-confirm> + </el-tab-pane> + <el-tab-pane label="设备" name="equipment" v-if="ifSafetyAction"> + <equipment ref="equipment" :basicInformation="basicForm" :title="title" @changeToCardFile="changeToThird" @changeToConstructionConfirm="constructionConfirm" @confirmConstruction="confirmConstruction"></equipment> + </el-tab-pane> + <el-tab-pane label="作业人" name="fireMan" v-if="ifFireMan"> + <fire-man ref="fireMan" :basicInformation="basicForm" :title="title" @confirmConstruction="confirmConstruction"></fire-man> + </el-tab-pane> + <el-tab-pane label="文件" name="fileAndEquipment" v-if="ifFile"> + <file ref="fileAndEquipment" :basicInformation="basicForm" :title="title" @confirm="confirmFile" @changeToConstructionConfirm="constructionConfirm"></file> + </el-tab-pane> + <el-tab-pane label="文件" name="constructionFile" v-if="ifConstructionFile"> + <construction-file ref="constructionFile" :basicInformation="basicForm" :title="title" @changeToConstructionConfirm="constructionConfirm" @confirmConstruction="confirmConstruction"></construction-file> + </el-tab-pane> + <el-tab-pane label="文件" name="allFile" v-if="ifAllFile"> + <all-file ref="allFile" :basicInformation="basicForm" :title="title" @changeToConstructionConfirm="constructionConfirm" @confirmConstruction="confirmConstruction"></all-file> + </el-tab-pane> + </el-tabs> + <div align="center" style="padding-top: 20px" v-if="title === '动火部位审批' || title === '相关部门审批' || title=== '安全部门审批'"> + <el-button type="danger" @click="refuse">拒绝</el-button> + <el-button type="primary" @click="agree">同意</el-button> + </div> + <el-dialog :visible.sync="supervisorAndAnalystAgree" :modal-append-to-body="false" :close-on-click-modal="false" width="25%"> + <div align="center"> + <span>监火人:</span> + <el-input v-model="basicForm.analyst" style="width:200px"> + </el-input> + </div> + <div align="center" style="padding-top: 20px"> + <span>分析人:</span> + <el-input v-model="basicForm.approversupervisor" style="width:200px"> + </el-input> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="submitAgreeTaskByFireDepartment()">确定</el-button> + </div> + </div> + </el-dialog> + <el-dialog title="驳回意见" :visible.sync="supervisorAndAnalystRefuse" :modal-append-to-body="false" :close-on-click-modal="false" width="40%"> + <div align="center"> + <el-input type="textarea" :row="2" v-model="basicForm.applyunitopinion" style="width:400px"> + </el-input> + </div> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="submitRefuseTaskByFireDepartment()">确定</el-button> + </div> + </el-dialog> + <el-dialog title="驳回意见" :visible.sync="relevantRefuse" :modal-append-to-body="false" :close-on-click-modal="false" width="40%"> + <div align="center"> + <el-input type="textarea" :row="2" v-model="basicForm.relevantopinion" style="width:400px"> + </el-input> + </div> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="submitRefuseTaskByFireDepartment()">确定</el-button> + </div> + </el-dialog> + <el-dialog title="驳回意见" :visible.sync="securityRefuse" :modal-append-to-body="false" :close-on-click-modal="false" width="40%"> + <div align="center"> + <el-input type="textarea" :row="2" v-model="basicForm.securityopinion" style="width:400px"> + </el-input> + </div> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="submitRefuseTaskByFireDepartment()">确定</el-button> + </div> + </el-dialog> + </el-dialog> + </div> +</template> + +<script> +import allFile from './file/allFire' +import constructionFile from './file/constructionFile' +import file from './file/index' +import fireMan from './fireMan/index' +import equipment from './equipment/index' +import safetyAndRiskConfirm from './safetyAndRiskConfirm/index' +import safetyAction from './safetyAction/index' +import taskBasic from './taskBasic/index' +import { + addTaskSecond, + involveReview, partReview, + securityReview, + submitConstruction, + updateTaskSecond +} from '../../../../../api/task' +import { parseError } from '../../../../../utils/messageDialog' +export default { + name: 'taskCreate', + data(){ + return{ + taskCreateDialog:false, + activeName:'taskBasic', + title:'', + basicForm:{}, + constructionForm:{}, + ifHotFireBasic:false, + ifSafetyAction:false, + ifSafetyAndRisk:false, + ifFireMan:false, + ifFile:false, + ifConstructionFile:false, + ifAllFile:false, + supervisorAndAnalystAgree:false, + supervisorAndAnalystRefuse:false, + relevantRefuse:false, + securityRefuse:false, + } + }, + components:{ + taskBasic, + safetyAction, + safetyAndRiskConfirm, + equipment, + fireMan, + file, + constructionFile, + allFile + }, + methods:{ + openTaskInfo(value,title){ + this.title = title + this.taskCreateDialog = true + this.activeName = 'taskBasic' + if(title === '新增'){ + this.ifHotFireBasic = true + this.ifSafetyAction = false + this.ifSafetyAndRisk = false + this.ifFireMan = false + this.ifFile = false + this.ifAllFile = false + this.ifConstructionFile = false + setTimeout(()=>{ + this.$refs.taskBasic.type = 1 + this.$refs.taskBasic.activeNames = ['0'] + this.$refs.taskBasic.taskBasicForm = { + unit:sessionStorage.getItem('company'), + department:sessionStorage.getItem('department'), + applicant:sessionStorage.getItem('realname'), + applyunitname: "", + applyunitopinion: "", + applyunittime: "", + approverprofession: "", + approversupervisor: "", + area: "", + code: "", + completedconfirm: "", + completedname: "", + completedtime: "", + constructionname: "", + constructionopinion: "", + constructiontime: "", + constructionunit: "", + createdat: "", + createdby: "", + director: "", + endtime: "", + enterprisename: "", + enterpriseopinion: "", + enterprisetime: "", + flag: 0, + hazard: [], + id: 0, + isdel: 0, + isholiday: null, + level:'', + modifiedat: "", + modifiedby: "", + othertask: "", + partdirector: "", + profession: "", + relevantname: "", + relevantopinion: "", + relevanttime: "", + resources: [ + ], + securityname: "", + securityopinion: "", + securitytime: "", + securitydep: "", + shiftleadername: "", + shiftleaderopinion: "", + shiftleadertime: "", + starttime: "", + status: 0, + supervisor: "", + taskAnalyses: [ + ], + taskEquipments: [ + ], + taskRisk: { + confirmat: "", + content: "", + createdat: "", + createdby: "", + director: "", + emergency: "", + environment: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + other: "", + preventive: "", + taskcode: "", + taskdirector: "" + }, + taskSecurities: [ + ], + taskWorkers: [ + ], + subTaskInfos:[], + type:'', + category:'', + firelevel:'', + checked:'', + spacecategory:'', + spacename:'', + spacemedium:'', + acibase:'', + hoistinglevel:'', + hoistingweight:'', + soildepth:'', + soilarea:'', + soilfile:[], + breakreason:'', + breakfile:[], + workheight:'', + heightlevel:'', + electricityarea:'', + voltage:'', + power:'', + pipename:'', + pipemedium:'', + pipetemperature:'', + pipepressure:'', + blindboardmaterial:'', + blindboardspecification:'', + blindboardnumber:'', + commander:'', + blindboardlocation:[], + firetype:'', + description:'', + isanalysis:'', + analysisarea:'', + analysismedium:'' + } + this.$refs.taskBasic.ifIncludeArea = null + this.$refs.taskBasic.ifHoisting = null + this.$refs.taskBasic.ifBuliding = null + this.$refs.taskBasic.ifIncludeRoad = null + this.$refs.taskBasic.ifIncludeHigh = null + this.$refs.taskBasic.ifIncludeElectricity = null + this.$refs.taskBasic.ifIncludePump = null + this.$refs.taskBasic.ifIncludeFire = null + this.$refs.taskBasic.resetFormRules() + }) + } + else if(title === '编辑'){ + this.ifSafetyAction = false + this.ifSafetyAndRisk = false + this.ifFireMan = false + this.ifFile = false + this.ifConstructionFile = false + this.ifAllFile = false + this.ifHotFireBasic = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=>{ + this.$refs.taskBasic.type = 2 + this.$refs.taskBasic.resetFormRules() + this.$refs.taskBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + this.$refs.taskBasic.taskBasicForm.hazard = this.$refs.taskBasic.taskBasicForm.hazard.split('、') + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.taskBasic.taskBasicForm.type = '' + this.$refs.taskBasic.taskBasicForm.category = '' + this.$refs.taskBasic.taskBasicForm.firelevel = '' + this.$refs.taskBasic.taskBasicForm.checked = '' + this.$refs.taskBasic.taskBasicForm.spacecategory = '' + this.$refs.taskBasic.taskBasicForm.spacename = '' + this.$refs.taskBasic.taskBasicForm.spacemedium = '' + this.$refs.taskBasic.taskBasicForm.acibase = '' + this.$refs.taskBasic.taskBasicForm.hoistinglevel = '' + this.$refs.taskBasic.taskBasicForm.hoistingweight = '' + this.$refs.taskBasic.taskBasicForm.soildepth = '' + this.$refs.taskBasic.taskBasicForm.soilarea = '' + this.$refs.taskBasic.taskBasicForm.soilfile = [] + this.$refs.taskBasic.taskBasicForm.breakreason = '' + this.$refs.taskBasic.taskBasicForm.breakfile = [] + this.$refs.taskBasic.taskBasicForm.workheight = '' + this.$refs.taskBasic.taskBasicForm.heightlevel = '' + this.$refs.taskBasic.taskBasicForm.electricityarea = '' + this.$refs.taskBasic.taskBasicForm.voltage = '' + this.$refs.taskBasic.taskBasicForm.power = '' + this.$refs.taskBasic.taskBasicForm.pipename = '' + this.$refs.taskBasic.taskBasicForm.pipemedium = '' + this.$refs.taskBasic.taskBasicForm.pipetemperature = '' + this.$refs.taskBasic.taskBasicForm.pipepressure = '' + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.taskBasic.taskBasicForm.blindboardspecification = '' + this.$refs.taskBasic.taskBasicForm.blindboardnumber = '' + this.$refs.taskBasic.taskBasicForm.commander = '' + this.$refs.taskBasic.taskBasicForm.blindboardlocation = [] + this.$refs.taskBasic.taskBasicForm.firetype = '' + for(let i in form){ + if(form[i].type === '受限空间作业'){ + this.$refs.taskBasic.activeNames.push('1') + this.$refs.taskBasic.ifIncludeArea = 1 + this.$refs.taskBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.taskBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.taskBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.taskBasic.taskBasicForm.acibase = form[i].acibase + } + else if(form[i].type === '吊装作业'){ + this.$refs.taskBasic.activeNames.push('2') + this.$refs.taskBasic.ifHoisting = 1 + this.$refs.taskBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.taskBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } + else if(form[i].type === '动土作业'){ + this.$refs.taskBasic.activeNames.push('3') + this.$refs.taskBasic.ifBuilding = 1 + this.$refs.taskBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.taskBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.taskBasic.taskBasicForm.soilfile = form[i].soilfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '断路作业'){ + this.$refs.taskBasic.activeNames.push('4') + this.$refs.taskBasic.ifIncludeRoad = 1 + this.$refs.taskBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.taskBasic.taskBasicForm.breakfile = form[i].breakfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '高处作业'){ + this.$refs.taskBasic.activeNames.push('5') + this.$refs.taskBasic.ifIncludeHigh = 1 + this.$refs.taskBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.taskBasic.taskBasicForm.workheight = form[i].workheight + } + else if(form[i].type === '临时用电作业'){ + this.$refs.taskBasic.activeNames.push('6') + this.$refs.taskBasic.ifIncludeElectricity = 1 + this.$refs.taskBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.taskBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.taskBasic.taskBasicForm.power = form[i].power + } + else if(form[i].type === '盲板抽堵作业'){ + this.$refs.taskBasic.activeNames.push('7') + this.$refs.taskBasic.ifIncludePump = 1 + this.$refs.taskBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.taskBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.taskBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.taskBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.taskBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.taskBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.taskBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else{ + this.$refs.taskBasic.activeNames.push('8') + this.$refs.taskBasic.ifIncludeFire = 1 + this.$refs.taskBasic.taskBasicForm.firelevel = form[i].level + this.$refs.taskBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.taskBasic.giveTaskBasic(this.$refs.taskBasic.taskBasicForm) + }) + } + else if(title === '复制'){ + this.ifSafetyAction = false + this.ifSafetyAndRisk = false + this.ifFireMan = false + this.ifFile = false + this.ifConstructionFile = false + this.ifAllFile = false + this.ifHotFireBasic = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=>{ + this.$refs.taskBasic.type = 1 + this.$refs.taskBasic.resetFormRules() + this.$refs.taskBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + this.$refs.taskBasic.taskBasicForm.hazard = this.$refs.taskBasic.taskBasicForm.hazard.split('、') + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.taskBasic.taskBasicForm.type = '' + this.$refs.taskBasic.taskBasicForm.category = '' + this.$refs.taskBasic.taskBasicForm.firelevel = '' + this.$refs.taskBasic.taskBasicForm.checked = '' + this.$refs.taskBasic.taskBasicForm.spacecategory = '' + this.$refs.taskBasic.taskBasicForm.spacename = '' + this.$refs.taskBasic.taskBasicForm.spacemedium = '' + this.$refs.taskBasic.taskBasicForm.acibase = '' + this.$refs.taskBasic.taskBasicForm.hoistinglevel = '' + this.$refs.taskBasic.taskBasicForm.hoistingweight = '' + this.$refs.taskBasic.taskBasicForm.soildepth = '' + this.$refs.taskBasic.taskBasicForm.soilarea = '' + this.$refs.taskBasic.taskBasicForm.soilfile = [] + this.$refs.taskBasic.taskBasicForm.breakreason = '' + this.$refs.taskBasic.taskBasicForm.breakfile = [] + this.$refs.taskBasic.taskBasicForm.workheight = '' + this.$refs.taskBasic.taskBasicForm.heightlevel = '' + this.$refs.taskBasic.taskBasicForm.electricityarea = '' + this.$refs.taskBasic.taskBasicForm.voltage = '' + this.$refs.taskBasic.taskBasicForm.power = '' + this.$refs.taskBasic.taskBasicForm.pipename = '' + this.$refs.taskBasic.taskBasicForm.pipemedium = '' + this.$refs.taskBasic.taskBasicForm.pipetemperature = '' + this.$refs.taskBasic.taskBasicForm.pipepressure = '' + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.taskBasic.taskBasicForm.blindboardspecification = '' + this.$refs.taskBasic.taskBasicForm.blindboardnumber = '' + this.$refs.taskBasic.taskBasicForm.commander = '' + this.$refs.taskBasic.taskBasicForm.blindboardlocation = [] + this.$refs.taskBasic.taskBasicForm.firetype = '' + for(let i in form){ + if(form[i].type === '受限空间作业'){ + this.$refs.taskBasic.activeNames.push('1') + this.$refs.taskBasic.ifIncludeArea = 1 + this.$refs.taskBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.taskBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.taskBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.taskBasic.taskBasicForm.acibase = form[i].acibase + } + else if(form[i].type === '吊装作业'){ + this.$refs.taskBasic.activeNames.push('2') + this.$refs.taskBasic.ifHoisting = 1 + this.$refs.taskBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.taskBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } + else if(form[i].type === '动土作业'){ + this.$refs.taskBasic.activeNames.push('3') + this.$refs.taskBasic.ifBuilding = 1 + this.$refs.taskBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.taskBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.taskBasic.taskBasicForm.soilfile = form[i].soilfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '断路作业'){ + this.$refs.taskBasic.activeNames.push('4') + this.$refs.taskBasic.ifIncludeRoad = 1 + this.$refs.taskBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.taskBasic.taskBasicForm.breakfile = form[i].breakfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '高处作业'){ + this.$refs.taskBasic.activeNames.push('5') + this.$refs.taskBasic.ifIncludeHigh = 1 + this.$refs.taskBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.taskBasic.taskBasicForm.workheight = form[i].workheight + } + else if(form[i].type === '临时用电作业'){ + this.$refs.taskBasic.activeNames.push('6') + this.$refs.taskBasic.ifIncludeElectricity = 1 + this.$refs.taskBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.taskBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.taskBasic.taskBasicForm.power = form[i].power + } + else if(form[i].type === '盲板抽堵作业'){ + this.$refs.taskBasic.activeNames.push('7') + this.$refs.taskBasic.ifIncludePump = 1 + this.$refs.taskBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.taskBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.taskBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.taskBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.taskBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.taskBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.taskBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else{ + this.$refs.taskBasic.activeNames.push('8') + this.$refs.taskBasic.ifIncludeFire = 1 + this.$refs.taskBasic.taskBasicForm.firelevel = form[i].level + this.$refs.taskBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.taskBasic.giveTaskBasic(this.$refs.taskBasic.taskBasicForm) + }) + } + else if(title === '施工单位确认'){ + this.title = '施工单位确认' + this.ifHotFireBasic = true + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.ifFireMan = false + this.ifFile = false + this.ifConstructionFile = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=>{ + this.$refs.taskBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + this.$refs.taskBasic.taskBasicForm.hazard = this.$refs.taskBasic.taskBasicForm.hazard.split(',') + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.taskBasic.taskBasicForm.type = '' + this.$refs.taskBasic.taskBasicForm.category = '' + this.$refs.taskBasic.taskBasicForm.firelevel = '' + this.$refs.taskBasic.taskBasicForm.checked = '' + this.$refs.taskBasic.taskBasicForm.spacecategory = '' + this.$refs.taskBasic.taskBasicForm.spacename = '' + this.$refs.taskBasic.taskBasicForm.spacemedium = '' + this.$refs.taskBasic.taskBasicForm.acibase = '' + this.$refs.taskBasic.taskBasicForm.hoistinglevel = '' + this.$refs.taskBasic.taskBasicForm.hoistingweight = '' + this.$refs.taskBasic.taskBasicForm.soildepth = '' + this.$refs.taskBasic.taskBasicForm.soilarea = '' + this.$refs.taskBasic.taskBasicForm.soilfile = [] + this.$refs.taskBasic.taskBasicForm.breakreason = '' + this.$refs.taskBasic.taskBasicForm.breakfile = [] + this.$refs.taskBasic.taskBasicForm.workheight = '' + this.$refs.taskBasic.taskBasicForm.heightlevel = '' + this.$refs.taskBasic.taskBasicForm.electricityarea = '' + this.$refs.taskBasic.taskBasicForm.voltage = '' + this.$refs.taskBasic.taskBasicForm.power = '' + this.$refs.taskBasic.taskBasicForm.pipename = '' + this.$refs.taskBasic.taskBasicForm.pipemedium = '' + this.$refs.taskBasic.taskBasicForm.pipetemperature = '' + this.$refs.taskBasic.taskBasicForm.pipepressure = '' + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.taskBasic.taskBasicForm.blindboardspecification = '' + this.$refs.taskBasic.taskBasicForm.blindboardnumber = '' + this.$refs.taskBasic.taskBasicForm.commander = '' + this.$refs.taskBasic.taskBasicForm.blindboardlocation = [] + this.$refs.taskBasic.taskBasicForm.firetype = '' + for(let i in form){ + if(form[i].type === '受限空间作业'){ + this.$refs.taskBasic.activeNames.push('1') + this.$refs.taskBasic.ifIncludeArea = 1 + this.$refs.taskBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.taskBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.taskBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.taskBasic.taskBasicForm.acibase = form[i].acibase + } + else if(form[i].type === '吊装作业'){ + this.$refs.taskBasic.activeNames.push('2') + this.$refs.taskBasic.ifHoisting = 1 + this.$refs.taskBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.taskBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } + else if(form[i].type === '动土作业'){ + this.$refs.taskBasic.activeNames.push('3') + this.$refs.taskBasic.ifBuilding = 1 + this.$refs.taskBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.taskBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.taskBasic.taskBasicForm.soilfile = form[i].soilfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '断路作业'){ + this.$refs.taskBasic.activeNames.push('4') + this.$refs.taskBasic.ifIncludeRoad = 1 + this.$refs.taskBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.taskBasic.taskBasicForm.breakfile = form[i].breakfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '高处作业'){ + this.$refs.taskBasic.activeNames.push('5') + this.$refs.taskBasic.ifIncludeHigh = 1 + this.$refs.taskBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.taskBasic.taskBasicForm.workheight = form[i].workheight + } + else if(form[i].type === '临时用电作业'){ + this.$refs.taskBasic.activeNames.push('6') + this.$refs.taskBasic.ifIncludeElectricity = 1 + this.$refs.taskBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.taskBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.taskBasic.taskBasicForm.power = form[i].power + } + else if(form[i].type === '盲板抽堵作业'){ + this.$refs.taskBasic.activeNames.push('7') + this.$refs.taskBasic.ifIncludePump = 1 + this.$refs.taskBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.taskBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.taskBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.taskBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.taskBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.taskBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.taskBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else{ + this.$refs.taskBasic.activeNames.push('8') + this.$refs.taskBasic.ifIncludeFire = 1 + this.$refs.taskBasic.taskBasicForm.firelevel = form[i].level + this.$refs.taskBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.safetyAction.tasksecurity = JSON.parse(JSON.stringify(value)).taskSecurities + this.$refs.safetyAndRiskConfirm.taskRiskForm = JSON.parse(JSON.stringify(value)).taskRisk + this.$refs.equipment.equipmentData = JSON.parse(JSON.stringify(value)).taskEquipments + this.$refs.constructionFile.ifCompany = true + this.$refs.constructionFile.ifConstruction = false + this.$refs.constructionFile.getFileList() + this.$refs.taskBasic.resetFormRules() + }) + } + else if(title === '动火部位审批'){ + this.ifHotFireBasic = true + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.ifFireMan = true + this.ifAllFile = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=>{ + this.$refs.taskBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.taskBasic.taskBasicForm.type = '' + this.$refs.taskBasic.taskBasicForm.category = '' + this.$refs.taskBasic.taskBasicForm.firelevel = '' + this.$refs.taskBasic.taskBasicForm.checked = '' + this.$refs.taskBasic.taskBasicForm.spacecategory = '' + this.$refs.taskBasic.taskBasicForm.spacename = '' + this.$refs.taskBasic.taskBasicForm.spacemedium = '' + this.$refs.taskBasic.taskBasicForm.acibase = '' + this.$refs.taskBasic.taskBasicForm.hoistinglevel = '' + this.$refs.taskBasic.taskBasicForm.hoistingweight = '' + this.$refs.taskBasic.taskBasicForm.soildepth = '' + this.$refs.taskBasic.taskBasicForm.soilarea = '' + this.$refs.taskBasic.taskBasicForm.soilfile = [] + this.$refs.taskBasic.taskBasicForm.breakreason = '' + this.$refs.taskBasic.taskBasicForm.breakfile = [] + this.$refs.taskBasic.taskBasicForm.workheight = '' + this.$refs.taskBasic.taskBasicForm.heightlevel = '' + this.$refs.taskBasic.taskBasicForm.electricityarea = '' + this.$refs.taskBasic.taskBasicForm.voltage = '' + this.$refs.taskBasic.taskBasicForm.power = '' + this.$refs.taskBasic.taskBasicForm.pipename = '' + this.$refs.taskBasic.taskBasicForm.pipemedium = '' + this.$refs.taskBasic.taskBasicForm.pipetemperature = '' + this.$refs.taskBasic.taskBasicForm.pipepressure = '' + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.taskBasic.taskBasicForm.blindboardspecification = '' + this.$refs.taskBasic.taskBasicForm.blindboardnumber = '' + this.$refs.taskBasic.taskBasicForm.commander = '' + this.$refs.taskBasic.taskBasicForm.blindboardlocation = [] + this.$refs.taskBasic.taskBasicForm.firetype = '' + for(let i in form){ + if(form[i].type === '受限空间作业'){ + this.$refs.taskBasic.activeNames.push('1') + this.$refs.taskBasic.ifIncludeArea = 1 + this.$refs.taskBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.taskBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.taskBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.taskBasic.taskBasicForm.acibase = form[i].acibase + } + else if(form[i].type === '吊装作业'){ + this.$refs.taskBasic.activeNames.push('2') + this.$refs.taskBasic.ifHoisting = 1 + this.$refs.taskBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.taskBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } + else if(form[i].type === '动土作业'){ + this.$refs.taskBasic.activeNames.push('3') + this.$refs.taskBasic.ifBuilding = 1 + this.$refs.taskBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.taskBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.taskBasic.taskBasicForm.soilfile = form[i].soilfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '断路作业'){ + this.$refs.taskBasic.activeNames.push('4') + this.$refs.taskBasic.ifIncludeRoad = 1 + this.$refs.taskBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.taskBasic.taskBasicForm.breakfile = form[i].breakfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '高处作业'){ + this.$refs.taskBasic.activeNames.push('5') + this.$refs.taskBasic.ifIncludeHigh = 1 + this.$refs.taskBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.taskBasic.taskBasicForm.workheight = form[i].workheight + } + else if(form[i].type === '临时用电作业'){ + this.$refs.taskBasic.activeNames.push('6') + this.$refs.taskBasic.ifIncludeElectricity = 1 + this.$refs.taskBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.taskBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.taskBasic.taskBasicForm.power = form[i].power + } + else if(form[i].type === '盲板抽堵作业'){ + this.$refs.taskBasic.activeNames.push('7') + this.$refs.taskBasic.ifIncludePump = 1 + this.$refs.taskBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.taskBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.taskBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.taskBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.taskBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.taskBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.taskBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else{ + this.$refs.taskBasic.activeNames.push('8') + this.$refs.taskBasic.ifIncludeFire = 1 + this.$refs.taskBasic.taskBasicForm.firelevel = form[i].level + this.$refs.taskBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.safetyAction.tasksecurity = JSON.parse(JSON.stringify(value)).taskSecurities + this.$refs.safetyAndRiskConfirm.taskRiskForm = JSON.parse(JSON.stringify(value)).taskRisk + this.$refs.equipment.equipmentData = JSON.parse(JSON.stringify(value)).taskEquipments + this.$refs.fireMan.taskWorkers = JSON.parse(JSON.stringify(value)).taskWorkers + this.$refs.taskBasic.resetFormRules() + }) + } + else if(title === '相关部门审批'){ + this.ifHotFireBasic = true + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.ifFireMan = true + this.ifAllFile = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=>{ + this.$refs.taskBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.taskBasic.taskBasicForm.type = '' + this.$refs.taskBasic.taskBasicForm.category = '' + this.$refs.taskBasic.taskBasicForm.firelevel = '' + this.$refs.taskBasic.taskBasicForm.checked = '' + this.$refs.taskBasic.taskBasicForm.spacecategory = '' + this.$refs.taskBasic.taskBasicForm.spacename = '' + this.$refs.taskBasic.taskBasicForm.spacemedium = '' + this.$refs.taskBasic.taskBasicForm.acibase = '' + this.$refs.taskBasic.taskBasicForm.hoistinglevel = '' + this.$refs.taskBasic.taskBasicForm.hoistingweight = '' + this.$refs.taskBasic.taskBasicForm.soildepth = '' + this.$refs.taskBasic.taskBasicForm.soilarea = '' + this.$refs.taskBasic.taskBasicForm.soilfile = [] + this.$refs.taskBasic.taskBasicForm.breakreason = '' + this.$refs.taskBasic.taskBasicForm.breakfile = [] + this.$refs.taskBasic.taskBasicForm.workheight = '' + this.$refs.taskBasic.taskBasicForm.heightlevel = '' + this.$refs.taskBasic.taskBasicForm.electricityarea = '' + this.$refs.taskBasic.taskBasicForm.voltage = '' + this.$refs.taskBasic.taskBasicForm.power = '' + this.$refs.taskBasic.taskBasicForm.pipename = '' + this.$refs.taskBasic.taskBasicForm.pipemedium = '' + this.$refs.taskBasic.taskBasicForm.pipetemperature = '' + this.$refs.taskBasic.taskBasicForm.pipepressure = '' + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.taskBasic.taskBasicForm.blindboardspecification = '' + this.$refs.taskBasic.taskBasicForm.blindboardnumber = '' + this.$refs.taskBasic.taskBasicForm.commander = '' + this.$refs.taskBasic.taskBasicForm.blindboardlocation = [] + this.$refs.taskBasic.taskBasicForm.firetype = '' + for(let i in form){ + if(form[i].type === '受限空间作业'){ + this.$refs.taskBasic.activeNames.push('1') + this.$refs.taskBasic.ifIncludeArea = 1 + this.$refs.taskBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.taskBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.taskBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.taskBasic.taskBasicForm.acibase = form[i].acibase + } + else if(form[i].type === '吊装作业'){ + this.$refs.taskBasic.activeNames.push('2') + this.$refs.taskBasic.ifHoisting = 1 + this.$refs.taskBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.taskBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } + else if(form[i].type === '动土作业'){ + this.$refs.taskBasic.activeNames.push('3') + this.$refs.taskBasic.ifBuilding = 1 + this.$refs.taskBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.taskBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.taskBasic.taskBasicForm.soilfile = form[i].soilfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '断路作业'){ + this.$refs.taskBasic.activeNames.push('4') + this.$refs.taskBasic.ifIncludeRoad = 1 + this.$refs.taskBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.taskBasic.taskBasicForm.breakfile = form[i].breakfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '高处作业'){ + this.$refs.taskBasic.activeNames.push('5') + this.$refs.taskBasic.ifIncludeHigh = 1 + this.$refs.taskBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.taskBasic.taskBasicForm.workheight = form[i].workheight + } + else if(form[i].type === '临时用电作业'){ + this.$refs.taskBasic.activeNames.push('6') + this.$refs.taskBasic.ifIncludeElectricity = 1 + this.$refs.taskBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.taskBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.taskBasic.taskBasicForm.power = form[i].power + } + else if(form[i].type === '盲板抽堵作业'){ + this.$refs.taskBasic.activeNames.push('7') + this.$refs.taskBasic.ifIncludePump = 1 + this.$refs.taskBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.taskBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.taskBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.taskBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.taskBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.taskBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.taskBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else{ + this.$refs.taskBasic.activeNames.push('8') + this.$refs.taskBasic.ifIncludeFire = 1 + this.$refs.taskBasic.taskBasicForm.firelevel = form[i].level + this.$refs.taskBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.safetyAction.tasksecurity = JSON.parse(JSON.stringify(value)).taskSecurities + this.$refs.safetyAndRiskConfirm.taskRiskForm = JSON.parse(JSON.stringify(value)).taskRisk + this.$refs.equipment.equipmentData = JSON.parse(JSON.stringify(value)).taskEquipments + this.$refs.fireMan.taskWorkers = JSON.parse(JSON.stringify(value)).taskWorkers + this.$refs.taskBasic.resetFormRules() + }) + } + else if(title === '安全部门审批'){ + this.ifHotFireBasic = true + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.ifFireMan = true + this.ifAllFile = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=>{ + this.$refs.taskBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.taskBasic.taskBasicForm.type = '' + this.$refs.taskBasic.taskBasicForm.category = '' + this.$refs.taskBasic.taskBasicForm.firelevel = '' + this.$refs.taskBasic.taskBasicForm.checked = '' + this.$refs.taskBasic.taskBasicForm.spacecategory = '' + this.$refs.taskBasic.taskBasicForm.spacename = '' + this.$refs.taskBasic.taskBasicForm.spacemedium = '' + this.$refs.taskBasic.taskBasicForm.acibase = '' + this.$refs.taskBasic.taskBasicForm.hoistinglevel = '' + this.$refs.taskBasic.taskBasicForm.hoistingweight = '' + this.$refs.taskBasic.taskBasicForm.soildepth = '' + this.$refs.taskBasic.taskBasicForm.soilarea = '' + this.$refs.taskBasic.taskBasicForm.soilfile = [] + this.$refs.taskBasic.taskBasicForm.breakreason = '' + this.$refs.taskBasic.taskBasicForm.breakfile = [] + this.$refs.taskBasic.taskBasicForm.workheight = '' + this.$refs.taskBasic.taskBasicForm.heightlevel = '' + this.$refs.taskBasic.taskBasicForm.electricityarea = '' + this.$refs.taskBasic.taskBasicForm.voltage = '' + this.$refs.taskBasic.taskBasicForm.power = '' + this.$refs.taskBasic.taskBasicForm.pipename = '' + this.$refs.taskBasic.taskBasicForm.pipemedium = '' + this.$refs.taskBasic.taskBasicForm.pipetemperature = '' + this.$refs.taskBasic.taskBasicForm.pipepressure = '' + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.taskBasic.taskBasicForm.blindboardspecification = '' + this.$refs.taskBasic.taskBasicForm.blindboardnumber = '' + this.$refs.taskBasic.taskBasicForm.commander = '' + this.$refs.taskBasic.taskBasicForm.blindboardlocation = [] + this.$refs.taskBasic.taskBasicForm.firetype = '' + for(let i in form){ + if(form[i].type === '受限空间作业'){ + this.$refs.taskBasic.activeNames.push('1') + this.$refs.taskBasic.ifIncludeArea = 1 + this.$refs.taskBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.taskBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.taskBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.taskBasic.taskBasicForm.acibase = form[i].acibase + } + else if(form[i].type === '吊装作业'){ + this.$refs.taskBasic.activeNames.push('2') + this.$refs.taskBasic.ifHoisting = 1 + this.$refs.taskBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.taskBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } + else if(form[i].type === '动土作业'){ + this.$refs.taskBasic.activeNames.push('3') + this.$refs.taskBasic.ifBuilding = 1 + this.$refs.taskBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.taskBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.taskBasic.taskBasicForm.soilfile = form[i].soilfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '断路作业'){ + this.$refs.taskBasic.activeNames.push('4') + this.$refs.taskBasic.ifIncludeRoad = 1 + this.$refs.taskBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.taskBasic.taskBasicForm.breakfile = form[i].breakfile.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else if(form[i].type === '高处作业'){ + this.$refs.taskBasic.activeNames.push('5') + this.$refs.taskBasic.ifIncludeHigh = 1 + this.$refs.taskBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.taskBasic.taskBasicForm.workheight = form[i].workheight + } + else if(form[i].type === '临时用电作业'){ + this.$refs.taskBasic.activeNames.push('6') + this.$refs.taskBasic.ifIncludeElectricity = 1 + this.$refs.taskBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.taskBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.taskBasic.taskBasicForm.power = form[i].power + } + else if(form[i].type === '盲板抽堵作业'){ + this.$refs.taskBasic.activeNames.push('7') + this.$refs.taskBasic.ifIncludePump = 1 + this.$refs.taskBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.taskBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.taskBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.taskBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.taskBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.taskBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.taskBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.taskBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation.map(item =>{ + return Object.assign(item,{url:process.env.IMG_API + item.fileurl}) + }) + } + else{ + this.$refs.taskBasic.activeNames.push('8') + this.$refs.taskBasic.ifIncludeFire = 1 + this.$refs.taskBasic.taskBasicForm.firelevel = form[i].level + this.$refs.taskBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.safetyAction.tasksecurity = JSON.parse(JSON.stringify(value)).taskSecurities + this.$refs.safetyAndRiskConfirm.taskRiskForm = JSON.parse(JSON.stringify(value)).taskRisk + this.$refs.equipment.equipmentData = JSON.parse(JSON.stringify(value)).taskEquipments + this.$refs.fireMan.taskWorkers = JSON.parse(JSON.stringify(value)).taskWorkers + this.$refs.taskBasic.resetFormRules() + }) + } + }, + changeToSecond(val){ + if(val.isanalysis === 1){ + this.taskCreateDialog = false + }else if(this.title === '新增' || this.title === '编辑' || this.title === '复制'){ + this.ifHotFireBasic = false + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.activeName = 'safetyAction' + this.basicForm = val + this.$emit('getinfo') + setTimeout(()=>{ + if(val.taskSecurities.length === 0){ + this.$refs.safetyAction.getSafeTyAction() + }else{ + this.$refs.safetyAction.tasksecurity = val.taskSecurities + } + if(val.taskRisk === null){ + this.$refs.safetyAndRiskConfirm.taskRiskForm = { + id:'', + taskcode:'', + content:'', + environment:'', + preventive:'', + emergency:'', + other:'', + director:'', + taskdirector:'', + confirmat:'', + createdat:'', + createdby:'', + modifiedat:'', + modifiedby:'', + flag:'', + } + }else{ + this.$refs.safetyAndRiskConfirm.taskRiskForm = val.taskRisk + } + this.$refs.equipment.equipmentData = val.taskEquipments + }) + }else{ + this.ifHotFireBasic = false + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.activeName = 'safetyAction' + this.$emit('getinfo') + setTimeout(()=>{ + this.$refs.safetyAction.tasksecurity = this.basicForm.taskSecurities + this.$refs.equipment.equipmentData = this.basicForm.taskEquipments + this.$refs.safetyAndRiskConfirm.taskRiskForm = this.basicForm.taskRisk + }) + } + }, + async changeToThird(){ + let correct + for(let i in this.$refs.safetyAction.tasksecurity){ + if(this.$refs.safetyAction.tasksecurity[i].checked === null || this.$refs.safetyAction.tasksecurity[i].checked === undefined || this.$refs.safetyAction.tasksecurity[i].checked === ''){ + correct = 0 + this.$message({ + type:'warning', + message:'请完善安全措施' + }) + break + }else{ + correct = 1 + } + } + if(correct === 1){ + if((this.$refs.safetyAndRiskConfirm.taskRiskForm.content === '' || this.$refs.safetyAndRiskConfirm.taskRiskForm.environment === '' || this.$refs.safetyAndRiskConfirm.taskRiskForm.preventive === '' || this.$refs.safetyAndRiskConfirm.taskRiskForm.emergency === '' || this.$refs.safetyAndRiskConfirm.taskRiskForm.other === '') && this.basicForm.level === 2){ + this.$message({ + type:'warning', + message:'请完善安全交底和风险告知确认卡' + }) + }else if(this.$refs.equipment.equipmentData.length === 0){ + this.$message({ + type:'warning', + message:'请完善设备' + }) + } else{ + this.basicForm.taskSecurities = this.$refs.safetyAction.tasksecurity + this.basicForm.taskRisk = this.$refs.safetyAndRiskConfirm.taskRiskForm + this.basicForm.taskRisk.taskcode = this.basicForm.code + this.basicForm.taskEquipments = this.$refs.equipment.equipmentData + if(this.title === '新增' || this.title === '复制') { + let res = await addTaskSecond(this.basicForm) + if (res.data.code === '200') { + this.ifFile = true + this.ifHotFireBasic = false + this.ifSafetyAction = false + this.ifSafetyAndRisk = false + this.activeName = 'fileAndEquipment' + this.$notify({ + title: '成功', + duration: 2000, + message: '信息上传成功', + type: 'success' + }) + this.$emit('getinfo') + } else { + this.$message({ + message: res.data.message, + type: 'warning' + }) + } + }else if(this.title === '编辑'){ + let res = await updateTaskSecond(this.basicForm) + if (res.data.code === '200') { + this.ifFile = true + this.ifHotFireBasic = false + this.ifSafetyAction = false + this.ifSafetyAndRisk = false + this.activeName = 'fileAndEquipment' + this.$notify({ + title: '成功', + duration: 2000, + message: '信息上传成功', + type: 'success' + }) + this.$emit('getinfo') + } else { + this.$message({ + message: res.data.message, + type: 'warning' + }) + } + } + } + } + }, + confirmFile(){ + if(this.$refs.fileAndEquipment.fileListOne.length === 0){ + this.$message({ + type:'warning', + message:'请上传事故救援预案' + }) + }else{ + this.taskCreateDialog = false + this.$notify({ + title: '成功', + duration: 2000, + message: '新建成功', + type: 'success' + }) + } + + }, + constructionConfirm(){ + this.title = '施工单位信息填写' + this.activeName = 'safetyAction' + this.ifHotFireBasic = false + this.ifSafetyAction = true + this.ifSafetyAndRisk = false + this.ifFireMan = true + this.ifFile = false + this.ifConstructionFile = false + this.constructionForm = { + id: this.basicForm.id, + isAgree: 1, + code:this.basicForm.code, + taskEquipments:[], + taskSecurities:[], + taskWorkers:[] + } + setTimeout(()=>{ + this.$refs.equipment.equipmentData = [] + this.$refs.safetyAction.getConstructionAction() + this.$refs.constructionFile.ifCompany = false + this.$refs.constructionFile.ifConstruction = true + }) + }, + confirmConstruction(){ + let correct + for(let i in this.$refs.safetyAction.tasksecurity){ + if(this.$refs.safetyAction.tasksecurity[i].checked === null || this.$refs.safetyAction.tasksecurity[i].checked === undefined || this.$refs.safetyAction.tasksecurity[i].checked === ''){ + correct = 0 + this.$message({ + type:'warning', + message:'请完善安全措施' + }) + break + }else{ + correct = 1 + } + } + if(correct === 1) { + if (this.$refs.equipment.equipmentData.length === 0) { + this.$message({ + type: 'warning', + message: '请完善设备' + }) + }else if(this.$refs.fireMan.taskWorkers.length === 0){ + this.$message({ + type: 'warning', + message: '请完善作业人' + }) + } + // else if(this.$refs.constructionFile.fileListTwo.length === 0 || this.$refs.constructionFile.fileListThree.length === 0){ + // this.$message({ + // type: 'warning', + // message: '请上传作业人员健康和作业资质证书文件' + // }) + // } + else { + this.constructionForm.taskEquipments = this.$refs.equipment.equipmentData + this.constructionForm.taskSecurities = this.$refs.safetyAction.tasksecurity + this.constructionForm.taskWorkers = this.$refs.fireMan.taskWorkers + submitConstruction(this.constructionForm).then(res => { + if (res.data.code === '200') { + this.$emit('getinfo') + this.taskCreateDialog = false + this.$notify({ + type: 'success', + duration: 2000, + message: '施工单位确认成功', + title: '成功' + }) + } else { + this.$message({ + message: res.data.message, + type: 'warning' + }) + } + }).catch(error => { + parseError({ error: error, vm: this }) + }) + } + } + }, + refuse(){ + if(this.title === '动火部位审批'){ + this.basicForm.isAgree = 0 + this.supervisorAndAnalystRefuse = true + }else if(this.title === '相关部门审批'){ + this.basicForm.isAgree = 0 + this.relevantRefuse = true + }else if(this.title === '安全部门审批'){ + this.basicForm.isAgree = 0 + this.securityRefuse = true + } + }, + submitRefuseTaskByFireDepartment(){ + if(this.title === '动火部位审批'){ + partReview(this.basicForm).then(res=>{ + if(res.data.code === '200'){ + this.$emit('getinfo') + this.taskCreateDialog = false + this.supervisorAndAnalystRefuse = false + this.$notify({ + title:'成功', + message:'审核驳回成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }else if(this.title === '相关部门审批'){ + involveReview(this.basicForm).then(res=>{ + if(res.data.code === '200'){ + this.$emit('getinfo') + this.taskCreateDialog = false + this.relevantRefuse = false + this.$notify({ + title:'成功', + message:'审核驳回成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }else if(this.title === '安全部门审批'){ + securityReview(this.basicForm).then(res=>{ + if(res.data.code === '200'){ + this.$emit('getinfo') + this.taskCreateDialog = false + this.securityRefuse = false + this.$notify({ + title:'成功', + message:'审核驳回成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + } + + }, + agree(){ + if(this.title === '动火部位审批'){ + this.basicForm.isAgree = 1 + this.supervisorAndAnalystAgree = true + }else if(this.title === '相关部门审批'){ + this.basicForm.isAgree = 1 + involveReview(this.basicForm).then(res=>{ + if(res.data.code === '200'){ + this.$emit('getinfo') + this.taskCreateDialog = false + this.$notify({ + title:'成功', + message:'审核通过成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }else if(this.title === '安全部门审批'){ + this.basicForm.isAgree = 1 + securityReview(this.basicForm).then(res=>{ + if(res.data.code === '200'){ + this.$emit('getinfo') + this.taskCreateDialog = false + this.$notify({ + title:'成功', + message:'审核通过成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + } + }, + submitAgreeTaskByFireDepartment(){ + partReview(this.basicForm).then(res=>{ + if(res.data.code === '200'){ + this.$emit('getinfo') + this.taskCreateDialog = false + this.supervisorAndAnalystAgree = false + this.$notify({ + title:'成功', + message:'审核通过成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskCreate/index.vue b/src/views/specialWorkManage/specialWork/taskCreate/index.vue new file mode 100644 index 0000000..c6e3cd5 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskCreate/index.vue @@ -0,0 +1,344 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>开始时间:</span> + <el-date-picker value-format="yyyy-MM-dd HH:mm" placeholder="请选择开始时间" type="datetime" v-model="listQuery.starttime" style="width:200px"> + </el-date-picker> + </div> + <div class="basic_search"> + <span>结束时间:</span> + <el-date-picker value-format="yyyy-MM-dd HH:mm" placeholder="请选择结束时间" type="datetime" v-model="listQuery.endtime" style="width:200px"> + </el-date-picker> + </div> + <div class="basic_search"> + <span>部门:</span> + <el-input v-model="listQuery.department" style="width:200px"> + </el-input> + </div> + <div class="basic_search"> + <span>施工单位:</span> + <el-input v-model="listQuery.constructionunit" style="width:200px"> + </el-input> + </div> + <div class="basic_search"> + <span>作业类型:</span> + <el-select v-model="listQuery.level" clearable style="width:200px"> + <el-option + v-for="item in taskTypeList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </div> + <div class="basic_search"> + <span>审批状态:</span> + <el-select v-model="listQuery.status" clearable style="width:200px"> + <el-option + v-for="item in statusList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </div> + <div class="basic_search"> + <span>作业状态:</span> + <el-select v-model="listQuery.flag" clearable style="width:200px"> + <el-option + v-for="item in flagList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </div> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-plus" @click="showTaskInfo('','新增')">新增</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="taskData" + border + fit + highlight-current-row + style="width: 100%;" + @sort-change="sortChange" + > + <el-table-column label="单位名称" prop="unit" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="单位代码" prop="code" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="申请人" prop="applicant" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="施工单位" prop="constructionunit" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="作业内容" prop="area" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="开始时间" prop="starttime" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="结束时间" prop="endtime" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="作业级别" prop="level" align="center" sortable="custom"> + <template slot-scope="scope"> + <div v-for="item in levelList"> + <div v-if="scope.row.level === item.id"> + <span>{{item.name}}</span> + <!-- <el-tag v-if="scope.row.level ===0" type="success">{{item.name}}</el-tag>--> + <!-- <el-tag v-if="scope.row.level ===1" type="warning">{{item.name}}</el-tag>--> + <!-- <el-tag v-if="scope.row.level ===2" type="danger">{{item.name}}</el-tag>--> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="任务审批状态" prop="status" align="center" sortable="custom"> + <template slot-scope="scope"> + <div v-for="item in statusList"> + <div v-if="scope.row.status === item.id"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="作业状态" prop="flag" align="center" sortable="custom"> + <template slot-scope="scope"> + <div v-for="item in flagList"> + <div v-if="scope.row.flag === item.id"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="创建时间" prop="createdat" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="最近修改时间" prop="modifiedat" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="showReviewInfo(scope.row)" v-if="scope.row.status !== 7 && scope.row.taskReviews.length !== 0">查看审批</el-button> + <el-button type="text" @click="downloadFile(scope.row)" v-if="scope.row.status === 7">下载</el-button> +<!-- <el-button type="text" @click="showTaskInfo(scope.row,'主管领导审批')" v-if="scope.row.status === 6 && scope.row.level === 2">主管领导审批</el-button>--> +<!-- <el-button type="text" @click="showTaskInfo(scope.row,'安全部门审批')" v-if="scope.row.status === 5 && (scope.row.level === 1 || scope.row.level === 2)">安全部门审批</el-button>--> +<!-- <el-button type="text" @click="showTaskInfo(scope.row,'相关部门审批')" v-if="scope.row.status === 4 &&(scope.row.level === 1 || scope.row.level === 2)">相关部门审批</el-button>--> +<!-- <el-button type="text" @click="showTaskInfo(scope.row,'动火部位审批')" v-if="scope.row.status === 3">动火部位审批</el-button>--> + <el-button type="text" @click="showTaskInfo(scope.row,'施工单位确认')" v-if="scope.row.status === 2 && loginForm.iscompany === 1">施工单位确认</el-button> + <el-button type="text" @click="submitTask(scope.row)" v-if="scope.row.status === 1 || scope.row.status === 0">提交</el-button> + <el-button type="text" @click="showTaskInfo(scope.row,'编辑')" v-if="scope.row.status === 1 || scope.row.status === 0">编辑</el-button> + <el-button type="text" @click="showTaskInfo(scope.row,'复制')">复制</el-button> + <el-button type="text" style="color: red" @click="deleteById(scope.row)" v-if="(scope.row.applicant === loginForm.realname) && scope.row.status === 2">撤销</el-button> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <task-create ref="taskCreate" @getinfo="getTaskData"></task-create> + <review-info ref="reviewInfo"></review-info> + </div> +</template> + +<script> +import { mapGetters } from 'vuex' +import { computePageCount } from '../../../../utils' +import { getTaskList, submitTask } from '../../../../api/task' +import Cookies from 'js-cookie' +import TaskCreate from './components/taskCreate' +import reviewInfo from './components/reviewInfo/index' + +export default { + name: 'index', + filters: { + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + taskData: [], + companyList:[], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + title:'', + orderValue:'', + sortValue:'', + levelList:[{id:2,name:'特级'},{id:1,name:'一级'},{id:0,name:'二级'},], + taskTypeList:[ + {id:0,name:'受限空间作业'}, + {id:1,name:'吊装作业'}, + {id:2,name:'动土作业'}, + {id:3,name:'断路作业'}, + {id:4,name:'高处作业'}, + {id:5,name:'临时用电作业'}, + {id:6,name:'盲板抽堵作业'}, + {id:7,name:'动火作业'}, + ], + statusList:[ + {id:0,name:'已驳回'}, + {id:1,name:'待提交'}, + {id:2,name:'已提交'}, + {id:3,name:'施工单位已确认'}, + {id:4,name:'动火部位负责人审批通过'}, + {id:5,name:'相关部门审批通过'}, + {id:6,name:'安全部门审批通过'}, + {id:7,name:'审批通过'}, + ], + flagList:[ + {id:0,name:'待提交'}, + {id:1,name:'作业中止'}, + {id:2,name:'等待检查'}, + {id:3,name:'等待开始'}, + {id:4,name:'作业中'}, + {id:5,name:'作业完成'}, + ], + listQuery:{ + starttime:'', + endtime:'', + department:'', + constructionunit:'', + level:'', + status:'', + flag:'', + }, + loginForm:{} + } + }, + components:{ + TaskCreate, + reviewInfo + }, + mounted() { + this.getTaskData() + }, + methods: { + async getTaskData(){ + this.loginForm = JSON.parse(Cookies.get('loginForm')) + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['order'] = this.orderValue + params['sort'] = this.sortValue + for (const i in this.listQuery) { + console.log(i) + params[i] = this.listQuery[i] + } + let res = await getTaskList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.taskData = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + this.listLoading = false + }, + showTaskInfo(value,title){ + this.$refs.taskCreate.openTaskInfo(value,title) + }, + showReviewInfo(value){ + this.$refs.reviewInfo.openReviewInfo(value) + }, + downloadFile(val){ + if(val.path === null || val.path === ''){ + this.$message({ + type:'warning', + message:'文件未生成' + }) + }else{ + window.open(process.env.IMG_API + val.path,'_blank') + } + }, + submitTask(row){ + this.$confirm('提交此条任务,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + submitTask({id:row.id}).then( (res)=>{ + if(res.data.code === '200'){ + this.getTaskData() + this.$notify({ + title:'成功', + message:'提交成功', + type:'success', + duration:2000, + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + + }) + }) + }, + deleteById(val){ + this.$confirm('删除此条信息,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + deleteUnit({id:val.id}).then( ()=>{ + this.getUnitForm() + this.$notify({ + title:'成功', + message:'删除成功', + type:'success', + duration:2000, + }) + }) + }) + }, + refreshHandle(){ + this.getTaskData() + }, + handleSizeChange(val){ + this.pageSize = val + this.getTaskData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getTaskData() + }, + sortChange(params){ + this.sortValue = params.sort + this.orderValue = params.order + this.getTaskData() + } + + } +} +</script> +<style scoped> +.basic_search{ + display:inline-block; + padding-bottom: 10px; +} +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/equipment/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/equipment/index.vue new file mode 100644 index 0000000..e71c228 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/equipment/index.vue @@ -0,0 +1,72 @@ +<template> + <div> + <el-table :data="equipmentData" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="taskcode" label="作业编号" align="left"> + </el-table-column> + <el-table-column prop="name" label="设备名称" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.name"></el-input> + </template> + </el-table-column> + <el-table-column prop="type" label="设备类型" align="left"> + <template slot-scope="scope"> + <el-select v-model="scope.row.type"> + <el-option + v-for="item in typeList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column prop="num" label="设备数量" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.num"></el-input> + </template> + </el-table-column> + </el-table> + </div> +</template> + +<script> +import { getSafetyActionList } from '@/api/task' + +export default { + props:['basicInformation'], + name: 'index', + data(){ + return{ + typeList:[{id:1,name:'安全防护设备及工具'},{id:2,name:'安全施工防护用具'},{id:3,name:'有毒有害防护设备'},{id:4,name:'个人防护设备'},{id:5,name:'安全措施设备及工器具'}], + equipmentData:[], + } + }, + created(){ + }, + methods:{ + addEquipment(){ + this.equipmentData.push({ + createdat: "", + createdby: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + name: "", + num: "", + taskcode: this.basicInformation.code, + type: "" + }) + }, + deleteEquipment(val){ + this.equipmentData.splice(val,1) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/fileAndEquipment/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/fileAndEquipment/index.vue new file mode 100644 index 0000000..ea94f0b --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/fileAndEquipment/index.vue @@ -0,0 +1,207 @@ +<template> + <div> + <el-form ref="form" :model="fileForm" label-width="160px" label-position="right"> + <el-form-item label="事故救援预案:"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + :on-preview="onPreview" + :file-list="fileListOne"> + </el-upload> + </el-form-item> +<!-- <el-form-item label="作业人员身体健康:">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :headers="header"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListTwo">--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- <el-form-item label="作业资质证书:">--> +<!-- <el-upload--> +<!-- accept=".pdf,.jpg,.png"--> +<!-- :action="fileRoad"--> +<!-- class="upload-demo"--> +<!-- ref="upload"--> +<!-- :data="uploadForm"--> +<!-- :on-preview="onPreview"--> +<!-- :file-list="fileListThree">--> +<!-- </el-upload>--> +<!-- </el-form-item>--> + </el-form> + <el-dialog :visible.sync="dialogVisible"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> +</template> + +<script> +import Cookies from 'js-cookie' +import { deleteFile, getFileData } from '@/api/task' + +export default { + props:['basicInformation'], + name: 'index', + data(){ + return{ + ifApply:'', + ifCompany:'', + ifApplyButton:'', + ifCompanyButton:'', + disabled:'', + fileForm:{}, + header:{Authorization:''}, + fileRoad:process.env.BASE_API + '/task/upload', + dialogVisible:false, + dialogImageUrl:'', + riskAndDanger:[], + safetyOrganizeAction:[], + workSecurityAction:[], + fileList:[], + fileListOne:[], + fileListTwo:[], + fileListThree:[], + uploadForm:{ + taskcode:'', + type:'', + } + } + }, + mounted(){ + this.getFileList() + }, + methods:{ + async onPreview(file){ + window.open( process.env.IMG_API + file.fileurl,'_blank') + }, + async getFileList(){ + let params = {} + params["taskCode"] = this.basicInformation.code + let res = await getFileData(params) + if(res.data.code === '200'){ + this.fileList = [] + this.fileListOne = [] + this.fileListTwo = [] + this.fileListThree = [] + this.fileList = res.data.result + this.fileList.map(item =>{ + return Object.assign(item,{name:item.originalname}) + }) + for(let i in this.fileList){ + if(this.fileList[i].type === '事故救援预案'){ + this.fileListOne.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业人员身体健康'){ + this.fileListTwo.push(this.fileList[i]) + } + } + for(let i in this.fileList){ + if(this.fileList[i].type === '作业资质证书'){ + this.fileListThree.push(this.fileList[i]) + } + } + } + }, + submit(){ + this.uploadForm.type = "事故救援预案" + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + this.$refs.upload.submit() + }, + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleChangeOne(file, fileList) { + this.uploadForm.type = '事故救援预案' + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeTwo(file, fileList) { + this.uploadForm.type = '作业人员身体健康'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + handleChangeThree(file, fileList) { + this.uploadForm.type = '作业资质证书'; + this.uploadForm.taskcode = this.basicInformation.code + this.header.Authorization = Cookies.get('token') + }, + onSuccess(response){ + if(response.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'上传成功', + title:'成功', + }) + this.getFileList() + } + }, + onRemove(file,fileList){ + return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(() =>{ + let params = {} + params["id"] = file.id + deleteFile(params).then(res =>{ + if(res.data.code === '200'){ + this.$notify({ + type:'success', + duration:2000, + message:'删除成功', + title:'成功', + }) + this.getFileList() + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + }) + }, + handleRemove(file,value) { + return this.$confirm(`确定移除 ${ file.name }?`,'提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + switch (value) { + case 'one':this.riskAndDanger.splice(this.riskAndDanger.findIndex(item =>item.name === file.name),1); + break; + case 'two':this.safetyOrganizeAction.splice(this.safetyOrganizeAction.findIndex(item =>item.name === file.name),1); + break; + case 'three':this.workSecurityAction.splice(this.workSecurityAction.findIndex(item =>item.name === file.name),1); + break; + case 'four':this.operationQualification.splice(this.operationQualification.findIndex(item =>item.name === file.name),1); + break; + case 'five':this.escortCompany.splice(this.escortCompany.findIndex(item =>item.name === file.name),1); + break; + case 'six':this.insurance.splice(this.insurance.findIndex(item =>item.name === file.name),1); + break; + case 'seven':this.safetyProduction.splice(this.safetyProduction.findIndex(item =>item.name === file.name),1); + break; + } + }) + }, + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/fireMan/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/fireMan/index.vue new file mode 100644 index 0000000..ca064ee --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/fireMan/index.vue @@ -0,0 +1,68 @@ +<template> + <div> + <el-table :data="taskWorkers" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="taskcode" label="作业编号" align="left"> + </el-table-column> + <el-table-column prop="unit" label="施工单位" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.unit"></el-input> + </template> + </el-table-column> + <el-table-column prop="worker" label="作业人姓名" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.worker"></el-input> + </template> + </el-table-column> + <el-table-column prop="branch" label="特种作业工种" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.branch"></el-input> + </template> + </el-table-column> + <el-table-column prop="number" label="特种作业证号" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.number"></el-input> + </template> + </el-table-column> + </el-table> + </div> +</template> + +<script> + +export default { + props:['basicInformation'], + name: 'index', + data(){ + return{ + taskWorkers:[], + } + }, + created(){ + }, + methods:{ + addTaskWorker(){ + this.taskWorkers.push({ + createdat: "", + createdby: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + taskcode: this.basicInformation.code, + unit: "", + worker: "", + branch: 0, + number: "", + }) + }, + deleteWorker(val){ + this.taskWorkers.splice(val,1) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/hotFireBasic/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/hotFireBasic/index.vue new file mode 100644 index 0000000..6605867 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/hotFireBasic/index.vue @@ -0,0 +1,723 @@ +<template> + <div style="padding:20px 50px 0 50px;"> + <el-form ref="form" :rules="taskBasicRules" :model="taskBasicForm" label-position="center" label-width="150px"> + <el-collapse v-model="activeNames"> + <el-collapse-item title="基本信息" name="0"> + + <el-row> + <el-col :span="8"> + <el-form-item label="申请单位:" prop="unit"> + <el-input v-model="taskBasicForm.unit" readonly></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="申请人:" prop="applicant"> + <el-input v-model="taskBasicForm.applicant" readonly></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="负责人:" prop="director"> + <el-input v-model="taskBasicForm.director"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="8"> + <el-form-item label="危害辨识:" prop="hazard"> + <el-input v-model="taskBasicForm.hazard"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="开始时间:" style="margin-right: 0px" prop="starttime"> + <el-date-picker value-format="yyyy-MM-dd HH:mm" type="datetime" v-model="taskBasicForm.starttime" placeholder="选择开始日期" class="taskBasic_select"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="结束时间:" prop="endtime"> + <el-date-picker value-format="yyyy-MM-dd HH:mm" type="datetime" v-model="taskBasicForm.endtime" placeholder="选择结束日期" class="taskBasic_select"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + + <el-row> + + <el-col :span="8"> + <el-form-item label="施工单位:" prop="constructionunit" > + <el-select v-model="taskBasicForm.constructionunit" clearable class="taskBasic_select"> + <el-option + v-for="item in companyList" + :key="item.id" + :value="item.company" + :label="item.company" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item label="作业内容:" prop="area"> + <el-input v-model="taskBasicForm.area"></el-input> + </el-form-item> + </el-col> + </el-row> + + </el-collapse-item> + <el-collapse-item title="受限空间作业" name="1"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeArea" :label="1">是</el-radio> + <el-radio v-model="ifIncludeArea" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeArea"> + <el-row> + <el-col :span="8"> + <el-form-item label="受限空间分类:" prop="spacecategory"> + <el-select v-model="taskBasicForm.spacecategory" class="taskBasic_select"> + <el-option + v-for="item in spaceCategoryList" + :key="item.id" + :value="item.name" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="受限空间名称:" prop="spacename"> + <el-select v-model="taskBasicForm.spacename" class="taskBasic_select"> + <el-option + v-for="item in spaceNameList" + :key="item.id" + :value="item.name" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="受限空间介质名称:" prop="spacemedium"> + <el-input v-model="taskBasicForm.spacemedium" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="是否受酸碱腐蚀:" prop="acibase"> + <el-select v-model="taskBasicForm.acibase" class="taskBasic_select"> + <el-option + v-for="item in acibaseList" + :key="item.id" + :value="item.name" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </div> + + </el-collapse-item> + <el-collapse-item title="吊装作业" name="2"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifHoisting" :label="1">是</el-radio> + <el-radio v-model="ifHoisting" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifHoisting"> + <el-row> + <el-col :span="8"> + <el-form-item label="吊装重物等级:" prop="hoistinglevel"> + <el-select v-model="taskBasicForm.hoistinglevel" class="taskBasic_select"> + <el-option value="一级吊装(质量>100吨)"></el-option> + <el-option value="二级吊装(40吨<=质量<=100吨)"></el-option> + <el-option value="三级吊装(质量<40吨)"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="吊装重物质量(t):" prop="hoistingweight"> + <el-input v-model="taskBasicForm.hoistingweight" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="动土作业" name="3"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifBuilding" :label="1">是</el-radio> + <el-radio v-model="ifBuilding" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifBuilding"> + <el-row> + <el-col :span="8"> + <el-form-item label="动土作业深度:" prop="soildepth"> + <el-input v-model="taskBasicForm.soildepth" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="动土作业面积:" prop="soilarea"> + <el-input v-model="taskBasicForm.soilarea" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="动土方案文件:" prop="soilfile"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + :data="uploadForm" + list-type="picture-card" + :file-list="taskBasicForm.soilfile" + :on-change="handleChangeBuildingFile" + :on-success="onSoilFileSuccess" + :auto-upload="true"> + <i slot="default" class="el-icon-plus"></i> + <div slot="file" slot-scope="{file}"> + <img + class="el-upload-list__item-thumbnail" + :src="file.url" alt="" + > + <span class="el-upload-list__item-actions"> + <span + class="el-upload-list__item-preview" + @click="handleFile(file)" + > + <i class="el-icon-zoom-in"></i> + </span> + <span + v-if="!disabled" + class="el-upload-list__item-delete" + @click="handleRemove(file,'one')" + > + <i class="el-icon-delete"></i> + </span> + </span> + </div> + </el-upload> + </el-form-item> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="断路作业" name="4"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeRoad" :label="1">是</el-radio> + <el-radio v-model="ifIncludeRoad" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeRoad"> + <el-row> + <el-col :span="16"> + <el-form-item label="断路原因:" prop="breakreason"> + <el-input v-model="taskBasicForm.breakreason" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="断路地段示意图:" prop="breakfile"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + list-type="picture-card" + :file-list="taskBasicForm.breakfile" + :on-success="onBreakFileSuccess" + :on-change="handleChangeRoadFile" + :auto-upload="true"> + <i slot="default" class="el-icon-plus"></i> + <div slot="file" slot-scope="{file}"> + <img + class="el-upload-list__item-thumbnail" + :src="file.url" alt="" + > + <span class="el-upload-list__item-actions"> + <span + class="el-upload-list__item-preview" + @click="handleFile(file)" + > + <i class="el-icon-zoom-in"></i> + </span> + <span + v-if="!disabled" + class="el-upload-list__item-delete" + @click="handleRemove(file,'two')" + > + <i class="el-icon-delete"></i> + </span> + </span> + </div> + </el-upload> + </el-form-item> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="高处作业" name="5"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeHigh" :label="1">是</el-radio> + <el-radio v-model="ifIncludeHigh" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeHigh"> + <el-row> + <el-col :span="8"> + <el-form-item label="作业等级:" prop="heightlevel"> + <el-select v-model="taskBasicForm.heightlevel" class="taskBasic_select"> + <el-option value="一级高处作业(2米≤高度<5米)"></el-option> + <el-option value="二级高处作业(5米≤高度<15米)"></el-option> + <el-option value="三级高处作业(15米≤高度<30米)"></el-option> + <el-option value="特级高处作业(高度≥30米)"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="作业高度:" prop="workheight"> + <el-input type="number" v-model="taskBasicForm.workheight" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="临时用电作业" name="6"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeElectricity" :label="1">是</el-radio> + <el-radio v-model="ifIncludeElectricity" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeElectricity"> + <el-row> + <el-col :span="8"> + <el-form-item label="电压接入点:" prop="electricityarea"> + <el-input v-model="taskBasicForm.electricityarea" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="工作电压:" prop="voltage"> + <el-input v-model="taskBasicForm.voltage" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="用电设备及功率:" prop="power"> + <el-input v-model="taskBasicForm.power" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="盲板抽堵作业" name="7"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludePump" :label="1">是</el-radio> + <el-radio v-model="ifIncludePump" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludePump"> + <el-row> + <el-col :span="8"> + <el-form-item label="设备管道名称:" prop="pipename"> + <el-input v-model="taskBasicForm.pipename" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="设备管道介质:" prop="pipemedium"> + <el-input v-model="taskBasicForm.pipemedium" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="设备管道温度:" prop="pipetemperature"> + <el-input v-model="taskBasicForm.pipetemperature" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="设备管道压力:" prop="pipepressure"> + <el-input v-model="taskBasicForm.pipepressure" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="盲板材质:" prop="blindboardmaterial"> + <el-input v-model="taskBasicForm.blindboardmaterial" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="盲板规格11:" prop="blindboardspecification"> + <el-input v-model="taskBasicForm.blindboardspecification" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="盲板编号:" prop="blindboardnumber"> + <el-input v-model="taskBasicForm.blindboardnumber" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="盲板位置图:" prop="blindboardlocation"> + <el-upload + accept=".pdf,.jpg,.png" + :action="fileRoad" + class="upload-demo" + ref="upload" + :headers="header" + list-type="picture-card" + :file-list="taskBasicForm.blindboardlocation" + :on-success="onPumpFileSuccess" + :on-change="handleChangePumpFile" + :auto-upload="true"> + <i slot="default" class="el-icon-plus"></i> + <div slot="file" slot-scope="{file}"> + <img + class="el-upload-list__item-thumbnail" + :src="file.url" alt="" + > + <span class="el-upload-list__item-actions"> + <span + class="el-upload-list__item-preview" + @click="handleFile(file)" + > + <i class="el-icon-zoom-in"></i> + </span> + <span + v-if="!disabled" + class="el-upload-list__item-delete" + @click="handleRemove(file,'three')" + > + <i class="el-icon-delete"></i> + </span> + </span> + </div> + </el-upload> + </el-form-item> + </el-row> + </div> + </el-collapse-item> + <el-collapse-item title="动火作业" name="8"> + <el-row> + <el-col :span="8"> + <el-form-item label="是否涉及:"> + <el-radio v-model="ifIncludeFire" :label="1">是</el-radio> + <el-radio v-model="ifIncludeFire" :label="0">否</el-radio> + </el-form-item> + </el-col> + </el-row> + <div v-if="ifIncludeFire"> + <el-row> + <el-col :span="8"> + <el-form-item label="动火级别:" prop="firelevel"> + <el-select v-model="taskBasicForm.firelevel" class="taskBasic_select"> + <el-option + v-for="item in levelList" + :key="item.id" + :label="item.name" + :value="item.id" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="动火方式:" prop="firetype"> + <el-input v-model="taskBasicForm.firetype" class="taskBasic_select"> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </el-collapse-item> + </el-collapse> + </el-form> + <div align="center" style="padding-top: 20px" v-if="title === '新增' || title === '编辑' || title=== '施工单位确认' || title === '施工单位信息填写'"> + <el-button type="primary" @click="goNext">下一步</el-button> + </div> + <el-dialog :visible.sync="dialogVisible" :append-to-body="true"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> +</template> + +<script> + import { getUnitList } from '@/api/unitManage' + import Cookies from 'js-cookie' + import { addTask, updateTask } from '@/api/task' + + export default { + name: 'index', + props:['title'], + data(){ + return{ + type:'', + fileRoad:process.env.BASE_API + '/task/web/upload', + uploadForm:{ + name:'', + }, + header:{Authorization:''}, + taskBasicForm:{ + isAgree: 0, + applicant: "", + applyunitname: "", + applyunitopinion: "", + applyunittime: "", + approverprofession: "", + approversupervisor: "", + area: "", + code: "", + completedconfirm: "", + completedname: "", + completedtime: "", + constructionname: "", + constructionopinion: "", + constructiontime: "", + constructionunit: "", + createdat: "", + createdby: "", + department: "", + director: "", + endtime: "", + enterprisename: "", + enterpriseopinion: "", + enterprisetime: "", + flag: 0, + hazard: "", + id: 0, + isdel: 0, + isholiday: 0, + level:'', + modifiedat: "", + modifiedby: "", + othertask: "", + partdirector: "", + profession: "", + relevantname: "", + relevantopinion: "", + relevanttime: "", + resources: [ + ], + securityname: "", + securityopinion: "", + securitytime: "", + securitydep: "", + shiftleadername: "", + shiftleaderopinion: "", + shiftleadertime: "", + starttime: "", + status: 0, + supervisor: "", + taskAnalyses: [ + ], + taskEquipments: [ + ], + taskRisk: { + confirmat: "", + content: "", + createdat: "", + createdby: "", + director: "", + emergency: "", + environment: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + other: "", + preventive: "", + taskcode: "", + taskdirector: "" + }, + taskSecurities: [ + ], + taskWorkers: [ + ], + unit: "", + subTaskInfos:[], + type:'', + category:'', + firelevel:'', + checked:'', + spacecategory:'', + spacename:'', + spacemedium:'', + acibase:'', + hoistinglevel:'', + hoistingweight:'', + soildepth:'', + soilarea:'', + soilfile:[], + breakreason:'', + breakfile:[], + workheight:'', + heightlevel:'', + electricityarea:'', + voltage:'', + power:'', + pipename:'', + pipemedium:'', + pipetemperature:'', + pipepressure:'', + blindboardmaterial:'', + blindboardspecification:'', + blindboardnumber:'', + commander:'', + blindboardlocation:[], + firetype:'', + }, + activeNames:['0'], + companyList:[], + levelList:[{id:2,name:'特级'},{id:1,name:'一级'},{id:0,name:'二级'},], + spaceCategoryList:[{id:0,name:'密闭设备'},{id:1,name:'地下有限空间'},{id:2,name:'地上有限空间'},], + spaceNameList:[], + acibaseList:[{id:0,name:'酸腐蚀'},{id:1,name:'碱腐蚀'},{id:2,name:'其他腐蚀'},{id:3,name:'没有腐蚀'}], + taskBasicRules:{ + unit: [{ required: true, message: '申请单位不能为空', trigger: 'blur' }], + applicant: [{ required: true, message: '申请人不能为空', trigger: 'blur' }], + level: [{ required: true, message: '动火作业级别不能为空', trigger: 'change' }], + mode: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], + hazard: [{ required: true, message: '危害辨识不能为空', trigger: 'blur' }], + director: [{ required: true, message: '负责人不能为空', trigger: 'blur' }], + area: [{ required: true, message: '动火地点不能为空', trigger: 'blur' }], + constructionunit: [{ required: true, message: '施工部门不能为空', trigger: 'change' }], + starttime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }], + endtime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }], + spacecategory: [{ required: true, message: '受限空间分类不能为空', trigger: 'change' }], + spacename: [{ required: true, message: '受限空间名称不能为空', trigger: 'change' }], + spacemedium: [{ required: true, message: '受限空间介质名称不能为空', trigger: 'change' }], + acibase: [{ required: true, message: '是否酸碱腐蚀不能为空', trigger: 'change' }], + hoistinglevel: [{ required: true, message: '吊装重物等级不能为空', trigger: 'change' }], + hoistingweight: [{ required: true, message: '吊装重物质量不能为空', trigger: 'blur' }], + soildepth: [{ required: true, message: '动土作业深度不能为空', trigger: 'blur' }], + soilarea: [{ required: true, message: '动土作业面积不能为空', trigger: 'blur' }], + // soilfile: [{ required: true, message: '动土方案文件不能为空', trigger: 'blur' }], + breakreason: [{ required: true, message: '断路原因不能为空', trigger: 'blur' }], + // breakfile: [{ required: true, message: '断路地段示意图不能为空', trigger: 'blur' }], + heightlevel: [{ required: true, message: '作业等级不能为空', trigger: 'change' }], + workheight: [{ required: true, message: '作业高度不能为空', trigger: 'blur' }], + electricityarea: [{ required: true, message: '电压接入点不能为空', trigger: 'blur' }], + voltage: [{ required: true, message: '工作电压不能为空', trigger: 'blur' }], + power: [{ required: true, message: '用电设备及功率不能为空', trigger: 'blur' }], + pipename: [{ required: true, message: '设备管道名称不能为空', trigger: 'blur' }], + pipemedium: [{ required: true, message: '设备管道介质不能为空', trigger: 'blur' }], + pipetemperature: [{ required: true, message: '设备管道温度不能为空', trigger: 'blur' }], + pipepressure: [{ required: true, message: '设备管道压力不能为空', trigger: 'blur' }], + blindboardmaterial: [{ required: true, message: '盲板材质不能为空', trigger: 'blur' }], + blindboardspecification: [{ required: true, message: '盲板规格不能为空', trigger: 'blur' }], + blindboardnumber: [{ required: true, message: '盲板编号不能为空', trigger: 'blur' }], + // blindboardlocation: [{ required: true, message: '盲板位置图不能为空', trigger: 'blur' }], + firelevel: [{ required: true, message: '动火级别不能为空', trigger: 'blur' }], + firetype: [{ required: true, message: '动火类型不能为空', trigger: 'blur' }], + }, + ifIncludeArea:null, + ifHoisting:null, + ifBuilding:null, + ifIncludeRoad:null, + ifIncludeHigh:null, + ifIncludeElectricity:null, + ifIncludePump:null, + ifIncludeFire:null, + dialogImageUrl:false, + dialogVisible:false, + disabled: false, + } + }, + created(){ + this.getCompany() + }, + methods:{ + giveTaskBasic(){ + this.taskBasicForm = JSON.parse(JSON.stringify(this.taskBasicForm)) + }, + handlePictureCardPreview(file){ + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + resetFormRules(){ + this.$nextTick(() =>{ + this.$refs["form"].clearValidate() + }) + }, + async getCompany(){ + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + params['code'] = this.code + let res = await getUnitList(params) + if(res.data.code === '200'){ + this.companyList = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }, + } + } +</script> + +<style scoped> + .taskBasic_title{ + font-weight: bolder; + font-size: large; + text-align: center; + margin-top: 24px; + } + /deep/.el-collapse-item__header{ + margi:0 auto; + width:100%; + font-weight: bolder; + font-size: large; + text-align: center; + padding-left: 45%; + } + .taskBasic_select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/reviewInfo/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/reviewInfo/index.vue new file mode 100644 index 0000000..e08804e --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/reviewInfo/index.vue @@ -0,0 +1,72 @@ +<template> + <el-dialog title="审批" :visible.sync="reviewInfoDialog" :modal-append-to-body="false" :close-on-click-modal="false" width="50%"> + <div class="block"> + <el-timeline> + <el-timeline-item + v-for="(activity, index) in activities" + :key="index" + :color="'#0bbd87'" + :size="activity.size" + :timestamp="activity.reviewat"> + <div style="padding-bottom: 10px;font-weight: bolder">{{activity.level}}</div> + <el-card> + <el-row> + <el-col :span="2"> + <div>签字:</div> + </el-col> + <el-col :span="22"> + <img :src="activity.autograph" style="width:40px;height:40px;margin-left:10px;cursor:pointer" @click="showPic(activity.autograph)"></img> + </el-col> + </el-row> + <el-row> + <span>现场图:</span> + <img slot="reference" v-for="(item,index) in activity.pictures" :src="item.url" :key="index" style="width:40px;height:40px;margin-left:10px;cursor:pointer" @click="showPic()"></img> + </el-row> + + </el-card> + </el-timeline-item> + </el-timeline> + </div> + <el-dialog :visible.sync="dialogVisible" :append-to-body="true"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </el-dialog> +</template> + +<script> + export default { + name: 'index', + data(){ + return{ + reviewInfoDialog:false, + dialogVisible:false, + dialogImageUrl:'', + activities: [] + } + }, + methods:{ + openReviewInfo(value){ + this.reviewInfoDialog = true + this.activities = JSON.parse(JSON.stringify(value.taskReviews)) + for(let i in this.activities){ + if(this.activities[i].pictures !== null && this.activities[i].pictures.length !== 0){ + this.activities[i].pictures = this.activities[i].pictures.map( item =>{ + return process.env.IMG_API + item + }) + } + this.activities[i].autograph = process.env.IMG_API + this.activities[i].autograph + } + + + }, + showPic(value){ + this.dialogVisible = true + this.dialogImageUrl = value + }, + } + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/safetyAction/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/safetyAction/index.vue new file mode 100644 index 0000000..fd9bbea --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/safetyAction/index.vue @@ -0,0 +1,118 @@ +<template> + <div> + <el-table :data="tasksecurity" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="content" label="安全措施" align="left"> + <template slot-scope="scope"> + <div v-if="scope.row.checktype === '判断'"> + {{scope.row.content}} + </div> + <div v-if="scope.row.checktype === '填空'"> + <span>{{scope.row.content.split('_')[0]}}</span> + <el-input style="width:50px" v-model="scope.row.num"></el-input> + <span>{{scope.row.content.split('_')[1]}}</span> + </div> + </template> + </el-table-column> + <el-table-column prop="checked" label="选项" align="center" width="300"> + <template slot-scope="scope"> + <el-radio v-model="scope.row.checked" :label="1">是</el-radio> + <el-radio v-model="scope.row.checked" :label="0">否</el-radio> + <el-radio v-model="scope.row.checked" :label="2">不涉及</el-radio> + </template> + </el-table-column> + </el-table> + </div> +</template> + +<script> +import { getSafetyActionList } from '@/api/task' + +export default { + props:['basicInformation'], + name: 'index', + data(){ + return{ + currentPage:0, + pageSize:1000, + tasksecurity:[], + safetyActionData:[ + // {id:0,selected:true,action:'动火设备内部构件清理干净,蒸汽吹扫或水洗合格,达到用火条件。',type:0}, + // {id:1,selected:null,actionOne:'',actionTwo:'',type:1}, + // {id:2,selected:null,action:'动火点10m范围内及动火点下部区域严禁同时进行可燃溶剂清洗和喷漆等作业。在受限空间内进行动火作业、临时用电作业时,不得同时进行刷漆、喷漆作业或使用可燃溶剂清洗等其他可能散发易燃气体、可燃液体的作业。',type:0}, + // {id:3,selected:null,action:'动火点周围的下水井、地漏、地沟、电缆沟等已清除易燃物,并已采取覆盖、铺沙、水封等手段进行隔离。',type:0}, + // {id:4,selected:null,action:'动火点周围易燃物已清除。',type:0}, + // {id:5,selected:null,action:'罐区内动火点同一围堰内和防火间距内的储罐不同时进行脱水作业,排凝等作业。',type:0}, + // {id:6,selected:null,action:'距动火点30m内严禁排放可燃气体,15m内严禁排放各类可燃液体。',type:0}, + // {id:7,selected:null,action:'电焊回路线已接在焊件上,把线未穿过下水井或其它设备搭接。',type:0}, + // {id:8,selected:null,action:'高处作业已采取防火花飞溅措施。',type:0}, + // {id:9,selected:null,action:'乙炔气瓶(直立放置)、氧气瓶与火源间的距离大于10m,二者间距不应小于5m。',type:0}, + // {id:10,selected:null,actionOne:'',actionTwo:'',actionThree:'',actionFour:'',type:2}, + // {id:11,selected:null,actionOne:'',type:3}, + ], + } + }, + methods:{ + async getSafeTyAction(){ + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['type'] = '动火作业负责检查项' + this.safetyActionData = [] + this.tasksecurity = [] + let res = await getSafetyActionList(params) + if(res.data.code === '200'){ + this.safetyActionData = res.data.result + this.tasksecurity = this.safetyActionData.map(item =>{ + return { + id:item.id, + taskcode: this.basicInformation.code, + content: item.content, + checked: item.check, + num: item.number, + confirmedby: "test", + checktype:item.checktype, + } + }) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }, + async getConstructionAction(){ + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['type'] = '施工单位负责检查项' + this.safetyActionData = [] + this.tasksecurity = [] + let res = await getSafetyActionList(params) + if(res.data.code === '200'){ + this.safetyActionData = res.data.result + this.tasksecurity = this.safetyActionData.map(item =>{ + return { + id:item.id, + taskcode: this.basicInformation.code, + content: item.content, + checked: item.check, + num: item.number, + confirmedby: "test", + checktype:item.checktype, + } + }) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/safetyAndRiskConfirm/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/safetyAndRiskConfirm/index.vue new file mode 100644 index 0000000..578b348 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/safetyAndRiskConfirm/index.vue @@ -0,0 +1,277 @@ +<template> + <div class="safetyAndRiskConfirm"> + <div class="safetyAndRiskConfirm_title"> + <span>{{"安全交底和风险告知确认卡"}}</span> + </div> + <el-descriptions class="margin-top" :column="2" border> + <el-descriptions-item :span="1"> + <template slot="label"> + <i class="el-icon-office-building"></i> + 作业单位 + </template> + <div class="safetyAndRiskConfirm_input">{{constructionUnit}}</div> + </el-descriptions-item> + <el-descriptions-item :span="1" class="test"> + <template slot="label"> + <i class="el-icon-user-solid"></i> + 车间项目负责人 + </template> + <div class="safetyAndRiskConfirm_input">{{director}}</div> + </el-descriptions-item> + <el-descriptions-item :span="2"> + <template slot="label" > + <i class="el-icon-notebook-2"></i> + 作业内容 + </template> + <el-input class="safetyAndRiskConfirm_input" v-model="taskRiskForm.content"></el-input> + </el-descriptions-item> + <el-descriptions-item :span="2"> + <template slot="label" > + <i class="el-icon-time"></i> + 作业时间 + </template> + <div class="safetyAndRiskConfirm_input">{{startTime + '-' + endTime}}</div> + </el-descriptions-item> + <el-descriptions-item :span="2"> + <template slot="label" > + <i class="el-icon-user"></i> + 作业人员 + </template> + <el-input class="safetyAndRiskConfirm_input"></el-input> + </el-descriptions-item> + </el-descriptions> + <el-descriptions title="基本要求" direction="vertical" :column="4" border> + </el-descriptions> + <div class="safetyAndRiskConfirm_top"> + <div class="safetyAndRiskConfirm_top_title"> + {{"作业前,项目负责人应对施工作业人员进行安全交底和风险告知,内容包括作业许可范围及作业环境、作业风险、防范措施(工艺、设备、个体防护等)、应急措施及其他注意事项。作业人员应按照风险告知内容,逐条对接确认,落实到位后方可作业。"}} + </div> + </div> + <div class="safetyAndRiskConfirm_middle"> + <div class="safetyAndRiskConfirm_middle_left"> + <div class="safetyAndRiskConfirm_middle_left_title">{{'安全交底和风险告知内容'}}</div> + </div> + <div class="safetyAndRiskConfirm_middle_right"> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"作业许可范围及作业环境:"}} + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.environment"></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"作业风险:"}} + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="hazard" readonly></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"防范措施(工艺、设备、个体防护等):"}} + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.preventive"></el-input> + + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"应急措施:"}} + </div> + <div class="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.emergency"></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_one"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"其他注意事项:"}} + </div> + <div calss="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea" v-model="taskRiskForm.other"></el-input> + </div> + </div> + <div class="safetyAndRiskConfirm_middle_right_two"> + <div class="safetyAndRiskConfirm_middle_right_one_top"> + {{"企业负责人确认:"}} + </div> + <div calss="safetyAndRiskConfirm_middle_right_one_text"> + <el-input type="textarea" :row="2" class="safetyAndRiskConfirm_middle_right_one_textarea"></el-input> + </div> + </div> + </div> + </div> + <div class="safetyAndRiskConfirm_bottom"> + <div class="safetyAndRiskConfirm_bottom_title"> + {{"我方所有施工作业人员已明确该项目的风险并清楚了危害、防范措施和其它注意事项。"}} + </div> + </div> + </div> +</template> + +<script> +export default { + name: 'index', + props:['basicInformation'], + data(){ + return{ + director:'', + startTime:'', + endTime:'', + constructionUnit:'', + hazard:'', + taskRiskForm:{ + id:'', + taskcode:'', + content:'', + environment:'', + preventive:'', + emergency:'', + other:'', + director:'', + taskdirector:'', + confirmat:'', + createdat:'', + createdby:'', + modifiedat:'', + modifiedby:'', + flag:'', + }, + } + }, + created(){ + this.getBasic() + }, + methods:{ + getBasic(){ + this.constructionUnit = this.basicInformation.constructionunit + this.director = this.basicInformation.director + this.startTime = this.basicInformation.starttime + this.endTime = this.basicInformation.endtime + this.hazard = this.basicInformation.hazard + this.taskRiskForm.taskcode = this.basicInformation.code + } + } +} +</script> + +<style scoped> +.safetyAndRiskConfirm{ + width:60%; + margin:0 auto; +} +.safetyAndRiskConfirm_title{ + padding-bottom: 15px; + font-weight: bold; + font-size: 25px; + text-align: center; +} +/deep/.el-descriptions__header{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:30px; + text-align: center; +} +/deep/.el-descriptions__title{ + text-align: center; + width:100%; + margin: 0px auto; +} +.safetyAndRiskConfirm_top{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:80px; + font-size: 18px; + text-indent: 2em; +} +.safetyAndRiskConfirm_top_title{ + position: relative; + top: 50%; /*偏移*/ + transform: translateY(-50%); +} +/*.safetyAndRiskConfirm_basic{*/ +/* border-left: 1px solid #EBEEF5;*/ +/* border-right: 1px solid #EBEEF5;*/ +/* border-bottom: 1px solid #EBEEF5;*/ +/* margin: 0px auto;*/ +/* height:80px;*/ +/* font-size: 18px;*/ +/* text-indent: 2em;*/ +/*}*/ +.safetyAndRiskConfirm_middle{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:550px; + font-size: 18px; +} +.safetyAndRiskConfirm_middle_left{ + height:100%; + width:10%; + border-right: 1px solid #EBEEF5; + display:inline-block; + float: left; +} +.safetyAndRiskConfirm_middle_left_title{ + padding-left: 12px; + padding-right: 12px; + text-align: center; + position: relative; + top: 50%; /*偏移*/ + transform: translateY(-50%); +} +.safetyAndRiskConfirm_middle_right{ + float: left; + height:100%; + width:90%; +} +.safetyAndRiskConfirm_middle_right_one{ + height:16.6%; + width:100%; + border-bottom: 1px solid #EBEEF5; +} +.safetyAndRiskConfirm_middle_right_two{ + height:16.6%; + width:100%; +} +.safetyAndRiskConfirm_middle_right_one_top{ + height:30%; + width:100%; + padding-top:5px; + padding-left: 5px; +} +.safetyAndRiskConfirm_middle_right_one_textarea{ + padding-left: 5px; + padding-right:5px ; + padding-top: 2px; +} +.safetyAndRiskConfirm_middle_right_one_text{ + height:70%; + width:100%; +} + +.safetyAndRiskConfirm_bottom{ + border-left: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; + margin: 0px auto; + height:100px; + font-size: 18px; +} +.safetyAndRiskConfirm_bottom_title{ + text-align: center; + position: relative; + top: 50%; /*偏移*/ + transform: translateY(-50%); +} +.test{ + /*border: 0px;*/ +} +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/components/taskInfo.vue b/src/views/specialWorkManage/specialWork/taskInfo/components/taskInfo.vue new file mode 100644 index 0000000..5a05d11 --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/components/taskInfo.vue @@ -0,0 +1,179 @@ +<template> + <div> + <el-dialog :title="title" :visible.sync="taskInfoDialog" :modal-append-to-body="false" :close-on-click-modal="false" width="70%"> + <el-tabs type="border-card" class="active" v-model="activeName"> + <el-tab-pane label="作业基本信息" name="hotFireBasic" v-if="ifHotFireBasic"> + <hot-fire-basic ref="hotFireBasic"></hot-fire-basic> + </el-tab-pane> + <el-tab-pane label="安全措施" name="safetyAction" v-if="ifSafetyAction"> + <safety-action ref="safetyAction" :basicInformation="basicForm"></safety-action> + </el-tab-pane> + <el-tab-pane label="安全交底和风险告知确认卡" name="safetyAndRiskConfirm" v-if="ifSafetyAndRisk"> + <safety-and-risk-confirm ref="safetyAndRiskConfirm" :basicInformation="basicForm"></safety-and-risk-confirm> + </el-tab-pane> + <el-tab-pane label="设备" name="equipment" v-if="ifSafetyAction"> + <equipment ref="equipment" :basicInformation="basicForm"></equipment> + </el-tab-pane> + <el-tab-pane label="作业人" name="fireMan" v-if="ifFireMan"> + <fire-man ref="fireMan" :basicInformation="basicForm"></fire-man> + </el-tab-pane> + <el-tab-pane label="文件" name="fileAndEquipment" v-if="ifFile"> + <file-and-equipment ref="fileAndEquipment" :basicInformation="basicForm"></file-and-equipment> + </el-tab-pane> + </el-tabs> + </el-dialog> + </div> + +</template> + +<script> +import fireMan from './fireMan/index' +import equipment from './equipment/index' +import fileAndEquipment from './fileAndEquipment/index' +import safetyAndRiskConfirm from './safetyAndRiskConfirm/index' +import safetyAction from './safetyAction/index' +import hotFireBasic from './hotFireBasic/index' + +export default { + name: 'taskInfo', + data(){ + return{ + title:'', + taskInfoDialog:false, + supervisorAndAnalystAgree:false, + supervisorAndAnalystRefuse:false, + relevantRefuse:false, + securityRefuse:false, + activeName:'hotFireBasic', + ifFile:false, + ifFireMan:false, + ifSafetyAction:false, + ifSafetyAndRisk:false, + ifHotFireBasic:true, + ifConstruction:false, + basicForm:{}, + constructionForm:{}, + } + }, + components:{ + hotFireBasic, + safetyAction, + safetyAndRiskConfirm, + fileAndEquipment, + equipment, + fireMan, + }, + methods:{ + openTaskInfo(value,title){ + this.taskInfoDialog = true + this.activeName = 'hotFireBasic' + if(title === '查看'){ + this.title = '查看' + this.ifSafetyAction = true + this.ifSafetyAndRisk = true + this.ifFireMan = true + this.ifFile = true + this.ifHotFireBasic = true + this.basicForm = JSON.parse(JSON.stringify(value)) + setTimeout(()=> { + this.$refs.hotFireBasic.resetFormRules() + this.$refs.hotFireBasic.taskBasicForm = JSON.parse(JSON.stringify(value)) + this.$refs.safetyAction.tasksecurity = JSON.parse(JSON.stringify(value)).taskSecurities + this.$refs.safetyAndRiskConfirm.taskRiskForm = JSON.parse(JSON.stringify(value)).taskRisk + this.$refs.equipment.equipmentData = JSON.parse(JSON.stringify(value)).taskEquipments + this.$refs.fireMan.taskWorkers = JSON.parse(JSON.stringify(value)).taskWorkers + let form = JSON.parse(JSON.stringify(value)).subTaskInfos + this.$refs.hotFireBasic.taskBasicForm.type = '' + this.$refs.hotFireBasic.taskBasicForm.category = '' + this.$refs.hotFireBasic.taskBasicForm.firelevel = '' + this.$refs.hotFireBasic.taskBasicForm.checked = '' + this.$refs.hotFireBasic.taskBasicForm.spacecategory = '' + this.$refs.hotFireBasic.taskBasicForm.spacename = '' + this.$refs.hotFireBasic.taskBasicForm.spacemedium = '' + this.$refs.hotFireBasic.taskBasicForm.acibase = '' + this.$refs.hotFireBasic.taskBasicForm.hoistinglevel = '' + this.$refs.hotFireBasic.taskBasicForm.hoistingweight = '' + this.$refs.hotFireBasic.taskBasicForm.soildepth = '' + this.$refs.hotFireBasic.taskBasicForm.soilarea = '' + this.$refs.hotFireBasic.taskBasicForm.soilfile = [] + this.$refs.hotFireBasic.taskBasicForm.breakreason = '' + this.$refs.hotFireBasic.taskBasicForm.breakfile = [] + this.$refs.hotFireBasic.taskBasicForm.workheight = '' + this.$refs.hotFireBasic.taskBasicForm.heightlevel = '' + this.$refs.hotFireBasic.taskBasicForm.electricityarea = '' + this.$refs.hotFireBasic.taskBasicForm.voltage = '' + this.$refs.hotFireBasic.taskBasicForm.power = '' + this.$refs.hotFireBasic.taskBasicForm.pipename = '' + this.$refs.hotFireBasic.taskBasicForm.pipemedium = '' + this.$refs.hotFireBasic.taskBasicForm.pipetemperature = '' + this.$refs.hotFireBasic.taskBasicForm.pipepressure = '' + this.$refs.hotFireBasic.taskBasicForm.blindboardmaterial = '' + this.$refs.hotFireBasic.taskBasicForm.blindboardspecification = '' + this.$refs.hotFireBasic.taskBasicForm.blindboardnumber = '' + this.$refs.hotFireBasic.taskBasicForm.commander = '' + this.$refs.hotFireBasic.taskBasicForm.blindboardlocation = [] + this.$refs.hotFireBasic.taskBasicForm.firetype = '' + for (let i in form) { + if (form[i].type === '受限空间作业') { + this.$refs.hotFireBasic.activeNames.push('1') + this.$refs.hotFireBasic.ifIncludeArea = 1 + this.$refs.hotFireBasic.taskBasicForm.spacecategory = form[i].spacecategory + this.$refs.hotFireBasic.taskBasicForm.spacename = form[i].spacename + this.$refs.hotFireBasic.taskBasicForm.spacemedium = form[i].spacemedium + this.$refs.hotFireBasic.taskBasicForm.acibase = form[i].acibase + } else if (form[i].type === '吊装作业') { + this.$refs.hotFireBasic.activeNames.push('2') + this.$refs.hotFireBasic.ifHoisting = 1 + this.$refs.hotFireBasic.taskBasicForm.hoistinglevel = form[i].hoistinglevel + this.$refs.hotFireBasic.taskBasicForm.hoistingweight = form[i].hoistingweight + } else if (form[i].type === '动土作业') { + this.$refs.hotFireBasic.activeNames.push('3') + this.$refs.hotFireBasic.ifBuilding = 1 + this.$refs.hotFireBasic.taskBasicForm.soildepth = form[i].soildepth + this.$refs.hotFireBasic.taskBasicForm.soilarea = form[i].soilarea + this.$refs.hotFireBasic.taskBasicForm.soilfile = form[i].soilfile + } else if (form[i].type === '断路作业') { + this.$refs.hotFireBasic.activeNames.push('4') + this.$refs.hotFireBasic.ifIncludeRoad = 1 + this.$refs.hotFireBasic.taskBasicForm.breakreason = form[i].breakreason + this.$refs.hotFireBasic.taskBasicForm.breakfile = form[i].breakfile + } else if (form[i].type === '高处作业') { + this.$refs.hotFireBasic.activeNames.push('5') + this.$refs.hotFireBasic.ifIncludeHigh = 1 + this.$refs.hotFireBasic.taskBasicForm.heightlevel = form[i].heightlevel + this.$refs.hotFireBasic.taskBasicForm.workheight = form[i].workheight + } else if (form[i].type === '临时用电作业') { + this.$refs.hotFireBasic.activeNames.push('6') + this.$refs.hotFireBasic.ifIncludeElectricity = 1 + this.$refs.hotFireBasic.taskBasicForm.electricityarea = form[i].electricityarea + this.$refs.hotFireBasic.taskBasicForm.voltage = form[i].voltage + this.$refs.hotFireBasic.taskBasicForm.power = form[i].power + } else if (form[i].type === '盲板抽堵作业') { + this.$refs.hotFireBasic.activeNames.push('7') + this.$refs.hotFireBasic.ifIncludePump = 1 + this.$refs.hotFireBasic.taskBasicForm.pipename = form[i].pipename + this.$refs.hotFireBasic.taskBasicForm.pipemedium = form[i].pipemedium + this.$refs.hotFireBasic.taskBasicForm.pipetemperature = form[i].pipetemperature + this.$refs.hotFireBasic.taskBasicForm.pipepressure = form[i].pipepressure + this.$refs.hotFireBasic.taskBasicForm.blindboardmaterial = form[i].blindboardmaterial + this.$refs.hotFireBasic.taskBasicForm.blindboardspecification = form[i].blindboardspecification + this.$refs.hotFireBasic.taskBasicForm.blindboardnumber = form[i].blindboardnumber + this.$refs.hotFireBasic.taskBasicForm.blindboardlocation = form[i].blindboardlocation + } else { + this.$refs.hotFireBasic.activeNames.push('8') + this.$refs.hotFireBasic.ifIncludeFire = 1 + this.$refs.hotFireBasic.taskBasicForm.firelevel = form[i].level + this.$refs.hotFireBasic.taskBasicForm.firetype = form[i].firetype + } + } + this.$refs.hotFireBasic.giveTaskBasic(this.$refs.hotFireBasic.taskBasicForm) + }) + } + }, + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/specialWork/taskInfo/index.vue b/src/views/specialWorkManage/specialWork/taskInfo/index.vue new file mode 100644 index 0000000..7dc60ad --- /dev/null +++ b/src/views/specialWorkManage/specialWork/taskInfo/index.vue @@ -0,0 +1,528 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>开始时间:</span> + <el-date-picker value-format="yyyy-MM-dd HH:mm" placeholder="请选择开始时间" type="datetime" v-model="listQuery.starttime" style="width:200px"> + </el-date-picker> + </div> + <div class="basic_search"> + <span>结束时间:</span> + <el-date-picker value-format="yyyy-MM-dd HH:mm" placeholder="请选择结束时间" type="datetime" v-model="listQuery.endtime" style="width:200px"> + </el-date-picker> + </div> + <div class="basic_search"> + <span>部门:</span> + <el-input v-model="listQuery.department" style="width:200px"> + </el-input> + </div> + <div class="basic_search"> + <span>施工单位:</span> + <el-input v-model="listQuery.constructionunit" style="width:200px"> + </el-input> + </div> + <div class="basic_search"> + <span>作业类型:</span> + <el-select v-model="listQuery.level" clearable style="width:200px"> + <el-option + v-for="item in taskTypeList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </div> + <div class="basic_search"> + <span>审批状态:</span> + <el-select v-model="listQuery.status" clearable style="width:200px"> + <el-option + v-for="item in statusList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </div> + <div class="basic_search"> + <span>作业状态:</span> + <el-select v-model="listQuery.flag" clearable style="width:200px"> + <el-option + v-for="item in flagList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </div> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="taskData" + border + fit + highlight-current-row + style="width: 100%;" + @sort-change="sortChange" + > + <el-table-column label="单位名称" prop="unit" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="单位代码" prop="code" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="申请人" prop="applicant" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="施工单位" prop="constructionunit" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="作业内容" prop="area" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="开始时间" prop="starttime" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="结束时间" prop="endtime" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="作业级别" prop="level" align="center" sortable="custom"> + <template slot-scope="scope"> + <div v-for="item in levelList"> + <div v-if="scope.row.level === item.id"> + <span>{{item.name}}</span> +<!-- <el-tag v-if="scope.row.level ===2" type="success">{{item.name}}</el-tag>--> +<!-- <el-tag v-if="scope.row.level ===1" type="warning">{{item.name}}</el-tag>--> +<!-- <el-tag v-if="scope.row.level ===0" type="danger">{{item.name}}</el-tag>--> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="任务审批状态" prop="status" align="center" sortable="custom"> + <template slot-scope="scope"> + <div v-for="item in statusList"> + <div v-if="scope.row.status === item.id"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="作业状态" prop="flag" align="center" sortable="custom"> + <template slot-scope="scope"> + <div v-for="item in flagList"> + <div v-if="scope.row.flag === item.id"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="创建时间" prop="createdat" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="最近修改时间" prop="modifiedat" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="showReviewInfo(scope.row)" v-if="scope.row.taskReviews.length !== 0">查看审批</el-button> + <el-button type="text" @click="editWatch(scope.row,'监护人')" v-if="scope.row.approversupervisor !== '' && scope.row.approversupervisor !== null && applicant === scope.row.applicant">监护人</el-button> + <el-button type="text" @click="editWorker(scope.row,'作业人')" v-if="scope.row.taskWorkers.length !== 0 && applicant === scope.row.applicant">作业人</el-button> + <el-button type="text" @click="showTaskInfo(scope.row,'查看')">查看</el-button> + <el-button type="text" @click="downloadFile(scope.row)" v-if="scope.row.status === 7">下载</el-button> + <el-tooltip class="item" effect="dark" content="点击重新生成票证" placement="top-end"> + <el-button type="text" @click="regenerateWorkCertHandler(scope.row)" icon="el-icon-refresh" v-if="scope.row.status === 7"></el-button> + </el-tooltip> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <task-info ref="taskInfo" @getinfo="getTaskData"></task-info> + <el-dialog :visible.sync="watchDialog" :modal-append-to-body="false" :close-on-click-modal="false" width="25%"> + <div align="center"> + <span>原监护人:</span> + <el-input v-model="supervisor" style="width:200px" readonly> + </el-input> + </div> + <div align="center" style="padding-top: 20px"> + <span>现监护人:</span> + <el-select v-model="supervisorForm.approversupervisor"> + <el-option + v-for="item in workerList" + :key="item.id" + :value="item.realname" + :label="item.realname" + > + </el-option> + </el-select> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="submitEditSupervisor()">确定</el-button> + </div> + </div> + </el-dialog> + <el-dialog :visible.sync="workerDialog" :modal-append-to-body="false" :close-on-click-modal="false" width="70%"> + <div style="padding-bottom: 10px"> + <el-button type="primary" @click="addTaskWorker">添加作业人</el-button> + </div> + <el-table :data="taskWorkers" border fit highlight-current-row style="width: 100%;" :header-cell-style="{'text-align':'center'}"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column prop="taskcode" label="作业编号" align="left"> + </el-table-column> + <el-table-column prop="unit" label="作业类型" align="left"> + <template slot-scope="scope"> + <el-select v-model="scope.row.tasktype"> + <el-option + v-for="item in taskTypeList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column prop="unit" label="施工单位" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.unit"></el-input> + </template> + </el-table-column> + <el-table-column prop="worker" label="作业人姓名" align="left"> + <template slot-scope="scope"> + <el-select v-model="scope.row.worker"> + <el-option + v-for="item in workerList" + :key="item.id" + :value="item.realname" + :label="item.realname" + > + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column prop="branch" label="特种作业工种" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.branch"></el-input> + </template> + </el-table-column> + <el-table-column prop="number" label="特种作业证号" align="left"> + <template slot-scope="scope"> + <el-input v-model="scope.row.number"></el-input> + </template> + </el-table-column> + <el-table-column label="操作" align="center"> + <template slot-scope="scope"> + <el-button type="text" @click="deleteWorker(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div align="center" style="padding-top: 20px"> + <el-button type="primary" @click="submitWorker">确定</el-button> + </div> + </el-dialog> + <review-info ref="reviewInfo"></review-info> + </div> +</template> + +<script> +import taskInfo from './components/taskInfo' +import { mapGetters } from 'vuex' +import { computePageCount } from '../../../../utils' +import { changeSupervisor, changeWorker, lookTaskList, submitTask ,regenerateWorkCert} from '../../../../api/task' +import { getUnitList } from '../../../../api/unitManage' +import { concreteUser, userList } from '@/api/user' +import { parseError } from '../../../../utils/messageDialog' +import reviewInfo from './components/reviewInfo/index' + +export default { + name: 'index', + filters: { + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + applicant:'', + taskData: [], + workerList:[], + companyList:[], + taskWorkers:[], + listLoading: false, + watchDialog:false, + workerDialog:false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + title:'', + supervisor:'', + code:'', + supervisorForm:{ + taskcode:'', + approversupervisor:'' + }, + taskTypeList:[ + {id:0,name:'受限空间作业'}, + {id:1,name:'吊装作业'}, + {id:2,name:'动土作业'}, + {id:3,name:'断路作业'}, + {id:4,name:'高处作业'}, + {id:5,name:'临时用电作业'}, + {id:6,name:'盲板抽堵作业'}, + {id:7,name:'动火作业'}, + ], + levelList:[{id:2,name:'特级'},{id:1,name:'一级'},{id:0,name:'二级'},], + statusList:[ + {id:0,name:'已驳回'}, + {id:1,name:'未提交'}, + {id:2,name:'已提交'}, + {id:3,name:'施工单位已确认'}, + {id:4,name:'动火部位负责人审批通过'}, + {id:5,name:'相关部门审批通过'}, + {id:6,name:'安全部门审批通过'}, + {id:7,name:'审批通过'}, + ], + flagList:[ + {id:0,name:'等待整改'}, + {id:1,name:'作业中止'}, + {id:2,name:'等待检查'}, + {id:3,name:'等待开始'}, + {id:4,name:'作业中'}, + {id:5,name:'作业完成'}, + ], + listQuery:{ + starttime:'', + endtime:'', + department:'', + constructionunit:'', + level:'', + status:'', + flag:'', + }, + } + }, + components:{ + taskInfo, + reviewInfo + }, + created() { + this.getTaskData() + this.getWorker() + }, + methods: { + async getTaskData(){ + this.applicant = sessionStorage.getItem('realname') + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['order'] = this.orderValue + params['sort'] = this.sortValue + for (const i in this.listQuery) { + console.log(i) + params[i] = this.listQuery[i] + } + let res = await lookTaskList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.taskData = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + this.listLoading = false + }, + showReviewInfo(value){ + this.$refs.reviewInfo.openReviewInfo(value) + }, + editWatch(value){ + this.watchDialog = true + this.supervisor = value.approversupervisor + this.supervisorForm.taskcode = value.code + this.supervisorForm.approversupervisor = '' + }, + editWorker(value){ + this.workerDialog = true + this.code = value.code + this.taskWorkers = value.taskWorkers + }, + addTaskWorker(){ + this.taskWorkers.push({ + createdat: "", + createdby: "", + flag: 0, + id: 0, + modifiedat: "", + modifiedby: "", + taskcode: this.code, + unit: "", + worker: "", + branch: "", + number: "", + tasktype:'', + }) + }, + deleteWorker(val){ + this.taskWorkers.splice(val,1) + }, + submitWorker(){ + this.$confirm('更换监护人,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + changeWorker(this.taskWorkers).then( (res)=>{ + if(res.data.code === '200'){ + this.workerDialog = false + this.getTaskData() + this.$notify({ + title:'成功', + message:'提交成功', + type:'success', + duration:2000, + }) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }) + }).catch(error =>{ + parseError({ error: error, vm: this }) + }) + }, + + submitEditSupervisor(){ + this.$confirm('更换监护人,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + changeSupervisor(this.supervisorForm).then( (res)=>{ + if(res.data.code === '200'){ + this.watchDialog = false + this.getTaskData() + this.$notify({ + title:'成功', + message:'提交成功', + type:'success', + duration:2000, + }) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }) + }).catch(error =>{ + parseError({ error: error, vm: this }) + }) + }, + showTaskInfo(value,title){ + this.$refs.taskInfo.openTaskInfo(value,title) + }, + submitTask(row){ + this.$confirm('提交此条任务,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + submitTask({id:row.id}).then( ()=>{ + this.getTaskData() + this.$notify({ + title:'成功', + message:'提交成功', + type:'success', + duration:2000, + }) + }) + }) + }, + + + downloadFile(val){ + if(val.path === null || val.path === ''){ + this.$message({ + type:'warning', + message:'文件未生成' + }) + }else{ + window.open(process.env.IMG_API + val.path,'_blank') + } + }, + regenerateWorkCertHandler(row){ + this.$confirm('是否确认重新生成票证','提示',{ + confirmButtonText:'确认', + cancelButtonText:'取消', + type:'warning', + }).then(()=>{ + regenerateWorkCert(row.code).then(res=>{ + if (res.data.code === '200') { + this.$message({ + type:'success', + message:'重新生成成功' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message, + }) + } + + }) + }) + }, + + + + refreshHandle(){ + this.getTaskData() + }, + handleSizeChange(val){ + this.pageSize = val + this.getTaskData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getTaskData() + }, + async getWorker(){ + let params = {} + params['company'] = sessionStorage.getItem('company') + params['department'] = sessionStorage.getItem('department') + let res = await concreteUser(params) + if(res.data.code === '200'){ + this.workerList = res.data.result + } + }, + sortChange(params){ + this.sortValue = params.sort + this.orderValue = params.order + this.getTaskData() + } + + } +} +</script> +<style scoped> +.basic_search{ + display:inline-block; + padding-bottom: 10px; +} +</style> diff --git a/src/views/specialWorkManage/workPlan/form/dialog.vue b/src/views/specialWorkManage/workPlan/form/dialog.vue new file mode 100644 index 0000000..64d04b0 --- /dev/null +++ b/src/views/specialWorkManage/workPlan/form/dialog.vue @@ -0,0 +1,224 @@ +<template> + <el-dialog :title="title" :visible.sync="dialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="650px"> + <el-form :model="dataForm" label-position="right" label-width="100px" style="margin-left:50px;width:600px;"> + <el-row > + <el-col :span="20"> + <el-form-item label="预约时间:" > + <el-date-picker + v-model="dataForm.appointment" + value-format="yyyy-MM-dd" + align="right" + type="date" + placeholder="选择日期" + :disabled="isView" + :picker-options="pickerOptions"> + </el-date-picker> + </el-form-item> + </el-col> + + </el-row> + <el-row > + <el-col :span="10"> + <el-form-item label="动火作业:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.fire" style="width: 100px" ></el-input-number> + </el-form-item> + </el-col> + <el-col :span="10"> + <el-form-item label="受限空间:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.space" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col :span="10"> + <el-form-item label="吊装作业:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.hoisting" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + <el-col :span="10"> + <el-form-item label="动土作业:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.soild" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col :span="10"> + <el-form-item label="断路作业:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.breaks" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + <el-col :span="10"> + <el-form-item label="高处作业:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.high" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col :span="10"> + <el-form-item label="临时用电:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.electricity" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + <el-col :span="10"> + <el-form-item label="盲板作业:" > + <el-input-number :controls="false" :disabled="isView" :min="0" v-model="dataForm.blindboard" style="width: 100px"></el-input-number> + </el-form-item> + </el-col> + </el-row> + + </el-form> + <div align="right" style="padding-right: 30px;margin-top: 10px;" v-if="!isView"> + <el-button @click="dialogVisible=false">取消</el-button> + <el-button type="primary" @click="submit(title)" :disabled="isSending">确认</el-button> + </div> + </el-dialog> +</template> + +<script> +import {reserveAdd,reserveMod} from '../../../../api/workPlan' + +export default { + name: 'index', + data() { + return { + appointment: '', + dialogVisible: false, + isSending: false, + title: '', + isView: '', + dataForm: { + id: '', + fire: '', + space: '', + hoisting: '', + soild: '', + breaks: '', + high: '', + electricity: '', + blindboard: '', + appointment: '' + + }, + pickerOptions: { + shortcuts: [ + { + text: '明天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() + 3600 * 1000 * 24) + picker.$emit('pick', date) + } + }, + { + text: '后天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() + 2 * 3600 * 1000 * 24) + picker.$emit('pick', date) + } + }, + { + text: '大后天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() + 3 * 3600 * 1000 * 24) + picker.$emit('pick', date) + } + } + + ] + } + + } + }, + methods: { + showAddDialog(title) { + this.title = title + this.isView = false + this.dialogVisible = true + }, + showViewDialog(row, title) { + this.title = title + this.isView = true + this.dataForm.fire = row.fire + this.dataForm.space = row.space + this.dataForm.hoisting = row.hoisting + this.dataForm.soild = row.soild + this.dataForm.breaks = row.breaks + this.dataForm.high = row.high + this.dataForm.electricity = row.electricity + this.dataForm.blindboard = row.blindboard + this.dataForm.appointment = row.appointment + this.dialogVisible = true + + }, + showUpdateDialog(row, title) { + this.title = title + this.isView = false + this.dataForm.id = row.id + this.dataForm.fire = row.fire + this.dataForm.space = row.space + this.dataForm.hoisting = row.hoisting + this.dataForm.soild = row.soild + this.dataForm.breaks = row.breaks + this.dataForm.high = row.high + this.dataForm.electricity = row.electricity + this.dataForm.blindboard = row.blindboard + this.dataForm.appointment = row.appointment + this.dialogVisible = true + + }, + submit(title) { + if ('新增' === title) + this.post(reserveAdd) + if ('编辑' === title) + this.post(reserveMod) + }, + + post(func) { + this.isSending = true + func(this.dataForm) + .then(res => { + if (res.data.code === '200') { + this.dialogVisible = false + this.$emit('refresh') + this.$message({ + message: '操作成功', + type: 'success' + }) + } else { + this.$message({ + message: res.data.message, + type: 'warning' + }) + } + }) + .finally(res => { + this.isSending = false + } + ) + }, + reset() { + this.dataForm = { + id: '', + fire: '', + space: '', + hoisting: '', + soild: '', + breaks: '', + high: '', + electricity: '', + blindboard: '', + appointment: '' + + } + } + } +} +</script> +<style scoped> +.basic_search{ + display:inline-block; + padding-bottom: 10px; +} +</style> diff --git a/src/views/specialWorkManage/workPlan/index.vue b/src/views/specialWorkManage/workPlan/index.vue new file mode 100644 index 0000000..ea834ff --- /dev/null +++ b/src/views/specialWorkManage/workPlan/index.vue @@ -0,0 +1,13 @@ +<template> + <router-view></router-view> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/specialWorkManage/workPlan/reserve.vue b/src/views/specialWorkManage/workPlan/reserve.vue new file mode 100644 index 0000000..f9b1510 --- /dev/null +++ b/src/views/specialWorkManage/workPlan/reserve.vue @@ -0,0 +1,238 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search" v-if="userDepartment !== 'null' && userDepartment != null && userDepartment !== ''"> + <span class="span-filter-label">部门</span> + <el-input v-model="userDepartment" disabled style="width:200px"> + </el-input> + </div> + + <div class="basic_search"> + <span class="span-filter-label">预约日期</span> + <el-date-picker + v-model="appointment" + value-format="yyyy-MM-dd" + align="right" + type="date" + placeholder="选择日期" + :picker-options="pickerOptions"> + </el-date-picker> + </div> + <div class="basic_search"> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-plus" v-if="isDepartment === '1'" @click="openAddDialog('新增')">新增</el-button> + </div> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="taskData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column style="width: 200px;" label="预约时间" prop="appointment" align="center"> + </el-table-column> + <el-table-column label="动火" prop="fire" align="center"> + </el-table-column> + <el-table-column label="受限空间" prop="space" align="center"> + </el-table-column> + <el-table-column label="吊装作业" prop="hoisting" align="center"> + </el-table-column> + <el-table-column label="动土作业" prop="soild" align="center"> + </el-table-column> + <el-table-column label="断路作业" prop="breaks" align="center"> + </el-table-column> + <el-table-column label="高处作业" prop="high" align="center"> + </el-table-column> + <el-table-column label="临时用电" prop="electricity" align="center"> + </el-table-column> + <el-table-column label="盲板作业" prop="blindboard" align="center"> + </el-table-column> + + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button v-if="isDepartment === '1'" type="text" @click="openUpdateDialog(scope.row,'编辑')" >编辑</el-button> + <el-button type="text" @click='openViewDialog(scope.row,"查看")'>查看</el-button> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="filter.pageIndex" + :page-sizes="[10, 20, 30, 50]" + :page-size="filter.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <dialogs ref="dialogs" @refresh="getPageList"></dialogs> + </div> +</template> + +<script> +import { mapGetters } from 'vuex' +import { computePageCount } from '../../../utils' +import {reservePageList ,reserveAdd} from '../../../api/workPlan' +import { getAllDepartment } from '@/api/departmentManage' +import Cookies from 'js-cookie' +import dialogs from './form/dialog' + +export default { + name: 'index', + filters: {}, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + components: { + dialogs + }, + data() { + return { + tableKey: 0, + taskData: [], + department: [], + isDepartment:'', + userDepartment:'', + appointment: '', + listLoading: false, + recordTotal: 0, + isSending: false, + filter: { + pageIndex: 1, + pageSize: 10, + filter: { + department: '', + starttime: '', + endtime: '' + } + }, + dataForm: { + id: '', + fire: '', + space: '', + hoisting: '', + soild: '', + breaks: '', + high: '', + electricity: '', + blindboard: '', + appointment: '' + + }, + pickerOptions: { + shortcuts: [{ + text: '今天', + onClick(picker) { + picker.$emit('pick', new Date()) + } + }, { + text: '昨天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() - 3600 * 1000 * 24) + picker.$emit('pick', date) + } + }, { + text: '明天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() + 3600 * 1000 * 24) + picker.$emit('pick', date) + } + }] + } + + } + }, + created(){ + this.initDepartmentFlag() + }, + mounted() { + this.getPageList() + this.getDepartmentList() + }, + methods: { + async getPageList() { + this.listLoading = true + this.filter.filter.starttime = '' + this.filter.filter.endtime = '' + if (this.appointment != null && this.appointment !== '') { + this.filter.filter.starttime = this.appointment + ' 00:00:00' + this.filter.filter.endtime = this.appointment + ' 23:59:59' + } + let res = await reservePageList(this.filter) + if (res.data.code === '200') { + this.recordTotal = res.data.result.total + this.pageSize = res.data.result.pageSize + this.currentPage = res.data.result.pageIndex + this.taskData = res.data.result.records + } else { + this.$message({ + message: res.data.message, + type: 'warning' + }) + } + this.listLoading = false + }, + async getDepartmentList() { + getAllDepartment() + .then(res => { + if (res.data.code === '200') + this.department = res.data.result + else + this.$message({message: res.data.message,type: 'warning'}) + }) + }, + + openAddDialog(title) { + this.$refs.dialogs.showAddDialog(title) + }, + openViewDialog(row, title) { + this.$refs.dialogs.showViewDialog(row, title) + }, + openUpdateDialog(row, title) { + this.$refs.dialogs.showUpdateDialog(row, title) + }, + refreshHandle() { + this.getPageList() + }, + handleSizeChange(val) { + this.filter.pageSize = val + this.getPageList() + }, + handleCurrentChange(val) { + this.filter.pageIndex = val + this.getPageList() + }, + initDepartmentFlag(){ + this.isDepartment = sessionStorage.getItem('isdepartment') + this.userDepartment = Cookies.get('department') + } + + } +} +</script> +<style scoped> +.basic_search{ + display:inline-block; + padding-bottom: 10px; +} + +.span-filter-label { + font-size: 15px; + color: #606266; + margin-right: 4px; + margin-left: 7px; +} +</style> diff --git a/src/views/specialWorkManage/workPlan/statistics.vue b/src/views/specialWorkManage/workPlan/statistics.vue new file mode 100644 index 0000000..b737e5e --- /dev/null +++ b/src/views/specialWorkManage/workPlan/statistics.vue @@ -0,0 +1,216 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span class="span-filter-label">部门</span> + <el-select v-model="filter.filter.department" filterable placeholder="请选择" style="width:200px"> + <el-option + v-for="item in department" + :key="item.department" + :label="item.department" + :value="item.department"> + </el-option> + </el-select> + </div> + + <div class="basic_search"> + <span class="span-filter-label">预约日期</span> + <el-date-picker + v-model="filter.filter.appointment" + value-format="yyyy-MM-dd" + align="right" + type="date" + placeholder="选择日期" + :picker-options="pickerOptions"> + </el-date-picker> + </div> + + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="tableData" + border + fit + highlight-current-row + style="width: 100%;" + > + + <el-table-column style="width: 200px;" prop="appointment" align="center"> + </el-table-column> + <el-table-column style="width: 200px;" label="部门" prop="department" align="center"> + </el-table-column> + <el-table-column label="动火" prop="fire" align="center"> + </el-table-column> + <el-table-column label="受限空间" prop="space" align="center"> + </el-table-column> + <el-table-column label="吊装作业" prop="hoisting" align="center"> + </el-table-column> + <el-table-column label="动土作业" prop="soild" align="center"> + </el-table-column> + <el-table-column label="断路作业" prop="breaks" align="center"> + </el-table-column> + <el-table-column label="高处作业" prop="high" align="center"> + </el-table-column> + <el-table-column label="临时用电" prop="electricity" align="center"> + </el-table-column> + <el-table-column label="盲板作业" prop="blindboard" align="center"> + </el-table-column> + + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="filter.pageIndex" + :page-sizes="[10, 20, 30, 50]" + :page-size="filter.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + + </div> +</template> + +<script> +import { mapGetters } from 'vuex' +import { computePageCount } from '../../../utils' +import {reserveStatistics} from '../../../api/workPlan' +import Cookies from 'js-cookie' +import { getAllDepartment } from '@/api/departmentManage' + +export default { + name: 'index', + filters: {}, + computed: { + ...mapGetters([ + 'userType' + ]), + tableData() { + const tbody = this.statisticsData + return tbody.length ? [...tbody, ...this.tableFoot] : [] + } + }, + data() { + return { + tableKey: 0, + statisticsData: [], + department: [], + appointment: '', + listLoading: false, + recordTotal: 0, + isSending: false, + filter: { + pageIndex: 1, + pageSize: 10, + filter: { + department: '', + appointment: '' + } + }, + tableFoot: [], + dataForm: { + id: '', + fire: '', + space: '', + hoisting: '', + soild: '', + breaks: '', + high: '', + electricity: '', + blindboard: '', + appointment: '' + + }, + pickerOptions: { + shortcuts: [{ + text: '今天', + onClick(picker) { + picker.$emit('pick', new Date()) + } + }, { + text: '昨天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() - 3600 * 1000 * 24) + picker.$emit('pick', date) + } + }, { + text: '明天', + onClick(picker) { + const date = new Date() + date.setTime(date.getTime() + 3600 * 1000 * 24) + picker.$emit('pick', date) + } + }] + } + + } + }, + mounted() { + this.getDepartmentList() + this.getPageList() + }, + methods: { + async getPageList() { + this.listLoading = true + let res = await reserveStatistics(this.filter) + if (res.data.code === '200') { + this.recordTotal = res.data.result.total + this.pageSize = res.data.result.pageSize + this.currentPage = res.data.result.pageIndex + this.statisticsData = res.data.result.records + res.data.result.extension.appointment = '总计' + this.tableFoot = [res.data.result.extension] + } else { + this.$message({ + message: res.data.message, + type: 'warning' + }) + } + this.listLoading = false + }, + async getDepartmentList() { + getAllDepartment() + .then(res => { + if (res.data.code === '200') + this.department = res.data.result + else + this.$message({ message: res.data.message,type: 'warning'}) + + }) + }, + refreshHandle() { + this.getPageList() + }, + handleSizeChange(val) { + this.filter.pageSize = val + this.getPageList() + }, + handleCurrentChange(val) { + this.filter.pageIndex = val + this.getPageList() + }, + + } +} +</script> +<style scoped> +.basic_search{ + display:inline-block; + padding-bottom: 10px; +} +.span-filter-label { + font-size: 15px; + color: #606266; + margin-right: 4px; + margin-left: 7px; +} +</style> diff --git a/src/views/systemManage/appFile/index.vue b/src/views/systemManage/appFile/index.vue new file mode 100644 index 0000000..cf26ca0 --- /dev/null +++ b/src/views/systemManage/appFile/index.vue @@ -0,0 +1,469 @@ +<template> + <div class="app-container"> + <div> + <el-select v-model="queryForm.filetype" clearable placeholder="请选择文件类型"> + <el-option + class="filter-item" + @keyup.enter.native="queryHandle" + v-for="item in fileType" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + <el-button v-if="getBtnPermission('add')" class="filter-item" style="margin-left: 10px;" type="primary" + icon="el-icon-plus" @click="showCreateHandle">新增 + </el-button> + <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-refresh" + @click="refreshHandle">刷新 + </el-button> + <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search" + @click="queryHandle"/> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="appFileData" + border + fit + highlight-current-row + style="width: 100%;" + @sort-change="sortChange" + > + <el-table-column type="index" label="序号" align="center" width="80"/> + <el-table-column label="文件类型" prop="filetype" align="center" sortable="custom"> + <template slot-scope="scope"> + <span>{{ scope.row.filetype }}</span> + </template> + </el-table-column> + <el-table-column label="文件名称" prop="filename" align="center" sortable="custom"> + <template slot-scope="scope"> + <span>{{ scope.row.filename }}</span> + </template> + </el-table-column> + <el-table-column label="文件链接" prop="fileurl" align="center" sortable="custom"> + <template slot-scope="scope"> + <span style="color:blue;cursor:pointer" + @click="downloadHandle(prefixUrl +scope.row.fileurl)" + >{{ prefixUrl + scope.row.fileurl }}</span> + </template> + </el-table-column> + <el-table-column label="版本号" prop="version" align="center" sortable="custom"> + <template slot-scope="scope"> + <span>{{ scope.row.version }}</span> + </template> + </el-table-column> + <el-table-column label="备注" prop="remark" align="center" sortable="custom"> + <template slot-scope="scope"> + <span>{{ scope.row.remark }}</span> + </template> + </el-table-column> + <el-table-column label="创建时间" prop="created" align="center" sortable="custom"> + <template slot-scope="scope"> + <span>{{ scope.row.created | parseTime('{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + <el-table-column label="更新时间" prop="updated" align="center" sortable="custom"> + <template slot-scope="scope"> + <span>{{ scope.row.updated | parseTime('{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" width="240" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button v-if="getBtnPermission('edit')" type="text" @click="showEditHandle(scope.row)">编辑</el-button> + <el-button v-if="getBtnPermission('delete')" type="text" style="color:red;" @click="deleteHandle(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <el-dialog :title="dialogStatus==='create'?'新增':'编辑'" :visible.sync="dialogFormVisible" + :modal-append-to-body="false" :close-on-click-modal="false" width="600px"> + <el-form ref="dataForm" :rules="dataFormRules" :model="dataForm" label-position="right" label-width="140px" + style="margin-left:30px;width:550px;" element-loading-text="保存中..."> + <el-row> + <el-col :span="13"> + <el-form-item label="文件类型:" prop="filetype"> + <el-select v-model="dataForm.filetype" clearable placeholder="请选择文件类型"> + <el-option + class="filter-item" + @keyup.enter.native="queryHandle" + v-for="item in fileType" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="文件名称:" prop="filename"> + <el-input v-model.trim="dataForm.filename" /> + </el-form-item> + </el-col> + </el-row> + <el-form-item label="上传文件:"> + <input id="importFileInput" ref="importFileInput" type="file" accept=""/> + </el-form-item> + <el-row> + <el-col :span="12"> + <el-form-item label="版本号:" prop="version"> + <el-input v-model.trim="dataForm.version" type="number"/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="备注:" prop="remark"> + <el-input v-model.trim="dataForm.remark" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="dialogFormVisible = false">取消</el-button> + <el-button type="primary" @click="dialogStatus==='create'?createHandle():updateHandle()">确认</el-button> + </div> + </el-dialog> + <div style="clear: both;"></div> + </div> +</template> + +<script> + import Cookies from 'js-cookie' + import { checkBtnPermission} from "@/utils/permission"; + import { appFileList, addAppFile, editAppFile, delAppFile } from "@/api/appfile"; + import { parseError} from "@/utils/messageDialog"; + import { computePageCount} from "@/utils"; + import { mapGetters} from "vuex"; + import { dictionaryAllItems } from '@/api/dictionary'; + import { Message, MessageBox } from 'element-ui' + + export default { + name: "appfile", + filters : { + parseGX(value){ + let arr = value.split('-'); + let guanxia=''; + for (let i = 0; i < arr.length; i++){ + if (arr[i] == null || arr[i] == '' || arr[i] == 'null'){ + }else { + if (i == 0){ + guanxia = arr[i]; + }else { + guanxia += '-'+arr[i]; + } + } + } + return guanxia; + } + }, + data() { + return { + prefixUrl:process.env.IMG_API, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + tableKey: 0, + appFileData: null, + listLoading: true, + dataForm: { + id: '', + filetype: '', + filename:'', + fileurl:'', + version:'', + remark:'', + file:'', + }, + queryForm: { + filetype:'', + }, + dialogFormVisible: false, + dialogStatus: '', + dataFormRules: { + filetype: [{required: true, message: '文件类型不能为空', trigger: 'blur'}], + version: [{required: true, message: '版本不能为空', trigger: 'blur'}], + }, + fileType:[], + productVoList:[], + productVoDialogVisible:false, + + productDialogFormVisible:false, + productData:[], + pageSizeProduct: 10, + currentPageProduct: 1, + recordTotalProduct: 0, + pageTotalProduct: 0, + queryProductForm: { + name: '', + manufacturer:'', + directionCode:'', + type:'', + }, + + manufacturer:'', + enterpriseList : [], + enterpriseDialogFormVisible:false, + pageSizeEnterpise: 10, + currentPageEnterpise: 1, + recordTotalEnterpise: 0, + pageTotalEnterpise: 0, + } + }, + created() { + this.getAppFileListList(); + this.getDictionaryStatusList(); + }, + computed: { + ...mapGetters([ + 'userType', + 'username' + ]) + }, + methods: { + handleSizeChangeProduct: function (val) { + this.pageSizeProduct = val + this.currentPageProduct = 1 + this.getProductList() + }, + handleCurrentChangeProduct: function (val) { + this.currentPageProduct = val + this.getProductList() + }, + getDictionaryStatusList(){ + const _this = this + if (_this.fileType && _this.fileType.length > 0) { + return + } + const params = {} + params['dictionaryType'] = 'APP版本' + dictionaryAllItems(params).then(response => { + const res = response.data + if (res.code == 200) { + _this.fileType = res.result + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + parseError({ error: error, vm: _this }) + }) + }, + getAppFileListList() { + const _this = this + const params = {} + params['pageIndex'] = _this.currentPage + params['pageSize'] = _this.pageSize + params['sort'] = _this.sort + params['order'] = _this.order + for (const i in _this.queryForm) { + if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') { + params[i] = _this.queryForm[i] + } + } + _this.listLoading = true + appFileList(params).then(response => { + const res = response.data; + if (res.code == 200) { + const result = res.result; + _this.recordTotal = result.totalCount; + _this.pageSize = result.pageSize; + _this.pageTotal = computePageCount(result.totalCount, result.pageSize); + _this.currentPage = result.pageIndex; + _this.appFileData = result.result + } else { + parseError({error: res.data.message, vm: _this}) + } + _this.listLoading = false + }).catch(error => { + _this.listLoading = false + parseError({error: error, vm: _this}) + }) + }, + createHandle: function () { + const _this = this + this.$refs['dataForm'].validate((valid) => { + if (valid) { + const formData = new FormData(); + const files = this.$refs["importFileInput"].files; + if (files.length > 0){ + formData.append('file', files[0]); + }else { + parseError({ error: '请上传文件', vm: this }) + return + } + formData.append('filetype', _this.dataForm.filetype); + formData.append('filename', _this.dataForm.filename); + formData.append('version', _this.dataForm.version); + formData.append('remark', _this.dataForm.remark); + addAppFile(formData).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogFormVisible = false + _this.$message({ + message: '创建成功', + type: 'success' + }); + _this.getAppFileListList() + } else { + parseError({error: res.data.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + } + }) + }, + deleteHandle: function (row) { + const _this = this + MessageBox.confirm('确定删除信息', '确定删除', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + _this.deleteAction(row) + }).catch(() => { + console.log('已取消删除') + }) + }, + deleteAction: function (row) { + const _this = this; + const params = {} + params['id'] = row.id; + delAppFile(params).then(response => { + const res = response.data + if (res.code == 200) { + _this.$message({ + message: '删除成功', + type: 'success' + }) + _this.getAppFileListList() + } else { + parseError({error: res.data.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + }, + refreshHandle: function () { + this.getAppFileListList() + }, + queryHandle: function () { + this.currentPage = 1 + this.getAppFileListList() + }, + resetDataForm() { + this.dataForm = { + id: '', + filetype: '', + filename:'', + fileurl:'', + version:'', + remark:'', + } + }, + showCreateHandle() { + this.resetDataForm() + this.dialogStatus = 'create' + this.dialogFormVisible = true + this.$nextTick(() => { + this.$refs['dataForm'].clearValidate() + }) + }, + updateHandle() { + this.$refs['dataForm'].validate((valid) => { + const _this = this + if (valid) { + const formData = new FormData(); + formData.append('id', _this.dataForm['id']); + formData.append('filetype', _this.dataForm['filetype']); + formData.append('filename', _this.dataForm.filename); + formData.append('version', _this.dataForm.version); + formData.append('remark', _this.dataForm.remark); + const files = this.$refs["importFileInput"].files; + if (files.length > 0){ + formData.append('file', files[0]); + } + editAppFile(formData).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogFormVisible = false + _this.$message({ + message: '更新成功', + type: 'success' + }); + _this.getAppFileListList() + } else { + parseError({error: res.data.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + } + }) + }, + showEditHandle: function (row) { + this.resetDataForm(); + this.dialogStatus = 'editor'; + this.dataForm.id = row.id; + this.dataForm.filetype = row.filetype; + this.dataForm.filename = row.filename; + this.dataForm.fileurl = row.fileurl; + this.dataForm.version = row.version; + this.dataForm.remark = row.remark; + this.dialogFormVisible = true; + this.$nextTick(() => { + this.$refs['dataForm'].clearValidate() + }) + }, + handleSizeChange: function (val) { + this.pageSize = val + this.currentPage = 1 + this.getAppFileListList() + }, + handleCurrentChange: function (val) { + this.currentPage = val + this.getAppFileListList() + }, + getBtnPermission(btnType) { + return checkBtnPermission(this.userType, btnType) + }, + sortChange(param){ + this.sort = param.prop; + this.order = param.order; + this.getAppFileListList(); + }, + showProductHandle(){ + this.productDialogFormVisible = true; + }, + showEnterprise(){ + this.enterpriseDialogFormVisible = true; + }, + downloadHandle(fileurl){ + window.open(fileurl, '_blank') + ; + }, + + } + } +</script> + +<style scoped> + +</style> diff --git a/src/views/systemManage/userManage/index.vue b/src/views/systemManage/userManage/index.vue index 1dc2708..8db5777 100644 --- a/src/views/systemManage/userManage/index.vue +++ b/src/views/systemManage/userManage/index.vue @@ -11,6 +11,15 @@ @keyup.enter.native="queryHandle" /> </el-form-item> + <el-form-item label="真实姓名"> + <el-input + v-model="queryForm.realname" + class="filter-item" + placeholder="" + style="width: 150px;" + @keyup.enter.native="queryHandle" + /> + </el-form-item> <el-form-item label="单位"> <el-input v-model="queryForm.company" @@ -67,6 +76,17 @@ icon="el-icon-upload2" @click="showImportHandle" >导入</el-button> + </el-form-item> + <el-form-item> + <el-button + v-if="getBtnPermission('export')" + v-show="userType != 3" + class="filter-item" + style="margin-left: 10px;" + type="primary" + icon="el-icon-upload2" + @click="showExportHandle" + >导出</el-button> </el-form-item> </el-form> </div> @@ -328,11 +348,11 @@ <el-row> <el-col :span="12"> <el-form-item label="单位:" prop="company"> - <el-select v-model.trim="dataForm.company" auto-complete="on" style="width:100%;"> + <el-select v-model.trim="dataForm.company" value-key="item" auto-complete="on" style="width:100%;" @change="companyChange"> <el-option v-for="item in companyList" :key="item.id" - :value="item.company" + :value="item" :label="item.company" > </el-option> @@ -340,7 +360,7 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="部门:" prop="department"> + <el-form-item label="部门:" prop="department" v-if="isMain"> <el-select v-model.trim="dataForm.department" auto-complete="on" style="width:100%;"> <el-option v-for="item in departmentList" @@ -634,8 +654,10 @@ tableKey: 0, userData: null, listLoading: true, + isMain:false, iscompanyList:[{id:1,name:'否'},{id:0,name:'是'}], queryForm: { + realname:'', username: '', company:'', department:'', @@ -710,6 +732,7 @@ userRoleDataFormRules: { userRoles: [{ type: 'array', required: true, message: '角色不能为空', trigger: 'change' }] }, + typeList:[{id:1,name:'超级管理员'},{id:2,name:'管理员'},{id:3,name:'普通用户'}], roleList: [], passwordType: 'password', confirmPasswordType: 'password', @@ -739,6 +762,15 @@ this.order = param.order; this.getUserList() }, + companyChange(val){ + this.dataForm.company = val.company + if (val.ismain === 1) { + this.isMain = true; + }else{ + this.isMain = false; + this.dataForm.department = '' + } + }, getUserList() { const _this = this const params = {} @@ -747,6 +779,7 @@ params['pageIndex'] = _this.currentPage params['pageSize'] = _this.pageSize params['type'] = _this.userType + params['realname'] = _this.realname params['isMain'] = true for (const i in _this.queryForm) { if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') { @@ -991,6 +1024,8 @@ this.dataForm.password = null this.dialogStatus = 'update' this.dialogFormVisible = true + let ismain = this.companyList.find(item=>item.company === row.company).ismain + this.isMain = ismain === 1; this.$nextTick(() => { this.$refs['dataForm'].clearValidate() }) @@ -1048,6 +1083,70 @@ showImportHandle() { this.importDisabled = false this.importDialogFormVisible = true + }, + + + showExportHandle() { + const _this = this + const params = {} + params['sort'] = _this.sort + params['order'] = _this.order + params['pageIndex'] = 0 + params['pageSize'] = 99999 + params['type'] = _this.userType + params['realname'] = _this.realname + params['isMain'] = true + for (const i in _this.queryForm) { + if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') { + params[i] = _this.queryForm[i] + } + } + userList(params) + .then((response) => { + const res = response.data + if (res.code == 200) { + const allData = res.result.result + if (allData.length == 0) { + parseError({ error: '没有录入数据', vm: _this }) + return + } + import('@/vendor/Export2Excel').then((excel) => { + const tHeader = [ + '用户名', + '真实姓名', + '身份证号', + '单位', + '部门', + '职位', + '用户类型', + '角色', + ] + + const data = allData.map(v=>{ + return [ + v.username, + v.realname, + v.idcard, + v.company, + v.department, + v.job, + this.typeList.find(item=>item.id === v.type).name, + v.roles.map(item=>item.name).join(","), + ] + }) + excel.export_json_to_excel({ + header: tHeader, + data, + filename: '用户' + }) + }) + } else { + parseError({ error: res.message, vm: _this }) + } + }) + .catch((error) => { + parseError({ error: error, vm: _this }) + }) }, viewHandle() { window.open(exampleFile, '_blank') @@ -1244,7 +1343,6 @@ const _this = this; bindCard(_this.cardDataForm).then(response => { const res = response.data - debugger if (res.code === '200'){ _this.$message({ message: '绑定成功', -- Gitblit v1.9.2