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

一、展示组件效果

二、组件的功能

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>
相关推荐
cs_dn_Jie13 分钟前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic1 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿1 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具1 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
清灵xmf2 小时前
TypeScript 类型进阶指南
javascript·typescript·泛型·t·infer
小白学大数据2 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
qq_390161772 小时前
防抖函数--应用场景及示例
前端·javascript
334554323 小时前
element动态表头合并表格
开发语言·javascript·ecmascript
John.liu_Test3 小时前
js下载excel示例demo
前端·javascript·excel