Skip to content

用户选择器组件

概述

UserSelector 是一个用户选择组件,支持按部门筛选用户、搜索用户、单选/多选等功能,通过弹窗展示部门树和用户列表。

组件路径web/apps/web-ele/src/components/zq-form/user-selector/

组件名称UserSelector

功能特性

  • 部门树筛选:按部门层级筛选用户
  • 用户搜索:支持搜索用户名、姓名
  • 单选/多选:支持选择单个或多个用户
  • 用户头像:显示用户头像和信息
  • 自动当前用户:可自动填充当前登录用户
  • 两种显示模式:Select 模式和 Button 模式

Props

属性类型默认值说明
modelValuestring | string[]-选中的用户 ID
multiplebooleanfalse是否多选
placeholderstring'请选择'占位符
disabledbooleanfalse是否禁用
clearablebooleantrue是否可清除
filterablebooleantrue是否可搜索
displayMode'select' | 'button''select'显示模式
autoCurrentUserbooleanfalse是否自动填充当前用户
readonlybooleanfalse是否只读
onConfirmFunction-Button 模式下的确认回调

Events

事件参数说明
update:modelValuestring | string[] | undefined值更新
changestring | string[] | undefined值变化

Expose 方法

方法说明
openModal()打开用户选择弹窗

使用示例

单选用户

vue
<template>
  <UserSelector v-model="userId" placeholder="请选择用户" />
</template>

<script setup>
import { ref } from 'vue';

const userId = ref('');
</script>

多选用户

vue
<template>
  <UserSelector
    v-model="userIds"
    :multiple="true"
    placeholder="请选择用户"
  />
</template>

<script setup>
import { ref } from 'vue';

const userIds = ref([]);
</script>

自动填充当前用户

vue
<template>
  <UserSelector
    v-model="userId"
    :auto-current-user="true"
  />
</template>

<script setup>
import { ref } from 'vue';

const userId = ref('');
</script>

Button 模式

vue
<template>
  <UserSelector
    v-model="userId"
    display-mode="button"
    placeholder="选择审批人"
    :on-confirm="handleConfirm"
  />
</template>

<script setup>
import { ref } from 'vue';

const userId = ref('');

async function handleConfirm(value) {
  console.log('选择的用户:', value);
  // 执行业务逻辑
}
</script>

只读模式

vue
<template>
  <UserSelector
    v-model="userId"
    :readonly="true"
  />
</template>

与表单设计器集成

在表单设计器中,该组件作为 user-selector 类型的表单项使用:

json
{
  "type": "user-selector",
  "field": "assignee_id",
  "label": "负责人",
  "props": {
    "multiple": false,
    "clearable": true,
    "filterable": true,
    "autoCurrentUser": false,
    "placeholder": "请选择负责人"
  }
}

弹窗布局

+----------------------------------------------------------+
|  选择用户                                            [X] |
+----------------------------------------------------------+
|  [搜索部门]    |  [搜索用户]              |  已选 (2)    |
|  ├─ 全部部门   |  ┌──────────────────┐   |  ┌─────────┐ |
|  ├─ 技术部     |  │ 👤 张三          │   |  │ 👤 张三 │ |
|  │  ├─ 前端组  |  │ 👤 李四  ✓       │   |  │ 👤 李四 │ |
|  │  └─ 后端组  |  │ 👤 王五          │   |  └─────────┘ |
|  └─ 市场部     |  └──────────────────┘   |              |
+----------------------------------------------------------+
|                              [取消]  [确认]              |
+----------------------------------------------------------+

API 依赖

  • getDeptByParentApi() - 获取子部门
  • searchDeptApi() - 搜索部门
  • getUserDetailApi() - 获取用户详情

典型应用场景

  • 负责人选择:单选用户
  • 审批人选择:单选/多选用户
  • 抄送人选择:多选用户
  • 创建人字段autoCurrentUser=true 自动填充

Released under the MIT License.