123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <template>
- <el-dialog v-model="dialogVisible" title="人员选择" :width="680" destroy-on-close append-to-body @closed="emit('closed')">
- <div class="sc-user-select">
- <div class="sc-user-select__left">
- <div class="sc-user-select__search">
- <el-input v-model="keyword" prefix-icon="Search" placeholder="搜索成员">
- <template #append>
- <el-button icon="Search" @click="search"></el-button>
- </template>
- </el-input>
- </div>
- <div class="sc-user-select__select">
- <div v-loading="showGrouploading" class="sc-user-select__tree">
- <el-scrollbar>
- <el-tree
- ref="groupTree"
- class="menu"
- :data="group"
- :node-key="groupProps.key"
- :props="groupProps"
- highlight-current
- :expand-on-click-node="false"
- :current-node-key="groupId"
- @node-click="groupClick"
- />
- </el-scrollbar>
- </div>
- <div v-loading="showUserloading" class="sc-user-select__user">
- <div class="sc-user-select__user__list">
- <el-scrollbar ref="userScrollbar">
- <el-tree
- ref="userTree"
- class="menu"
- :data="user"
- :node-key="userProps.key"
- :props="userProps"
- :default-checked-keys="selectedIds"
- show-checkbox
- check-on-click-node
- @check-change="userClick"
- ></el-tree>
- </el-scrollbar>
- </div>
- <footer>
- <el-pagination
- v-model:currentPage="currentPage"
- background
- layout="prev,next"
- small
- :total="total"
- :page-size="pageSize"
- @current-change="paginationChange"
- ></el-pagination>
- </footer>
- </div>
- </div>
- </div>
- <div class="sc-user-select__toicon">
- <el-icon><arrow-right /></el-icon>
- </div>
- <div class="sc-user-select__selected">
- <header>已选 ({{ selected.length }})</header>
- <ul style="margin: 0; padding: 0">
- <el-scrollbar>
- <li v-for="(item, index) in selected" :key="item.id">
- <span class="name">
- <el-avatar size="small">{{ item.name.substring(0, 1) }}</el-avatar>
- <label>{{ item.name }}</label>
- </span>
- <span class="delete">
- <el-button type="danger" icon="Delete" circle size="small" @click="deleteSelected(index)" />
- </span>
- </li>
- </el-scrollbar>
- </ul>
- </div>
- </div>
- <template #footer>
- <el-button @click="dialogVisible = false">取 消</el-button>
- <el-button type="primary" @click="save">确 认</el-button>
- </template>
- </el-dialog>
- </template>
- <script setup>
- import { ref } from 'vue'
- const emit = defineEmits(['closed'])
- const groupTreeRef = ref()
- const dialogVisible = ref(false)
- const keyword = ref('')
- const groupId = ref('')
- const currentPage = ref(1)
- const showUserloading = ref(false)
- const search = () => {
- groupId.value = ''
- groupTreeRef.value.setCurrentKey(groupId.value)
- currentPage.value = 1
- getUser()
- }
- const getUser = () =>{
- this.showUserloading = true
- var params = {
- data: {
- keyword: this.keyword || null,
- departmentId: this.groupId || null
- },
- page: this.currentPage,
- pageSize: this.pageSize
- }
- var res = await user.userPageApi(params)
- this.showUserloading = false
- this.user = res.records
- this.total = res.total || 0
- this.$refs.userScrollbar.setScrollTop(0)
- }
- </script>
- <style scoped lang="scss"></style>
|