Browse Source

new page ready

Changpeng Duan 5 years ago
parent
commit
c5c5df84bc

+ 8 - 0
README.md

@@ -81,3 +81,11 @@ b.新增接口
         
         
       
+==========
+1.项目打包  
+    执行build命令  
+    将D:\wwwroot\signal_build\build\static 下的文件push  
+    
+2.项目查看线上效果  
+    访问  http://sd.tickdig.com:85/login  
+    测试账号 admin pwd 123456  

+ 2 - 1
src/Global.js

@@ -5,7 +5,8 @@ companyInfo = {
     year: new Date().getFullYear(),
 };
 
-headapi = process.env.NODE_ENV === 'development' ? '/api/' : '../';
+headapi = process.env.NODE_ENV === 'development' ? './api/' : '../';
+ // headapi =  '/api/';
 
 
 // 常用选项

+ 9 - 9
src/Mock/index.js

@@ -130,15 +130,15 @@ let Watching = function () {
     return res;
 };
 
-Mock.mock('/api/worldDetail', 'post', worldDetail());
-Mock.mock('/api/SignIn', 'post', SignIn());//用户登录
-Mock.mock('/api/editbasicinfo', 'post', editbasicinfo());//用户设置修改
-Mock.mock('/api/modPwd', 'post', modPwd());//密码修改
-Mock.mock('/api/logout', 'post', logout());//退出登陆
-Mock.mock('/api/getLoftInfo', 'post', getLoftInfo());//楼层获取
-Mock.mock('/api/wifiSingle', 'post', wifiSingle());//
-Mock.mock('/api/Scan', 'post', Scan());//
-Mock.mock('/api/Watching', 'post', Watching());//
+// Mock.mock('/api/worldDetail', 'post', worldDetail());
+// Mock.mock('/api/SignIn', 'post', SignIn());//用户登录
+// Mock.mock('/api/editbasicinfo', 'post', editbasicinfo());//用户设置修改
+// Mock.mock('/api/modPwd', 'post', modPwd());//密码修改
+// Mock.mock('/api/logout', 'post', logout());//退出登陆
+// Mock.mock('/api/getLoftInfo', 'post', getLoftInfo());//楼层获取
+// Mock.mock('/api/wifiSingle', 'post', wifiSingle());//
+// Mock.mock('/api/Scan', 'post', Scan());//
+// Mock.mock('/api/Watching', 'post', Watching());//
 
 // 业务类
 

+ 5 - 5
src/api/Navs.js

@@ -20,7 +20,7 @@ let navs = [{
             "c_level": "2",
             "clmcode": "front_index",
             "clmname": "区域管理",
-            "clmurl": "/yhgl",
+            "clmurl": "/region",
             "prname": null,
             "en": "1",
             "show": "1",
@@ -79,7 +79,7 @@ let navs = [{
             "c_level": "2",
             "clmcode": "06g",
             "clmname": "0-6G扫描",
-            "clmurl": "/06g",
+            "clmurl": "/GSign",
             "prname": null,
             "en": "1",
             "show": "1",
@@ -143,7 +143,7 @@ let navs = [{
                 "c_level": "2",
                 "clmcode": "front_index",
                 "clmname": "二维码管理",
-                "clmurl": "/news",
+                "clmurl": "/qrcodemanage",
                 "prname": null,
                 "en": "1",
                 "show": "1",
@@ -175,7 +175,7 @@ let navs = [{
                 "c_level": "2",
                 "clmcode": "front_index",
                 "clmname": "固件管理",
-                "clmurl": "/aboutUs",
+                "clmurl": "/hardware",
                 "prname": null,
                 "en": "1",
                 "show": "1",
@@ -190,7 +190,7 @@ let navs = [{
                 "c_level": "2",
                 "clmcode": "front_index",
                 "clmname": "警务通管理",
-                "clmurl": "/jwt",
+                "clmurl": "/police",
                 "prname": null,
                 "en": "1",
                 "show": "1",

+ 31 - 2
src/api/getApiRes.js

@@ -1,5 +1,6 @@
 import axios from 'axios';
 import global from '../Global.js'
+
 // 基础方法进行封装
 function getApiBasic(url, postdata) {
     return  axios.post(url, postdata).then(function(data){
@@ -38,8 +39,23 @@ export function Scan(postdata) {
     return getApiBasic(url,postdata);
 }
 export function Watching(postdata) {
-    let url = headapi + 'Watching';
-    return getApiBasic(url,postdata);
+    // let url = headapi + 'Watching';
+    // return getApiBasic(url,postdata);
+    let item = [];
+    let t = 0;
+    for (var i = 0; i < 9; i++) {
+        t = i + 1;
+        item.push({
+            'time': "@date",
+            'checkRs': "Signal设备03@integer(301,600)检测完成,206会议室安全",
+        })
+    }
+    let res = {
+        Rs: item,
+        Code: 0,
+        Memo: '登陆成功'
+    };
+    return res;
 }
 
 // 真实接口
@@ -65,6 +81,19 @@ export function GetRegionAndDectorSelect(postdata) {
     return getApiBasic(url,postdata);
 }
 
+// 获取统计数量集合
+export function GetStaticinfo(postdata) {
+    // 获取统计数量集合,包括获取设备总数,在线设备,离线设备,禁用设备,当日报警数量,可疑事件总数
+    let url = headapi + 'v1/Company/GetStaticinfo';
+    return getApiBasic(url,postdata);
+}
+
+// 区域检出实时记录
+export function RegionDetInfolist(postdata) {
+    // 最小区域检出实时记录
+    let url = headapi + 'v1/Company/RegionDetInfolist';
+    return getApiBasic(url,postdata);
+}
 
 
 

+ 31 - 0
src/assets/css/dialog.css

@@ -28,3 +28,34 @@
 .el-select .el-input .el-select__caret {
     line-height: 30px;
 }
+.modal-body label {
+    width: 100%;
+    overflow: hidden;
+    display: block;
+    margin: 0 auto;
+    text-align: left;
+    font-size: 14px;
+    color:#6DC1FF;
+    margin-bottom: 5px;
+}
+.modal-body textarea {
+    border: 1px solid #005EA2;
+    background: none;
+    border-radius: 0;
+}
+.modal-footer {
+    position: absolute;
+    bottom: 10px;
+    left: 0;
+    right: 0;
+}
+.modal-footer {
+
+}
+.el-dialog, .el-pager li {
+    background: rgba(0,23,67,0.8);
+    color:#6DC1FF!important;
+}
+.el-dialog__body {
+    color:#6DC1FF!important;
+}

BIN
src/assets/img/icon/addMemo.png


BIN
src/assets/img/icon/question_icon.png


BIN
src/assets/img/region/add.png


BIN
src/assets/img/region/del.png


BIN
src/assets/img/region/edit.png


BIN
src/assets/img/region/loft.png


BIN
src/assets/img/region/room.png


BIN
src/assets/img/region/watch.png


+ 1 - 0
src/components/Console.vue

@@ -100,6 +100,7 @@
                 switch (parseInt(level)) {
                     case 0:
                         this.cstitle = true;
+                        this.getLoftList();
                         break;
                     case 1:
                         this.loftIndex = index + 1;

+ 55 - 19
src/components/EquipInfo.vue

@@ -14,42 +14,42 @@
                         <div class="ringCircle">
                             <Ring></Ring>
                         </div>
-                        <em>{{info.sum}}台</em>
+                        <em>{{info.detector_totalnum}}台</em>
                         <span>设备总数</span>
                     </li>
                     <li>
                         <div class="ringCircle">
                             <Ring></Ring>
                         </div>
-                        <em>{{info.online}}台</em>
+                        <em>{{info.detector_onlinenum}}台</em>
                         <span>在线设备</span>
                     </li>
                     <li>
                         <div class="ringCircle">
                             <Ring></Ring>
                         </div>
-                        <em>{{info.outline}}台</em>
+                        <em>{{info.detector_offlinenum}}台</em>
                         <span>离线设备</span>
                     </li>
                     <li>
                         <div class="ringCircle">
                             <Ring></Ring>
                         </div>
-                        <em>{{info.disable}}台</em>
+                        <em>{{info.detector_disablednum}}台</em>
                         <span>禁用设备</span>
                     </li>
                     <li>
                         <div class="ringCircle">
                             <Ring></Ring>
                         </div>
-                        <em>{{info.warning}}台</em>
+                        <em>{{info.warninglog_todaycount}}台</em>
                         <span>当日报警数</span>
                     </li>
                     <li>
                         <div class="ringCircle">
                             <Ring></Ring>
                         </div>
-                        <em>{{info.dubious}}台</em>
+                        <em>{{info.warninglog_totalcount}}台</em>
                         <span>可疑事件总数</span>
                     </li>
                 </ul>
@@ -59,20 +59,46 @@
 </template>
 
 <script>
+    import { GetStaticinfo } from '../api/getApiRes.js'
     import Ring from '@/components/Ring.vue'
+
     export default {
-        data(){
-            return{
-                info:{
-                    sum:208,
-                    online:198,
-                    outline:8,
-                    disable:2,
-                    warning:89,
-                    dubious:372,
+        data() {
+            return {
+                info: {
+                    detector_disablednum: 0,
+                    detector_offlinenum: 0,
+                    detector_onlinenum: 0,
+                    detector_totalnum: 0,
+                    warninglog_todaycount: 0,
+                    warninglog_totalcount: 0,
                 }
             }
         },
+        mounted() {
+            let that = this;
+            that.getDate();
+            this.timer = setInterval(() => {
+                that.getDate();
+            }, 1600);
+        },
+        methods: {
+            getDate() {
+                let that = this;
+                let param = {
+                    token: localStorage.token
+                };
+                let postdata = qs.stringify(param);
+                GetStaticinfo(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        this.info = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+        },
         components: {
             Ring
         }
@@ -87,17 +113,21 @@
         overflow: hidden;
         background: #000F2A;
     }
+
     .equipinfo .image-border2 {
         right: 0;
     }
+
     .equipinfo .image-border4 {
         right: 0;
     }
-    ul,li {
+
+    ul, li {
         list-style: none;
         padding: 0;
         margin: 0;
     }
+
     .thisContent ul {
         width: 100%;
         overflow: hidden;
@@ -106,6 +136,7 @@
         margin: 0 auto;
         margin-top: 60px;
     }
+
     .thisContent ul li {
         width: 120px;
         height: 110px;
@@ -113,19 +144,23 @@
         margin-right: 20px;
         margin-bottom: 80px;
     }
-    .thisContent ul li:nth-child(3){
+
+    .thisContent ul li:nth-child(3) {
         margin-right: 0;
     }
-    .thisContent ul li:nth-child(6){
+
+    .thisContent ul li:nth-child(6) {
         margin-right: 0;
     }
+
     .ringCircle {
         width: 100px;
         height: 100px;
         overflow: hidden;
         border-radius: 250px;
-        border:10px solid rgba(37,146,226,0.6) ;
+        border: 10px solid rgba(37, 146, 226, 0.6);
     }
+
     .thisContent li em {
         position: relative;
         width: 100%;
@@ -138,6 +173,7 @@
         text-align: center;
         font-style: normal;
     }
+
     .thisContent li span {
         position: relative;
         bottom: 20px;

+ 6 - 0
src/components/Navside.vue

@@ -85,6 +85,7 @@
                                 type: 'success'
                             });
                             localStorage.usercode = '';
+                            localStorage.token = '';
                             that.$router.push({path: '/login', query: {status: 1}});
                         })
                 }).catch(() => {
@@ -98,6 +99,7 @@
     }
 </script>
 <style scoped>
+    /*注释*/
     .shortnav {
         position: absolute;
         width: 65px;
@@ -223,4 +225,8 @@
         background: url("../assets/img/icon/logout.png") top center no-repeat;
         background-size: 100%;
     }
+    /deep/ .el-menu-item-group .el-menu-item {
+        height: 25px!important;
+        line-height: 25px!important;
+    }
 </style>

+ 27 - 7
src/components/Scan.vue

@@ -81,14 +81,34 @@
                     token: localStorage.token
                 };
                 let postdata = qs.stringify(param);
-                Scan(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
+                // Scan(postdata).then(res => {
+                //     let json = res;
+                //     if (json.Code == 0) {
+                // test start
+
+                let item = [];
+                let t =0;
+                for (var i = 0; i < 9; i++) {
+                    let nums = Math.floor((Math.random()*365)+1);
+                    t = i+1;
+                    item.push({
+                        '页面': t + ".0M",
+                        '访问量': nums,
+                    })
+                }
+
+                let json = {
+                    Rs: item,
+                    Code: 0,
+                    Memo: '登陆成功'
+                };
+
+                // test end
                         this.chartData.rows = json.Rs;
-                    } else {
-                        that.$message.error(json.Memo);
-                    }
-                })
+                //     } else {
+                //         that.$message.error(json.Memo);
+                //     }
+                // })
             },
             getRandomInt(min, max) {
                 return Math.floor(Math.random() * (max - min + 1)) + min;

+ 1 - 1
src/components/Total.vue

@@ -78,7 +78,7 @@
                 DetctorPanel: false,//设备
             }
         },
-        props: ['postTitle'],
+        props: ['postTitle','regionId'],
         watch: {
             postTitle: function (val) {
                 let that = this;

+ 23 - 10
src/components/Watching.vue

@@ -1,16 +1,16 @@
 <template>
     <div class="watching">
         <ul>
-            <li v-for="l in list">
-                <span> {{l.time}}</span>
-                <em>{{l.checkRs}}</em>
+            <li v-for="l in list" :class="{'red':l.WarnType != 0}">
+                <span> {{l.Dettime |fmtDate }}</span>
+                <em>{{l.RegionName}} {{l.WarnString}}</em>
             </li>
         </ul>
     </div>
 </template>
 
 <script>
-    import {Watching} from '../api/getApiRes.js'
+    import {RegionDetInfolist} from '../api/getApiRes.js'
 
     let qs = require('qs');
     export default {
@@ -35,13 +35,14 @@
             getDate() {
                 let that = this;
                 let param = {
-                    token: localStorage.token
+                    token: localStorage.token,
+                    regionId:0
                 };
                 let postdata = qs.stringify(param);
-                Watching(postdata).then(res => {
+                RegionDetInfolist(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        that.wordDisplay(json.Rs);
+                        that.wordDisplay(json.RegionDetRs);
                     } else {
                         that.$message.error(json.Memo);
                     }
@@ -51,9 +52,18 @@
                 let index = 0;
                 let that = this;
                     setTimeout(function () {
-                        that.list.push(word[index]);
-                        index++;
-                    }, 600);
+                        that.list.unshift(word[index]);
+                        index = index + 1 ;
+                    }, 300);
+            }
+        },
+        filters: {
+            fmtDate: function (value) {
+                if(!value){
+                    return '---';
+                }else{
+                    return value.substr(11,8);
+                }
             }
         }
     }
@@ -92,4 +102,7 @@
         font-size: 16px;
         margin-right: 10px;
     }
+    .watching li.red {
+        color: red;
+    }
 </style>

+ 28 - 7
src/components/WifiSign.vue

@@ -81,14 +81,35 @@
                     token: localStorage.token
                 };
                 let postdata = qs.stringify(param);
-                wifiSingle(postdata).then(res => {
-                      let json = res;
-                      if (json.Code == 0) {
+                // wifiSingle(postdata).then(res => {
+                //       let json = res;
+                //       if (json.Code == 0) {
+
+                // test start
+
+                let item = [];
+                let t =0;
+                for (var i = 0; i < 9; i++) {
+                    let nums = Math.floor((Math.random()*365)+1);
+                    t = i+1;
+                    item.push({
+                        '页面': "信道" + t,
+                        '访问量': nums,
+                    })
+                }
+
+                let json = {
+                    Rs: item,
+                    Code: 0,
+                    Memo: '登陆成功'
+                };
+
+                // test end
                           this.chartData.rows = json.Rs;
-                      } else {
-                          that.$message.error(json.Memo);
-                      }
-                  })
+                //       } else {
+                //           that.$message.error(json.Memo);
+                //       }
+                //   })
             },
             getRandomInt(min, max) {
                 return Math.floor(Math.random() * (max - min + 1)) + min;

+ 26 - 16
src/components/dialog_referrer_list.vue

@@ -25,8 +25,8 @@
                     <!--Footer-->
                     <div class="modal-footer">
                         <slot name="footer">
-                            <button class="btn btn-warning" type="button" :class="cancelClass" @click="cancel" name="cancelText">{{cancelText}}</button>
-                            <button class="btn btn-primary" type="button" :class="okClass" @click="ok" name="okText">{{okText}}</button>
+                            <el-button type="primary" :class="cancelClass" @click="cancel">{{cancelText}}</el-button>
+                            <el-button type="primary" @click="ok">{{okText}}</el-button>
                         </slot>
                     </div>
                 </div>
@@ -97,13 +97,13 @@
                 default: false
             }
         },
-        data () {
+        data() {
             return {
                 duration: null
             };
         },
         computed: {
-            modalClass () {
+            modalClass() {
                 return {
                     'modal-lg': this.large,
                     'modal-sm': this.small,
@@ -111,16 +111,16 @@
                 }
             }
         },
-        mounted () {
+        mounted() {
             if (this.show) {
                 document.body.className += ' modal-open';
             }
         },
-        beforeDestroy () {
+        beforeDestroy() {
             document.body.className = document.body.className.replace(/\s?modal-open/, '');
         },
         watch: {
-            show (value) {
+            show(value) {
                 // 在显示时去掉body滚动条,防止出现双滚动条
                 if (value) {
                     document.body.className += ' modal-open';
@@ -137,14 +137,14 @@
             }
         },
         methods: {
-            ok () {
+            ok() {
                 this.$emit('dialog_ok');
             },
-            cancel () {
+            cancel() {
                 this.$emit('dialog_cancel');
             },
             // 点击遮罩层
-            clickMask () {
+            clickMask() {
                 if (!this.force) {
                     this.cancel();
                 }
@@ -156,7 +156,7 @@
 <style scoped>
     .modal {
         position: absolute;
-        top:0;
+        top: 0;
         left: 0;
         right: 0;
         bottom: 0;
@@ -165,7 +165,7 @@
         overflow: hidden;
         display: block;
         margin: 0 auto;
-        background: rgba(0,0,0,0.3);
+        background: rgba(0, 0, 0, 0.3);
     }
 
     .modal-dialog {
@@ -176,33 +176,41 @@
         min-height: 400px;
         display: block;
         border: 1px solid #005EA2;
-        background: rgba(0,23,67,0.8);
+        background: rgba(0, 23, 67, 0.8);
         margin: 0 auto;
         margin-top: 10%;
     }
+
     .modal-transition {
         transition: all .6s ease;
     }
+
     .modal-leave {
         /* 样式没什么用,但可以让根标签的transitionEnd生效,以去掉modal-leave */
         border-radius: 1px !important;
     }
+
     .modal-transition .modal-dialog, .modal-transition .modal-backdrop {
         transition: all .5s ease;
     }
+
     .modal-enter .modal-dialog, .modal-leave .modal-dialog {
         opacity: 0;
         transform: translateY(-30%);
     }
+
     .modal-enter .modal-backdrop, .modal-leave .modal-backdrop {
         opacity: 0;
     }
+
     .modal-header {
         padding: 7px 22px;
     }
+
     .modal-body {
         padding: 5px 20px;
     }
+
     .modal-title {
         width: 473px;
         margin: 0 auto;
@@ -213,12 +221,14 @@
         color: #6DC1FF;
         font-weight: normal;
         padding-bottom: 10px;
-        background: url("../assets/img/headbotter.png")bottom center no-repeat;
+        background: url("../assets/img/headbotter.png") bottom center no-repeat;
         background-size: 100%;
     }
+
     .modal-footer button {
-        padding:10px 20px;
+        padding: 10px 20px;
     }
+
     .image-border {
         position: absolute;
         width: 20px;
@@ -252,6 +262,7 @@
         border-right: 2px solid #6DC1FF;
         border-bottom: 2px solid #6DC1FF;
     }
+
     .el-icon-close {
         float: right;
         color: #6DC1FF;
@@ -260,5 +271,4 @@
     }
 
 
-
 </style>

+ 34 - 23
src/components/runTimeRecord.vue

@@ -42,32 +42,43 @@
                     token: localStorage.token
                 };
                 let postdata = qs.stringify(param);
-                Watching(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
-                        this.list = json.Rs;
-                        for (var i = 0; i < this.list.length; i++) {
-                            that.wordDisplay(that.list[i].checkRs, i);
-                        }
-                        // that.wordDisplay(that.list[0].checkRs,0);
-                    } else {
-                        that.$message.error(json.Memo);
-                    }
-                })
+                // Watching(postdata).then(res => {
+                //     let json = res;
+                //     if (json.Code == 0) {
+
+                // test start
+                let item = [];
+                let t =0;
+                let time = "";
+                for (var i = 0; i < 7; i++) {
+                    t = i+1;
+                    time = "12:34:3" + i;
+                    item.push({
+                        'time': time,
+                        'checkRs': "Signal设备"+i+1+"检测完成,206会议室安全",
+                    });
+                }
+
+                let json = {
+                    Rs: item,
+                    Code: 0,
+                    Memo: '登陆成功'
+                };
+                // test end
+
+                that.wordDisplay(json.Rs);
+                // } else {
+                //     that.$message.error(json.Memo);
+                // }
+                // })
             },
-            wordDisplay(word, i) {
+            wordDisplay(word) {
                 let index = 0;
                 let that = this;
-                type();
-
-                function type() {
-                    that.list[i].checkRs = word.substring(0, index++);
-                    if (index > word.length) {
-                        return;
-                    } else {
-                        setTimeout(type, 50);
-                    }
-                }
+                setTimeout(function () {
+                    that.list.push(word[index]);
+                    index = index + 1 ;
+                }, 600);
             }
         }
     }

+ 12 - 8
src/main.js

@@ -10,15 +10,19 @@ import axios from 'axios'
 
 Vue.config.productionTip = false;
 import VCharts from 'v-charts'
-Vue.use(VCharts)
+Vue.use(VCharts);
 Vue.use(ElementUI);
-if(process.env.NODE_ENV === 'development'){
-    // 开发环境时使用模拟数据 引入mockjs
-    require('./Mock/index.js');
-}else{
-    // 实机环境时使用控制台 VConsole
-    // let vConsole = new VConsole() // 初始化
-}
+
+// 演示版本数据
+require('./Mock/index.js');
+//
+// if(process.env.NODE_ENV === 'development'){
+//     // 开发环境时使用模拟数据 引入mockjs
+//     require('./Mock/index.js');
+// }else{
+//     // 实机环境时使用控制台 VConsole
+//     // let vConsole = new VConsole() // 初始化
+// }
 
 new Vue({
   router,

+ 18 - 3
src/router/index.js

@@ -56,6 +56,13 @@ const routes = [
                 meta: {
                     title: "设备管理",
                 }
+            },{
+                path: '/qrcodemanage',
+                name: 'qrcodemanage',
+                component: () => import('@/views/Qrcodemanage.vue'),
+                meta: {
+                    title: "二维码管理",
+                }
             },{
                 path: '/yhgl',
                 name: 'Yhgl',
@@ -98,6 +105,13 @@ const routes = [
                 meta: {
                     title: "关于我们",
                 }
+            },{
+                path: '/region',
+                name: 'Region',
+                component: () => import('@/views/Region.vue'),
+                meta: {
+                    title: "关于我们",
+                }
             },{
                 path: '/hardware',
                 name: 'Hardware',
@@ -160,14 +174,15 @@ VueRouter.prototype.push = function push(location) {
 };
 
 const router = new VueRouter({
-    mode: 'history',
+    // mode: 'history',
+    mode: 'hash',
     base: process.env.BASE_URL,
     routes
 });
 
 // 路由守卫
 router.beforeEach((to,from,next)=>{
-    NProgress.start()
+    NProgress.start();
     const isLogin = localStorage.token? true : false;
     if(to.path == '/login' || to.path == '/register'){//'login'和'register'相当于是路由白名单
         next();
@@ -179,6 +194,6 @@ router.beforeEach((to,from,next)=>{
 
 router.afterEach(() => {
     NProgress.done()
-})
+});
 
 export default router

+ 7 - 7
src/views/Equip.vue

@@ -170,9 +170,14 @@
         data() {
             return {
                 // dialog
-                dialog_state: true,
-                dialog_title: '添加设备',
+                dialog_state: false,
+                dialog_title: '添加主建筑',
                 dialog_type: '',//类型,1是添加,2是修改
+                dialog: {
+                    name: 10,
+                    region: 10,
+                    memo: '',
+                },
                 tabIndex: 0,
                 tabs: [
                     {name: '设备管理', url: 'equip'},
@@ -198,11 +203,6 @@
                     total: 10,
                     pageIndex: 1,
                 },
-                dialog: {
-                    name: 10,
-                    region: 10,
-                    memo: '',
-                },
                 multipleSelection: [],
                 tableData: [{
                     date: '2016-05-02',

+ 138 - 48
src/views/Hardware.vue

@@ -17,7 +17,7 @@
                         :file-list="fileList">
                     <el-button size="small" type="primary">点击上传</el-button>
                 </el-upload>
-                <em>
+                <em class="addMemo" v-show="fileList.length == 0" @click="addMemo">
                     <i></i>
                     添加备注
                 </em>
@@ -53,12 +53,16 @@
             </div>
         </div>
         <div class="contorl">
-            <el-button size="small" type="primary" @click="addList">开始更新</el-button>
+            <el-button size="small" type="primary" @click="startUpdate">开始更新</el-button>
             <div class="version">
                 <em>NEW</em>
                 <span>最新固件版本:v.2.0.1版本固件</span>
             </div>
-            <el-button size="small" type="primary" @click="changeList">修改</el-button>
+            <el-tooltip class="item" effect="dark" content="一键更新全部设备固件" placement="top">
+                <i class="question"></i>
+            </el-tooltip>
+            <el-button class="allItem" size="small" type="primary" @click="changeList">全部更新</el-button>
+
         </div>
         <el-table
                 :data="tableData"
@@ -72,31 +76,31 @@
             </el-table-column>
             <el-table-column
                     prop="name"
-                    label="设备ID"
+                    label="设备名称"
             >
             </el-table-column>
             <el-table-column
-                    prop="date"
-                    label="检测时间"
+                    prop="name"
+                    label="设备安装位置"
                     width="180">
             </el-table-column>
             <el-table-column
                     prop="name"
-                    label="探测区域"
+                    label="旧固件版本"
             >
             </el-table-column>
             <el-table-column
-                    prop="name"
-                    label="信道"
+                    prop="date"
+                    label="旧版本更新时间"
                     width="180">
             </el-table-column>
             <el-table-column
                     prop="address"
-                    label="信号频段">
+                    label="最新固件版本">
             </el-table-column>
             <el-table-column
-                    prop="address"
-                    label="数据量">
+                    prop="date"
+                    label="最新版本更新时间">
             </el-table-column>
             <el-table-column
                     prop="address"
@@ -127,37 +131,6 @@
         >
             <div class="dialogContent">
                 <el-row :gutter="20">
-                    <el-col :span="10">
-                        <label>
-                            设备ID
-                        </label>
-                        <el-input v-model="dialog.name"></el-input>
-                    </el-col>
-                    <el-col :span="10">
-                        <label>
-                            MAC地址
-                        </label>
-                        <el-input v-model="dialog.name"></el-input>
-                    </el-col>
-                    <el-col :span="10">
-                        <label>
-                            标签名
-                        </label>
-                        <el-input v-model="dialog.name"></el-input>
-                    </el-col>
-                    <el-col :span="10">
-                        <label>
-                            设备所属楼层
-                        </label>
-                        <el-select v-model="dialog.region" placeholder="请选择所属楼层">
-                            <el-option
-                                    v-for="item in panel.options"
-                                    :key="item.value"
-                                    :label="item.label"
-                                    :value="item.value">
-                            </el-option>
-                        </el-select>
-                    </el-col>
                     <el-col :span="20">
                         <label>
                             备注
@@ -167,6 +140,18 @@
                 </el-row>
             </div>
         </dialog_referrer_list>
+            <el-dialog
+                    title="提示"
+                    :visible.sync="dialogVisible"
+                    width="30%"
+                    :before-close="handleClose">
+                <span>{{dialogInfo}}</span>
+                <span slot="footer" class="dialog-footer">
+    <el-button @click="dialogVisible = false">取 消</el-button>
+    <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
+  </span>
+            </el-dialog>
+
     </div>
     </div>
 </template>
@@ -180,8 +165,10 @@
             return {
                 // dialog
                 dialog_state: false,
-                dialog_title: '添加备',
+                dialog_title: '添加备',
                 dialog_type: '',//类型,1是添加,2是修改
+                dialogVisible: false,
+                dialogInfo: '开始升级咯~',
                 tabIndex: 0,
                 tabs: [
                     {name: '固件管理', url: 'hardware'},
@@ -189,10 +176,10 @@
                     {name: '密码修改', url: 'pwd'},
                     {name: '系统设置', url: 'setting'},
                 ],
-                fileList: [{
-                    name: 'food.jpeg',
-                    url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
-                }],
+                fileList: [
+                    // {name: 'food.jpeg',
+                    // url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}
+                ],
                 // panel 配置项目
                 panel: {
                     usercode: '',
@@ -382,6 +369,23 @@
                 let name = that.field_name;
                 let id = that.field_id;
             },
+            // 添加备注
+            addMemo(){
+                this.dialog_state = true;
+            },
+            // 开始更新
+            startUpdate(){
+                // checkNum
+                if (!this.multipleSelection.length) {
+                    this.$message({
+                        showClose: true,
+                        message: '错了哦,需要先选中一条记录',
+                        type: 'error'
+                    });
+                    return false
+                }
+                this.dialogVisible = true;
+            }
         },
         components: {
             dialog_referrer_list
@@ -435,4 +439,90 @@
         width: 200px;
         float: left;
     }
+    /deep/ .el-upload-list__item-name [class^=el-icon] {
+        color:#6DC1FF ;
+    }
+    /deep/  .el-upload-list__item-name {
+        color:#6DC1FF ;
+    }
+    /deep/ .el-upload-list__item:first-child {
+        margin-top: 5px;
+    }
+    /deep/ .el-upload-list__item:hover {
+        background: none;
+    }
+    .addMemo {
+        width: 120px;
+        height: 30px;
+        line-height: 30px;
+        border-radius: 250px;
+        float: left;
+        background: #005EA2;
+        color: #6DC1FF;
+        font-size: 14px;
+        text-align: left;
+        font-style: normal;
+        cursor: pointer;
+        margin-top: 2px;
+        margin-left: 20px;
+    }
+    .addMemo i {
+        width: 14px;
+        height: 14px;
+        overflow: hidden;
+        float: left;
+        background: url("../assets/img/icon/addMemo.png")top center no-repeat;
+        background-size: 100% 100%;
+        margin-top: 8px;
+        margin-left: 20px;
+        margin-right: 10px;
+    }
+    .hardwareList {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 35px;
+    }
+    .hardwareList h5 {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #6DC1FF;
+        font-size: 18px;
+        text-align: left;
+        font-weight: normal;
+        margin-bottom: 10px;
+    }
+    .contorl {
+        /*width: 100%;*/
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding: 17px 23px;
+    }
+    em {
+        font-style: normal;
+    }
+    .version {
+        float: left;
+        color: #6DC1FF;
+        font-size: 14px;
+        font-style: normal;
+        margin-left: 30px;
+        line-height: 30px;
+    }
+    .allItem {
+        float: right;
+    }
+    .question {
+        width: 18px;
+        height: 18px;
+        cursor: pointer;
+        background: url("../assets/img/icon/question_icon.png")top center no-repeat;
+        float: right;
+        margin-top: 7px;
+        margin-left: 13px;
+    }
 </style>

+ 1 - 1
src/views/Login.vue

@@ -142,7 +142,7 @@
                         localStorage.token = res.Rs.token;
                         that.$router.push({path: '/'});
                     } else {
-                        if (json.code == 10005) {
+                        if (res.Code == 10005) {
                             that.$refs.userpwd.value = '';
                             that.$notify({
                                 title: '警告',

+ 2 - 1
src/views/Main.vue

@@ -5,7 +5,7 @@
         </div>
         <div class="center">
             <div class="cube">
-                <Total :post-title="pageLevel"></Total>
+                <Total :post-title="pageLevel" :region-id="regionId"></Total>
             </div>
             <div class="cube">
                 <WifiSign></WifiSign>
@@ -45,6 +45,7 @@
             return {
                 loadingState: false,
                 pageLevel: 0,//默认查全部
+                regionId: 0,//默认查全部
                 // pageLevel: 1,//当前为楼层
                 // pageLevel: 2,//当前为楼层区域
                 // pageLevel: 3,//当前为房间

+ 2 - 2
src/views/Pwd.vue

@@ -199,8 +199,8 @@
     @import "../assets/css/panel.css";
 
     .tabs ul {
-        width: 800px;
-    }
+          width: 800px;
+      }
     .image-border {
         position: absolute;
         width: 20px;

+ 384 - 0
src/views/Qrcodemanage.vue

@@ -0,0 +1,384 @@
+<template>
+    <div>
+        <div class="tabs">
+            <ul>
+                <li v-for="(tab,i) in tabs" @click="goTab(tab.url)" :class="{'active':tabIndex == i}">
+                    {{tab.name}}
+                </li>
+            </ul>
+        </div>
+        <div class="panel">
+            <div class="panel-body">
+                <div class=" panel_control">
+                    <el-row :gutter="20">
+                        <el-col :span="4">
+                            <em>设备ID:</em>
+                            <el-input v-model="panel.keyword" placeholder="请输入设备ID"></el-input>
+                        </el-col>
+                        <el-col :span="4">
+                            <em>MAC:</em>
+                            <el-input v-model="panel.keyword" placeholder="请输入MAC地址"></el-input>
+                        </el-col>
+                        <el-col :span="4">
+                            <em>所属区域:</em>
+                            <el-select v-model="panel.taskstatus">
+                                <el-option
+                                        v-for="item in panel.options"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-col>
+                        <el-col :span="6">
+                            <em>登记时间:</em>
+                            <el-date-picker
+                                    v-model="panel.time1"
+                                    type="daterange"
+                                    range-separator="至"
+                                    start-placeholder="开始日期"
+                                    end-placeholder="结束日期">
+                            </el-date-picker>
+                        </el-col>
+                        <el-col :span="4">
+                            <el-button size="small" type="primary" @click="query">查询</el-button>
+                        </el-col>
+                    </el-row>
+                </div>
+            </div>
+        </div>
+        <div class="contorl">
+            <el-button size="small" type="primary" @click="addList">添加</el-button>
+            <el-button size="small" type="primary" @click="delList">删除</el-button>
+            <el-button size="small" type="primary" @click="changeList">修改</el-button>
+        </div>
+        <el-table
+                :data="tableData"
+                class=""
+                stripe
+                @selection-change="handleSelectionChange"
+        >
+            <el-table-column
+                    type="selection"
+                    width="55">
+            </el-table-column>
+            <el-table-column
+                    prop="name"
+                    label="设备ID"
+            >
+            </el-table-column>
+            <el-table-column
+                    prop="date"
+                    label="检测时间"
+                    width="180">
+            </el-table-column>
+            <el-table-column
+                    prop="name"
+                    label="探测区域"
+            >
+            </el-table-column>
+            <el-table-column
+                    prop="name"
+                    label="信道"
+                    width="180">
+            </el-table-column>
+            <el-table-column
+                    prop="address"
+                    label="信号频段">
+            </el-table-column>
+            <el-table-column
+                    prop="address"
+                    label="数据量">
+            </el-table-column>
+            <el-table-column
+                    prop="address"
+                    label="信号强度">
+            </el-table-column>
+            <el-table-column
+                    prop="address"
+                    label="操作记录">
+                <template slot-scope="scope">
+                    <span @click="goRecord(scope.row)">探测记录</span>
+                </template>
+            </el-table-column>
+        </el-table>
+        <br>
+        <el-pagination
+                background
+                :total="pageination.total"
+                :page-size="pageination.pageItem"
+                @current-change="pageChange"
+        ></el-pagination>
+
+        <dialog_referrer_list
+                :show="dialog_state"
+                :title="dialog_title"
+                :large="true"
+                @dialog_cancel="dialog_cancel"
+                @dialog_ok="dialog_ok"
+        >
+            <div class="dialogContent">
+                <el-row :gutter="20">
+                    <el-col :span="10">
+                        <label>
+                            设备ID
+                        </label>
+                        <el-input v-model="dialog.name"></el-input>
+                    </el-col>
+                    <el-col :span="10">
+                        <label>
+                            MAC地址
+                        </label>
+                        <el-input v-model="dialog.name"></el-input>
+                    </el-col>
+                    <el-col :span="10">
+                        <label>
+                            标签名
+                        </label>
+                        <el-input v-model="dialog.name"></el-input>
+                    </el-col>
+                    <el-col :span="10">
+                        <label>
+                            设备所属楼层
+                        </label>
+                        <el-select v-model="dialog.region" placeholder="请选择所属楼层">
+                            <el-option
+                                    v-for="item in panel.options"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-col>
+                    <el-col :span="20">
+                        <label>
+                            备注
+                        </label>
+                        <el-input type="textarea" v-model="dialog.memo"></el-input>
+                    </el-col>
+                </el-row>
+            </div>
+        </dialog_referrer_list>
+    </div>
+</template>
+
+<script>
+    import Global from '../Global.js'
+    import dialog_referrer_list from '../components/dialog_referrer_list'
+
+    export default {
+        data() {
+            return {
+                // dialog
+                dialog_state: false,
+                dialog_title: '添加设备',
+                dialog_type: '',//类型,1是添加,2是修改
+                tabIndex: 0,
+                tabs: [
+                    {name: '二维码管理', url: 'qrcodemanage'},
+                ],
+                // panel 配置项目
+                panel: {
+                    usercode: '',
+                    username: '',
+                    compname: '',
+                    keyword: '',
+                    USERCODE: '',
+                    taskstatus: 99,
+                    options: [
+                        {value: 99, label: '全部'},
+                        {value: 1, label: '进行中'},
+                        {value: 2, label: '已完成'},
+                    ],
+                    time1: globalBt2(),
+                },
+                pageination: {
+                    pageItem: 10,
+                    pageoptions: pageOptions(),
+                    total: 10,
+                    pageIndex: 1,
+                },
+                dialog: {
+                    name: 10,
+                    region: 10,
+                    memo: '',
+                },
+                multipleSelection: [],
+                tableData: [{
+                    date: '2016-05-02',
+                    name: '王小虎',
+                    address: '上海市普陀区金沙江路 1518 弄'
+                }, {
+                    date: '2016-05-04',
+                    name: '王小虎',
+                    address: '上海市普陀区金沙江路 1517 弄'
+                }, {
+                    date: '2016-05-01',
+                    name: '王小虎',
+                    address: '上海市普陀区金沙江路 1519 弄'
+                }, {
+                    date: '2016-05-03',
+                    name: '王小虎',
+                    address: '上海市普陀区金沙江路 1516 弄'
+                }]
+            }
+        },
+        mounted() {
+            this.getTableQuery();
+        },
+        methods: {
+            // 跳转tab页面
+            goTab(url) {
+                this.$router.push({path: url});
+            },
+            // 查询按钮
+            query() {
+                this.getTableQuery();
+                this.$message.success('查询完毕');
+            },
+            handleSelectionChange(val) {
+                this.multipleSelection = val;
+                console.log(val);
+            },
+            // 页面数据查询
+            getTableQuery() {
+                // let that = this;
+                // that.loading = true;
+                // let url = headapi + '?ctl=ajax&mod=dial&act=taskListQuery';//获取
+                // let param = {
+                //     'taskstatus': that.panel.taskstatus,
+                //     'bt': globaltime2String(that.panel.time1[0]),
+                //     'et': globaltime2String(that.panel.time1[1]),
+                //     'KEYWORD': that.panel.keyword,
+                //     'USERCODE': that.panel.USERCODE,
+                // };
+                // let JSON = '';
+                // let postdata = qs.stringify(param);
+                // axios.post(url, postdata)
+                //     .then(function (response) {
+                //         JSON = response.data;
+                //         that.loading = false;
+                //         that.allTableData = JSON.rs;
+                //         that.recordsTotal = JSON.rs.length;
+                //         // 设置分页数据
+                //         that.setPaginations();
+                //     })
+                //     .catch(function (error) {
+                //         console.log(error);
+                //     });
+            },
+            // 设置分页数据
+            setPaginations() {
+                // 分页属性
+                let that = this;
+                that.pageination.total = that.recordsTotal;
+                // 默认分页
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+            },
+            // 每页显示数量
+            handleSizeChange() {
+                let that = this;
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+                that.draw = that.pageination.pageItem;
+                that.getTableQuery();
+            },
+            // 翻页
+            pageChange(pageIndex) {
+                let that = this;
+                // 获取当前页
+                let index = that.pageination.pageItem * (pageIndex - 1);
+                // 数据总数
+                let nums = that.pageination.pageItem * pageIndex;
+                // 容器
+                let tables = [];
+                for (var i = index; i < nums; i++) {
+                    if (that.allTableData[i]) {
+                        tables.push(that.allTableData[i])
+                    }
+                    this.tableData = tables;
+                }
+                that.start = index * that.draw;
+                that.getTableQuery();
+            },
+            // 自动排序
+            sortChange(params) {
+                console.log(params)
+            },
+            // 过滤时间
+            filterFmtDate(value, row, column) {
+                let that = this;
+                return globalfmtDate(column, 11);
+            },
+            addList() {
+                this.dialog_state = true;
+                this.dialog_title = '添加设备';
+            },
+            delList() {
+                // checkNum
+                if (!this.multipleSelection.length) {
+                    this.$message({
+                        showClose: true,
+                        message: '错了哦,需要先选中至少一条记录',
+                        type: 'error'
+                    });
+                    return false
+                }
+                // todo delEquip
+            },
+            changeList() {
+                // checkNum
+                if (!this.multipleSelection.length) {
+                    this.$message({
+                        showClose: true,
+                        message: '错了哦,需要先选中一条记录',
+                        type: 'error'
+                    });
+                    return false
+                }
+                if (this.multipleSelection.length > 1) {
+                    this.$message({
+                        showClose: true,
+                        message: '错了哦,只能选中一条记录',
+                        type: 'error'
+                    });
+                    return false
+                }
+            },
+            // 探测记录
+            goRecord(row) {
+                console.log(row);
+                this.$router.push({path: '/record', query: {row: row}});
+            },
+            dialog_cancel() {
+                let that = this;
+                that.dialog_state = false;
+            },
+            dialog_ok() {
+                let that = this;
+                let dialog_type = that.dialog_type;
+                let name = that.field_name;
+                let id = that.field_id;
+            },
+        },
+        components: {
+            dialog_referrer_list
+        }
+    }
+</script>
+
+<style scoped>
+    @import "../assets/css/panel.css";
+    @import "../assets/css/dialog.css";
+
+    .tabs ul {
+        width: 168px;
+    }
+
+    table span {
+        cursor: pointer;
+    }
+</style>

+ 420 - 0
src/views/Region.vue

@@ -0,0 +1,420 @@
+<template>
+    <div class="pages">
+        <div class="image-border image-border1"></div>
+        <div class="image-border image-border2"></div>
+        <div class="image-border image-border3"></div>
+        <div class="image-border image-border4"></div>
+        <div class="tabs">
+            <ul>
+                <li class="active">
+                    区域管理
+                </li>
+            </ul>
+        </div>
+
+
+        <div class="content">
+            <div class="tree">
+                    <span class="addMain">
+                        <em>添加主建筑
+                        <img src="../assets/img/region/add.png" height="18" width="18"/></em>
+                    </span>
+                <el-tree
+                        :data="tree"
+                        show-checkbox
+                        node-key="id"
+                        default-expand-all
+                        :expand-on-click-node="false">
+      <span class="custom-tree-node" slot-scope="{ node, data }">
+        <span>{{ node.label }}</span>
+          <span class="treeIcon">
+          <img src="../assets/img/region/add.png" height="18" width="18"/>
+          <img src="../assets/img/region/edit.png" height="18" width="18"/>
+          <img src="../assets/img/region/del.png" height="18" width="18"/>
+          <img src="../assets/img/region/watch.png" height="18" width="18"/>
+          </span>
+      </span>
+                </el-tree>
+            </div>
+            <div class="plate">
+                <div class="loftList" v-if="loftList">
+                    <div class="plateTitle">
+                        办公楼
+                    </div>
+                    <ul class="list" v-if="false">
+                        <li>
+                            <img src="../assets/img/region/loft.png" height="22" width="20"/>
+                            <em>1楼</em>
+                        </li>
+                    </ul>
+                    <div class="plateImg" v-if="true">
+                        <img src="../assets/img/main/RoomBg.png" height="769" width="1396"/></div>
+                </div>
+            </div>
+        </div>
+        <dialog_referrer_list
+                :show="dialog_state"
+                :title="dialog_title"
+                :large="true"
+                @dialog_cancel="dialog_cancel"
+                @dialog_ok="dialog_ok"
+        >
+            <div class="dialogContent">
+                <el-row :gutter="20">
+                    <el-col :span="20">
+                        <label>
+                            建筑名称
+                        </label>
+                        <el-input v-model="dialog.name"></el-input>
+                    </el-col>
+                    <el-col :span="20">
+                        <label>
+                            建筑平面图
+                        </label>
+                        <el-upload
+                                action="#"
+                                list-type="picture-card"
+                                :auto-upload="false">
+                            <i slot="default" class="el-icon-plus"></i>
+                            <div slot="file" slot-scope="{file}">
+                                <img
+                                        class="el-upload-list__item-thumbnail"
+                                        :src="file.url" alt=""
+                                >
+                                <span class="el-upload-list__item-actions">
+        <span
+                class="el-upload-list__item-preview"
+                @click="handlePictureCardPreview(file)"
+        >
+          <i class="el-icon-zoom-in"></i>
+        </span>
+        <span
+                v-if="!disabled"
+                class="el-upload-list__item-delete"
+                @click="handleDownload(file)"
+        >
+          <i class="el-icon-download"></i>
+        </span>
+        <span
+                v-if="!disabled"
+                class="el-upload-list__item-delete"
+                @click="handleRemove(file)"
+        >
+          <i class="el-icon-delete"></i>
+        </span>
+      </span>
+                            </div>
+                        </el-upload>
+                        <el-dialog :visible.sync="dialogVisible">
+                            <img width="100%" :src="dialogImageUrl" alt="">
+                        </el-dialog>
+                    </el-col>
+                </el-row>
+            </div>
+        </dialog_referrer_list>
+    </div>
+</template>
+
+<script>
+    import Global from '../Global.js'
+    import dialog_referrer_list from '../components/dialog_referrer_list'
+    export default {
+        data() {
+            return {
+                // dialog
+                dialog_state: true,
+                dialog_title: '添加设备',
+                dialog_type: '',//类型,1是添加,2是修改
+                dialog: {
+                    name: 10,
+                    region: 10,
+                    memo: '',
+                },
+                dialogImageUrl: '',
+                dialogVisible: false,
+                disabled: false,
+                loftList: [
+                    {}
+                ],
+                props: {
+                    label: 'name',
+                    children: 'zones'
+                },
+                count: 1,
+                tree: [{
+                    label: '办公楼',
+                    children: [{
+                        label: '一层',
+                        children: [{
+                            label: '第一会议室'
+                        },
+                            {
+                                label: '第二会议室'
+                            },
+                            {
+                                label: '第三会议室'
+                            }]
+                    }]
+                }, {
+                    label: '档案楼',
+                    children: [{
+                        label: '一层',
+                        children: [{
+                            label: '三级 2-1-1'
+                        }]
+                    }, {
+                        label: '二级 2-2',
+                        children: [{
+                            label: '三级 2-2-1'
+                        }]
+                    }]
+                },
+                ]
+            };
+        },
+        methods: {
+            handleCheckChange(data, checked, indeterminate) {
+                console.log(data, checked, indeterminate);
+            },
+            handleNodeClick(data) {
+                console.log(data);
+            },
+            loadNode(node, resolve) {
+                if (node.level === 0) {
+                    return resolve([{name: 'region1'}, {name: 'region2'}]);
+                }
+                if (node.level > 3) return resolve([]);
+
+                var hasChild;
+                if (node.data.name === 'region1') {
+                    hasChild = true;
+                } else if (node.data.name === 'region2') {
+                    hasChild = false;
+                } else {
+                    hasChild = Math.random() > 0.5;
+                }
+
+                setTimeout(() => {
+                    var data;
+                    if (hasChild) {
+                        data = [{
+                            name: 'zone' + this.count++
+                        }, {
+                            name: 'zone' + this.count++
+                        }];
+                    } else {
+                        data = [];
+                    }
+
+                    resolve(data);
+                }, 500);
+            },
+            dialog_cancel() {
+                let that = this;
+                that.dialog_state = false;
+            },
+            dialog_ok() {
+                let that = this;
+                let dialog_type = that.dialog_type;
+                let name = that.field_name;
+                let id = that.field_id;
+            },
+            handleRemove(file) {
+                console.log(file);
+            },
+            handlePictureCardPreview(file) {
+                this.dialogImageUrl = file.url;
+                this.dialogVisible = true;
+            },
+            handleDownload(file) {
+                console.log(file);
+            }
+        },
+        components: {
+            dialog_referrer_list
+        }
+    };
+</script>
+
+<style scoped>
+    @import "../assets/css/panel.css";
+    @import "../assets/css/dialog.css";
+
+    .tabs ul {
+        width: 200px;
+        margin: 0 auto;
+        margin-top: 10px;
+    }
+
+    .image-border {
+        position: absolute;
+        width: 20px;
+        height: 20px;
+    }
+
+    .image-border1 {
+        top: 0;
+        left: 25px;
+        border-left: 2px solid #6DC1FF;
+        border-top: 2px solid #6DC1FF;
+    }
+
+    .image-border2 {
+        top: 0;
+        right: 12px;
+        border-right: 2px solid #6DC1FF;
+        border-top: 2px solid #6DC1FF;
+    }
+
+    .image-border3 {
+        bottom: 0;
+        left: 25px;
+        border-bottom: 2px solid #6DC1FF;
+        border-left: 2px solid #6DC1FF;
+    }
+
+    .image-border4 {
+        bottom: 0;
+        right: 12px;
+        border-right: 2px solid #6DC1FF;
+        border-bottom: 2px solid #6DC1FF;
+    }
+
+    .pages {
+        /*position: absolute;*/
+        /*top: 0;*/
+        /*bottom: 0;*/
+        /*left: 0;*/
+        /*right: 0;*/
+        width: 100%;
+        /*height: 100%;*/
+        min-height: 600px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-bottom: 80px;
+    }
+
+    ul, li {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
+
+    em, s, i {
+        font-style: normal;
+        text-decoration: none;
+    }
+
+    .content {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 30px;
+    }
+
+    .content .tree {
+        width: 347px;
+        min-height: 781px;
+        background: rgba(27, 86, 200, 0.14);
+        color: #6DC1FF;
+        border: 1px solid #005EA2;
+        float: left;
+    }
+
+    .addMain {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        height: 44px;
+        line-height: 44px;
+        background: #001743;
+        cursor: pointer;
+        margin-bottom: 24px;
+    }
+
+    .addMain img {
+        position: relative;
+        left: 6px;
+        top: 3px;
+    }
+
+    /deep/ .el-tree {
+        background: none;
+        color: #6DC1FF;
+    }
+
+    /deep/ .treeIcon {
+        float: right;
+        padding-left: 10px;
+        padding-top: 1px;
+    }
+
+    /deep/ .treeIcon img {
+        margin-right: 7px;
+    }
+    .plate {
+        width: 1360px;
+        min-height: 780px;
+        float: left;
+        margin-left: 10px;
+        background: rgba(27, 86, 200, 0.14);
+        color: #6DC1FF;
+        overflow: hidden;
+        border: 1px solid #005EA2;
+    }
+    .plateTitle {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        height: 44px;
+        line-height: 44px;
+        background: #001743;
+        cursor: pointer;
+        margin-bottom: 24px;
+        text-align: left;
+        padding-left: 44px;
+    }
+    .plate ul.list {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding: 28px 44px;
+    }
+    .plate .list li {
+        width: 157px;
+        height: 49px;
+        float: left;
+        background: #08255B;
+        border: 1px solid #005EA2;
+        padding: 13px 0;
+    }
+    .list img {
+        display: block;
+        margin: 0 auto;
+        margin-bottom:9px;
+    }
+    .list em {
+        text-align: center;
+    }
+    .plateImg {
+        width: 1280px;
+        height: 569px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*padding-bottom: 60px;*/
+    }
+    .plateImg img {
+        width: 100%;
+        height: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+</style>

+ 3 - 2
vue.config.js

@@ -1,9 +1,10 @@
 module.exports = {
     lintOnSave: false,
     devServer: {
+        open: true,
         proxy: {
             '/api': {
-                target: 'http://192.168.0.162:19082/',
+                target: 'http://192.168.0.3:19082/',
                 changeOrigin: true,
                 pathRewrite: {
                     '^/api': '',
@@ -12,5 +13,5 @@ module.exports = {
         }
     },
     // 输出文件目录
-    outputDir: 'D:/wwwroot/dig_security/build/static_pc',
+    outputDir: 'D:/wwwroot/signal_build/build/static',
 };