Vue3人员选择组件封装

一、组件介绍

人员组件在各系统的应用都是比较广泛的,因此可以将其封装为可配置的人员组件,根据不同角色权限显示对应的人员供选择,代码目前只是一部分,需要源码的私聊。

二、直接上代码

use.vue 父组件

javascript 复制代码
  <div class="root-context">
    <el-dialog
      title="人员选择"
      custom-class="dialog-custom-class"
      draggable
      v-model="dialogFormVisible"
      append-to-body
    >
      <personSelection
        ref="userChoose"
        v-if="dialogFormVisible"
        v-bind="getBindValues"
        :userIds="props.modelValue"
        @onChooseChange="onChooseChange"
        :userList="userList"
      />

      <div slot="footer" class="el-dialog__footer flex justify-end">
        <el-button @click="dialogFormVisible = false">取 消</el-button>

        <el-button type="primary" @click="onConfirm()">确 定</el-button>
      </div>
    </el-dialog>

personSelection.vue (子组件)

javascript 复制代码
<template>
  <div class="home_div">
    <div class="content">
      <div class="data-warp">
        <el-input
          class="data-top-search"
          placeholder="输入关键字进行过滤"
          v-model="filterText"
          clearable
        >
          <template #prepend>
            <el-select
              style="width: 120px"
              v-model="selectType"
              placeholder="请选择"
            >
              <el-option
                v-for="(type, index) in showTypeList"
                :label="type"
                :value="type"
                :key="index"
              />
            </el-select>
          </template>
        </el-input>
        <el-tree
          class="data-list"
          :data="treeData"
          show-checkbox
          :default-expanded-keys="defaultExpandedKeys"
          :default-checked-keys="defaultCheckedKeys"
          node-key="nodeId"
          ref="tree"
          :expand-on-click-node="false"
          :check-on-click-node="true"
          :render-after-expand="false"
          empty-text="暂无数据"
          highlight-current
          @check-change="handleNodeCheckChange"
          :filter-node-method="filterNode"
          :props="{
            children: 'children',
            label: 'text'
          }"
        />
      </div>
      <div class="choose-warp">
        <div class="choose-top">
          <span>已选{{ checkUserList.length }}人</span>
          <el-button type="danger" @click="clearChoose()">清空</el-button>
        </div>

        <div class="choose-list">
          <el-tag
            class="choose-tag"
            v-for="tag in checkUserList"
            :key="tag.id"
            @close="removeChooseTag(tag)"
            closable
          >
            {{ tag.text }}
          </el-tag>
        </div>
      </div>
    </div>
  </div>
</template>

树形数据可自行定义或调接口,需要注意数据结构!!!

三、效果展示
相关推荐
梦曦i18 小时前
@meng-xi/create-uni-app vs unibest:轻量脚手架与重型框架的定位之争
前端·uni-app
平头哥技术团队18 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌恩大侠19 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
yume_sibai19 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
qiuhaipeng119 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
zzz_236820 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
剑之所向21 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
计算机魔术师1 天前
GPT-6 Astra幻觉砍到2%,却被一种老招数轻松绕过
前端
cjy0001111 天前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
IT_陈寒1 天前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端