diff --git a/src/views/match/manage/Steps/Step3ProjectConfig.vue b/src/views/match/manage/Steps/Step3ProjectConfig.vue index 4eec526..f11ffd0 100644 --- a/src/views/match/manage/Steps/Step3ProjectConfig.vue +++ b/src/views/match/manage/Steps/Step3ProjectConfig.vue @@ -184,8 +184,9 @@ const formatGroupDate = (item) => { }; const addProject = () => { - timeProjects.value = []; isShowDialog.value = true; + // 打开弹窗时,用当前已选项目初始化 timeProjects,以便确定后保留勾选 + timeProjects.value = [...(localFormData.value.projects ?? [])]; }; const timeProjects = ref([]) const selectionChange = (list) => { @@ -218,6 +219,33 @@ const onSubmit = async () => { const isShowDialog = ref(false); +const tableRef = ref(null); +// 弹窗打开后,每当 ProTable 加载完新数据,将已选项目回显为勾选状态 +watch(isShowDialog, (visible) => { + if (!visible) return; + // 用 watchEffect 追踪 tableData 变化,数据每次刷新后重新回显 + const stopWatch = watch( + () => tableRef.value?.tableData, + (tableData) => { + if (!tableData?.length) return; + nextTick(() => { + const elTable = tableRef.value?.element; + if (!elTable) return; + const alreadySelectedIds = new Set( + (localFormData.value.projects ?? []).map((p) => p.projectId ?? p.id) + ); + tableData.forEach((row) => { + elTable.toggleRowSelection(row, alreadySelectedIds.has(row.id)); + }); + }); + }, + { deep: true, immediate: true } + ); + // 弹窗关闭时停止监听 + const stopDialog = watch(isShowDialog, (v) => { + if (!v) { stopWatch(); stopDialog(); } + }); +}); const columns = ref([ {