项目开发前还是特别说明一下组件库的重要性,谢谢饿了么团队分享的element组件库,大大节省了页面的开发成本。左侧图层列表核心功能有1、根据图层类型展示点线面2、开关控制右侧地图上点线面的展示和隐藏3、点击数据列表,展示图层数据列表,点击某一行在地图上展示绘图信息,点击查看编辑弹出右侧编辑页面4、字段管理配置的字段,在底部数据列表动态展示5、更多操作相关的功能。整理总结不易,如需全部代码,请联系我15098950589(微信同号)和以往一样,先上效果图。

  1、页面dom

<ul>
<li v-for="(item,index) in datalist" :key="item.id">
<div class="dataView">
<div class="topview">
<div>
<span v-if="item.layerType===0" class="dotspan">点</span>
<span v-if="item.layerType===1" class="linespan">线</span>
<span v-if="item.layerType===2" class="areaspan">面</span>
<span class="itemname">{{item.layerName}}</span>
<span v-if="item.isDefault===1" class="itemDefault">默认</span>
</div>
<el-switch v-model="item.isDisplay" :key="item.id" active-color="#409EFF"
inactive-color="#C0CCDA" :active-value="1" :inactive-value="0"
@change="handleGetDataList(item.isDisplay,item.id)">
</el-switch>
</div>
<div class="bottomView">
<span class="dataspan" @click="handleList(index,item)">数据列表({{item.dataSize}})</span>
<el-dropdown>
<span>
<el-button style="height:25px;padding:0;" type="text" size="mini">
{{$t('common.moreBtn')}}<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="item.layerType===0" style="height: 30px;" @click.native="handleSetDefault(item)">设为默认
</el-dropdown-item>
<el-dropdown-item style="height: 30px;" @click.native="handleConfig(item)">图层配置
</el-dropdown-item>
<el-dropdown-item style="height: 30px;" @click.native="handleManager(index,item.id)">
字段管理
</el-dropdown-item>
<el-dropdown-item style="height: 30px;" @click.native="handleDelete(index,item.id)">删除图层
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</li>
</ul>

  2、开关状态变更,向父页面传递点线面数据

  

handleGetDataList(status, id) {
console.log('开关状态', status, id)
let data={
isDisplay:status
}
//更新开关状态
UpdateLayerStatus(data,id).then(res => {

})
//先过滤开启开关的数据
let searchList = this.datalist.filter(item => item.isDisplay === 1)

console.log('过滤开启开关的图层数据',searchList)
var dotMarkers = []
var lineMarkers = []
var polygonMarkers = []

//累加展开所有的marker数据
searchList.forEach(item => {

if (item.layerType === 0) {
dotMarkers.push(...item.list)

} else if (item.layerType === 1) {
lineMarkers.push(...item.list)

} else if (item.layerType === 2) {
polygonMarkers.push(...item.list)
}
})
console.log('过滤开启开关的图层数据1',lineMarkers)
console.log('过滤开启开关的图层数据2',polygonMarkers)
this.$emit("childGetDotMarkerDataList", dotMarkers)
this.$emit("childGetLineMarkerDataList", lineMarkers)
this.$emit("childGetPolygonMarkerDataList", polygonMarkers)
}

  3、父页面接收数据,绘制点线面

handelGetDotMarkers(markerList) {
//打开前先清空地图和数组数据
this.map.remove(this.markers);
this.markers = []

markerList.forEach(item => {
let that = this;

var marker = new AMap.Marker({
position: new AMap.LngLat(item.longitude, item.latitude),
//icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
anchor: 'bottom-center'
});

marker.on('click', function(e) {
that.handleGetDataItem(item)
})

that.markers.push(marker)
})
this.map.add(this.markers);
}

handleGetLineMarkers(markerList) {
console.log('折线数据', markerList)
//打开前先清空地图和数组数据
this.map.remove(this.polylines);
this.polylines = []

markerList.forEach(item => {
let that = this;

//实例化折线对象
let polyline = new AMap.Polyline({
map: that.map, //初始化的地图变量
path: JSON.parse(item.lineJson), //折线的存放数组,很重中。一般是好多经纬度组成的数组。
strokeWeight: 5,
borderWeight: 1,
strokeStyle: "solid",
outlineColor: '#0d42e3',
strokeColor: "#0d42e3",
strokeOpacity: 0.6
});

polyline.on('click', function(e) {
that.handleGetDataItem(item)
})
that.polylines.push(polyline)
})

this.map.add(this.polylines);

}

handleGetPolygonMarkers(markerList) {
//打开前先清空地图和数组数据
this.map.remove(this.polygons)
this.polygons = []

markerList.forEach(item => {
let that = this;

//实例化面对象
let polygon = new AMap.Polygon({
map: that.map, //初始化的地图变量
path: JSON.parse(item.surJson) //面的存放数组,很重中。一般是好多经纬度组成的数组。
});
polygon.on('click', function(e) {
that.handleGetDataItem(item)
})
that.polygons.push(polygon)
})

this.map.add(this.polygons);
console.log('地图对象1', this.map)

}

  整理总结不易,如需全部代码,请联系我15098950589(微信同号)

vue前端开发仿钉图系列(2)左侧图层列表的开发详解的更多相关文章

  1. 前端html、CSS快速编写代码插件-Emmet使用方法技巧详解

    前端html.CSS快速编写代码插件-Emmet使用方法技巧详解   Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来 ...

  2. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. [js高手之路]深入浅出webpack系列2-配置文件webpack.config.js详解

    接着上文,重新在webpack文件夹下面新建一个项目文件夹demo2,然后用npm init --yes初始化项目的package.json配置文件,然后安装webpack( npm install ...

  4. [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)

    本文继续接着上文,继续写下webpack.config.js的其他配置用法. 一.把两个文件打包成一个,entry怎么配置? 在上文中的webpack.dev.config.js中,用数组配置entr ...

  5. [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上)

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  6. vue.js循环for(列表渲染)详解

    vue.js循环for(列表渲染)详解 一.总结 一句话总结: v-for <ul id="example-1"> <li v-for="item in ...

  7. SpringBoot系列教程JPA之query使用姿势详解之基础篇

    前面的几篇文章分别介绍了CURD中的增删改,接下来进入最最常见的查询篇,看一下使用jpa进行db的记录查询时,可以怎么玩 本篇将介绍一些基础的查询使用姿势,主要包括根据字段查询,and/or/in/l ...

  8. SpringBoot系列教程JPA之delete使用姿势详解

    原文: 190702-SpringBoot系列教程JPA之delete使用姿势详解 常见db中的四个操作curd,前面的几篇博文分别介绍了insert,update,接下来我们看下delete的使用姿 ...

  9. web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}

    前端之前端初识   前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...

  10. Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...

随机推荐

  1. Python和RPA网页自动化-处理iframe嵌入式框架

    以网易云为例,歌曲列表都在<iframe>框架下,使用Python和RPA网页自动化依次点击10首歌的播放键 1.python代码 从网页源代码可见,整个歌曲列表都在<iframe& ...

  2. c++代码实现 RSA的简易demo【偏向实践】

    写在前面 [如果你还没搞明白算法具体步骤建议先去看视频了解,本demo旨在简单实践该算法] 本实践在理论上是成立的,但由于计算x的时候很容易溢出,所以观者可以理解该简易demo后对数据进行处理[以字符 ...

  3. 【Mybatis】05 官方文档指北阅读 vol3 配置 其二

    对象工厂(objectFactory)[省略,入门阶段实在不懂] 插件(plugins)[省略,入门阶段实在不懂] 环境配置(environments) MyBatis 可以配置成适应多种环境,这种机 ...

  4. Ubuntu/Linux系统中的multi-user.target

    相关: https://www.cnblogs.com/devilmaycry812839668/p/17999041 multi-user.target 是 Linux 系统中 systemd 的一 ...

  5. 国产AI模型和美国顶级AI模型的距离在哪?—— 算力?算法?数据?

    前段时间去了长春一汽,聊了Reinforcement Learning方面的工作,既是面试,也是谈了谈意向,最后全部OK,本打算是签合同了,结果HR说要求有三年的社保缴纳证明工作经验,最后说可以减到2 ...

  6. 2023.4.12.汇报.pptx

    6月份汇报想法    8月份写论文 ==========================================================

  7. C#自定义快捷操作键的实现 - 开源研究系列文章

    这次想到应用程序的快捷方式使用的问题. Windows已经提供了API函数能够对窗体的热键进行注册,然后就能够在窗体中使用这些注册的热键进行操作了.于是笔者就对这个操作进行了整理,将注册热键操作写成了 ...

  8. SeaTunnel JDBC DB2 Sink Connector支持的工作原理,快来学习吧!

    DB2是IBM的一款关系型数据库管理系统,JDBC DB2 Source Connector是一个用于通过JDBC读取外部数据源数据的连接器.Apache SeaTunnel如何支持JDBC DB2 ...

  9. RabbitMq高级特性之死信队列 通俗易懂 超详细 【内含案例】

    RabbitMq高级特性之死信队列 又称 死信交换机 DLX 介绍 当消息成为 Dead message 后,会重新发送到另一个交换机,这个交换机就是 DLX(死信交换机) 消息成为死信的情况公有三种 ...

  10. You are currently using minified code outside of NODE_ENV === 'production'. This means that you are running a slower development build of Redux.

    You are currently using minified code outside of NODE_ENV === 'production'. This means that you are ...