index.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <el-dialog v-model="dialogVisible" title="人员选择" :width="680" destroy-on-close append-to-body @closed="emit('closed')">
  3. <div class="sc-user-select">
  4. <div class="sc-user-select__left">
  5. <div class="sc-user-select__search">
  6. <el-input v-model="keyword" prefix-icon="Search" placeholder="搜索成员">
  7. <template #append>
  8. <el-button icon="Search" @click="search"></el-button>
  9. </template>
  10. </el-input>
  11. </div>
  12. <div class="sc-user-select__select">
  13. <div v-loading="showGrouploading" class="sc-user-select__tree">
  14. <el-scrollbar>
  15. <el-tree
  16. ref="groupTree"
  17. class="menu"
  18. :data="group"
  19. :node-key="groupProps.key"
  20. :props="groupProps"
  21. highlight-current
  22. :expand-on-click-node="false"
  23. :current-node-key="groupId"
  24. @node-click="groupClick"
  25. />
  26. </el-scrollbar>
  27. </div>
  28. <div v-loading="showUserloading" class="sc-user-select__user">
  29. <div class="sc-user-select__user__list">
  30. <el-scrollbar ref="userScrollbar">
  31. <el-tree
  32. ref="userTree"
  33. class="menu"
  34. :data="user"
  35. :node-key="userProps.key"
  36. :props="userProps"
  37. :default-checked-keys="selectedIds"
  38. show-checkbox
  39. check-on-click-node
  40. @check-change="userClick"
  41. ></el-tree>
  42. </el-scrollbar>
  43. </div>
  44. <footer>
  45. <el-pagination
  46. v-model:currentPage="currentPage"
  47. background
  48. layout="prev,next"
  49. small
  50. :total="total"
  51. :page-size="pageSize"
  52. @current-change="paginationChange"
  53. ></el-pagination>
  54. </footer>
  55. </div>
  56. </div>
  57. </div>
  58. <div class="sc-user-select__toicon">
  59. <el-icon><arrow-right /></el-icon>
  60. </div>
  61. <div class="sc-user-select__selected">
  62. <header>已选 ({{ selected.length }})</header>
  63. <ul style="margin: 0; padding: 0">
  64. <el-scrollbar>
  65. <li v-for="(item, index) in selected" :key="item.id">
  66. <span class="name">
  67. <el-avatar size="small">{{ item.name.substring(0, 1) }}</el-avatar>
  68. <label>{{ item.name }}</label>
  69. </span>
  70. <span class="delete">
  71. <el-button type="danger" icon="Delete" circle size="small" @click="deleteSelected(index)" />
  72. </span>
  73. </li>
  74. </el-scrollbar>
  75. </ul>
  76. </div>
  77. </div>
  78. <template #footer>
  79. <el-button @click="dialogVisible = false">取 消</el-button>
  80. <el-button type="primary" @click="save">确 认</el-button>
  81. </template>
  82. </el-dialog>
  83. </template>
  84. <script setup>
  85. import { ref } from 'vue'
  86. const emit = defineEmits(['closed'])
  87. const groupTreeRef = ref()
  88. const dialogVisible = ref(false)
  89. const keyword = ref('')
  90. const groupId = ref('')
  91. const currentPage = ref(1)
  92. const showUserloading = ref(false)
  93. const search = () => {
  94. groupId.value = ''
  95. groupTreeRef.value.setCurrentKey(groupId.value)
  96. currentPage.value = 1
  97. getUser()
  98. }
  99. const getUser = () =>{
  100. this.showUserloading = true
  101. var params = {
  102. data: {
  103. keyword: this.keyword || null,
  104. departmentId: this.groupId || null
  105. },
  106. page: this.currentPage,
  107. pageSize: this.pageSize
  108. }
  109. var res = await user.userPageApi(params)
  110. this.showUserloading = false
  111. this.user = res.records
  112. this.total = res.total || 0
  113. this.$refs.userScrollbar.setScrollTop(0)
  114. }
  115. </script>
  116. <style scoped lang="scss"></style>