From 33df5f369e745c3a2fa4b50b43e29362d2bba95e Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Wed, 4 Feb 2026 15:18:21 +0800 Subject: [PATCH] fix(Three-way Synchronization): Uncheck the box for selected users on the right to select those not in the synchronization list. --- .../src/views/system/user/SyncUserDing.vue | 26 ++++++++++++++++++- frontend/src/views/system/user/User.vue | 1 - 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/system/user/SyncUserDing.vue b/frontend/src/views/system/user/SyncUserDing.vue index 11d557b7..cea34ae1 100644 --- a/frontend/src/views/system/user/SyncUserDing.vue +++ b/frontend/src/views/system/user/SyncUserDing.vue @@ -162,6 +162,22 @@ const dfsTree = (arr: any) => { }) } +const dfsTreeIds = (arr: any, ids: any) => { + return arr.filter((ele: any) => { + if (ele.children?.length) { + ele.children = dfsTreeIds(ele.children, ids) + } + if ( + (ele.name.toLowerCase() as string).includes(search.value.toLowerCase()) || + ele.children?.length + ) { + ids.push(ele.id) + return true + } + return false + }) +} + watch(search, () => { organizationUserList.value = dfsTree(cloneDeep(rawTree)) nextTick(() => { @@ -179,7 +195,15 @@ function isLeafNode(node: any) { } const handleCheck = () => { - const userList = [...organizationUserRef.value.getCheckedNodes(), ...checkTableList.value] + const treeIds: any = [] + dfsTreeIds(cloneDeep(rawTree), treeIds) + const checkNodes = organizationUserRef.value.getCheckedNodes() + const checkNodesIds = checkNodes.map((ele: any) => ele.id) + checkTableList.value = checkTableList.value.filter( + (ele: any) => + !treeIds.includes(ele.id) || (treeIds.includes(ele.id) && checkNodesIds.includes(ele.id)) + ) + const userList = [...checkNodes, ...checkTableList.value] let idArr = [...new Set(userList.map((ele: any) => ele.id))] checkTableList.value = userList.filter((ele: any) => { diff --git a/frontend/src/views/system/user/User.vue b/frontend/src/views/system/user/User.vue index 42e44651..1438c153 100644 --- a/frontend/src/views/system/user/User.vue +++ b/frontend/src/views/system/user/User.vue @@ -1028,7 +1028,6 @@ const showTips = (successCount: any, errorCount: any, dataKey: any) => { .then(() => { const { value, name } = currentPlatform.value syncUserRef.value.open(value, name) - currentPlatform.value = null }) .catch(() => { currentPlatform.value = null