uniapp省市区懒加载封装

news/2025/1/16 21:22:20/

一、z-region.vue  直接复制就可用,需要修改请求接口  getAddressList

vue2和vue3皆可使用(微信小程序,H5支持)

javascript"><template><view><view class="list"><picker class="picker" mode="multiSelector" :range="region" range-key="name" :value="regionIndex"@change="pickerChange" @columnchange="pickerColumnchange"><view class="pbox" :class="{'pbox_hover':regionStr != '请选择'}"><view class="region-str" :style="{textAlign: inputAlign}">{{regionStr}}</view><text class="iconfont icon-you"></text></view></picker></view></view>
</template><script>import {getAddressList,} from '@/api/address/index.js'export default {data() {return {// 原数组oldRegion: [],// 处理后的数组region: [[],[],[]],// 选择省市区的下标IndexregionIndex: [0, 0, 0],// 省市区字符串regionStr: '请选择'};},props: {height: {type: [Number],default: 92},width: {type: [Number],default: 710},previnceId: {type: [Number],default: 11},cityId: {type: [Number],default: 1101},countyId: {type: [Number],default: 110101},isRevise: {type: [Boolean],default: false},inputAlign: {type: [String],default: 'right'},country: {type: [String],default: 'domestic'}},methods: {pickerChange(e) {this.regionIndex = e.detail.value;if (this.region[2].length > 0) {this.regionStr = this.region[2][this.regionIndex[2]].name;// 组件传值,返回所需格式this.$emit('region', {name: this.region[2][this.regionIndex[2]].name,code: this.region[2][this.regionIndex[2]].code});}},pickerColumnchange(e) {if (e.detail.column === 0) {// 选择了省,发起请求获取城市this.regionIndex = [e.detail.value, 0, 0];this.loadCities(this.region[0][e.detail.value].code);} else if (e.detail.column === 1) {// 选择了城市,发起请求获取县区this.regionIndex[1] = e.detail.value;this.regionIndex[2] = 0;this.loadCounties(this.region[1][e.detail.value].code);// this.regionIndex[1] = e.detail.value;// this.regionIndex[2] = 0; // 重置县区选择} else if (e.detail.column === 2) {this.regionIndex[2] = e.detail.value;}},loadCities(provinceCode) {getAddressList({parentCode: provinceCode}).then((response) => {const cityArr = response.data.map(item => ({name: item.name,code: item.code}));this.$set(this.region, 1, cityArr);if (cityArr.length > 0) {this.loadCounties(cityArr[0].code); // 默认加载第一个城市的县区}})},loadCounties(cityCode) {getAddressList({parentCode: cityCode}).then((response) => {const countyArr = response.data.map(item => ({name: item.name,code: item.code}));this.$set(this.region, 2, countyArr);})},getAddress() {getAddressList({parentCode: 0}).then((response) => {this.oldRegion = response.data;// 在 region[0] 数组的开头添加“请选择”选项this.region[0].push({name: '请选择',code: null // 或者使用一个特定的值,表示未选择});this.oldRegion.map((item, index) => {this.region[0].push({name: item.name,code: item.code});if (this.previnceId == item.code) {this.regionIndex[0] = index;if (item.code !== null) {this.loadCities(item.code); // 加载选中省的城市}}});})}},created() {// 初始加载省份this.getAddress();}}
</script><style lang="scss" scoped>.list {padding: 0 8rpx;box-sizing: border-box;display: flex;flex-direction: row;align-items: center;justify-content: space-between;position: relative;.picker {flex: 1;height: 92rpx;.pbox {width: 100%;height: 92rpx;display: flex;flex-direction: row;align-items: center;justify-content: space-between;color: #808080;.region-str {width: 100%;}.icon-you {font-size: 28rpx;}}.pbox_hover {color: #383838;}}.name {width: 168rpx;font-size: 32rpx;color: #383838;}.icon-you {font-size: 28rpx;color: #999999;}.input {flex: 1;height: 100%;line-height: 92rpx;color: #9080A1;}.textarea {flex: 1;height: 100%;color: #A9A9A9;}}
</style>

二、页面中使用

javascript"><template><view><Region @region="resgclick"></view>
</template><script setup>/** 引入 */import Region from '@/components/w-region.vue';// 起始地行政区划function resgclick(e) {/** 本人是需要区的名称和code,所以只返回了区的,若想全部返回请看(三) */form.value.qsd = e.name;form.value.qsdCode = e.code;}</script>

三、返回全部(省市区)名称和code

javascript">/** 修改w-region中的代码 */pickerChange(e) {this.regionIndex = e.detail.value;if (this.region[2].length > 0) {this.regionStr = this.region[2][this.regionIndex[2]].name;// 组件传值,返回所需格式this.$emit('region', {name: [this.region[0][this.regionIndex[0]].namethis.region[1][this.regionIndex[1]].namethis.region[2][this.regionIndex[2]].name],code: [this.region[0][this.regionIndex[0]].codethis.region[1][this.regionIndex[1]].codethis.region[2][this.regionIndex[2]].code]});}},

我也是拿其他 大佬 的进行修改的(只不过他的是本地数据,内容太大),所以进行了修改,若是遇到问题 欢迎讨论


http://www.ppmy.cn/news/1563710.html

相关文章

PHP智慧小区物业管理小程序

&#x1f31f;智慧小区物业管理小程序&#xff1a;重塑社区生活&#xff0c;开启便捷高效新篇章 &#x1f31f; 智慧小区物业管理小程序是一款基于PHPUniApp精心雕琢的智慧小区物业管理小程序&#xff0c;它犹如一股清新的科技之风&#xff0c;吹进了现代智慧小区的每一个角落…

安装 MySQL 数据库

安装 MySQL 数据库 下载地址: https://downloads.mysql.com/archives/community/ 解压 mysql-8.0.20-winx64.zip 到 MySQL 文件夹 中在 MySQL 目录 下 、新建一个 my.ini 文件 (MySQL的配置文件) [mysqld] basedirD:/Program Files/MySQL datadirD:/Program Files/MySQL/dat…

浅谈云计算13 | 网络虚拟化

网络虚拟化 一、网络虚拟化技术原理剖析1.1 网络虚拟化基础概念2.2 关键技术原理2.2.1 虚拟交换机原理2.2.2 虚拟机网络连接原理2.2.3 网络功能虚拟化&#xff08;NFV&#xff09;原理 三、网络虚拟化的应用场景3.1 数据中心中的应用3.1.1 资源隔离与多租户支持3.1.2 网络流量优…

Android Studio:开启高效 Android 应用开发之旅

Android Studio 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为 Android 应用开发设计。以下是关于它的一些详细介绍&#xff1a; 一、基本功能 代码编辑与智能提示 它具有代码自动补全功能。当你输入代码时&#xff0c;它会根据上下文智能地提供类…

八、系统托盘与配置面板

没有人会把你变得越来越好&#xff0c;时间和经历只是陪衬。 支撑你变得越来越好的&#xff0c;是你自己坚强的意志、修养、品行、以及不断的反思和经验。 人生最好的贵人&#xff0c;就是努力向上的自己。 一、系统托盘 1、资源文件夹 新建资源文件夹&#xff0c;我们需要把…

Hive集群的安装准备

Hive的安装与集群部署详细指南 一、环境与软件准备 在开始Hive的安装与集群部署之前&#xff0c;确保您准备好以下环境和软件&#xff1a; 虚拟机软件&#xff1a; VMware Workstation 17.5&#xff1a;用于创建和管理虚拟机&#xff0c;确保可以在其上安装Linux操作系统。 …

神经网络基础-网络优化方法

文章目录 1. 梯度下降算法1.1 什么是梯度下降算法1.2 模型训练中的三个基础概念1.3 三种梯度下降方式对比 2. 反向传播[BP算法]了解2.1 什么是反向传播2.2 python实现反向传播 3 . 梯度下降的优化方法3.1 梯度下降为什么需要优化3.2 梯度下降优化方法3.2.1 指数加权平均3.2.2 动…

C++实现设计模式---模板方法模式 (Template Method)

模板方法模式 (Template Method) 模板方法模式 是一种行为型设计模式&#xff0c;它定义了一个操作中的算法骨架&#xff0c;将某些步骤的实现延迟到子类。通过模板方法&#xff0c;子类可以在不改变算法结构的情况下重新定义算法的某些步骤。 意图 在一个方法中定义算法的骨…