springBoot加Mp加vue实现三级联动

首先创建一个springboot工程,导入相关依赖,导入element-ui组件

设置值发生修改会触发的事件,@change,方法在vue对象中,

在组件el-option中通过v-for去循环遍历

item 是循环的变量 provinceList是通过异步方式请求获取的数据

code和name是对象中的属性值,显示的是name,值为code

选中一个该下拉框下的值,这个值他会赋给el-select中的模型对象name,

这个name值就是该省份的code值,,然后将name作为参数传入值方式修改时会触发的方法中,方法通过传入过去的code去作为条件查询


<div id="app">
    <template>
        <el-select v-model="name"  placeholder="请选择省份" @change="getCityList(name)">
            <el-option
                    v-for="item in provinceList"
                    :key="item.code"
                    :label="item.name"
                    :value="item.code">
            </el-option>
        </el-select>
    </template>
    <template>
        <el-select v-model="cityName"  placeholder="请选择城市" @change="getTownList(cityName)">
            <el-option
                    v-for="item in cityList"
                    :key="item.code"
                    :label="item.cityName"
                    :value="item.code">
            </el-option>
        </el-select>
    </template>
    <template>
        <el-select v-model="townName" placeholder="请选择区县">
            <el-option
                    v-for="item in townList"
                    :key="item.code"
                    :label="item.townName"
                    :value="item.code">
            </el-option>
        </el-select>
    </template>
</div>

页面效果:
在这里插入图片描述
然后在后面导入js,


<script src="../statics/axios/axios.min.js"></script>
<script src="../statics/vue/vue.js"></script>
<script src="../statics/element-ui/index.js"></script>
<script src="../statics/api/request.js"></script>

创建vue对象,created() 在钩子函数中,也就是页面加载时,发送了一个异步请求,去拿到所有的省份数据,通过回调函数赋给省份数据的模型对象,页面通过模型对象去循环遍历’

然后methods中创建两个方法,getProvinceList()是修改省份去查询对应的城市数据

getTownList() 是修改城市去查询对应的区县数据

然后就通过回调函数赋给对象模型,页面去循环遍历显示

在更换省份时,查询城市数据之前,将城市和区县的下拉框的内容清空


<script>
   new Vue({
       el:"#app",
       data() {
           return{
               //省份数据
               provinceList:[],
               //城市数据
               cityList:[],
               //区县数据
               townList:[],
               //省份下拉框模型对象
               name:'',
               //城市下拉框模型对象
               cityName:'',
               //区县下拉框模型对象
               townName:''
           }
       },
       created(){
        $axios({
             url:"/province/provinceList",
             method:"get"
         }).then(res=>{
           this.provinceList=res;
        });

       },
       methods:{
          getCityList(code){
              //清空市级和区县的下拉框中内容
              this.cityName='';
              this.townName='';
              //接收省级的code作为条件去查,拿到数据,将数据给城市变量
              $axios({
                  url:"/province/cityList?code="+code,
                  method: 'get',
              }).then(res=>{
                  this.cityList=res;
              })
          },
          getTownList(code){
              //接收城市的code作为条件去查,拿到数据,将数据给区县变量
              $axios({
                  url:"/province/townList?code="+code,
                  method: 'get',
              }).then(res=>{
                  this.townList=res;
              })
          }
       }
   })
</script>

后端

provinceList是页面加载时查询所有的省份数据,将数据返回给前端

cityList以省份的code作为条件查询城市表,有多个城市所以用list接收,然后返回

townList就是以城市的code作为条件查询区县表,与查询城市一样,查询后返回

 @GetMapping("/provinceList")
    @ResponseBody
    public List<Province> provinceList(){
       return provinceService.list();
    }
 
    @GetMapping("/cityList")
    @ResponseBody
    public List<City> cityList(String code){
        LambdaQueryWrapper<City> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(code!=null,City::getProvincecode,code);
        return cityService.list(queryWrapper);
    }
    @GetMapping("/townList")
    @ResponseBody
    public List<Town> townList(String code){
        LambdaQueryWrapper<Town> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(code!=null,Town::getCitycode,code);
        return townService.list(queryWrapper);
    }

因为我是通过maven去搭建的springboot项目,所以我资源目录都是加载不到的,要通过一个配置类进行开启,如果加载得到就不需要加这个配置类


@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
    }
}

项目结构
在这里插入图片描述

yml配置文件


#配置端口
server:
 port: 8080
#配置数据源
spring:
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/sjldzy?characterEncoding=GBK&serverTimezone=UTC
   username: root
   password: root
#    模版配置
 thymeleaf:
   prefix: classpath:/templates/
   suffix: .html
mybatis-plus:
#  开启运行日期
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#开启实体类别名扫描
 type-aliases-package: com.hk.entity
# 给表加入前缀
 global-config:
   db-config:
     table-prefix: t_address_

数据库:因为数据库有前缀,所以在mybatisplus中配置一下
在这里插入图片描述

省份表:

CREATE TABLE `t_address_province` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `code` char(6) NOT NULL COMMENT '省份编码',
  `name` varchar(40) NOT NULL COMMENT '省份名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COMMENT='省份信息表';

城市表:

CREATE TABLE `t_address_city` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `code` char(6) NOT NULL COMMENT '城市编码',
  `name` varchar(40) NOT NULL COMMENT '城市名称',
  `provincecode` char(6) NOT NULL COMMENT '所属省份编码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=346 DEFAULT CHARSET=utf8 COMMENT='城市信息表';

区县表:

CREATE TABLE `t_address_town` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `code` char(6) NOT NULL COMMENT '区县编码',
  `name` varchar(40) NOT NULL COMMENT '区县名称',
  `citycode` char(6) NOT NULL COMMENT '所属城市编码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3145 DEFAULT CHARSET=utf8 COMMENT='区县信息表';

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值