element 实现表格数据拖拽 数据拖拽其他区域实现 拖拽到日期 并在下面div盒子数据显示出来(直接复制)就能使用

html 复制代码
<template>
  <!-- -->
  <div id="app">
    <el-table :data="tableData" style="width: 100%" row-key="id" ref="table">
      <el-table-column prop="id" label="ID" width="80"></el-table-column>
      <el-table-column prop="name" label="Name" width="180"></el-table-column>
      <el-table-column prop="age" label="Age" width="100"></el-table-column>
      <el-table-column label="Actions" width="120">
        <template slot-scope="scope">
          <div
            class="draggable-row"
            :data-id="scope.row.id"
            draggable="true"
            @dragstart="handleDragStart(scope.row)"
          >
            Drag me
          </div>
        </template>
      </el-table-column>
    </el-table>

    <div class="calendar">
      <div
        v-for="(date, index) in calendarDates"
        :key="index"
        class="calendar-date"
        :class="{ 'drag-over': isDragOverDate === date }"
        @dragover.prevent="handleDragOver(date)"
        @drop="handleDrop(date)"
      >
        {{ formatDate(date) }}
      </div>
    </div>

    <div v-if="droppedData">
      <p>{{ droppedDate }}</p>
      <pre>{{ droppedData }}</pre>
    </div>
  </div>
</template>

<script>
export default {
  name: "App",

  data() {
    return {
      tableData: [
        { id: 1, name: "Tom", age: 25 },
        { id: 2, name: "Tom", age: 35 },
        { id: 3, name: "Tom", age: 45 },
        { id: 41, name: "Tom", age: 55 },
        // ... more rows
      ],
      calendarDates: this.generateCalendarDates(
        new Date(2023, 0, 1),
        new Date(2023, 0, 30)
      ), // January 1st to 30th
      draggedRow: null,
      isDragOverDate: null,
      droppedData: null,
      droppedDate: null,
    };
  },
  methods: {
    // 表格拖拽的方法     拖拽开始时的事件处理函数
    handleDragStart(row) {
      // 设置拖动的行为数据
      console.log(row,'222222222');
      this.draggedRow = row;
    },
    // 日历拖拽的方法
    handleDragOver(date) {
      // 将拖动的日期赋值给 isDragOverDate
      this.isDragOverDate = date;
    },
    //  放置到当前日历的方法   事件处理函数
    handleDrop(date) {
      console.log(date,'11111111111111');
      // 将拖拽的数据赋值给 droppedData
      this.droppedData = this.draggedRow;

      // 将传入的日期格式化后赋值给 droppedDate
      this.droppedDate = this.formatDate(date);

      // 将 draggedRow 设置为 null,表示当前没有拖拽的行
      this.draggedRow = null;

      // 将 isDragOverDate 设置为 null,表示当前没有拖拽经过的日期
      this.isDragOverDate = null;
    },
    // 生成日历日期的方法
    generateCalendarDates(startDate, endDate) {
      // 初始化一个空数组用于存储日期
      const dates = [];
      // 将起始日期转换为Date对象
      let currentDate = new Date(startDate);
      // 使用while循环遍历从起始日期到结束日期的每一天
      while (currentDate <= endDate) {
        // 将当前日期添加到日期数组中
        dates.push(new Date(currentDate));
        // 将当前日期增加一天
        currentDate.setDate(currentDate.getDate() + 1);
      }
      // 返回包含所有日期的数组
      return dates;
    },
    // 格式化日期的方法
    formatDate(date) {
     
      // 获取月份,并转换为字符串,如果月份为个位数,则在前面补零
      const month = String(date.getMonth() + 1).padStart(2, "0");
      // 获取日期,并转换为字符串,如果日期为个位数,则在前面补零
      const day = String(date.getDate()).padStart(2, "0");
      // 返回格式化后的日期字符串
      return `${date.getFullYear()}-${month}-${day}`;
    },
  },
};
</script>

<style>
#app {
  text-align: center;
  margin-top: 60px;
}

.draggable-row {
  display: inline-block;
  padding: 8px;
  margin: 4px;
  background-color: #f2f2f2;
  border: 1px solid #ddd;
  cursor: move;
}

.calendar {
  display: flex;
  flex-wrap: wrap;
  margin-top: 20px;
  justify-content: center;
}

.calendar-date {
  width: 100px;
  height: 100px;
  border: 1px solid #ccc;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 5px;
  border-radius: 5px;
}

.calendar-date.drag-over {
  border-color: #007bff;
  background-color: #e0f7fa;
}
</style>

效果图

项目引入的框架自行解决

相关推荐
山河木马30 分钟前
GPU自动处理专题3-NDC怎么映射成屏幕像素坐标(视口变换)
javascript·webgl·图形学
Appthing2 小时前
在 TanStack Start 中使用 VitePWA 的正确配置
javascript
前端炒粉3 小时前
手写promise
java·前端·javascript
mONESY3 小时前
Node.js fs 文件系统模块 四种读写方案全解析
javascript·后端
Larcher3 小时前
从回调地狱到优雅异步:Node.js 文件操作进化史
javascript·后端·架构
荒诞英雄3 小时前
从 17MB Vendor 大包到按需加载:Vite 多入口 Vue 组件库首屏优化实践
vue.js·vite
jsonbro3 小时前
手把手带你实现发布订阅模式
前端·vue.js·设计模式
熊猫钓鱼>_>3 小时前
Electron:当 Web 技术统治桌面
大数据·前端·javascript·人工智能·架构·electron·agent
江华森4 小时前
Python 实现高德地图找房(三):地图可视化与高德 JS API
开发语言·javascript·python
谭光志4 小时前
AI 是怎么操作浏览器的——browser use 实现原理
前端·javascript·ai编程