首页模块可自由拖动的切换位置,带动画效果

需求:在其他页面添加首页报表模块。模块添加到首页后,可随意拖动,并插入当前位置。

<template>
    <div class="content-default" style="padding: unset;overflow-y: scroll">
        <transition-group tag="div" class="container">
            <div class="item" v-for="(item,index) in items" :key="item.key "
                 draggable="true"
                 @dragstart="handleDragStart($event, index)"
                 @drop.prevent="drop($event, index)"
                 @dragover.prevent>
                <div style="margin: 10px;border: 1px solid #c0c4cc;height: calc(100% - 20px);width: calc(100% - 20px)">
                    <div style="width: 100%;height: 40px;background: #f1f1f1;">
                        <span style="display: inline-block;margin-left: 20px;font-weight: 600;font-size: 18px;border-left: 6px solid #1890ff;line-height: 18px;margin-top: 10px;padding-left: 6px">顾客类型分布</span>
                        <span style="font-size: 12px;color: #c0c4cc;display: inline-block">(全品牌/全部性别/2019-10-10至2019-11-15)</span>
                        <i class="el-icon-delete" style="float: right;display: inline-block;line-height: 40px;margin-right: 15px;cursor: pointer"></i>
                    </div>
                    <ve-ring :series="item.series" width="100%" height="calc(100% - 40px)" :legend="item.legend"></ve-ring>
                </div>
            </div>
        </transition-group>
    </div>
</template>

<script>

    export default {

        name: 'Toolbar',

        data() {
            return {
                items: [],
                draggingIndex: 0, //拖动div的下标
                dropIndex: 0 //拖到那个div的下标
            }
        },
        mounted() {
            //初始化图表结构
            for (let i = 0; i < 5; i++) {
                this.items.push(
                    {
                        key:i,
                        series: [
                            {
                            name: '访问来源',
                            type: 'pie',
                            radius: ['50%', '70%'],
                            avoidLabelOverlap: false,
                            center: ["30%", "50%"],
                            label: {
                                show:false
                            },
                            labelLine: {
                                normal: {
                                    show: false
                                }
                            },
                            data: [
                                {value: 335, name: '直接访问'},
                                {value: 310, name: '邮件营销'},
                                {value: 234, name: '联盟广告'},
                                {value: 135, name: '视频广告'},
                                {value: 1548, name: '搜索引擎'}
                            ]
                        }
                        ],
                        legend: {
                            orient: 'vertical',
                            x: '60%',
                            y: "15%",
                            data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎']
                        }
                    }
                )
            }
        },

        methods: {
            handleDragStart(e, index) {
                this.draggingIndex = index;
            },
            drop(e, index) {
                if (index === this.draggingIndex) {
                    return
                }
                this.items.splice(index, 0, this.items.splice(this.draggingIndex, 1)[0]);
            }
        }
    }

</script>

<style scoped>

    .container {
        width: 100%;
        height: 100%;
    }

    .item {
        width: 50%;
        height: 50%;
        float: left;
        transition: all linear .3s;
    }

</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值