guoxiaohuan 4 سال پیش
والد
کامیت
80240edd69

BIN
src/assets/imgs/eye2.jpg


+ 85 - 72
src/components/Rotation/src/rotation.vue

@@ -5,16 +5,19 @@
 */
 <template>
     <div :class='[type==1?"rotationFull":(type==3?"rotationFullYlt":"rotation")]' class='wanda-rotation'>
-        <!-- <div v-if='rotationImg.length==1' class='rotationCon'>
+        <div v-if='rotationImg.length==1&&size=="width"' class='rotationConType'>
             <img :src='rotationImg[0].url' alt />
         </div>
-        <el-carousel v-else trigger='click' style='height:100%;width:100%' :interval='5000' arrow='always' @change='changePic' :loop='false'>
+        <div v-else-if='rotationImg.length==1&&size=="height"' class='rotationCon'>
+            <img :src='rotationImg[0].url' alt />
+        </div>
+        <!-- <el-carousel v-else trigger='click' style='height:100%;width:100%' :interval='5000' arrow='always' @change='changePic' :loop='false'>
             <el-carousel-item v-for='(item,index) in rotationImg' :key='index'>
                 <img :src='item.url' alt />
             </el-carousel-item>
         </el-carousel>-->
-        <el-carousel style='height:100%;width:100%' :interval='5000' arrow='always' @change='changePic'>
-            <el-carousel-item v-for='(item,index) in fileList' :key='index'>
+        <el-carousel v-else style='height:100%;width:100%' :interval='5000' arrow='always' @change='changePic'>
+            <el-carousel-item v-for='(item,index) in rotationImg' :key='index'>
                 <img :src='item.url' alt style='  width: 100%; height: 100%;object-fit: cover;' />
             </el-carousel-item>
         </el-carousel>
@@ -58,6 +61,7 @@ export default {
         if (this.type == 2) {
             this.changePic(1)
         }
+        console.log(this.rotationImg, this.size)
     }
 }
 </script>
@@ -73,11 +77,11 @@ export default {
     /deep/ .el-carousel__container {
         height: 100%;
     }
-    .rotationConType {
-        height: 100%;
-        width: 100%;
-        overflow: auto;
-    }
+    // .rotationConType {
+    //     height: 100%;
+    //     width: 100%;
+    //     overflow: auto;
+    // }
     /deep/ .el-carousel__item {
         text-align: center;
         background: #fff;
@@ -92,67 +96,76 @@ export default {
     }
 }
 
-// .rotation {
-//     width: 100%;
-//     height: 100%;
-//     overflow: hidden;
-//     display: flex;
-//     justify-content: center;
-//     align-items: center;
-//     .rotationCon {
-//         height: 100%;
-//         width: 100%;
-//         text-align: center;
-//     }
-//     img {
-
-//         width: 100%;
-//         height: 100%;
-//         object-fit: cover;
-//     }
-// }
-// .rotationFull {
-//     width: 100%;
-//     height: 100%;
-//     overflow: auto;
-//     display: flex;
-//     justify-content: center;
-//     align-items: center;
-//     .rotationCon {
-//         height: 100%;
-//         width: 100%;
-//         display: flex;
-//     }
-//     img {
-//         max-width: 100%;
-//         max-height: 100%;
-//         display: block;
-//         margin: auto;
-//     }
-// }
-// .rotationFullYlt {
-//     width: 100%;
-//     height: 100%;
-//     overflow: hidden;
-//     display: flex;
-//     justify-content: center;
-//     align-items: center;
-//     /deep/ .el-carousel__container {
-//         height: 100% !important;
-//     }
-//     .rotationCon {
-//         height: 100%;
-//         width: 100%;
-//         overflow: auto;
-//     }
-//     /deep/ .el-carousel__item {
-//         text-align: center;
-//         background: #fff;
-//     }
-//     img {
-
-//         height: 100%;
-
-//     }
-// }
+.rotation {
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    .rotationCon {
+        height: 100%;
+        width: 100%;
+        text-align: center;
+    }
+    img {
+        width: 100%;
+        height: 100%;
+        object-fit: cover;
+    }
+}
+.rotationFull {
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    .rotationCon {
+        height: 100%;
+        width: 100%;
+        display: flex;
+    }
+    img {
+        max-width: 100%;
+        max-height: 100%;
+        display: block;
+        margin: auto;
+    }
+}
+.rotationFullYlt {
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    /deep/ .el-carousel__container {
+        height: 100% !important;
+    }
+    .rotationConType {
+        height: 100%;
+        width: 100%;
+        overflow: auto;
+    }
+    /deep/ .el-carousel__item {
+        text-align: center;
+        background: #fff;
+    }
+    img {
+        height: 100%;
+    }
+    .rotationCon {
+        height: 100%;
+        width: 100%;
+        overflow: auto;
+    }
+    /deep/ .el-carousel__item {
+        text-align: center;
+        background: #fff;
+    }
+    img {
+        width: 100%;
+    }
+}
 </style>

+ 1 - 1
src/components/floorMap/canvasFun.vue

@@ -24,7 +24,7 @@
             </div>
             <div class='small-block' @click='fitToWindow'>
                 <i>
-                    <img src='../../assets/imgs/qp.png' alt />
+                    <img src='../../assets/imgs/eye2.jpg' alt />
                 </i>
             </div>
             <div class='small-size' @click='reduce'>

+ 21 - 18
src/router/index.js

@@ -1,12 +1,8 @@
 import Vue from 'vue'
 import store from '@/store'
 import VueRouter from 'vue-router'
-import {
-    query
-} from '@/utils/query'
-import {
-    getPvUv
-} from '@/api/public.js'
+import { query } from '@/utils/query'
+import { getPvUv } from '@/api/public.js'
 Vue.use(VueRouter)
 const routes = [
     // {
@@ -15,12 +11,16 @@ const routes = [
     // },
     {
         path: '/404',
-        name: "404页面",
+        name: '404页面',
         component: () => import('../components/404'),
     },
     {
+        path: '/400',
+        component: () => import('../views/table'),
+    },
+    {
         path: '/group',
-        name: "集团首页",
+        name: '集团首页',
         component: () => import('../views/statistics/index'),
     },
     // home
@@ -29,7 +29,8 @@ const routes = [
         name: 'home',
         component: () => import('../views/index'),
         redirect: '/home/homepage',
-        children: [{
+        children: [
+            {
                 path: 'homepage',
                 name: '项目首页',
                 component: () => import('../views/homepage'),
@@ -126,14 +127,16 @@ router.beforeEach(async (to, from, next) => {
 // 跳入路由后要对发送pvuv
 router.afterEach((to, from) => {
     let data = {
-        "type": "router",
-        "target": to.name,
-        "parameter": to.path
+        type: 'router',
+        target: to.name,
+        parameter: to.path,
     }
-    getPvUv(data).then(res => {
-        console.log('pvuv', res)
-    }).catch(res => {
-        console.log('error', res)
-    })
+    getPvUv(data)
+        .then((res) => {
+            console.log('pvuv', res)
+        })
+        .catch((res) => {
+            console.log('error', res)
+        })
 })
-export default router
+export default router

+ 1 - 1
src/views/equipment/eqDialog.vue

@@ -65,7 +65,7 @@
                                 >
                                     <!-- 有tab的原理图 -->
                                     <div style='width:100%;height:600px;'>
-                                        <rotation v-if='rotationImg.length>0' type='3' :rotationImg='rotationImg'></rotation>
+                                        <rotation :size='sizePic' v-if='rotationImg.length>0' type='3' :rotationImg='rotationImg'></rotation>
                                     </div>
                                 </el-tab-pane>
                                 <!-- 发布之后的编辑器的分支图 -->

+ 1 - 1
src/views/overview/index.vue

@@ -274,7 +274,7 @@ export default {
             //     previewUrl = Boolean(previewUrl.split('=')[1])
             //     this.$store.commit('SETISPREVIEW', previewUrl)
             // }
-            let previewUrl = this.$route.query.previewUrl,
+            let previewUrl = this.$route.query.isPreview,
                 plazaId = this.$route.query.plazaId
             if (previewUrl != '') {
                 console.log(previewUrl)

+ 4 - 4
src/views/room/detail.vue

@@ -166,7 +166,7 @@ import { mapGetters } from 'vuex'
 import { queryHxsbDetail } from '@/api/room.js'
 
 export default {
-    props: ['row', 'floorChange'],
+    props: ['row'],
     data() {
         return {
             dialogFormVisible: false,
@@ -250,9 +250,9 @@ export default {
                 classstructureid: this.row.classstructureid,
                 type_code: this.row.type_code
             }
-            if (this.floorChange) {
-                postParams.gname = this.floorChange
-            }
+            // if (this.floorChange) {
+            //     postParams.gname = this.floorChange
+            // }
             // if (this.row.floorcode) {
             //     postParams.floorcode = this.row.floorcode
             // }

+ 6 - 7
src/views/room/index.vue

@@ -100,7 +100,7 @@
                                 v-model='ppxhInput'
                                 style='width:200px;margin-right:12px'
                             ></el-input>
-                            <Select
+                            <!-- <Select
                                 width='200'
                                 @change='Index2'
                                 tipPlace='top'
@@ -109,7 +109,7 @@
                                 :selectdata='floorSelect'
                                 :placeholder='"请选择"'
                                 style='margin-right:12px'
-                            ></Select>
+                            ></Select>-->
                             <el-input
                                 clearable
                                 @change='Index2'
@@ -127,7 +127,6 @@
                             :page='page2'
                             :total='total2'
                             :size='size2'
-                            :floorChange='floorChange'
                             @Index2Emit='Index2Emit'
                         ></room-table3>
                     </el-tab-pane>
@@ -459,7 +458,7 @@ export default {
             sccsInput: '',
             ppxhInput: '',
             sbjcInput: '',
-            floorChange: '',
+            // floorChange: '',
             //
             total3: 0,
             page3: 1,
@@ -639,9 +638,9 @@ export default {
                     data.keyword = `${this.sccsInput}:manufacturer`
                 }
             }
-            if (this.floorChange) {
-                postParams.gname = this.floorChange
-            }
+            // if (this.floorChange) {
+            //     postParams.gname = this.floorChange
+            // }
             queryHxsb({ data, postParams }).then(res => {
                 this.loading2 = false
                 this.total2 = res.data.count

+ 162 - 152
src/views/statistics/index.vue

@@ -165,9 +165,8 @@ import 'leaflet-contextmenu'
 export default {
     data() {
         return {
-            toolTipHtml:'',
-            crumbsHtml: [],
-            zoneNames: {
+            crumbsHtml: [], // 导航数据
+            zoneNames: {   // 各个中心对应的拼音名称
                 "东北": 'dongbei',
                 "西北": 'xibei',
                 "华北": 'huabei',
@@ -179,40 +178,40 @@ export default {
                 "东南": 'dongnan',
                 "其他": 'Other'
             },
-            provinceCities: {
-                "青岛区域": { province: 'shandong', center: [36.06667, 120.33333], zoom: 8 },
-                "北京区域": { province: 'beijing', center: [39.604882122321174, 116.43660987308282], zoom: 8 },
-                "天津区域": { province: 'tianjin', center: [39.130593, 117.260892], zoom: 7 },
-                "济南区域": { province: 'shandong', center: [36.4, 117.0], zoom: 7 },
-                "上海区域": { province: 'shanghai', center: [31.090574094954192, 121.46299249603001], zoom: 10 },
-                "南京区域": { province: 'jiangsu', center: [32.05, 118.78333], zoom: 7 },
-                "无锡区域": { province: 'jiangsu', center: [31.57, 120.3], zoom: 9 },
-                "厦门区域": { province: 'fujian', center: [24.46667, 118.1], zoom: 9 },
-                "宁波区域": { province: 'zhejiang', center: [29.52, 121.33], zoom: 8 },
-                "杭州区域": { province: 'zhejiang', center: [30.323100460201648, 120.50270908851112], zoom: 9 },
-                "福州区域": { province: 'fujian', center: [26.05, 119.18], zoom: 8 },
-                "合肥区域": { province: 'anhui', center: [31.52, 117.17], zoom: 7 },
-                "长沙区域": { province: 'hunan', center: [28.12, 112.59], zoom: 8 },
-                "南昌区域": { province: 'jiangxi', center: [28.4, 115.55], zoom: 8 },
-                "大连区域": { province: 'liaoning', center: [39.98974718404572, 122.66034125625548], zoom: 8 },
-                "沈阳区域": { province: 'liaoning', center: [41.72213058512578, 122.93479223528372], zoom: 8 },
-                "长春区域": { province: 'jilin', center: [42.88033923363183, 127.02188147691707], zoom: 8 },
-                "东莞区域": { province: 'guangdong', center: [23.644524198573688, 114.83844948916203], zoom: 8 },
-                "南宁区域": { province: 'guangxi', center: [22.48, 108.19], zoom: 7 },
-                "广州区域": { province: 'guangdong', center: [22.755920681486405, 112.01244459124548], zoom: 7 },
-                "太原区域": { province: 'shanxi1', center: [37.54, 112.33], zoom: 7 },
-                "武汉区域": { province: 'hubei', center: [31.147006308556566, 112.97898510653813], zoom: 7 },
-                "郑州区域": { province: 'henan', center: [34.46, 113.4], zoom: 7 },
-                "哈尔滨区域": { province: 'heilongjiang', center: [46.800059446787316, 128.40505022926592], zoom: 7 },
-                "乌鲁木齐区域": { province: 'xinjiang', center: [43.45, 87.36], zoom: 8 },
-                "呼和浩特区域": { province: 'neimenggu', center: [45.182036837015886, 116.82329020199336], zoom: 5 },
-                "西安区域": { province: 'shanxi2', center: [36.08462129606931, 109.4527754086213], zoom: 7 },
-                "银川区域": { province: 'ningxia', center: [38.108627664321276, 102.36578196225639], zoom: 7 },
-                "成都区域": { province: 'sichuan', center: [30.24957724046765, 103.4647651330231], zoom: 7 },
-                "昆明区域": { province: 'yunnan', center: [25.903703303407667, 105.10972266685498], zoom: 8 },
-                "重庆区域": { province: 'chongqing', center: [29.35, 106.33], zoom: 8 }
+            provinceCities: {  // 各个区域的的省会城市  坐标 缩放级别 
+                "青岛区域商管公司": { province: 'shandong', center: [36.06667, 120.33333], zoom: 8 },
+                "北京区域商管公司": { province: 'beijing', center: [39.604882122321174, 116.43660987308282], zoom: 8 },
+                "天津区域商管公司": { province: 'tianjin', center: [39.130593, 117.260892], zoom: 7 },
+                "济南区域商管公司": { province: 'shandong', center: [36.4, 117.0], zoom: 7 },
+                "上海区域商管公司": { province: 'shanghai', center: [31.090574094954192, 121.46299249603001], zoom: 10 },
+                "南京区域商管公司": { province: 'jiangsu', center: [32.05, 118.78333], zoom: 7 },
+                "无锡区域商管公司": { province: 'jiangsu', center: [31.57, 120.3], zoom: 9 },
+                "厦门区域商管公司": { province: 'fujian', center: [24.46667, 118.1], zoom: 9 },
+                "宁波区域商管公司": { province: 'zhejiang', center: [29.52, 121.33], zoom: 8 },
+                "杭州区域商管公司": { province: 'zhejiang', center: [30.323100460201648, 120.50270908851112], zoom: 9 },
+                "福州区域商管公司": { province: 'fujian', center: [26.05, 119.18], zoom: 8 },
+                "合肥区域商管公司": { province: 'anhui', center: [31.52, 117.17], zoom: 7 },
+                "长沙区域商管公司": { province: 'hunan', center: [28.12, 112.59], zoom: 8 },
+                "南昌区域商管公司": { province: 'jiangxi', center: [28.4, 115.55], zoom: 8 },
+                "大连区域商管公司": { province: 'liaoning', center: [39.98974718404572, 122.66034125625548], zoom: 8 },
+                "沈阳区域商管公司": { province: 'liaoning', center: [41.72213058512578, 122.93479223528372], zoom: 8 },
+                "长春区域商管公司": { province: 'jilin', center: [42.88033923363183, 127.02188147691707], zoom: 8 },
+                "东莞区域商管公司": { province: 'guangdong', center: [23.644524198573688, 114.83844948916203], zoom: 8 },
+                "南宁区域商管公司": { province: 'guangxi', center: [22.48, 108.19], zoom: 7 },
+                "广州区域商管公司": { province: 'guangdong', center: [22.755920681486405, 112.01244459124548], zoom: 7 },
+                "太原区域商管公司": { province: 'shanxi1', center: [37.54, 112.33], zoom: 7 },
+                "武汉区域商管公司": { province: 'hubei', center: [31.147006308556566, 112.97898510653813], zoom: 7 },
+                "郑州区域商管公司": { province: 'henan', center: [34.46, 113.4], zoom: 7 },
+                "哈尔滨区域商管公司": { province: 'heilongjiang', center: [46.800059446787316, 128.40505022926592], zoom: 7 },
+                "乌鲁木齐区域商管公司": { province: 'xinjiang', center: [43.45, 87.36], zoom: 8 },
+                "呼和浩特区域商管公司": { province: 'neimenggu', center: [45.182036837015886, 116.82329020199336], zoom: 5 },
+                "西安区域商管公司": { province: 'shanxi2', center: [36.08462129606931, 109.4527754086213], zoom: 7 },
+                "银川区域商管公司": { province: 'ningxia', center: [38.108627664321276, 102.36578196225639], zoom: 7 },
+                "成都区域商管公司": { province: 'sichuan', center: [30.24957724046765, 103.4647651330231], zoom: 7 },
+                "昆明区域商管公司": { province: 'yunnan', center: [25.903703303407667, 105.10972266685498], zoom: 8 },
+                "重庆区域商管公司": { province: 'chongqing', center: [29.35, 106.33], zoom: 8 }
             },
-            zoneCenter: {
+            zoneCenter: {  // 各个区域的中心坐标
                 dongbei: [43.161614, 124.396818], // 取自 东北运营中心 长春区域 四平万达广场
                 xibei: [37.999781, 106.197518], // 西北  银川区域 吴忠万达广场     zoom 5
                 huabei: [39.019075, 117.686953], // 华北中心  天津区域  天津塘沽万达广场
@@ -223,7 +222,7 @@ export default {
                 dongnan: [26.657907, 119.545678], //东南 福州 宁德万达广场
                 xinan: [28.749998, 104.648788] // 西南 成都 宜宾万达广场
             },
-            legendList: [
+            legendList: [  // 地图图例数据
                 { color: '#F54E45', num: '≥200' },
                 { color: '#F58300', num: '100-200' },
                 { color: '#FFBA6B', num: '50-99' },
@@ -232,18 +231,14 @@ export default {
                 { color: '#EEEEEE', num: '0' }
             ],
             plazaInfoCount: {},
-            systemList: [],
-            currentZoneData: {}, //
+            systemList: [],  // 系统列表数据
+            currentZoneData: {}, // 当前分区
             currentDistrictData: [], //当前管理分区数据
-            currentSelectedSys: {},
-            currentSysId: '',
-            state: '',
-            value: 190,
-            currentPanel: '',
-            regulateDistrictData: [],
-            projectsCode: [],
-            maintainList: [],
-            circleSize: {
+            currentSelectedSys: {}, // 当前所选择的系统
+            currentSysId: '', // 当前系统ID
+            regulateDistrictData: [], // 分区数据
+            maintainList: [],  // 专维  维保  第三方检测 数据
+            circleSize: {  // 根据缩放级别 规定绘制点的尺寸  下标文字离点的距离
                 4: { inner: 50000, outer: 100000, offset: 2 },
                 5: { inner: 15000, outer: 30000, offset: 0.8 },
                 6: { inner: 15000, outer: 30000, offset: 0.8 },
@@ -253,7 +248,7 @@ export default {
                 10: { inner: 1000, outer: 2000, offset: 0.04 },
                 11: { inner: 1000, outer: 2000, offset: 0.04 }
             },
-            barColors :{
+            barColors :{  // // 专维  维保  第三方检测 颜色
                 0: 'linear-gradient(to right, #369CF7 , #025BAA)',   // 蓝色
                 1: 'linear-gradient(to right, #F58300 , #F58300)',   // 黄色
                 2: 'linear-gradient(to right, #F54E45 , #F54E45)'    // 红色
@@ -274,12 +269,11 @@ export default {
         window.addEventListener('resize', this.reinitalMap, false)
     },
     methods: {  
-        showToolTip (index, title) {
-            
+        showToolTip (index) {
             this.maintainList.forEach(item => {item.showToolTip = false})
             this.maintainList[index].showToolTip = true
         },
-        hideToolTip (index, title) {
+        hideToolTip (index) {
             this.maintainList[index].showToolTip = false
         },
         reinitalMap () {
@@ -310,13 +304,31 @@ export default {
             // this.$router.push({path:''})
         },
         /**
-         * 通过导航进行导航
-         *
+         * @Description 根据数据创建导航路径
+         * @Param data 当前点击的项
+         */
+        createNavpathByData(data) {
+            if (data.level === 1) {
+                this.crumbsHtml = []
+            } else {
+                let pathArr = data.path.split('/')
+                let newArr = []
+                pathArr.forEach(item => {
+                    newArr.push(item.split('&'))
+                })
+                this.crumbsHtml = newArr
+            }
+            this.currentZoneData = data
+        },
+        /**
+         * @Description 通过导航进行导航 
+         * @Param id 所选区域的id
+         * @Param index 点击项的序号
          */
         navgateFromCrumbs(id, index) {
-            let data = this.getDataByCityCcode(id)
+            let data = this.getDataByCityCcode(id)  // 根据
             if (!data) return
-            let level = data.level //1集团 2中心 3区域 0广场
+            let level = data.level    //1集团 2中心 3区域 0广场
             this.currentZoneData = data
             this.currentLevel = level
             this.getEventStatusData(level, data.ccode)
@@ -331,32 +343,33 @@ export default {
             }
             this.crumbsHtml = this.crumbsHtml.splice(0, index + 1)
         },
-        // 获取 区域/中心/项目
+        /**
+         * @Description 分区树 点击选择分区
+         * @Param ids  返回选中项的id
+         * @Param data 返回选中项的数据
+         */
         selectProjectItem(ids, data) {
             this.currentLevel = data.level
             if (data.level === 0) {  //  level=0时 plazaId必填
-                this.queryPlazaInfoCount(data.ccode, data.level, data.cid)
+                this.queryPlazaInfoCount(data.ccode, data.level, data.ccode)
             } else {
                 this.queryPlazaInfoCount(data.ccode, data.level)
             }
-            if (data.level !== 0) {
-                this.getSystemList(data.ccode, data.level) 
-            }
+            this.getSystemList(data.ccode, data.level) 
             this.getEventStatusData(this.currentLevel, data.ccode)
             this.createNavpathByData(data)
             this.currentZoneData = data
-            let JSONName = data.cname
+  
             let level = data.level // //1集团 2中心 3区域 0广场
             if (level === 1) {
                 this.pantGroupMap(data, this.currentSysId)
             } else if (level === 2) {
                 this.pantZonesMap(data, '1001')
             } else if (level === 3) {
-                let res = this.provinceCities[JSONName]
                 this.pantProjectsMap(data, this.currentSysId)
-            } else {
+            } else {   // 点击项为广场时 直接跳转到详情页  地图不用响应
                 let pathData = {fromGroup: 'true'}
-                let routeData = this.$router.resolve({ // 点击广场时 直接跳转到详情页  地图不用响应
+                let routeData = this.$router.resolve({  
                     name:'/home/homePage',
                 })
                 window.open(routeData.href, '_blank');
@@ -367,20 +380,20 @@ export default {
                 }
                 this.$store.commit('SETPLAZENAME', data.cname) 
                 localStorage.setItem('PLAZAID', data.ccode)
-                 this.$store.commit('STOREPLAZAID', data.ccode) 
+                this.$store.commit('STOREPLAZAID', data.ccode) 
                 this.$store.commit('SETISGETMAP',true) 
             }
         },
    
         /**
-         * @description  查询项目信息统计数量
-         * @param  plazaId level=0时 必填
-         * @param  ccode  管理分区编码 必填
-         * @param  level 1集团 2中心 3区域 0广场 必填
+         * @Description  查询项目信息统计数量
+         * @Param  ccode  管理分区编码 必填
+         * @Param  level 1集团 2中心 3区域 0广场 必填
+         * @Param  plazaId level=0时 必填
          */
         queryPlazaInfoCount(ccode, level, plazaId) {
             let params = {}
-            if (plazaId) {
+            if (level === 0 ) {
                 params = {getParams:{ccode, level}}
             } else {
                 params = {getParams:{ccode, level, plazaId}}
@@ -394,7 +407,8 @@ export default {
             })
         },
         /**
-         * 根据id 查找数据
+         * @Description 根据指定id 查找数据
+         * @Param id 要查找数据的id
          */
         getDataByCityCcode(id) {
             return recursionFindData(this.currentDistrictData, id)
@@ -415,8 +429,7 @@ export default {
             }
         },
         /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
+        * @Description 获取分区树数据
         * @method param empty
         */
         getFrameworkTreeData() {
@@ -432,18 +445,18 @@ export default {
                     data.open = true  // 默认展开第一级
                     this.regulateDistrictData = [data]
                     this.currentDistrictData = res.treeData
-                    this.getSystemList(data.ccode,level )
+                    this.getSystemList(data.ccode, level )
                     this.getEventStatusData(level, data.ccode)
                     if (level === 0) {  //  level=0时 plazaId必填
-                        this.queryPlazaInfoCount(data.ccode, level, data.cid)
+                        this.queryPlazaInfoCount(data.ccode, level, data.ccode)
                     } else {
-                         this.queryPlazaInfoCount(data.ccode, level)
+                        this.queryPlazaInfoCount(data.ccode, level)
                     }
                 }
                 function recursionData(data, parent) {
                     data.forEach(item => {
                         item.name = item.cname
-                        item.id = item.cid
+                        item.id = item.ccode
                         if (parent) {
                             item.path = parent + '/' + (item.cname + '&' + item.ccode)
                         }
@@ -456,12 +469,10 @@ export default {
             })
         },
          /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
-        * @method param empty
+        * @Description 展开 维保 第三方检测 专维 
+        * @Param  item 展开的某一项
         */
         toggerPanel(item) {
-            this.currentPanel = item.title
             // expand 0 初始状态  1 展开状态 2 隐藏状态
             if (item.expand === 0 || item.expand === 2) {
                 item.expand = 1 // 展开
@@ -477,9 +488,8 @@ export default {
             }
         },
          /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
-        * @method param empty
+        * @Description  计算 维保/第三方检测/专维 三个模块的高度
+        * @Param item 数据中的每一项
         */
         panelStyle(item) {
             // expand 0 初始状态  1 展开状态 2 隐藏状态
@@ -492,8 +502,10 @@ export default {
             }
         },
         /**
-         * 计算长度  维保、第三方检测是用即将逾期数据判断;专维是如果有逾期未完成直接标红,如果没有,按照即将逾期的数量显示颜色
-         */
+        *@Description 根据数据计算维保/第三方检测/专维各自颜色条的长度  维保、第三方检测是用即将逾期数据判断;专维是如果有逾期未完成直接标红,如果没有,按照即将逾期的数量显示颜色
+        *@Param item 某一项的数据
+        *@Param title 标题 
+        */
         barStyle(item, title) {
             let bg = ''
             let type = this.selectColorByNum(item.due_num, item.total)
@@ -501,7 +513,6 @@ export default {
             if (title === '专维') {
                 if (item.unfinished>0) {
                     bg = 'linear-gradient(to right, #F54E45 , #F54E45)'  
-                    // bg='red'
                 } else {
                     bg = this.barColors[type]
                 }
@@ -515,9 +526,13 @@ export default {
                 backgroundImage: bg
             }
         },
-        selectColorByNum (num, total) {   //  >=   <=
+        /**
+         * @Description 根据数据来返 维保/第三方检测/专维 三个模块中显示条的颜色 
+         * @Param num 即将逾期数 / 逾期未完成数
+         * @Param total 总数
+         */
+        selectColorByNum (num, total) {    
             let devide =  num / total
-            // console.log(num, devide)
             if ( (num > 1 && num <=24  ) || (  devide > 0.1 && devide <=0.2 ) ) {
                 return 0
             } else if ( (num > 24 && num <= 49  ) || (  devide > 0.2 && devide <=0.5 ) ) {
@@ -526,11 +541,10 @@ export default {
                 return 2
             }
         },
-        // 根据数据渲染颜色
-         /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
-        * @method param empty
+  
+        /**
+        * @Description 根据数据 判定地图上图标的显示显示颜色
+        * @Param data 作为判断的数据
         */
         paintColorByData(data) {
             let color = {
@@ -558,22 +572,16 @@ export default {
             }
             return color
         },
-        
-         /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
-        * @method param empty
+        /**
+        * @Description 显示当期时间
         */
         currentTime() {
             this.times = moment().format('YYYY.MM.DD HH:mm')
             setTimeout(this.currentTime, 1000)
         },
-        /**根据选择的系统重新渲染地图
-         * param sysId:系统Id
-         */
+ 
          /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
+        * @Description 格式化时间
         * @method param empty
         */
         formatter(str, arrv) {
@@ -585,18 +593,17 @@ export default {
             }
         },
          /**
-        * @description 获取集团 中心 区域 项目 数据树数据
-        * fetch the data of specific group / center / zone / project
+        * @Description 获取集团 中心 区域 项目 数据树数据
         * @method param ccode  管理分区编码 集团首页必填
         * @method param level  1集团 2中心 3区域 0广场 集团首页必填
-        * @method param plazaId 广场id 必填
+        * @method param plazaId 广场id  如果是广场则此参数必填 其他情况下非必填
         */
-        getSystemList(ccode, level, plazaId) {
-            let params = {}
-            if (plazaId) {
-                params = {getParams:{ccode, level}}
+        getSystemList(ccode, level) {
+            let params = null 
+            if (level === 0) {
+                params = {getParams:{plazaId: ccode, level}}
             } else {
-                params = {getParams:{ccode, level, plazaId}}
+                params = {getParams:{ccode, level}}
             }
             getCardList(params).then(res => {
                 if (res.result == 'success') {
@@ -620,9 +627,9 @@ export default {
             })
         },
         /**
-         * @description 获取事项状态统计数据
-         * @param ccode 管理分区编码 必填
-         * @param level 1集团 2中心 3区域 0广场 必填
+         * @Description 获取事项状态统计数据
+         * @Param ccode 管理分区编码 必填
+         * @Param level 1集团 2中心 3区域 0广场 必填
          */
         getEventStatusData(level, ccode) {  
             let params = {
@@ -665,7 +672,9 @@ export default {
                 }
             })
         },
-        //初始化地图
+        /**
+         *@Description 初始化地图
+         */
         initMap() {
             let that = this
             myMaps = L.map('map', {
@@ -701,7 +710,9 @@ export default {
                 this.pantProjectsMap(this.currentZoneData, this.currentSysId)
             }  
         },
-        //**清空地图 并添加全国底图*/
+        /**
+         * @Description 清空地图 并添加全国底图
+        */
         clearAllLayers() {
             myMaps.eachLayer(function(layer) {
                 myMaps.removeLayer(layer)
@@ -718,14 +729,14 @@ export default {
             }).addTo(myMaps)
         },
         /**
-         * 移动地图到指定中心
+         * @Description 移动地图到指定中心
          */
         panTo(center, zoom) {
             myMaps.setView(center, zoom)
         },
         /**
-         * 切换系统时 地图响应
-         * @params  system:当前选择的系统
+         * @Description 切换系统时 地图响应
+         * @Params  system:当前选择的系统
          */
         getInfoOfProject(system) {
             this.systemList.forEach(item => {
@@ -744,7 +755,10 @@ export default {
                 this.pantProjectsMap(this.currentZoneData, system.smsxt)
             }
         },
-        // 用于绘制集团地图
+        /**
+         * @Description 用于绘制集团级别的地图
+         * @Param data 数据
+         */
         pantGroupMap(data) {
             this.clearAllLayers()
             myMaps.setView([38, 103], 4)
@@ -801,7 +815,8 @@ export default {
             groupLayer.addTo(myMaps)
         },
         /**
-         * 用于绘制中心下的地图
+         * @Description  用于绘制中心地图
+         * @Param data 数据
          */
         pantZonesMap(data) {
             let that = this
@@ -826,6 +841,7 @@ export default {
                 }
                 querySystemCard(params).then(res => {
                     if (res.result === 'success') {
+
                         let city = that.provinceCities[item.cname]
                         let num = 0
                         let center = city.center
@@ -847,8 +863,9 @@ export default {
             groupLayer.addTo(myMaps)
         },
         
-        /***
-         * 用于绘制项目的点
+        /**
+         * @Description 用于绘制项目的点
+         * @Param data 数据
          */
         pantProjectsMap(data) {
             this.clearAllLayers()
@@ -859,7 +876,8 @@ export default {
             })
         },
         /**
-         * 用于绘制广场的点
+         * @Description 用于绘制广场
+         * @Param data 数据
          */
         pantPlazaMap(item, zoom) {
             let that = this
@@ -895,7 +913,15 @@ export default {
             })
         },
          /**
-         * 
+         * @Description 用于绘制广场的点
+         * @Param num 当前点的逾期设备数
+         * @Param groupLayer 地图图层
+         * @Param contentHtml 弹出框的Html内容
+         * @Param center 该点坐标
+         * @Param data  该点数据
+         * @Param name  改点名称
+         * @Param type  地图级别  group / zone / project  集团 / 中心 / 区域
+         * @param zoom 缩放级别
          */
         createPointOnMap (num, groupLayer, contentHtml, center, data,  name, type , zoom) {
             let popup = null
@@ -911,7 +937,6 @@ export default {
             let sizes = this.circleSize[zoom]
             if (color  && center) { 
                 popup = L.popup({closeOnClick:true}).setLatLng(center).setContent(contentHtml)
-
                 marker = L.marker([center[0] - sizes.offset,  center[1]], { icon: myIcon }).addTo(groupLayer)
                 outCircle = L.circle(center, sizes.outer, { color: 'transparent', fillColor: color.border, fillOpacity: 1 }).bindPopup(contentHtml).addTo(groupLayer)
                 innerCircle =L.circle(center, sizes.inner, { color: 'transparent', fillColor: color.area, fillOpacity: 1 }).bindPopup(contentHtml).addTo(groupLayer)
@@ -924,15 +949,16 @@ export default {
                     this.currentLevel = data.level
                     this.getEventStatusData(data.level, data.ccode)
                     this.queryPlazaInfoCount(data.ccode, data.level) 
-                    groupLayer.clearLayers()
+                    if (type !== 'project') {
+                        groupLayer.clearLayers()
+                    }
                     this.createNavpathByData(data)
+                    this.getSystemList(data.ccode, data.level)
                     if (type === 'group') {
                         this.pantZonesMap(data, this.currentSysId)
-                        this.getSystemList(data.ccode, data.level) 
                     } 
                     if (type === 'zone') {
                         this.pantProjectsMap(data, this.currentSysId)
-                        this.getSystemList(data.ccode, data.level) 
                     } 
                     if (type === 'project') {
                         let routeData = this.$router.resolve({
@@ -946,7 +972,7 @@ export default {
                         }
                         this.$store.commit('SETPLAZENAME', data.cname) 
                         localStorage.setItem('PLAZAID', data.ccode)
-                         this.$store.commit('STOREPLAZAID', data.ccode) 
+                        this.$store.commit('STOREPLAZAID', data.ccode) 
                         this.$store.commit('SETISGETMAP',true) 
                     }   
                 })
@@ -954,7 +980,7 @@ export default {
           
         },
         /**
-         * 生成弹框HTML
+         *@Description 生成弹框HTML
          */
         createPopupHtmlContent(data, name) {
             if (Array.isArray(data) && data.length) {
@@ -983,22 +1009,7 @@ export default {
                 return ''
             }
         },
-        /**
-         * 根据数据创建导航路径
-         */
-        createNavpathByData(data) {
-            if (data.level === 1) {
-                this.crumbsHtml = []
-            } else {
-                let pathArr = data.path.split('/')
-                let newArr = []
-                pathArr.forEach(item => {
-                    newArr.push(item.split('&'))
-                })
-                this.crumbsHtml = newArr
-            }
-            this.currentZoneData = data
-        }
+        
     },
     beforeDestroy() {
         window.removeEventListener('resize', this.reinitalMap)
@@ -1036,8 +1047,6 @@ export default {
         overflow: hidden;
         .home {
             width: 265px;
-            min-width: 265px;
-           max-width: 320px;
             height: 48px;
             // line-height: 48px;
             text-align: center;
@@ -1459,4 +1468,5 @@ export default {
         }
     }
 }
-</style> 
+</style> 
+ 

+ 206 - 0
src/views/table/index.vue

@@ -0,0 +1,206 @@
+<template>
+    <div>
+        <h4>Table1</h4>
+        <h6>原数据</h6>
+        <el-table :data='tableData1' border style='width: 100%'>
+            <el-table-column prop='type' label='type' width='180'></el-table-column>
+            <el-table-column prop='professional' label='professional'></el-table-column>
+            <el-table-column prop='unit' label='unit'></el-table-column>
+            <el-table-column prop='seq0' label='seq0'></el-table-column>
+            <el-table-column prop='seq1' label='seq1'></el-table-column>
+            <el-table-column prop='seq2' label='seq2'></el-table-column>
+            <el-table-column prop='seq3' label='seq3'></el-table-column>
+            <el-table-column prop='seq4' label='seq4'></el-table-column>
+        </el-table>
+        <h6>合并数据</h6>
+        <el-table :data='tableData2' border style='width: 100%'>
+            <el-table-column prop='type' label='type' width='180'></el-table-column>
+            <el-table-column prop='professional' label='professional'></el-table-column>
+            <el-table-column prop='unit' label='unit'></el-table-column>
+            <el-table-column prop='seq0' label='seq0'></el-table-column>
+            <el-table-column prop='seq1' label='seq1'></el-table-column>
+            <el-table-column prop='seq2' label='seq2'></el-table-column>
+            <el-table-column prop='seq3' label='seq3'></el-table-column>
+            <el-table-column prop='seq4' label='seq4'></el-table-column>
+        </el-table>
+        <el-table :data='tableData2' :span-method='arraySpanMethod' border style='width: 100%'>
+            <el-table-column prop='type' label='type' width='180'></el-table-column>
+            <el-table-column prop='professional' label='professional'></el-table-column>
+            <el-table-column prop='unit' label='unit'></el-table-column>
+            <el-table-column prop='seq0' label='seq0'></el-table-column>
+            <el-table-column prop='seq1' label='seq1'></el-table-column>
+            <el-table-column prop='seq2' label='seq2'></el-table-column>
+            <el-table-column prop='seq3' label='seq3'></el-table-column>
+            <el-table-column prop='seq4' label='seq4'></el-table-column>
+        </el-table>
+    </div>
+</template>
+<script>
+export default {
+    name: 'Table1',
+    props: [],
+    components: {},
+    data() {
+        return {
+            tableData1: [],
+            tableData2: []
+        }
+    },
+    computed: {},
+    methods: {
+        arraySpanMethod({ row, column, rowIndex, columnIndex }) {
+            // console.log('span method rowIndex=', rowIndex, ', columnIndex=', columnIndex, JSON.stringify(row))
+            if (columnIndex == 0) {
+                if (row.type == '总包') {
+                    return [row.seq1, 1]
+                } else if (row.type == '分包') {
+                    return [1, 1]
+                } else {
+                    return [0, 1]
+                }
+            }
+            if (columnIndex == 1) {
+                if (row.professional) {
+                    return [row.seq2, 1]
+                } else {
+                    return [0, 1]
+                }
+            }
+            if (columnIndex == 2) {
+                if (row.unit) {
+                    return [row.seq3, 1]
+                } else {
+                    return [0, 1]
+                }
+            }
+
+            return [1, 1]
+        },
+        parseTableData(data) {
+            let seq = {}
+            data.forEach(item => {
+                let flag = item.type
+                if (!seq[flag]) {
+                    seq[flag] = 1
+                } else {
+                    seq[flag] = seq[flag] + 1
+                }
+                flag = item.type + '-' + item.professional
+                if (!seq[flag]) {
+                    seq[flag] = 1
+                } else {
+                    seq[flag] = seq[flag] + 1
+                }
+                flag = item.type + '-' + item.unit
+                if (!seq[flag]) {
+                    seq[flag] = 1
+                } else {
+                    seq[flag] = seq[flag] + 1
+                }
+            })
+
+            console.log(seq)
+
+            data.forEach(item => {
+                item.seq0 = item.type == '总包' ? 1 : 2
+                item.seq1 = seq[item.type]
+                item.seq2 = seq[item.type + '-' + item.professional]
+                item.seq3 = seq[item.type + '-' + item.unit]
+                item.seq4 = item.seq2 + item.seq3
+            })
+            data.forEach(item => console.log(JSON.stringify(item)))
+
+            data.sort((a, b) => {
+                if (a.seq0 != b.seq0) {
+                    return a.seq0 - b.seq0
+                }
+                if (a.seq4 != b.seq4) {
+                    return a.seq4 - b.seq4
+                }
+                if (a.seq3 != b.seq3) {
+                    return a.seq3 - b.seq3
+                }
+                if (a.seq2 != b.seq2) {
+                    return a.seq2 - b.seq2
+                }
+                let result = a.professional.localeCompare(b.professional)
+                if (result == 0) {
+                    return a.unit.localeCompare(b.unit)
+                } else {
+                    return result
+                }
+            })
+
+            let result = []
+            let temp = null
+            for (let i = 0; i < data.length; i++) {
+                let item = data[i]
+                if (item.type != '总包') {
+                    continue
+                }
+                if (!temp) {
+                    result.push(item)
+                } else {
+                    let content = { seq0: item.seq0, seq1: item.seq1, seq2: item.seq2, seq3: item.seq3, seq4: item.seq4 }
+                    content.type = item.type == '分包' ? '分包' : null
+                    if (item.professional != temp.professional) {
+                        content.professional = item.professional
+                    }
+                    if (item.unit != temp.unit) {
+                        content.unit = item.unit
+                    }
+                    result.push(content)
+                }
+                temp = data[i]
+            }
+            temp = null
+            for (let i = 0; i < data.length; i++) {
+                let item = data[i]
+                if (item.type != '分包') {
+                    continue
+                }
+                if (!temp) {
+                    result.push(item)
+                } else {
+                    let item = data[i]
+                    let content = { seq0: item.seq0, seq1: item.seq1, seq2: item.seq2, seq3: item.seq3, seq4: item.seq4 }
+                    content.type = item.type == '分包' ? '分包' : null
+                    if (item.professional != temp.professional) {
+                        content.professional = item.professional
+                    }
+                    if (item.unit != temp.unit) {
+                        content.unit = item.unit
+                    }
+                    result.push(content)
+                }
+                temp = data[i]
+            }
+            this.tableData1 = data
+            this.tableData2 = result
+        }
+    },
+    created() {
+        console.log('--------------------- Table1 created')
+        let tableData = [
+            { siteid: '1000423', type: '总包', professional: '土建', unit: '中建二局' },
+            { siteid: '1000423', type: '分包', professional: '电梯', unit: '上海三菱' },
+            { siteid: '1000423', type: '总包', professional: '消防电', unit: '中建二局2' },
+            { siteid: '1000423', type: '总包', professional: '机电', unit: '中建二局' },
+            { siteid: '1000423', type: '分包', professional: '精装', unit: '深圳嘉信' },
+            { siteid: '1000423', type: '总包', professional: '给排水', unit: '中建二局' },
+            { siteid: '1000423', type: '分包', professional: '幕墙', unit: '中建二局' },
+            { siteid: '1000423', type: '分包', professional: '精装', unit: '深圳艺涛' },
+            { siteid: '1000423', type: '分包', professional: '采光顶', unit: '上海通用' },
+            { siteid: '1000423', type: '分包', professional: '空调', unit: '武汉三重' },
+            { siteid: '1000423', type: '总包', professional: '弱电', unit: '中建二局' },
+            { siteid: '1000423', type: '分包', professional: '消防水', unit: '辽宁强盾' }
+        ]
+        this.parseTableData(tableData)
+    },
+    mounted() {
+        console.log('--------------------- Table1 mounted')
+    }
+}
+</script>
+<style lang='css' scoped>
+</style>