点击图表某行在地图中弹出对应弹窗(使用vuex)

4 篇文章 0 订阅
2 篇文章 0 订阅

1.给图表加点击事件

//点击事件(得到点击行的id)
clickGridItem(row){
    action.updateSelectPondingId(row.id);
},

2.store.js文件

export let state = Vue.observable({
    selectPondingId: null,
})

const mutation = {
    setSelectPondingId: (value) => {
        state.selectPondingId = value;
    }
}

export const action = {
    updateSelectPondingId: mutation.setSelectPondingId,
}

3.地图

import { state, action } from '../../store';
<script>
    export default {
        computed: {
            selectPondingId: ()=> state.selectPondingId,
        },
        watch: {
            //点击表格控制弹窗
			selectPondingId(fid){
                //先判断该图层地图上是勾选
				if( !this.chooseLayers.includes('disease') ){
					action.updateChooseType([...this.chooseType, 'disease']);
					action.updateChooseLayers([...this.chooseLayers, 'disease']);
				}
                //this.diseasejson为所有弹窗数据,通过fid筛选点击的那条弹窗数据
				this.diseasejson.map(item=>{
					if(item.serviceCode==fid){
                        //执行addWarningPopup()方法打开弹窗
						this.addWarningPopup(item);
					}
				})
			},
        },
        methods: {
            //弹窗
			addWarningPopup(properties){
				let lnglat=properties.coordinate.split(',')
				const map = this.$refs.map.getMap();
					map.getCanvas().style.cursor = "pointer";
					let content =  
					`<div class="bridge-tooltip" style="width:380px">
						<p style="line-height: 40px;text-indent: 22px;font-size:16px;color:#333;font-weight:bold;border-bottom:1px solid #e5e5e5; margin-bottom:10px !important">病害编号:${properties.serviceCode}</p>
						<div style="margin-bottom: 6px;padding:0 20px;">
							<p style="line-height: 26px;font-size:12px;color:#999">
								病害类型:<span style="margin-right: 20px;color:#333">${properties.diseaseType}</span>
								<br>
								病害状态:<span style="margin-right: 20px;color:#0072ff">${properties.state}</span>
								<br>
								具体位置:<span style="margin-right: 20px;color:#333">${properties.diseaseLocation}</span>
								<br>
								病害来源:<span style="margin-right: 20px;color:#333">${properties.diseaseSource}</span>
								<br>
								养护标段:<span style="margin-right: 20px;color:#333">${properties.maintenanceSection}</span>
								<br>
								养护单位:<span style="margin-right: 20px;color:#333">${properties.maintenanceCompany}</span>
							</p>
						<div>
					</div>`;
					this.clickPopup.setHTML(content).setLngLat([lnglat[0]*1,lnglat[1]*1]).addTo(map);
					this.$nextTick(()=>{
					this.map.flyTo({
						center: [lnglat[0]*1,lnglat[1]*1],
						speed: 2,
						zoom: 15,
						easing(t) {
							return t
						}
					});
				});
			}
        }
    }
</script>

效果图 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值