orgTree.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <VaCard class="orgTree">
  3. <VaCardTitle>
  4. <div class="title-box">
  5. <span>组织架构</span>
  6. <addUserBtn ref="addUserBtn" @after-op="afterOp" v-if="isAddUserBtn"></addUserBtn>
  7. <addOrgBtn :parentId="selectNode" @after-op="getOrgListTree" v-if="isAddOrgBtn"></addOrgBtn>
  8. </div>
  9. </VaCardTitle>
  10. <VaTreeView :nodes="nodes" :textBy="'name'" :expandAll="true">
  11. <template #content="node">
  12. <div class="flex items-center" style="cursor: pointer" @click="goSelect(node)">
  13. <span>{{ node.orgName }}</span>
  14. <VaBadge v-if="selectNode == node.id" text="选中" color="success" class="mr-2 marginl-10" />
  15. </div>
  16. </template>
  17. </VaTreeView>
  18. </VaCard>
  19. </template>
  20. <script>
  21. import addUserBtn from '../userManage/module/addUserBtn.vue'
  22. import addOrgBtn from '../orgManage/module/addOrgBtn.vue'
  23. export default {
  24. name: 'orgTree',
  25. props: {
  26. isAddUserBtn: {
  27. default: false,
  28. },
  29. isAddOrgBtn: {
  30. default: false,
  31. },
  32. },
  33. components: {
  34. addUserBtn,
  35. addOrgBtn,
  36. },
  37. methods: {
  38. afterOp() {
  39. this.$emit('after-op')
  40. },
  41. goSelect(node) {
  42. if (node.id == this.selectNode) {
  43. this.selectNode = 0
  44. this.$emit('node-select', null)
  45. } else {
  46. this.selectNode = node.id
  47. this.$emit('node-select', node)
  48. }
  49. this.$refs.addUserBtn.orgId = this.selectNode
  50. },
  51. getOrgListTree() {
  52. this.$api.getOrgListTree().then((res) => {
  53. this.nodes = res.result.records
  54. })
  55. },
  56. },
  57. mounted() {
  58. this.getOrgListTree()
  59. },
  60. data() {
  61. return {
  62. selectNode: 0,
  63. nodes: [],
  64. }
  65. },
  66. }
  67. </script>
  68. <style scoped lang="less">
  69. .orgTree {
  70. min-width: 200px;
  71. .title-box {
  72. width: 100%;
  73. display: flex;
  74. justify-content: space-between;
  75. align-items: center;
  76. }
  77. }
  78. .marginl-10{
  79. margin-left: 10px;
  80. }
  81. </style>