From d0f17680eb31766843ebf8c3767f8e92efbb92b3 Mon Sep 17 00:00:00 2001 From: ltx <19304474232@163.com> Date: Tue, 14 Apr 2026 01:40:05 +0800 Subject: [PATCH] =?UTF-8?q?update:=E8=B5=9B=E4=BA=8B=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=97=B6=E5=B7=B2=E9=80=89=E6=8B=A9=E9=A1=B9=E7=9B=AE=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../match/manage/Steps/Step3ProjectConfig.vue | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/views/match/manage/Steps/Step3ProjectConfig.vue b/src/views/match/manage/Steps/Step3ProjectConfig.vue index 9c2b72f..d0aa4c6 100644 --- a/src/views/match/manage/Steps/Step3ProjectConfig.vue +++ b/src/views/match/manage/Steps/Step3ProjectConfig.vue @@ -169,8 +169,9 @@ const localFormData = ref({ }); const genderList = ref(['全部', '男', '女']) const addProject = () => { - timeProjects.value = []; isShowDialog.value = true; + // 打开弹窗时,用当前已选项目初始化 timeProjects,以便确定后保留勾选 + timeProjects.value = [...(localFormData.value.projects ?? [])]; }; const timeProjects = ref([]) const selectionChange = (list) => { @@ -203,6 +204,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([ {