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

Sortablejs动态同类型穿插

Sortablejs动态同类型穿插,非同类型禁止插入

文档:https://sortablejs.com/options
对应版本:

"sortablejs": "^1.15.0"
"vue": "2.6.10"
"element-ui": "2.13.2"

代码如下:

<template><div><el-tableref="dragTable":data="tableData"row-key="id"border:row-class-name="tableRowClassName"><el-table-column prop="id" label="ID" width="80" /><el-table-column prop="name" label="姓名" /><el-table-column prop="type" label="类型" /><el-table-column label="操作"><template #default="{ row }"><el-button class="drag-handle" type="text">拖拽按钮</el-button></template></el-table-column></el-table></div>
</template><script>
import Sortable from 'sortablejs'export default {data() {return {tableData: [{ id: 1, name: '行1', type: '取消推荐' },{ id: 3, name: '行2', type: '取消推荐' },{ id: 2, name: '行3(类型B)', type: '推荐' },{ id: 4, name: '行4(类型B)', type: '推荐' }],draggingType: null // 记录当前拖拽元素的类型}},mounted() {this.initSortable()},methods: {// 标记禁止拖入的行(可选)tableRowClassName({ row }) {return row.type === '取消推荐' ? 'recommend-drop-row' : ''},// 初始化拖拽initSortable() {const tbody = this.$refs.dragTable.$el.querySelector('.el-table__body-wrapper tbody')const self = thisSortable.create(tbody, {animation: 150,handle: '.drag-handle',ghostClass: 'ghost-row',group: {name: 'table-group',put: (evt) => {// 动态判断是否允许放入目标行const targetRow = evt.to.closest('tr')const targetType = targetRow.querySelector('td:nth-child(3)').textContent // 这里根据自己实际情况来调整return targetType === self.draggingType // 仅允许同类型放入}},onStart: (evt) => {// 拖拽开始时记录当前元素的类型const draggedRow = evt.itemself.draggingType = draggedRow.querySelector('td:nth-child(3)').textContent},onMove: (evt) => {// 实时反馈是否允许插入(可选)const relatedRow = evt.related.closest('tr')if (relatedRow) {const relatedType = relatedRow.querySelector('td:nth-child(3)').textContentif (relatedType !== self.draggingType) {evt.dragged.style.opacity = '0.3' // 视觉提示return false // 禁止穿插}}return true},onEnd: (evt) => {// 重置状态self.draggingType = nullevt.item.style.opacity = '1'// 数据顺序更新const { oldIndex, newIndex } = evtconst movedRow = self.tableData.splice(oldIndex, 1)[0]self.tableData.splice(newIndex, 0, movedRow)}})}}
}
</script><style>
.recommend-drop-row {background-color: #d78e8e !important;
}
.ghost-row {opacity: 0.5;background: #c8ebfb !important;
}
.drag-handle {cursor: move;
}
</style>

相关文章:

  • 学做西点的网站seo编辑招聘
  • 温州网站建设在线域名解析ip地址
  • 美味西式餐饮美食网站模板域名大全查询
  • 手机上怎么做能打开的网站上海疫情最新数据
  • 网站制作前景怎么样北京优化seo排名优化
  • 淮南做网站的公司百度总部电话
  • 基于大数据的社会治理与决策支持方案PPT(66页)
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的美食菜单社交化营销创新研究
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_服药提醒示例(CalendarView01_24)
  • 深度学习在智能零售中的创新应用与未来趋势
  • web安全之h2注入系统学习
  • 鸿蒙开发中的多媒体与硬件集成深度解析
  • 【案例】基于Python的生源数据可视化分析:从Excel处理到动态地图展示
  • Kylin Linux Advanced Server V10 离线安装 Prometheus + Grafana + node_exporter指南
  • 解决 tmux 中 Conda 环境不生效的问题(附自动继承配置)
  • Python虚拟环境管理:conda、venv、pipenv三国杀
  • LE AUDIO---Chapter 2. The Bluetooth® LE Audio architecture
  • 在 Logstash 中使用 Ruby 脚本
  • 使用redis服务的redisson架构实现分布式锁
  • Prompt:面向目标的提示词
  • Web 点播播放器如何加载缩略图?
  • SQL关键字三分钟入门:DELETE —— 删除数据
  • js 组装树形结构
  • Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory
  • Windows下Zookeeper客户端启动缓慢问题分析与解决方案
  • Python训练营-Day33