vue实现鼠标拖动元素把二级分组放入一级分组

拖动案例demo实现

<template>
  <div>
    <div class="group one-level">
      <div
        class="group-item"
        v-for="(group, index) in groups"
        :key="group.id"
        draggable="true"
        @dragstart="dragStart(group, $event)"
        @dragover.prevent
        @drop="dragDrop(group, index, $event)"
      >
        {{ group.name }}
        <div
          class="subgroup-item"
          v-for="subgroup in group.subgroups"
          :key="subgroup.id"
          draggable="true"
          @dragstart="dragStart(subgroup, $event)"
          @dragover.prevent
          @drop="dragDropSubgroup(group, subgroup, $event)"
        >
          {{ subgroup.name }}
        </div>
      </div>
    </div>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      groups: [
        {
          id: 1,
          name: 'Group 1',
          subgroups: [
            { id: 11, name: 'Subgroup 1.1' },
            { id: 12, name: 'Subgroup 1.2' },
          ],
        },
        {
          id: 2,
          name: 'Group 2',
          subgroups: [
            { id: 21, name: 'Subgroup 2.1' },
            { id: 22, name: 'Subgroup 2.2' },
          ],
        },
      ],
      draggedItem: null,
    };
  },
  methods: {
    dragStart(item, event) {
      this.draggedItem = item;
      event.dataTransfer.effectAllowed = 'move';
      event.dataTransfer.setData('text/plain', item.id);
    },
    dragDrop(group, index, event) {
      const id = event.dataTransfer.getData('text/plain');
      const subgroup = this.groups.find((g) => g.id === parseInt(id, 10));
      if (subgroup) {
        this.groups[index].subgroups.push(subgroup);
        subgroup.subgroups = subgroup.subgroups.filter((s) => s.id !== group.id);
      }
    },
    dragDropSubgroup(group, subgroup, event) {
      subgroup.subgroups.push(group);
    },
  },
};
</script>
 
<style>
.group {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
 
.group-item {
  margin: 5px;
  padding: 5px;
  border: 1px solid #ccc;
}
 
.subgroup-item {
  margin-left: 20px;
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值