感谢收看
基于vue实现的城市选择器,废话不多说,直接上代码:
<template>
<div class="contaienr">
<el-select
v-model="value"
placeholder="请选择"
style="float: left;margin:100px;"
@change="hide()"
>
<el-option
v-for="item in mapData"
:key="item.name"
:label="item.name"
:value="item.name"
>
<div class="mapData" @click="hide()">
<div class="map_item clearfix">
<div class="left">
<label
><input
type="checkbox"
name="is"
:value="item.name"
:checked="item.isCheck"
@click="isCheck(item)"
/>{{ item.name }}</label
>
</div>
<div class="right clearfix">
<label v-for="(item1, index1) in item.list" :key="index1"
><input
type="checkbox"
:value="item1.code"
v-model="item.checkedNames"
/>{{ item1.title }}</label
>
</div>
</div>
</div>
</el-option>
</el-select>
</div>
</template>
<script>
export default {
name: "index",
data() {
return {
//城市数据
value: "",
mapData: [
{
name: "北京市",
isCheck: false,
list: [
{
title: "中国环科院站",
code: "BJ01",
},
{
title: "中国环科站",
code: "BJ02",
},
{
title: "中国环科站点",
code: "BJ03",
},
{
title: "中国环科站点",
code: "BJ04",
},
{
title: "中国环科院站",
code: "BJ05",
},
{
title: "中国环科站",
code: "BJ06",
},
{
title: "中国环科站点",
code: "BJ07",
},
{
title: "中国环科站点",
code: "BJ8",
},
],
//选中数据
checkedNames: [],
},
{
name: "天津市",
isCheck: false,
list: [
{
title: "中国环科院站",
code: "TJ01",
},
{
title: "中国环科站",
code: "TJ02",
},
{
title: "中国环科站点",
code: "TJ03",
},
],
//选中数据
checkedNames: [],
},
],
};
},
created() {},
mounted() {},
methods: {
isCheck(item) {
item.isCheck = !item.isCheck;
if (item.isCheck) {
for (var i = 0; i < item.list.length; i++) {
if (item.checkedNames.indexOf(item.list[i].code) == -1) {
item.checkedNames.push(item.list[i].code);
}
}
} else {
item.checkedNames = [];
}
},
hide() {
setTimeout(() => {
//失去焦点
let arr = [];
//添加选中城市
for (var i = 0; i < this.mapData.length; i++) {
for (var j = 0; j < this.mapData[i].checkedNames.length; j++) {
arr.push(this.mapData[i].checkedNames[j]);
}
}
//选中城市
console.log("所选城市=======>" + arr);
console.log(arr);
//select
this.value = "选择站点(" + arr.length + ")";
console.log(this.value);
}, 100);
},
},
};
</script>
<style>
.mapData {
width: 600px;
}
.clearfix:after {
/*伪元素是行内元素 正常浏览器清除浮动方法*/
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
*zoom: 1; /*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
.left {
float: left;
}
.right {
float: right;
width: 500px;
}
.right label {
display: block;
width: 33%;
float: left;
}
.el-select-dropdown__item {
overflow: visible;
height: auto;
}
</style>效果图

写的比较着急,还有一点bug
本来想多做介绍的,下班了,拜拜各位!
版权声明:本文为m0_52035863原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。