123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <template>
- <div
- :class="[
- 'select-orgs part-box part-box-pad part-box-border',
- { 'select-orgs-disabled': disabled }
- ]"
- >
- <el-tree
- :data="orgs"
- show-checkbox
- default-expand-all
- node-key="id"
- ref="MenuTree"
- :props="defaultProps"
- :check-strictly="checkStrictly"
- check-on-click-node
- :expand-on-click-node="false"
- @check="checkClick"
- @check-change="checkChange"
- >
- </el-tree>
- </div>
- </template>
- <script>
- import { organizationList } from "../api";
- export default {
- name: "select-orgs",
- props: {
- value: {
- type: Array,
- default() {
- return [];
- }
- },
- multiple: {
- type: Boolean,
- default: true
- },
- disabled: {
- type: Boolean,
- default: false
- },
- checkStrictly: {
- type: Boolean,
- default: false
- }
- },
- data() {
- return {
- selectedOrgs: [],
- // orgs: [],
- orgs: [],
- defaultProps: {
- label: "name"
- }
- };
- },
- created() {
- this.getList();
- },
- watch: {
- value(val, oldVal) {
- if (val.join() !== oldVal.join()) this.setCheckedNode(val);
- }
- },
- methods: {
- async getList() {
- this.orgs = await organizationList();
- this.$nextTick(() => {
- this.setCheckedNode(this.value);
- });
- },
- setCheckedNode(selectedIds) {
- const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
- if (selectedOrgs.join() === selectedIds.join()) return;
- this.$refs.MenuTree.setCheckedKeys(selectedIds);
- },
- checkChange() {
- if (!this.multiple) return;
- const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
- this.emitChange(selectedOrgs);
- },
- checkClick(data) {
- if (this.multiple) return;
- const checkedIds = this.$refs.MenuTree.getCheckedKeys();
- // console.log(checkedIds);
- // console.log(data.id);
- if (!checkedIds.includes(data.id)) {
- this.emitChange([]);
- return;
- }
- const selectedOrgs = [data.id];
- this.$refs.MenuTree.setCheckedKeys([data.id]);
- this.emitChange(selectedOrgs);
- },
- emitChange(vals) {
- this.$emit("input", vals);
- this.$emit("change", vals);
- }
- }
- };
- </script>
|