<template> 
 | 
    <view 
 | 
        class="u-loadmore" 
 | 
        :style="[ 
 | 
            $u.addStyle(customStyle), 
 | 
            { 
 | 
                backgroundColor: bgColor, 
 | 
                marginBottom: $u.addUnit(marginBottom), 
 | 
                marginTop: $u.addUnit(marginTop), 
 | 
                height: $u.addUnit(height), 
 | 
            }, 
 | 
        ]" 
 | 
    > 
 | 
        <u-line 
 | 
            length="140rpx" 
 | 
            :color="lineColor" 
 | 
            :hairline="false" 
 | 
            :dashed="dashed" 
 | 
            v-if="line" 
 | 
        ></u-line> 
 | 
        <!-- 加载中和没有更多的状态才显示两边的横线 --> 
 | 
        <view 
 | 
            :class="status == 'loadmore' || status == 'nomore' ? 'u-more' : ''" 
 | 
            class="u-loadmore__content" 
 | 
        > 
 | 
            <view 
 | 
                class="u-loadmore__content__icon-wrap" 
 | 
                v-if="status === 'loading' && icon" 
 | 
            > 
 | 
                <u-loading-icon 
 | 
                    :color="iconColor" 
 | 
                    :size="iconSize" 
 | 
                    :mode="loadingIcon" 
 | 
                ></u-loading-icon> 
 | 
            </view> 
 | 
            <!-- 如果没有更多的状态下,显示内容为dot(粗点),加载特定样式 --> 
 | 
            <text 
 | 
                class="u-line-1" 
 | 
                :style="[loadTextStyle]" 
 | 
                :class="[(status == 'nomore' && isDot == true) ? 'u-loadmore__content__dot-text' : 'u-loadmore__content__text']" 
 | 
                @tap="loadMore" 
 | 
            >{{ showText }}</text> 
 | 
        </view> 
 | 
        <u-line 
 | 
            length="140rpx" 
 | 
            :color="lineColor" 
 | 
            :hairline="false" 
 | 
            :dashed="dashed" 
 | 
            v-if="line" 
 | 
        ></u-line> 
 | 
    </view> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    import props from './props.js'; 
 | 
  
 | 
    /** 
 | 
     * loadmore 加载更多 
 | 
     * @description 此组件一般用于标识页面底部加载数据时的状态。 
 | 
     * @tutorial https://www.uviewui.com/components/loadMore.html 
 | 
     * @property {String}            status            组件状态(默认 'loadmore' ) 
 | 
     * @property {String}            bgColor            组件背景颜色,在页面是非白色时会用到(默认 'transparent' ) 
 | 
     * @property {Boolean}            icon            加载中时是否显示图标(默认 true ) 
 | 
     * @property {String | Number}    fontSize        字体大小(默认 14 ) 
 | 
     * @property {String | Number}    iconSize        图标大小(默认 17 ) 
 | 
     * @property {String}            color            字体颜色(默认 '#606266' ) 
 | 
     * @property {String}            loadingIcon        加载图标(默认 'circle' ) 
 | 
     * @property {String}            loadmoreText    加载前的提示语(默认 '加载更多' ) 
 | 
     * @property {String}            loadingText        加载中提示语(默认 '正在加载...' ) 
 | 
     * @property {String}            nomoreText        没有更多的提示语(默认 '没有更多了' ) 
 | 
     * @property {Boolean}            isDot            到上一个相邻元素的距离 (默认 false ) 
 | 
     * @property {String}            iconColor        加载中图标的颜色 (默认 '#b7b7b7' ) 
 | 
     * @property {String}            lineColor        线条颜色(默认 #E6E8EB ) 
 | 
     * @property {String | Number}    marginTop        上边距 (默认 10 ) 
 | 
     * @property {String | Number}    marginBottom    下边距 (默认 10 ) 
 | 
     * @property {String | Number}    height            高度,单位px (默认 'auto' ) 
 | 
     * @property {Boolean}            line            是否显示左边分割线  (默认 false ) 
 | 
     * @property {Boolean}            dashed        // 是否虚线,true-虚线,false-实线  (默认 false ) 
 | 
     * @event {Function} loadmore status为loadmore时,点击组件会发出此事件 
 | 
     * @example <u-loadmore :status="status" icon-type="iconType" load-text="loadText" /> 
 | 
     */ 
 | 
    export default { 
 | 
        name: "u-loadmore", 
 | 
        mixins: [uni.$u.mpMixin, uni.$u.mixin,props], 
 | 
        data() { 
 | 
            return { 
 | 
                // 粗点 
 | 
                dotText: "●" 
 | 
            } 
 | 
        }, 
 | 
        computed: { 
 | 
            // 加载的文字显示的样式 
 | 
            loadTextStyle() { 
 | 
                return { 
 | 
                    color: this.color, 
 | 
                    fontSize: uni.$u.addUnit(this.fontSize), 
 | 
                    lineHeight: uni.$u.addUnit(this.fontSize), 
 | 
                    backgroundColor: this.bgColor, 
 | 
                } 
 | 
            }, 
 | 
            // 显示的提示文字 
 | 
            showText() { 
 | 
                let text = ''; 
 | 
                if (this.status == 'loadmore') text = this.loadmoreText 
 | 
                else if (this.status == 'loading') text = this.loadingText 
 | 
                else if (this.status == 'nomore' && this.isDot) text = this.dotText; 
 | 
                else text = this.nomoreText; 
 | 
                return text; 
 | 
            } 
 | 
        }, 
 | 
        methods: { 
 | 
            loadMore() { 
 | 
                // 只有在“加载更多”的状态下才发送点击事件,内容不满一屏时无法触发底部上拉事件,所以需要点击来触发 
 | 
                if (this.status == 'loadmore') this.$emit('loadmore'); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    @import "../../libs/css/components.scss"; 
 | 
  
 | 
    .u-loadmore { 
 | 
        @include flex(row); 
 | 
        align-items: center; 
 | 
        justify-content: center; 
 | 
        flex: 1; 
 | 
  
 | 
        &__content { 
 | 
            margin: 0 15px; 
 | 
            @include flex(row); 
 | 
            align-items: center; 
 | 
            justify-content: center; 
 | 
  
 | 
            &__icon-wrap { 
 | 
                margin-right: 8px; 
 | 
            } 
 | 
  
 | 
            &__text { 
 | 
                font-size: 14px; 
 | 
                color: $u-content-color; 
 | 
            } 
 | 
  
 | 
            &__dot-text { 
 | 
                font-size: 15px; 
 | 
                color: $u-tips-color; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</style> 
 |