最终效果图

官方的"省市区选择器"mode="region"里的数据是定死的由微信提供,不能做更改,好在同是picker组件mode=“multiSelector"时提供了自定义的"多列选择器”:
数据结构大致如下:

以下为完整代码:

vue 代码

wxml 部分

<picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}" range-key="name" catchtap="save">{{multiArray[0][multiIndex[0]].name}}({{multiArray[0][multiIndex[0]].id}}){{multiArray[1].length > 0 ?("," + multiArray[1][multiIndex[1]].name + "(" + multiArray[1][multiIndex[1]].id + ")"):""}}{{multiArray[2].length > 0 ?("," + multiArray[2][multiIndex[2]].name + "(" + multiArray[2][multiIndex[2]].id + ")"):""}}
</picker>

js 部分

Page({data: {multiArray: [[{id: -1,name: "请选择省"}],[{id: -1,name: "市"}],[{id: -1,name: "区"}]],multiIndex: [0, 0, 0]},getData() {wx.request({url: 'http://localhost:8081/chinas/getRegions',method: 'GET',success: res => {if (res.data.data) {var temp = res.data.data;this.setData({provinces: temp,multiArray: [temp, temp[0].cityList, temp[0].cityList[0].areaList],multiIndex: [0, 0, 0]})}}})},save() {this.getData()},//点击确定bindMultiPickerChange: function (e) {this.setData({multiIndex: e.detail.value})},//滑动bindMultiPickerColumnChange: function (e) {var data = {multiArray: this.data.multiArray,multiIndex: this.data.multiIndex};//更新滑动的第几列e.detail.column的数组下标值e.detail.valuedata.multiIndex[e.detail.column] = e.detail.value;//如果更新的是第一列“省”,第二列“市”和第三列“区”的数组下标置为0if (e.detail.column == 0) {data.multiIndex = [e.detail.value, 0, 0];} else if (e.detail.column == 1) {//如果更新的是第二列“市”,第一列“省”的下标不变,第三列“区”的数组下标置为0data.multiIndex = [data.multiIndex[0], e.detail.value, 0];} else if (e.detail.column == 2) {//如果更新的是第三列“区”,第一列“省”和第二列“市”的值均不变。data.multiIndex = [data.multiIndex[0], data.multiIndex[1], e.detail.value];}var temp = this.data.provinces;data.multiArray[0] = temp;if ((temp[data.multiIndex[0]].cityList).length > 0) {//如果第二列“市”的个数大于0,通过multiIndex变更multiArray[1]的值data.multiArray[1] = temp[data.multiIndex[0]].cityList;var areaArr = (temp[data.multiIndex[0]].cityList[data.multiIndex[1]]).areaList;//如果第三列“区”的个数大于0,通过multiIndex变更multiArray[2]的值;否则赋值为空数组data.multiArray[2] = areaArr.length > 0 ? areaArr : [];} else {//如果第二列“市”的个数不大于0,那么第二列“市”和第三列“区”都赋值为空数组data.multiArray[1] = [];data.multiArray[2] = [];}//setData更新数据this.setData(data);}
})

JAVA 代码

jar 包

<!-- 依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.35</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.0</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.1</version></dependency>

entity 实体类

package com.hn.yuan.city.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.util.List;/*** <p>** </p>** @author XIAOCAO*/
@Data
@Accessors(chain = true)
public class Chinas implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 区域代码*/private Long code;/*** 名称*/private String name;/*** Pid*/private Long pid;/*** 级别1省、2市、3县区*/private String level;/**  城市*/@TableField(exist = false)private List<Chinas> cityList;/**   县区*/@TableField(exist = false)private List<Chinas> areaList;@TableField(exist = false)private List<Chinas> children;}

controller _ 前端控制器_

package com.hn.yuan.city.controller;import com.hn.yuan.city.common.ResultMsg;
import com.hn.yuan.city.entity.Chinas;
import com.hn.yuan.city.service.ChinasService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** <p>*  前端控制器* </p>** @author XIAOCAO* */
@RestController
@RequestMapping("/chinas")
@CrossOrigin
public class ChinasController{@Autowiredprivate ChinasService chinasService;@GetMapping("/getRegions")public ResultMsg getRegions(){List<Chinas> jsonObject=chinasService.getRegions();return new ResultMsg(200,jsonObject,"查询成功");}}

ChinasService _服务类 _

package com.hn.yuan.city.service;import com.hn.yuan.city.entity.Chinas;
import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** <p>*  服务类* </p>* @author XIAOCAO* */
public interface ChinasService extends IService<Chinas> {public List<Chinas> getRegions();
}

ChinasServiceImpl 服务类实现类

package com.hn.yuan.city.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hn.yuan.city.entity.Chinas;
import com.hn.yuan.city.mapper.ChinasMapper;
import com.hn.yuan.city.service.ChinasService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;/*** <p>* 服务实现类* </p>** @author XIAOCAO* */
@Service
public class ChinasServiceImpl extends ServiceImpl<ChinasMapper, Chinas> implements ChinasService {@Autowiredprivate ChinasMapper chinasMapper;/**微信小程序 省市区对接*/@Overridepublic List<Chinas> getRegions() {// 全部省数据List<Chinas> chinas = chinasMapper.selectList(new QueryWrapper<Chinas>().eq("pid", 0L).eq("level", "1"));List<Long> pid = new ArrayList<>();chinas.forEach(item -> {pid.add(item.getCode());});//全部市数据List<Chinas> json1 = chinasMapper.selectList(new QueryWrapper<Chinas>().eq("level", "2").in("pid", pid));Map<Long,List<Chinas>> cdv=json1.stream().collect(Collectors.groupingBy(Chinas::getPid));chinas.stream().forEach(a ->a.setCityList(cdv.get(a.getCode())));List<Long> pid1=new ArrayList<>();json1.forEach(item ->{pid1.add(item.getCode());});//全部县 区数据List<Chinas> json2=chinasMapper.selectList(new QueryWrapper<Chinas>().eq("level","3").in("pid",pid1));Map<Long,List<Chinas>> cdv2=json2.stream().collect(Collectors.groupingBy(Chinas::getPid));chinas.stream().filter(a -> a.getCityList() != null).forEach(a -> a.getCityList().stream().forEach(i -> i.setAreaList(cdv2.get(i.getCode()))));return chinas;}}

注意:controller、service、mapper、entity层通过mybatis-plus自动生成的;回填操作根据前端code码查询即可,不再敖述。

Mysql数据表数据

百度网盘链接:https://pan.baidu.com/s/1fBIdWbBz_8bfjYpDRjR2rg
提取码:1101


各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考


实战模式-微信小程序组件实现省市区三级联动
实战模式-Vue+Java后台实现省市区三级联动
爬虫java模式-拉取省市区数据

实战演练-java+微信小程序实现省市区三级联动相关推荐

  1. 微信小程序的省市区三级地址mysql_微信小程序picker实现的省市区三级联动

    微信小程序的省市区三级联动需要使用到的是Picker多列选择器,参考文档:https://www.w3cschool.cn/weix..., 案例中用到的省市区的json文件在文后发出出来. 废话不多 ...

  2. php地址选择插件,微信小程序中关于三级联动地址选择器的实例分享

    本文介绍了微信小程序三级联动地址选择器的实例代码,分享给大家,有需要的可以一起了解一下 在一些电商类的小程序中,地址选择这个功能一般是必备的,一般的收货信息都需要有一个能选择省市县的控件,当然也有些人 ...

  3. 微信小程序的省市区三级地址mysql_微信小程序 实现三级联动-省市区

    序:项目中需要用到三级联动,自己试着写了下,也查了一些资料,现在把这个记录一下,里面地区数据,可根据个人需要做一些更改,我比较懒就不改了. wxml {{province}} {{city}} {{c ...

  4. 支付宝小程序JS省市区三级联动

    1.citysJSON.js       //地区js文件 var citys = [{"name": "北京市","subList": [ ...

  5. 基于java微信小程序的校园二手商城设计与实现

    基于java微信小程序的二手商城设计与实现 首先介绍一下SpringSecurity安全登陆框架 微信小程序 我用的是mysql数据库 这是我小程序的用例图 系统总体功能架构图 系统功能模块设计 数据 ...

  6. 牛逼的uniapp+Java微信小程序商城来了

    牛逼的uniapp+Java微信小程序商城来了 减少重复造轮子,开源微信小程序商城(前后端开源:uniapp+Java),秒杀.优惠券.多商户.直播卖货.分销等功能.快速搭建一个属于自己的微信小程序商 ...

  7. 微信小程序点单左右联动的效果实现

    微信小程序点单左右联动的效果实现 目标效果 原理解析: 点击左边标签会跳到右边相应位置:点击改变rightCur值,转跳相应位置 滑动右边,左边标签会跳到相应的位置:监听并且设置每个右边元素的top和 ...

  8. 实现微信小程序picker 省市区 自定义数据 支持三级联动

    再使用微信小程序时 发现 当 mode="region"   时数据 选择的省市区的数据不支持后台返回的数据 以下实现后台返回数据操作 先设置HTML name 字段名字要替换掉 ...

  9. 撸个微信小程序的省市区选择器

    起因 微信小程序虽然已经有现成的封装好的省市区选择器给开发者使用,然鹅不幸的是,微信地址库的数据和公司用的地址库数据很难一一对上,那就只能撸起袖子自己写个组件了. 最终效果 思维导图 主要代码 组件 ...

最新文章

  1. 软件测试学java,软件测试学习Java的内存模型
  2. hdu3715 二分+2sat+建图
  3. python实现AES算法
  4. 线段树练习——区间合并
  5. mysql 锁怎么使用_Mysql锁一般使用
  6. .NET Core开发实战(第12课:配置变更监听)--学习笔记
  7. 深入Java集合学习系列:LinkedHashSet的实现原理
  8. vue 保存时清空iuput_vue清空input file
  9. 敏捷开发系列学习总结(7)——敏捷开发的10大指导原则
  10. Java 技术是什么?
  11. ASP.NET---操作数据库增删改查
  12. 世界各国英文简写一览表
  13. JAVA远程读取服务器文件
  14. 【个税】2020年个人所得税计算规则
  15. 取消百度SiteApp转码
  16. 使用phpStudy显示3306端口被占用,该怎么办?
  17. java小易——Servlet轻量级服务
  18. 嵌入式linux学习路径--新手入门篇
  19. OpenLayers应用一(转自http://www.cnblogs.com/lzlynn/)
  20. mysql list dbs_关于mysql_list_dbs()函数的10篇文章推荐

热门文章

  1. PMP——第4章 项目整合管理
  2. 计算机论文封皮,毕业论文封面及格式规定
  3. sdk没有登录什么意思_SDK登录与支付流程图文教程
  4. 如何用DirectShow替代付费的摄像头SDK
  5. java递归堆栈溢出_【java】递归次数过多导致堆栈溢出
  6. 【数据库基础】01_数据库概述与MySQL语法基础
  7. 炼数成金数据分析课程---7、数据分析简介
  8. 虚拟机CentOS6.5修改静态IP(NAT模式)+报错:Bringing up interface eth0:  Error: Unknown connection
  9. Maven导入依赖时显示Duplicated tag: ‘dependencies‘ (position: START_TAG seen ...</properties>\r\n\r\n <depen
  10. 关于CodeBlocks下载了带mingw版本的依旧无法编译运行的解决方案