From 233bd62babe6660193835b6bb30ae7d169b032ba Mon Sep 17 00:00:00 2001 From: MoChou <1373639299@qq.com> Date: Fri, 8 Nov 2024 22:04:14 +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=A8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/UserSelectContent.vue | 105 ++++++++++++------ src/components/UserSelect/index.vue | 30 ++--- src/components/UserSelect/type.ts | 2 +- 3 files changed, 83 insertions(+), 54 deletions(-) diff --git a/src/components/UserSelect/component/UserSelectContent.vue b/src/components/UserSelect/component/UserSelectContent.vue index fb96750..fd744dd 100644 --- a/src/components/UserSelect/component/UserSelectContent.vue +++ b/src/components/UserSelect/component/UserSelectContent.vue @@ -9,6 +9,7 @@ :columns="tableColumns" :loading="loading" :scroll="{ x: '100%', y: '100%', minWidth: 1000 }" + style="max-height: 600px" :pagination="pagination" :disabled-tools="['size', 'fullscreen', 'setting', 'refresh']" :row-selection="{ type: props.multiple ? 'checkbox' : 'radio', showCheckedAll: true }" @@ -30,7 +31,9 @@ @change="search" /> - + @@ -59,7 +62,7 @@ - + @@ -78,9 +81,9 @@ diff --git a/src/components/UserSelect/index.vue b/src/components/UserSelect/index.vue index 3ebf8a1..15dfc39 100644 --- a/src/components/UserSelect/index.vue +++ b/src/components/UserSelect/index.vue @@ -40,19 +40,19 @@ import { useWindowSize } from '@vueuse/core' import UserSelectContent from './component/UserSelectContent.vue' import { listUserDict } from '@/apis' import type { UserSelectPropType } from '@/components/UserSelect/type' +import type { LabelValueState } from '@/types/global' const props = withDefaults(defineProps(), { multiple: false, // 是否支持多选 - value: '', + value: [], // 单选时默认值为空数组 }) - const emit = defineEmits(['update:value']) - const { width } = useWindowSize() // 获取窗口的宽度,用于设置弹窗宽度 const visible = ref(false) // 控制弹窗显示的状态 -const userList = ref([]) // 保存用户选项列表 +const userList = ref([]) // 保存用户选项列表 const userSelectContentRef = ref() // 引用 UserSelectContent 组件实例 -const selectedUsers = ref([]) // 保存已选择的用户 +const selectedUsers = ref([]) // 保存已选择的用户 + // 打开用户选择弹窗 const onOpen = () => { visible.value = true @@ -66,7 +66,13 @@ const emitDataChange = () => { // 处理用户选择变更事件 const handleSelectChange = (value: any) => { - selectedUsers.value = props.multiple ? value : [...value] + if (props.multiple) { + // 多选模式下,selectedUsers 应该是一个数组 + selectedUsers.value = value + } else { + // 单选模式下,selectedUsers 只应保存一个值 + selectedUsers.value = value ? [value] : [] + } emitDataChange() // 每次选择变化时发出更新事件 } @@ -90,15 +96,3 @@ onMounted(async () => { selectedUsers.value = Array.isArray(props.value) ? props.value : props.value?.split(',') }) - - diff --git a/src/components/UserSelect/type.ts b/src/components/UserSelect/type.ts index 4e7b98a..5d39240 100644 --- a/src/components/UserSelect/type.ts +++ b/src/components/UserSelect/type.ts @@ -1,6 +1,6 @@ export interface UserSelectPropType { multiple: boolean - value?: string[] + value: string[] | string } export interface UserItem {