Newer
Older
xc-metering-front / src / components / dialog / selectDeptTree.vue
<!-- 部门树选择 -->
<script setup lang="ts" name="SelectEmployeesDialog">
import { getDeptList } from '@/api/system/dept'
import { toTreeList } from '@/utils/structure'
const emits = defineEmits(['change'])
const visibleDialog = ref(false)
const selectDeptTreeRef = ref()
const list = ref([]) as any
const checkoutList = ref([]) as any
const loading = ref(false)
// 查询参数
const listQuery = ref({
  deptName: '', // 部门名称
})

// 获取列表数据
const fetchData = (isNowPage = false) => {
  loading.value = true
  getDeptList(listQuery.value).then((res) => {
    const tempList = res.data.list
    list.value = toTreeList(tempList, '0', false)
    loading.value = false
  })
}

const handleCheckChange = () => {
  checkoutList.value = selectDeptTreeRef.value.getCheckedNodes()
  console.log('全部选中的节点')
  console.log(checkoutList.value)
}

const initDialog = () => {
  visibleDialog.value = true
  fetchData()
}

const closeDialog = () => {
  visibleDialog.value = false
}

const saveDialog = () => {
  const checkedList = checkoutList.value.map((item: any) => {
    return {
      ...item,
      type: 3, // type: 1.成员 2.角色 3.部门
      targetId: item.deptId,
      name: item.fullName,
    }
  })
  emits('change', checkedList)
  closeDialog()
}

defineExpose({ initDialog })
</script>

<template>
  <el-dialog v-model="visibleDialog" title="选择部门" width="500px" append-to-body>
    <el-tree
      ref="selectDeptTreeRef"
      v-loading="loading"
      :data="list"
      show-checkbox
      :accordion="true"
      :default-expand-all="true"
      :props="{
        children: 'children',
        label: 'fullName',
      }"
      @check-change="handleCheckChange"
    />
    <template #footer>
      <el-button @click="closeDialog">
        取 消
      </el-button>
      <el-button type="primary" @click="saveDialog">
        确 定
      </el-button>
    </template>
  </el-dialog>
</template>