<!--

  • @Description: 简化版的理论我的项目,模仿在element日历组件上拖拽工作

-->
<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><title>Document</title>

</head>
<body>
<div id="app">

<el-calendar>   <template slot="dateCell"  slot-scope="{date, data}">     <div style="height:100%;width:100%"          @dragenter="dragenter"           @drop="drop(data)"           @dragover="dragover"          @dragleave="dragleave"     >        <p v-for="(item,index) in array[data.day.split('-').join('-')]"            style="width:80%"           draggable="true"           @dragstart="dragstart(data,index)"           @dragend="dragend"        >{{item.name}}        </p>     </div>  </template></el-calendar>

</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>

var app = new Vue({    el: '#app',    data: {        array:{            '2021-04-05':[                {name:'工作一'},{name:'工作二'}            ],            '2021-04-06':[                {name:'工作三'},{name:'工作四'}            ],            '2021-04-07':[                {name:'工作五'},{name:'工作六'}            ],            '2021-04-08':[                            ]        },        sourceElement:'',        targetElement:'',        index:''    },    methods: {        dragstart(source,index){            console.log(source,'dragstart')            this.sourceElement=source.day;            this.index=index;        },        dragend(source){            console.log(source,'dragend')        },        dragenter(target){            console.log(target,'dragenter')        },        dragleave(source){            console.log(source,'dragleave')        },        dragover(target){            //须要阻止默认行为,不然不会触发drop办法            target.preventDefault();        },        drop(target){            console.log(target,'drop');             this.targetElement=target.day;            if(this.targetElement!=this.sourceElement){                if(!this.array[this.targetElement]){                    this.$set(this.array,this.targetElement,[])                };                //先在源数组革除该元素                let arr=JSON.stringify(this.array[this.sourceElement][this.index]);                this.array[this.sourceElement].splice(this.index,1);                //在指标数组增加该元素                this.array[this.targetElement].push(JSON.parse(arr));                //最初调用api保留            }        }    }})

</script>