当前位置: 首页 > news >正文

微信小程序使用picker根据接口给的省市区的数据实现省市区三级联动或者省市区街道等多级联动

接口数据如上图

省市区多级联动,都是使用的一个接口通过传参父类的code。返回我们想要的数据

比如获取省就直接不要参数。市就把省得code传给接口,区就把市的code作为参数。

<picker mode="multiSelector" :range="mulSelect1" :range-key="'regionName'" :value="addressIndex" @change="pickerChange1" @columnchange="colChange"><view class="picker"><view class="right-uni-icons"><uni-icons size="18" type="right" color="#A8ABB2"/></view><input v-model="address1" disabled placeholder="请选择"  placeholder-class="address-placeholder" v-if="!address1"/><view v-else class="chosed-address">{{ address1 }}</view></view>
</picker>
import {ref} from "vue";
const province = ref([]) //省数组
const city = ref([]) //市数组
const district = ref([]) //区数组
const street = ref([]) //街道数组const mulSelect1 = ref([]) //四级联动显示数组[[province],[city],[district],[street]]
const addressIndex = ref([]);//省市区街道数组的下标[0,1,0,0]
const addressCode= ref([]);省市区街道数组的编码[11,1111,111444,12220232]
const address1 = ref('');//选中省市区街道的文字组成部分
import {regionList} from "@/http/my";//接口
onLoad(() => {getProvince()
})
const getProvince = async () => {//获取1级省
let {data: province1} = await regionList({})
province.value = province1;
mulSelect1.value.push(province.value);
//获取2级
// 默认省份选择河南省.如果你不需要这里就不需要加上
let index=province.value.findIndex(res=>{return res.regionName=='河南省'
})
let chosedProvince=province.value[index].code;
addressIndex.value.push(index)
let {data: city1} = await regionList({parentCode: chosedProvince});let {data: city1} = await regionList({parentCode: province.value[0].code});//默认选中省的第一个,去取市的数据
city.value = city1;
mulSelect1.value.push(city.value);
addressIndex.value.push(0)
//获取3级
let {data: district1} = await regionList({parentCode: city.value[0].code});//默认选中市的第一个,去取区的数据
district.value = district1;
mulSelect1.value.push(district.value);
addressIndex.value.push(0)
//获取4级
let {data: street1} = await regionList({parentCode: district.value[0].code});//默认选中区的第一个,去取街道的数据
street.value = street1;
mulSelect1.value.push(street.value);
addressIndex.value.push(0)
}
//有数据的变动就重新获取下级。并且下级默认选择第一个.避免出现上一次选择的第二个。切换了上级之后下级还是选的第二个的情况。
const colChange = async (e) => {console.log("change",e)if (e.detail.column == 0) {//省变化let {data: city1} = await regionList({parentCode: province.value[e.detail.value].code});city.value = city1;let {data: district1} = await regionList({parentCode: city.value[0].code});district.value = district1;let {data: street1} = await regionList({parentCode: district.value[0].code});street.value = street1;addressIndex.value[0]=e.detail.value;addressIndex.value[1]=0;addressIndex.value[2]=0;addressIndex.value[3]=0;}if (e.detail.column == 1) {//市变化let {data: district1} = await regionList({parentCode: city.value[e.detail.value].code});district.value = district1;let {data: street1} = await regionList({parentCode: district.value[0].code});street.value = street1;addressIndex.value[1]=e.detail.value;addressIndex.value[2]=0;addressIndex.value[3]=0;}if (e.detail.column == 2) {//区变化let {data: street1} = await regionList({parentCode: district.value[e.detail.value].code});street.value = street1;addressIndex.value[2]=e.detail.value;addressIndex.value[3]=0;}mulSelect1.value = [province.value, city.value, district.value,street.value];// console.log("选中的数组下标",addressIndex.value)
}
//获取选择的全部内容
const pickerChange1 = (e) => {console.log("pickerChange", province.value)let provice1 = province.value[e.detail.value[0]];let city1 = city.value[e.detail.value[1]]let district1 = district.value[e.detail.value[2]];let street1 = street.value[e.detail.value[3]];address1.value = (provice1.regionName) + (city1.regionName) + (district1.regionName)+(street1.regionName);addressCode.value = [provice1.code, city1.code, district1.code,street1.code];//let address={allName: address1.value,//省市区街道的中文code:addressCode.value,//省市区街道的code值数组}console.log('getCurrentAddressAll', address)
}
http://www.lryc.cn/news/526334.html

相关文章:

  • Go Fx 框架使用指南:深入理解 Provide 和 Invoke 的区别
  • VSCode+Continue实现AI辅助编程
  • 阿里云服务器在Ubuntu上安装redis并使用
  • Blazor-Blazor呈现概念
  • 14-6-2C++的list
  • StarRocks常用命令
  • 激光雷达和相机早期融合
  • PMP–一、二、三模–分类–12.采购管理
  • C++ 标准模板库 (STL, Standard Template Library)
  • 从spec到iso的koji使用
  • 【记录自开发的SQL工具】工具字符拼接、Excel转sql、生成编码、生成测试数据
  • Cesium特效——城市白模的科技动效的各种效果
  • VS Code i18n国际化组件代码code显示中文配置 i18n ally
  • C++ —— 智能指针 unique_ptr (上)
  • 技术 · 创作 · 生活 | 我的 2024 全面复盘
  • 表的增删改查(MySQL)
  • 【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等
  • 基于Springboot用axiospost请求接收字符串参数为null的解决方案
  • 最长递增——蓝桥杯
  • 【MFC】C++所有控件随窗口大小全自动等比例缩放源码(控件内字体、列宽等未调整) 20250124
  • C#标准Mes接口框架(持续更新)
  • 【Uniapp-Vue3】动态设置页面导航条的样式
  • SQL 递归 ---- WITH RECURSIVE 的用法
  • 期权帮|如何利用股指期货进行对冲套利?
  • INCOSE需求编写指南-第1部分:介绍
  • FFPlay命令全集合
  • Mono里运行C#脚本34—内部函数调用的过程
  • rust feature h和 workspace相关知识 (十一)
  • -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
  • 【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}