首页 > 其他分享 >高德地图_平台服务效果

高德地图_平台服务效果

时间:2024-05-31 16:11:27浏览次数:13  
标签:__ el name flex 平台 地图 AMap data 高德

一、实现效果

  • 高德地图展示,多个标记点在地图上的展示
  • 点击标记点显示信息窗体,同一时间地图上只展示一个信息窗体,再次点击关闭该标记点
  • 右侧表格自动轮播信息,鼠标移动到上面停止滚动,移出继续滚动

 二、完整代码展示

<template>
  <el-main style="padding: 0;">
    <div id="amapcontainer" style="width: 90vw; height:85vh;position: relative;">
      <div class="input-card"
           style="position: absolute; top: 10px; right: 3vw; z-index: 1000;background-color: white;">
        <el-table ref="scrollTable" :data="tableData" style="width: 100%" height="250" 
                  :default-sort="{prop: 'date', order: 'descending'}" @row-click="handleRowClick">
          <el-table-column sortable prop="date" label="报警时间" width="120">
          </el-table-column>
          <el-table-column prop="city" label="报警类型" width="100">
          </el-table-column>
          <el-table-column :sort-method="sortAlarmLevel" prop="province" label="报警等级" width="80">
          </el-table-column>
          <el-table-column prop="name" label="报警人" width="80">
          </el-table-column>
        </el-table>
      </div>
    </div>
  </el-main>
</template>


<script>
    import AMapLoader from '@amap/amap-jsapi-loader';
    import {
        MessageBox
    } from 'element-ui';
    
    window._AMapSecurityConfig = {
      securityJsCode: '7e34e780be8c7046d0d805755ebd1be0'
    };
    
    export default {
      data() {
        return {
          map: null,
          markers: [],
          infoWindow: null,
          openMarker: null,
          scrollInterval: null,
          scrollTop: 0,
          tableData: [
            {date: '2016-05-03', name: '王小虎', province: '中', city: '低电量', address: '上海市普陀区金沙江路 1518 弄', zip: 200333},
            {date: '2016-05-02', name: '王小虎', province: '中', city: '跌落', address: '上海市普陀区金沙江路 1518 弄', zip: 200333},
            {date: '2016-05-04', name: '王小虎', province: '高', city: '丢失', address: '上海市普陀区金沙江路 1518 弃', zip: 200333},
            {date: '2016-05-01', name: '王小虎', province: '低', city: '普陀区', address: '上海市普陀区金沙江路 1518 弄', zip: 200333},
            {date: '2016-05-04', name: '王小虎', province: '高', city: '丢失', address: '上海市普陀区金沙江路 1518 弃', zip: 200333},
            {date: '2016-05-01', name: '王小虎', province: '低', city: '普陀区', address: '上海市普陀区金沙江路 1518 弃', zip: 200333}
          ]
        }
      },
      mounted() {
        this.initAMap();
        this.startScroll();
      },
      methods: {
        sortAlarmLevel(a, b) {
          const levels = ['高', '中', '低'];
          const indexA = levels.indexOf(a);
          const indexB = levels.indexOf(b);
    
          if (indexA === -1) return 1;
          if (indexB === -1) return -1;
    
          return indexA - indexB;
        },
        initAMap() {
          AMapLoader.load({
            key: "81208a6c878ab9e78bfa0eac0e5eb16d",
            version: "2.0",
            plugins: ["AMap.Scale", "AMap.ToolBar", "AMap.ControlBar", 'AMap.Geocoder', 'AMap.Marker', 'AMap.CitySearch', 'AMap.Geolocation', 'AMap.AutoComplete', 'AMap.InfoWindow']
          }).then((AMap) => {
            this.map = new AMap.Map("amapcontainer", {
              resizeEnable: true,
              zoom: this.zoom,
              viewMode: "3D",
              zoomEnable: true,
              dragEnable: true,
              doubleClickZoom: true,
              zoom: 11,
              center: [117.227000, 31.820301]
            });
    
            const markerData = [{
              position: [117.243952, 31.858556],
              content: 'HELLO, ZHYL!',
              dynamicImagePath: require('@/assets/moren.jpeg'),
              name: '张三',
              ZT: '离线',
              TW: '37.1',
              BS: '5000',
              DL: '60',
              XL: '80',
              XY: '120/80',
              XYY: '96',
              SM: '深睡',
              FWY: '张四',
              FWYTEL: '13888888888'
            }, {
              position: [117.267456, 31.860184],
              content: 'HELLO, ANOTHER!',
              dynamicImagePath: require('@/assets/orange.jpeg'),
              name: '李四',
              ZT: '在线',
              TW: '37.3',
              BS: '6000',
              DL: '62',
              XL: '90',
              XY: '120/85',
              XYY: '96',
              SM: '浅睡',
              FWY: '赵五',
              FWYTEL: '138887818888'
            }];
    
            this.infoWindow = new AMap.InfoWindow({
              isCustom: true,
              offset: new AMap.Pixel(0, -45),
            });
    
            markerData.forEach(data => {
              let marker = new AMap.Marker({
                position: data.position,
              });
              this.map.add(marker);
              this.markers.push(marker);
    
              marker.on("click", (e) => {
                if (this.openMarker === marker) {
                  this.infoWindow.close();
                  this.openMarker = null;
                } else {
                  this.infoWindow.setContent(`
                    <div style="background-color: white;padding:10px;">
                      <div style="display: flex;">
                        <div style="flex:0.3;display: flex;flex-direction: column;align-items:center">
                          <img style="width:80px;height:80px" src="${data.dynamicImagePath}" alt="路径错误" />
                          <span>${data.name}</span>
                          <span style="color: greenyellow;">【${data.ZT}】</span>
                        </div>
                        <div style="flex:0.7">
                          <div>
                            <span>体温(°C):${data.TW}</span>
                            <span style="padding-left: 20px;">步数:${data.BS}</span>
                            <span style="padding-left: 20px;">电量(%):${data.DL}</span>
                          </div>
                          <div>
                            <span>心率(次/分):${data.XL}</span>
                            <span style="padding-left:20px;">血压(mmHg):${data.XY}</span>
                          </div>
                          <div>
                            <span>血氧(%):${data.XYY}</span>
                            <span style="padding-left: 20px;">当前睡眠状态:${data.SM}</span>
                          </div>
                        </div>
                      </div>
                      <div style="display: flex;justify-content: space-between;">
                        <span>关联服务人员姓名:${data.FWY}</span>
                        <span style="padding-left: 20px;">关联服务人员联系号码:${data.FWYTEL}</span>
                      </div>
                    </div>`);
                  this.infoWindow.open(this.map, e.target.getPosition());
                  this.openMarker = marker;
                }
              });
            });
          }).catch(e => {
            console.log(e)
          })
        },
        startScroll() {
          const tableWrapper = this.$refs.scrollTable.$el.querySelector('.el-table__body-wrapper');
          const tableBody = tableWrapper.querySelector('tbody');
    
          const scroll = () => {
            this.scrollTop += 1;
            if (this.scrollTop >= tableBody.scrollHeight - tableWrapper.clientHeight) {
              this.scrollTop = 0;
            }
            tableWrapper.scrollTop = this.scrollTop;
          };
    
          this.scrollInterval = setInterval(scroll, 50);
    
          tableWrapper.addEventListener('mouseenter', this.stopScroll);
          tableWrapper.addEventListener('mouseleave', this.resumeScroll);
        },
        stopScroll() {
          if (this.scrollInterval) {
            clearInterval(this.scrollInterval);
            this.scrollInterval = null;
          }
        },
        resumeScroll() {
          if (!this.scrollInterval) {
            this.startScroll();
          }
        },
        handleRowClick(row, column, event) {
              MessageBox.alert(`行被点击了: ${row.name}, ${row.date}`, '行点击提示', {
                confirmButtonText: '确定',
                type: 'info'
              });
            }
      }
    };
    </script>



<style scoped>
    /* 隐藏滚动条但保持滚动功能 */
    .el-table__body-wrapper::-webkit-scrollbar {
        width: 0;
        height: 0;
    }

    ::v-deep .el-table--scrollable-y .el-table__body-wrapper {
        overflow-y: hidden;
    }

    .el-table__body-wrapper {
        -ms-overflow-style: none;
        /* IE 和 Edge */
        scrollbar-width: none;
        /* Firefox */
    }

    .el-header {
        margin-top: 10px;
        background-color: #ffffff;
        color: #333;
        display: flex;
        justify-content: flex-start;
        align-items: center;
        padding: 0 20px;
        height: 80px;
    }

    .header-content {
        height: 100%;
        display: flex;
        align-items: center;
        width: 100%;
    }

    .el-form--inline {
        display: flex;
    }

    .el-form--inline .el-form-item {
        display: flex;
        align-items: center;
        margin-top: 20px;
        margin-right: 20px;
    }

    .el-main {
        margin-top: 10px;
        background-color: #ffffff;
        padding: 0px 20px;
        overflow: auto;
        display: flex;
        flex-direction: column;
    }

    .main-content {
        flex: 1;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
    }

    .table-wrapper {
        flex: 1;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        margin-bottom: 20px;
    }

    .el-footer {
        height: 60px;
        display: flex;
        align-items: center;
        justify-content: flex-end;
        padding: 0 20px;
        background-color: #fff;
    }

    .main-header {
        display: flex;
        justify-content: flex-start;
        align-items: center;
        padding: 10px 0;
    }

    .short-input .el-input__inner,
    .short-input .el-select,
    .short-input .el-date-picker__editor {
        width: 300px;
    }

    .drawer-form .drawer-input .el-input__inner,
    .drawer-form .drawer-input .el-select .el-input__inner,
    .drawer-form .el-date-picker__editor .el-input__inner {
        width: 500px !important;
        /* 设置抽屉内输入框的宽度 */
    }

    .drawer-form .el-select .el-input__inner {
        width: 480px;
        /* 调整下拉框箭头的位置 */
    }

    .drawer-footer {
        text-align: right;
        padding: 10px;
        background: #f5f5f5;
        position: absolute;
        bottom: 0;
        width: 100%;
    }

    .avatar-table {
        width: 40px;
        height: 40px;
        border-radius: 50%;
    }
</style>

 

标签:__,el,name,flex,平台,地图,AMap,data,高德
From: https://www.cnblogs.com/le-cheng/p/18224745

相关文章

  • 跨境电商常用海外主流社媒平台对比,现状及玩法
    品牌出海是离不开海外社媒这个阵地的,借助海外社媒,品牌可以更好地推广宣传、提高影响力。但海外社媒平台那么多,我们应该如何选择呢?每个平台的现状和玩法又是怎样的呢?今天就跟大家分享跨境电商常用的海外主流社媒平台的对比,告诉大家现状及玩法。 平台概览Facebook: 全球......
  • 轻兔推荐 —— 一个好用的软件服务推荐平台
    给大家推荐一个好用的的软件服务推荐平台:轻兔推荐-https://app.lighttools.net/界面网站界面简洁大方,没有太多杂七杂八的功能和页面,有明暗主题色可以选择,默认为亮色,可在网站上方手动切换。内容每工作日都会推荐一款软件,如Pake、code-server、vfox等,有时会加更,大部分偏向......
  • 百度地图坐标拾取器
     001、打开地图 002、地图开放平台 003、选开发者频道 004、开发者工具→坐标拾取器 。 ......
  • Python 如何从 Google 地图短链接显示 X 和 Y?
    我有这样的google地图短链接:https://maps.app.goo.gl/wsmXZrYfP8V3ur2RAIwantpythonscripttoaskusertoinputgooglemaplink,thenprintXandYIuserinput:https://maps.app.goo.gl/wsmXZrYfP8V3ur2RApythoncodewillgetfulllink......
  • 校园周边美食探索及分享平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园周边美
    目录一.前言二.功能模块2.1. 前台首页功能模块2.2. 用户功能模块2.3. 管理员功能模块三.部分代码实现四.源码下载一.前言美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起,互联网日益成......
  • 盘点程序员可以接私活的平台和一些建议
    如果你的工作相对没那么费时间,可以空闲的时候去接点私活。或者是还没有找工作之前,可以通过一些平台接一些兼职,一来能够赚钱,在主业保持稳定的情况下能够发展自己的副业。二来通过接项目,大量的实践,你说接触的类型会更丰富,可以为你积累实战经验,面试时也会比他人更有优势。下面是我为......
  • 低代码开发平台(Low-code Development Platform)的模块组成部分
    低代码开发平台(Low-codeDevelopmentPlatform)的模块组成部分主要包括以下几个方面:低代码开发平台的模块组成部分可以按照包含系统、模块、菜单组织操作行为等维度进行详细阐述。以下是从这些方面对平台模块组成部分的说明:包含系统低代码开发平台本身作为一个完整的系统,包含......
  • 带你走进量子云平台(二)
    本文分享自天翼云开发者社区《带你走进量子云平台(二)》,作者:Qubit量子叠加和量子纠缠这两个基本特性,使得量子计算机在解决某些类型的问题时比经典计算机快得多。这两个属性从本质上决定了一个基本事实——量子计算天然地由概率主导。换句话说,这意味着量子程序本质上是概率性的、随......
  • AI+翻译 AI智能体平台扣子coze开发搭建
    抖音出品的AI智能体平台,可以快速搭建自己的AIAgent工作流,并且提供了API供开发者调用机器人Bot+工作流+官方插件=AIAgentAI+翻译实现目的是英译中或中译英,并生成对应的音频文件开发智能体创建speak工作流=>输入=>翻译=>生成音频=>输出,试运行通过......
  • 1.2K Star:这个前后端一体化的快速开发平台有点强!料很足!!
    大家好!我是赵老师,专门搜罗分享一些优秀开源项目、工具软件等以及进行一些原创技术分享和干货文章分享!喜欢的童鞋可以点个关注+在看,大家也可以在留言区尽情探讨,谢谢啦!最近在提交本人代码到gitee仓库的时候,不经意间看到了这个项目,这是一款基于SpringBoot、Easyweb和Layui的Jav......