| <template> | 
|   <view class="tn-load-more-class tn-load-more"> | 
|     <view | 
|       class="tn-load-more__wrap" | 
|       :class="[backgroundColorClass]" | 
|       :style="[loadStyle]" | 
|     > | 
|       <view class="tn-load-more__line"></view> | 
|       <view | 
|         class="tn-load-more__content" | 
|         :class="[{'tn-load-more__content--more': (status === 'loadmore' || status === 'nomore')}]" | 
|       > | 
|         <view class="tn-load-more__loading"> | 
|           <tn-loading | 
|             class="tn-load-more__loading__icon" | 
|             :mode="loadingIconType" | 
|             :show="status === 'loading' && loadingIcon" | 
|             :color="loadingIconColor" | 
|           ></tn-loading> | 
|         </view> | 
|         <view | 
|           class="tn-load-more__text" | 
|           :class="[fontColorClass, {'tn-load-more__text--dot': (status === 'nomore' && dot)}]" | 
|           :style="[loadTextStyle]" | 
|         >{{ showText }}</view> | 
|       </view> | 
|       <view class="tn-load-more__line"></view> | 
|     </view> | 
|   </view> | 
| </template> | 
|   | 
| <script> | 
|   import componentsColorMixin from '../../libs/mixin/components_color.js' | 
|   export default { | 
|     name: 'tn-load-more', | 
|     mixins: [componentsColorMixin], | 
|     props: { | 
|       // 加载状态 | 
|       // loadmore -> 加载更多 | 
|       // loading -> 加载中 | 
|       // nomore -> 没有更多 | 
|       status: { | 
|         type: String, | 
|         default: 'loadmore' | 
|       }, | 
|       // 显示加载图标 | 
|       loadingIcon: { | 
|         type: Boolean, | 
|         default: true | 
|       }, | 
|       // 加载图标样式,参考tn-loading组件的加载类型 | 
|       loadingIconType: { | 
|         type: String, | 
|         default: 'circle' | 
|       }, | 
|       // 在圆圈加载状态下,圆圈的颜色 | 
|       loadingIconColor: { | 
|         type: String, | 
|         default: '' | 
|       }, | 
|       // 显示的文字 | 
|       loadText: { | 
|         type: Object, | 
|         default() { | 
|           return { | 
|             loadmore: '加载更多', | 
|             loading: '正在加载...', | 
|             nomore: '没有更多了' | 
|           } | 
|         } | 
|       }, | 
|       // 是否显示粗点,在nomore状态下生效 | 
|       dot: { | 
|         type: Boolean, | 
|         default: false | 
|       }, | 
|       // 自定义组件样式 | 
|       customStyle: { | 
|         type: Object, | 
|         default() { | 
|           return {} | 
|         } | 
|       } | 
|     }, | 
|     computed: { | 
|       loadStyle() { | 
|         let style = {} | 
|         if (this.backgroundColorStyle) { | 
|           style.backgroundColor = this.backgroundColorStyle | 
|         } | 
|         // 合并用户自定义样式 | 
|         if (Object.keys(this.customStyle).length > 0) { | 
|           Object.assign(style, this.customStyle) | 
|         } | 
|         return style | 
|       }, | 
|       loadTextStyle() { | 
|         let style = {} | 
|         if (this.fontColorStyle) { | 
|           style.color = this.fontColorStyle | 
|         } | 
|         if (this.fontSizeStyle) { | 
|           style.fontSize = this.fontSizeStyle | 
|           style.lineHeight = this.$t.string.getLengthUnitValue(this.fontSize + 2, this.fontUnit) | 
|         } | 
|         return style | 
|       }, | 
|       // 显示的提示文字 | 
|       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.dot) text = this.dotText | 
|         else text = this.loadText.nomore || '没有更多了' | 
|          | 
|         return text | 
|       } | 
|     }, | 
|     data() { | 
|       return { | 
|         // 粗点 | 
|         dotText: '●' | 
|       } | 
|     }, | 
|     methods: { | 
|       // 处理加载更多事件 | 
|       loadMore() { | 
|         // 只有在 loadmore 状态下点击才会发送点击事件,内容不满一屏时无法触发底部上拉事件,所以需要点击来触发 | 
|         if (this.status === 'loadmore') this.$emit('loadmore') | 
|       } | 
|     } | 
|   } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|   .tn-load-more { | 
|      | 
|     &__wrap { | 
|       background-color: transparent; | 
|       display: flex; | 
|       flex-direction: row; | 
|       justify-content: center; | 
|       align-items: center; | 
|       color: $tn-content-color; | 
|     } | 
|      | 
|     &__line { | 
|       vertical-align: middle; | 
|       border: 1px solid $tn-content-color; | 
|       width: 50rpx; | 
|       transform: scaleY(0.5); | 
|     } | 
|      | 
|     &__content { | 
|       display: flex; | 
|       flex-direction: row; | 
|       justify-content: center; | 
|       align-items: center; | 
|       padding: 0 12rpx; | 
|        | 
|       &--more { | 
|         position: relative; | 
|       } | 
|     } | 
|      | 
|     &__loading { | 
|       margin-right: 8rpx; | 
|        | 
|       &__icon { | 
|         display: flex; | 
|         flex-direction: row; | 
|         justify-content: center; | 
|         align-items: center; | 
|       } | 
|     } | 
|      | 
|     &__text { | 
|       overflow: hidden; | 
|       white-space: nowrap; | 
|       text-overflow: ellipsis; | 
|       line-height: 30rpx; | 
|        | 
|       &--dot { | 
|         font-size: 28rpx; | 
|       } | 
|     } | 
|   } | 
| </style> |