vue+element ui+vuedraggable实现表格内不同格子间标签的拖拽

这篇具有很好参考价值的文章主要介绍了vue+element ui+vuedraggable实现表格内不同格子间标签的拖拽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、效果视频

最近有个需求是实现在表格内上下不同格子间标签的拖拽,然而element ui并没有提供此类api,后面我导入vuedraggable包实现了此需求,效果见视频。

demo视频:

element ui表格内标签拖拽demo

二、代码实现

首先要去下载vuedraggable包

npm i vuedraggable

去package.json文件里看包是否下载成功
element ui如何使用draggable,vue.js,ui,前端,javascript,elementui,vue
下载完成后新建页面

页面完整代码如下:

ps:若要实现表格横向的移动,将代码中的:group="jndex + 1"改为group="a"即可

<template>
  <div class="app-container">
    <el-table
      v-loading="loading"
      :data="tableData"
      :max-height="maxHeight"
      class="small-table"
      border
      style="width: 100%"
    >
      <el-table-column align="center" prop="week_date" min-width="160">
      </el-table-column>
      <el-table-column
        align="center"
        prop="start_date"
        label="日期"
        min-width="160"
      />
      <template v-for="(jtem, jndex) in list">
        <el-table-column align="center" :label="jtem.name" min-width="160">
          <template slot-scope="scope">
            <template v-for="(item, index) in jtem.taskList">
              <template v-if="scope.$index === index">
                <draggable
                  :list="item.ground"
                  class="list-group"
                  animation="500"
                  handle=".el-tag"
                  :group="jndex + 1"
                  @start="dragStart($event, jndex)"
                  @end="dragEnd($event, jndex)"
                >
                  <template v-if="item.ground.length > 0">
                    <div
                      class="list-group-item"
                      v-for="(item2, index2) in item.ground"
                      :key="item2.groundId"
                    >
                      <el-tag style="margin: 5px 0">{{ item2.name }}</el-tag>
                    </div>
                  </template>
                </draggable>
              </template>
            </template>
          </template>
        </el-table-column>
      </template>
    </el-table>
  </div>
</template>

<script>
import draggable from "vuedraggable";
export default {
  components: {
    draggable
  },
  data() {
    return {
      loading: false,
      maxHeight: window.innerHeight - 250,
      tableData: [
        {
          start_date: "2019-12-23",
          week_date: "星期一"
        },
        {
          start_date: "2019-12-24",
          week_date: "星期二"
        },
        {
          start_date: "2019-12-25",
          week_date: "星期三"
        },
        {
          start_date: "2019-12-26",
          week_date: "星期四"
        },
        {
          start_date: "2019-12-27",
          week_date: "星期五"
        },
        {
          start_date: "2019-12-28",
          week_date: "星期六"
        },
        {
          start_date: "2019-12-29",
          week_date: "星期日"
        }
      ],
      departmentList: [],
      list: [
        {
          name: "小王",
          taskList: [
            {
              ground: [
                {
                  groundId: 1,
                  name: "John1",
                  no: "1"
                },
                {
                  groundId: 2,
                  name: "heo1",
                  no: "2"
                },
                {
                  groundId: 3,
                  name: "mary1",
                  no: "3"
                }
              ]
            },
            {
              ground: [
                {
                  groundId: 11,
                  name: "John2",
                  no: "4"
                },
                {
                  groundId: 12,
                  name: "heo2",
                  no: "5"
                }
              ]
            },
            {
              ground: [
                {
                  groundId: 21,
                  name: "John3",
                  no: "6"
                }
              ]
            },
            {
              ground: []
            },
            {
              ground: []
            },
            {
              ground: []
            },
            {
              ground: []
            }
          ]
        },
        {
          name: "小lv",
          taskList: [
            {
              ground: [
                {
                  groundId: 150,
                  name: "John1",
                  no: "45"
                },
                {
                  groundId: 250,
                  name: "heo1",
                  no: "55"
                },
                {
                  groundId: 350,
                  name: "mary1",
                  no: "65"
                }
              ]
            },
            {
              ground: [
                {
                  groundId: 1150,
                  name: "John2",
                  no: "75"
                },
                {
                  groundId: 1250,
                  name: "heo2",
                  no: "85"
                }
              ]
            },
            {
              ground: [
                {
                  groundId: 2150,
                  name: "John3",
                  no: "95"
                }
              ]
            },
            {
              ground: []
            },
            {
              ground: []
            },
            {
              ground: []
            },
            {
              ground: []
            }
          ]
        }
      ],
      listNo: []
    };
  },
  methods: {
    dragStart(e, listIndex) {
      this.listNo = [];
      this.list[listIndex].taskList.forEach(item => {
        let array = item.ground.map(item2 => {
          return item2.no;
        });
        this.listNo = [...this.listNo, ...array];
      });
      console.log(this.listNo);
    },
    dragEnd(e, listIndex) {
      this.list[listIndex].taskList.forEach(item => {
        item.ground.forEach(item2 => {
          item2.no = this.listNo.shift();
        });
      });
      console.log(this.list[listIndex].taskList);
    }
  }
};
</script>

<style scoped>
.el-tag {
  cursor: move;
}
</style>

其中dragStart函数是拖拽点击开始时所触发,dragEnd函数是拖拽完后触发文章来源地址https://www.toymoban.com/news/detail-861624.html

到了这里,关于vue+element ui+vuedraggable实现表格内不同格子间标签的拖拽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue+Element UI实现表格表头纵向显示

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 element框架的teble表格的数据展示由横向转向竖向,主要包括element框架的teble表格的数据展示由横向转向竖向使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以

    2024年02月06日
    浏览(61)
  • vue表格显示图片,采用element ui实现

    vue表格显示图片,采用element ui实现 首先定义一个数组tableData,然后return这个数组,采用element的表格模板,需要注意的是el-table-column标签包裹着el-image图片显示标签,但是由于作用域插槽只允许在template模板使用,所以el-image图片显示标签外加一层template模板标签,在vue3中作用

    2024年02月16日
    浏览(54)
  • Vue+Element UI弹窗实现表格编辑

    点击编辑按钮弹出Dialog js如下 时间格式化 3.1 方法一

    2024年02月12日
    浏览(42)
  • 基于vue+element ui实现下拉表格选择组件

    根据https://lolicode.gitee.io/scui-doc/demo/#/dashboard里的组件修改

    2024年02月16日
    浏览(56)
  • Vue+Element ui动态表格 实现表头自适应宽度

    根据业务需求,工作中会出现表头信息不固定,根据后台返回数据,我们要实现动态表格的实现 1. tableData为表格数据,tableHeader为表头数据。 2. 实现表头自适应宽度(二种方法)     ① 第一种通过动态width来定义,通过表头数据的遍历,将label的表头信息传入方法中     

    2024年02月15日
    浏览(51)
  • (vue)element-ui 表格实现勾选单选

    效果: 重选后: 解决参考:https://blog.csdn.net/m0_58373910/article/details/125912828

    2024年02月12日
    浏览(44)
  • vue搭配element-ui前端实现表格分页

    如果不从后台请求数据,那么就需要在前端手动管理数据。可以使用以下步骤实现该功能: 在 Vue 组件的 data 中定义一个数组来存放所有数据(不分页)。 在 mounted 钩子函数中,手动获取数据并存放到上一步定义的数组中。 在模板中使用 element-ui 的表格组件来展示数据,同

    2024年02月11日
    浏览(44)
  • vue+element-UI实现跟随滚动条加载表格数据

    el-table当数据量大的时候,实现滚动到底部后加载数据,直接上js代码,有其他需求请各自更改  第一步、在data中定义两个数组 第二步、在数据发生改变的方法中先循环存放一部分数据用于页面显示 第三步、在mounted监听滚动事件

    2024年02月16日
    浏览(57)
  • vue2&Element-ui实现表格单元格合并

    由于项目需要实现单元格合并目前只是单页没有做分页处理先上效果图 看下数据结构 Element table提供的api arraySpanMethod columnIndex=0表示从第一列开始 rowIndex表示需要操作的行数 同济医院加上合计有12行从0开始=11 判断条件是rowIndex余12===0 我们打印一下 或者改成 表示从0开始到1

    2024年02月12日
    浏览(47)
  • vue element ui table表格--实现列的显示与隐藏

    实现效果 提示:代码段太简单就不解释了,自己看代码自己更改,下面代码直接无脑复制更改就行

    2024年02月02日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包