分为左右两部分,点击左侧部分的移入按钮,对应的内容出现在右侧,点击右侧的 移出按钮,对应的内容在右侧消失

80 阅读2分钟

分为左右两部分,点击左侧部分的移入按钮,对应的内容出现在右侧,点击右侧的 移出按钮,对应的内容在右侧消失 image.png

<template>
  <div>
    <div style="border: 1px solid #ccc; padding-bottom: 15px">
      <div
        style="
          border-bottom: 1px solid #ccc;
          line-height: 37px;
          padding-left: 15px;
          font-weight: bold;
        "
      >
        选择授权人员
      </div>

      <div style="display: flex; width: 100%">
        <div class="left-part">
          <div style="line-height: 30px">未下发人员</div>
          <div style="font-size: 12px">列表为空</div>
          <el-input
            v-model="input"
            placeholder="请输入姓名或者身份证或下发状态进行检索"
          ></el-input>
          <div class="jiantou">
            <div @click="moveIn" class="oneanniu">
              <i class="el-icon-arrow-right"> </i>
            </div>
            <div @click="allmoveToRight" class="allButtons">
              <i class="el-icon-d-arrow-right"> </i>
            </div>
          </div>
          <div class="bottomBox">
            <ul>
              <li
                :class="{active: isSelected(item.id)}"
                v-for="item in items"
                :key="item.id"
                @click="moveToRight(item)"
              >
                {{ item.name }}
              </li>
            </ul>
          </div>
        </div>
        <div class="right-part">
          <div style="line-height: 30px">已下发人员</div>
          <div style="font-size: 12px">共22个</div>
          <el-input
            v-model="input"
            placeholder="请输入姓名或者身份证或下发状态进行检索"
          ></el-input>
          <div class="jiantou">
            <div @click="remove" class="oneanniu">
              <i class="el-icon-arrow-left"> </i>
            </div>
            <div @click="allremoveFromRight11(item)" class="allButtons">
              <i class="el-icon-d-arrow-left"> </i>
            </div>
          </div>
          <div class="bottomBox" v-if="rightItems">
            <ul>
              <li
                v-for="item in rightItems"
                :key="item.id"
                :class="{active: isSelected(item.id)}"
                @click="moveToLeft(item)"
              >
                {{ item.name }}
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>

    <div style="width: 50%; text-align: center;margin-top: 10px;">
      <el-button type="primary" icon="el-icon-check" @click="push">提交</el-button>
      <el-button type="danger" icon="el-icon-close" @click="close">关闭</el-button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: "Item 1" },
        { id: 2, name: "Item 2" },
        { id: 3, name: "Item 3" },
        { id: 4, name: "Item 4" },
        { id: 5, name: "Item 5" },
        { id: 6, name: "Item 6" },
        // ... 更多项
      ],
      selectedItems: [],// 选中的数据id数组
      moveArr: [],
      rightItems: [], // 右边数组
      input: "", //左侧input
    
    };
  },
  methods: {
 // 判断是否选中
 isSelected(itemId) {
  console.log(itemId,'hjuh')
        return this.selectedItems.includes(itemId);
      },
      // 左侧点击选中
      moveToRight(item) {
        // console.log(this.selectedItems,'fjdfj')
        const index = this.selectedItems.indexOf(item.id);
        if (index === -1) {
          // 如果项目尚未选中,则将其添加到 selectedItems 数组中
          this.selectedItems.push(item.id);
        } else {
          // 如果项目已经选中,则从 selectedItems 数组中移除
          this.selectedItems.splice(index, 1);
        }
        console.log(this.selectedItems, "selectedItems");
      },
      // 移入
      moveIn() {
        console.log(this.selectedItems, "selectedItems");
        console.log(this.items,'items');
        console.log(this.rightItems, "6666666666");
  
        // 过滤掉选中的数据,并将选中的数据合并到右边数组
        this.moveArr = this.items.filter(item => {
          return this.selectedItems.includes(item.id);
        });
        this.rightItems = [...this.rightItems,...this.moveArr]
        // 过滤掉右边数组的数据,并将右边数组的数据合并到左边数组
        this.items = this.items.filter(item => {
          return !this.selectedItems.includes(item.id);
        });
        console.log(this.items,'items');
        console.log(this.rightItems, "6666666666");
        this.moveArr = []
        this.selectedItems = []
      },
      // 右侧点击选中
      moveToLeft(item) {
        const index = this.selectedItems.indexOf(item.id);
        if (index === -1) {
          // 如果项目尚未选中,则将其添加到 selectedItems 数组中
          this.selectedItems.push(item.id);
        } else {
          // 如果项目已经选中,则从 selectedItems 数组中移除
          this.selectedItems.splice(index, 1);
        }
        console.log(this.selectedItems, "selectedItems");
      },
      // 移出
      remove() {
        console.log(this.selectedItems, "selectedItems");
        console.log(this.items,'items');
        console.log(this.rightItems, "6666666666");
  
        // 过滤掉选中的数据,并将选中的数据合并到左边数组
        this.moveArr = this.rightItems.filter(rightItem => {
          return this.selectedItems.includes(rightItem.id);
        });
        this.items = [...this.items,...this.moveArr]
        // 更新右边数组,移除选中的数据
        this.rightItems = this.rightItems.filter(rightItem => {
          return !this.selectedItems.includes(rightItem.id);
        });
        console.log(this.items,'items');
        console.log(this.rightItems, "6666666666");
  
        this.moveArr = []
        this.selectedItems = []
      },

  //  左侧所有
    allmoveToRight() {
      console.log(111);
      this.rightItems = [...this.rightItems, ...this.items];
      this.items = [];
    },
        // 右侧所有
    allremoveFromRight11() {
      this.items = [...this.items, ...this.rightItems];
      this.rightItems = [];
    },
    push(){

    },
    close(){

    }
   
  },
};
</script>
<style scoped>
.left-part {
  width: 50%;
  padding-left: 15px;
  /* border: 1px solid #ccc; */
  margin-right: 5px;
}
.right-part {
  width: 50%;
  padding-left: 15px;
  /* border: 1px solid #ccc; */
}
.active {
  width: 100%;
  background-color: #ccc;
}
.bottomBox {
  /* margin-top: 5px; */
  border: 1px solid #ccc;
  height: 300px;
  overflow: auto;
}
.jiantou {
  display: flex;
  justify-content: space-between;
  width: 100%;
  margin-top: 5px;
  line-height: 30px;
  border-top: 1px solid #ccc;
  border-right: 1px solid #ccc;
  border-left: 1px solid #ccc;
}
.oneanniu {
  width: 50%;
  text-align: center;
  background-color: rgb(244, 244, 244);
}
.allButtons {
  width: 50%;
  text-align: center;
  background-color: rgb(231, 231, 231);
}
ul {
  list-style-type: none;
  padding-left: 5px; /* 如果需要,还可以移除默认的左边距 */
}
</style>