// [{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;
}
};
此地方存在一个严重的问题,就是一旦接口或者网络出现问题,将导致不可用