|
@@ -173,7 +173,7 @@
|
|
|
:animation="180"
|
|
:animation="180"
|
|
|
ghost-class="member-ghost"
|
|
ghost-class="member-ghost"
|
|
|
:group="{ name: `experts-${row.teamName}-${index}`, pull: false, put: false }"
|
|
:group="{ name: `experts-${row.teamName}-${index}`, pull: false, put: false }"
|
|
|
- @end="handleExpertDragEnd(row, index, cell.members)"
|
|
|
|
|
|
|
+ @end="handleExpertDragEnd($event, row, index, cell.members)"
|
|
|
>
|
|
>
|
|
|
<template #item="{ element: member }">
|
|
<template #item="{ element: member }">
|
|
|
<button type="button" class="member-link" @click="handleMemberClick(member)">
|
|
<button type="button" class="member-link" @click="handleMemberClick(member)">
|
|
@@ -1035,10 +1035,28 @@ const tableData = computed<TableRow[]>(() => {
|
|
|
})
|
|
})
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
-const handleExpertDragEnd = (row: TableRow, cellIndex: number, members: ExpertItem[]) => {
|
|
|
|
|
- expertOrderMap.value[`${row.teamName}-${rankOptions.value[cellIndex]?.value}`] = members.map(
|
|
|
|
|
- (member) => member.id
|
|
|
|
|
- )
|
|
|
|
|
|
|
+const handleExpertDragEnd = (
|
|
|
|
|
+ event: { oldIndex?: number; newIndex?: number },
|
|
|
|
|
+ row: TableRow,
|
|
|
|
|
+ cellIndex: number,
|
|
|
|
|
+ members: ExpertItem[]
|
|
|
|
|
+) => {
|
|
|
|
|
+ const oldIndex = event.oldIndex
|
|
|
|
|
+ const newIndex = event.newIndex
|
|
|
|
|
+ if (oldIndex === undefined || newIndex === undefined || oldIndex === newIndex) return
|
|
|
|
|
+
|
|
|
|
|
+ // SortableJS 已经先完成了插入式移动,这里还原原顺序后只交换两个专家。
|
|
|
|
|
+ const originalMembers = [...members]
|
|
|
|
|
+ const [draggedMember] = originalMembers.splice(newIndex, 1)
|
|
|
|
|
+ originalMembers.splice(oldIndex, 0, draggedMember)
|
|
|
|
|
+ ;[originalMembers[oldIndex], originalMembers[newIndex]] = [
|
|
|
|
|
+ originalMembers[newIndex],
|
|
|
|
|
+ originalMembers[oldIndex]
|
|
|
|
|
+ ]
|
|
|
|
|
+
|
|
|
|
|
+ members.splice(0, members.length, ...originalMembers)
|
|
|
|
|
+ expertOrderMap.value[`${row.teamName}-${rankOptions.value[cellIndex]?.value}`] =
|
|
|
|
|
+ originalMembers.map((member) => member.id)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const filteredTableData = computed(() => {
|
|
const filteredTableData = computed(() => {
|