| <template> | 
|     <view class="u-load-more-wrap" :style="{ | 
|         backgroundColor: bgColor, | 
|         marginBottom: marginBottom + 'rpx', | 
|         marginTop: marginTop + 'rpx', | 
|         height: $u.addUnit(height) | 
|     }"> | 
|         <u-line color="#d4d4d4" length="50"></u-line> | 
|         <!-- 加载中和没有更多的状态才显示两边的横线 --> | 
|         <view :class="status == 'loadmore' || status == 'nomore' ? 'u-more' : ''" class="u-load-more-inner"> | 
|             <view class="u-loadmore-icon-wrap"> | 
|                 <u-loading class="u-loadmore-icon" :color="iconColor" :mode="iconType == 'circle' ? 'circle' : 'flower'" :show="status == 'loading' && icon"></u-loading> | 
|             </view> | 
|             <!-- 如果没有更多的状态下,显示内容为dot(粗点),加载特定样式 --> | 
|             <view class="u-line-1" :style="[loadTextStyle]" :class="[(status == 'nomore' && isDot == true) ? 'u-dot-text' : 'u-more-text']" @tap="loadMore"> | 
|                 {{ showText }} | 
|             </view> | 
|         </view> | 
|         <u-line color="#d4d4d4" length="50"></u-line> | 
|     </view> | 
| </template> | 
|   | 
| <script> | 
|     /** | 
|      * loadmore 加载更多 | 
|      * @description 此组件一般用于标识页面底部加载数据时的状态。 | 
|      * @tutorial https://www.uviewui.com/components/loadMore.html | 
|      * @property {String} status 组件状态(默认loadmore) | 
|      * @property {String} bg-color 组件背景颜色,在页面是非白色时会用到(默认#ffffff) | 
|      * @property {Boolean} icon 加载中时是否显示图标(默认true) | 
|      * @property {String} icon-type 加载中时的图标类型(默认circle) | 
|      * @property {String} icon-color icon-type为circle时有效,加载中的动画图标的颜色(默认#b7b7b7) | 
|      * @property {Boolean} is-dot status为nomore时,内容显示为一个"●"(默认false) | 
|      * @property {String} color 字体颜色(默认#606266) | 
|      * @property {String Number} margin-top 到上一个相邻元素的距离 | 
|      * @property {String Number} margin-bottom 到下一个相邻元素的距离 | 
|      * @property {Object} load-text 自定义显示的文字,见上方说明示例 | 
|      * @event {Function} loadmore status为loadmore时,点击组件会发出此事件 | 
|      * @example <u-loadmore :status="status" icon-type="iconType" load-text="loadText" /> | 
|      */ | 
|     export default { | 
|         name: "u-loadmore", | 
|         props: { | 
|             // 组件背景色 | 
|             bgColor: { | 
|                 type: String, | 
|                 default: 'transparent' | 
|             }, | 
|             // 是否显示加载中的图标 | 
|             icon: { | 
|                 type: Boolean, | 
|                 default: true | 
|             }, | 
|             // 字体大小 | 
|             fontSize: { | 
|                 type: String, | 
|                 default: '28' | 
|             }, | 
|             // 字体颜色 | 
|             color: { | 
|                 type: String,  | 
|                 default: '#606266' | 
|             }, | 
|             // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 | 
|             status: { | 
|                 type: String, | 
|                 default: 'loadmore' | 
|             }, | 
|             // 加载中状态的图标,flower-花朵状图标,circle-圆圈状图标 | 
|             iconType: { | 
|                 type: String, | 
|                 default: 'circle' | 
|             }, | 
|             // 显示的文字 | 
|             loadText: { | 
|                 type: Object, | 
|                 default () { | 
|                     return { | 
|                         loadmore: '加载更多', | 
|                         loading: '正在加载...', | 
|                         nomore: '没有更多了' | 
|                     } | 
|                 } | 
|             }, | 
|             // 在“没有更多”状态下,是否显示粗点 | 
|             isDot: { | 
|                 type: Boolean, | 
|                 default: false | 
|             }, | 
|             // 加载中显示圆圈动画时,动画的颜色 | 
|             iconColor: { | 
|                 type: String, | 
|                 default: '#b7b7b7' | 
|             }, | 
|             // 上边距 | 
|             marginTop: { | 
|                 type: [String, Number], | 
|                 default: 0 | 
|             }, | 
|             // 下边距 | 
|             marginBottom: { | 
|                 type: [String, Number], | 
|                 default: 0 | 
|             }, | 
|             // 高度,单位rpx | 
|             height: { | 
|                 type: [String, Number], | 
|                 default: 'auto' | 
|             } | 
|         }, | 
|         data() { | 
|             return { | 
|                 // 粗点 | 
|                 dotText: "●" | 
|             } | 
|         }, | 
|         computed: { | 
|             // 加载的文字显示的样式 | 
|             loadTextStyle() { | 
|                 return { | 
|                     color: this.color, | 
|                     fontSize: this.fontSize + 'rpx', | 
|                     position: 'relative', | 
|                     zIndex: 1, | 
|                     backgroundColor: this.bgColor, | 
|                     // 如果是加载中状态,动画和文字需要距离近一点 | 
|                 } | 
|             }, | 
|             // 加载中圆圈动画的样式 | 
|             cricleStyle() { | 
|                 return { | 
|                     borderColor: `#e5e5e5 #e5e5e5 #e5e5e5 ${this.circleColor}` | 
|                 } | 
|             }, | 
|             // 加载中花朵动画形式 | 
|             // 动画由base64图片生成,暂不支持修改 | 
|             flowerStyle() { | 
|                 return { | 
|                 } | 
|             }, | 
|             // 显示的提示文字 | 
|             showText() { | 
|                 let text = ''; | 
|                 if(this.status == 'loadmore') text = this.loadText.loadmore; | 
|                 else if(this.status == 'loading') text = this.loadText.loading; | 
|                 else if(this.status == 'nomore' && this.isDot) text = this.dotText; | 
|                 else text = this.loadText.nomore; | 
|                 return text; | 
|             } | 
|         }, | 
|         methods: { | 
|             loadMore() { | 
|                 // 只有在“加载更多”的状态下才发送点击事件,内容不满一屏时无法触发底部上拉事件,所以需要点击来触发 | 
|                 if(this.status == 'loadmore') this.$emit('loadmore'); | 
|             } | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style scoped lang="scss"> | 
|     @import "../../libs/css/style.components.scss"; | 
|      | 
|     /* #ifdef MP */ | 
|     // 在mp.scss中,赋予了u-line为flex: 1,这里需要一个明确的长度,所以重置掉它 | 
|     // 在组件内部,把组件名(u-line)当做选择器,在微信开发工具会提示不合法,但不影响使用 | 
|     u-line { | 
|         flex: none; | 
|     } | 
|     /* #endif */ | 
|      | 
|     .u-load-more-wrap { | 
|         @include vue-flex; | 
|         justify-content: center; | 
|         align-items: center; | 
|     } | 
|      | 
|     .u-load-more-inner { | 
|         @include vue-flex; | 
|         justify-content: center; | 
|         align-items: center; | 
|         padding: 0 12rpx; | 
|     } | 
|      | 
|     .u-more { | 
|         position: relative; | 
|         @include vue-flex; | 
|         justify-content: center; | 
|     } | 
|      | 
|     .u-dot-text { | 
|         font-size: 28rpx; | 
|     } | 
|      | 
|     .u-loadmore-icon-wrap { | 
|         margin-right: 8rpx; | 
|     } | 
|      | 
|     .u-loadmore-icon { | 
|         @include vue-flex; | 
|         align-items: center; | 
|         justify-content: center; | 
|     } | 
| </style> |