anji-tree.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <!--
  2. * @Descripttion:
  3. * @Author: Devli
  4. * @Date: 2021-7-17 10:45:24
  5. * @Last Modified by: qianlishi
  6. * @Last Modified time: 2021-12-13 11:04:24
  7. !-->
  8. <template>
  9. <div>
  10. <el-input
  11. class="filterInput"
  12. placeholder="搜索"
  13. v-model="filterText"
  14. v-if="enableFilter"
  15. />
  16. <div class="title">{{ labelName }}</div>
  17. <el-tree
  18. ref="table_tree"
  19. :data="treeData"
  20. node-key="id"
  21. :default-expand-all="isOpen"
  22. :expand-on-click-node="false"
  23. :filter-node-method="filterNode"
  24. @node-click="nodeClick"
  25. @check="checkedEvent"
  26. />
  27. </div>
  28. </template>
  29. <script>
  30. import request from "@/utils/request";
  31. export default {
  32. components: {},
  33. props: {
  34. url: {
  35. type: [String],
  36. default: () => {
  37. return "";
  38. }
  39. },
  40. id: {
  41. type: [String],
  42. default: () => {
  43. return "id";
  44. }
  45. },
  46. label: {
  47. type: [String],
  48. default: () => {
  49. return "";
  50. }
  51. },
  52. value: {
  53. type: [String],
  54. default: () => {
  55. return "";
  56. }
  57. },
  58. labelName: String,
  59. enableFilter: Boolean,
  60. isOpen: Boolean
  61. },
  62. data() {
  63. return {
  64. filterText: "",
  65. treeData: []
  66. };
  67. },
  68. computed: {},
  69. watch: {
  70. filterText(val) {
  71. this.$refs.table_tree.filter(val);
  72. }
  73. },
  74. mounted() {
  75. this.queryData();
  76. },
  77. methods: {
  78. filterNode(val, data) {
  79. if (!val) return true;
  80. return data.label.indexOf(val) !== -1;
  81. },
  82. queryData() {
  83. if (this.isBlank(this.url)) {
  84. return;
  85. }
  86. request({
  87. url: this.url,
  88. method: "GET"
  89. }).then(response => {
  90. if (response.code != "200") {
  91. return;
  92. }
  93. this.treeData =
  94. Object.prototype.toString.call(response.data) == "[object Array]"
  95. ? response.data
  96. : response.data.tree || response.data.menuTree;
  97. });
  98. },
  99. // 点击tree节点时 将tree的id作为上级机构代码 查询列表
  100. nodeClick(node) {
  101. this.$emit("input", node["id"]);
  102. this.$emit("node-click", node["id"]);
  103. },
  104. checkedEvent(item, evt) {
  105. let ids = evt.checkedKeys.toString();
  106. this.$emit("input", ids);
  107. }
  108. }
  109. };
  110. </script>
  111. <style scoped lang="scss">
  112. .filterInput {
  113. margin-bottom: 20px;
  114. }
  115. </style>