Vue级联下拉框的设计与实现代码示例

作者:袖梨 2022-06-29

本篇文章小编给大家分享一下Vue级联下拉框的设计与实现代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

1.数据库设计

所有的相关数据皆可存在一张表中,这样数据就可以不受层级的限制。

表结构可以参考如下建表SQL:

CREATE TABLE `supplies_type` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category_type` varchar(64) NOT NULL COMMENT '类别种类:大类、中类、小类',
  `big_category_name` varchar(64) NOT NULL COMMENT '大类名称',
  `middle_category_name` varchar(64) DEFAULT NULL COMMENT '中类名称',
  `small_category_name` varchar(64) DEFAULT NULL COMMENT '小类名称',
  `parent_id` int(11) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `create_user_name` varchar(64) DEFAULT NULL COMMENT '创建人用户名',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除,1表示已删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

数据库截图如下图所示,注:本系统为了减少查询次数,故冗余了一些字段,读者可根据自己的需求调整。

核心设计在于parent_id,根据parent_id字段即可查询到子类,结果如下图所示:

2.前端页面

前端页面效果如下:

Html代码如下:

大类: 中类:


小类:

上面的item.smallCategoryName、item.smallCategoryName数据为后端从数据库中查询出来的数据(驼峰命名),后端只负责查询、并返回结果。

Vue中数据定义如下:

data() {
    return {
        big: '',
        bigTypes: null,
        middle: '',
        middleTypes: null,
        small: '',
        smallTypes: null
    }
},

在页面初始化时,自动获取大类列表:

created() {
		this.getSuppliesType(0)
},

页面中的getSuppliesType方法如下:

getSuppliesType(id) {
  this.listLoading = true
  const queryData = {
    parentId: id
  }
  //此处的调用后端接口按照自己的调用方式写即可
  //此处的getSuppliersType是项目中自己封装的util中的方法
  //如果请求方式是post,JSON.stringify(queryData)
  //如果请求方式是get,queryData
  getSuppliersType(JSON.stringify(queryData)).then(response => {
    console.log(response)
    console.log(response.data[0].categoryType)
    //根据type自动向三个下拉框赋值
    if (response.data[0].categoryType === 'BIG') {
      this.bigTypes = response.data
    } else if (response.data[0].categoryType === 'MIDDLE') {
      this.middleTypes = response.data
    } else {
      this.smallTypes = response.data
    }
    this.listLoading = false
  }).catch(function (error) {
    console.log(error)
    this.listLoading = false
  })
},

3.一个完整的demo

下面这个页面为完成代码,其中的数据为部分数据,后台接口获取使用JS来完成。




相关文章

精彩推荐