使用vuedraggable做二級(jí)嵌套的排序拖拽

需求:數(shù)據(jù)結(jié)構(gòu)為兩層,一級(jí)分類跟二級(jí)分類,一級(jí)分類之間可以互相拖拽排序,二級(jí)分類只能內(nèi)部互相拖拽排序

使用group屬性搭配transition-group做頁(yè)面上的分離,內(nèi)部多嵌套一層vuedraggable,
注意點(diǎn),要給第二層vuedraggable和transition-group內(nèi)的父級(jí),添加唯一的key,否則控制臺(tái)報(bào)錯(cuò),相關(guān)層級(jí)的內(nèi)容也不會(huì)顯示出來(lái)


圖片.png

最終效果圖:


圖片.png

實(shí)際代碼內(nèi)容:

<vuedraggable class="draggableBox" :list="checkList" @update="datadragEnd"
             :group="{name: 'father', pull: true}">
             <template v-for="(item, i) in checkList">
               <transition-group>
                 <div :key="'level1'+ i" class="c-flex-row c-justify-sb c-ph10 c-pv10 tabBox">
                   <div class="c-flex-row">
                     <div class="margin-r10">{{ i + 1 }}、</div>
                     <div>{{qualificationTypeMap[item.qualificationType]}}</div>
                   </div>
                   <div class="pointer">
                     <i class="el-icon-rank c-fs-14"></i>
                   </div>
                 </div>

                 <template v-if="item.entityLists && item.entityLists.length != 0">
                   <vuedraggable class="wrapper" :list="item.entityLists" @update="datadragEndSub(i, $event)" :key="'level2'+ i"
                     :group="{name: 'child', pull: false}">
                     <transition-group>
                       <div v-for="(i, k) in item.entityLists" :key="'sublevel'+ k"
                         class="c-flex-row c-justify-sb  c-pv10 padding-l50 padding-r10 tabBox">
                         <div class="c-flex-row">
                           <div>{{i.entityName}}</div>
                         </div>
                         <div class="pointer">
                           <i class="el-icon-rank c-fs-14"></i>
                         </div>
                       </div>
                     </transition-group>
                   </vuedraggable>
                 </template>
               </transition-group>
             </template>
</vuedraggable>


排序方法:
 datadragEnd(evt) {
      // 一級(jí)
      // console.log(evt, this.checkList)
      this.checkList.map((item, index) => {
        Object.assign(item, { sort: index + 1 })
        return item
      })
    },
datadragEndSub(i, evt) {
      // 二級(jí)
      // console.log(i, evt, this.checkList[i].entityLists)
      this.checkList[i].entityLists.map((item, index) => {
        Object.assign(item, { sort: index + 1 })
        return item
      })
    },

官方文檔地址:https://www.itxst.com/vue-draggable/re7vfyfe.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容