zoukankan      html  css  js  c++  java
  • 天地图,弹窗自定义

      1 <template>
      2     <div class="innerMap">
      3         <div id="proMap"></div>
      4         <div class="shrink">
      5             <img src="@/assets/img/triangle.png" alt="" class="triangle" v-if="flag" @click="toggleImg" />
      6             <img v-else src="@/assets/img/triangleLong.png" alt="" class="triangleLong" />
      7             <div v-if="!flag" class="inputInfo">
      8                 <el-input 
      9                     placeholder="企业名称"
     10                     @input="changeCompanyName"  
     11                     maxlength="20" 
     12                     v-model="searchFrom.companyName" clearable>
     13                 </el-input>
     14                 <el-button type="primary" size="mini" @click="search">搜索</el-button>
     15                 <el-button size="mini" class="resetBtn" @click="reset">重置</el-button>
     16                 <i class="el-icon-close closeBtn" @click="closeQuery"></i>
     17             </div>
     18              <div v-if="flag2" class="opts">
     19                 <ul class="opts-list">
     20                     <li 
     21                         :title="item.companyName"
     22                         :key="index" 
     23                         v-for="(item, index) in searchOptionList" 
     24                         class="opts-item"
     25                         @click="checkedInfo(item)">
     26                         <span class="icon-dot"></span>
     27                         {{ item.companyName }}
     28                     </li>
     29                 </ul>
     30             </div>
     31         </div>
     32         <!-- 地图右下角 -->
     33         <ul class="map-right">
     34             <li class="map-select-item">
     35                 <i class="icon-pillar"></i>
     36                 支柱产业:{{ typeNumObj.pillarNum }}
     37                 <el-switch v-model="pillarSelect" active-color="#13ce66" inactive-color="#566278" ></el-switch>
     38             </li>
     39             <li class="map-select-item">
     40                 <i class="icon-rising"></i>
     41                 新兴产业:{{ typeNumObj.risingNum }}
     42                 <el-switch v-model="risingSelect" active-color="#13ce66" inactive-color="#566278" ></el-switch>
     43             </li>
     44             <li class="map-select-item">
     45                 <i class="icon-tradition"></i>
     46                 传统产业:{{ typeNumObj.traditionNum }}
     47                 <el-switch v-model="traditionSelect" active-color="#13ce66" inactive-color="#566278" ></el-switch>
     48             </li>
     49             <li class="map-select-item">
     50                 <i class="icon-stable"></i>
     51                 稳定产业:{{ typeNumObj.stableNum }}
     52                 <el-switch v-model="stableSelect" active-color="#13ce66" inactive-color="#566278" ></el-switch>
     53             </li>
     54         </ul>
     55 
     56     </div>
     57 </template>
     58 
     59 <script>
     60 import { getCompanyMapCountApi, selectCompanyMapApi } from "@/api/home.js"
     61 import iconPillar from  '@/assets/img/icon-pillar.png';
     62 import iconRising from  '@/assets/img/icon-rising.png';
     63 import iconTradition from '@/assets/img/icon-tradition.png';
     64 import iconStable from '@/assets/img/icon-stable.png';
     65 
     66 export default {
     67     data() {
     68         return {
     69             map: {},
     70             zoom: 9,
     71             flag: true,
     72             flag2: false,
     73             searchFrom: {
     74                 companyName: '',
     75             },
     76             pillarSelect: true,
     77             risingSelect: true,
     78             traditionSelect: true,
     79             stableSelect: true,
     80             mapList: [],
     81             searchOptionList: [],
     82             typeNumObj: {
     83                 pillarNum: 0,
     84                 risingNum: 0,
     85                 traditionNum: 0,
     86                 stableNum: 0
     87             },
     88             pillarList: [],
     89             risingList: [],
     90             traditionList: [],
     91             stableList: [],
     92         }
     93     },
     94     watch: {
     95         pillarSelect(val) {
     96             if(!val) { 
     97                 this.pillarList = [];
     98                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
     99                 this.$nextTick(function() {
    100                     this.loadMap(allList);
    101                 });
    102             } else {
    103                 this.pillarList = this.mapList.filter(item => item.typeNames.includes('支柱产业'));
    104                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    105                 this.$nextTick(function() {
    106                     this.loadMap(allList);
    107                 });
    108             }
    109         }, 
    110         risingSelect(val) {
    111             if(!val) {
    112                 this.risingList = [];
    113                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    114                 this.$nextTick(function() {
    115                     this.loadMap(allList);
    116                 });
    117             } else {
    118                 this.risingList = this.mapList.filter(item => item.typeNames.includes('新兴产业'));
    119                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    120                 this.$nextTick(function() {
    121                     this.loadMap(allList);
    122                 });
    123             }
    124         }, 
    125         traditionSelect(val) {
    126             if(!val) {
    127                 this.traditionList = [];
    128                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    129                 this.$nextTick(function() {
    130                     this.loadMap(allList);
    131                 });
    132             } else {
    133                 this.traditionList = this.mapList.filter(item=> item.typeNames.includes('传统产业'));
    134                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    135                 this.$nextTick(function() {
    136                     this.loadMap(allList);
    137                 });
    138             }
    139         }, 
    140         stableSelect(val) {
    141             if(!val) {
    142                 this.stableList = [];
    143                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    144                 this.$nextTick(function() {
    145                     this.loadMap(allList);
    146                 });
    147             } else {
    148                 this.stableList = this.mapList.filter(item => item.typeNames.includes('稳定产业'));
    149                 let allList = [...this.pillarList, ...this.risingList, ...this.traditionList, ...this.stableList];
    150                 this.$nextTick(function() {
    151                    this.loadMap(allList);
    152                 });
    153             }
    154         } 
    155     },
    156     created() {
    157         this.getMapList();
    158         this.getCompanyMapCount();
    159     },
    160     methods: {
    161         // 搜索框切换
    162         toggleImg() {
    163             this.flag = false;
    164         },
    165         search() {
    166             this.getMapList();
    167         },
    168         reset() {
    169             this.searchFrom.companyName = '';
    170             this.map.clearOverLays();
    171             this.getMapList();
    172         },
    173         changeCompanyName(val) {
    174             let list = [];
    175             if(val) {
    176                 this.flag2 = true;
    177                 this.mapList.forEach( item => {
    178                     if( item.companyName.indexOf(val) != -1 ) {
    179                         list.push(item);
    180                     }
    181                 })
    182             } else {
    183                 this.flag2 = false;
    184             }
    185             this.searchOptionList = list;
    186         },
    187          // 选中项目信息
    188         checkedInfo(item) {
    189             this.searchFrom.companyName = item.companyName;
    190             this.flag2 = false;
    191         },
    192         // 关闭搜索
    193         closeQuery() {
    194             this.flag = true;
    195         },
    196         // 天地图地理编码
    197         getCoder(address) {
    198             return new Promise((resolve)=> { 
    199                 let url = `http://api.tianditu.gov.cn/geocoder?ds={"keyWord": "${address}"}&tk=958aa355f2fe94c1817c458ba57da90d`;
    200                 this.$axios.get(url).then(res => {
    201                     let lonLatObj = {};
    202                     if (res.data.status === '0') {
    203                         lonLatObj = {
    204                             lon: res.data.location.lon,
    205                             lat: res.data.location.lat,
    206                         }
    207                     }
    208                     resolve(lonLatObj);
    209                 })
    210             });
    211         },
    212         // 天地图-默认查所有
    213         getMapList() {
    214             let params = {
    215                 companyName: this.searchFrom.companyName
    216             }
    217             selectCompanyMapApi(params).then(res => { 
    218                 this.mapList = res.data.data;
    219                 this.pillarList = this.mapList.filter(item => item.typeNames.includes('支柱产业'));
    220                 this.risingList = this.mapList.filter(item => item.typeNames.includes('新兴产业'));
    221                 this.traditionList = this.mapList.filter(item => item.typeNames.includes('传统产业'));
    222                 this.stableList = this.mapList.filter(item => item.typeNames.includes('稳定产业'));
    223                 this.$nextTick(function() {
    224                     this.loadMap(this.mapList);
    225                 }); 
    226             });
    227         },
    228 
    229         // 天地图-右下方数量查询
    230         getCompanyMapCount() {
    231             getCompanyMapCountApi().then(res => {  
    232                 this.typeNumObj = res.data.data;
    233                 for( let key in this.typeNumObj ) {
    234                     if(key === '支柱产业') {
    235                         this.typeNumObj.pillarNum = this.typeNumObj[key];
    236                     } else if (key === '新兴产业') {
    237                         this.typeNumObj.risingNum = this.typeNumObj[key];
    238                     } else if (key === '传统产业') {
    239                         this.typeNumObj.traditionNum = this.typeNumObj[key];
    240                     } else if (key === '稳定产业') {
    241                         this.typeNumObj.stableNum = this.typeNumObj[key];
    242                     }
    243                 }
    244             });
    245         },
    246         // 天地图加载
    247         loadMap(mapList) {
    248             // 通过Gw这个属性判断地图是否存在
    249             if(this.map.Gw) {
    250                 // 清除标注
    251                 this.map.clearOverLays();
    252                 this.map.removeStyle();
    253             } 
    254             // 初始化地图对象
    255             this.map = new T.Map("proMap");
    256             // 设置显示地图的中心点和级别
    257             this.map.centerAndZoom(new T.LngLat(119.82654, 32.23699), this.zoom);
    258             this.map.enableDoubleClickZoom();
    259             this.map.setStyle('indigo');
    260             this.map.enableInertia();
    261             // 加载标注
    262             if(mapList && mapList.length > 0) {
    263                 for(var i = 0; i < mapList.length; i++) {
    264                     var itemLonLatObj = {};
    265                     let _this = this;
    266                     // for循环,闭包问题解决
    267                     (function(j) {
    268                         var item = mapList[j];
    269                         _this.getCoder(item.address).then(res => {
    270                             itemLonLatObj = res;
    271                             var icon1 = new T.Icon({
    272                                 iconUrl: iconPillar,
    273                                 iconSize: new T.Point(24, 24),
    274                             });
    275                             var icon2 = new T.Icon({
    276                                 iconUrl: iconRising,
    277                                 iconSize: new T.Point(24, 24),
    278                             });
    279                             var icon3 = new T.Icon({
    280                                 iconUrl: iconTradition,
    281                                 iconSize: new T.Point(24, 24),
    282                             });
    283                             var icon4 = new T.Icon({
    284                                 iconUrl: iconStable,
    285                                 iconSize: new T.Point(24, 24),
    286                             });
    287                             // 根据类型判断不同的标注
    288                             if(item.typeNames.includes('支柱产业')) {
    289                                 var marker = new T.Marker(new T.LngLat( itemLonLatObj.lon, itemLonLatObj.lat ), {icon: icon1});
    290                             } else if (item.typeNames.includes('新兴产业')) {
    291                                 var marker = new T.Marker(new T.LngLat( itemLonLatObj.lon, itemLonLatObj.lat ), {icon: icon2});
    292                             } else if (item.typeNames.includes('传统产业')) {
    293                                 var marker = new T.Marker(new T.LngLat( itemLonLatObj.lon, itemLonLatObj.lat ), {icon: icon3});
    294                             } else if (item.typeNames.includes('稳定产业')) {
    295                                 var marker = new T.Marker(new T.LngLat( itemLonLatObj.lon, itemLonLatObj.lat ), {icon: icon4});
    296                             };
    297                             let content = `
    298                                 <div>
    299                                     <div style="margin-bottom: 14px;">
    300                                         <p 
    301                                             style="font-size: 16px; 
    302                                             margin-right: 10px;">${ item.companyName }
    303                                         </p>
    304                                         <p  
    305                                             style="font-size: 12px; 
    306                                             padding: 2px 5px; 
    307                                             background: rgba(76, 122, 246, 0.2); 
    308                                             border: 1px solid #4C7AF6; 
    309                                             border-radius: 3px;"
    310                                         >${ item.typeNames.join(',') }</p>
    311                                     </div>
    312                                     <p>
    313                                         <span style="color: #999;">行业:</span>${ item.companyIndustry }
    314                                         <span 
    315                                             style="color: #999; 
    316                                             margin-left: 10px;">
    317                                             税收:<span style="color: #FFC702;">${ item.shui ? item.shui : 0}</span>
    318                                             万元
    319                                         </span>
    320                                     </p> 
    321                                     <p><span style="color: #999;">类型:</span>${ item.gongshangqiyeleixing }</p> 
    322                                     <p><span style="color: #999;">地址:</span>${ item.address }</p> 
    323                                 </div>  
    324                             `;
    325                             _this.map.addOverLay(marker);
    326                             addClickHandler(content, marker);
    327                             function addClickHandler(content, marker) {
    328                                 marker.addEventListener("click", function(e) {
    329                                     openInfo(content, e)
    330                                 });
    331                             };
    332                             function openInfo(content, e) {
    333                                 var point = e.lnglat;
    334                                 marker = new T.Marker(point);
    335                                 var markerInfoWin = new T.InfoWindow(content, {offset: new T.Point(0, -10)}); 
    336                                 _this.map.openInfoWindow(markerInfoWin, point); 
    337                             };
    338                         });
    339                     })(i);
    340                 } 
    341             } else {
    342               
    343             }
    344         },
    345         onClose() {
    346             this.map.removeOverLay(customerWinInfo);
    347         },
    348     }
    349 }
    350 </script>
    351 
    352 <style lang="scss" scoped>
    353 .innerMap {
    354     height: 780px;
    355     position: absolute;
    356     top: 124px;
    357     left: 27%;
    358     border: 1px solid #182E59;
    359     overflow: hidden;
    360     #proMap {
    361          100%;
    362         height: 100%;
    363     }
    364     .bg {
    365         background-color: rgb(65, 10, 144);
    366     }
    367     .shrink {
    368         position: absolute;
    369         top: 0;
    370         right: 0;
    371         color: #fff;
    372         z-index: 999;
    373         height: 46px;
    374         line-height: 46px;
    375         .triangle {
    376             height: 100%;
    377             float: right;
    378             cursor: pointer;
    379         }
    380         .triangleLong {
    381              460px;
    382             height: 50px;
    383         }
    384         .inputInfo {
    385              100%;
    386             position: absolute;
    387             top: 0;
    388             left: 35px;
    389             height: 50px;
    390             display: flex;
    391             align-items: center;
    392             .el-input {
    393                  260px;
    394                 margin-right: 10px;
    395             }
    396             .area-ipt {
    397                  120px;
    398                 margin-right: 0;
    399             }
    400         }
    401         .opts {
    402              162px;
    403             background: rgba(13,89,141,.8);
    404             border-radius: 3px;
    405             position: absolute;
    406             top: 46px;
    407             right: 0;
    408             overflow: hidden;
    409             overflow-y: auto;
    410             color: #fff;
    411             font-size: 14px;
    412             .opts-list {
    413                 padding: 10px;
    414                 color: #B1CFE8;
    415                 line-height: 30px;
    416                 cursor: pointer;
    417             }
    418             .opts-item {
    419                  130px;
    420                 color: #B1CFE8;
    421                 height: 30px;
    422                 line-height: 30px;
    423                 text-overflow: ellipsis;
    424                 white-space: nowrap;
    425                 overflow: hidden;
    426                 display: inline-block;
    427                 vertical-align: bottom;
    428                 .icon-dot {
    429                     display: inline-block;
    430                      8px;
    431                     height: 8px;
    432                     background: #B1CFE8;
    433                     border-radius: 4px;
    434                     margin-right: 5px;
    435                 }
    436                 &:hover {
    437                     color: #44CDDB;
    438                 }
    439             }
    440         }
    441         /deep/.el-input__inner {
    442             height: 28px;
    443             line-height: 28px;
    444         }
    445         .resetBtn {
    446             color: #fff;
    447             background: #079CA7;
    448             border-color: #079CA7;
    449         }
    450         .closeBtn {
    451             font-size: 20px;
    452             margin-left: 6px;
    453             cursor: pointer;
    454         }
    455     }
    456     .map-right {
    457         position: absolute;
    458         right: 20px;
    459         bottom: 10px;
    460         z-index: 1000;
    461         font-size: 14px;
    462         color: #fff;
    463         .map-select-item {
    464             height: 32px;
    465             display: flex;
    466             align-items: center;
    467             [class^="icon-"] {
    468                 display: inline-block;
    469                  12px;
    470                 height: 12px;
    471                 background: #1F5CFF;
    472                 border-radius: 6px;
    473                 margin-right: 6px;
    474                 &.icon-rising {
    475                     background: #039BFE;
    476                 }
    477                 &.icon-tradition {
    478                     background: #55F6FC;
    479                 }
    480                 &.icon-stable {
    481                     background: #A0EF91;
    482                 }
    483             }
    484             /deep/ .el-switch__core {
    485                  38px !important;
    486                 margin-left: 10px;
    487             }
    488         }
    489     }
    490     /deep/ .tdt-infowindow-content-wrapper {
    491          464px; 
    492         height: 264px; 
    493         box-sizing: border-box;
    494         box-shadow: none;
    495         color: #fff;
    496         padding: 30px;
    497         background: url("../../../../assets/img/map-window-bg-mid.png") left top no-repeat;
    498         background-size: 100% 100%;
    499     }
    500     /deep/ .tdt-infowindow-content p {
    501         font-size: 12px;
    502         line-height: 18px;
    503         margin: 0 0 10px 0;
    504     }
    505     /deep/ .tdt-infowindow-tip-container {
    506         background-position: center;
    507         background-size: cover;
    508         height: 34px;
    509         background-image: url('../../../../assets/img/dingwei.png');
    510         .tdt-infowindow-tip {
    511             display: none;
    512         }
    513     }
    514 }
    515 </style>
  • 相关阅读:
    oracle授权另外一个用户访问自己创建的数据对象
    popupWindow使用详解
    oracle用户管理实例
    oracle用户管理入门
    sqlite数据库修改及升级
    android之listView定位到指定行同时隐藏输入键盘
    oracle数据库常用命令
    Oracle11g安装完成后给用户解锁
    Git学习笔记(一)
    gson使用详解
  • 原文地址:https://www.cnblogs.com/guwufeiyang/p/14677500.html
Copyright © 2011-2022 走看看