【前端开发】基于vue的树形结构table拖拽排序教程

摘要:
安装取决于拖动树表(有关更多文档,请参阅github)yarnadddrag树表html˂template#selection=“{row}

安装依赖drag-tree-table(更多文档见github)

yarn add  drag-tree-table

html

<dragTreeTable
          ref="table"
          :data="treeData"
          @drag="onTreeDataChange"
          onlySameLevelCanDrag
          resize
          fixed
          :isdraggable="true"
        >
          <template #selection="{row}">
            {{ row.menuName }}
          </template>
          <template #icon="{row}">
            <svg-icon :icon-  />
          </template>
          <template #visible="{row}">
            <div @click.stop>
              <el-switch
                @change="
                  val => {
                    visiableChange(val, row)
                  }
                "
                v-model="row.visible"
                active-value="0"
                inactive-value="1"
              />
            </div>
          </template>
          <template #edit="{row}">
            <el-button
              v-hasPermi="['system:menu:edit']"
              type="text"
              icon="el-icon-edit"
              @click.stop.prevent="handleUpdate(row)"
              >编辑</el-button
            >
            <el-button
              v-hasPermi="['system:menu:add']"
              type="text"
              icon="el-icon-plus"
              @click.stop.prevent="handleAdd(row)"
              >新增</el-button
            >
            <el-button
              v-hasPermi="['system:menu:remove']"
              class="btn-delete"
              type="text"
              icon="el-icon-delete"
              @click.stop.prevent="handleDelete(row)"
              >删除</el-button
            >
          </template>
        </dragTreeTable>

js

import dragTreeTable from 'drag-tree-table'

@Component({
  name: 'MenuManage',
  components: {
    dragTreeTable
  }
})

private tableIdArr: Array<string> = []
private treeData: any = {
    lists: [],
    columns: [
      {
        type: 'selection',
        title: '菜单名称',
        field: 'menuName',
         130,
        align: 'left'
      },
      {
        type: 'icon',
        title: '图标',
        field: 'icon',
         100
      },
      // {
      //   title: '排序',
      //   field: 'orderNum',
      //    60
      // },
      {
        title: '权限标识',
        field: 'perms',
         130
      },
      {
        title: '组件路径',
        field: 'component',
         180
      },
      {
        type: 'visible',
        title: '可见',
        field: 'visible',
         80
      },
      {
        title: '创建时间',
        field: 'createTime',
         180
      },
      {
        type: 'edit',
        title: '操作',
        field: '',
         200,
        align: 'center'
      }
    ]
}

拖拽方法

  // 树形table拖拽排序
  onTreeDataChange(list: Array<object>, curObj: any) {
    this.treeData.lists = list // 拖拽后的数据
    this.tableIdArr = []
    // const idArr = this.filterIdArrFun(JSON.parse(JSON.stringify(list)), curObj.parent_id)
    const putData = {
      parentId: curObj.parent_id, // 父目录id
      ids: this.tableIdArr  // 同级id
    }
// 得到父id和同级id数组即可请求接口
} /** 递归获取父级id相同对象的id数组 **/ filterIdArrFun(data: any, parentId: string) { const firstFun = data.map((q: any) => { if (q.lists && q.lists.length > 0) { if (q.parentId == parentId) { this.tableIdArr.push(q.id) } q.lists = this.filterIdArrFun(JSON.parse(JSON.stringify(q.lists)), parentId) } else { if (q.parent_id === parentId) { this.tableIdArr.push(q.id) } } return q }) return this.tableIdArr }
效果
【前端开发】基于vue的树形结构table拖拽排序教程第1张

免责声明:文章转载自《【前端开发】基于vue的树形结构table拖拽排序教程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Fiddler之iOS手机抓包代理设置虚拟机服务器经典应用配置方案(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vuejs绑定img 的src

1.显示本地图片: <img src="http://t.zoukankan.com/common/images/auth-icon.png" />   2.绑定变量: <img class="" :src="http://t.zoukankan.com/defaultIcon" /> data() {   return {  ...

vue项目中在同一页面多次引入同一个echarts图表子组件的自适应问题

 在父组件页面引入两次该图表子组件显示的效果:       由于是百分比宽高,所以在窗口发生变化时,需要让图表也跟着自适应,所以才出现了本次讨论的问题啦。  先看下完整的图表子组件代码(在父组件就是直接引入,不需要传参哦): <template> <div ref="pieDom" style=" 100%;height: 10...

Vue-CLI项目搭建

一、环境搭建 1、安装服务器node 官网下载 https://nodejs.org/zh-cn/ node:用C++语言编写,用来运行JavaScript语言     node可以为前端项目提供server (包含了socket) 2、安装包管理器npm 管理员命令行安装:window系统:npm install -g cnpm --registry=h...

sql语句的join用法

sql的join分为三种,内连接、外连接、交叉连接。 以下先建2张表,插入一些数据,后续理解起来更方便一些。 create table emp(empno int, name char(20),depart int);create table depart(dpno int,dpname char(20));insert into emp values (...

rootkit:实现隐藏进程

实现隐藏进程一般有两个方法: 1,把要隐藏的进程PID设置为0,因为系统默认是不显示PID为0的进程。 2,修改系统调用sys_getdents()。 Linux系统中用来查询文件信息的系统调用是sys_getdents,这一点可以通过strace来观察到,例如strace ls 将列出命令ls用到的系统调用,从中可以发现ls是通过getdents系统调用...

antd+vue table表格 是否启用 状态显示

antd+vue table表格 是否启用 状态显示 小功能记录一下:单元格里面两个状态或者三个状态切换显示问题。官网里tag标签都是同时展示两个或三个,我这里是根据状态展示对应状态标签。通过试用v-if来控制显示标签,颜色样式自己设置。 这里展示的是部分代码 <template> <a-table :columns="columns...