vue-treeselect车辆树

使用vue-treeselect组件实现一个车辆树选择车牌号的功能

效果图

在这里插入图片描述

组件引入

npm i @riophae/vue-treeselect --save

import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'

<treeselect
    v-model="modelValue"
    class="tree-select-dept"
    :disabled="disabled"
    :limit="1"
    :limit-text="limitTextFun"
    :multiple="multiple"
    no-children-text="暂无数据"
    no-options-text="暂无数据"
    :options="options"
    :placeholder="placeholder"
    :show-count="true"
    :style="customStyle"
    @deselect="delSelect"
    @select="onSelect"
  />

接口数据

在这里插入图片描述
这是后端返回的树型结构,children里面又有嵌套,核心的字段是id,label,children,每一个组织需要两部分数据,一是它下面的车牌号,二是children下级组织中的车牌号,现在进行解析数据,vue-treeselect最简单的结构如下,然后将后端给到的数据解析成如下结构即可

options: [
        {
          id: 'A',
          name: 'a',
          children: [
            {
              id: 'AA',
              name: 'aa',
              isDisabled: true
            },
            {
              id: 'AB',
              name: 'ab',
              // 默认展开
              isDefaultExpanded: true,
              children: [
                {
                  id: 'ABA',
                  name: 'aba'
                },
                {
                  id: 'ABB',
                  name: 'abb',
                  isNew: true
                }
              ]
            }
          ]
        },
        {
          id: 'b',
          name: 'b',
          children: [
            {
              id: 'ba',
              name: 'ba'
            },
            {
              id: 'bb',
              name: 'bb'
            }
          ]
        },
        {
          id: 'c',
          name: 'c'
        }
      ]

解析树型结构

requestData() {
      fetchTreeVehicleAll().then((res) => {
        this.options = res.data
        this.parseTreeData(res.data)
        console.log("deptList:", this.deptList)
      })
    },

    parseTreeData(data) {
      data.forEach(item => {
		// 组织下的车牌号
        if (item.vehicles) {
          item.vehicles.forEach(v => {
            v.type = "vehicle"
            item.children.push({
              id: v.id,
              label: v.vehicleNo,
              vehicleNo: v.vehicleNo,
              type: 'vehicle'
            })
          })
		 // 获取所有的组织和车牌号
          item.vehicles.length && this.deptList.push({
            deptId: item.id,
            label: item.label,
            vehicles: item.vehicles.map(v => {
              return {
                id: v.id,
                vehicleNo: v.vehicleNo,
              }
            })
          })
        }
		// 当前组织下的children中的数据进行递归处理
        if (item.children) {
          item.type = "dept"
          this.parseTreeData(item.children)
        }
      })
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值