vue elementui tree 任意級(jí)別拖拽功能代碼
我的是根據(jù)父級(jí)id做的一些判斷
<el-tree
draggable :allow-drop="allowDrop" @node-drop="sort"
accordion style="font-size:14px;width:250px;"
ref="tree" :data="catalogList" :props="defaultProps" :expand-on-click-node="false"
node-key="id" :highlight-current="true" :load="loadNode"
lazy :render-content="renderContent" @node-click="handleNodeClick"
empty-text="暫無數(shù)據(jù)">
allowDrop(draggingNode, dropNode, type){
//注掉的是同級(jí)拖拽
/* if (draggingNode.data.level === dropNode.data.level) {
if (draggingNode.data.aboveId === dropNode.data.aboveId) {
return type === 'prev' || type === 'next'
}
} else {
// 不同級(jí)進(jìn)行處理
return false
} */
//任意級(jí)別拖拽
if (draggingNode.data.aboveId === dropNode.data.aboveId) {
return type === 'prev' || type === 'next'
} else {
return type === 'prev' || type === 'next' || type === 'inner'
}
},
//拖拽完成之后要重新排序
/*
* draggingNode:被拖拽節(jié)點(diǎn)對(duì)應(yīng)的 Node
* dropNode:結(jié)束拖拽時(shí)最后進(jìn)入的節(jié)點(diǎn)
* type: 被拖拽節(jié)點(diǎn)的放置位置(before、after、inner)
* event
*/
sort(draggingNode,dropNode,type,event) {
console.log(draggingNode)
console.log(dropNode)
if (draggingNode.data.aboveId === dropNode.data.aboveId) {
let obj = {
aboveId:'',
arr:[]
}
obj.aboveId = dropNode.data.aboveId
for (let item of dropNode.parent.childNodes) {
obj.arr.push(item.data.id)
}
console.log(obj)
this.updateOrderMe(obj)
} else {
let obj = {
aboveId:'',
id:'',
newAboveId:''
}
obj.aboveId = draggingNode.data.aboveId
obj.id = draggingNode.data.id
obj.newAboveId = dropNode.data.id
this.randomDrag(obj)
}
},
randomDrag(obj) {
this.$http
.post(url, obj).then(res =>{
if (!res.data.success) {
this.$message.warning(res.data.msg)
}
})
},
updateOrderMe(obj) {
this.$http
.post(url, {
aboveId:obj.aboveId,
ids: obj.arr
}).then(res =>{
if (!res.data.success) {
this.$message.warning(res.data.msg)
}
})
}
補(bǔ)充知識(shí):element-ui tree 實(shí)現(xiàn)同級(jí)拖拽
我就廢話不多說了,大家還是直接看代碼吧~
<template>
<div>
<el-tree
draggable
:allow-drop="allowDrop"
@node-drop="sort"
ref="tree"
:data="data2"
:props="defaultProps"
show-checkbox
default-expand-all
node-key="id"
highlight-current
></el-tree>
<div class="buttons">
<el-button @click="getCheckedNodes">通過 node 獲取</el-button>
<el-button @click="getCheckedKeys">通過 key 獲取</el-button>
<el-button @click="setCheckedNodes">通過 node 設(shè)置</el-button>
<el-button @click="setCheckedKeys">通過 key 設(shè)置</el-button>
<el-button @click="resetChecked">清空</el-button>
</div>
</div>
</template>
<script>
// import draggable from "vuedraggable";
// import Sortable from "sortablejs";
export default {
methods: {
getCheckedNodes() {
console.log(this.$refs.tree.getCheckedNodes());
},
getCheckedKeys() {
console.log(this.$refs.tree.getCheckedKeys());
},
setCheckedNodes() {
this.$refs.tree.setCheckedNodes([
{
id: 5,
label: "二級(jí) 2-1"
},
{
id: 9,
label: "三級(jí) 1-1-1"
}
]);
},
setCheckedKeys() {
this.$refs.tree.setCheckedKeys([3]);
},
resetChecked() {
this.$refs.tree.setCheckedKeys([]);
}
},
mounted() {
const el = document.querySelectorAll(".el-tree")[0];
console.log(el);
},
data() {
return {
data2: [
{
id: 1,
label: "一級(jí) 1",
children: [
{
id: 4,
label: "二級(jí) 1-1",
prop: "4"
}
]
},
{
id: 2,
label: "一級(jí) 2",
children: [
{
id: 5,
label: "二級(jí) 2-1",
prop: "5"
},
{
id: 6,
label: "二級(jí) 2-2",
prop: "6"
}
]
},
{
id: 3,
label: "一級(jí) 3",
children: [
{
id: 7,
label: "二級(jí) 3-1",
prop: "7"
},
{
id: 8,
label: "二級(jí) 3-2",
prop: "9"
}
]
},
{
id: 9,
label: "一級(jí)4"
}
],
defaultProps: {
children: "children",
label: "label"
},
allowDrop(draggingNode, dropNode, type) {
if (draggingNode.level === dropNode.level) {
if (draggingNode.parent.id === dropNode.parent.id) {
// 向上拖拽 || 向下拖拽
return type === "prev" || type === "next";
}
} else {
// 不同級(jí)進(jìn)行處理
return false;
}
},
sort(draggingNode, dropNode, type, event) {
// console.log('排序')
// console.log("<><><>>><><<><><><><><><><>")
// 拖拽之后的重新組合的數(shù)組
// console.log(dropNode.parent); //dropNode.parent.childNodes =[]
let obj = {
aboveId: "",
arr: []
};
obj.aboveId = dropNode.data.aboveId;
for (let item of dropNode.parent.childNodes) {
obj.arr.push(item.data.id);
}
}
};
}
};
</script>
以上這篇vue elementui tree 任意級(jí)別拖拽功能代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)數(shù)字變換動(dòng)畫的示例代碼
本文主要介紹了vue實(shí)現(xiàn)數(shù)字變換動(dòng)畫的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
vue使用element-plus依賴實(shí)現(xiàn)表格增加的示例代碼
這篇文章主要為大家詳細(xì)介紹了vue使用element-plus依賴實(shí)現(xiàn)表格增加,文中示例代碼講解的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2023-12-12
vue項(xiàng)目input標(biāo)簽checkbox,change和click綁定事件的區(qū)別說明
這篇文章主要介紹了vue項(xiàng)目input標(biāo)簽checkbox,change和click綁定事件的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
VUE3封裝一個(gè)Hook的實(shí)現(xiàn)示例
本文主要介紹了VUE3封裝一個(gè)Hook的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
vue學(xué)習(xí)筆記之slot插槽基本用法實(shí)例分析
這篇文章主要介紹了vue學(xué)習(xí)筆記之slot插槽基本用法,結(jié)合實(shí)例形式分析了vue slot插槽基本使用方法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
vue實(shí)現(xiàn)登陸頁面開發(fā)實(shí)踐
本文主要介紹了vue實(shí)現(xiàn)登陸頁面開發(fā)實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
vue3前端實(shí)現(xiàn)微信支付詳細(xì)步驟
這篇文章主要給大家介紹了vue3前端實(shí)現(xiàn)微信支付的詳細(xì)步驟,隨著移動(dòng)端的普及和互聯(lián)網(wǎng)購買需求的增加,微信支付在電商領(lǐng)域中發(fā)揮著越來越重要的作用,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11
el-table表格動(dòng)態(tài)合并行及合并行列實(shí)例詳解
在使用el-table的時(shí)候經(jīng)常會(huì)涉及到表格的列合并,包括表格操作列的合并,下面這篇文章主要給大家介紹了關(guān)于el-table表格動(dòng)態(tài)合并行及合并行列的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10

