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>

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

三、效果展示
相关推荐
Jerry12 分钟前
Compose 基础知识测试
前端
changuncle21 分钟前
Angular初学者入门第三课——工厂函数(精品)
前端·javascript·angular.js
ScottePerk39 分钟前
前端安全之XSS和CSRF
前端·安全·xss
PineappleCoder39 分钟前
Canvas 复杂交互步骤:从事件监听 to 重新绘制全流程
前端
日月晨曦44 分钟前
JavaScript事件循环:一次浏览器线程的"约会"指南
javascript
s3xysteak1 小时前
我要成为vue高手01:上下文
前端·javascript·vue.js
复苏季风1 小时前
前端居中布局:从 "卡壳" 到 "精通" 的全方位指南
前端·css
qb1 小时前
vue3.5.18源码:computed 在发布订阅者模式中的双重角色
前端·vue.js·架构
南篱1 小时前
JavaScript原型链没那么难:一文彻底搞懂
javascript·面试
程序员张31 小时前
Vue3+ElementPlus倒计时示例
javascript·vue.js·前端框架