vue element-table(树形结构),实现同级拖动排序

这篇具有很好参考价值的文章主要介绍了vue element-table(树形结构),实现同级拖动排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

####需求:树形结构的table需要实现同级拖拽排序
1.vue引用sortablejs 参考相关配置http://www.sortablejs.com/options.html

import Sortable from 'sortablejs'

2.定义变量

data () {
    return {
      table:[], // 表格数据
      activeRows: [] // 转换为列表的数据扁平化
    }
  },

3.初始化created中调用方法,方法如下

rowDrop () {
      const tbody = document.querySelector('.table .el-table__body-wrapper tbody')
      Sortable.create(tbody, {
        animation: 200, // 定义排序动画的时间
        forceFallback: true, // boolean 如果设置为true时,将不使用原生的html5的拖放,可以修改一些拖放中元素的样式等;
        onMove: ({ dragged, related }) => {
          const oldRow = this.activeRows[dragged.rowIndex] // 移动的那个元素
          const newRow = this.activeRows[related.rowIndex] // 新的元素
          if (oldRow.parentId !== newRow.parentId) { // 移动的元素与新元素父级id不相同
            return false // 不允许跨级拖动
          }
        },
        onStart: () => { // 开始拖拽前把树形结构数据扁平化
          this.activeRows = this.treeToTile(this.table) // 把树形的结构转为列表再进行拖拽
        },
        onEnd: e => {
          const oldRow = this.activeRows[e.oldIndex] // 移动的那个元素
          const newRow = this.activeRows[e.newIndex] // 新的元素
          if (e.oldIndex === e.newIndex || oldRow.parentId !== newRow.parentId) return
          const index = this.activeRows.indexOf(oldRow)
          if (index < 0) return
          const changeIndex = e.newIndex - e.oldIndex
          this.activeRows.splice(index, 1)
          this.activeRows.splice(index + changeIndex, 0, oldRow)

          const parentId = newRow.parentId
          const currentRows = this.activeRows
            .filter(c => c.parentId === parentId)
            ?.map((item, index) => {
              return {
                codeName: item.codeName, // 名称
                id: item.id, // 当前行的唯一标识
                seqNo: index + 1
              }
            })
          // 请求接口排序,根据后端要求填写参数
          this.handleGetApi(currentRows) // 请求后端排序接口
        }
      })
    }

4.扁平化数据方法

   /**
     * 将树数据转化为平铺数据
     * @param <Array> treeData当前要转的id
     * @param <String> childKey 子级字段
     * @return <Array> 返回数据
     */
    treeToTile (treeData, childKey = 'child') {
      const arr = []
      const expanded = data => {
        if (data && data.length > 0) {
          data.filter(d => d).forEach(e => {
            arr.push(e)
            expanded(e[childKey] || [])
          })
        }
      }
      expanded(treeData)
      return arr
    },

5.犹豫这个过程中需要子级存在父级的parentId,自己把扁平化的方法改造了一下,在查询完列表数据时同步给子级添加父级的id文章来源地址https://www.toymoban.com/news/detail-621821.html

// 子级携带父级id
    treeParent (treeData, childKey = 'child') {
      const expandParent = (data, parentId) => {
        if (data && data.length > 0) {
          data.filter(d => d).forEach(e => {
            if (parentId) e.parentId = parentId
            expandParent(e[childKey] || [], e.id || '')
          })
        }
      }
      expandParent(treeData)
      return treeData
    },

到了这里,关于vue element-table(树形结构),实现同级拖动排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue(element ui )el-table树形表格展示及数据对齐

    注意点: el-table配置里 row-key 必须是唯一性 :tree-props=“{ children: ‘relatedPartyChild’ , hasChildren: ‘hasChildren’ }” children配置为后端返回的节点字段即可

    2024年02月16日
    浏览(37)
  • element-table的动态操作,表格动态新增行、列,删除行列

    灵活的自定义表格行列以及增删改查的操作,右键选中列则是列的删除,效果如下   为了方便可以直接复制代码查看效果已把动态数据换成自定义数据

    2024年02月11日
    浏览(43)
  • elementUI el-table+树形结构子节点选中后没有打勾?(element版本问题 已解决)

    1.不勾选父级CB111,直接去勾选子级(ST2001…), 子级选中后没有打勾显示 一直以为是这个树形结构和表格不兼容产生的问题,到后来看官方demo都是可以勾选的,最后排查到了版本问题, 最后尝试 给element ui升级为最新版本 “element-ui”: “ 2.15.7 ” -“element-ui”: “ 2.15.14 ”

    2024年02月07日
    浏览(32)
  • element-table的动态操作,自动以表格,动态新增行、列,删除行列

    灵活的自定义表格行列以及增删改查的操作,右键选中列则是列的删除,效果如下   为了方便可以直接复制代码查看效果已把动态数据换成自定义数据

    2024年02月11日
    浏览(48)
  • form-generator扩展原生表格,element-table,子表单等组件

    form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但form-generator提供组件并不能满足我们在项目中的使用,比如表格组件,el-table,子表单等等,

    2024年02月15日
    浏览(35)
  • Vue Element UI 中 el-table 树形数据 tree-props 多层级使用避坑

    实现效果: element官网提示设置tree-props为{children: ‘children’,hasChildren: ‘hasChildren’},data数据需要设置children和hasChildren属性,row-key也绑定了数据的唯一值变量id,但是 树形结构的第三级就是出不来 可以看到只有第二级,第三级并没有,于是查看了 数据格式 ,和官方要求的

    2024年02月02日
    浏览(70)
  • vue2 - 详细介绍element UI中在el-select嵌套el-tree树形控件实现下拉选择树型结构数据的效果实例(组件封装)

    在项目上常用使用到 el-select 和 el-tree 组合实现,记录下两者结合的实现过程。(代码以及注释清晰明了,代码直接使用即可) 要求根据项目接口提供的数据,el-tree 里的数据是一次性返回来的,点击最后一层级时,请求接口,在点击层级下方追加数据追加的数据要显示勾

    2024年04月15日
    浏览(43)
  • Element-UI控件Tree实现数据树形结构

            在前端开发中,有时会遇到所有菜单数据在同一级的情况,后端未对数据进行分级处理;但前端渲染需要是树状结构的数据,如何实现数据的树状化?将数组中通过父节点的ID与子节点的parentId关联,通过递归函数来实现。         前端框架这里使用element-ui的tree控件

    2024年02月05日
    浏览(44)
  • VUE2+Element-ui树形控件tree结构的值获取和传给后台

    最近做到了权限管理模块 其中的菜单权限需要用到tree结构进行多选功能的渲染操作 废话少说,直接上代码 将tree结构放在form中配合表单使用 并附带全选和全不选,展开和折叠功能 其中的show-checkbox作用是对tree数据的多选模式 要写在data中的数据 其中defaultProps一定不能忘记

    2024年02月05日
    浏览(43)
  • [VUE]Element_UI 实现TreeSelect 树形选择器

    最近在做一个人员管理系统,在增改用户信息时,可能会设置用户所在的部门,因为部门是多级的,于是想到用Element_UI的TreeSelect组件实现 效果: 安装完成后,打开package.json 可以看到@riophae/vue-treeselect的版本: 在需要使用TreeSelect的组件中引入 并将Treeselect加到components中:

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包