deep-tree.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <div class="treeContainer">
  3. <el-input size="mini" class="filter" v-if="treeFilter" placeholder="输入关键字进行搜索" v-model="filterText"></el-input>
  4. <el-tree
  5. :data="datas"
  6. default-expand-all
  7. :filter-node-method="filterNode"
  8. :props="defaultProps"
  9. @node-click="treeClick"
  10. ref="deeptree"
  11. >
  12. </el-tree>
  13. </div>
  14. </template>
  15. <script>
  16. export default {
  17. props: {
  18. // 形成树的扁平化数据 关联方式parentId
  19. data: { type: Array },
  20. // 是否启用搜索
  21. treeFilter: { type: Boolean, default: false }
  22. },
  23. data () {
  24. return {
  25. filterText: '',
  26. defaultProps: {
  27. children: 'children',
  28. label: 'name'
  29. }
  30. }
  31. },
  32. computed: {
  33. datas () {
  34. const data = this.$deepTree(this.data)
  35. return data
  36. }
  37. },
  38. methods: {
  39. filterNode (value, data) {
  40. if (!value) return true
  41. return data.title.indexOf(value) !== -1
  42. },
  43. treeClick (data, node, event) {
  44. console.log(data)
  45. this.$emit('treeclick', data)
  46. }
  47. },
  48. mounted () {},
  49. watch: {
  50. filterText (val) {
  51. this.$refs.deeptree.filter(val)
  52. }
  53. }
  54. }
  55. </script>
  56. <style lang="less" scoped>
  57. .treeContainer {
  58. width: 15%;
  59. height: 100%;
  60. border-right: 1px solid #dadada;
  61. .filter {
  62. width: 90%;
  63. margin: 20px auto;
  64. display: block;
  65. }
  66. }
  67. </style>