vue-gird-layout組件封裝,cv就可以使用

先來效果圖展示

展示.png

拖拽尺寸.png

拖拽后.png

移動(dòng).png

組件封裝大家這塊直接復(fù)制使用就OK

<template>
    <grid-layout
            :layout="layout"
            :col-num="colNum"
            :row-height="rowHeight"
            :is-mirrored="isMirrored"
            :vertical-compact="verticalCompact"
            :margin="margin"
            :use-css-transforms="useCssTransforms"
            :useStyleCursor="useStyleCursor"
            :is-draggable="isDraggable"
            :is-resizable="isResizable"
            @layout-updated="layoutUpdatedEvent"
    >
        <grid-item v-for="(item, index) in layout"
            :x="item.x"
            :y="item.y"
            :w="item.w"
            :h="item.h"
            :i="item.i"
            :minW="minW"
            :minH="minH"
            :key="index"
            @resized="resize(item.i)">
            <slot name="chart" :item="item" :index="index"></slot>
        </grid-item>
    </grid-layout>
</template>

<script>
import VueGridLayout from 'vue-grid-layout';
// import Chart from "@/components/chart/index.vue";
export default {
    components: {
        GridLayout: VueGridLayout.GridLayout,
        GridItem: VueGridLayout.GridItem,
        // Chart
    },
    props: {
        // 布局?jǐn)?shù)據(jù)
        layout: {
            type: Array,
            default: () => []
        },
        // 是否可拖拽
        isDraggable: {
            type: Boolean,
            default: true
        },
        // 是否可改變大小
        isResizable: {
            type: Boolean,
            default: true
        },
        // 多少列
        colNum: {
            type: Number,
            default: 12
        },
        // 每行得高度
        rowHeight: {
            type: Number,
            default: 30
        },
        // 是否可鏡像反轉(zhuǎn)
        isMirrored: {
            type: Boolean,
            default: false
        },
        // 標(biāo)識(shí)布局是否垂直壓縮
        verticalCompact: {
            type: Boolean,
            default: true
        },
        // 定義柵格中的元素邊距
        margin: {
            type: Array,
            default: () => [10,10]
        },
        // 標(biāo)識(shí)是否使用CSS屬性 transition-property: transform;
        useCssTransforms: {
            type: Boolean,
            default: true
        },
        // 是否使用動(dòng)態(tài)鼠標(biāo)指針樣式
        useStyleCursor: {
            type: Boolean,
            default: true
        },
        // 元素最小寬
        minW: {
            type: Number,
            default: 1
        },
        // 最小高
        minH: {
            type: Number,
            default: 1
        },
        show: {
            type: Boolean,
            default: false
        }
    },
    data() {
        return {
            height: '',
            option: {},
            gridShow: false
        }
    },
    methods: {
        layoutUpdatedEvent(newLayout) {
            this.$emit('layoutUpdatedEvent',newLayout)
        },
        // 更新resize
        resize(i) {
            this.$emit('resize',i)
        }
    }
}
</script>

<style lang="scss" scoped>
:deep(.el-card__body) {
    height: 100%;
}
</style>

組件的調(diào)用(主要是使用這塊 上面的直接復(fù)制即可)

<template>
    <div>
        <gridCanvas :layout="layout" @layoutUpdatedEvent="layoutUpdatedEvent" @resize="resize">
            <template #chart="{item,index}">
                <el-card v-if="show" ref="elCard" style="height: 100%" :key="item.i">
                    <Chart :ref="'echarts'+item.i" :chartsData="item.data" :radioShow="false" :height="'100%'" :id="index"></Chart>
                </el-card>
            </template>
        </gridCanvas>
    </div>
</template>

<script>
import gridCanvas from "@/components/gridCanvas/index.vue";
import Chart from "@/components/chart/index.vue";
export default {
    components: {
        gridCanvas,
        Chart
    },
    data() {
        return {
            show: false,
            layout: [
                {"x":0,"y":0,"w":6,"h":10,"i":"0",
                    data: {
                        descData: ["廣東省", "江蘇省", "北京市", "浙江省", "山東省", "四川省", "河南省", "上海市12345", "河北省", "其他", "福建省", "安徽省", "湖北省", "遼寧省"],
                        dis_type: "barh",
                        label_desc: "最近一次測(cè)試",
                        label_id: 5,
                        subtext: "99.99%",
                        text: "圖標(biāo)1",
                        xData: [2211, 333, 372, 226, 248, 218, 103, 199, 174, 177, 146, 148, 171, 162],
                        yData: ["廣東省", "江蘇省", "北京市", "浙江省", "山東省", "四川省", "河南省", "上海市", "河北省", "其他", "福建省", "安徽省", "湖北省", "遼寧省"],
                    }
                },
                {"x":4,"y":0,"w":4,"h":8,"i":"1",
                    data: {
                        descData: ["廣東省", "江蘇省", "北京市", "浙江省", "山東省", "四川省", "河南省", "上海市12345", "河北省", "其他", "福建省", "安徽省", "湖北省", "遼寧省"],
                        dis_type: "pie",
                        label_desc: "最近二次測(cè)試",
                        label_id: 5,
                        subtext: "99.99%",
                        text: "圖標(biāo)2",
                        xData: [810, 357, 372, 226, 248, 218, 193, 189, 174, 477, 146, 148, 131, 162],
                        yData: ["廣東省", "江蘇省", "北京市", "浙江省", "山東省", "四川省", "河南省", "上海市", "河北省", "其他", "福建省", "安徽省", "湖北省", "遼寧省"],
                    }
                },
                {"x":0,"y":5,"w":4,"h":8,"i":"6",
                    data: {
                        descData: ["廣東省", "江蘇省", "北京市", "浙江省", "山東省", "四川省", "河南省", "上海市12345", "河北省", "其他", "福建省", "安徽省", "湖北省", "遼寧省"],
                        dis_type: "bar",
                        label_desc: "最近三次測(cè)試",
                        label_id: 5,
                        subtext: "99.99%",
                        text: "圖標(biāo)3",
                        xData: [810, 377, 342, 286, 274, 219, 190, 199, 174, 147, 146, 438, 171, 162],
                        yData: ["廣東省", "江蘇省", "北京市", "浙江省", "山東省", "四川省", "河南省", "上海市", "河北省", "其他", "福建省", "安徽省", "湖北省", "遼寧省"],
                    }
                },
            ]
        }
    },
    methods: {
        // 拖拽之后觸發(fā)
        layoutUpdatedEvent(newLayout) {
            console.log(newLayout)
        },
        resize(i) {
            this.$nextTick(() => {
                const chart = eval(`this.$refs.echarts${i}`)
                if(chart) {
                    chart.resize()
                }
            })
        }
    },
    mounted() {
        setTimeout(() => {
            this.show = true
        })
    }
}
</script>

<style lang="scss" scoped>
:deep(.el-card__body) {
    height: 100%;
}
</style>

使用講解

直接引用我們自己封裝的組件 代碼中chart組件為我自己封裝的echarts組件,后續(xù)我會(huì)更新,你只需講chart組件換為你自己封裝的組件 其中#chart為插槽參數(shù) (其實(shí)就是每塊的數(shù)據(jù))layout變量為grid的核心數(shù)據(jù),分別代表x軸坐標(biāo)y軸坐標(biāo)寬度和高度其中data為你需要渲染的數(shù)據(jù) 還不能使用的 直接評(píng)論區(qū)見

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蟹倾,一起剝皮案震驚了整個(gè)濱河市勺三,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爬泥,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坦康,居然都是意外死亡攻泼,警方通過查閱死者的電腦和手機(jī)火架,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忙菠,“玉大人何鸡,你說我怎么就攤上這事∨;叮” “怎么了骡男?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長傍睹。 經(jīng)常有香客問我隔盛,道長,這世上最難降的妖魔是什么拾稳? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任吮炕,我火速辦了婚禮,結(jié)果婚禮上熊赖,老公的妹妹穿的比我還像新娘来屠。我一直安慰自己,他們只是感情好震鹉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布俱笛。 她就那樣靜靜地躺著,像睡著了一般传趾。 火紅的嫁衣襯著肌膚如雪迎膜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天浆兰,我揣著相機(jī)與錄音磕仅,去河邊找鬼。 笑死簸呈,一個(gè)胖子當(dāng)著我的面吹牛榕订,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜕便,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼劫恒,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起两嘴,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤丛楚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后憔辫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趣些,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年贰您,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坏平。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枉圃,死狀恐怖功茴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情孽亲,我是刑警寧澤坎穿,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站返劲,受9級(jí)特大地震影響玲昧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜篮绿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一孵延、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亲配,春花似錦尘应、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至思灰,卻和暖如春玷犹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洒疚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工巍扛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撤奸,地道東北人寂呛。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓瘾晃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劫拢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容