文章目录
监听拖拽成功事件
- 监听拖拽成功事件
- 完整代码
- 测试效果
可拖拽节点有如下的事件 node-drop
拖拽成功完成时触发的事件 绑定拖拽成功事件的写法
拖拽完成 , 触发此方法. 传递被拖拽的节点, 目标节点, 拖拽的类型,
{{ node.label }}
箭头函数 调用指定的方法 -->
Append
update
Delete
取 消
确 定
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
export default {
//import引入的组件需要注入到对象中才能使用
components: {},
data() {
return {
pCid: [],
//拖拽后, 要修改的节点信息
updateNodes: [],
// 存储树的最大深度
maxLevel: 0,
// 弹框的标题
title: "",
// 操作类型 是修改还是新增
dialogType: "",
//表单的值
category: {
name: "",
parentCid: 0,
catLevel: 0,
showStatus: 1,
sort: 0,
catId: null,
productUnit: "",
icon: "",
},
dialogVisible: false,
menus: [],
expandedkey: [],
defaultProps: {
children: "children",
label: "name",
},
};
},
methods: {
getMenus() {
this.$http({
url: this.$http.adornUrl("/product/category/list/tree"),
method: "get",
}).then(({ data }) => {
console.log("成功获取到菜单数据 .... ", data.data);
this.menus = data.data;
});
},
// 能否进行拖拽
allowDrop(draggingNode, dropNode, type) {
// 1. 被拖动的当前节点 以及所在的父节点总层数不能大于3
// 1) 被拖动的当前节点的深度
console.log("allowDrop: ", draggingNode, dropNode, type);
//递归计算 当前正在拖动的节点深度, 存储到maxLevel 中
this.countNodeLevel(draggingNode.data);
// 2) 当前正在拖动的节点深度+ 父节点所在的深度 不大于3
console.log("当前正在拖动节点的深度: ", this.maxLevel);
// 实际的深度
let deep = this.maxLevel - draggingNode.data.catLevel + 1;
console.log("深度: ", this.deep);
if (type == "inner") {
// 把某个菜单, 拖进某个菜单里面的时候, 需要进行当前节点的深度和被拖进去的节点的深度相加是否大于3
return deep + dropNode.level {
//添加成功后的操作
this.$message({
type: "success",
message: "分类修改成功!",
});
this.getMenus();
this.expandedkey = [this.category.parentCid];
this.category.name = "";
this.category.productUnit = "";
this.category.icon = "";
this.dialogVisible = false;
});
},
//添加分类
addCategory() {
//点击添加分类, 关闭表单
this.dialogVisible = false;
console.log("提交的表单数据: ", this.category);
this.$http({
url: this.$http.adornUrl("/product/category/save"),
method: "post",
data: this.$http.adornData(this.category, false),
}).then(({ data }) => {
//添加成功后的操作
this.$message({
type: "success",
message: "分类添加成功!",
});
this.getMenus();
this.expandedkey = [this.category.parentCid];
this.category.name = "";
});
},
// 点击树形的 append, 触发的方法, data为点击的父节点数据
append(data) {
console.log("append ", data);
this.dialogType = "add";
this.title = "添加分类";
//点击 append 弹出添加分类的对话框
this.dialogVisible = true;
//父级的id
this.category.parentCid = data.catId;
//分类的层级, 当前层级, 加一
this.category.catLevel = data.catLevel * 1 + 1;
//赋初始化值
this.category.name = "";
this.category.productUnit = "";
this.category.icon = "";
this.category.catId = null;
this.category.sort = 0;
},
remove(node, data) {
//console.log("remove ", node, data);
this.$confirm(`是否删除 [ ${data.name} ] 菜单?`, "提示", {
confirmButtonText: "确定", // 点击确定, 触发then
cancelButtonText: "取消", // 点击取消 触发 catch ,由于取消不需要任何的操作, 但删除catch会报错, 因此保留空方法
type: "warning",
})
.then(() => {
var idArr = [data.catId];
this.$http({
url: this.$http.adornUrl("/product/category/delete"),
method: "post",
data: this.$http.adornData(idArr, false),
}).then(({ data }) => {
this.$message({
type: "success",
message: "删除成功!",
});
//expandedkey = node.parent.data.catId;
this.getMenus();
this.expandedkey = [node.parent.data.catId];
});
})
.catch(() => {});
},
},
//监听属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//方法集合
//生命周期 - 创建完成(可以访问当前this实例) 组件创建完成就发送请求
created() {
this.getMenus();
},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
beforeCreate() {}, //生命周期 - 创建之前
beforeMount() {}, //生命周期 - 挂载之前
beforeUpdate() {}, //生命周期 - 更新之前
updated() {}, //生命周期 - 更新之后
beforeDestroy() {}, //生命周期 - 销毁之前
destroyed() {}, //生命周期 - 销毁完成
activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发. 页面被激活就会发送请求
};
测试效果
拖拽某个节点后, 可以获取的变化的节点参数 如下 updateNodes