Skip to content

UserSelector 用户选择器

可通过该组件选取获得指定用户的数据。(该组件支持函数式调用

请注意

用户的数据包含 orgId,在回显时也需要传入,具体数据结构参考 类型声明中的User

基本用法

该组件无需引入可在现目中直接使用,具体文件放置在 /apps/*/components/OrgUserSelector 下。

通过 v-model 绑定数据

vue
<script setup lang="ts">
interface User {
  orgId: string
  userId: string
  userName: string
}

const open = ref(false)
function toggle() {
  open.value = true
}

const users = ref<User[]>([])
function submit(users: User[]) {}
</script>

<template>
  <UserSelector
    v-model:open="open"
    v-model="users"
    title="选择用户"
    multiple
    @submit="submit"
  />
</template>

通过调用 open 方法打开

vue
<script setup lang="ts">
const userSelectorRef = ref()

function open() {
  userSelectorRef.value.open()
}
</script>

<template>
  <UserSelector ref="userSelectorRef" />
</template>

通过 trigger 插槽触发

vue
<template>
  <UserSelector>
    <template #trigger>
      <button>选择用户</button>
    </template>
  </UserSelector>
</template>

函数式调用

ts
import { selectUser } from '@/components/OrgUserSelector'

function onClick() {
  selectUser({
    modelValue: [], // 回显时选中的数据
    multiple: true,
    onSubmit(selected = []) {
      console.log(selected) // 点击确认后返回选中的数据
    },
  })
}

过滤数据

可通过 filterOrgfilterUser 属性将组织或者用户数据过滤,如:将 orgId'0' 的组织过滤掉,将 userId'123' 的用户过滤掉。

如果想设置组件默认过滤的数据,可以前往 components/OrgUserSelector/UserSelector.vue 中自行修改 props.filterOrgprops.filterUser 定义的默认值。

vue
<template>
  <UserSelector
    :filter-org="(node) => node.orgId !== '0'"
    :filter-user="(node) => node.userId !== '123'"
  />
</template>

API

属性

名称说明类型默认值
v-model:open是否展示弹窗booleanfalse
v-model选中的用户数据User[][]
title选择器弹窗标题string'选择用户'
multiple是否允许多选booleanfalse
auth数据权限配置stringundefined
apis替换接口Apis{}
tabsTab页Array<{ value: string, label: string }>见Tab页
disabledData判断禁用数据(node: any) => boolean() => false
filterOrg过滤组织数据(node: any) => boolean() => true
filterUser过滤用户数据(node: any) => boolean() => true

Tab页

ts
const tabs = [
  { value: 'RecentlyUsed', label: '最近常用' },
  { value: 'Favorites', label: '收藏' },
  { value: 'TreeUserList', label: '全部' },
  { value: 'Groups', label: '群组' },
]

事件

名称说明类型
submit弹窗确认后的触发事件(users: User[]) => void

暴露

名称说明类型
open调用后打开弹窗() => void

类型声明

ts
interface User {
  orgId: string
  userId: string
  userName: string
}

interface Apis {
  /** 最近常用 */
  recentlyUsed?: DataListProps['request']
  /** 收藏 */
  favorites?: DataListProps['request']
  /** 添加取消收藏 */
  favoriteToggle?: FavoriteToggle
  /** 组织树 */
  orgTree?: DataTreeProps['request']
  /** 组织列表 */
  orgList?: DataListProps['request']
  /** 用户列表 */
  userList?: DataListProps['request']
  /** 群组列表 */
  groups?: DataGroupProps['request']
  /** 群组数据 */
  groupData?: DataGroupProps['requestData']
}