Treeselect树形组件以及-其他树形组件的使用

本文介绍了如何在Vue项目中使用vue-treeselect插件来创建树形选择组件。首先通过npm安装插件并引入到main.js中,然后在页面中使用treeselect组件,结合数据处理方法实现动态加载树形数据。同时,还展示了如何用el-cascader组件实现类似功能,并提供了相关配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载插件

npm install @riophae/vue-treeselect --save

2.main.js页面中引入,声明组件

import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
Vue.component("Treeselect", Treeselect);

import { handleTree } from "@/utils/ruoyi";//该文件可从若依下载
Vue.prototype.handleTree = handleTree

3-1.页面使用

<el-form-item label="商铺类型" prop="shopTypeId">
 <!-- <el-tree :data="classList" :props="props" @node-click="handleNodeClick"></el-tree> 看element文档 列表展示用这个-->
<!-- 表单展示用treeselect -->
   <treeselect
      v-model="personalForm.shopTypeId"
      :options="classList"
      :normalizer="normalizer"
      :show-count="true"
      noOptionsText="暂无数据"
      placeholder="请选择商铺类型"
    />
</el-form-item>

常见问题:出现No options available时,添加noOptionsText=“暂无数据”
在这里插入图片描述

3-2.data字段

data(){
	return{
		//商铺类型
		classList: [],
		personalForm:{
		 	shopTypeId: null, //商家类型id,定义为null/undefined输入框不会出现---unknown
		}
	}
}

3-3.methods方法

/** 转换树形数据结构(商铺类型) */
normalizer(node) {
  if (node.cereShopType && !node.cereShopType.length) {
    delete node.cereShopType;
  }
  return {
    id: node.typeId,
    label: node.typeName,
    children: node.cereShopType
  };
},
//商铺类型
getClassList() {
  let that = this;
  let params = {
    url: "/api/check/getShopType",
    method: "get",
  };
  this.sendReq(params, (res) => {
    if (res.code === "") {
      //this.classList = res.data;//当不需要给树形添加-顶级站点-的时候-直接取data。
      const menu = { typeId: 0, name: '顶级站点'};
      menu.children = this.handleTree(res.data, "typeId");//给树形结构添加id为0的顶级站点,handleTree为引入ruoyi的文件
      this.classList .push(menu);
    } else {
      that.$message({
        message: res.message,
        type: "error",
      });
    }
  });
},

(备注:给自己看的参考突突到家-入驻-商铺类型)其他树形组件:
vue-treeselect的常见bug:(unknown)
找到node-modules/@riophae/vue-treeselect/dist/vue-treeselect.cjs.js该文件下的(unknown),然后替换为(请选择)
在这里插入图片描述
在这里插入图片描述

二、el-cascader组件
 <el-cascader v-model="tableFrom.parent_site_id" :options="treeArr" :props="Props" clearable @change="getList(1)" /> 
data中定义value、lable、children的键值,如果key和value相同就不用重新定义了
siteProps: {
  	value: "id",
	label: "name",
 	children: "children",
 	emitPath: false,
 	multiple: true,//多选-1,2,3级都能选,去掉,只能选第三级
 	checkStrictly:true,//选中父级后,是否勾选子级;false勾选,true不勾选
},

样式如下:
在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值