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