tenantbar.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <template>
  2. <el-drawer class="tenant-drawer" v-model="visible" title="租户列表" :size="400" append-to-body @closed="$emit('closed')">
  3. <el-container>
  4. <el-header>
  5. <el-input v-model="filterText" placeholder="输入租户名称" clearable></el-input>
  6. </el-header>
  7. <el-main class="nopadding">
  8. <el-scrollbar>
  9. <el-tree node-key="id" :current-node-key="$store.state.tenant.tenantId" :data="tenants" highlight-current @node-click="data => nodeClick(data)">
  10. <template #default="{ data }">
  11. <vxe-text-ellipsis :id="data.id" :title="data.name" class="custom-tree-node" :content="data.name"></vxe-text-ellipsis>
  12. </template>
  13. </el-tree>
  14. </el-scrollbar>
  15. </el-main>
  16. </el-container>
  17. </el-drawer>
  18. </template>
  19. <script>
  20. import XEUtils from "xe-utils";
  21. export default {
  22. data() {
  23. return {
  24. visible: false,
  25. filterText: ""
  26. }
  27. },
  28. computed: {
  29. tenants() {
  30. if (this.filterText) return XEUtils.filter(this.$store.state.tenant.tenants, item => item.name.includes(this.filterText));
  31. return this.$store.state.tenant.tenants || [];
  32. }
  33. },
  34. methods: {
  35. open() {
  36. this.visible = true;
  37. nextTick(() => XEUtils.arrayEach(document.querySelectorAll(".el-tree-node.is-current"), el => el.scrollIntoView({ block: "center" })));
  38. return this;
  39. },
  40. nodeClick(data) {
  41. this.$store.commit("SET_tenantId", data.id);
  42. this.visible = false;
  43. }
  44. }
  45. }
  46. </script>
  47. <style lang="scss" scoped>
  48. .el-container .el-header {height: fit-content;padding: 10px;border: none;}
  49. .el-container .el-header .el-input {width: 200px;}
  50. </style>