浏览代码

用户权限完成

yf_zd 5 年之前
父节点
当前提交
e1cfd8f247
共有 53 个文件被更改,包括 4226 次插入 和 304 次删除
  1. 二进制
      dist.zip
  2. 二进制
      src/assets/images/equipdistribute/warnOn.png
  3. 二进制
      src/assets/images/equipdistribute/warnOn11.png
  4. 二进制
      src/assets/images/equipdistribute/warnOn12.png
  5. 43 2
      src/components/Login.vue
  6. 132 160
      src/components/index.vue
  7. 802 0
      src/pages/plantGuard/disasterWarn/disasterWarn.vue
  8. 661 0
      src/pages/plantGuard/disasterWarn/disasterWarnBase.vue
  9. 255 0
      src/pages/plantGuard/disasterWarn/disasterWarnList.vue
  10. 392 0
      src/pages/plantGuard/disasterWarn/disasterWarnSet.vue
  11. 591 0
      src/pages/plantGuard/disasterWarn/sidebarWarn.vue
  12. 689 0
      src/pages/plantGuard/disasterWarn/warnPhoto.vue
  13. 177 0
      src/pages/plantGuard/disasterWarn/windowPopUp.vue
  14. 88 25
      src/pages/plantGuard/equipManage/equipManage.vue
  15. 4 1
      src/pages/plantGuard/irrigate/index.vue
  16. 8 2
      src/pages/plantGuard/irrigate/irrigate.vue
  17. 1 1
      src/pages/plantGuard/irrigate/operatData.vue
  18. 1 1
      src/pages/plantGuard/irrigate/operatData/dcfoperatData.vue
  19. 1 1
      src/pages/plantGuard/irrigate/operatData/sboperatData.vue
  20. 1 1
      src/pages/plantGuard/irrigate/operatData/sfjoperatData.vue
  21. 1 1
      src/pages/plantGuard/irrigate/wranData.vue
  22. 1 1
      src/pages/plantGuard/irrigate/wranData/wranDataList.vue
  23. 1 1
      src/pages/plantGuard/irrigate/wranData/wranDataSet.vue
  24. 7 0
      src/pages/plantGuard/monitor/Monitor.vue
  25. 1 1
      src/pages/plantGuard/page10.vue
  26. 1 1
      src/pages/plantGuard/page11.vue
  27. 1 1
      src/pages/plantGuard/plantProtection/base.vue
  28. 13 6
      src/pages/plantGuard/plantProtection/baseAll.vue
  29. 8 3
      src/pages/plantGuard/plantProtection/baseComponents/bzyTabPhoto.vue
  30. 8 4
      src/pages/plantGuard/plantProtection/baseComponents/cbdTabPestStat.vue
  31. 8 12
      src/pages/plantGuard/plantProtection/baseComponents/cbdTabPhoto.vue
  32. 1 1
      src/pages/plantGuard/plantProtection/baseComponents/equipState.vue
  33. 2 2
      src/pages/plantGuard/plantProtection/baseComponents/equipStateQxz.vue
  34. 2 2
      src/pages/plantGuard/plantProtection/bzyPhoto.vue
  35. 6 2
      src/pages/plantGuard/plantProtection/cbdPhoto.vue
  36. 12 1
      src/pages/plantGuard/sysManage/allotEquip.vue
  37. 3 2
      src/pages/plantGuard/sysManage/roleManage.vue
  38. 19 6
      src/pages/plantGuard/sysManage/topicManage.vue
  39. 9 6
      src/pages/plantGuard/sysManage/userManage.vue
  40. 58 21
      src/router/index.js
  41. 12 36
      src/store/store.js
  42. 206 0
      static/images/disasterWarn/disasterWarnIcon.svg
  43. 二进制
      static/images/disasterWarn/enterIcon.png
  44. 二进制
      static/images/disasterWarn/navicon.png
  45. 二进制
      static/images/disasterWarn/photoIcon.png
  46. 二进制
      static/images/disasterWarn/sliderBj.png
  47. 二进制
      static/images/disasterWarn/sliderBtnBj.png
  48. 二进制
      static/images/disasterWarn/upPopIconicon.png
  49. 二进制
      static/images/emptyDataImg2.png
  50. 二进制
      static/images/jkctrl5.png
  51. 二进制
      static/images/jkctrl6.png
  52. 二进制
      static/images/jkctrl7.png
  53. 二进制
      下载 - 快捷方式.lnk

二进制
dist.zip


二进制
src/assets/images/equipdistribute/warnOn.png


二进制
src/assets/images/equipdistribute/warnOn11.png


二进制
src/assets/images/equipdistribute/warnOn12.png


+ 43 - 2
src/components/Login.vue

@@ -131,7 +131,10 @@ export default {
 			}
 		}
 	},
-
+	mounted(){
+		window.sessionStorage.removeItem("menuTabs");
+        window.sessionStorage.removeItem("menuTabsValue");
+	}
 }
 </script>
 
@@ -199,7 +202,45 @@ export default {
 					input{
 						width: inherit;
 						vertical-align: middle;
-						display: inline;
+						display: none;
+					}
+					span{
+						display: inline-block;
+						width: 16px;
+						height: 16px;
+						border-radius: 3px;
+						border: 1px solid #b5b5b5;
+						float: left;
+						margin-right: 10px;
+						margin-top: 3px;
+					}
+					input[type="checkbox"] {
+						display: none;
+					}
+					input[type="checkbox"] + label span {
+						display: inline-block;
+						width: 16px;
+						height: 16px;
+						border-radius: 3px;
+						border: 1px solid #b5b5b5;
+						float: left;
+						margin-right: 10px;
+						i {
+							display: none;
+						}
+					}
+					input[type="checkbox"]:checked + label span {
+						background: #2f3945;
+						i {
+							display: block;
+							font-size: 15px;
+							color: #fff;
+							line-height: 15px;
+							left: 2px;
+						}
+						i:before {
+							font-weight: 800;
+						}
 					}
 				}
 			}

+ 132 - 160
src/components/index.vue

@@ -3,6 +3,7 @@
   <el-container style="height: 100%">
     <el-header height="80px">
       <div class="headMenu">
+        <!-- {{currTopMenuId}} -->
         <!-- logo -->
         <div class="logoinfo">
           <div>
@@ -11,7 +12,7 @@
             <!-- <span>{{ loginInfo.role_header || "河南省高标准农田管理系统" }}</span> -->
             <span>河南省高标准农田管理系统</span>
           </div>
-          
+          <!-- {{menuTabs}} -->
         </div>
         <!-- 菜单 -->
         <ul class="topMenu">
@@ -240,16 +241,35 @@ export default {
           break
         }
       }
+      console.log(this.menuList);
+      
+      if (!flag) {  
+        var breakFlag = false;
+        for(var i = 0 ;i<this.menuList.length;i++){
+          if(!this.menuList[i].children){
+            continue;
+          }
+          for(var j = 0 ;j<this.menuList[i].children.length;j++){
+            if(this.menuList[i].children[j].name == to.meta.navname){
+              console.log(i);
+              
+              var order = i;
+              breakFlag = true;
+              break;
+            }
+          }
+          if(breakFlag){
+            break;
+          }
+        }
 
-      if (!flag) {
-        console.log(to)
-        this.add_tabs({path: to.path, name: to.meta.navname,par:to.meta.title,order:to.meta.order})
+        
+        this.add_tabs({path: to.path, name: to.meta.navname,par:to.meta.title,order:order})
         this.menuTabsValue = to.meta.navname
       }
 
       sessionStorage.setItem("menuTabs", JSON.stringify(this.menuTabs));
       sessionStorage.setItem("menuTabsValue", this.menuTabsValue);
-      
     }
   },
   //vue自定义指令
@@ -261,8 +281,12 @@ export default {
         if(menuTabs){
           binging.value.that.menuTabs = JSON.parse(menuTabs)
           binging.value.that.menuTabsValue = menuTabsValue
+          binging.value.that.leftMenuList = JSON.parse(sessionStorage.getItem("leftMenuList"));
+          binging.value.that.currLeftMenuId = sessionStorage.getItem("currLeftMenuId");
+          
         }else{
           el.id == "nav0" ? el.click() : null; // 只点击第一个,id是在循环中手动添加的
+          console.log(2);
         }
       },
     },
@@ -270,11 +294,15 @@ export default {
   //方法集合
   methods: {
     topMenuClick(item, index) {
-      if(item.children.length){
+      console.log(item);
+      
+      if(item.children){
         this.currTopMenuId = item.name;
         this.leftMenuList = item.children;
         this.currLeftMenuId = item.children[0].name;
-        this.$router.push({ path: '/plantGuard'+item.children[0].path });
+        sessionStorage.setItem("leftMenuList", JSON.stringify(item.children));
+        sessionStorage.setItem("currLeftMenuId", item.children[0].name);
+        this.$router.push({ path: '/plantGuard/'+item.children[0].path });
       }else if(item.name == '产品溯源'){
         var routeUrl = this.$router.resolve({
           path: '/index/farmBaseManger'
@@ -290,11 +318,15 @@ export default {
     },
     leftMenuClick(item, index) {
       this.currLeftMenuId = item.name;
+      sessionStorage.setItem("currLeftMenuId", item.name);
       console.log(item)
       if(item.path=="/operatData"){
-        this.$store.commit('setOperatId','')
+        this.$store.commit('setData',{
+          name:'ele_operat_id',
+          val:''
+        })
       }
-      this.$router.push({ path: '/plantGuard'+item.path });
+      this.$router.push({ path: '/plantGuard/'+item.path });
     },
     //添加tab标签
     add_tabs (data) {
@@ -315,6 +347,8 @@ export default {
                 this.leftMenuList = this.menuList[nextTab.order].children;
                 this.currTopMenuId=nextTab.par;
                 this.currLeftMenuId=nextTab.name;
+                sessionStorage.setItem("leftMenuList", JSON.stringify(this.menuList[nextTab.order].children));
+                sessionStorage.setItem("currLeftMenuId", nextTab.name);
               }
             }
           });
@@ -332,7 +366,8 @@ export default {
       this.menuTabsValue = this.menuTabs[tab.index].name
       this.currTopMenuId=this.menuTabs[tab.index].par;
       this.currLeftMenuId=this.menuTabs[tab.index].name;
-      // sessionStorage.setItem("menuTabsValue", this.menuTabsValue);
+      sessionStorage.setItem("leftMenuList", JSON.stringify(this.menuList[this.menuTabs[tab.index].order].children));
+      sessionStorage.setItem("currLeftMenuId", this.menuTabs[tab.index].name);
     
     },
     // 获取用户主题
@@ -355,161 +390,101 @@ export default {
         url: "/api/api_gateway?method=user.login.user_login_info",
       }).then((res) => {
         if (res.data.message == "") {
-          var menuLists=[
-            {
-                  "name": "农林植保",
-                  "id": "1",
-                  "children": [
-                     {
-                     "name": "设备列表",
-                     "path": "/base",
-                     "id": "2"
-                     },
-                     {
-                     "name": "项目基地",
-                     "path": "/baseAll",
-                     "id": "19"
-                     },
-                  ]
-               },
-               {
-                  "name": "可视农业",
-                  "id": "3",
-                  "children": [
-                     {
-                     "name": "可视化系统",
-                     "path": "/monitor",
-                     "id": "4"
-                     }
-                  ]
-               },
-               {
-                  "name": "智能灌溉",
-                  "id": "5",
-                  "children": [
-                     {
-                     "name": "灌溉项目",
-                     "path": "/irrigateProject",
-                     "id": "6"
-                     },
-                     {
-                     "name": "操作记录",
-                     "path": "/operatData",
-                     "id": "6"
-                     },
-                     {
-                     "name": "设备预警",
-                     "path": "/wranData",
-                     "id": "6"
-                     },
-                  ]
-               },
-               {
-                  "name": "水价管理",
-                  "id": "7",
-                  "children": [
-                     {
-                     "name": "地图展示",
-                     "path": "/page9",
-                     "id": "20"
-                    },
-                    {
-                     "name": "消费记录",
-                     "path": "/page10",
-                     "id": "21"
-                    },
-                    {
-                     "name": "充值记录",
-                     "path": "/page11",
-                     "id": "22"
-                    },
-                  ]
-               },
-               {
-                  "name": "地理信息",
-                  "id": "9",
-                  "children": [
-                    //  {
-                    //  "name": "设备列表",
-                    //  "path": "/page1",
-                    //  "id": "10"
-                    // }
-                  ]
-               },
-               {
-                  "name": "产品溯源",
-                  "id": "11",
-                  "children": [
-                    // {
-                    //  "name": "农场管理1",
-                    //  "path": "/farmFieldsManger",
-                    //  "id": "23"
-                    // }
-                  ]
-               },
-               {
-                  "name": "系统管理",
-                  "id": "13",
-                  "children": [
-                     {
-                     "name": "用户管理",
-                     "path": "/userManage",
-                     "id": "14"
-                     },
-                     {
-                     "name": "角色管理",
-                     "path": "/roleManage",
-                     "id": "15"
-                     },
-                     {
-                     "name": "主题定制",
-                     "path": "/topicManage",
-                     "id": "16"
-                     },
-                  ]
-               },
-               {
-                  "name": "设备管理",
-                  "id": "17",
-                  "children": [
-                     {
-                     "name": "设备管理",
-                     "path": "/equipManage",
-                     "id": "18"
-                     }
-                  ]
-               }
-          ];
+          var menuLists=res.data.data.children;
           
           let userType = res.data.data.myuser_type; //用户类型 管理员1 普通用户4
           let userName = res.data.data.username; //用户名
           let myuid = res.data.data.myuid; //用户id
           
-          sessionStorage.setItem("myuser_type", userType);
-          sessionStorage.setItem("myuid", myuid);
+          this.$store.commit('setData',{
+            name:'myuser_type',
+            val:userType
+          })
+          this.$store.commit('setData',{
+            name:'user_id',
+            val:myuid
+          })
+          console.log(menuLists);
+          if(userType == 4){
+            menuLists.forEach((item,index)=>{
+              console.log(item);
+              console.log(index);
+              if(item.name == '农林植保'){
+                item.children = [{
+                  "name": "植保示范点",
+                  "path": "base",
+                  "id": "100"
+                }]
+              }
+              if(item.name == '灾害预警'){
+                item.children = [{
+                  "name": "预警示范点",
+                  "path": "disasterWarn",
+                  "id": "101"
+                }]
+              }
 
-          if(menuLists[0].name=='农林植保'){
-            if(userType == 4){
-              menuLists[0].children= [
-                {
-                  "name": "设备列表",
-                  "path": "/base",
-                  "id": "2"
-                }
-              ]
-              this.menuTabs = [{ "path": "/plantGuard/base", "name": "设备列表", "par": "农林植保", "order": 0 }]
+              if(item.name == '智能灌溉'){
+                item.children = [{
+                  "name": "灌溉示范点",
+                  "path": "irrigate",
+                  "id": "102"
+                }]
+              }
+              
+            })
+            console.log(menuLists);
+            if(menuLists[0].children){
+              var path = "/plantGuard/"+menuLists[0].children[0].path;
+              var name = menuLists[0].children[0].name;
+              var parName =  menuLists[0].name;
+              this.menuTabs = [{ "path": path, "name": name, "par": parName, "order": 0}]
             }else{
-              menuLists[0].children= [
-                {
-                  "name": "项目基地",
-                  "path": "/baseAll",
-                  "id": "19"
-                },
-              ]
-              this.menuTabs = [{ "path": "/plantGuard/baseAll", "name": "项目基地", "par": "农林植保", "order": 0 }]
+              for(var i = 0;i<menuLists.length;i++){
+                if(menuLists[i].children){
+                  var path = "/plantGuard/"+menuLists[i].children[0].path;
+                  var name = menuLists[i].children[0].name;
+                  var parName =  menuLists[i].name;
+                  this.menuTabs = [{ "path": path, "name": name, "par": parName, "order": i}];
+                  break;
+                }
+              }
+              
             }
+            
+
+          }else{
+            var path = "/plantGuard/"+menuLists[0].children[0].path;
+            var name = menuLists[0].children[0].name;
+            var parName =  menuLists[0].name;
+            this.menuTabs = [{ "path": path, "name": name, "par": parName, "order": 0}]
           }
+          
+          
+          // if(menuLists[0].name=='农林植保'){
+          //   if(userType == 4){
+          //     menuLists[0].children= [
+          //       {
+          //         "name": "植保示范点",
+          //         "path": "base",
+          //         "id": "2"
+          //       }
+          //     ]
+          //     this.menuTabs = [{ "path": "/plantGuard/base", "name": "植保示范点", "par": "农林植保", "order": 0 }]
+          //   }else{
+          //     menuLists[0].children= [
+          //       {
+          //         "name": "植保监测",
+          //         "path": "baseAll",
+          //         "id": "19"
+          //       },
+          //     ]
+          //     this.menuTabs = [{ "path": "/plantGuard/baseAll", "name": "植保监测", "par": "农林植保", "order": 0 }]
+          //   }
+          // }
           this.menuList = menuLists;
+          console.log(this.menuList);
+          
         }
       });
     },
@@ -528,11 +503,8 @@ export default {
         url: "/api/api_gateway?method=user.login.logout_user",
       }).then((res) => {
         if (res.data.message == "") {
-          window.localStorage.removeItem("isLogin");
-          window.localStorage.removeItem("session");
-          window.sessionStorage.removeItem("menuTabs");
-          window.sessionStorage.removeItem("menuTabsValue");
-          window.sessionStorage.removeItem("setHomepage");
+          window.sessionStorage.clear()
+          window.localStorage.clear()
           this.$router.push("/login");
         }
       });

+ 802 - 0
src/pages/plantGuard/disasterWarn/disasterWarn.vue

@@ -0,0 +1,802 @@
+<!-- 灌溉地图展示 -->
+<template>
+  <div class="map">
+    <div id="container">加载数据,请稍候...</div>
+    <!-- 设备列表 -->
+    <div class="equipListBox">
+      <div class="searchTop">
+        <div>设备列表</div>
+        <!-- <div>
+          <el-input
+            size="small"
+            placeholder="请选择设备"
+            suffix-icon="el-icon-search"
+            v-model="searchVal"
+          ></el-input>
+        </div> -->
+      </div>
+      <div class="inner">
+        <div class="scroll">
+          <el-scrollbar>
+            <div class="equipList">
+                <div class="item"
+                v-for="(item,index) in equipData" :key="index" @click="lookEquip(item)">
+                    <div class="">
+                        <img :src="require('../../../../static/images/disasterWarn/navicon.png')" alt="">
+                        <span :ref="`equipName${index}`" v-if="item.key==0">{{item.name}}</span>
+                        <el-input class="changeNameVal" v-else v-model="editNameval" placeholder="请输入内容"></el-input>
+                    </div>
+                    <div>
+                      <i @click.stop="editName('edit',item,index)" v-show="item.key==0" class="el-icon-edit"></i>
+                      <i @click.stop="editName('cancel',item,index)" v-show="item.key==1" class="el-icon-close"></i>
+                      <i @click.stop="editName('save',item,index)" v-show="item.key==1" class="el-icon-check"></i>
+                    </div>
+                </div>
+                <div class="item" v-if="!equipData.length">
+                   暂无数据 
+                </div>
+            </div>
+          </el-scrollbar>
+        </div>
+      </div>
+    </div>
+    <!-- 设备提示框 -->
+    <windowPopUp ref="windowPopUp"></windowPopUp>
+    <sidebarWarn :qxzName="equips.qxzName" :jkName="equips.jkName" :projectName="equips.projectName" @setQxzEleName='setQxzEleName' ref="sidebarWarnRef"></sidebarWarn>
+    <div class="popupInner">
+      <!-- 设备预警 -->
+      <div v-show="equipWarnBox" class="equipWarnBox suspensionBox">
+        <div class="top">
+          <div>设备预警</div>
+          <!-- <div >
+            <i class="el-icon-caret-right"></i>
+          </div> -->
+        </div>
+        <div class="inner">
+          <div class="wranTitle">
+            <div
+              v-for="(item,index) in wranTitle"
+              v-bind:key="item"
+              :class="[index==1?'wranmsg':'']"
+            >{{item}}</div>
+          </div>
+          <div class="equipList">
+            <div
+              class="scroll-content"
+              ref="scrollContent"
+              :style="{ top }"
+              @mouseenter="Stop()"
+              @mouseleave="Up()"
+            >
+              <div class="wranInfo" v-for="item in scrollWranList" v-bind:key="item.id">
+                <div>{{item.device_id}}</div>
+                <div class="wranmsg">{{item.warning_info}}</div>
+                <div>{{item.warning_time | formatTime}}</div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!-- 气象站修改要素名称 -->
+    <el-dialog
+      class="figEldialog"
+      :visible.sync="qxzDialogVisible"
+      width="450px"
+      top="230px"
+      :modal="false"
+      :close-on-click-modal="true"
+      v-dialogDrag
+      @close="closeQxzDialogVisible"
+    >
+      <template slot="title">
+          <div class="avue-crud__dialog__header">
+              <span class="el-dialog__title">
+              <span style="display:inline-block;background-color: #3478f5;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px"></span>
+                要素名称修改
+              </span>
+          </div>
+        </template>
+        <div class="equipEleData">
+          <el-scrollbar >
+            <div class="equipEleList">
+              <div v-for="(item,index) in changeQxzEleName" :key="index">
+                <span>{{item.e}}</span>
+                <span>{{item.defaultName}}</span>
+                <span class="inp">
+                  <el-input v-model="item.editname" @blur="changeQxzName(item,index)" placeholder="请输入内容"></el-input>
+                </span>
+              </div> 
+            </div>
+          </el-scrollbar>
+        </div>
+        <!-- <div class="equipEleSaveBtn">
+          <el-button type="grayInfo" size="small" >重置</el-button>
+          <el-button type="blueInfo" size="small" >保存</el-button>
+        </div> -->
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》 from '《组件路径》';
+import windowPopUp from "./windowPopUp"
+import sidebarWarn from "./sidebarWarn"
+
+// 要素配置表
+import eleList from "../../../../static/js/irrigate/eleList.json"
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  components: {
+    windowPopUp,
+    sidebarWarn
+  },
+  data() {
+    //这里存放数据
+    return {
+      user_id:'',
+      equips:{
+        qxzId:'',
+        qxzDid:'',
+        qxzName:'',
+        jkId:'',
+        jkDid:'',
+        jkName:'',
+        projectName:'',
+      },
+      map: null,
+      center: [116.3683244, 39.915085],
+      zoom: 4.5,
+      tileLayer1: null,
+      tileLayer2: null,
+      equipWarnBox:true,//预警信息弹框
+      // 设备列表
+      equipData: [],
+      equipAllList: [],
+      editNameval:'',
+      // 设备预警滚动
+      wranTitle: ["设备ID", "预警信息", "时间"],
+      scrollWranList: [],
+      activeIndex: 0,
+  
+      searchVal: "",
+      marker: null,
+      markerList: [],
+      infoWindow: null,
+      qxzDialogVisible:false,
+      changeQxzEleName:[],
+    };
+  },
+  //监听属性 类似于data概念
+  computed: {
+    top() {
+      return -this.activeIndex * 22 + "px";
+    }
+  },
+  //监控data中的数据变化
+  watch: {},
+  //方法集合
+  methods: {
+    initMap() {
+      //创建地图
+      var that = this;
+      this.map = new AMap.Map("container", {
+        resizeEnable: true,
+        center: that.center,
+        zoom: that.zoom
+      });
+      AMap.plugin(
+        [
+          "AMap.ToolBar",
+          "AMap.Scale",
+          "AMap.MouseTool",
+          "AMap.Geocoder",
+          "AMap.PolyEditor"
+        ],
+        () => {
+          //   this.map.addControl(new AMap.ToolBar());
+          this.map.addControl(new AMap.Scale({ position: "LB" }));
+
+          this.geocoder = new AMap.Geocoder({
+            city: "全国",
+            radius: 1000
+          });
+        }
+      );
+      this.tileLayer1 = new AMap.TileLayer({
+        tileUrl:
+          "http://t{0,1,2,3,4,5,6,7}.tianditu.gov.cn/DataServer?T=img_w&tk=888bc7de1a5f14aa1b335b02e558d9b3&x=[x]&y=[y]&l=[z]",
+        zIndex: 10
+      }); //卫星图层
+      this.tileLayer2 = new AMap.TileLayer({
+        // 图块取图地址
+        tileUrl:
+          "http://t{0,1,2,3,4,5,6,7}.tianditu.gov.cn/DataServer?T=cta_w&tk=888bc7de1a5f14aa1b335b02e558d9b3&x=[x]&y=[y]&l=[z]",
+        zIndex: 101
+      });
+      this.map.add(this.tileLayer1);
+      this.map.add(this.tileLayer2);
+      this.getEquipList();
+      this.getWranInfo();
+    },
+    getEquipList() {
+      this.equipData = [
+        // {
+        //   name:'灾害预警项目一',
+        //   lnglat:[113,46],
+        //   equips:[
+        //     {id:123,type:11},
+        //     {id:123,type:11},
+        //   ]
+        // }
+      ];
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.warning_page",
+        data: this.qs.stringify({
+          user_id:this.user_id
+        })
+      }).then(res => {
+        var dat = res.data.data.ids;
+        this.equipAllList = [];
+        for(var i = 0;i<dat.length;i++){
+          if(i == 0){
+            this.equipAllList.push({
+              name:dat[i].name,
+              lnglat:dat[i].lnglat,
+              equips:[dat[i]]
+            })
+          }else{
+            for(var z = 0;z<this.equipAllList.length;z++){
+              if(dat[i].name == this.equipAllList[z].name){
+                this.equipAllList[z].equips.push(dat[i])
+                break;
+              }
+              if(z == this.equipAllList.length-1){
+                this.equipAllList.push({
+                  name:dat[i].name,
+                  lnglat:dat[i].lnglat,
+                  equips:[dat[i]]
+                })
+                break;
+              }
+            }
+          }
+          if(i == dat.length-1){
+            console.log(this.equipAllList);
+            this.equipData = this.equipAllList.filter((item)=>{
+              item.key=0;//用于修改设备名input是否展示
+              return item.equips.length==2
+            })
+            console.log(this.equipData);
+            this.renderEle();
+          }
+        }
+
+      });
+    },
+    // 渲染点标注
+    renderEle() {
+      this.map.remove(this.markerList);
+      this.markerList = [];
+      this.equipData.forEach(item => {
+        var icon = "../../../../static/images/disasterWarn/disasterWarnIcon.svg";
+        var itemlnglat = item["lnglat"];
+        this.marker = new AMap.Marker({
+          position: new AMap.LngLat(itemlnglat[0], itemlnglat[1]), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+          icon: new AMap.Icon({            
+              image: icon,
+              size: new AMap.Size(50, 50),  //图标大小
+              imageSize: new AMap.Size(50, 50)
+          }),
+          offset: new AMap.Pixel(-13, -30),
+          title: item["name"]
+        });
+        // 设置点标记的动画效果,此处为弹跳效果
+        // this.marker.setAnimation('AMAP_ANIMATION_BOUNCE');
+        this.markerList.push(this.marker);
+        //信息窗体
+        this.marker.content = item["name"];
+        AMap.event.addListener(this.marker, "click", event => {
+          this.markerClick(event, item);
+        });
+        AMap.event.addListener(this.map, "click", event => {
+          if (this.infoWindow) {
+            this.infoWindow.close();
+          }
+        });
+      });
+      this.$nextTick(() => {
+        this.map.add(this.markerList);
+        this.map.setFitView();
+      });
+      this.infoWindow = new AMap.InfoWindow({
+        isCustom: true, //使用自定义窗体
+        offset: new AMap.Pixel(-105, -20)
+        // anchor:'bottom-righ'
+      });
+    },
+    markerClick(event, item) {
+      console.log(item);
+      if(item.equips[0].device_type_id == 11){
+        this.equips.qxzId = item.equips[0].device_id
+        this.equips.qxzName = item.equips[0].device_name
+        this.equips.qxzDid = item.equips[0].d_id
+      }else{
+        this.equips.qxzId = item.equips[1].device_id
+        this.equips.qxzName = item.equips[1].device_name
+        this.equips.qxzDid = item.equips[1].d_id
+      }
+      if(item.equips[0].device_type_id == 12){
+        this.equips.jkId = item.equips[0].device_id
+        this.equips.jkName = item.equips[0].device_name
+        this.equips.jkDid = item.equips[0].d_id
+      }else{
+        this.equips.jkId = item.equips[1].device_id
+        this.equips.jkName = item.equips[1].device_name
+        this.equips.jkDid = item.equips[1].d_id
+      }
+      this.equips.projectName=item.name
+      this.$store.commit('setData',{
+        name:'jk_wran_id',
+        val:this.equips.jkId
+      })
+      this.$store.commit('setData',{
+        name:'jk_wran_did',
+        val:this.equips.jkDid
+      })
+      this.$store.commit('setData',{
+        name:'jk_wran_name',
+        val:this.equips.projectName
+      })
+      this.$store.commit('setData',{
+        name:'qxz_wran_id',
+        val:this.equips.qxzId
+      })
+      this.$store.commit('setData',{
+        name:'qxz_wran_did',
+        val:this.equips.qxzDid
+      })
+      this.equipWarnBox = false;
+      this.$refs.sidebarWarnRef.toggleMenuShow();
+      this.$refs.sidebarWarnRef.getQxzEle();
+      this.$refs.sidebarWarnRef.getMonitor();
+      this.infoWindow = new AMap.InfoWindow({
+        isCustom: true, //使用自定义窗体
+        offset: new AMap.Pixel(16, -45)
+      });
+      this.$refs.windowPopUp.initialize({
+        currEquip: {device_type_id:1234},
+        visible: true,
+        infoWindow: this.infoWindow
+      });
+      this.infoWindow.setContent(this.$refs.windowPopUp.$el);
+      this.infoWindow.open(this.map, event.target.getPosition());
+    },
+    lookEquip(item){
+      this.map.setCenter(item.lnglat)
+      this.map.setZoom(17)
+    },
+    getWranInfo(){
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.warning_info", //forecast.forecast_system.equip_photo
+        data: this.qs.stringify({
+          page_size: 10,
+        }),
+      })
+      .then((res) => {
+        if(res.data.message == ""){
+          this.scrollWranList = res.data.data.data
+        }
+      })
+      .catch((err) => {
+        console.log(err);
+      });
+    },
+    ScrollUp() {
+      this.intnum = setInterval(_ => {
+        this.$refs.scrollContent.style.transition = "top 0.5s";
+        if (this.activeIndex < this.scrollWranList.length - 5) {
+          this.activeIndex += 1;
+        } else {
+          this.$refs.scrollContent.style.transition = "none";
+          this.activeIndex = 0;
+        }
+      }, 1000);
+    },
+    Stop() {
+      clearInterval(this.intnum);
+    },
+    Up() {
+      this.ScrollUp();
+    },
+    equipWarnBoxShow(){
+      this.equipWarnBox=true;
+    },
+    editName(ctrl,item,index){
+      if(ctrl == 'edit'){
+        this.equipData.forEach((item)=>{
+          item.key = 0
+        })
+        this.equipData[index].key = 1
+        this.editNameval = this.equipData[index].name;
+      }
+      if(ctrl == 'cancel'){
+        this.equipData.forEach((item)=>{
+          item.key = 0
+        })
+      }
+      if(ctrl == 'save'){
+        var id = item.equips[0].device_id+','+item.equips[1].device_id
+        this.$axios({
+          method: "post",
+          url: "/api/api_gateway?method=weather.weather.warning_change",
+          data: this.qs.stringify({
+            device_id: id,
+            name: this.editNameval,
+          })
+        }).then(res => {
+          if (res.data.message == "") {
+                this.$message({
+                  type: "success",
+                  message: "修改成功",
+                });
+                this.equipData.forEach((item)=>{
+                  item.key = 0
+                })
+                this.equipData[index].name = this.editNameval
+              }else{
+                this.$message({
+                  type: "error",
+                  message: res.data.message,
+                });
+              }
+        })
+      }
+      
+    },
+    setQxzEleName(data){
+      this.qxzDialogVisible = true
+      this.changeQxzEleName = data;     
+    },
+    changeQxzName(item,index){
+      this.$confirm('是否更改要素名称?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.qxz_config_change",
+        data: this.qs.stringify({
+          device_id:this.$store.state.qxz_wran_id,
+          ekey:item.e,
+          conf:item.editname+'#'+item.unit
+        })
+      }).then(res => {
+        if(res.data.message == ""){
+          this.$message({
+            message: '修改成功',
+            type: 'success'
+          });
+        }
+      })
+      }).catch(() => {
+          this.changeQxzEleName[index].editname = this.changeQxzEleName[index].name
+      });
+    },
+    closeQxzDialogVisible(){
+      this.$refs.sidebarWarnRef.getQxzEle();
+    }
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    this.user_id = this.$store.state.disasterWarnUserId;
+    this.initMap();
+    this.$nextTick(() => {
+      this.ScrollUp();
+    });
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {
+    this.Stop();
+  }, //生命周期 - 销毁完成
+  activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style scoped lang='less'>
+.map,
+#container {
+  width: 100%;
+  height: 100%;
+  position: relative;
+}
+
+.equipListBox {
+  position: absolute;
+  left: 35px;
+  top: 30px;
+  bottom: 3.125rem;
+  width: 3.5rem;
+  background: rgba(12, 20, 44, 0.8);
+  border-radius: 8px;
+  overflow: hidden;
+  z-index: 200;
+  .searchTop {
+    display: flex;
+    justify-content: space-between;
+    color: #fff;
+    align-items: center;
+    padding: 10px;
+    background: #0c142c;
+    .el-input {
+      width: 2.25rem;
+      input {
+        background: #ececec;
+        color: #000;
+        padding: 5px;
+        height: 27px;
+      }
+      /deep/.el-input__inner {
+        height: 28px;
+        line-height: 28px;
+      }
+    }
+  }
+  .inner {
+    position: absolute;
+    top: 52px;
+    bottom: -18px;
+    left: 0;
+    right: 0;
+    .scroll {
+      height: 100%;
+      overflow: auto;
+      .equipList {
+        .item {
+          padding: 0.175rem;
+          color: #fff;
+          font-size: 0.175rem;
+          cursor: pointer;
+          display: flex;
+          justify-content: space-between;
+          >div{
+                display: flex;
+            justify-content: left;
+            align-items: center;
+          }
+          >span:nth-child(1){
+            width: 72%;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+          }
+          >div{
+            i{
+              font-size: 20px;
+            }
+            i:nth-child(1){
+              font-size: 18px;
+              display: none;
+            }
+            i:nth-child(2){
+              color: red;
+            }
+            i:nth-child(3){
+              color: green;
+            }
+          }
+          >span:nth-child(2){
+              font-size: 14px;
+          }
+          img {
+            margin-right: 2px;
+          }
+          &:hover {
+            background: #0c142c;
+          }
+          .changeNameVal{
+            /deep/.el-input__inner{
+              background: none;
+              outline: none;
+              border: 1px solid #6b6b6b;
+              color: #fff;
+              height: 28px;
+              padding: 0 5px;
+            }
+          }
+        }
+        .item:hover{
+          >div{
+            i:nth-child(1){
+              display: block;
+            }
+          }
+        }
+        .item.active {
+          background: #0c142c;
+        }
+      }
+    }
+    .scroll {
+      height: 100%;
+      overflow-y: hidden;
+    }
+    .el-scrollbar {
+      height: 100%;
+    }
+    .el-scrollbar__bar {
+      &.is-vertical {
+        width: 100px; //滚动条宽度
+      }
+    }
+    .el-scrollbar__wrap {
+      overflow-y: auto;
+      overflow-x: hidden;
+    }
+    .el-scrollbar__thumb {
+      // 可设置滚动条颜色
+      background: red;
+    }
+  }
+}
+// 悬浮框样式
+.popupInner {
+  position: absolute;
+  right: 0;
+  top: 12px;
+  z-index: 200;
+}
+.suspensionBox {
+  // position: absolute;
+  width: 400px;
+  background: rgba(12, 20, 44, 0.8);
+  border-radius: 8px;
+  overflow: hidden;
+  z-index: 100;
+  margin-top: 20px;
+  .top {
+    display: flex;
+    justify-content: space-between;
+    color: #fff;
+    align-items: center;
+    padding: 10px;
+    background: #0c142c;
+    i {
+      cursor: pointer;
+      font-size: 14px;
+    }
+  }
+}
+// 设备预警
+.equipWarnBox {
+  height: 190px;
+  right: 10px;
+  // top: 160px;
+  .inner {
+    // height: 82px;
+    // overflow: hidden;
+    .wranTitle {
+      display: flex;
+      justify-content: space-around;
+      line-height: 33px;
+      color: #fff;
+      .wranmsg {
+        width: 157px;
+      }
+    }
+    .equipList {
+      height: 110px;
+      overflow: hidden;
+      .scroll-wrap {
+        height: 150px;
+        overflow: hidden;
+      }
+      .scroll-content {
+        position: relative;
+        transition: top 0.5s;
+        .wranInfo {
+          line-height: 22px;
+          color: #92c2f3;
+          display: flex;
+          justify-content: space-around;
+          .wranmsg {
+            width: 157px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+          }
+          .state {
+            color: red;
+          }
+        }
+      }
+      .scroll-content p {
+        line-height: 50px;
+        text-align: center;
+      }
+    }
+  }
+}
+
+
+// 设备定位弹框
+/deep/.setlnglatBox{
+  box-shadow: 0px 0px 4px 0px #0161ff;
+  background: rgba(12, 20, 44, 0.8);
+  border-radius: 8px;
+}
+/deep/.setlnglatBox .el-dialog__header{
+  background: #0c142c;
+  padding: 10px 20px;
+  border-bottom: 1px solid #0c142c;
+}
+/deep/.setlnglatBox .el-dialog__header .el-dialog__title{
+  color: #fff;
+  font-size: 14px;
+}
+/deep/.setlnglatBox .el-dialog__headerbtn .el-dialog__close{
+  color: #fff;
+}
+// 设置要素名称
+.equipEleData{
+  .el-scrollbar{
+    height: 230px;
+    /deep/.el-scrollbar__wrap{
+      overflow-x: hidden;
+    }
+    /deep/.el-scrollbar__thumb{
+      background: #0165b8;
+    }
+  }
+  .equipEleList{
+    display: flex;
+    justify-content: left;
+    flex-wrap: wrap;
+    >div{
+      display: flex;
+      align-items: center;
+      margin: 10px 0;
+      width: 100%;
+      span:nth-child(1){
+        color: #04d5e8;
+        width: 33px;
+      }
+      span:nth-child(2){
+        color: #04d5e8;
+        width: 135px;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        margin-right: 10px;
+      }
+      .inp{
+        width: 200px;
+        /deep/input{
+          background: none;
+          outline: none;
+          border: 1px solid #0c142c;
+          color: #92c2f3;
+          height: 36px;
+          padding: 0 5px;
+          background: #0c142c;
+        }
+      }
+      
+    }
+  }
+}
+.equipEleSaveBtn{
+  text-align: right;
+}
+
+</style>

+ 661 - 0
src/pages/plantGuard/disasterWarn/disasterWarnBase.vue

@@ -0,0 +1,661 @@
+<!-- mapui-->
+<template>
+<div class='map'>
+    <div id="container">加载数据,请稍候...</div>
+    <div class="leftNavBox">
+        <div class="searchBox">
+            <el-select size="small" @change="searchPro()" filterable v-model="form.province" placeholder="选择省">
+                <el-option label="--请选择--" value=""></el-option>
+                <el-option
+                    v-for="item in provinceList"
+                    :key="item.adcode"
+                    :label="item.name"
+                    :value="item.adcode">
+                </el-option>
+            </el-select>
+            <el-select size="small" @change="searchCity()" filterable v-model="form.city" placeholder="选择市">
+                <el-option label="--请选择--" value=""></el-option>
+                <el-option
+                    v-for="item in cityList"
+                    :key="item.adcode"
+                    :label="item.name"
+                    :value="item.adcode">
+                </el-option>
+            </el-select>
+            <el-select size="small" @change="searchDis()" filterable v-model="form.district" placeholder="选择区">
+                <el-option label="--请选择--" value=""></el-option>
+                <el-option
+                    v-for="item in districtList"
+                    :key="item.adcode"
+                    :label="item.name"
+                    :value="item.adcode">
+                </el-option>
+            </el-select>
+        </div>
+        <div class="listBox">
+            <div class="projectSearch">
+                <div>项目列表</div>
+                <div>
+                    <el-input
+                        size="small"
+                        placeholder="请输入项目名称"
+                        v-model="input"
+                        suffix-icon="el-icon-search"
+                        clearable>
+                    </el-input>
+                </div>
+            </div>
+            <div class="inner">
+                <div class="scroll">
+                    <el-scrollbar>
+                    <div class="equipList">
+                        <div class="item"
+                        @click="equipLocate(item)"
+                        @dblclick="enterBase(item)" 
+                        v-for="item in mapData" :key="item.uuid">
+                            <img src="../../../../static/images/baseIcon.png" width="25px" alt="">
+                            {{item.projectname}}
+                        </div>
+                        <div class="item noDate" v-if="!mapData.length">暂无数据</div>
+                    </div>
+                    </el-scrollbar>
+                </div>   
+            </div>
+        </div>
+    </div>
+</div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》 from '《组件路径》';
+export default {
+//import引入的组件需要注入到对象中才能使用
+components: {},
+data() {
+//这里存放数据
+return {
+    map:null,
+    data:[],
+    mapData:[],
+    topAdcodes:[100000],//全国区划编码
+    center:[116.3683244,39.915085],
+    zoom:4.5,
+    // 搜索
+    form:{
+        province:'',
+        city:'',
+        district:'',
+    },
+    provinceList:[],
+    cityList:[],
+    districtList:[],
+    district:null,
+    input:'',
+    polygons:[],
+    distCluster:null,
+    pointSimplifierIns:null,
+};
+},
+//监听属性 类似于data概念
+computed: {},
+//监控data中的数据变化
+watch: {},
+//方法集合
+methods: {
+    initMap(){
+         //创建地图
+            var that = this
+            this.map = new AMap.Map('container', {
+                center:that.center,
+                zoom: that.zoom
+            });
+            AMapUI.loadUI(['control/BasicControl'], function(BasicControl) {
+                //缩放控件,显示Zoom值
+                that.map.addControl(new BasicControl.Zoom({
+                    position: 'rb',
+                    showZoomNum: true
+                }));
+            });
+                //加载相关组件
+            AMapUI.load(['ui/geo/DistrictCluster', 'lib/$','ui/misc/PointSimplifier'], function(DistrictCluster, $,PointSimplifier) {
+
+                //启动页面
+                that.initPage(DistrictCluster, $,PointSimplifier);
+            });
+    },
+    initPage(DistrictCluster, $,PointSimplifier) {
+        var that = this;
+        //创建组件实例
+        this.pointSimplifierIns = new PointSimplifier({
+            map: this.map, //关联的map
+            zIndex:113,
+            autoSetFitView: false,
+            compareDataItem: function(a, b, aIndex, bIndex) {
+                //数据源中靠后的元素优先,index大的排到前面去
+                // return aIndex > bIndex ? -1 : 1;
+            },
+            getPosition: function(item) {
+                if (!item.lnglat) {
+                    return null;
+                }
+                //返回经纬度
+                return [parseFloat(item.lnglat[0]), parseFloat(item.lnglat[1])];
+            },
+            getHoverTitle: function(dataItem, idx) {
+                //返回数据项的Title信息,鼠标hover时显示
+                // return '序号: ' + idx;
+                // console.log(dataItem);
+                
+                return '<div style="font-size:14px">' + dataItem.projectname+'</div>';
+            },
+            renderOptions: {
+                 //点的样式
+                pointStyle: {
+                    //绘制点占据的矩形区域
+                    content: function(ctx, x, y, width, height) {
+                       ctx.moveTo(x, y); //移动到左上角
+						ctx.lineTo(x + 25, y);  //连接到右上角
+                       ctx.lineTo(x, y+height/1.5);  //连接到右上角
+                       ctx.lineTo(x, y + height);//连接到右下角
+                       ctx.lineTo(x, y + height); //连接到左下角
+                       ctx.lineTo(x, y);//连接到左上角
+                    },
+                    //宽度
+                    width: 33,
+                    //高度
+                    height: 30,
+                    fillStyle: 'red',
+                    lineWidth: 1,
+                    offset:['0', '-100%'],
+                    strokeStyle: '#000'
+                },
+            }
+        });
+        this.pointSimplifierIns.setData(this.mapData)
+        this.pointSimplifierIns.on('pointClick',(e,point)=>{
+            this.$store.commit('setData',{
+                name:'disasterWarnUserId',
+                val:point.data.uid
+            })
+            this.$store.commit('setData',{
+                name:'wran_project_name',
+                val:point.data.projectname
+            })
+            this.$router.push('/plantGuard/disasterWarn')
+        })
+        this.distCluster = new DistrictCluster({
+            map: that.map, //所属的地图实例
+            zIndex:13,
+            autoSetFitView: false,
+            topAdcodes: that.topAdcodes,
+            getPosition: function(item) {
+                if (!item.lnglat) {
+                    return null;
+                }
+                //返回经纬度
+                return [parseFloat(item.lnglat[0]), parseFloat(item.lnglat[1])];
+            },
+            renderOptions: {
+                // clusterMarkerKeepConsistent: false, //marker的位置随交互变化
+                featureStyle: {
+                    fillStyle: 'rgba(102,170,0,0.5)', //填充色
+                    lineWidth: 2, //描边线宽
+                    strokeStyle: '#4e6ef2', //描边色
+                    //鼠标Hover后的样式
+                    hoverOptions: {
+                        fillStyle: 'rgba(78,110,242,0.4)'
+                    }
+                },
+                // 特定区划级别的默认样式
+                featureStyleByLevel: {
+                    //全国
+                    country: {
+                        fillStyle: 'rgba(78,110,242,0)'
+                    },
+                    //省
+                    province: {
+                        fillStyle: 'rgba(78,110,242,0)'
+                    },
+                    //市
+                    city: {
+                        fillStyle: 'rgba(78,110,242,0)'
+                    },
+                    //区县
+                    district: {
+                        fillStyle:'rgba(78,110,242,0)'
+                    }
+                },
+                getClusterMarker: function(feature, dataItems, recycledMarker) {
+
+                    //不是当前feature,直接返回null
+                    if(dataItems.length){
+                        var container, title, body, nodeClassNames = {
+                            title: 'amap-ui-district-cluster-marker-title',
+                            body: 'amap-ui-district-cluster-marker-body',
+                            container: 'amap-ui-district-cluster-marker'
+                        };
+                        
+                        console.log(recycledMarker);
+                        if (recycledMarker) {
+                        console.log(recycledMarker.getContent());
+
+                            container = recycledMarker.getContent();
+
+                            title = $(container).find('.' + nodeClassNames.title)[0];
+
+                            body = $(container).find('.' + nodeClassNames.body)[0];
+
+                        } else {
+
+                            container = document.createElement('div');
+
+                            title = document.createElement('span');
+
+                            title.className = nodeClassNames.title;
+
+                            body = document.createElement('span');
+
+                            body.className = nodeClassNames.body;
+
+                            container.appendChild(title);
+
+                            container.appendChild(body);
+                        }
+                        console.log(feature.properties);
+                        
+                        var props = feature.properties,
+                            routeNames = [];
+
+                        var classNameList = [nodeClassNames.container, 'level_' + props.level, 'adcode_' + props.adcode];
+
+                        container.className = classNameList.join(' ');
+
+                        if (routeNames.length > 0) {
+
+                            routeNames.push(props.name);
+
+                            container.setAttribute('title', routeNames.join('>'));
+
+                        } else {
+                            container.removeAttribute('title');
+                        }
+
+                        $(title).html(props.name);
+                        $(body).html(dataItems.length);
+
+                        var resultMarker = recycledMarker || new AMap.Marker({
+                            topWhenClick: true,
+                            offset: new AMap.Pixel(-20, -30),
+                            content: container
+                        });
+                        console.log(container);
+                        console.log(resultMarker);
+                        
+                        return resultMarker;
+                    }
+                }
+            },
+        });
+            //监听区划面的点击
+        this.distCluster.on('clusterMarkerClick', function(e, feature) {
+
+           console.log(e)
+           console.log(feature)
+           console.log(that);
+            //重绘
+            //distCluster.renderLater();
+        });
+        // window.distCluster = distCluster;
+
+
+        $('<div id="loadingTip">加载数据,请稍候...</div>').appendTo(document.body);
+        $.get('https://a.amap.com/amap-ui/static/data/10w.txt', (csv)=>{
+
+            $('#loadingTip').remove();
+
+        // var data = [
+        //     "113.665412,34.757975",
+        //     "113.671767,34.815528",
+        //     "113.671867,34.825528",
+        //     "113.735978,34.728131",
+        //     "120.412618,36.382612",
+        //     "112.985037,23.15046",
+        //     "126.687123,45.787618"
+        //     ]
+            var data = csv.split('\n').slice(0,1000);
+            // that.data = data
+            this.distCluster.setData(that.data);
+
+        });
+    },
+    getEquipList() {
+      this.$axios({
+        method: "POST",
+        url: "/api/api_gateway?method=user.login.user_project_addr",
+        data: this.qs.stringify({
+        })
+      }).then(res => {
+        if (res.data.message == ""){
+            this.data = res.data.data.user_project;
+            this.mapData = res.data.data.user_project;
+            this.$nextTick(()=>{
+                this.initMap()
+            })
+        } else {
+          this.$message.error(res.data.message);
+        }
+      });
+    },
+    districtFun(){
+        this.map = new AMap.Map('container', {
+            resizeEnable: true,
+            center: [116.30946, 39.937629],
+            zoom: 3
+        });
+        //行政区划查询
+        var opts = {
+            subdistrict: 1,   //返回下一级行政区
+            showbiz:false  //最后一级返回街道信息
+        };
+        this.district = new AMap.DistrictSearch(opts);//注意:需要使用插件同步下发功能才能这样直接使用
+        this.district.search('中国', (status, result)=>{
+            if(status=='complete'){
+                this.getData(result.districtList[0],'country');
+            }
+        });
+    },
+    getData(data,level) {
+        console.log(data);
+        var bounds = data.boundaries;
+        if (bounds) {
+            for (var i = 0, l = bounds.length; i < l; i++) {
+                var polygon = new AMap.Polygon({
+                    map: this.map,
+                    zIndex:5,
+                    bubble:true,
+                    strokeWeight: 2,
+                    strokeColor: 'red',
+                    fillOpacity: 0.2,
+                    path: bounds[i]
+                });
+                this.polygons.push(polygon);
+            }
+            this.map.setFitView();//地图自适应
+        }
+
+        var subList = data.districtList;
+        //清空下一级别的下拉列表
+        if (level === 'country') {
+            console.log('country');
+            
+            this.provinceList = subList;
+            this.cityList = []
+            this.districtList = [];
+            this.form.province=''
+            this.form.city=''
+            this.form.district=''
+        } else if (level === 'province') {
+            console.log('province');
+            this.cityList = subList;
+            this.districtList = [];
+            this.form.city=''
+            this.form.district=''
+        } else if (level === 'city') {
+            console.log('city');
+            this.districtList = subList;
+            this.form.district=''
+        }
+
+        console.log(subList);
+        // if (subList) {
+        //     var contentSub = new Option('--请选择--');
+        //     var curlevel = subList[0].level;
+        //     var curList =  document.querySelector('#' + curlevel);
+        //     curList.add(contentSub);
+        //     for (var i = 0, l = subList.length; i < l; i++) {
+        //         var name = subList[i].name;
+        //         var levelSub = subList[i].level;
+        //         var cityCode = subList[i].citycode;
+        //         contentSub = new Option(name);
+        //         contentSub.setAttribute("value", levelSub);
+        //         contentSub.center = subList[i].center;
+        //         contentSub.adcode = subList[i].adcode;
+        //         curList.add(contentSub);
+        //     }
+        // }
+        
+    },
+    searchPro(){
+        var keyword = this.form.province; //关键字 
+        console.log(this.form.province);
+        console.log(this.form.city);
+        console.log(this.form.district);
+        if(!keyword){
+            this.cityList = []
+            this.districtList = [];
+            this.form.city=''
+            this.form.district='';
+            this.mapData=this.data;
+            this.pointSimplifierIns.setData(this.mapData)
+        }else{
+            this.distCluster.getClusterRecord(keyword,(error, result)=>{
+                // console.log(result);
+                //获取此区域下的数据点
+                this.mapData = [];
+                result.dataItems.forEach((item) => {
+                    this.mapData.push(item.dataItem)
+                });
+                this.$nextTick(()=>{
+                    this.pointSimplifierIns.setData(this.mapData)
+                })
+            })
+        }
+        // if(this.form.province||this.form.city||this.form.district){
+        //     this.distCluster.setData([])
+        // }else{
+        //     this.distCluster.setData(this.data)
+        // }
+        this.search('province',keyword)
+        
+    },
+    searchCity(){
+        var keyword = this.form.city; //关键字 
+        if(!keyword){
+            this.districtList = [];
+            this.form.district=''
+            return
+        }else{
+            this.distCluster.getClusterRecord(keyword,(error, result)=>{
+                // console.log(result);
+                //获取此区域下的数据点
+                this.mapData = [];
+                result.dataItems.forEach((item) => {
+                    this.mapData.push(item.dataItem)
+                });
+                this.$nextTick(()=>{
+                    this.pointSimplifierIns.setData(this.mapData)
+                })
+            })
+        }
+        this.search('city',keyword)
+    },
+    searchDis(){
+        var keyword = this.form.district; //关键字 
+        if(!keyword){
+            return
+        }else{
+            this.distCluster.getClusterRecord(keyword,(error, result)=>{
+                // console.log(result);
+                //获取此区域下的数据点
+                this.mapData = [];
+                result.dataItems.forEach((item) => {
+                    this.mapData.push(item.dataItem)
+                });
+                this.$nextTick(()=>{
+                    this.pointSimplifierIns.setData(this.mapData)
+                })
+            })
+        }
+        this.search('district',keyword)
+    },
+    search(levelSub,keyword) {
+        //清除地图上所有覆盖物
+        for (var i = 0, l = this.polygons.length; i < l; i++) {
+            this.polygons[i].setMap(null);
+        }
+        console.log(this.distCluster);
+        // this.distCluster.setData([
+            // "113.665412,34.757975",
+            // "113.671767,34.815528",
+            // "113.671867,34.825528",
+            // "113.735978,34.728131",
+            // "120.412618,36.382612",
+            // "112.985037,23.15046",
+            // "126.687123,45.787618"
+        // ])
+ 
+        
+        if(!keyword){
+            return;
+        }
+
+        this.district.setLevel(levelSub); //行政区级别
+        this.district.setExtensions('all');
+        //行政区查询
+        //按照adcode进行查询可以保证数据返回的唯一性
+        this.district.search(keyword,(status, result)=>{
+            if(status === 'complete'){
+                this.getData(result.districtList[0],levelSub);
+            }
+        });
+    },
+    equipLocate(item){
+        this.map.setCenter(item.lnglat);
+        this.map.setZoom(10)
+    },
+    enterBase(item){
+        this.$store.commit('setData',{
+            name:'disasterWarnUserId',
+            val:item.uid
+        })
+        this.$store.commit('setData',{
+            name:'wran_project_name',
+            val:item.projectname
+        })
+        this.$router.push('/plantGuard/disasterWarn')
+    }
+},
+//生命周期 - 创建完成(可以访问当前this实例)
+created() {
+
+},
+//生命周期 - 挂载完成(可以访问DOM元素)
+mounted() {
+    this.getEquipList()
+    this.districtFun()
+},
+beforeCreate() {}, //生命周期 - 创建之前
+beforeMount() {}, //生命周期 - 挂载之前
+beforeUpdate() {}, //生命周期 - 更新之前
+updated() {}, //生命周期 - 更新之后
+beforeDestroy() {}, //生命周期 - 销毁之前
+destroyed() {}, //生命周期 - 销毁完成
+activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+}
+</script>
+<style scoped lang='less'>
+.map,#container{
+    width: 100%;
+    height: 100%;
+}
+.leftNavBox{
+    position: absolute;
+    left: 100px;
+    top: 160px;
+    bottom:0;
+    /deep/.el-select{
+        width: 1.4rem;
+    }
+    .listBox{
+        position: relative;
+        overflow: hidden;
+        width: 4.25rem;
+        height: 90%;
+        margin-top: 16px;
+        border-radius: 6px;
+        background: rgba(255,255,255,.58);
+        box-shadow: 0px 3px 9px 0px #a7a7a7;
+        .projectSearch{
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: .15rem;
+            background: #182037;
+            color: #fff;
+            font-size: .175rem;
+            border-radius: 6px 6px 0 0;
+            /deep/.el-input{
+                width: 2.5rem;
+            }
+        }
+        .inner{
+            position: absolute;
+            top: 57px;
+            bottom: -18px;
+            left: 0;
+            right: 0;
+            .scroll{
+                height: 100%;
+                overflow: auto;
+                .equipList{
+                    .item{
+                        padding: .175rem;
+                        color: #454545;
+                        font-size: .175rem;
+                        // background: red;
+                        cursor: pointer;
+                        img{
+                            vertical-align: middle;
+                            margin-right: 2px;
+                        }
+                        &:hover{
+                            background: #182037;
+                            color: #fff;
+                        }
+                    }
+                    .noDate{
+                        text-align: center;
+                    }
+                    .item.active{
+                        background: darkblue;
+                    }
+                }
+            }
+            .scroll {
+                height: 100%;
+                overflow-y: hidden;
+                }
+                .el-scrollbar{
+                height: 100%;
+                }
+                .el-scrollbar__bar{
+                &.is-vertical{
+                    width:100px;//滚动条宽度
+                }
+                }
+                .el-scrollbar__wrap{
+                overflow-y: auto;
+                overflow-x:hidden;
+                }
+                .el-scrollbar__thumb {
+                // 可设置滚动条颜色
+                background: red;
+            }
+        }
+    }
+}
+ .amap-layers .amap-markers{
+    z-index: 320 !important;
+}
+</style>

+ 255 - 0
src/pages/plantGuard/disasterWarn/disasterWarnList.vue

@@ -0,0 +1,255 @@
+<!-- 预警历史记录 -->
+<template>
+  <div class="innerMargin">
+    <div class="box-card">
+		<div class="seaarchBox">
+			<div class="searchLeft">
+				<span class="title">设备ID:</span>
+				<el-input size="small" placeholder="请输入设备ID" @change="imgListData()" clearable v-model="queryInfo.equipId" class="input-with-select">
+					<!-- <el-button size="small" @click="imgListData()" slot="append" icon="el-icon-search"></el-button> -->
+				</el-input>
+				<span class="title">时间选择:</span>
+				<el-date-picker
+					size="small"
+					v-model="queryInfo.time"
+					type="daterange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期"
+          @change="DateChange">
+				</el-date-picker>
+			</div>
+			<div class="exportRight">
+				<!-- <el-button size="small" class="blueBtn" type="primary">导 出</el-button> -->
+			</div>
+		</div>
+       <template>
+        <el-table :data="userList" stripe style="width: 100%">
+			<el-table-column
+				type="selection"
+				width="55">
+			</el-table-column>
+			<el-table-column prop="device_id"   fixed label="设备号"></el-table-column>
+			<el-table-column prop="device_name" label="设备名称"></el-table-column>
+			<el-table-column prop="warning_info" width="400px" label="预警信息"></el-table-column>
+			<el-table-column prop="action" label="干预措施"></el-table-column>
+			<el-table-column prop="warning_time" label="预警时间"></el-table-column>
+			<el-table-column label="图片">
+				<template slot-scope="scope">
+					<el-button @click="amplificationA(scope.row)" type="text" size="small">查看图片</el-button>
+				</template>
+			</el-table-column>
+        </el-table>
+      </template>
+      <el-pagination
+        background
+        :page-size="8"
+        layout="prev, pager, next, jumper"
+        :current-page="page"
+        :total="totalNum"
+        @current-change="changePage"
+      ></el-pagination>
+    </div>
+	    <!-- 查看大图 -->
+      <viewer
+        v-show="false"
+        :images="recognitionImage"
+        ref="viewer"
+        @inited="inited"
+        :index="3"
+      >
+        <img v-for="(src, index) in recognitionImage" :src="src" :key="index" />
+      </viewer>
+      <!-- 查看大图 -->
+  </div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》 from '《组件路径》';
+import Vue from "vue";
+import Viewer from "v-viewer";
+import "viewerjs/dist/viewer.css";
+Vue.use(Viewer);
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  data() {
+	  //这里存放数据
+    return {
+      queryInfo:{
+        equipId:'',
+        time:'',
+        start_time:'',
+        end_time:'',
+      },
+      username: "",
+      userList: [],
+      page: 1,
+      totalNum: 0,
+      recognitionImage:[],
+
+    };
+  },
+  //监听属性 类似于data概念
+  computed: {
+    //获取用户类型
+		userType: function () {
+			return this.$store.state.myuser_type
+		}
+  },
+  //监控data中的数据变化
+  watch: {},
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    this.imgListData();
+  },
+  //方法集合
+  methods: {
+    imgListData() {
+        let that = this;
+        let postData = that.qs.stringify({
+          device_id: this.queryInfo.equipId,
+          page_size: 10,
+          page: this.queryInfo.page,
+          start_time:  this.queryInfo.start_time, //开始时间(时间戳)
+          end_time: this.queryInfo.end_time, //结束时间(时间戳)
+        });
+        that
+          .$axios({
+            method: "post",
+            url: "/api/api_gateway?method=weather.weather.warning_info", //forecast.forecast_system.equip_photo
+            data: postData,
+          })
+          .then((res) => {
+            if(res.data.message == ""){
+              that.userList = res.data.data.data
+              that.totalNum = res.data.data.nums;
+            }
+
+          })
+          .catch((err) => {
+            console.log(err);
+          });
+      },
+      handleClick(tab, event) {
+          console.log(tab, event);
+      },
+      changePage(value) {
+      this.page = value
+    },
+    // 配置查看大图插件
+    inited(viewer) {
+      this.$viewer = viewer;
+      this.$viewer.view();
+    },
+    amplificationA(data) {
+		  this.recognitionImage = [data.warning_pic]
+      this.$viewer.view();
+    },
+    DateChange(val){
+      if(this.queryInfo.time){
+        this.queryInfo.start_time = parseInt(
+          new Date(this.queryInfo.time[0]).getTime() / 1000
+        )
+        this.queryInfo.end_time = parseInt(
+          new Date(this.queryInfo.time[1]).getTime() / 1000
+        )
+      }else{
+        this.queryInfo.start_time = '';
+        this.queryInfo.end_time = '';
+      }
+      this.imgListData();
+    },
+    
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='less' scoped>
+.seaarchBox{
+	margin-bottom: 10px;
+	display: flex;
+	justify-content: space-between;
+	.searchLeft{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		.el-input{
+			width: 200px;
+		}
+		/deep/.el-input-group__append{
+			border-color: #43cdf6;
+		}
+		.title{
+			margin: 0 5px 0 15px;
+		}
+		.el-button{
+			background: #43cdf6;
+			color: #fff;
+    		border-color: #43cdf6;
+		}
+	}
+	.exportRight{
+		.renBtn{
+			background: #ff6262;
+			border-color: #ff6262;
+		}
+		.darkblueBtn{
+			background: #3762ff;
+			border-color: #3762ff;
+		}
+		.blueBtn{
+			background: #43cdf6;
+			border-color: #43cdf6;
+		}
+	}
+}
+.search-box {
+  text-align: right;
+  .el-input {
+    width: 200px;
+    vertical-align: middle;
+  }
+  .el-select {
+    vertical-align: middle;
+  }
+}
+/deep/.el-table th, /deep/.el-table td{
+    text-align: center;
+}
+/deep/.el-table th{
+    background-color: #43cdf6;
+}
+/deep/.el-table thead{
+    color: #fff;
+}
+/deep/.el-table__body tr.hover-row > td{
+	background-color: rgba(67,205,246,.22);
+}
+// 分页为蓝色调
+/deep/.el-pagination .el-pager li.active{
+  background-color: #0295ff!important;  
+}
+/deep/.el-pagination.is-background .el-pager li:not(.disabled):hover{
+  color: #0295ff;
+}
+/deep/.el-input__inner:focus{
+  outline: none;
+  border-color: #0295ff;
+}
+// table复选框
+/deep/.el-checkbox__input.is-checked .el-checkbox__inner{
+	background-color: #3762ff;
+    border-color: #3762ff;
+}
+</style>

+ 392 - 0
src/pages/plantGuard/disasterWarn/disasterWarnSet.vue

@@ -0,0 +1,392 @@
+<!-- 预警图片 -->
+<template>
+  <div class="innerMargin">
+      <el-card class="box-card">
+        <div class="top">
+          <div>预警设置</div>
+          <div>
+            <el-button
+              type="grayInfo"
+              size="small"
+              @click="resetDate()"
+              >重置</el-button
+            >
+            <el-button
+              type="blueInfo"
+              size="small"
+              @click="saveQxzData()"
+              >保存</el-button
+            >
+          </div>
+        </div>
+        <div class="bottom">
+            <div class="timeLIneLeft">
+                <!-- <div class="title">项目名称</div> -->
+                <div class="timeTree" :style="{'height':districtHeight-20+'px'}">
+                  <div class="scroll">
+                    <el-scrollbar>
+                      <el-tree 
+                        :data="menuData" 
+                        accordion
+                        :props="defaultProps"
+                        node-key="name"
+                        ref="tree"
+                        :default-expanded-keys="[menuDataFirst]"
+                        :highlight-current="true"
+                        :check-on-click-node="true"
+                        @node-click="treeClick">
+                          <span class="custom-tree-node" slot-scope="{ node, data }">
+                            <span>
+                              <!-- <i :class="[node.data.leaf?'el-icon-document':'',node.expanded?'el-icon-folder-opened':'el-icon-folder']"></i>{{ data.label }} -->
+                              <i :class="[renderIconContent(node,data),'treeicon']"></i>{{ data.name }}
+                            </span>
+                          </span>
+                      </el-tree>
+                    </el-scrollbar>
+                  </div>
+                </div>
+            </div>
+            <div class="warnSetRight">
+              <div :style="{'height':districtHeight+'px'}">
+                  <div class="scroll">
+                    <el-scrollbar>
+                      <div class="eleWarnSet">
+                        <div class="eleItem" v-for="(item,index) in equipEleListCopy" :key="item.e">
+                          <div class="title">
+                            <div>{{index+1}}</div>
+                            <div>{{item.name}}:<span>{{item.num}}</span>{{item.unit}}</div>
+                          </div>
+                          <div class="setVal">
+                            <div>
+                              <el-input v-model="item.max" type="number" placeholder="请输入上限值"></el-input>
+                            </div>
+                            <div>
+                              <el-input v-model="item.maxtxt" placeholder="请输入操作"></el-input>
+                            </div>
+                            <div>
+                              <el-input v-model="item.min" type="number" placeholder="请输入下限值"></el-input>
+                            </div>
+                            <div>
+                              <el-input v-model="item.mintxt" placeholder="请输入操作"></el-input>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </el-scrollbar>
+                  </div>
+              </div>
+            </div>
+        </div>
+      </el-card>
+  </div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》 from '《组件路径》';
+// 测试v-viewer注册
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  components: {
+  },
+  data() {
+    //这里存放数据
+    return {
+      id:this.$store.state.cbd_photo_id,
+      d_id:this.$store.state.cbd_photo_did,
+      id:'867435052201324',
+      d_id:829,
+      menuData: [],
+      menuDataFirst:'',
+      defaultProps: {
+        children: 'children',
+        label: 'name1',
+      },
+      districtHeight:800,
+      currProjectId:'',
+      equipEleList:[],
+      equipEleListCopy:[],
+    };
+  },
+  //监听属性 类似于data概念
+  computed: {
+  },
+  //监控data中的数据变化
+  watch: {},
+  //方法集合
+  methods: {
+    getProject() {
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.classify_page",
+        data: this.qs.stringify({
+          device_type:'11',
+        })
+      }).then(res => {
+        if (res.data.message == "") { 
+          var dat  = res.data.data;
+          this.menuData = dat.filter((item)=>{
+            return item.children.length>0
+          });
+          console.log(this.menuData);
+          if(this.menuData.length){
+            this.menuDataFirst = this.menuData[0].name;
+            this.currProjectId = this.menuData[0].children[0].device_id;
+            this.$nextTick(() => {
+              this.$refs.tree.setCurrentKey(this.menuData[0].children[0].name);
+            })
+            this.getQxzEle()
+          }
+        }
+      });
+    },
+    renderIconContent(node,data){
+      if(node.data.leaf){
+        return 'el-icon-document document'
+      }else{
+        if(node.expanded){
+          return 'el-icon-folder-opened'
+        }else{
+          return 'el-icon-folder'
+        }
+      }
+      
+    },
+    treeClick(data) {
+      console.log(data);
+      if(data.children){
+      }else{
+        this.currProjectId = data.device_id;
+        this.getQxzEle()
+      }
+    },
+    getQxzEle(){
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.warning_conf",
+        data: this.qs.stringify({
+          device_id:this.currProjectId,
+        })
+      }).then(res => {
+        if (res.data.message == "") {
+            let arr = new Array();
+            let conf = res.data.data.device_conf;
+            let dat = res.data.data.dat;
+            let deploy = JSON.parse(res.data.data.alarm_conf);
+            
+            for (let i1 in conf) {
+              if (conf[i1]) {
+                let arr2 = conf[i1].split("#");
+                let obj = {};
+                obj.e = "e" + i1.slice(1);
+                obj.name = arr2[0];
+                obj.unit = arr2[1];
+                
+                obj.max = deploy[i1][0];
+                obj.maxtxt = deploy[i1][1];
+                obj.min = deploy[i1][2];
+                obj.mintxt = deploy[i1][3];
+
+                for (let i2 in dat) {
+                  if (i1 == i2) {
+                    let arr3 = dat[i2].split("#");
+                    obj.num = arr3[0] == "-99.99" ? "N/A" : arr3[0];
+                    obj.icon = arr3[1];
+                    arr.push(obj);
+                  }
+                }
+              }
+            }
+            arr = arr.sort((a, b) => {
+              return Number(a.e.slice(-1)) - Number(b.e.slice(-1));
+            });
+            this.equipEleList = arr;
+            this.equipEleListCopy = JSON.parse(JSON.stringify(arr))
+        }
+      });
+    },
+    saveQxzData(){
+      var confData = {};
+      for(var i = 0;i<this.equipEleListCopy.length;i++){
+        confData[this.equipEleListCopy[i].e]=[this.equipEleListCopy[i].max,this.equipEleListCopy[i].maxtxt,this.equipEleListCopy[i].min,this.equipEleListCopy[i].mintxt]
+        if(i == this.equipEleListCopy.length-1){
+          var data = {
+            device_id:this.currProjectId,
+            conf:JSON.stringify(confData)
+          }
+          this.$axios({
+            method: "post",
+            url: "/api/api_gateway?method=weather.weather.warning_conf_save",
+            data: this.qs.stringify(data)
+          }).then(res => {
+            if (res.data.message == "") { 
+              this.$message({
+                message: '预警设置成功',
+                type: 'success'
+              });
+            }
+          });
+          
+        }
+      }
+      
+    },
+    resetDate(){
+      this.equipEleListCopy = JSON.parse(JSON.stringify(this.equipEleList))
+    }
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    this.getProject()
+    this.districtHeight = `${document.documentElement.clientHeight}`-230
+    
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style scoped lang="less">
+.top,.bottom,.photoTime{
+  display: flex;
+  justify-content: space-between;
+}
+.top{
+  >div:nth-child(2){
+    margin-right: 34px;
+  }
+}
+.timeLIneLeft{
+  width: 300px;
+  max-height: 700px;
+  overflow: auto;
+  .title{
+    font-size: 14px;
+    color: #0195ff;
+  }
+}
+.bottom,.warnSetRight{
+  flex: 1;
+}
+
+.el-tree{
+  font-size: 14px;
+  .treeicon{
+    margin-right: 5px;
+    color: #f0bb25;
+  }
+  .document.treeicon{
+    color: #d5eeff;
+  }
+  .is-current{
+    .treeicon:nth-child(1){
+      color: #ffa02a;
+    }
+  }
+}
+/deep/.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
+    background-color: #d5eeff;
+}
+/deep/.el-checkbox__input.is-checked .el-checkbox__inner{
+    background-color: #0295ff;
+    border-color: #006fbe;
+}
+// 滚动条
+.timeTree{
+  margin-right: 20px;
+  // height: 600px;
+}
+.scroll {
+    height: 100%;
+    overflow-y: hidden;
+    }
+    .el-scrollbar{
+    height: 100%;
+    }
+    .el-scrollbar__bar{
+    &.is-vertical{
+        width:100px;//滚动条宽度
+    }
+    }
+    /deep/.el-scrollbar__wrap{
+    overflow-y: auto;
+    overflow-x:hidden;
+    }
+    /deep/.el-scrollbar__view{
+      width: 99%;
+    }
+    /deep/.el-scrollbar__thumb{
+      background-color: rgb(2 149 255);
+    }
+    .el-scrollbar__thumb {
+    // 可设置滚动条颜色
+    background: red;
+}
+// 预警设置
+.warnSetRight{
+  margin-left: 10px;
+}
+.eleWarnSet{
+  .eleItem{
+    .title{
+      display: flex;
+      justify-content: left;
+      span{
+        font-size: 19px;
+        color: #ff5a5a;
+      }
+      >div:nth-child(1){
+        width: 26px;
+        height: 26px;
+        background: #0295ff;
+        border-radius: 50%;
+        text-align: center;
+        line-height: 26px;
+        color: #fff;
+      }
+      >div:nth-child(2){
+        line-height: 30px;
+        margin-left: 10px;
+        font-size: 14px;
+        color: #000;
+        font-weight: 700;
+      }
+    }
+    .setVal{
+      margin: 10px 0 10px 40px;
+      display: flex;
+      justify-content: space-between;
+      >div:nth-child(1),>div:nth-child(3){
+        width: 3.125rem;
+      }
+      >div:nth-child(2),>div:nth-child(4){
+        flex: 1;
+      }
+      div{
+        /deep/.el-input{
+          width: 94%;
+        }
+      }
+    }
+  }
+}
+.timeTree{
+  position: relative;
+}
+.timeTree::after{
+  position: absolute;
+  content: '';
+  width: 6px;
+  background: #e8e8e8;
+  right: 2px;
+  top: 0;
+  bottom: 0;
+}
+</style>

+ 591 - 0
src/pages/plantGuard/disasterWarn/sidebarWarn.vue

@@ -0,0 +1,591 @@
+<template>
+  <div :class="['legend', sidebarState ? 'open' : '']">
+    <div class="legend-menu" @click="toggleMenuHide" v-show="sidebarState"></div>
+    <div class="legend-detail">
+      <div class="content">
+        <div>
+          <div class="InfoEquipBox suspensionBox">
+            <div class="top">
+              <div class="titleTxt">
+                <span>基础信息</span>
+                <!-- <span>2021-1-03 12:12:00</span> -->
+              </div>
+              <div class="titleCtrl">
+                <i @click="getQxzEle(1)" class="el-icon-refresh"></i>
+              </div>
+            </div>
+            <div class="inner">
+              <div class="info">
+                <div class="infoItem">
+                  <div>
+                    <span class="title">环境监测设备</span>
+                  </div>
+                  <div>
+                    <span class="contentInfo">{{qxzName || qxzId}}</span>
+                  </div>
+                </div>
+                <div class="infoItem">
+                  <div>
+                    <span class="title">可视化设备</span>
+                  </div>
+                  <div>
+                    <span class="contentInfo">{{jkName || jkId}}</span>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="qxzEquipBox suspensionBox">
+            <div class="top">
+              <div class="titleTxt">
+                <span>实时状态</span>
+              </div>
+              <div class="titleCtrl">
+                <i @click="setEleName()" class="el-icon-s-tools"></i>
+              </div>
+            </div>
+            <div class="inner">
+              <el-scrollbar :style="{'height':qxzScrollHeight+'px'}">
+                <div class="equipList">
+                  <div class="equipState" v-for="item in equipEleList" v-bind:key="item.e">
+                    <div>
+                      <img
+                        :src="`../../../../static/images/irrigate/qxdev/icon_${item.icon}.png`"
+                        alt
+                      />
+                    </div>
+                    <div>
+                      <div class="val">{{item.num}}{{item.unit}}</div>
+                      <div class="name">{{item.name}}</div>
+                    </div>
+                  </div>
+                </div>
+              </el-scrollbar>
+            </div>
+          </div>
+          <div class="jkEquipBox suspensionBox">
+            <div class="top">
+              <div class="titleTxt">
+                <span>实时监控</span>
+              </div>
+              <div class="titleCtrl">
+                <img src="../../../../static/images/disasterWarn/enterIcon.png" alt="">
+              </div>
+            </div>
+            <div class="inner">
+              <div>
+                <div id="videoBon"></div>
+              </div>
+              <div class="videoCtrl">
+                <div class="direc">
+                  <div
+                    @mousedown="configCamera('move', 0)"
+                    @mouseup="stopConfigCamera()"
+                    class="upCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl1.png" alt="">
+                  </div>
+                  <div
+                    @mousedown="configCamera('move', 1)"
+                    @mouseup="stopConfigCamera()"
+                    class="downCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl2.png" alt="">
+                  </div>
+                  <div
+                    @mousedown="configCamera('move', 2)"
+                    @mouseup="stopConfigCamera()"
+                    class="leftCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl3.png" alt="">
+                  </div>
+                  <div
+                    @mousedown="configCamera('move', 3)"
+                    @mouseup="stopConfigCamera()"
+                    class="rightCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl4.png" alt="">
+                  </div>
+                  <div
+                    @click="configCamera('takephoto')"
+                    class="rightCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl5.png" alt="">
+                  </div>
+                  <div
+                    @mousedown="configCamera('move', 8)"
+                    @mouseup="stopConfigCamera()"
+                    class="rightCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl6.png" alt="">
+                  </div>
+                  <div
+                    @mousedown="configCamera('move', 9)"
+                    @mouseup="stopConfigCamera()"
+                    class="rightCtr"
+                  >
+                    <img src="../../../../static/images/jkctrl7.png" alt="">
+                  </div>
+                  
+                </div>
+                <div class="lookPhoto" @click="lookPhoto()">查看图片>></div>
+              </div>
+              
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import eleList from "../../../../static/js/irrigate/eleList.json"
+export default {
+  props: ["qxzName","jkName","projectName"],
+  components: {},
+  data(){
+    return {
+      sidebarState: false,
+      qxzScrollHeight: "",
+      equipEleList: [],
+      eleList:eleList,
+      player:null,
+    };
+  },
+  methods: {
+    toggleMenuShow() {
+      this.sidebarState = true;
+    },
+    toggleMenuHide(){
+      this.sidebarState = false;
+      this.$parent.equipWarnBoxShow();
+      if(this.player){
+        this.player.stop()
+        this.player = ''
+      }
+    },
+    getQxzEle(flag) {
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.qxz_status",
+        data: this.qs.stringify({
+          device_id: this.qxzId,
+          device_type_id: 5,
+          page_size: 1,
+          page: 1
+        })
+      }).then(res => {
+        if (res.data.message == "") {
+          console.log(res.data.data.counts)
+            let arr = new Array();
+            let conf = res.data.data.conf;
+            let dat = res.data.data.dat;
+            for (let i1 in conf) {
+              if (conf[i1]) {
+                let arr2 = conf[i1].split("#");
+                let obj = {};
+                obj.e = "e" + i1.slice(1);
+                obj.name = arr2[0];
+                obj.unit = arr2[1];
+                for (let i2 in dat) {
+                  if (i1 == i2) {
+                    let arr3 = dat[i2].split("#");
+                    obj.num = arr3[0] == "-99.99" ? "N/A" : arr3[0];
+                    obj.icon = arr3[1];
+                    arr.push(obj);
+                  }
+                }
+              }
+            }
+            arr = arr.sort((a, b) => {
+              return Number(a.e.slice(-1)) - Number(b.e.slice(-1));
+            });
+            this.equipEleList = arr;
+            if(flag){
+              this.$message({
+                message: '刷新成功',
+                type: 'success'
+              });
+            }
+            this.renderEle()
+        }
+      });
+    },
+    renderEle() {
+      this.$nextTick(() => {
+        if (this.equipEleList.length <= 2) {
+          this.qxzScrollHeight = 60;
+        } else if (this.equipEleList.length <= 4) {
+          this.qxzScrollHeight = 120;
+        } {
+          this.qxzScrollHeight = 164;
+        }
+      });
+    },
+    setEleName(){
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.qxz_config",
+        data: this.qs.stringify({
+          device_id: this.qxzId,
+          device_type_id: 5,
+          page_size: 1,
+          page: 1
+        })
+      }).then(res => {
+        if(res.data.message == ""){
+          let arr = new Array();
+            let defaultEle = res.data.data.default;
+            let conf = res.data.data.conf;
+            for (let i1 in defaultEle) {
+              if (conf[i1]) {
+                let obj = {};
+                obj.e = i1;
+                if(conf[i1]){
+                  var arr2 = conf[i1].split("#");
+                }else{
+                  var arr2 = defaultEle[i1].split("#");
+                }
+                obj.name = arr2[0];
+                obj.editname = arr2[0];
+                obj.unit = arr2[1];
+                obj.defaultName = defaultEle[i1].split("#")[0];
+                arr.push(obj);
+              }
+            }
+            arr = arr.sort((a, b) => {
+              return Number(a.e.slice(-1)) - Number(b.e.slice(-1));
+            });
+            console.log(arr);
+          this.$emit('setQxzEleName',arr)
+        }else{
+          this.$message({
+            message: res.data.message,
+            type: 'error'
+          });
+        }
+      })
+    },
+    getMonitor(){
+      if(this.player){
+          this.player.stop()
+          this.player = ''
+        }
+        //监控
+        this.$axios({
+          url: "/api/api_gateway?method=camera.camera_manage.addr_camera",
+          method: "POST",
+          data: this.qs.stringify({ 
+            device_id: this.jkId,
+           }),
+        }).then((res) => {
+          if (res.data.message == "") {
+            let data = eval("(" + res.data.data + ")");
+            let hlsHd = data.hlsHd;
+            // this.jkSrc = hlsHd
+            // console.log(this.jkSrc)
+            let playHtml = `<video id="myPlayerBox"  muted autoplay  poster='' controls playsInline  webkit-playsinline src="${hlsHd}"  style="width:100%; height:100%;"></video>`;
+            console.log(hlsHd);
+            document.getElementById("videoBon").innerHTML = playHtml;
+            // setTimeout(() => {
+            //   console.log(document.getElementById("myPlayerBox"));
+              this.player = new EZUIPlayer("myPlayerBox");
+            //   this.player.play();
+            //   // let player = videojs('myPlayerBox')
+            //   // player.src({ src: hlsHd, type: 'application/x-mpegURL' })
+            //   // player.play()
+            // }, 1000);
+          }
+        });
+    },
+    lookPhoto(){
+      this.$router.push('/plantGuard/warnPhoto')
+    },
+    //关闭方向
+    stopConfigCamera() {
+      this.$axios({
+        method: "POST",
+        url: "/api/api_gateway?method=camera.camera_manage.ctrl_camera",
+        data: this.qs.stringify({
+          device_id: this.jkId,
+          ctrl: "stop",
+        }),
+      });
+    },
+    //上下左右和拍照
+    configCamera(ctrl, movenum) {
+      if (ctrl == "takephoto") {
+        this.$axios({
+          method: "POST",
+          url: "/api/api_gateway?method=camera.camera_manage.camera_takephoto",
+          data: this.qs.stringify({
+            device_id: this.jkId,
+            ctrl: ctrl,
+          }),
+        }).then((res) => {
+          if (res.data.code == 200) {
+            this.$message({
+              type:'success',
+              message:"拍照成功"
+            })
+          } else {
+            this.$message({
+              type:'error',
+              message:"设备网络异常!"
+            })
+          }
+        });
+      } else {
+        //上下左右、放大、缩小
+        this.$axios({
+          method: "POST",
+          url: "/api/api_gateway?method=camera.camera_manage.ctrl_camera",
+          data: this.qs.stringify({
+            device_id: this.jkId,
+            ctrl: ctrl,
+            movenum: movenum,
+          }),
+        }).then((res) => {
+          if (res.data) {
+            
+          } else {
+            this.$message({
+              type:'error',
+              message:"设备网络异常!"
+            })
+          }
+        });
+      }
+    },
+  },
+  computed:{
+    qxzId(){
+      return this.$store.state.qxz_wran_id
+    },
+    jkId(){
+      return this.$store.state.jk_wran_id
+    },
+  },
+  mounted() {
+    // this.getQxzEle()
+    // this.getMonitor()
+  },
+  destroyed() {
+     if(this.player){
+          this.player.stop()
+          this.player = ''
+        }
+  }, //生命周期 - 销毁完成
+};
+</script>
+<style lang='less' scoped>
+.legend {
+  position: absolute;
+  top: 10px;
+  bottom: 0px;
+  right: 0px;
+  display: flex;
+  align-items: flex-start;
+  z-index: 9;
+  .legend-menu {
+    width: 27px;
+    height: 103px;
+    cursor: pointer;
+    margin-top: calc(50vh - 120px);
+    background: url("../../../../static/images/disasterWarn/sliderBtnBj.png")
+      no-repeat center;
+    i {
+      transition: 0.5s;
+    }
+  }
+  .legend-menu:hover {
+    opacity: 1;
+  }
+  .legend-detail {
+    transition: 0.8s;
+    width: 0px;
+    background: #fff;
+    height: 100%;
+    overflow-x: hidden;
+    overflow-y: auto;
+    border-top-left-radius: 6px;
+    border-bottom-left-radius: 6px;
+    color: #212121;
+    background: url("../../../../static/images/disasterWarn/sliderBj.png");
+    .content {
+      padding: 10px 20px 20px;
+      box-sizing: border-box;
+      height: 100%;
+    }
+  }
+}
+.legend.open {
+  .legend-menu {
+    opacity: 1;
+    border-radius: 4px;
+  }
+  .legend-detail {
+    width: 400px;
+  }
+}
+// 悬浮框样式
+.suspensionBox {
+  overflow: hidden;
+  .top {
+    display: flex;
+    justify-content: space-between;
+    color: #fff;
+    align-items: center;
+    padding: 13px 5px;
+    border-bottom: 1px solid #5c5c5c;
+    .titleTxt{
+      font-size: 14px;
+      position: relative;
+      :nth-child(2){
+        font-size: 12px;
+      }
+      &::after{
+        position: absolute;
+        content: '';
+        width: 30px;
+        height: 4px;
+        background: #04d5e8;
+        border-radius: 3px;
+        left: 0px;
+        bottom: -13px;
+      }
+    }
+    i {
+      color: #04d5e8;
+      cursor: pointer;
+      font-size: 20px;
+    }
+  }
+}
+.popupInner {
+  position: absolute;
+  right: 0;
+  top: 12px;
+  z-index: 200;
+}
+.InfoEquipBox{
+  .info{
+    display: flex;
+    flex-wrap: wrap;
+    >div{
+      display: flex;
+      width: 100%;
+      >div{
+        &:nth-child(1){
+          width: 89px;
+          text-align: center;
+        }
+        &:nth-child(2){
+          width: 77%;
+        }
+        margin-top: 20px;
+        .title{
+          color: #92c2f3;
+          border: 1px solid #92c2f3;
+          padding: 3px 5px;
+          display: block;
+          vertical-align: middle;
+        }
+        .contentInfo{
+          color: #92c2f3;
+          background: #21456b;
+          padding: 5px 5px;
+          display: block;
+          vertical-align: middle;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-left: 10px;
+        }
+      }
+      
+    }
+  }
+}
+.qxzEquipBox {
+  color: #fff;
+  .top {
+    .uptime {
+      color: #eee;
+    }
+    .historyBtn {
+      border: 1px solid #00c2ff;
+      color: #00c2ff;
+      border-radius: 14px;
+      padding: 2px 4px;
+      cursor: pointer;
+    }
+  }
+  .inner {
+    .el-scrollbar {
+      // height: 198px;
+      /deep/.el-scrollbar__wrap {
+        overflow-x: hidden;
+      }
+    }
+    .equipList {
+      display: flex;
+      flex-wrap: wrap;
+      padding-bottom: 10px;
+      .equipState {
+        width: 50%;
+        display: flex;
+        // justify-content: center;
+        align-items: center;
+        margin-top: 10px;
+        > div:first-child {
+          margin-right: 5px;
+        }
+        .val {
+          font-size: 14px;
+          background-image: -webkit-linear-gradient(bottom, #069dff, #09fdff);
+          -webkit-background-clip: text;
+          -webkit-text-fill-color: transparent;
+          font-weight: 700;
+        }
+        .name {
+          color: #92c2f3;
+          width: 70px;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          white-space: nowrap;
+        }
+      }
+    }
+  }
+}
+.jkEquipBox{
+  .inner{
+    background: #1e2435;
+  }
+  #videoBon{
+    margin: 20px 0 0;
+  }
+  .videoCtrl{
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    color: #0096ff;
+    .lookPhoto{
+      cursor: pointer;
+    }
+  }
+  .direc{
+    display: flex;
+    justify-content: space-around;
+    justify-content: right;
+    img{
+      width: 30px;
+      cursor: pointer;
+      margin: 0 3px;
+    }
+  }
+}
+
+</style>

+ 689 - 0
src/pages/plantGuard/disasterWarn/warnPhoto.vue

@@ -0,0 +1,689 @@
+<!-- 预警图片 -->
+<template>
+  <div class="innerMargin">
+      <el-card class="box-card">
+        <div class="cbdPhoto">
+            <div class="timeLIneLeft">
+                <div class="title">项目名称</div>
+                <div class="timeTree">
+                  <div class="scroll">
+                    <el-scrollbar>
+                      <el-tree 
+                        :data="menuData" 
+                        accordion
+                        :props="defaultProps"
+                        node-key="name"
+                        ref="tree"
+                        :default-expanded-keys="[menuDataFirst]"
+                        :highlight-current="true"
+                        :check-on-click-node="true"
+                        @node-click="treeClick">
+                          <span class="custom-tree-node" slot-scope="{ node, data }">
+                            <span>
+                              <!-- <i :class="[node.data.leaf?'el-icon-document':'',node.expanded?'el-icon-folder-opened':'el-icon-folder']"></i>{{ data.label }} -->
+                              <i :class="[renderIconContent(node,data),'treeicon']"></i>{{ data.name }}
+                            </span>
+                          </span>
+                      </el-tree>
+                    </el-scrollbar>
+                  </div>
+                </div>
+            </div>
+            <div class="photosRight">
+              <div class="typeBtns">
+                <div>
+                  时间筛选:
+                  <el-date-picker
+                    v-model="queryInfo.searchTime"
+                    type="daterange"
+                    size="small" 
+                    range-separator="至"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+                    @change="DateChange">
+                  </el-date-picker>
+                </div>
+                <div>
+                  <el-button 
+                    type="blueInfo" 
+                    size="small" 
+                    @click="equipStatusCheck('1')"
+                    >刷新</el-button
+                  >
+                  <el-button
+                    v-if="delBtnState"
+                    type="blueInfo"
+                    size="small"
+                    @click="equipStatusCheck('2')"
+                    >批量删除</el-button
+                  >
+                  <el-button
+                    v-if="!delBtnState"
+                    type="blueInfo"
+                    size="small"
+                    @click="equipStatusCheck('3')"
+                    >删除</el-button
+                  >
+                  <el-button
+                    v-if="!delBtnState"
+                    type="grayInfo"
+                    size="small"
+                    @click="equipStatusCheck('4')"
+                    >取消</el-button
+                  >
+                  <!-- <el-button type="blueInfo" size="small" @click="equipStatusCheck('5')"
+                    >一键删除</el-button
+                  >
+                  <el-button
+                    v-if="downBtnState"
+                    type="blueInfo"
+                    size="small"
+                    @click="equipStatusCheck('7')"
+                    >图片下载</el-button
+                  >
+                  <el-button
+                    v-if="!downBtnState"
+                    type="blueInfo"
+                    size="small"
+                    @click="equipStatusCheck('8')"
+                    >下载</el-button
+                  >
+                  <el-button
+                    v-if="!downBtnState"
+                    type="grayInfo"
+                    size="small"
+                    @click="equipStatusCheck('9')"
+                    >取消</el-button
+                  > -->
+                </div>
+              </div>
+              <div class="phohos">
+                <el-row :gutter="20">
+                  <el-col  :xs="12" :sm="12" :md="12" :lg="8" :xl="6" v-for="(item) in imgDataList" :key="item.id">
+                    <div class="grid-content bg-gray">
+                      <div class="delBoxs">
+                        <i
+                          class="iconfont icon-shanchu"
+                          v-show="delBtnState && downBtnState"
+                          @click="delectImg(item.id)"
+                        ></i>
+                        <el-checkbox
+                          v-show="!delBtnState || !downBtnState"
+                          v-model="item.checked"
+                        ></el-checkbox>
+                      </div>
+                      <div class="imgBox" v-viewer>
+                        <img
+                          v-lazy="item.warning_pic"
+                          @error="errImg"
+                          alt
+                        />
+                      </div>
+                      <div class="photoTime" >
+                        <span>{{item.warning_time*1000 | formatTime}}</span>
+                        <span  @click="searchResult(item)">
+                          <i class="el-icon-search"></i>预警信息
+                        </span>
+                      </div>
+                    </div>
+                  </el-col>
+                  <el-col  :xs="12"  v-if="!imgDataList.length">
+                    <div class="empty">
+                      <img src="../../../../static/images/emptyDataImg2.png" alt="">
+                    </div>
+                  </el-col>
+                </el-row>
+
+                <el-pagination
+                  v-if="imgDataList.length"
+                  background
+                  layout="prev, pager, next"
+                  :total="totalNum"
+                  @current-change="changePage"
+                  :current-page="queryInfo.page"
+                  :page-size="8"
+                ></el-pagination>
+              </div>
+                
+            </div>
+        </div>
+      </el-card>
+      <el-dialog
+        title="预警详情"
+        :visible.sync="detailsShow"
+        width="500px"
+        top="180px"
+      >
+        <div class="discernResult">
+          <div :title="currDetails.device_id">关联设备:{{currDetails.device_name || '设备:'+currDetails.device_id}}</div>
+          <div>拍照时间:{{currDetails.warning_time*1000 | formatTime}}</div>
+          <div>拍照原因:{{currDetails.warning_info}}</div>
+        </div>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》 from '《组件路径》';
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  components: {
+  },
+  data() {
+    //这里存放数据
+    return {
+      currProjectId:'',
+      menuData: [],
+      menuDataFirst:'',
+      defaultProps: {
+        children: 'children',
+        label: 'name1',
+      },
+      totalNum:0,
+      queryInfo:{
+        searchTime:'',
+        begin:'',
+        end:'',
+        page:1,
+      },
+      imgDataList:[],
+      delBtnState:true,
+      downBtnState: true,
+      detailsShow:false,
+      currDetails:{},
+    };
+  },
+  //监听属性 类似于data概念
+  computed: {
+
+  },
+  //监控data中的数据变化
+  watch: {},
+  //方法集合
+  methods: {
+    getProject() {
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.classify_page",
+        data: this.qs.stringify({
+          device_type:'11',
+        })
+      }).then(res => {
+        if (res.data.message == "") { 
+          var dat  = res.data.data;
+          this.menuData = dat.filter((item)=>{
+            return item.children.length>0
+          });
+          if(this.menuData.length){
+            if(this.$store.state.wran_project_name){
+              this.menuDataFirst = this.$store.state.wran_project_name;
+              this.currProjectId = this.$store.state.jk_wran_id;
+            }else{
+              this.menuDataFirst = this.menuData[0].name;
+              this.currProjectId = this.menuData[0].children[0].device_id;
+            }
+            this.$nextTick(() => {
+            if(this.$store.state.jk_wran_name){
+              this.$refs.tree.setCurrentKey(this.$store.state.jk_wran_name);
+            }else{
+              this.$refs.tree.setCurrentKey(this.menuData[0].children[0].name);
+            }
+            })
+            this.imgListData()
+          }
+        }
+      });
+    },
+    treeClick(data) {
+      console.log(data);
+      if(data.children){
+      }else{
+        this.currProjectId = data.device_id;
+        this.imgListData()
+      }
+    },
+    // 列表图片加载失败
+    errImg(e) {
+      e.target.src = $imghost + "/images/expertDiagnosis/ku/noData.jpg";
+    },
+    DateChange(val){
+      if(this.queryInfo.searchTime){
+        this.queryInfo.begin = parseInt(
+          new Date(this.queryInfo.searchTime[0]).getTime() / 1000
+        )
+        this.queryInfo.end = parseInt(
+          new Date(this.queryInfo.searchTime[1]).getTime() / 1000
+        )
+      }else{
+        this.queryInfo.begin = '';
+        this.queryInfo.end = '';
+      }
+      this.imgListData();
+    },
+    renderIconContent(node,data){
+      if(node.data.leaf){
+        return 'el-icon-document document'
+      }else{
+        if(node.expanded){
+          return 'el-icon-folder-opened'
+        }else{
+          return 'el-icon-folder'
+        }
+      }
+      
+    },
+    //控制按钮
+    equipStatusCheck(flag) {
+      if (flag == 1) {
+        this.imgListData(); //图片列表数据请求
+      }
+      if (flag == 2) {
+        //批量删除
+        this.delBtnState = false;
+        this.downBtnState = true;
+      }
+
+      if (flag == 3) {
+        //删除
+        this.idList = this.imgDataList
+          .filter((item) => {
+            return item.checked == true;
+          })
+          .map((item) => {
+            return item.id;
+          });
+        if (this.idList.length == 0) {
+          this.$message.warning("请选择要删除的图片!");
+        } else {
+          this.delImgFun(this.idList);
+        }
+      }
+
+      if (flag == 4) {
+        //取消
+        this.imgDataList.map((item) => {
+          item.checked = false;
+        });
+        this.delBtnState = true;
+      }
+
+      if (flag == 5) {
+        this.delImgFun("");
+      }
+      if (flag == 6) {
+        this.$router.push(`/index/messageWarn/${this.id}`);
+      }
+      if (flag == 7) {
+        this.downBtnState = !this.downBtnState;
+        this.delBtnState = true;
+      }
+      if (flag == 8) {
+        //批量下载图片
+        this.idList = this.imgDataList
+          .filter((item) => {
+            return item.checked == true;
+          })
+          .map((item) => {
+            return item.id;
+          });
+        if (this.idList.length == 0) {
+          this.$message.warning("请选择要下载的图片!");
+        } else {
+          this.downPhoto(this.idList);
+        }
+      }
+      if (flag == 9) {
+        this.imgDataList.map((item) => {
+          item.checked = false;
+        });
+        this.downBtnState = !this.downBtnState;
+      }
+    },
+     //图片列表数据请求
+    imgListData() {
+      let postData = this.qs.stringify({
+        device_id: this.currProjectId,
+        page_size: 8,
+        page: this.queryInfo.page,
+        start_time:  this.queryInfo.begin, //开始时间(时间戳)
+        end_time: this.queryInfo.end, //结束时间(时间戳)
+      });
+      this
+        .$axios({
+          method: "post",
+          url: "/api/api_gateway?method=weather.weather.warning_info", //forecast.forecast_system.equip_photo
+          data: postData,
+        })
+        .then((res) => {
+          if(res.data.message == ""){
+            this.imgDataList = res.data.data.data
+            this.totalNum = res.data.data.nums;
+          }
+
+        })
+        .catch((err) => {
+          console.log(err);
+        });
+    },
+    //改变page
+    changePage(val) {
+      this.queryInfo.page = val;
+      this.imgListData();
+    },
+    delectImg(id){
+      this.delImgFun([id])
+    },
+    // 批量删除
+    delImgFun(idList) {
+      this.$confirm("此操作将永久删除该设备图片, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$axios({
+            method: "POST",
+            url:
+              "/api/api_gateway?method=weather.weather.warning_info",
+            data: this.qs.stringify({
+              id: JSON.stringify(idList),
+            }),
+          }).then((res) => {
+            if (res.data.message == "") {
+              this.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+              this.imgListData(); //图片列表数据请求
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    downloadFile(data) {
+      let blob = new Blob([data], { type: "application/zip" });
+      let url = window.URL.createObjectURL(blob);
+      const link = document.createElement("a"); // 创建a标签
+      link.href = url;
+      link.download = "下载图片"; // 重命名文件
+      link.click();
+      URL.revokeObjectURL(url); // 释放内存
+    },
+    downPhoto(arr) {
+      let uid = this.$store.state.user_id;
+      let image_id = arr.join(",");
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=forecast.worm_lamp.get_task_id",
+        data: this.qs.stringify({
+          image_id,
+          myuid: uid,
+        }),
+      }).then((res) => {
+        if (res.data.message == "") {
+          this.$message.success("图片下载中!");
+          let that = this;
+          this.cy_id = res.data.data;
+          function downPhotoState() {
+            if (that.times >= 0) {
+              that.times--;
+              that
+                .$axios({
+                  method: "POST",
+                  url: "/api/api_gateway?method=forecast.worm_lamp.check_down",
+                  data: that.qs.stringify({
+                    get_id: that.cy_id,
+                  }),
+                })
+                .then((res) => {
+                  if (res.data.data) {
+                    // 判断后台从阿里云下载图片是否完成
+                    clearInterval(interval);
+                    that
+                      .$axios({
+                        method: "POST",
+                        url: "/api/image_down",
+                        withCredentials: true,
+                        responseType: "blob",
+                        data: that.qs.stringify({
+                          get_id: that.cy_id,
+                        }),
+                      })
+                      .then((res) => {
+                        that.downloadFile(res.data);
+                      });
+                  }
+                })
+                .catch((error) => this.$message.error(error));
+            } else {
+              clearInterval(interval);
+              that.$message.warning("图片下载失败!");
+            }
+          }
+          var interval = setInterval(downPhotoState, 1000);
+        }
+      });
+    },
+    // 预警信息
+    searchResult(data) {
+      this.currDetails = data;
+      this.detailsShow = true;
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    this.getProject()
+    console.log(this.id);
+    console.log(this.d_id);
+    
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {
+    this.$store.commit('setData',{
+        name:'wran_project_name',
+        val:''
+    })
+    this.$store.commit('setData',{
+        name:'jk_wran_name',
+        val:''
+    })
+  }, //生命周期 - 销毁完成
+  activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style scoped lang="less">
+.cbdPhoto,.photoTime{
+  display: flex;
+  justify-content: space-between;
+}
+.typeBtns{
+  /deep/.el-input-group__append{
+    background-color: #34abff;
+    color: #ffffff;
+    border: 1px solid #34abff;
+  }
+  .el-input{
+    width: 230px;
+    // display: inline-block;
+  }
+}
+.photoTime{
+  align-items: center;
+}
+.timeLIneLeft{
+  width: 300px;
+  max-height: 700px;
+  overflow: auto;
+  .title{
+    font-size: 14px;
+    color: #0195ff;
+  }
+}
+.photosRight{
+  flex: 1;
+}
+/deep/.el-radio-button__orig-radio:checked + .el-radio-button__inner {
+    color: #FFFFFF;
+    background-color: #0195ff;
+    border-color: #0195ff;
+    -webkit-box-shadow: -1px 0 0 0 #14a478;
+    box-shadow: -1px 0 0 0 #14a478;
+}
+/deep/.el-radio-button__inner:hover{
+  color: #0195ff;
+}
+.phohos{
+  margin-top: 20px;
+  .bg-gray{
+    position: relative;
+    background: #eee;
+    padding: 15px;
+    border-radius: 5px;
+    margin-bottom: 11px;
+    .imgBox{
+      height: 315px;
+      background: #000;
+      text-align: center;
+      cursor: pointer;
+      position: relative;
+      overflow: hidden;
+      img{
+        height: 100%;
+        position: absolute;
+        left: 50%;
+        transition: 1s;
+        transform: translateX(-50%);
+      }
+      .uptime{
+        position: absolute;
+        left: 0;
+        top: 0;
+        color: #fff;
+        font-size: 14px;
+        line-height: 28px;
+        padding-left: 5px;
+      }
+    }
+    .delBoxs{
+      position: absolute;
+      right: 20px;
+      color: red;
+      z-index: 9;
+      cursor: pointer;
+      top: 25px;
+      i{
+        font-size: 18px;
+        display: none;
+      }
+    }
+    
+    .photoTime{
+      margin-top: 5px;
+      font-size: 14px;
+      line-height: 22px;
+      span:nth-child(2){
+        background: #f0c700;
+        color: #fff;
+        padding: 2px 7px;
+        border-radius: 3px;
+        cursor: pointer;
+      }
+    }
+  }
+  .bg-gray:hover .delBoxs i{
+    display: block;
+  }
+}
+.el-pagination .el-pager li.active{
+  background-color: #0195ff!important;
+}
+.el-tree{
+  font-size: 14px;
+  .treeicon{
+    margin-right: 5px;
+    color: #f0bb25;
+  }
+  .document.treeicon{
+    color: #d5eeff;
+  }
+  .is-current{
+    .treeicon:nth-child(1){
+      color: #ffa02a;
+    }
+  }
+}
+/deep/.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
+    background-color: #d5eeff;
+}
+/deep/.el-checkbox__input.is-checked .el-checkbox__inner{
+    background-color: #0295ff;
+    border-color: #006fbe;
+}
+// 滚动条
+.timeTree{
+  margin-right: 20px;
+  height: 650px;
+}
+.scroll {
+    height: 100%;
+    overflow-y: hidden;
+    }
+    .el-scrollbar{
+    height: 100%;
+    }
+    .el-scrollbar__bar{
+    &.is-vertical{
+        width:100px;//滚动条宽度
+    }
+    }
+    /deep/.el-scrollbar__wrap{
+    overflow-y: auto;
+    overflow-x:hidden;
+    }
+    /deep/.el-scrollbar__thumb{
+      background-color: rgb(2 149 255);
+    }
+    .el-scrollbar__thumb {
+    // 可设置滚动条颜色
+    background: red;
+}
+// 分页为蓝色调
+/deep/.el-pagination .el-pager li.active{
+  background-color: #0295ff!important;  
+}
+/deep/.el-pagination.is-background .el-pager li:not(.disabled):hover{
+	color: #0295ff;
+}
+/deep/.el-input__inner:focus{
+  outline: none;
+  border-color: #0295ff;
+}
+// 预警信息弹框
+.discernResult{
+  div{
+    line-height: 30px;
+    cursor: pointer;
+  }
+}
+.typeBtns {
+  display: flex;
+  justify-content: space-between;
+}
+
+.empty{
+  line-height: 600px;
+  text-align: center;
+}
+</style>

+ 177 - 0
src/pages/plantGuard/disasterWarn/windowPopUp.vue

@@ -0,0 +1,177 @@
+<template>
+  <div v-show="visible">
+    <div class="infoWindowBox">
+        <div class="topNav">
+            <div class="title">最新预警消息</div>
+            <div class="record">
+              <img src="../../../../static/images/disasterWarn/enterIcon.png" alt="">
+            </div>
+        </div>
+        <div class="msgInfo">
+          <div class="msgItem" v-for="(item,index) in msgList" :key="index">
+            <div class="warnVal">
+              <div>
+                <img src="../../../../static/images/disasterWarn/upPopIconicon.png" alt="">
+              </div>
+              <div class="val">{{item.warning_info}}</div>
+              <div class="time">
+                {{item.warning_time*1000 | formatTime}}
+                <img @click="amplificationA(item)" src="../../../../static/images/disasterWarn/photoIcon.png" alt="">
+              </div>
+            </div>
+            <div class="meddle">
+              <span>操作:</span>{{item.action}}
+            </div>
+          </div>
+            
+        </div>
+    </div>
+    <div class="amap-info-sharp">
+    </div>
+    <!-- 查看大图 -->
+      <viewer
+        v-show="false"
+        :images="recognitionImage"
+        ref="viewer"
+        @inited="inited"
+        :index="3"
+      >
+        <img v-for="(src, index) in recognitionImage" :src="src" :key="index" />
+      </viewer>
+      <!-- 查看大图 -->
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import Viewer from "v-viewer";
+import "viewerjs/dist/viewer.css";
+Vue.use(Viewer);
+export default {
+  data() {
+    return {
+      infoWindow: null,
+      visible:false,
+      msgList:[],
+      currEquip: {
+        device_type_id:null,
+        device_id:null,
+        device_name:null,
+        city:null,
+        addtime:0,
+      },
+      recognitionImage:['http://182.92.193.64:8003/Basics/cbd/867435052201324/2021/3/11/20210311161847620251.jpg'],
+    };
+  },
+  methods: {
+    initialize(e) {
+      this.visible = e.visible;
+      this.currEquip = e.currEquip;
+      this.infoWindow = e.infoWindow;
+      this.$axios({
+        method: "post",
+        url: "/api/api_gateway?method=weather.weather.warning_info", //forecast.forecast_system.equip_photo
+        data: this.qs.stringify({
+          device_id: this.$store.state.qxz_wran_id,
+          page_size: 3,
+        }),
+      })
+      .then((res) => {
+        if(res.data.message == ""){
+          this.msgList = res.data.data.data
+        }
+      })
+      .catch((err) => {
+        console.log(err);
+      });
+    },
+    //关闭
+    close() {
+      this.infoWindow.close();
+    },
+    // 配置查看大图插件
+    inited(viewer) {
+      this.$viewer = viewer;
+    },
+    amplificationA(item) {
+      this.recognitionImage = [item.warning_pic]
+      this.$viewer.view();
+    },
+  },
+  mounted(){
+  }
+};
+</script>
+ 
+<style  scoped lang="less">
+.infoWindowBox{
+    box-shadow: 0px 0px 4px 0px #0161ff;
+    background: rgba(12,20,44,.80);
+    color: #fff;
+    padding: 20px;
+    border-radius: 3px;
+    width: 320px;
+    .topNav{
+        display: flex;
+        justify-content: space-between;
+        padding-bottom: 10px;
+        border-bottom: 1px solid #0b9ac5a6;
+        align-items: center;
+        .title{
+            font-size: 14px;
+            color: #04d5e8;
+            span{
+                color: #fbc900;
+            }
+        }
+        .record{
+            color: #01d5ed;
+            cursor: pointer;
+            &:hover{
+                text-decoration-line: underline;
+            }
+        }
+    }
+    .msgInfo{
+        .msgItem{
+            margin-top: 10px;
+            .warnVal{
+              display: flex;
+              justify-content: space-between;
+              line-height: 33px;
+              img{
+                vertical-align: text-bottom;
+              }
+              .val{
+                width: 168px;
+                white-space: nowrap;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                font-size: 14px;
+              }
+              .time{
+                img{
+                  vertical-align: revert;
+                  cursor: pointer;
+                }
+              }
+            }
+            .meddle{
+              text-indent: 23px;
+              color:#04d5e8;
+              span{
+                color:#fff;
+              }
+            }
+        }
+
+    }
+}
+.amap-info-sharp{
+    bottom: 0;
+    left: 50%;
+    margin-left: -18px;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid rgba(12, 20, 44, 0.8);
+}
+</style>

+ 88 - 25
src/pages/plantGuard/equipManage/equipManage.vue

@@ -19,6 +19,7 @@
               <el-option label="孢子仪" value="7"></el-option>
               <el-option label="性诱设备" value="8"></el-option>
               <el-option label="糖醋测报" value="9"></el-option>
+              <el-option label="灾害预警" value="1112"></el-option>
             </el-select>
             <el-input
               style="cursor: pointer"
@@ -57,36 +58,42 @@
               <div class="img-box">
                 <template v-if="item.device_type_id == '2'">
                   <img src="@/assets/images/equipdistribute/scdIconOn.png" />
-                  <p>杀虫灯</p>
                 </template>
                 <template v-if="item.device_type_id == '3'">
-                  <img src="@/assets/images/equipdistribute/cbdIconOn.png" />
-                  <p>测报灯</p>
+                  <img src="@/assets/images/equipdistribute/cbdIconOn.png" />>
                 </template>
                 <template v-if="item.device_type_id == '4'">
                   <img src="@/assets/images/equipdistribute/znxyOn.png" />
-                  <p>智能性诱</p>
                 </template>
                 <template v-if="item.device_type_id == '5'">
                   <img src="@/assets/images/equipdistribute/hjjcIconOn.png" />
-                  <p>环境监测</p>
                 </template>
                 <template v-if="item.device_type_id == '6'">
                   <img src="@/assets/images/equipdistribute/jkIconOn.png" />
-                  <p>监控设备</p>
                 </template>
                 <template v-if="item.device_type_id == '7'">
                   <img src="@/assets/images/equipdistribute/bzyIconOn.png" />
-                  <p>孢子仪</p>
                 </template>
                 <template v-if="item.device_type_id == '8'">
                   <img src="@/assets/images/equipdistribute/xyOn.png" />
-                  <p>性诱设备</p>
                 </template>
-                <template v-if="item.device_type_id == 9">
+                <template v-if="item.device_type_id == '9'">
                   <img src="@/assets/images/equipdistribute/tccbOn.png" />
-                  <p>糖醋测报</p>
                 </template>
+                <template v-if="item.device_type_id == '11'">
+                  <img src="@/assets/images/equipdistribute/warnOn11.png" />
+                </template>
+                <template v-if="item.device_type_id == '12'">
+                  <img src="@/assets/images/equipdistribute/warnOn12.png" />
+                </template>
+                <div class="equipName">
+                  <span>
+                    {{ item.device_name || "无" }}
+                  </span>
+                  <span class="editNameIcon" @click="modifyName(item.device_id, item.device_name)">
+                    <i class="el-icon-edit-outline"></i>
+                  </span>
+                </div>
               </div>
               <div class="detail">
                 <p>
@@ -97,7 +104,11 @@
                   适配用户
                   <span>{{ item.device_user || "无" }}</span>
                 </p>
-                <p>
+                <p v-if="item.name">
+                  设备组名称
+                  <span>{{ item.name || "无" }}</span>
+                </p>
+                <p v-else>
                   设备名称
                   <span>{{ item.device_name || "无" }}</span>
                 </p>
@@ -111,8 +122,8 @@
                 </p>
               </div>
               <div class="bottom">
-                <span @click="modifyName(item.device_id, item.device_name)">
-                  <i class="el-icon-edit-outline"></i> 修改名称
+                <span v-if="item.device_type_id == '11' || item.device_type_id == '12'" @click="modifyGroupName(item.device_id, item.device_name)">
+                  <i class="el-icon-edit-outline"></i> 修改设备组
                 </span>
                 <span @click="addPosition(item.device_id, item.lng, item.lat)">
                   <i class="el-icon-location-outline"></i> 添加位置
@@ -392,7 +403,7 @@ export default {
     // 修改设备名称
     modifyName(id, device_name) {
       let value = device_name;
-      this.$prompt("", "修改名字", {
+      this.$prompt("", "修改设备名称", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         inputPlaceholder: device_name,
@@ -423,10 +434,51 @@ export default {
           }
         })
         .catch(() => {
-          this.$message({
-            type: "info",
-            message: "取消输入",
-          });
+          // this.$message({
+          //   type: "info",
+          //   message: "取消输入",
+          // });
+        });
+    },
+    // 修改设备组名称
+    modifyGroupName(id, device_name) {
+      let value = device_name;
+      this.$prompt("", "修改设备组名称", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        inputPlaceholder: device_name,
+      })
+        .then(({ value }) => {
+          if (value) {
+            this.$axios({
+              method: "POST",
+              url: "/api/api_gateway?method=weather.weather.warning_change",
+              data: this.qs.stringify({
+                device_id: id,
+                name: value,
+              }),
+            }).then((res) => {
+              if (res.data.message == "") {
+                this.getList();
+                this.$message({
+                  type: "success",
+                  message: "修改成功",
+                });
+              }else{
+                this.$message({
+                  type: "error",
+                  message: res.data.message,
+                });
+              }
+            });
+          } else {
+            this.$message({
+              type: "info",
+              message: "内容不能为空",
+            });
+          }
+        })
+        .catch(() => {
         });
     },
     //通过经纬度搜索定位
@@ -597,7 +649,7 @@ export default {
 .el-card.selected {
   border: 1px solid #14a478;
 }
-.el-card {
+.el-card.pad0 {
   position: relative;
   .del-icon {
     display: none;
@@ -609,10 +661,13 @@ export default {
     cursor: pointer;
   }
   &:hover {
-    .del-icon {
-      display: block;
+    .del-icon,.editNameIcon {
+      display: inline-block;
     }
   }
+  .editNameIcon{
+    display: none;
+  }
   .img-box {
     text-align: center;
     border-bottom: 1px solid #e1e1e1;
@@ -620,11 +675,19 @@ export default {
     img {
       height: 55px;
     }
-    p {
-      font-size: 14px;
-      font-weight: 800;
-      margin-top: 10px;
+    .equipName{
+      height: 30px;
+      span:nth-child(1){
+        line-height: 23px;
+      }
+      span:nth-child(2){
+        cursor: pointer;
+        font-size: 18px;
+        font-weight: 800;
+        color: green;
+      }
     }
+    
   }
   .detail {
     border-bottom: 1px solid #e1e1e1;

+ 4 - 1
src/pages/plantGuard/irrigate/index.vue

@@ -309,7 +309,10 @@ methods: {
       AMap.event.addListener(marker, 'click', (e) => {
         console.log(e.target.getExtData());
         var item = e.target.getExtData()
-        this.$store.commit("irrigateId", item.device_id);
+        this.$store.commit('setData',{
+            name:'irrigate_id',
+            val:item.device_id,
+        })
         this.$router.push('irrigate');
         // this.equipMarkerClick(item);
       });

+ 8 - 2
src/pages/plantGuard/irrigate/irrigate.vue

@@ -670,11 +670,17 @@ export default {
       }
     },
     lookEleHistory(){
-      this.$store.commit('setEleHistoryId',this.id)
+      this.$store.commit('setData',{
+        name:'ele_history_id',
+        val:this.id
+      })
       this.$router.push('eleHistory');
     },
     lookCtrlHistory(){
-      this.$store.commit('setOperatId',this.id)
+      this.$store.commit('setData',{
+        name:'ele_operat_id',
+        val:this.id
+      })
       this.$router.push('operatData');
     },
     ScrollUp() {

+ 1 - 1
src/pages/plantGuard/irrigate/operatData.vue

@@ -67,7 +67,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/irrigate/operatData/dcfoperatData.vue

@@ -69,7 +69,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/irrigate/operatData/sboperatData.vue

@@ -69,7 +69,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/irrigate/operatData/sfjoperatData.vue

@@ -69,7 +69,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/irrigate/wranData.vue

@@ -49,7 +49,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/irrigate/wranData/wranDataList.vue

@@ -95,7 +95,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/irrigate/wranData/wranDataSet.vue

@@ -98,7 +98,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 7 - 0
src/pages/plantGuard/monitor/Monitor.vue

@@ -1,4 +1,5 @@
 <template>
+<div class="bj">
   <div class="monitor-container">
     <!-- <button @click="aa()">停止</button> -->
     <div class="monitor-wrap">
@@ -291,6 +292,8 @@
       </div>
     </el-dialog>
   </div>
+</div>
+  
 </template>
 <script>
 export default {
@@ -685,6 +688,10 @@ li {
   list-style-type: none;
   margin: 0;
 }
+.bj{
+  height: 100%;
+  background: #474e60;
+}
 .monitor-container {
   display: flex;
   flex-direction: column;

+ 1 - 1
src/pages/plantGuard/page10.vue

@@ -63,7 +63,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/page11.vue

@@ -59,7 +59,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化

+ 1 - 1
src/pages/plantGuard/plantProtection/base.vue

@@ -1328,7 +1328,7 @@ export default {
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
-    this.user_id = this.$store.state.user_id || sessionStorage.getItem("myuid");
+    this.user_id = this.$store.state.plantProtectionUserId || this.$store.state.user_id;
     this.getUserEquipType()
     this.infoMap()
 

+ 13 - 6
src/pages/plantGuard/plantProtection/baseAll.vue

@@ -51,6 +51,7 @@
                     <div class="equipList">
                         <div class="item"
                         @click="equipLocate(item)"
+                        @dblclick="enterBase(item.uid)" 
                         v-for="item in mapData" :key="item.uuid">
                             <img src="../../../../static/images/baseIcon.png" width="25px" alt="">
                             {{item.projectname}}
@@ -173,10 +174,11 @@ methods: {
         });
         this.pointSimplifierIns.setData(this.mapData)
         this.pointSimplifierIns.on('pointClick',(e,point)=>{
-            // console.log(e);
-            // console.log(point);
-            this.$store.commit('setUserId', point.data.uid)
-           that.$router.push('/plantGuard/base')
+            this.$store.commit('setData',{
+                name:'plantProtectionUserId',
+                val:point.data.uid
+            })
+            that.$router.push('/plantGuard/base')
         })
         this.distCluster = new DistrictCluster({
             map: that.map, //所属的地图实例
@@ -324,12 +326,10 @@ methods: {
         });
     },
     getEquipList() {
-      let uid = sessionStorage.getItem("myuid");
       this.$axios({
         method: "POST",
         url: "/api/api_gateway?method=user.login.user_project_addr",
         data: this.qs.stringify({
-          // uid:uid
         })
       }).then(res => {
         if (res.data.message == ""){
@@ -529,6 +529,13 @@ methods: {
     equipLocate(item){
         this.map.setCenter(item.lnglat);
         this.map.setZoom(10)
+    },
+    enterBase(id){
+        this.$store.commit('setData',{
+            name:'plantProtectionUserId',
+            val:id
+        })
+        this.$router.push('/plantGuard/base')
     }
 },
 //生命周期 - 创建完成(可以访问当前this实例)

+ 8 - 3
src/pages/plantGuard/plantProtection/baseComponents/bzyTabPhoto.vue

@@ -57,9 +57,14 @@ export default {
       }
     },
     lookmore(){
-      this.$store.commit('setBzyPhotoId',this.equipId)
-      this.$store.commit('setBzyPhotoDid',this.d_id)
-
+      this.$store.commit('setData',{
+        name:'bzy_photo_id',
+        val:this.equipId
+      })
+      this.$store.commit('setData',{
+        name:'bzy_photo_did',
+        val:this.d_id
+      })
       this.$router.push('bzyPhoto')
     },
      //图片列表数据请求

+ 8 - 4
src/pages/plantGuard/plantProtection/baseComponents/cbdTabPestStat.vue

@@ -453,10 +453,14 @@ export default {
     },
     // 查看害虫信息
     lookPestInfo(){
-		  // this.$store.state.cbd_pest_id = this.equipId
-      // this.$store.state.cbd_pest_did = this.d_id
-      this.$store.commit('setCbdPestId',this.equipId)
-      this.$store.commit('setCbdPestDid',this.d_id)
+      this.$store.commit('setData',{
+        name:'cbd_pest_id',
+        val:this.equipId
+      })
+      this.$store.commit('setData',{
+        name:'cbd_pest_did',
+        val:this.d_id
+      })
       this.$router.push('cbdPestStats')
     },
    

+ 8 - 12
src/pages/plantGuard/plantProtection/baseComponents/cbdTabPhoto.vue

@@ -181,19 +181,15 @@ export default {
       }
     },
     lookmore() {
-      // this.$store.state.cbd_photo_id = this.equipId
-      // this.$store.state.cbd_photo_did = this.d_id
-      this.$store.commit("setCbdPhotoId", this.equipId);
-      this.$store.commit("setCbdPhotoDid", this.d_id);
-
+      this.$store.commit('setData',{
+        name:'cbd_photo_id',
+        val:this.equipId
+      })
+      this.$store.commit('setData',{
+        name:'cbd_photo_did',
+        val:this.d_id
+      })
       this.$router.push("cbdPhoto");
-      // this.$router.push({
-      //   path:'cbdPhoto',
-      //   query:{
-      //     id:this.equipId,
-      //     d_id:this.d_id
-      //   }
-      // })
     },
     //图片列表数据请求
     imgListData() {

+ 1 - 1
src/pages/plantGuard/plantProtection/baseComponents/equipState.vue

@@ -128,7 +128,7 @@ export default {
 }
 .list {
     display: flex;
-    justify-content: space-between;
+    justify-content: left;
     flex-direction: row;
     flex-wrap: wrap;
     padding: 10px 7px 5px 7px;

+ 2 - 2
src/pages/plantGuard/plantProtection/baseComponents/equipStateQxz.vue

@@ -67,7 +67,7 @@ export default {
               }
             }
             arr = arr.sort((a, b) => {
-              return a.e.slice(2) - b.e.slice(2);
+              return a.e.slice(-1) - b.e.slice(-1);
             });
             this.reaTimeStatusList = arr;
 
@@ -128,7 +128,7 @@ export default {
 }
 .list {
     display: flex;
-    justify-content: space-between;
+    justify-content: left;
     flex-direction: row;
     flex-wrap: wrap;
     padding: 10px 7px 5px 7px;

+ 2 - 2
src/pages/plantGuard/plantProtection/bzyPhoto.vue

@@ -158,7 +158,7 @@ export default {
   computed: {
     userType: function () {
       //获取用户类型
-      return window.sessionStorage.getItem("myuser_type");
+      return this.$store.state.myuser_type
     },
   },
   methods: {
@@ -346,7 +346,7 @@ export default {
       URL.revokeObjectURL(url); // 释放内存
     },
     downPhoto(arr) {
-      let uid = sessionStorage.getItem("myuid");
+      let uid = this.$store.state.user_id;
       let image_id = arr.join(",");
       this.$axios({
         method: "post",

+ 6 - 2
src/pages/plantGuard/plantProtection/cbdPhoto.vue

@@ -725,7 +725,7 @@ export default {
       let that = this;
       let postData = that.qs.stringify({
         device_id: that.id,
-        page_number: 6,
+        page_number: 8,
         page: that.page,
         ret: 'list',
         rets: that.radio1,
@@ -812,7 +812,7 @@ export default {
       URL.revokeObjectURL(url); // 释放内存
     },
     downPhoto(arr) {
-      let uid = sessionStorage.getItem("myuid");
+      let uid = this.$store.state.user_id;
       let image_id = arr.join(",");
       this.$axios({
         method: "post",
@@ -1120,8 +1120,12 @@ export default {
       text-align: center;
       cursor: pointer;
       position: relative;
+      overflow: hidden;
       img{
         height: 100%;
+        position: absolute;
+        left: 50%;
+        transform: translateX(-50%);
       }
       .uptime{
         position: absolute;

+ 12 - 1
src/pages/plantGuard/sysManage/allotEquip.vue

@@ -18,6 +18,7 @@
                 <el-option label="气象站" value="5"></el-option>
                 <el-option label="监控设备" value="6"></el-option>
                 <el-option label="孢子仪" value="7"></el-option>
+                <el-option label="灾害预警" value="1112"></el-option>
                 <!-- <el-option label="性诱设备" value="8"></el-option>
                 <el-option label="糖醋测报" value="9"></el-option> -->
               </el-select>
@@ -91,10 +92,20 @@
                   <template v-if="item.device_type_id == 9">
                     <img src="@/assets/images/equipdistribute/tccbOn.png" />
                   </template>
+                  <template v-if="item.device_type_id == 11">
+                    <img src="@/assets/images/equipdistribute/warnOn11.png" />
+                  </template>
+                  <template v-if="item.device_type_id == 12">
+                    <img src="@/assets/images/equipdistribute/warnOn12.png" />
+                  </template>
                   <p>{{ item.device_id }}</p>
                 </div>
                 <div class="detail">
-                  <p>
+                  <p v-if="item.name">
+                    设备组名称
+                    <span>{{ item.name }}</span>
+                  </p>
+                  <p v-else>
                     设备名称
                     <span>{{ item.device_name || "无" }}</span>
                   </p>

+ 3 - 2
src/pages/plantGuard/sysManage/roleManage.vue

@@ -85,7 +85,7 @@
               :props="treeProps"
               ref="treeRef"
               show-checkbox
-              node-key="id"
+              node-key="pur_id"
               default-expand-all
               :default-checked-keys="defKeys"
               ></el-tree>
@@ -321,11 +321,12 @@
             })
             this.defKeys = [];
             this.getLeafkeys(role,this.defKeys);
+            
             this.setRightDialogVisible=true;
          },
          getLeafkeys(node,arr){
             if(!node.children){
-               return arr.push(node.id) 
+               return arr.push(node.pur_id) 
             }
             node.children.forEach(item=>this.getLeafkeys(item,arr))
          },

+ 19 - 6
src/pages/plantGuard/sysManage/topicManage.vue

@@ -55,11 +55,11 @@
                      </div>
                      <div class="detail">
                         <p>
-                           创建时间
+                           <span>创建时间</span>
                            <span>{{ (item.role_cre_time * 1000) | formatTime }}</span>
                         </p>
                         <p>
-                           首页主题
+                           <span>首页主题</span> 
                            <span>{{ item.role_header }}</span>
                         </p>
                      </div>
@@ -133,6 +133,7 @@
                :visible.sync="editDialogVisible"
                class="editDialog"
                width="30%"
+			   top="180px"
             >
                <el-form
                   ref="form"
@@ -164,15 +165,15 @@
                      </el-upload>
                   </el-form-item>
                   <el-form-item label="主题 : ">
-                     <el-input v-model="userDetail.role_header"></el-input>
+                     <el-input maxlength="18" v-model="userDetail.role_header"></el-input>
                   </el-form-item>
-                  <el-form-item label="版权 : ">
+                  <!-- <el-form-item label="版权 : ">
                      <el-input
                         type="textarea"
                         :rows="2"
                         v-model="userDetail.role_footer"
                      ></el-input>
-                  </el-form-item>
+                  </el-form-item> -->
                </el-form>
                <span slot="footer" class="dialog-footer">
                   <el-button type="grayInfo" plain @click="editDialogVisible = false">取 消</el-button>
@@ -333,7 +334,6 @@ export default {
 				return (() => {
 					window.fullHeight = document.documentElement.clientHeight
 					that.fullHeight = window.fullHeight - 128
-					console.log(that.fullHeight)
 				})()
 			}
 		},
@@ -403,6 +403,10 @@ export default {
 		listAddr() {
          let that = this
          if(!that.adduserGroupForm.userGroupName){
+			that.$message({
+				message: '请填写主题名称',
+				type: 'error'
+			})
             return
          }
          this.addUserGroupDialogVisible = false
@@ -761,6 +765,15 @@ export default {
 			line-height: 34px;
 			color: #666;
 			padding: 0 0px;
+			>span:nth-child(1){
+				width: 65px;
+			}
+			>span:nth-child(2){
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				flex: 1;
+			}
 		}
 	}
 	.bottom {

+ 9 - 6
src/pages/plantGuard/sysManage/userManage.vue

@@ -487,7 +487,7 @@ export default {
   computed: {
     //获取用户类型
 		userType: function () {
-			return window.sessionStorage.getItem('myuser_type')
+			return this.$store.state.myuser_type
 		}
   },
   //监控data中的数据变化
@@ -760,11 +760,14 @@ export default {
 			})
 	},
 	distribute(id, username) {
-		// this.$store.state.allo_equip_user_id = id
-		// this.$store.state.allo_equip_usename = username
-      this.$store.commit('setAlloEquipUserId',id)
-      this.$store.commit('setAlloEquipUsename',username)
-
+		this.$store.commit('setData',{
+			name:'allo_equip_user_id',
+			val:id
+		})
+		this.$store.commit('setData',{
+            name:'allo_equip_usename',
+            val:username
+        })
 		this.$router.push('allotEquip')
 	},
 	recharge(id) {

+ 58 - 21
src/router/index.js

@@ -49,6 +49,13 @@ const OperatData = () => import('@/Pages/plantGuard/irrigate/operatData') //智
 const WranData = () => import('@/Pages/plantGuard/irrigate/wranData') //智能灌溉-设备预警
 const EleHistory = () => import('@/Pages/plantGuard/irrigate/eleHistory') //智能灌溉-要素历史数据
 
+const DisasterWarnBase = () => import('@/Pages/plantGuard/disasterWarn/disasterWarnBase.vue') //灾害预警-地图展示
+const DisasterWarn = () => import('@/Pages/plantGuard/disasterWarn/disasterWarn') //灾害预警-地图展示
+const WarnPhoto = () => import('@/Pages/plantGuard/disasterWarn/warnPhoto') //灾害预警-图片展示
+const DisasterWarnList = () => import('@/Pages/plantGuard/disasterWarn/disasterWarnList') //灾害预警-预警历史记录
+const DisasterWarnSet = () => import('@/Pages/plantGuard/disasterWarn/disasterWarnSet') //灾害预警-预警历史记录
+
+
 Vue.use(Router)
 
 export default new Router({
@@ -74,121 +81,121 @@ export default new Router({
           path: 'baseAll',
           name: 'baseAll',
           component: BaseAll,
-          meta: { title: '农林植保',order:0,navname: '项目基地', }
+          meta: { title: '农林植保',order:0,navname: '植保监测', }
         },
         {
           path: 'base',
           name:'base',
           component: Base,
-          meta: { title: '农林植保',order:0, navname:'设备列表',}
+          meta: { title: '农林植保',order:0, navname:'植保示范点',}
         },
         {
           path:'irrigateProject',
           name: 'irrigateProject',
           component: IrrigateProject,
-          meta: { title: '智能灌溉系统',order:2 ,navname:'灌溉项目',}
+          meta: { title: '智能灌溉',order:3 ,navname:'灌溉监测',}
         },
         {
           path: 'irrigate',
           name: 'irrigate',
           component: Irrigate,
-          meta: { title: '智能灌溉系统',order:2 ,navname:'灌溉展示',}
+          meta: { title: '智能灌溉',order:3 ,navname:'灌溉示范点',}
         },
         {
           path: 'operatData',
           name: 'operatData',
           component: OperatData,
-          meta: { title: '智能灌溉系统',order:2 ,navname:'操作记录',}
+          meta: { title: '智能灌溉',order:3 ,navname:'操作记录',}
         },
         {
           path: 'wranData',
           name: 'wranData',
           component: WranData,
-          meta: { title: '智能灌溉系统',order:2 ,navname:'设备预警',}
+          meta: { title: '智能灌溉',order:3 ,navname:'预警信息',}
         },
         {
           path:'eleHistory',
           name: 'eleHistory',
           component: EleHistory,
-          meta: { title: '智能灌溉系统',order:2 ,navname:'传感器数据',}
+          meta: { title: '智能灌溉',order:3 ,navname:'水肥数据',}
         },
         {
           path: 'userManage',
           name: 'userManage',
           component: UserManage,
-          meta: { title: '系统管理',order:6, navname: '用户管理',}
+          meta: { title: '系统管理',order:7, navname: '用户管理',}
         },
         {
           path: 'allotEquip',
           name: 'allotEquip',
           component: AllotEquip,
-          meta: { title: '系统管理',order:6,navname: '设备分配', }
+          meta: { title: '系统管理',order:7,navname: '设备分配', }
         },
         {
           path: 'roleManage',
           name: 'roleManage',
           component: RoleManage,
-          meta: { title: '系统管理',order:6,navname: '角色管理', }
+          meta: { title: '系统管理',order:7,navname: '角色管理', }
         },
         {
           path: 'topicManage',
           name: 'topicManage',
           component: TopicManage,
-          meta: { title: '系统管理',order:6,navname: '主题定制', }
+          meta: { title: '系统管理',order:7,navname: '主题定制', }
         },
         {
           path: 'equipManage',
           name: 'equipManage',
           component: EquipManage,
-          meta: { title: '设备管理',order:7,navname: '设备管理', }
+          meta: { title: '系统管理',order:7,navname: '设备管理', }
         },
         {
           path: 'bzyPhoto',
           name: 'bzyPhoto',
           component: BzyPhoto,
-          meta: { title: '',order:0,navname: '孢子仪图片', }
+          meta: { title: '农林植保',order:0,navname: '孢子仪图片', }
         },
         {
           path: 'cbdPhoto',
           name: 'cbdPhoto',
           component: CbdPhoto,
-          meta: { title: '',order:0,navname: '测报灯图片', }
+          meta: { title: '农林植保',order:0,navname: '测报灯图片', }
         },
         {
           path: 'cbdPestStats',
           name: 'CbdPestStats',
           component: CbdPestStats,
-          meta: { title: '',order:0,navname: '害虫统计', }
+          meta: { title: '农林植保',order:0,navname: '害虫统计', }
         },
         {
           path: 'monitor',
           name: 'Monitor',
           component: Monitor,
-          meta: { title: '',order:1,navname: '可视化系统', }
+          meta: { title: '可视农业',order:1,navname: '可视化', }
         },
         {
-          path: 'photoView/:id',
+          path: 'photoView',
           name: 'PhotoView',
           component: PhotoView,
-          meta: { title: '',order:0,navname: '图片详情', }
+          meta: { title: '可视农业',order:0,navname: '可视化详情', }
         },
         {
           path: 'page9',
           name: 'page9',
           component: Page9,
-          meta: { title: '水价管理',order:3,navname: '地图展示', }
+          meta: { title: '水价管理',order:4,navname: '水价示范点', }
         },
         {
           path: 'page10',
           name: 'page10',
           component: Page10,
-          meta: { title: '水价管理',order:3,navname: '消费记录', }
+          meta: { title: '水价管理',order:4,navname: '消费记录', }
         },
         {
           path: 'page11',
           name: 'page11',
           component: Page11,
-          meta: { title: '水价管理',order:3,navname: '充值记录', }
+          meta: { title: '水价管理',order:4,navname: '充值记录', }
         },
         {
           path: 'personMsg',
@@ -196,6 +203,36 @@ export default new Router({
           component: PersonMsg,
           meta: { title: '',order:0,navname: '个人中心', }
         },
+        {
+          path: 'disasterWarnBase',
+          name: 'disasterWarnBase',
+          component: DisasterWarnBase,
+          meta: { title: '灾害预警',order:2,navname: '预警监测', }
+        },
+        {
+          path: 'disasterWarn',
+          name: 'disasterWarn',
+          component: DisasterWarn,
+          meta: { title: '灾害预警',order:2,navname: '预警示范点', }
+        },
+        {
+          path: 'warnPhoto',
+          name: 'warnPhoto',
+          component: WarnPhoto,
+          meta: { title: '灾害预警',order:2,navname: '预警图片', }
+        },
+        {
+          path:'disasterWarnList',
+          name: 'disasterWarnList',
+          component: DisasterWarnList,
+          meta: { title: '灾害预警',order:2,navname: '预警记录', }
+        },
+        {
+          path:'disasterWarnSet',
+          name: 'disasterWarnSet',
+          component: DisasterWarnSet,
+          meta: { title: '灾害预警',order:2,navname: '预警设置', }
+        }
       ]
     },
     // -----------------大数据平台------------------------ 

+ 12 - 36
src/store/store.js

@@ -7,9 +7,11 @@ Vue.use(Vuex);
 
 const store = new Vuex.Store({
     state: {
-        user_id:'',//项目id,也是用户id
+        user_id:'',//当前用户id
+        myuser_type:'',//用户类型 1超级管理员 ,2 经销商,3 农林政府单位 ,4 普通用户
         allo_equip_user_id:'',//分配设备传的用户id
         allo_equip_usename:'',//分配设备传的用户名称
+        plantProtectionUserId:'',//植保项目用户id
         cbd_photo_id:'',//测报灯查看图片设备id
         cbd_photo_did:'',//测报灯查看图片设备did
         cbd_pest_id:'',//测报灯害虫统计设备id
@@ -19,44 +21,18 @@ const store = new Vuex.Store({
         ele_history_id:'',//历史数据水肥设备id
         irrigate_id:'',//灌溉项目设备id
         ele_operat_id:'',//操作记录水肥设备id
+        disasterWarnUserId:'',//灾害预警项目用户id
+        jk_wran_id:'',//灾害预警查看图片监控设备id
+        jk_wran_did:'',//灾害预警查看图片监控设备did
+        jk_wran_name:'',//灾害预警查看图片设备组name
+        wran_project_name:'',//灾害预警项目名称
+        qxz_wran_id:'',//灾害预警气象站设备id
+        qxz_wran_did:'',//灾害预警气象站设备did
         
     },
     mutations: {
-      setUserId (state,val) {
-        state.user_id = val;
-      },
-      setAlloEquipUserId (state,val) {
-        state.allo_equip_user_id = val;
-      },
-      setAlloEquipUsename (state,val) {
-        state.allo_equip_usename = val;
-      },
-      setCbdPhotoId (state,val) {
-        state.cbd_photo_id = val;
-      },
-      setCbdPhotoDid (state,val) {
-        state.cbd_photo_did = val;
-      },
-      setCbdPestId (state,val) {
-        state.cbd_pest_id = val;
-      },
-      setCbdPestDid (state,val) {
-        state.cbd_pest_did = val;
-      },
-      setBzyPhotoId (state,val) {
-        state.bzy_photo_id = val;
-      },
-      setBzyPhotoDid (state,val) {
-        state.bzy_photo_did = val;
-      },
-      setEleHistoryId (state,val) {
-        state.ele_history_id = val;
-      },
-      irrigateId (state,val) {
-        state.irrigate_id = val;
-      },
-      setOperatId (state,val) {
-        state.ele_operat_id = val;
+      setData(state,obj){
+        state[obj.name] = obj.val;
       },
       
     },

+ 206 - 0
static/images/disasterWarn/disasterWarnIcon.svg

@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="-284 408.3 25.8 25.6" style="enable-background:new -284 408.3 25.8 25.6;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:none;enable-background:new    ;}
+	.st1{fill:#E4643D;fill-opacity:0.1;}
+	.st2{fill:#E4643D;fill-opacity:0.4;}
+	.st3{fill:#E4643D;fill-opacity:0.6;}
+</style>
+<path class="st0" d="M-284,408.3"/>
+<circle class="st1" cx="-271.1" cy="421.1" r="12.8">
+<animate  fill="remove" dur="1s" attributeType="XML" accumulate="none" additive="replace" to="14" repeatCount="indefinite" begin="-0.35s" restart="always" from="6" attributeName="r" calcMode="linear">
+	</animate>
+<animate  fill="remove" dur="1s" attributeType="XML" accumulate="none" additive="replace" to="0" repeatCount="indefinite" begin="-0.35s" restart="always" from="0.5" attributeName="fill-opacity" calcMode="linear">
+	</animate>
+</circle>
+<circle class="st2" cx="-271.1" cy="421.1" r="9.9">
+<animate  fill="remove" dur="1s" attributeType="XML" accumulate="none" additive="replace" to="10" repeatCount="indefinite" begin="-0.35s" restart="always" from="6" attributeName="r" calcMode="linear">
+	</animate>
+<animate  fill="remove" dur="1s" attributeType="XML" accumulate="none" additive="replace" to="0" repeatCount="indefinite" begin="-0.35s" restart="always" from="0.5" attributeName="fill-opacity" calcMode="linear">
+	</animate>
+</circle>
+<circle class="st3" cx="-271.1" cy="421.1" r="6.7"/>
+<path class="st0" d="z"/>
+<image style="overflow:visible;" width="400" height="400" xlink:href="data:image/png;base64,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
+0Z9kKutdAAAAAElFTkSuQmCC" transform="matrix(2.030312e-002 0 0 2.030312e-002 -275.1606 416.9025)">
+</image>
+</svg>

二进制
static/images/disasterWarn/enterIcon.png


二进制
static/images/disasterWarn/navicon.png


二进制
static/images/disasterWarn/photoIcon.png


二进制
static/images/disasterWarn/sliderBj.png


二进制
static/images/disasterWarn/sliderBtnBj.png


二进制
static/images/disasterWarn/upPopIconicon.png


二进制
static/images/emptyDataImg2.png


二进制
static/images/jkctrl5.png


二进制
static/images/jkctrl6.png


二进制
static/images/jkctrl7.png


二进制
下载 - 快捷方式.lnk