diff --git a/src/views/review/meeting/components/ExpertSelectTable.vue b/src/views/review/meeting/components/ExpertSelectTable.vue index 3f52c4199..e10adcf55 100644 --- a/src/views/review/meeting/components/ExpertSelectTable.vue +++ b/src/views/review/meeting/components/ExpertSelectTable.vue @@ -42,12 +42,13 @@ v-if="!disabled" ref="tableRef" :data="filteredExperts" + row-key="id" border size="small" max-height="300" @selection-change="handleSelectionChange" > - + @@ -111,23 +112,22 @@ const selectedExperts = computed(() => props.experts.filter((e) => props.modelValue.includes(e.id)) ) -// 同步表格选中状态 -watch( - () => props.modelValue, - async () => { - await nextTick() - if (!tableRef.value) return - isUpdating.value = true - tableRef.value.clearSelection() - filteredExperts.value.forEach((row) => { - if (props.modelValue.includes(row.id)) { - tableRef.value.toggleRowSelection(row, true) - } - }) - isUpdating.value = false - }, - { immediate: true } -) +const syncTableSelection = async () => { + await nextTick() + if (!tableRef.value) return + isUpdating.value = true + tableRef.value.clearSelection() + filteredExperts.value.forEach((row) => { + if (props.modelValue.includes(row.id)) { + tableRef.value.toggleRowSelection(row, true) + } + }) + isUpdating.value = false +} + +// modelValue 或过滤结果变化都需要同步表格勾选,避免切换搜索时已选项被误清空 +watch(() => props.modelValue, syncTableSelection, { immediate: true }) +watch(filteredExperts, syncTableSelection) const handleSelectionChange = (selected: Expert[]) => { if (isUpdating.value) return