vue+elementui公共布局组件

632 阅读1分钟

前言

因为在做项目的时候,我们绝大部分的界面布局都是一样的。所以做一个简单的公共布局组件出来,后期维护或者改样式的时候,就会方便很多。这也是公共组件抽离的思维。

用的是elementUI的插槽slot

代码

// 公共的布局组件
<template>
    <el-container style="border:1px solid #ccc;margin: 0 1px;flex: 1;height: 100%;">
        <el-header class="powerdata-header" height='40px' v-if="hasHeader">
        // 头部一般放的是搜索条件,为了界面样式不变形,好看一点,所以我加了左右切动的箭头
            <i class="el-icon-arrow-left" style="z-index: 999" @mousedown="scrollLeft" @mouseup="clearLeft" v-show="left"></i>
            <slot name="header"></slot>
            <i class="el-icon-arrow-right" style="z-index: 999"  @mousedown="scrollRight" @mouseup="clearRight" v-show="right"></i>
        </el-header>
        <el-main style="padding: 0;">
            <slot></slot>
        </el-main>
        <el-footer style="height: 40px;" v-if="hasfooter">
            <slot name="footer"></slot>
        </el-footer>
    </el-container>
</template>
<script>

export default {
    data() {
        return {
            timeRight:'',
            timeLeft:'',
            left:false,
            right:false,
        };
    },
    computed: {},
    watch: {},
    props: {
        hasHeader:{
            type:Boolean,
            default:true
        },
        hasfooter:{
            type:Boolean,
            default:true
        }
    },
    methods: {
        scrollLeft(e){
            if(document.getElementById('form')){
                this.timeLeft = setInterval(() =>{
                    document.getElementById('form').scrollLeft -= 10
                    if(document.getElementById('form').scrollLeft == 0){

                        this.clearLeft();
                    }
                },50);
            }

        },
        scrollRight(e){
            if(document.getElementById('form')){
                console.log(e)
                this.timeRight = setInterval(() =>{
                    document.getElementById('form').scrollLeft += 10;
                    if(document.getElementById('form').scrollWidth == document.getElementById('form').clientWidth + document.getElementById('form').scrollLeft){
                        this.clearRight();
                    }
                },50);
            }
        },
        clearRight(){
            clearInterval(this.timeRight)
        },
        clearLeft(){
            clearInterval(this.timeLeft)
        },
    },
    mounted(){
        if(document.getElementById('form')){
            if(document.getElementById('form').scrollWidth > document.getElementById('form').clientWidth){
                this.right = true;
                this.left = true
            }
        }
    }

}
</script>
<style scoped>
.powerdata-header{
    background-color: #f2f2f2;
    display: flex;
    justify-content: space-around;
    align-items: center;
    overflow: hidden;
    width: 100%;
}

</style>

界面上的使用

因为用的比较多,百分之七十的界面都用的上,所以我直接在main.js里面注册成全局组件。

import container from './components/container.vue'
Vue.component('Container', container)

然后界面上