前端-如何自己做一个可视化的人员选择泛用组件

一、展示组件效果

二、组件的功能

1.用户可以在搜索框里输入字符,下方列表实时变动(筛选出包含搜索字符的可选项),如果没有字符,就展示所有的选项

2.用户点击可选项,右侧出现标签

3.用户点击标签的XX,标签会消失,并且左侧改可选项的"选中"状态消失

三、具体实现

代码主要有三部分组成el-input,el-checkbox-group,el-tag

复制代码
<template>
  <div class="userBox">
    <el-tabs type="border-card" class="tabsBox">
      <el-input
        placeholder="请输入名字查询"
        v-model="filterText"
        style="margin-bottom: 5px;"
      ></el-input>
      <el-checkbox-group v-model="checkList" class="checkbox-group">
        <el-checkbox v-for="item in filteredData" :key="item.indexCode" :label="item.indexCode">
          {{ item.name }}
        </el-checkbox>
      </el-checkbox-group>
    </el-tabs>
    <div class="xs-left">
      <el-tag
        :key="tag.indexCode"
        v-for="tag in selectedItems"
        closable
        :disable-transitions="false"
        @close="selectCh(tag.indexCode)"
      >
        {{ tag.name }}
      </el-tag>
    </div>
  </div>
</template>

<script>
export default {
  name: 'abc',
  props: {
    listData: {
      type: Array,
      default: [],
    },
  },
  data() {
    return {
      filterText: '', // 在这里声明查询字符串 filterText
      checkList: [],//被选中的列表
    };
  },

  computed: {
    //选中后的列表,会包含中文名,用来在右侧展示的
    selectedItems() {
      return this.ListData.filter(item => this.checkList.includes(item.indexCode));
    },
    //父组件传过来的数据列表,但是实际要展示的是被字符串筛选过后的新列表
    filteredData() {
      return this.filterText === '' ? this.ListData: this.ListData.filter(item => item.name.includes(this.filterText));
    }
  },

  watch: {
    //监听被选中的列表,实时返回给父组件
    checkList(newCheckList, oldCheckList) {
      // 在 checkList 变化时触发,可以在这里执行传递给父组件的逻辑
      this.$emit('updateCheckList', newCheckList);
    },
  },

  mounted() {
    // 在这里可以进行一些初始化操作
  },

  methods: {
    selectCh(indexCode) {
      // 从 checkList 中移除被点击的项目
      this.checkList = this.checkList.filter(code => code !== indexCode);
    },
  },
};
</script>
相关推荐
m0_7190841110 小时前
React笔记张天禹
前端·笔记·react.js
Ziky学习记录10 小时前
从零到实战:React Router 学习与总结
前端·学习·react.js
wuhen_n10 小时前
JavaScript链表与双向链表实现:理解数组与链表的差异
前端·javascript
wuhen_n10 小时前
JavaScript数据结构深度解析:栈、队列与树的实现与应用
前端·javascript
我是一只puppy10 小时前
使用AI进行代码审查
javascript·人工智能·git·安全·源代码管理
颜酱10 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
狗哥哥11 小时前
微前端路由设计方案 & 子应用管理保活
前端·架构
TT哇11 小时前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
前端大卫11 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘11 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js