当前位置: 首页 > wzjs >正文

赚钱网站开发百度官方客服

赚钱网站开发,百度官方客服,长沙做网站价格,河源wordpress培训在Vue项目中实现‌跨树批量拖拽‌功能,需结合多选、拖拽事件监听及跨树数据交互,以下是具体实现方案及代码示例: 一、基础配置 1.双树结构与多选支持‌ 设置左右两棵el-tree,分别绑定不同数据源,开启多选和拖拽功能‌…

在Vue项目中实现‌跨树批量拖拽‌功能,需结合多选、拖拽事件监听及跨树数据交互,以下是具体实现方案及代码示例:

一、基础配置

1.双树结构与多选支持‌
设置左右两棵el-tree,分别绑定不同数据源,开启多选和拖拽功能‌:

<!-- 左侧树(可拖出) -->
<el-tree :data="leftData" node-key="id" show-checkbox draggable :allow-drop="() => false"  // 禁止内部拖拽@node-drag-start="handleLeftDragStart"@check-change="handleCheckChange"
/>
<!-- 右侧树(可拖入) -->
<el-tree :data="rightData" node-key="id" draggable :allow-drop="allowRightDrop"@node-drop="handleRightDrop"
/>

2.数据初始化‌
定义左右树数据及多选存储变量:

data() {return {leftData: [ /* 左侧树数据 */ ],rightData: [ /* 右侧树数据 */ ],checkedNodes: [],      // 存储左侧勾选的节点draggingNodes: []      // 当前拖拽中的节点};
}

二、跨树拖拽实现

1.勾选节点存储‌
通过@check-change事件收集多选节点‌:

handleCheckChange(currentNode, isChecked) {if (isChecked) {this.checkedNodes.push(currentNode);} else {const index = this.checkedNodes.findIndex(n => n.id === currentNode.id);this.checkedNodes.splice(index, 1);}
}

2.拖拽开始事件‌
触发拖拽时,绑定待移动的节点集合‌:

handleLeftDragStart(node) {if (this.checkedNodes.length === 0) {this.draggingNodes = [node];  // 未多选时默认当前节点} else {this.draggingNodes = this.checkedNodes;}
}

3.右侧树拖入校验‌
在右侧树中定义allow-drop方法,限制拖入条件(如层级、类型)‌:

allowRightDrop(draggingNode, dropNode, type) {// 校验所有拖拽节点是否允许放入(如只能放入同级或特定父级)return this.draggingNodes.every(node => node.level <= 2 &&  // 限制最大层级node.type !== 'system'  // 限制类型);
}

4.拖拽释放处理‌
在右侧树的@node-drop事件中更新数据‌:

async handleRightDrop(draggingNode, dropNode, type) {// 1. 深拷贝拖拽节点数据const clonedNodes = JSON.parse(JSON.stringify(this.draggingNodes));// 2. 从左侧树移除选中节点this.leftData = this.removeNodesFromTree(this.leftData, this.draggingNodes);// 3. 插入到右侧树目标位置this.rightData = this.insertNodesToTree(this.rightData, clonedNodes, dropNode.parent ? dropNode.parent.id : null,  // 目标父节点IDtype  // 'before'/'after'/'inner');// 4. 调用后端接口同步await this.$api.batchMoveNodes({movedIds: this.draggingNodes.map(n => n.id),targetParentId: dropNode.parent?.id || null});
}

三、核心工具方法

1.节点移除逻辑‌
递归删除左侧树中被拖走的节点‌:

removeNodesFromTree(tree, nodes) {const nodeIds = nodes.map(n => n.id);const filterFn = (data) => {return data.filter(item => {if (nodeIds.includes(item.id)) return false;if (item.children) item.children = filterFn(item.children);return true;});};return filterFn(JSON.parse(JSON.stringify(tree)));
}

2.节点插入逻辑‌
根据目标位置插入到右侧树‌:

insertNodesToTree(tree, nodes, targetParentId, insertType) {const clonedTree = JSON.parse(JSON.stringify(tree));const findAndInsert = (data) => {return data.map(item => {if (item.id === targetParentId) {if (!item.children) item.children = [];// 根据类型插入(before/after/inner)if (insertType === 'inner') {item.children.push(...nodes);} else {const index = data.findIndex(i => i.id === targetParentId);data.splice(index + (insertType === 'after' ? 1 : 0), 0, ...nodes);}}if (item.children) findAndInsert(item.children);return item;});};return findAndInsert(clonedTree);
}

四、交互优化

1. 拖拽视觉反馈‌
添加拖拽时的CSS样式提示(如占位符高亮)‌:

.el-tree-node__content.drag-over {background: #f0f7ff;border: 1px dashed #409eff;
}

2.选提示‌
未勾选时拖拽单个节点给出提示‌:

handleLeftDragStart(node) {if (this.checkedNodes.length === 0) {this.$message.info('未选择节点,默认拖拽当前节点');this.draggingNodes = [node];}
}

通过上述方案,可实现左侧树多选节点批量拖拽至右侧树的功能,同时支持数据校验、实时同步及交互优化‌。

http://www.dtcms.com/wzjs/199036.html

相关文章:

  • 网站建设的税率是多少2024年的新闻时事热点论文
  • 备案的域名做电影网站南京今日新闻头条
  • 网址导航打不开怎么办南宁seo排名外包
  • 教育app定制兰州网站seo优化
  • 保定专门做网站的公司南宁网络推广热线
  • 厦门网站建设商家关键词排名查询api
  • 企业网站设计步骤百度手机软件应用中心
  • 福建省建设厅网站信用评分北京seo教师
  • 信息化工作总结 网站建设关键词排名优化公司成都
  • 网站建设模式建个网站费用大概多少钱一年
  • 广东省政府集约化网站建设营销网站策划方案
  • 政府机关单位网站建设推广营销策划方案
  • 哈尔滨香坊城乡建设委员会网站百度平台推广的营销收费模式
  • wordpress淘宝内容公司seo是什么职位
  • 少林寺网站谁做的福州seo代理商
  • 网站页面制作建议网站排名怎么做
  • 商家在携程旅游网站怎样做宣传网站优化和网站推广
  • 网络营销做女鞋的网站设计注册域名在哪里注册
  • 深圳做分销商城网站需要一个网站
  • 软装潢.企业网站建设帆软社区app
  • 成都做网站做的好的公司高清的网站制作
  • 优化门户网站建设百度推广的广告真实可信吗
  • 做母婴产品哪个网站做的好处网站制作报价表
  • 现在还有没有做任务的网站怎么做网站赚钱
  • 浦东新区做网站seo网站优化怎么做
  • 在网站做商城平台需要哪些资质网络推广渠道有哪些
  • 网站建设的目标和需求分析友链购买有效果吗
  • 绵阳网站设计制作郑州网站定制
  • 腾宁科技做网站399元全包网络营销策划方案的目的
  • 网站制作公司小邓百度搜索引擎网址