|
55 | 55 | </template>
|
56 | 56 |
|
57 | 57 | <script setup>
|
58 |
| - import { computed, ref } from 'vue' |
| 58 | + import { computed, ref, watch, nextTick } from 'vue' |
59 | 59 | import { useStore } from '@/store'
|
60 | 60 | import debounce from 'lodash.debounce'
|
61 | 61 | import { isEmptyPropertyValue } from '@/utils/tools'
|
62 | 62 |
|
63 | 63 | const props = defineProps({
|
64 | 64 | value: {
|
65 | 65 | type: [Array, String, Number],
|
66 |
| - default: () => [] |
| 66 | + default: () => ([]) |
67 | 67 | },
|
68 | 68 | disabled: {
|
69 | 69 | type: Boolean,
|
|
102 | 102 | const store = useStore()
|
103 | 103 | const searchRequestId = Symbol('orgSearch')
|
104 | 104 |
|
105 |
| - const initValue = props.value |
106 |
| - const localMultiple = computed(() => { |
107 |
| - if (Array.isArray(initValue) && initValue.length > 1 && !props.multiple) { |
108 |
| - return true |
109 |
| - } |
110 |
| - return props.multiple |
111 |
| - }) |
| 105 | + const localMultiple = computed(() => props.multiple) |
112 | 106 |
|
113 | 107 | const treeProps = computed(() => ({
|
114 | 108 | showCheckbox: localMultiple.value,
|
|
136 | 130 | return this.value || ''
|
137 | 131 | },
|
138 | 132 | set(value) {
|
139 |
| - emit('on-checked', value) |
140 |
| - emit('change', value) |
141 |
| - emit('input', value) |
| 133 | + let val = value || null |
| 134 | + if (val) { |
| 135 | + val = Array.isArray(value) ? value : [value] |
| 136 | + } |
| 137 | + emit('on-checked', val) |
| 138 | + emit('change', val) |
| 139 | + emit('input', val) |
142 | 140 | }
|
143 | 141 | })
|
144 | 142 |
|
| 143 | + watch(() => props.multiple, (isMultiple) => { |
| 144 | + checked.value = [] |
| 145 | + nextTick(() => { |
| 146 | + const { checked: checkedData } = tree.value |
| 147 | + if (isMultiple) { |
| 148 | + checkedData.forEach((id) => { |
| 149 | + tree.value?.setChecked(id, { emitEvent: true, checked: false }) |
| 150 | + }) |
| 151 | + } else { |
| 152 | + tree.value?.setSelected(-1, true) |
| 153 | + } |
| 154 | + }) |
| 155 | + }) |
| 156 | + |
145 | 157 | const loadTree = async () => {
|
146 | 158 | const { data: topData } = await getLazyData()
|
147 | 159 |
|
|
0 commit comments