<template> <div v-show="showDeptSelect" class="dept-select"> <select-tree v-if="multiData" v-model="selected" :disabled="disabled" :size="size" :options="deptTreeList" :props="defaultProps" :placeholder="placeholder"/> <el-select v-else :size="size" v-model="selected" :disabled="disabled" :placeholder="placeholder" clearble> <el-option v-for="item in deptTreeList" :key="item.id" :label="item.name" :value="item.id"/> </el-select> </div> </template> <script> import { judgeTree, toTreeList } from '@/utils/structure' import SelectTree from '@/components/SelectTree/singleSelect' import { getDeptTreeList } from '@/api/system/dept' export default { name: 'DeptSelect', components: { SelectTree }, props: { size: { type: String, default: '' }, // 数据绑定 value: { type: [Number, String], default: '' }, disabled: { type: Boolean, default: false }, placeholder: { type: String, default: '请选择父级' }, needTop: { // 是否需要顶级 type: Boolean, default: true }, deptType: { type: String, default: '' }, deptShow: { type: Boolean, default: false } }, // 接收绑定参数 data() { return { deptTreeList: [], multiData: false, defaultProps: { parent: 'pid', value: 'id', label: 'name', children: 'children' }, selected: '' + this.value, showDeptSelect: true } }, watch: { value: function(val) { this.selected = '' + this.value }, selected: function(val) { console.log('watch selected') this.$emit('input', val) const data = { id: val, name: this.findNameById(this.deptTreeList, val) } this.$emit('deptChange', data) } }, mounted() { this.fetchPcode() }, methods: { // 加载父组织树形下拉菜单 fetchPcode: function() { let listQuery = {} if (this.deptType !== '') { listQuery = { deptType: this.deptType } } getDeptTreeList(listQuery).then(response => { const list = response.data.list if (!this.deptShow && list.length <= 1) { this.showDeptSelect = false } else { // list.push({ id: '0', name: '顶级', open: true, value: '0' }) if (list) { // 如果有必要转树 if (judgeTree(list)) { this.multiData = true this.deptTreeList = toTreeList(response.data.list, '0', this.needTop) } else { this.deptTreeList = list this.multiData = false } console.log(this.deptTreeList) } } }) }, // 根据id获取组织name findNameById(list, id) { for (var i = 0; i < list.length; i++) { var item = list[i] if (item.id === id) { return item.name } if (item.children) { var name = this.findNameById(item.children, id) if (name) { return name } } } } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> .el-select{ width: 100%; } </style>