| @ -0,0 +1,64 @@ | |||||
| <!-- 选择部门 --> | |||||
| <template> | |||||
| <treeselect v-model="selected" :options="list" :show-count="true" :disabled="readonly" :placeholder="$t('form.placeholderSelect')" @select="handleChange" /> | |||||
| </template> | |||||
| <script> | |||||
| import Treeselect from "@riophae/vue-treeselect" | |||||
| import { deptTreeSelect } from "@/api/system/user" | |||||
| export default { | |||||
| name: "SelectDept", | |||||
| components: {Treeselect}, | |||||
| props: { | |||||
| value: { | |||||
| type: [Number, String , Array], | |||||
| default: null, | |||||
| }, | |||||
| readonly: { | |||||
| type: Boolean, | |||||
| default: false | |||||
| }, | |||||
| }, | |||||
| watch: { | |||||
| value: { | |||||
| immediate: true, | |||||
| handler(v) { | |||||
| this.selected = v ? parseInt(v) : null | |||||
| } | |||||
| }, | |||||
| }, | |||||
| data() { | |||||
| return { | |||||
| selected: null, | |||||
| list: [], | |||||
| }; | |||||
| }, | |||||
| mounted() { | |||||
| this.getList() | |||||
| }, | |||||
| methods: { | |||||
| getList() { | |||||
| this.list = [] | |||||
| deptTreeSelect().then(response => { | |||||
| this.list = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data))) | |||||
| }) | |||||
| }, | |||||
| // 过滤禁用的部门 | |||||
| filterDisabledDept(deptList) { | |||||
| return deptList.filter(dept => { | |||||
| if (dept.disabled) { | |||||
| return false | |||||
| } | |||||
| if (dept.children && dept.children.length) { | |||||
| dept.children = this.filterDisabledDept(dept.children) | |||||
| } | |||||
| return true | |||||
| }) | |||||
| }, | |||||
| handleChange(val) { | |||||
| alert(val?val.label : '') | |||||
| this.$emit('input', val?val.id : '') | |||||
| }, | |||||
| } | |||||
| }; | |||||
| </script> | |||||