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>-->
+<!--&lt;!&ndash;            </el-form-item>&ndash;&gt;-->
+<!--            <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