From 5de731dab48eb38ca3430a6bcfd807ab36c17a7b Mon Sep 17 00:00:00 2001 From: MoChou <1373639299@qq.com> Date: Sat, 16 Nov 2024 19:19:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=99=A8=E6=95=B0=E6=8D=AE=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E9=80=89=E4=B8=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/UserSelect/index.vue | 59 +++++++++++++++------------- src/views/system/notice/page/add.vue | 2 +- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/components/UserSelect/index.vue b/src/components/UserSelect/index.vue index dc3afa9..921a56d 100644 --- a/src/components/UserSelect/index.vue +++ b/src/components/UserSelect/index.vue @@ -60,7 +60,7 @@ - + @@ -154,7 +154,7 @@ const reset = () => { // 选中用户 ID const selectedKeys = ref([]) // 选中用户信息 -const selectedData = ref([]) +const selectedData = ref>(new Map()) const emitSelectUser = () => { emit('select-user', selectedKeys.value) @@ -163,24 +163,21 @@ const emitSelectUser = () => { // 单选 const onSelect = (rowKeys: string[], rowKey: string, record: UserResp) => { if (props.multiple) { - // 多选 if (rowKeys.includes(rowKey)) { - // 包含 选中 - selectedData.value.push(record) - selectedKeys.value?.push(rowKey) + // 选中时,添加到 Map + selectedData.value.set(rowKey, record) + selectedKeys.value = Array.from(selectedData.value.keys()) } else { - // 不包含 去除 - selectedData.value = selectedData.value.filter((item) => item.id !== rowKey) - selectedKeys.value?.splice(selectedKeys.value?.indexOf(rowKey), 1) + // 取消选中时,从 Map 移除 + selectedData.value.delete(rowKey) + selectedKeys.value = Array.from(selectedData.value.keys()) } } else { - // 单选 - selectedData.value = [] + selectedData.value.clear() selectedKeys.value = [] if (rowKeys.includes(rowKey)) { - // 包含 选中 - selectedData.value.push(record) - selectedKeys.value?.push(rowKey) + selectedData.value.set(rowKey, record) + selectedKeys.value = [rowKey] } } emitSelectUser() @@ -189,31 +186,31 @@ const onSelect = (rowKeys: string[], rowKey: string, record: UserResp) => { // 全选 const onSelectAll = (checked: boolean) => { if (checked) { - // 选中 + // 全选时,将所有数据添加到 Map dataList.value.forEach((item) => { - selectedData.value.push(item) - selectedKeys.value?.push(item.id) + selectedData.value.set(item.id, item) }) + selectedKeys.value = Array.from(selectedData.value.keys()) } else { - // 取消选中 + // 取消全选时,清空 Map dataList.value.forEach((item) => { - selectedData.value = selectedData.value.filter((i) => i.id !== item.id) - selectedKeys.value?.splice(selectedKeys.value?.indexOf(item.id), 1) + selectedData.value.delete(item.id) }) + selectedKeys.value = Array.from(selectedData.value.keys()) } emitSelectUser() } // 从选中列表中移除用户 const handleDeleteSelectedUser = (user: UserResp) => { - selectedData.value = selectedData.value.filter((i) => i.id !== user.id) - selectedKeys.value?.splice(selectedKeys.value?.indexOf(user.id), 1) + selectedData.value.delete(user.id) + selectedKeys.value = Array.from(selectedData.value.keys()) emitSelectUser() } // 清空所有选中数据 const onClearSelected = () => { - selectedData.value = [] + selectedData.value.clear() selectedKeys.value = [] emitSelectUser() } @@ -234,11 +231,19 @@ onMounted(async () => { if (props.value && props.value.length > 0) { const { data } = await listAllUser({ userIds: props.value }) if (props.multiple) { - selectedData.value = data.filter((item) => props.value.includes(item.id)) - selectedKeys.value = Array.from(selectedData.value).map((user) => user.id) + // 使用 Map 存储用户,避免重复 + data.forEach((item) => { + if (props.value.includes(item.id)) { + selectedData.value.set(item.id, item) + } + }) + selectedKeys.value = Array.from(selectedData.value.keys()) } else { - selectedData.value = data.filter((item) => props.value[0] === item.id) - selectedKeys.value = Array.from(selectedData.value).map((user) => user.id) + const user = data.find((item) => props.value[0] === item.id) + if (user) { + selectedData.value.set(user.id, user) + selectedKeys.value = [user.id] + } } } }) diff --git a/src/views/system/notice/page/add.vue b/src/views/system/notice/page/add.vue index 16e0981..b85e62f 100644 --- a/src/views/system/notice/page/add.vue +++ b/src/views/system/notice/page/add.vue @@ -201,7 +201,7 @@ onMounted(async () => { } // 获取所有用户 const { data } = await listUserDict() - userList.value = data + userList.value = data.map((item) => ({ ...item, value: `${item.value}` })) })