Newer
Older
BigScreenDatav / src / views / layout / commonLayout1.vue
StephanieGitHub on 15 Jul 2021 3 KB first commit
<!--
 * @Description: 上方标题,下方左中右布局
 * @Author: 王晓颖
 * @Date: 2021-07-13 14:46:17
 -->
<template>
  <div class="screenContainer">
    <vuescroll>
      <dv-full-screen-container class="bg">
        <slot/>
        <!--标题-->
        <div class="screen-title" :style="{'height':titleHeight}">
          <slot name="title"></slot>
        </div>
        <!--加载中-->
        <div v-if="loading" class="loading">
          <a-spin size="large" tip="Loading..."/>
        </div>
        <!--内容-->
        <div v-else class="screen-content">
          <a-row v-if="scale&&scale.length>0" class="content-row">
            <a-col v-if="scale[0]" :span="scale[0]" class="content-col">
              <div class="content-left" :style="{'padding':padding}">
                <slot name="left"></slot>
              </div>
            </a-col>
            <a-col v-if="scale[1]" :span="scale[1]" class="content-col">
              <div class="content-middle" :style="{'padding':padding}" >
                <slot name="middle"></slot>
              </div>
            </a-col>
            <a-col v-if="scale[2]" :span="scale[2]" class="content-col">
              <div class="content-right" :style="{'padding':padding}">
                <slot name="right"/>
              </div>
            </a-col>
          </a-row>
        </div>
      </dv-full-screen-container>
    </vuescroll>

  </div>
</template>

<script>
  export default {
    name: "commonLayout1",
    props:{
      titleHeight:{
        type: String,
        default: '1rem'
      }, // 标题区高度
      scale: {
        type: Array,
        default:()=>{
          return [6,12,6]
        },
        validator: (val)=>{
          let sum = 0
          val.forEach(val=>{
            if (typeof val === 'number'){ // 校验元素类型
              sum+=val
            }else{
              return false
            }
          })
          if(sum!==24){ // 校验和
            return false
          }
          return true
        }
      },// 下方内容区比例,和必须为24
      padding: {
        type: String,
        default: '0.1rem'
      },
      loading:{
        type: Boolean,
        default: false
      } // 加载状态
    }
  }
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.screenContainer{
  width:100%;
  height:100%;
  .bg{
    display: flex;
    flex-direction: column;
  }
  .screen-title{
    width:100%;
  }
  .loading{
    position: absolute;
    top:40%;
    left:50%;
    transform: translate(-50%,-50%);
  }
  .screen-content{
    flex: 1;
    width: 100%;
    /*background-color: #f0f0f0;*/
    .content-row{
      height: 100%;
    }
    .content-col {
      height:100%;
    }
    .content-left{
        padding: 0.1rem;
      height: 100%;
      /*background-color: #4f98ee;*/
    }
    .content-middle{
      padding: 0.1rem;
      height: 100%;
      /*background-color: #33cea0;*/
    }
    .content-right{
      padding: 0.1rem;
      height: 100%;
      /*background-color: #4f98ee;*/
    }
  }
}
</style>

<style>
  #dv-full-screen-container{

  }
</style>