vuedraggable拖动调整顺序,使用链表优化拖动顺序

// [{id: 1, prev_id: null},{id: 2, prev_id:1},{id: 3, prev_id:2},{id:4, prev_id:3}]
// 1.向后移动节点
// [1,2,3] -> [2,3,1] 将2的prev_id设置为null,将1的prev_id设置为3
// 更改1的oldIndex 上节点的prev_id, 更改1的newIndex的节点的prev_id
// [1,2,3] -> [2,1,3] 将2的prev_id设置为null,将1的prev_id设置为3,将1的nextNode的prev_id修改为1的id


// 2.向前移动节点
// [1,2,3]  -> [3,1,2] 将3的newIndex节点的prev_id修改为null,将3的nextNode的prev_id修改为3的id
// [1,2,3]  -> [1,3,2] 需要调整3,2d的prev_id
// [1,2,3,4] -> [1,3,2,4] 需要同时调整3,2,4的prev_id

// 使用vuedraggable拖动调整节点位置

const dragLoading = ref(false);
const dragEndFn = async function () {
  let customEvent = arguments[0];
  let newIndex = customEvent.newIndex;
  let oldIndex = customEvent.oldIndex;
  if (newIndex != oldIndex) {
    dragLoading.value = true;
    // 向前插入
    if (newIndex < oldIndex) {
      let oldSlotItem = slotItems.value[oldIndex + 1];
      if (oldSlotItem) {
        await flowSlotSave({
          id: oldSlotItem.id,
          pre_slot_id: slotItems.value[oldIndex].id
        });
      }

      let curSlotItem = slotItems.value[newIndex];
      await flowSlotSave({
        id: curSlotItem.id,
        pre_slot_id: slotItems.value[newIndex - 1]?.id || null
      });

      let nextSlotItem = slotItems.value[newIndex + 1];
      await flowSlotSave({
        id: nextSlotItem.id,
        pre_slot_id: curSlotItem.id
      });
    } else {
      // 向后插入
      let curSlotItem = slotItems.value[newIndex];
      let prevSlotItem = slotItems.value[newIndex - 1];
      let nextSlotItem = slotItems.value[newIndex + 1];

      await flowSlotSave({
        id: curSlotItem.id,
        pre_slot_id: prevSlotItem.id
      });

      if (nextSlotItem) {
        await flowSlotSave({
          id: nextSlotItem.id,
          pre_slot_id: curSlotItem.id
        });
      }

      await flowSlotSave({
        id: slotItems.value[oldIndex].id,
        pre_slot_id: slotItems.value[oldIndex - 1]?.id || null
      });
    }
    dragLoading.value = false;
  }
};

此地方存在一个严重的问题,就是一旦接口或者网络出现问题,将导致不可用

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值