|
|
|
|
@ -119,6 +119,7 @@ export default {
|
|
|
|
|
selectedPage: {},
|
|
|
|
|
pagination: 1,
|
|
|
|
|
pages: [],
|
|
|
|
|
originalOrder: [],
|
|
|
|
|
pageTotal: 0,
|
|
|
|
|
headers: [
|
|
|
|
|
{ text: 'ID', value: 'id', width: 80, sortable: true },
|
|
|
|
|
@ -172,14 +173,22 @@ export default {
|
|
|
|
|
methods: {
|
|
|
|
|
async saveNewOrder() {
|
|
|
|
|
try {
|
|
|
|
|
const pagesToUpdate = this.filteredPages.map((page, index) => ({
|
|
|
|
|
// Получаем страницы текущей группы
|
|
|
|
|
const groupPages = this.pages
|
|
|
|
|
.filter(p => p.group === this.selectedGroup)
|
|
|
|
|
.sort((a, b) => a.orderPriority - b.orderPriority)
|
|
|
|
|
|
|
|
|
|
const pagesToUpdate = groupPages.map((page, index) => ({
|
|
|
|
|
id: page.id,
|
|
|
|
|
orderPriority: index + 1
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
// Используем новую мутацию для массового обновления
|
|
|
|
|
await this.$apollo.mutate({
|
|
|
|
|
mutation: updatePagePriorityMutation,
|
|
|
|
|
variables: { pages: pagesToUpdate }
|
|
|
|
|
mutation: updatePagesOrderMutation,
|
|
|
|
|
variables: {
|
|
|
|
|
pages: pagesToUpdate
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
this.$store.commit('showNotification', {
|
|
|
|
|
@ -239,31 +248,45 @@ export default {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Создаем копию массива страниц
|
|
|
|
|
const pagesCopy = [...this.pages]
|
|
|
|
|
|
|
|
|
|
// Находим индекс перетаскиваемого элемента в основном массиве
|
|
|
|
|
const draggedPageIndex = pagesCopy.findIndex(p => p.id === this.draggedItem.id)
|
|
|
|
|
if (draggedPageIndex === -1) return
|
|
|
|
|
// Получаем отфильтрованные и отсортированные страницы
|
|
|
|
|
const filteredSorted = this.filteredPages
|
|
|
|
|
|
|
|
|
|
// Удаляем перетаскиваемый элемент из массива
|
|
|
|
|
const [draggedPage] = pagesCopy.splice(draggedPageIndex, 1)
|
|
|
|
|
// Находим новые индексы с учетом фильтрации и сортировки
|
|
|
|
|
const draggedIndex = filteredSorted.findIndex(p => p.id === this.draggedItem.id)
|
|
|
|
|
const targetIndex = filteredSorted.findIndex(p => p.id === item.id)
|
|
|
|
|
|
|
|
|
|
// Находим индекс целевого элемента в основном массиве
|
|
|
|
|
const targetPageIndex = pagesCopy.findIndex(p => p.id === item.id)
|
|
|
|
|
if (targetPageIndex === -1) return
|
|
|
|
|
if (draggedIndex === -1 || targetIndex === -1) return
|
|
|
|
|
|
|
|
|
|
// Вставляем перетаскиваемый элемент перед целевым
|
|
|
|
|
pagesCopy.splice(targetPageIndex, 0, draggedPage)
|
|
|
|
|
// Создаем новый порядок ID
|
|
|
|
|
const newOrderIds = filteredSorted.map(p => p.id)
|
|
|
|
|
// Удаляем перетаскиваемый элемент из его текущей позиции
|
|
|
|
|
newOrderIds.splice(draggedIndex, 1)
|
|
|
|
|
// Вставляем его в новую позицию
|
|
|
|
|
newOrderIds.splice(targetIndex, 0, this.draggedItem.id)
|
|
|
|
|
|
|
|
|
|
// Обновляем orderPriority для всех элементов в группе
|
|
|
|
|
// Обновляем orderPriority в основном массиве
|
|
|
|
|
const pagesCopy = [...this.pages]
|
|
|
|
|
let currentPriority = 1
|
|
|
|
|
pagesCopy.forEach(page => {
|
|
|
|
|
if (page.group === this.selectedGroup) {
|
|
|
|
|
|
|
|
|
|
// Сначала обновляем порядок для выбранной группы
|
|
|
|
|
newOrderIds.forEach(id => {
|
|
|
|
|
const page = pagesCopy.find(p => p.id === id && p.group === this.selectedGroup)
|
|
|
|
|
if (page) {
|
|
|
|
|
page.orderPriority = currentPriority++
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// Затем обновляем порядок для страниц без группы (если нужно)
|
|
|
|
|
pagesCopy.forEach(page => {
|
|
|
|
|
if (page.group !== this.selectedGroup) {
|
|
|
|
|
// Сохраняем исходный порядок для страниц других групп
|
|
|
|
|
const originalPage = this.originalOrder.find(p => p.id === page.id)
|
|
|
|
|
if (originalPage) {
|
|
|
|
|
page.orderPriority = originalPage.orderPriority
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// Обновляем основной массив
|
|
|
|
|
this.pages = pagesCopy
|
|
|
|
|
},
|
|
|
|
|
|