ElementUI Tree 树形结构展示

蔚落 2022-12-16 13:18 304阅读 0赞

效果图

在这里插入图片描述

实现参考ElementUI提供的控件

官网链接:ElementUITree 树形控件
我使用了节点过滤这个控件,以下为ElementUI官方提供的代码。

在需要对节点进行过滤时,调用 Tree 实例的filter方法,参数为关键字。需要注意的是,此时需要设置filter-node-method,值为过滤函数。

  1. <el-input
  2. placeholder="输入关键字进行过滤"
  3. v-model="filterText">
  4. </el-input>
  5. <el-tree
  6. class="filter-tree"
  7. :data="data"
  8. :props="defaultProps"
  9. default-expand-all
  10. :filter-node-method="filterNode"
  11. ref="tree">
  12. </el-tree>
  13. <script>
  14. export default {
  15. watch: {
  16. filterText(val) {
  17. this.$refs.tree.filter(val);
  18. }
  19. },
  20. methods: {
  21. filterNode(value, data) {
  22. if (!value) return true;
  23. return data.label.indexOf(value) !== -1;
  24. }
  25. },
  26. data() {
  27. return {
  28. filterText: '',
  29. data: [{
  30. id: 1,
  31. label: '一级 1',
  32. children: [{
  33. id: 4,
  34. label: '二级 1-1',
  35. children: [{
  36. id: 9,
  37. label: '三级 1-1-1'
  38. }, {
  39. id: 10,
  40. label: '三级 1-1-2'
  41. }]
  42. }]
  43. }, {
  44. id: 2,
  45. label: '一级 2',
  46. children: [{
  47. id: 5,
  48. label: '二级 2-1'
  49. }, {
  50. id: 6,
  51. label: '二级 2-2'
  52. }]
  53. }, {
  54. id: 3,
  55. label: '一级 3',
  56. children: [{
  57. id: 7,
  58. label: '二级 3-1'
  59. }, {
  60. id: 8,
  61. label: '二级 3-2'
  62. }]
  63. }],
  64. defaultProps: {
  65. children: 'children',
  66. label: 'label'
  67. }
  68. };
  69. }
  70. };
  71. </script>

下面是我写的具体实现

  1. //页面实现
  2. <el-form :inline="true" :model="searchForm" ref="searchForm" label-width="auto">
  3. <el-input
  4. style="width: 200px"
  5. placeholder="输入关键字进行过滤"
  6. v-model="filterText">
  7. </el-input>
  8. <el-tree
  9. @node-click="getNodeData"
  10. node-key="id"
  11. class="filter-tree"
  12. :data="materialTreeOptions"
  13. :props="defaultProps"
  14. default-expand-all
  15. :filter-node-method="filterNode"
  16. ref="tree">
  17. </el-tree>
  18. </el-form>
  19. //方法
  20. <script>
  21. //调用接口fetchTree,具体后端怎么传数据可以查看我的另一篇文章哦!
  22. import { fetchTree} from '@/api/workshop/materialtype'
  23. import { mapGetters} from 'vuex'
  24. export default {
  25. data () {
  26. return {
  27. filterText:'',
  28. searchForm:{
  29. current: 1,
  30. size: 10,
  31. materialName:'',
  32. materialTypeId:''
  33. },
  34. dataForm: {
  35. key: ''
  36. },
  37. defaultProps: {
  38. children: 'children',
  39. label: 'name'
  40. },
  41. materialTreeOptions:[],
  42. materialOptions:[],
  43. dataListLoading: false,
  44. addOrUpdateVisible: false
  45. }
  46. },
  47. watch: {
  48. filterText(val) {
  49. this.$refs.tree.filter(val);
  50. }
  51. },
  52. created () {
  53. this.getMaterialType()
  54. this.getTreeselect()
  55. },
  56. computed: {
  57. ...mapGetters(['permissions'])
  58. },
  59. methods: {
  60. /** 通过树节点查询物料信息 */
  61. getNodeData(data) {
  62. this.searchForm.id = data.id
  63. this.dataListLoading = true;
  64. fetchList(this.searchForm).then(response => {
  65. this.dataList = response.data.data.records;
  66. this.totalPage = response.data.data.total;
  67. });
  68. this.dataListLoading = false;
  69. },
  70. /** 通过关键字过滤树节点 */
  71. filterNode(value, materialTreeOptions) {
  72. if (!value) return true;
  73. return materialTreeOptions.name.indexOf(value) !== -1;
  74. },
  75. /** 查询物料分类下拉树结构 */
  76. getTreeselect() {
  77. fetchTree().then(response => {
  78. var chooseMaterial = []
  79. for (let i = 0; i < response.data.data.length; i++) {
  80. chooseMaterial[i] = response.data.data[i]
  81. }
  82. this.materialTreeOptions = chooseMaterial
  83. });
  84. },
  85. }
  86. </script>

fetchTree调用后台传过来已经封装好的树形数据
具体实现之前写过:https://blog.csdn.net/ka_xingl/article/details/109163852

发表评论

表情:
评论列表 (有 0 条评论,304人围观)

还没有评论,来说两句吧...

相关阅读