tree.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <div class="main">
  3. <div class="input-warp">
  4. <el-input size="small" suffix-icon="el-icon-search" placeholder="请输入功能名称" v-model="filterText"> </el-input>
  5. </div>
  6. <el-tree
  7. class="filter-tree"
  8. :data="data"
  9. :props="defaultProps"
  10. default-expand-all
  11. :highlight-current="true"
  12. :filter-node-method="filterNode"
  13. @node-click="handleNodeClick"
  14. ref="tree"
  15. >
  16. </el-tree>
  17. </div>
  18. </template>
  19. <script>
  20. export default {
  21. props: {
  22. data: {
  23. type: Array,
  24. default() {
  25. return [];
  26. },
  27. },
  28. },
  29. data() {
  30. return {
  31. filterText: "",
  32. defaultProps: {
  33. children: "children",
  34. label: "label",
  35. },
  36. };
  37. },
  38. watch: {
  39. filterText(val) {
  40. this.$refs.tree.filter(val);
  41. },
  42. },
  43. methods: {
  44. filterNode(value, data) {
  45. if (!value) return true;
  46. return data.label.indexOf(value) !== -1;
  47. },
  48. handleNodeClick(data, Node){
  49. this.$emit("change", data);
  50. }
  51. },
  52. };
  53. </script>
  54. <style lang="scss" scoped>
  55. .input-warp{
  56. padding: 10px;
  57. }
  58. .main{
  59. background: #ffffff;
  60. }
  61. </style>