<template> 
 | 
    <view class="uni-group" :class="['uni-group--'+mode ,margin?'group-margin':'']" :style="{marginTop: `${top}px` }"> 
 | 
        <slot name="title"> 
 | 
            <view v-if="title" class="uni-group__title" :style="{'padding-left':border?'30px':'15px'}"> 
 | 
                <text class="uni-group__title-text">{{ title }}</text> 
 | 
            </view> 
 | 
        </slot> 
 | 
        <view class="uni-group__content" :class="{'group-conent-padding':border}"> 
 | 
            <slot /> 
 | 
        </view> 
 | 
    </view> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    /** 
 | 
     * Group 分组 
 | 
     * @description 表单字段分组 
 | 
     * @tutorial https://ext.dcloud.net.cn/plugin?id=3281 
 | 
     * @property {String} title 主标题 
 | 
     * @property {Number} top 分组间隔 
 | 
     * @property {Number} mode 模式 
 | 
     */ 
 | 
    export default { 
 | 
        name: 'uniGroup', 
 | 
        emits:['click'], 
 | 
        props: { 
 | 
            title: { 
 | 
                type: String, 
 | 
                default: '' 
 | 
            }, 
 | 
            top: { 
 | 
                type: [Number, String], 
 | 
                default: 10 
 | 
            }, 
 | 
            mode: { 
 | 
                type: String, 
 | 
                default: 'default' 
 | 
            } 
 | 
        }, 
 | 
        data() { 
 | 
            return { 
 | 
                margin: false, 
 | 
                border: false 
 | 
            } 
 | 
        }, 
 | 
        watch: { 
 | 
            title(newVal) { 
 | 
                if (uni.report && newVal !== '') { 
 | 
                    uni.report('title', newVal) 
 | 
                } 
 | 
            } 
 | 
        }, 
 | 
        created() { 
 | 
            this.form = this.getForm() 
 | 
            if (this.form) { 
 | 
                this.margin = true 
 | 
                this.border = this.form.border 
 | 
            } 
 | 
        }, 
 | 
        methods: { 
 | 
            /** 
 | 
             * 获取父元素实例 
 | 
             */ 
 | 
            getForm() { 
 | 
                let parent = this.$parent; 
 | 
                let parentName = parent.$options.name; 
 | 
                while (parentName !== 'uniForms') { 
 | 
                    parent = parent.$parent; 
 | 
                    if (!parent) return false 
 | 
                    parentName = parent.$options.name; 
 | 
                } 
 | 
                return parent; 
 | 
            }, 
 | 
            onClick() { 
 | 
                this.$emit('click') 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</script> 
 | 
<style lang="scss" scoped> 
 | 
    .uni-group { 
 | 
        background: #fff; 
 | 
        margin-top: 10px; 
 | 
        // border: 1px red solid; 
 | 
    } 
 | 
  
 | 
    .group-margin { 
 | 
        // margin: 0 -15px; 
 | 
    } 
 | 
  
 | 
    .uni-group__title { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: row; 
 | 
        align-items: center; 
 | 
        padding-left: 15px; 
 | 
        height: 40px; 
 | 
        background-color: #eee; 
 | 
        font-weight: normal; 
 | 
        color: #666; 
 | 
    } 
 | 
  
 | 
    .uni-group__content { 
 | 
        padding: 15px; 
 | 
        // padding-bottom: 5px; 
 | 
        // background-color: #FFF; 
 | 
    } 
 | 
  
 | 
    .group-conent-padding { 
 | 
        padding: 0 15px; 
 | 
    } 
 | 
  
 | 
    .uni-group__title-text { 
 | 
        font-size: 14px; 
 | 
        color: #666; 
 | 
    } 
 | 
  
 | 
    .distraction { 
 | 
        flex-direction: row; 
 | 
        align-items: center; 
 | 
    } 
 | 
  
 | 
    .uni-group--card { 
 | 
        margin: 10px; 
 | 
        border-radius: 5px; 
 | 
        overflow: hidden; 
 | 
        box-shadow: 0 0 5px 1px rgba($color: #000000, $alpha: 0.08); 
 | 
    } 
 | 
</style> 
 |