【uniapp+vue3+u-picker】获取中国省市区数据结构,省市区数据三级联动json文件完整版,已实现三级联动效果

news2024/12/24 9:49:07

前言:

这个功能的实现,中间耽误了几天,在大佬的帮助下终于实现效果,匿名感谢xx大佬

要实现的效果如下:
在这里插入图片描述
1、首先需要获取省市区的数据,不考虑后端返数据,自己使用json文件的话,需要获取到完整的中国省市区数据
有个很不错的github源码可供参考,Administrative-divisions-of-China中国行政区划数据,请戳这里进行跳转

我选择的是省市区三级联动数据
在这里插入图片描述
在这里插入图片描述

github有时很难加载出来,最下面附了完整的数据结构
2、 拿到josn数据后,在uniapp的static文件夹中新建provinceData文件夹,新建provinceData.json文件

没截全,数据太多了
在这里插入图片描述
3、然后引入到要使用的页面中

import provinceData from '@/static/provinceData/provinceData.json';

打印出来的效果:
在这里插入图片描述
4、然后开始给uviewplus的u-select组件绑数据,vue3是u-picke,
这里遇到个问题,只能说第一次开发,好多点都不懂,u-select只有2x版本才有,我的项目是vue3,需要3x版本,而3x版本里不叫u-select,是u-picker选择器

当我发现u-select使用后效果始终无法出来的时候,我在uni_modules/uview-plus/components文件夹下找是否有u-select,没找到之后我去hbuilderx插件市场搜uview-plus

在这里插入图片描述
点进去之后里面有官网文档的链接
在这里插入图片描述
打开之后才发现,我之前看的都是2x的版本,说多了都是泪
在这里插入图片描述
5、代码解析:

1、3x版是通过show属性控制显示与隐藏
2、columns中接收的是二维数组,需要展示几列,就有几个对应的二维数组
3、如何触发u-picker打开,这里没写,就是在你的点击事件里将data.uselectshow设置为true就行

<u-picker :show="data.uselectshow" ref="uPicker" :columns="provincelist" @confirm="uPickerconfirm" @change="uPickerchangeHandler" @cancel="uCancel"></u-picker>
	import {
    reactive, ref } from "vue";
	import {
    onReady, onLoad } from "@dcloudio/uni-app";
	import provinceData from '@/static/provinceData/provinceData.json';
	
	let provincelist = reactive([])
    let data = reactive({
   	
		uselectshow: false,//是否显示所在地	
		userInfo: {
   
			city: "",//所在地			
		},
	});
	onReady(() => {
   
		// 处理省市区数据结构
		dealPrinvceData(provinceData)
	})
	// 处理省市区数据结构,每一步都打印了,具体截图如下:
	function dealPrinvceData(data) {
   
		// 所在地初始化地区,默认第一个城市
				console.log(data,'data---1');
		provincelist[0] = Object.keys(data);	//data作为一个对象,取里面的key组成的数组
				console.log(provincelist[0],'2');
	    provincelist[1] = Object.keys(data[provincelist[0][0]]);	//data中第一项key对应的value作为一个对象,取对象中的key组成的数组
	    		 console.log(provincelist[1],'3');
	    provincelist[2] = data[provincelist[0][0]][provincelist[1][0]];	//data中第一项key对应的value中的key对应的value
	    		 console.log(provincelist[2],'4');
	}

data是一个大对象,省是key,对应的value是值
在这里插入图片描述
provincelist[0]取data的key,即获取到data的key组成的数组,provincelist[0]打印如下:
在这里插入图片描述
provincelist[0]其实是这样的数组,[0: “北京市”,1: “天津市”,2: “河北省”,3: “山西省”,4: “内蒙古自治区”,5: “辽宁省”,6: “吉林省”,7: “黑龙江省”,8: “上海市”,9: “江苏省”,10: “浙江省”,11: “安徽省”,12: “福建省”,13: “江西省”,14: “山东省”,15: “河南省”,16: “湖北省”,17: “湖南省”,18: “广东省”,19: “广西壮族自治区”,20: “海南省”,21: “重庆市”,22: “四川省”,23: “贵州省”,24: “云南省”,25: “西藏自治区”,26: "陕西省"27: “甘肃省”,28: “青海省”,29: “宁夏回族自治区”,30: “新疆维吾尔自治区”]

provincelist[1]取data中第一项key的value中的key,provincelist[0][0] 取的值是北京市,然后data[provincelist[0][0]]指的就是data[‘北京’],Object.keys(data[provincelist[0][0]]) 指的就是data中北京中的key,即市辖区

provincelist[1]打印如下:
在这里插入图片描述
provincelist[1]其实是这样的数组,[0:“市辖区”]

provincelist[2]取data中第一项key的value对应的value,即provincelist[0][0] 取的值就是北京市,[provincelist[1][0]取的值就是市辖区,data[provincelist[0][0]][provincelist[1][0]]即data[北京市市辖区]

打印如下:
在这里插入图片描述
provincelist[2]其实是这样的数组,[0: “东城区”,1: “西城区”,2: “朝阳区”,3: “丰台区”,4: “石景山区”,5: “海淀区”,6: “门头沟区”,7: “房山区”,8: “通州区”,9: “顺义区”,10: “昌平区”,11: “大兴区”,12: “怀柔区”,13: “平谷区”,14: “密云区”,15: “延庆区”
]
一开始有点懵,想明白了,其实就是处理数据结构的一个过程,将省市区处理成关联性的数据
打印provincelist,结构如下:
在这里插入图片描述
onready中只是处理的刚渲染时的效果,当列滚动的时候需要动态处理,即第一列滚动发生变化的时候,第二列和第三列都要改变,改变成第一列对应的市和区

	const uPickerchangeHandler = (e) => {
   
		const {
   
			columnIndex,
			value,
		} = e;
		if (columnIndex == 0) {
   
			provincelist[1] = Object.keys(provinceData[value[0]]);
			provincelist[2] = provinceData[value[0]][provincelist[1][0]];
		}
		if (columnIndex == 1) {
   
			provincelist[2] = provinceData[value[0]][value[1]];
		}
	
	};

1、打印value的格式如下,当滚动第一列的时候,第二列和第三列都没有变化,我们只取value[0],即拿的是第一列变动的值
在这里插入图片描述
Object.keys(provinceData[value[0]]) 翻译下就是获取以对应省为对象,对象中的key组成的数组
以截图的天津市,河北省,山西省举例, provincelist[1]打印的值分别如下:
在这里插入图片描述
拿到市的联动数据后,还需要拿区的联动数据 provincelist[2] = provinceData[value[0]][provincelist[1][0]]; 翻译下就是provinceData[xx省xx市],第一列滚动的时候,市和区拿的都是第一个市对应的数据

如果第二列滚动,即代表要选择不同的市,这个时候需要更改区的对应数据,value的第0项和第1项都是正确的,直接获取就行

	if (columnIndex == 1) {
   
			provincelist[2] = provinceData[value[0]][value[1]];
		}

最终实现效果:
在这里插入图片描述
完整josn数据:

{
   
	"北京市": {
   
		"市辖区": ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区",
			"密云区", "延庆区"
		]
	},
	"天津市": {
   
		"市辖区": ["和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "东丽区", "西青区", "津南区", "北辰区", "武清区", "宝坻区", "滨海新区", "宁河区",
			"静海区", "蓟州区"
		]
	},
	"河北省": {
   
		"石家庄市": ["长安区", "桥西区", "新华区", "井陉矿区", "裕华区", "藁城区", "鹿泉区", "栾城区", "井陉县", "正定县", "行唐县", "灵寿县", "高邑县", "深泽县",
			"赞皇县", "无极县", "平山县", "元氏县", "赵县", "石家庄高新技术产业开发区", "石家庄循环化工园区", "辛集市", "晋州市", "新乐市"
		],
		"唐山市": ["路南区", "路北区", "古冶区", "开平区", "丰南区", "丰润区", "曹妃甸区", "滦南县", "乐亭县", "迁西县", "玉田县", "河北唐山芦台经济开发区", "唐山市汉沽管理区",
			"唐山高新技术产业开发区", "河北唐山海港经济开发区", "遵化市", "迁安市", "滦州市"
		],
		"秦皇岛市": ["海港区", "山海关区", "北戴河区", "抚宁区", "青龙满族自治县", "昌黎县", "卢龙县", "秦皇岛市经济技术开发区", "北戴河新区"],
		"邯郸市": ["邯山区", "丛台区", "复兴区", "峰峰矿区", "肥乡区", "永年区", "临漳县", "成安县", "大名县", "涉县", "磁县", "邱县", "鸡泽县", "广平县", "馆陶县",
			"魏县", "曲周县", "邯郸经济技术开发区", "邯郸冀南新区", "武安市"
		],
		"邢台市": ["襄都区", "信都区", "任泽区", "南和区", "临城县", "内丘县", "柏乡县", "隆尧县", "宁晋县", "巨鹿县", "新河县", "广宗县", "平乡县", "威县", "清河县",
			"临西县", "河北邢台经济开发区", "南宫市", "沙河市"
		],
		"保定市": ["竞秀区", "莲池区", "满城区", "清苑区", "徐水区", "涞水县", "阜平县", "定兴县", "唐县", "高阳县", "容城县", "涞源县", "望都县", "安新县", "易县",
			"曲阳县", "蠡县", "顺平县", "博野县", "雄县", "保定高新技术产业开发区", "保定白沟新城", "涿州市", "定州市", "安国市", "高碑店市"
		],
		"张家口市": ["桥东区", "桥西区", "宣化区", "下花园区", "万全区", "崇礼区", "张北县", "康保县", "沽源县", "尚义县", "蔚县", "阳原县", "怀安县", "怀来县",
			"涿鹿县", "赤城县", "张家口经济开发区", "张家口市察北管理区", "张家口市塞北管理区"
		],
		"承德市": ["双桥区", "双滦区", "鹰手营子矿区", "承德县", "兴隆县", "滦平县", "隆化县", "丰宁满族自治县", "宽城满族自治县", "围场满族蒙古族自治县", "承德高新技术产业开发区",
			"平泉市"
		],
		"沧州市": ["新华区", "运河区", "沧县", "青县", "东光县", "海兴县", "盐山县", "肃宁县", "南皮县", "吴桥县", "献县", "孟村回族自治县", "河北沧州经济开发区",
			"沧州高新技术产业开发区", "沧州渤海新区", "泊头市", "任丘市", "黄骅市", "河间市"
		],
		"廊坊市": ["安次区", "广阳区", "固安县", "永清县", "香河县", "大城县", "文安县", "大厂回族自治县", "廊坊经济技术开发区", "霸州市", "三河市"],
		"衡水市": ["桃城区", "冀州区", "枣强县", "武邑县", "武强县", "饶阳县", "安平县", "故城县", "景县", "阜城县", "河北衡水高新技术产业开发区", "衡水滨湖新区", "深州市"]
	},
	"山西省": {
   
		"太原市": ["小店区", "迎泽区", "杏花岭区", "尖草坪区", "万柏林区", "晋源区", "清徐县", "阳曲县", "娄烦县", "山西转型综合改革示范区", "古交市"],
		"大同市": ["新荣区", "平城区", "云冈区", "云州区", "阳高县", "天镇县", "广灵县", "灵丘县", "浑源县", "左云县", "山西大同经济开发区"],
		"阳泉市": ["城区", "矿区", "郊区", "平定县", "盂县"],
		"长治市": ["潞州区", "上党区", "屯留区", "潞城区", "襄垣县", "平顺县", "黎城县", "壶关县", "长子县", "武乡县", "沁县", "沁源县"],
		"晋城市": ["城区", "沁水县", "阳城县", "陵川县", "泽州县", "高平市"],
		"朔州市": ["朔城区", "平鲁区", "山阴县", "应县", "右玉县", "山西朔州经济开发区", "怀仁市"],
		"晋中市": ["榆次区", "太谷区", "榆社县", "左权县", "和顺县", "昔阳县", "寿阳县", "祁县", "平遥县", "灵石县", "介休市"],
		"运城市": ["盐湖区", "临猗县", "万荣县", "闻喜县", "稷山县", "新绛县", "绛县", "垣曲县", "夏县", "平陆县", "芮城县", "永济市", "河津市"],
		"忻州市": ["忻府区", "定襄县", "五台县", "代县", "繁峙县", "宁武县", "静乐县", "神池县", "五寨县", "岢岚县", "河曲县", "保德县", "偏关县", "五台山风景名胜区",
			"原平市"
		],
		"临汾市": ["尧都区", "曲沃县", "翼城县", "襄汾县", "洪洞县", "古县", "安泽县", "浮山县", "吉县", "乡宁县", "大宁县", "隰县", "永和县", "蒲县", "汾西县",
			"侯马市", "霍州市"
		],
		"吕梁市": ["离石区", "文水县", "交城县", "兴县", "临县", "柳林县", "石楼县", "岚县", "方山县", "中阳县", "交口县", "孝义市", "汾阳市"]
	},
	"内蒙古自治区": {
   
		"呼和浩特市": ["新城区", "回民区", "玉泉区", "赛罕区", "土默特左旗", "托克托县", "和林格尔县", "清水河县", "武川县", "呼和浩特经济技术开发区"],
		"包头市": ["东河区", "昆都仑区", "青山区", "石拐区", "白云鄂博矿区", "九原区", "土默特右旗", "固阳县", "达尔罕茂明安联合旗", "包头稀土高新技术产业开发区"],
		"乌海市": ["海勃湾区", "海南区", "乌达区"],
		"赤峰市": ["红山区", "元宝山区", "松山区", "阿鲁科尔沁旗", "巴林左旗", "巴林右旗", "林西县", "克什克腾旗", "翁牛特旗", "喀喇沁旗", "宁城县", "敖汉旗"],
		"通辽市": ["科尔沁区", "科尔沁左翼中旗", "科尔沁左翼后旗", "开鲁县", "库伦旗", "奈曼旗", "扎鲁特旗", "通辽经济技术开发区", "霍林郭勒市"],
		"鄂尔多斯市": ["东胜区", "康巴什区", "达拉特旗", "准格尔旗", "鄂托克前旗", "鄂托克旗", "杭锦旗", "乌审旗", "伊金霍洛旗"],
		"呼伦贝尔市": ["海拉尔区", "扎赉诺尔区", "阿荣旗", "莫力达瓦达斡尔族自治旗", "鄂伦春自治旗", "鄂温克族自治旗", "陈巴尔虎旗", "新巴尔虎左旗", "新巴尔虎右旗", "满洲里市",
			"牙克石市", "扎兰屯市", "额尔古纳市", "根河市"
		],
		"巴彦淖尔市": ["临河区", "五原县", "磴口县", "乌拉特前旗", "乌拉特中旗", "乌拉特后旗", "杭锦后旗"],
		"乌兰察布市": ["集宁区", "卓资县", "化德县", "商都县", "兴和县", "凉城县", "察哈尔右翼前旗", "察哈尔右翼中旗", "察哈尔右翼后旗", "四子王旗", "丰镇市"],
		"兴安盟": ["乌兰浩特市", "阿尔山市", "科尔沁右翼前旗", "科尔沁右翼中旗", "扎赉特旗", "突泉县"],
		"锡林郭勒盟": ["二连浩特市", "锡林浩特市", "阿巴嘎旗", "苏尼特左旗", "苏尼特右旗", "东乌珠穆沁旗", "西乌珠穆沁旗", "太仆寺旗", "镶黄旗", "正镶白旗", "正蓝旗", "多伦县",
			"乌拉盖管理区管委会"
		],
		"阿拉善盟": ["阿拉善左旗", "阿拉善右旗", "额济纳旗", "内蒙古阿拉善高新技术产业开发区"]
	},
	"辽宁省": {
   
		"沈阳市": ["和平区", "沈河区", "大东区", "皇姑区", "铁西区", "苏家屯区", "浑南区", "沈北新区", "于洪区", "辽中区", "康平县", "法库县", "新民市"],
		"大连市": ["中山区", "西岗区", "沙河口区", "甘井子区", 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/133021990 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

few shot目标检测survey paper笔记(迁移学习)

paper: Few-Shot Object Detection: A Comprehensive Survey (CVPR2021) meta learning需要复杂的情景训练&#xff0c;而迁移学习仅需在一个single-branch结构上做两步训练。 常用的结构是Faster R-CNN&#xff0c;下面是Faster R-CNN的结构图。 RPN的修改 当样本数量很少时…

Vue的进阶使用--模板语法应用

目录 前言 一. Vue的基础语法 1.插值 1.1文本插值 1.2HTML插值 1.3属性插值 1.4Vue演示三元条件运算 2 指令 2.1if&&else指令&#xff08;v-if/v-else-if/v-else&#xff09; 2.2 v-for 指令 2.3 v-on指令(动态参数) 2.4知识点补充之v-if与v-show的区别 3.过…

著名书法家傅成洪在香港第八届“一带一路”高峰论坛上展示艺术与合作的融合

香港第八届“一带一路”高峰论坛于9月13日至14日在香港隆重举行&#xff0c;吸引了来自海内外的6000多名嘉宾&#xff0c;共同回顾“一带一路”倡议的历程&#xff0c;并展望未来的投资和商贸机遇。这一庆祝活动恰逢“一带一路”倡议的10周年&#xff0c;主题定为“携手十载 共…

[Python进阶] Pyinstaller打包模式

5.3 Pyinstaller打包模式 Pyinstaller将Python源码打包成程序有2种打包的方式&#xff1a; 单文件夹模式&#xff1a;指打包后将所有的程序文件放在一个文件夹内。 单文件模式&#xff1a;打包后只有一个可执行文件&#xff0c;全部的依赖文件都已经被打包进去了。 5.3.1 单文…

Linux 信号相关

int kill(pid_t pid, int sig); -功能&#xff1a;给某个进程pid 发送某个信号 参数sig可以使用宏值或者和它对应的编号 参数pid&#xff1a; >0 &#xff1b;将信号发给指定的进程 0&#xff1b;将信号发送给当前的进程组 -1&#xff1b;发送给每一个有权限接受这个信号的…

Postman应用——Variable变量设置(Global、Environment和Collection)

文章目录 Global变量设置Environment变量设置Collection变量设置Global、Environment环境变量预览 Global、Environment和Collection变量使用&#xff0c;点击查看。 Global变量设置 全局变量设置&#xff0c;作用域是所有Collection、Folder和Request&#xff0c;全局变量只有…

混淆矩阵和数据不平衡 (1/3)

一、说明 如果数据集数据不平恒&#xff0c;如何评估分类器的效果&#xff1f;如果分类器不好&#xff0c;如何改进分类器&#xff1f;本篇将讲述不平衡数据下&#xff0c;混淆矩阵的应用。 二、混淆矩阵的基本概念 2.1 连续数据分布 LET将数据视为连续的&#xff0c;分类的或有…

阿里云服务器价格更新,轻量应用服务器108元,云服务器182.04元起

阿里云服务器价格更新了&#xff0c;不同时期阿里云服务器的租用价格不同&#xff0c;目前阿里云在官网活动中新增加了一款经济型e实例规格的云服务器&#xff0c;现在购买阿里云轻量应用服务器最低为108元&#xff0c;购买云服务器最低为182.04元&#xff0c;换算到每天只要0.…

零基础学前端(四)3. 重点讲解 CSS:实战补全百度网站首页

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码&#xff0c;以身体感悟带动头脑去理解新知识 3. 初学者切忌&#xff0c;不要眼花缭乱&#xff0c;不要四处找其它文档&#xff0c;要坚定一个教授者的方式&#xff0c;将其学通透&#xff…

前端学习路线,带你入门程序猿

相信很多想学前端的小伙伴是非常迷茫的 前端知识体系很多&#xff0c;不知从何学起 而且框架也有不少&#xff0c;不知道该如何下手 很多学习前端的小伙伴都没有一个很好的学习路线图&#xff0c;简直可以说是看见啥学啥 而且自己在学习的时候非常吃力&#xff0c;感觉总是学不…

SQLite 学习笔记1 - 简介、下载、安装

SQLite 简介 SQLite是一款非常轻量级的关系数据库系统&#xff0c;支持多数SQL92标准。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中&#xff0c;并捆绑在人们每天使用的无数其他应用程序中。 SQLite 是一个由C语音开发的嵌入式库&#xff…

DataGrip汉化

一、关闭DataGrip&#xff0c;下载新的jar包 链接&#xff1a;https://pan.baidu.com/s/1gTHpyMuIME_n8qC9KYbOzA 提取码&#xff1a;ute3 二、把下载的jar包放在lib文件里&#xff0c;把原来自带的jar替换掉 三、打开datagrip

nginx代理故障总结

一、故障现象 今天公司的某个系统文件下载功能失败&#xff0c;报错network error&#xff0c;其他功能正常。 二、故障定位 首先我们检查了公司的网络情况&#xff0c;包括网络路由、防火墙策略、终端安全产品等&#xff0c;均未发现异常。 尝试访问http://X.X.X.X:7002端口&…

uniapp——实现二维码生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.根据接口返…

元数据管理平台Datahub0.10.5版本安装部署与导入各种元数据手册

官网文档连接 DataHub Quickstart Guide | DataHub (datahubproject.io) 本文所选择的Python的版本为3.8.16&#xff0c;Docker版本为20.10.0&#xff0c;Datahub为0.10.5版本 python必须为3.7以上的版本。0.10.5不支持以下的版本 如果要使用web上的 添加数据源 直接调用的…

开源分布式存储系统(HDFS、Ceph)架构分析

文章目录 中间控制节点架构-HDFSNameNode节点分析DataNode节点分析SecondNameNode节点分析Client分析 完全无中心架构-CephCeph Monitor分析Ceph OSD分析Ceph Manager分析Ceph Clients分析 小结HDFS优点缺点 Ceph优点缺点 参考 中间控制节点架构-HDFS 以HDFS&#xff08; Hado…

五、点击切换、滚动切换、键盘切换

简介 通过事件改变当前展示的信息组件&#xff0c;交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件&#xff1a;App.vue、public 一、鼠标点击上下箭头切换 <template><div class"a…

Learn Prompt-Prompt 高级技巧:Agent的颠覆性影响

OpenAI联合创始人Andrej Karpathy在一个开发者活动上发表讲话&#xff0c;谈及了他和OpenAI对AI Agents的看法。他将过去开发 AI Agents 的困难与现在依靠新技术工具而带来的新机会进行了对比。Andrej Karpathy 认为普通人、创业者和极客在构建 AI Agents 方面相比 OpenAI 这样…

还有一天活动就开始我定好闹钟准时上线

&#xff08;整理衣服&#xff09;&#xff08;大步流星走上台&#xff09;&#xff08;拿起麦克风&#xff09;&#xff08;激情发言&#xff09;请大家&#xff08;热泪盈眶&#xff09;&#xff08;哽咽&#xff09;关注&#xff08;流泪&#xff09;&#xff08;擦眼泪&…