vue3 组件之穿梭框2.0


如图所示,没有传统穿梭框中间的箭头,操作更加方便,左侧选择后进入到右侧,并且可以对右侧所选项进行删除,从而左侧勾选也会对应取消。并且带搜索框。

代码如下:

(涉及到深拷贝的一些知识)

<template>
  <div style="display: inline-block">
    
    <el-select
      class="search-input"
      v-model="peopleVal"
      placeholder="请选择"
      ref="selectPeople"
      @focus="openDialog"
    >
    el-select>
    
    <el-dialog v-model="dialog" :title="title" @open="openFn" width="630px">
      <el-form label-width="70px">
        <div class="transfer-view">
          <div class="item-label">选择人员div>
          <div class="checked-box">
            <div class="search-box">
              <el-input
                v-model.trim="searchName"
                placeholder="请输入关键词"
                :prefix-icon="Search"
                @input="searchFn"
                clearable
              >el-input>
            div>

            <el-checkbox
              v-show="!searchName"
              :indeterminate="isIndeterminate"
              v-model="checkAll"
              @change="handleCheckAllChange"
              >全选el-checkbox
            >
            <el-checkbox-group @change="handleChecked" v-model="checkList">
              <el-checkbox
                class="checkbox-item"
                v-for="v in personList"
                :label="v.id"
                :key="v.id"
              >
                {{ v.realName }}
              el-checkbox>
            el-checkbox-group>
          div>
          <div class="select-checked-box">
            <div class="search-box">
              <span class="selected">已选:{{ checkList.length }}人span>
            div>
            <div class="select-perosn" v-for="v in checkPerson" :key="v.id">
              <span>
                {{ v.realName }}
              span>
              <i
                class="iconfont icon-a-zujian18719 icon-error"
                @click="handleRemove(v)"
              >i>
            div>
          div>
        div>
      el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="dialog = false">取消el-button>
          <el-button type="primary" @click="submitFn">提交el-button>
        span>
      template>
    el-dialog>
  div>
template>