Vue Element + vue-treeselect 树形选择列表

Vue-Treeselect 中文网  

本示例以 Vue Element Admin 项目为基础,介绍 Vue Treeselect 控件


npm 安装 vue-treeselect

npm install --save @riophae/vue-treeselect

【注意:vue-treeselect 好像不支持 :props=""】

1、/src/views/demo/vue-tree-select.vue

<template>
  <div class="app-container">
    <treeselect
      v-model="value"
      :multiple="false"
      placeholder="Select your favourite(s)..."
      :options="list"
      :default-expand-level="1"
      no-options-text="暂无数据"
      @select="treeOnSelect"
    />
  </div>
</template>

<script>
import { getTreeSelects } from "@/api/tree";
import { jsonTree } from "@/utils/tree";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";

export default {
  components: { Treeselect },
  data() {
    return {
      value: null,
      // value: [9],     // 设置选中的值
      // value: ['b'], // 设置选中的值
      list: [],
      listQuery: {
        resource_code: 1,
        page: 1,
        per_page: 20
      },
      options: [
        {
          id: "a",
          label: "a",
          children: [
            { id: "aa", label: "aa" },
            { id: "ab", label: "ab" }
          ]
        },
        { id: "b", label: "b" },
        { id: "c", label: "c" }
      ]
    };
  },
  created() {
    this.getList();
  },
  methods: {
    async getList() {
      getTreeSelects(this.listQuery)
        .then(res => {
          this.list = jsonTree(res.data.items, {
            id: "id",
            pid: "pid",
            children: "children"
          });
          console.log(JSON.stringify(this.list));
          console.log(typeof this.list);
          console.log(this.list.length);
          if (this.list !== undefined && this.list.length > 0) {
            this.value = [];
            this.value.push(res.data.items[6].id);
          }
        })
        .catch(err => {
          console.error(err);
          console.log("修改出错了");
        });
    },
    treeOnSelect(val) {
      // treeselect 选择事件
      console.log(val.id)
    }
  }
};
</script>

2、/src/utils/tree.js

export function jsonTree(data, config) {
    var id = config.id || "id",
        pid = config.pid || "pid",
        children = config.children || "children";
    var idMap = [],
        newIdMap = [],
        jsonTree = [];
    data.forEach(function (v) {
        idMap[v[id]] = v;
    });
    data.forEach(function (v) {
        var parent = idMap[v[pid]];
        delete v.parent;
        if (parent) {
            !parent[children] && (parent[children] = []);
            parent[children].push(v);
        } else {
            jsonTree.push(v);
        }
    });
    return jsonTree;
}

3、/src/api/tree.js

import request from '@/utils/request'

export function getTreeSelects(query) {
  return request({
    url: '/v1/menus/tree_select',
    method: 'get',
    params: query
  })
}

4、服务端 API 接口返回 json 数据
{
  "data": {
    "items": [
      { "id": 1,"label": "超级管理员","pid": 0 },
      { "id": 2,"label": "管理员" ,"pid": 0 },
      { "id": 3,"label": "普通用户","pid": 0 },
      { "id": 4,"label": "钻石","pid": 0 },
      { "id": 5,"label": "金牌","pid": 0 },
      { "id": 6,"label": "银牌","pid": 0 }
    ],
    "total": 6,
    "page_count": 1
  },
  "code": "200",
  "msg": null
}
*
*
*
*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值