Vue Перетаскивание отправляет выбранный элемент первым - PullRequest
0 голосов
/ 05 августа 2020

Привет, я использую Vue Draggable (Vue .Draggable) из Sortable в моем проекте nuxt 2.13. в моей сортировке все в порядке, за исключением того, что при первой попытке (когда страница загружается), когда я выбираю элемент, он будет отправлен в первый массив !! когда я пробую снова, я работаю нормально !! если я попытаюсь отсортировать свою подкатегорию, я тоже буду работать нормально !!

любая идея ??

ПРИМЕЧАНИЕ: cmsCat и все те this., которые вы не нашли в моем коде, добавляются глобально .

Я также удалил часть, не относящуюся к проблеме!

cmsCat - это mapGetter моих категорий.

<template>
<div class="ma-4">
  
  
  <draggable v-model="myCatArray" @end="onEnd" @choose="onChoose" @unchoose="onUnChoose" v-bind="getOptions()">
    <transition-group type="transition" name="sortable_transition">
      <categorylistcard v-for="(category, index) in cmsCat" 
      :key="category.id" 
      :cat="category" 
      :index="index" 
      :showforsub="showForSub"
      :parentarr="parentArr"
      @addnewsub="addNewCat()"
      />
    </transition-group>
  </draggable>
    

</div>
</template>
<script>
import addcatbtn from '~/components/global/cms/addcatbtn'
import returntoredirectbtn from '~/components/global/cms/returntoredirectbtn'
const categorylistcard = ()=>import('~/components/' + process.env.SITE_DIRECTION + '/cms/categorylistcard')
import {ALERT_TYPE, ALERT_METHOD} from '~/plugins/constants.js'


export default {
    layout:'cms',
    components:{
      'categorylistcard': categorylistcard,
      'addcatbtn': addcatbtn,
      'returntoredirectbtn': returntoredirectbtn
    },
    data(){
      return{
        dialog: false,
        editId: 0,
        newId: 0,
        title: null,
        catList: [],
        editIndex: 0,
        parentArr: [{id: 0, title: ''}],
        editSubCat: false,
        showBtn: true,
        onSubCat: false,
        showForSub: false,
        btnLoading: true,
        oldIndex: '',
        newIndex: '',
        dragOptions: {
            ghostClass: "sortable_ghost",
            chosenClass: "sortable_chosen",
            handle: ".sortable_handle",
            disabled: false
        },
        isMoved: false,
        myCatArray: [],
        originalCatArray: []
      }
    },
    methods:{
      
      getAll(){
        this.$fetch()
        this.showBtn = true
        this.onSubCat = false
        this.breadcrumbs = []
      },
      pushToParentArr(value){
        this.parentArr.push(value)
      },
      
      getOptions(){
        return this.dragOptions
      },
      onChoose(e){
          console.log(e)
      },
      onUnChoose(e){
          console.log(e)
      },
      async onEnd(event){
          console.log(event)

          // ***** Reorder By Sorting *****\\

          this.isMoved = true
          this.oldIndex = event.oldIndex
          this.newIndex = event.newIndex
          this.dragOptions.disabled = true
          let response = await this.axiosGet(`category/reorder/${this.originalCatArray[this.oldIndex].id}/${this.originalCatArray[this.newIndex].id}`)
          if(this.resOk(response.status)){
              this.noty(ALERT_TYPE[1], 'ok')
              this.isMoved = false
              // this.originalCatArray = this.myCatArray
              this.dragOptions.disabled = false
              this.addClassToMovedItems(this.oldIndex)
              this.addClassToMovedItems(this.newIndex)
              this.setCmsCat(this.myCatArray)
              this.originalCatArray = [...this.cmsCat]
              console.log(this.cmsCat[0])
              console.log(this.myCatArray[0])
              console.log(this.originalCatArray[0])
          }else{
              this.isMoved = false
              this.myCatArray = this.originalCatArray
              this.dragOptions.disabled = false
              this.addClassToMovedItems(this.oldIndex)
              this.addClassToMovedItems(this.newIndex)
          }
      },
      addClassToMovedItems(index){
          if((index == this.oldIndex || index == this.newIndex) && this.isMoved == true){
              return 'sortable_moved'
          }else{
              return ''
          }
      }
    },
    async fetch(){
      this.btnLoading = true
      let response = await this.axiosGet(`categories/admin/0/1`)
      if(this.resOk(response.status)){
        if(this.notEmpty(response.data)){
          this.setCmsCat(response.data.items)
          this.myCatArray = [...this.cmsCat]
          this.originalCatArray = [...this.cmsCat]
        }
        this.btnLoading = false
      }
    },
    
    created(){
      this.btnLoading = true
      this.$nuxt.$on('deletecat', (index)=>{
        this.removeCmsCat(index)
      })
      this.$nuxt.$on('editcat', (category, index)=>{
        this.title = category.title
        this.editId = category.id
        this.editIndex = index
        this.dialog = true
      })
      this.$nuxt.$on('editsub', ()=>{
        this.editSubCat = true
      })
      this.$nuxt.$on('showsub', (cat)=>{
        this.newId = cat.id
        this.showBtn = false
        this.onSubCat = true
        this.dragOptions.disabled = true
      })
      this.$nuxt.$on('opensub', (value)=>{
        this.showForSub = true
      })
      this.$nuxt.$on('rootlist', ()=>{
        this.$fetch()
        this.showBtn = true
        this.onSubCat = false
        this.showForSub = false
        this.parentArr= [{id: 0, title: ''}]
        this.dragOptions.disabled = false
      })
      this.$nuxt.$on('openlistclicked', (cat)=>{
          this.pushToParentArr(cat)
      })
    },
    mountd(){
      this.btnLoading = false
    }
}
</script>

...