463 lines
34 KiB
Vue
463 lines
34 KiB
Vue
<!-- _
|
||
____ _ __ __ _ __ _(_)_ __ __ _
|
||
|_ /____| '_ \ / _` |/ _` | | '_ \ / _` |
|
||
/ /_____| |_) | (_| | (_| | | | | | (_| |
|
||
/___| | .__/ \__,_|\__, |_|_| |_|\__, |
|
||
|_| |___/ |___/
|
||
V2.0.1
|
||
by ZXLee 2021-08-17
|
||
-- >
|
||
<!-- API文档地址:http://z-paging.com -->
|
||
<!-- github地址:https://github.com/SmileZXLee/uni-z-paging -->
|
||
<!-- dcloud地址:https://ext.dcloud.net.cn/plugin?id=3935 -->
|
||
<!-- 反馈QQ群:790460711 -->
|
||
|
||
<template name="z-paging">
|
||
<!-- #ifndef APP-NVUE -->
|
||
<view :class="!usePageScroll&&fixed?'z-paging-content z-paging-content-fixed':'z-paging-content'"
|
||
:style="[finalPagingStyle]">
|
||
<!-- 顶部固定的slot -->
|
||
<slot v-if="!usePageScroll&&$slots.top" name="top"></slot>
|
||
<view class="zp-page-scroll-top" v-else-if="usePageScroll&&$slots.top" :style="[{'top':`${windowTop}px`,'z-index':topZIndex}]">
|
||
<slot name="top"></slot>
|
||
</view>
|
||
<view :class="{'zp-scroll-view-super':!usePageScroll}" :style="[finalScrollViewStyle]">
|
||
<scroll-view
|
||
:class="{'zp-scroll-view':true,'zp-scroll-view-absolute':!usePageScroll}"
|
||
:scroll-top="scrollTop"
|
||
:scroll-y="scrollable&&!usePageScroll&&scrollEnable" :enable-back-to-top="finalEnableBackToTop"
|
||
:show-scrollbar="showScrollbar" :scroll-with-animation="finalScrollWithAnimation"
|
||
:scroll-into-view="scrollIntoView" :lower-threshold="finalLowerThreshold" :upper-threshold="5"
|
||
:refresher-enabled="finalRefresherEnabled&&!useCustomRefresher" :refresher-threshold="finalRefresherThreshold"
|
||
:refresher-default-style="finalRefresherDefaultStyle" :refresher-background="refresherBackground"
|
||
:refresher-triggered="refresherTriggered" @scroll="_scroll" @scrolltolower="_onLoadingMore('toBottom')"
|
||
@scrolltoupper="_scrollToUpper" @refresherrestore="_onRestore" @refresherrefresh="_onRefresh"
|
||
>
|
||
<view class="zp-paging-touch-view"
|
||
<!-- #ifndef APP-VUE || MP-WEIXIN || MP-QQ || H5 -->
|
||
@touchstart="_refresherTouchstart" @touchmove="_refresherTouchmove" @touchend="_refresherTouchend" @touchcancel="_refresherTouchend"
|
||
<!-- #endif -->
|
||
<!-- #ifdef APP-VUE || MP-WEIXIN || MP-QQ || H5 -->
|
||
@touchstart="pagingWxs.touchstart" @touchmove="pagingWxs.touchmove" @touchend="pagingWxs.touchend" @touchcancel="pagingWxs.touchend"
|
||
@mousedown="pagingWxs.mousedown" @mousemove="pagingWxs.mousemove" @mouseup="pagingWxs.mouseup" @mouseleave="pagingWxs.mouseleave"
|
||
<!-- #endif -->
|
||
>
|
||
<view v-if="finalRefresherFixedBacHeight>0" class="zp-fixed-bac-view" :style="[{'background-color': refresherFixedBackground,'height': `${finalRefresherFixedBacHeight}px`}]"></view>
|
||
<view class="zp-paging-main" :style="[{'transform': finalRefresherTransform,'transition': refresherTransition}]"
|
||
<!-- #ifdef APP-VUE || MP-WEIXIN || MP-QQ || H5 -->
|
||
:change:prop="pagingWxs.propObserver" :prop="wxsPropType"
|
||
:data-refresherThreshold="finalRefresherThreshold" :data-isIos="isIos" :data-isIos13="isIos13"
|
||
:data-loading="loading" :data-useChatRecordMode="useChatRecordMode"
|
||
:data-refresherEnabled="refresherEnabled" :data-useCustomRefresher="useCustomRefresher" :data-pageScrollTop="wxsPageScrollTop"
|
||
:data-scrollTop="wxsScrollTop" :data-refresherMaxAngle="refresherMaxAngle"
|
||
:data-refresherAecc="refresherAngleEnableChangeContinued" :data-usePageScroll="usePageScroll"
|
||
:data-oldIsTouchmoving="isTouchmoving" :data-refresherOutRate="finalRefresherOutRate"
|
||
<!-- #endif -->
|
||
<!-- #ifdef APP-VUE || H5 -->
|
||
:change:renderPropScrollTop="pagingRenderjs.renderPropScrollTopChange" :renderPropScrollTop="renderPropScrollTop"
|
||
:change:renderPropUsePageScroll="pagingRenderjs.renderPropUsePageScrollChange" :renderPropUsePageScroll="renderPropUsePageScroll"
|
||
<!-- #endif -->
|
||
>
|
||
<view v-if="showRefresher" class="zp-custom-refresher-view"
|
||
:style="[{'margin-top': `-${finalRefresherThreshold}px`,'background-color': refresherBackground}]">
|
||
<view class="zp-custom-refresher-container" :style="[{'height': `${finalRefresherThreshold}px`,'background-color': refresherBackground}]">
|
||
<!-- 下拉刷新view -->
|
||
<view
|
||
class="zp-custom-refresher-slot-view">
|
||
<slot
|
||
<!-- #ifndef MP-QQ -->
|
||
:refresherStatus="refresherStatus"
|
||
<!-- #endif -->
|
||
name="refresher" />
|
||
</view>
|
||
<z-paging-refresh ref="refresh" v-if="!showCustomRefresher" :style="[{'height': `${finalRefresherThreshold}px`}]" :refresherStatus="refresherStatus"
|
||
:defaultThemeStyle="finalRefresherThemeStyle" :refresherDefaultText="finalRefresherDefaultText"
|
||
:refresherPullingText="finalRefresherPullingText" :refresherRefreshingText="finalRefresherRefreshingText"
|
||
:showRefresherUpdateTime="showRefresherUpdateTime" :refresherUpdateTimeKey="refresherUpdateTimeKey"></z-paging-refresh>
|
||
</view>
|
||
</view>
|
||
<view class="zp-paging-container">
|
||
<slot v-if="useChatRecordMode&&$slots.chatLoading&&loadingStatus!==2&&realTotalData.length"
|
||
name="chatLoading" />
|
||
<view v-else-if="useChatRecordMode&&loadingStatus!==2&&realTotalData.length"
|
||
class="zp-chat-record-loading-container">
|
||
<text v-if="loadingStatus!==1" @click="_scrollToUpper()"
|
||
:class="defaultThemeStyle==='white'?'zp-loading-more-text zp-loading-more-text-white':'zp-loading-more-text zp-loading-more-text-black'">{{chatRecordLoadingMoreText}}</text>
|
||
<image v-else :src="base64Flower" class="zp-chat-record-loading-custom-image">
|
||
</image>
|
||
</view>
|
||
<slot v-if="$slots.loading&&!firstPageLoaded&&(autoHideLoadingAfterFirstLoaded?!pagingLoaded:true)&&loading" name="loading" />
|
||
|
||
<!-- 主体内容 -->
|
||
<view class="zp-paging-container-content" :style="[finalPagingContentStyle]">
|
||
<slot />
|
||
</view>
|
||
<!-- 上拉加载更多view -->
|
||
<!-- #ifndef MP-ALIPAY -->
|
||
<slot v-if="_shouldShowLoading('loadingMoreDefault')" name="loadingMoreDefault" />
|
||
<slot v-else-if="_shouldShowLoading('loadingMoreLoading')" name="loadingMoreLoading" />
|
||
<slot v-else-if="_shouldShowLoading('loadingMoreNoMore')" name="loadingMoreNoMore" />
|
||
<slot v-else-if="_shouldShowLoading('loadingMoreFail')" name="loadingMoreFail" />
|
||
<z-paging-load-more @click.native="_onLoadingMore('click')"
|
||
v-else-if="_shouldShowLoading('loadingMoreCustom')" :zConfig="zPagingLoadMoreConfig">
|
||
</z-paging-load-more>
|
||
<!-- #endif -->
|
||
<!-- #ifdef MP-ALIPAY -->
|
||
<slot v-if="loadingStatus===0&&$slots.loadingMoreDefault&&showLoadingMore&&loadingMoreEnabled&&!useChatRecordMode"
|
||
name="loadingMoreDefault" />
|
||
<slot v-else-if="loadingStatus===1&&$slots.loadingMoreLoading&&showLoadingMore&&loadingMoreEnabled"
|
||
name="loadingMoreLoading" />
|
||
<slot v-else-if="loadingStatus===2&&$slots.loadingMoreNoMore&&showLoadingMore&&showLoadingMoreNoMoreView&&loadingMoreEnabled&&!useChatRecordMode"
|
||
name="loadingMoreNoMore" />
|
||
<slot v-else-if="loadingStatus===3&&$slots.loadingMoreFail&&showLoadingMore&&loadingMoreEnabled&&!useChatRecordMode"
|
||
name="loadingMoreFail" />
|
||
<z-paging-load-more @click.native="_onLoadingMore('click')" v-else-if="showLoadingMore&&showDefaultLoadingMoreText&&!(loadingStatus===2&&!showLoadingMoreNoMoreView)&&loadingMoreEnabled&&!useChatRecordMode" :zConfig="zPagingLoadMoreConfig">
|
||
</z-paging-load-more>
|
||
<!-- #endif -->
|
||
<!-- 空数据图 -->
|
||
<view class="zp-empty-view"
|
||
v-if="showEmpty">
|
||
<slot v-if="$slots.empty" name="empty" />
|
||
<z-paging-empty-view v-else :emptyViewImg="finalEmptyViewImg" :emptyViewText="finalEmptyViewText" :showEmptyViewReload="finalShowEmptyViewReload" :emptyViewReloadText="finalEmptyViewReloadText" :isLoadFailed="isLoadFailed" :emptyViewStyle="emptyViewStyle" :emptyViewTitleStyle="emptyViewTitleStyle" :emptyViewImgStyle="emptyViewImgStyle" :emptyViewReloadStyle="emptyViewReloadStyle" :emptyViewZIndex="emptyViewZIndex" @reload="_emptyViewReload">
|
||
</z-paging-empty-view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
</view>
|
||
<slot v-if="!usePageScroll&&$slots.bottom" name="bottom"></slot>
|
||
<view class="zp-page-scroll-bottom" v-else-if="usePageScroll&&$slots.bottom" :style="[{'bottom': `${windowBottom}px`}]">
|
||
<slot name="bottom"></slot>
|
||
</view>
|
||
<view v-if="showBackToTopClass" :class="backToTopClass" :style="[finalBackToTopStyle]" @click.stop="_backToTopClick">
|
||
<slot v-if="$slots.backToTop" name="backToTop" />
|
||
<image v-else class="zp-back-to-top-img" :src="backToTopImg.length?backToTopImg:base64BackToTop"></image>
|
||
</view>
|
||
</view>
|
||
<!-- #endif -->
|
||
<!-- #ifdef APP-NVUE -->
|
||
<view :is="finalNvueSuperListIs">
|
||
<view ref="zp-page-scroll-top" :is="nViewIs" class="zp-page-scroll-top" v-if="$slots.top" :style="[{'top':`${windowTop}px`,'z-index':topZIndex}]">
|
||
<slot name="top"></slot>
|
||
</view>
|
||
<view ref="n-list" id="z-paging-nlist" :style="[scrollViewStyle,useChatRecordMode ? {transform: nIsFirstPageAndNoMore?'rotate(0deg)':'rotate(180deg)'}:{}]" :is="finalNvueListIs" alwaysScrollableVertical="true"
|
||
:fixFreezing="nFixFreezing" :show-scrollbar="showScrollbar" :loadmoreoffset="finalLowerThreshold"
|
||
:scrollable="scrollable&&scrollEnable" :bounce="nvueBounce" :column-count="nWaterfallColumnCount" :column-width="nWaterfallColumnWidth"
|
||
:column-gap="nWaterfallColumnGap" :left-gap="nWaterfallLeftGap" :right-gap="nWaterfallRightGap"
|
||
@loadmore="_nOnLoadmore" @scroll="_nOnScroll">
|
||
<refresh class="zp-n-refresh" v-if="finalNvueListIs!=='view'&&refresherEnabled&&!nShowRefresherReveal&&!useChatRecordMode" :display="nRefresherLoading?'show':'hide'" @refresh="_nOnRrefresh"
|
||
@pullingdown="_nOnPullingdown">
|
||
<view ref="zp-n-refresh-container" class="zp-n-refresh-container">
|
||
<!-- 下拉刷新view -->
|
||
<slot v-if="zScopedSlots.refresher" :refresherStatus="refresherStatus" name="refresher" />
|
||
<z-paging-refresh ref="refresh" v-else :refresherStatus="refresherStatus" :defaultThemeStyle="finalRefresherThemeStyle"
|
||
:refresherDefaultText="finalRefresherDefaultText" :refresherPullingText="finalRefresherPullingText" :refresherRefreshingText="finalRefresherRefreshingText"
|
||
:showRefresherUpdateTime="showRefresherUpdateTime" :refresherUpdateTimeKey="refresherUpdateTimeKey"></z-paging-refresh>
|
||
</view>
|
||
</refresh>
|
||
<view ref="zp-n-list-top-tag" class="zp-n-list-top-tag" :is="nViewIs"></view>
|
||
<view v-if="nShowRefresherReveal" ref="zp-n-list-refresher-reveal" :style="[{transform:`translateY(-${nShowRefresherRevealHeight}px)`,height:'0px'}]" :is="nViewIs">
|
||
<slot v-if="zScopedSlots.refresher" :refresherStatus="refresherStatus" name="refresher" />
|
||
<z-paging-refresh ref="refresh" v-else :refresherStatus="refresherStatus" :defaultThemeStyle="finalRefresherThemeStyle"
|
||
:refresherDefaultText="finalRefresherDefaultText" :refresherPullingText="finalRefresherPullingText" :refresherRefreshingText="finalRefresherRefreshingText"
|
||
:showRefresherUpdateTime="showRefresherUpdateTime" :refresherUpdateTimeKey="refresherUpdateTimeKey"></z-paging-refresh>
|
||
</view>
|
||
<slot />
|
||
|
||
<view ref="zp-n-list-bottom-tag" class="zp-n-list-bottom-tag" is="header"></view>
|
||
<!-- 全屏 -->
|
||
<view style="flex: 1;" :style="[scrollViewStyle,useChatRecordMode ? {transform: nIsFirstPageAndNoMore?'rotate(0deg)':'rotate(180deg)'}:{}]" v-if="$slots.loading&&!firstPageLoaded&&(autoHideLoadingAfterFirstLoaded?!pagingLoaded:true)&&loading" :is="finalNvueListIs==='scroller'?'view':finalNvueListIs==='waterfall'?'header':'cell'">
|
||
<slot name="loading" />
|
||
</view>
|
||
<!-- 上拉加载更多view -->
|
||
<view :is="nViewIs">
|
||
<view v-if="useChatRecordMode">
|
||
<view v-if="loadingStatus!==2&&realTotalData.length">
|
||
<slot v-if="$slots.chatLoading"
|
||
name="chatLoading" />
|
||
<view v-else class="zp-chat-record-loading-container">
|
||
<text v-if="loadingStatus!==1" @click="_scrollToUpper()"
|
||
:class="defaultThemeStyle==='white'?'zp-loading-more-text zp-loading-more-text-white':'zp-loading-more-text zp-loading-more-text-black'">{{chatRecordLoadingMoreText}}</text>
|
||
<view>
|
||
<loading-indicator v-if="loadingStatus===1" :animating="true"
|
||
class="zp-loading-more-line-loading-image">
|
||
</loading-indicator>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view :style="nLoadingMoreFixedHeight?{height:loadingMoreCustomStyle&&loadingMoreCustomStyle.height?loadingMoreCustomStyle.height:'80rpx'}:{}">
|
||
<slot v-if="_shouldShowLoading('loadingMoreDefault')" name="loadingMoreDefault" />
|
||
<slot v-else-if="_shouldShowLoading('loadingMoreLoading')" name="loadingMoreLoading" />
|
||
<slot v-else-if="_shouldShowLoading('loadingMoreNoMore')" name="loadingMoreNoMore" />
|
||
<slot v-else-if="_shouldShowLoading('loadingMoreFail')" name="loadingMoreFail" />
|
||
<z-paging-load-more @click.native="_onLoadingMore('click')"
|
||
v-else-if="_shouldShowLoading('loadingMoreCustom')" :zConfig="zPagingLoadMoreConfig">
|
||
</z-paging-load-more>
|
||
</view>
|
||
</view>
|
||
<!-- 空数据图 -->
|
||
<view style="flex: 1;" key="z-paging-empty-view" :style="[scrollViewStyle,useChatRecordMode ? {transform: nIsFirstPageAndNoMore?'rotate(0deg)':'rotate(180deg)'}:{}]" v-if="showEmpty" :is="finalNvueListIs==='scroller'?'view':finalNvueListIs==='waterfall'?'header':'cell'">
|
||
<view class="zp-empty-view">
|
||
<slot v-if="$slots.empty" name="empty" />
|
||
<z-paging-empty-view v-else :emptyViewImg="finalEmptyViewImg" :emptyViewText="finalEmptyViewText" :showEmptyViewReload="finalShowEmptyViewReload" :emptyViewReloadText="finalEmptyViewReloadText" :isLoadFailed="isLoadFailed" :emptyViewStyle="emptyViewStyle" :emptyViewTitleStyle="emptyViewTitleStyle" :emptyViewImgStyle="emptyViewImgStyle" :emptyViewReloadStyle="emptyViewReloadStyle" :emptyViewZIndex="emptyViewZIndex" @reload="_emptyViewReload">
|
||
</z-paging-empty-view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<slot name="bottom"></slot>
|
||
<view v-if="showBackToTopClass" :class="backToTopClass" :style="[finalBackToTopStyle]" @click.stop="_backToTopClick">
|
||
<slot v-if="$slots.backToTop" name="backToTop" />
|
||
<image v-else class="zp-back-to-top-img" :src="backToTopImg.length?backToTopImg:base64BackToTop"></image>
|
||
</view>
|
||
</view>
|
||
<!-- #endif -->
|
||
</template>
|
||
<!-- #ifdef APP-VUE || MP-WEIXIN || MP-QQ || H5 -->
|
||
<script
|
||
src="./wxs/z-paging-wxs.wxs"
|
||
module="pagingWxs"
|
||
lang="wxs"
|
||
></script>
|
||
<!-- #endif -->
|
||
<script module="pagingRenderjs" lang="renderjs">
|
||
import pagingRenderjs from './wxs/z-paging-renderjs.js';
|
||
/**
|
||
* z-paging 分页组件
|
||
* @description 【uni-app自动分页器】超简单,低耦合!仅需两步轻松完成完整分页逻辑(下拉刷新、上拉加载更多),分页全自动处理。支持自定义加载更多的文字或整个view,自定义下拉刷新样式,自动管理空数据view等。
|
||
* @tutorial http://z-paging.com
|
||
* @property {Number|String} default-page-no 自定义pageNo,默认为1
|
||
* @property {Number|String} default-page-size 自定义pageSize,默认为10
|
||
* @property {Number|Object} data-key 为保证数据一致,设置当前tab切换时的标识key,并在complete中传递相同key,若二者不一致,则complete将不会生效
|
||
* @property {String} autowire-list-name 【极简写法】自动注入的list名,可自动修改父view(包含ref="paging")中对应name的list值(z-paging标签必须设置`ref="paging"`)
|
||
* @property {String} autowire-query-name 【极简写法】自动注入的query名,可自动调用父view(包含ref="paging")中的query方法(z-paging标签必须设置`ref="paging"`)
|
||
* @property {Number|Object} delay 调用complete后延迟处理的时间,单位为毫秒
|
||
* @property {String} language i18n国际化设置语言,支持简体中文(zh-cn)、繁体中文(zh-hant-cn)和英文(en)
|
||
* @property {Boolean} follow-system-language i18n国际化默认是否跟随系统语言,默认为是
|
||
* @property {Object} paging-style 设置z-paging的style,部分平台可能无法直接修改组件的style,可使用此属性代替
|
||
* @property {Object} paging-content-style 设置z-paging的容器(插槽的父view)的style
|
||
* @property {Boolean} auto-height z-paging是否自动高度,若自动高度则会自动铺满屏幕,默认为否
|
||
* @property {Number|String} auto-height-addition z-paging是否自动高度时,附加的高度,注意添加单位px或rpx,默认为px,若需要减少高度,请传负数
|
||
* @property {String} default-theme-style loading(下拉刷新、上拉加载更多)的主题样式,支持black,white,默认black
|
||
* @property {String} refresher-theme-style 下拉刷新的主题样式,支持black,white,默认black
|
||
* @property {String} loading-more-theme-style 底部加载更多的主题样式,支持black,white,默认black
|
||
* @property {Boolean} refresher-only 是否只使用下拉刷新,设置为true后将关闭mounted自动请求数据、关闭滚动到底部加载更多,强制隐藏空数据图。默认为否
|
||
* @property {Boolean} use-page-scroll 使用页面滚动,默认为否,当设置为是时则使用页面的滚动而非此组件内部的scroll-view的滚动,使用页面滚动时z-paging无需设置确定的高度且对于长列表展示性能更高,但配置会略微繁琐
|
||
* @property {Boolean} fixed z-paging是否使用fixed布局,若使用fixed布局,则z-paging的父view无需固定高度,z-paging高度默认为100%,默认为否(当使用内置scroll-view滚动时有效)
|
||
* @property {Boolean} safe-area-inset-bottom 是否开启底部安全区域适配,默认为否
|
||
* @property {Boolean} scrollable 是否可以滚动,使用内置scroll-view和nvue时有效,默认为是
|
||
* @property {Boolean} auto [z-paging]mounted后自动调用reload方法(mounted后自动调用接口),默认为是
|
||
* @property {Boolean} auto-scroll-to-top-when-reload reload时自动滚动到顶部,默认为是
|
||
* @property {Boolean} auto-clean-list-when-reload reload时立即自动清空原list,默认为是,若立即自动清空,则在reload之后、请求回调之前页面是空白的
|
||
* @property {Boolean} show-refresher-when-reload 调用reload方法时是否自动显示下拉刷新view,默认为否
|
||
* @property {Boolean} show-loading-more-when-reload 调用reload方法时自动显示加载更多view,且为加载中状态(仅初始设置有效,不可动态修改)
|
||
* @property {Boolean} refresher-update-time-key 如果需要区别不同页面的最后更新时间,请为不同页面的z-paging的`refresher-update-time-key`设置不同的字符串
|
||
* @property {Boolean} use-custom-refresher 是否使用自定义的下拉刷新,默认为是,即使用z-paging的下拉刷新。设置为false即代表使用uni scroll-view自带的下拉刷新,h5、App、微信小程序以外的平台不支持uni scroll-view自带的下拉刷新
|
||
* @property {Number|String} refresher-fps 自定义下拉刷新下拉帧率,默认为40,过高可能会出现抖动问题(use-custom-refresher为true时生效)
|
||
* @property {Number|String} refresher-max-angle 自定义下拉刷新允许触发的最大下拉角度,默认为40度,当下拉角度小于设定值时,自定义下拉刷新动画不会被触发
|
||
* @property {Boolean} refresher-angle-enable-change-continued 自定义下拉刷新的角度由未达到最大角度变到达到最大角度时,是否继续下拉刷新手势,默认为否
|
||
* @property {String|Object} refresher-default-text 自定义下拉刷新默认状态下的文字(use-custom-refresher为true时生效)
|
||
* @property {String|Object} refresher-pulling-text 自定义下拉刷新松手立即刷新状态下的文字(use-custom-refresher为true时生效)
|
||
* @property {String|Object} refresher-refreshing-text 自定义下拉刷新刷新中状态下的文字(use-custom-refresher为true时生效)
|
||
* @property {Boolean} refresher-end-bounce-enabled 是否开启自定义下拉刷新刷新结束回弹效果,默认为是(use-custom-refresher为true时生效)
|
||
* @property {Object} loading-more-custom-style 自定义底部加载更多样式
|
||
* @property {Object} loading-more-loading-icon-custom-style 自定义底部加载更多加载中动画样式
|
||
* @property {String} loading-more-loading-icon-type 自定义底部加载更多加载中动画图标类型,可选circle或flower,默认为circle
|
||
* @property {String} loading-more-loading-icon-custom-image 自定义底部加载更多加载中动画图标图片
|
||
* @property {Boolean} loading-more-loading-animated 底部加载更多加载中view是否展示旋转动画(loading-more-loading-icon-custom-image有值时有效,nvue无效)
|
||
* @property {Boolean} loading-more-enabled 是否启用加载更多数据(含滑动到底部加载更多数据和点击加载更多数据),默认为是
|
||
* @property {Boolean} to-bottom-loading-more-enabled 是否启用滑动到底部加载更多数据
|
||
* @property {String|Object} loading-more-default-text 滑动到底部"默认"文字,默认为【点击加载更多】
|
||
* @property {String|Object} loading-more-loading-text 滑动到底部"加载中"文字,默认为【正在加载...】
|
||
* @property {String|Object} loading-more-no-more-text 滑动到底部"没有更多"文字,默认为【没有更多了】
|
||
* @property {String|Object} loading-more-fail-text 滑动到底部"加载失败"文字,默认为【加载失败,点击重新加载】
|
||
* @property {Boolean} hide-loading-more-when-no-more-and-inside-of-paging 当没有更多数据且分页内容未超出z-paging时是否隐藏没有更多数据的view,默认为是
|
||
* @property {Boolean} hide-loading-more-when-no-more-and-inside-of-paging 当没有更多数据且分页内容未超出z-paging时是否隐藏没有更多数据的view,默认为是
|
||
* @property {Boolean} inside-more 当分页未满一屏时,是否自动加载更多(nvue无效),默认为否
|
||
* @property {Boolean} show-default-loading-more-text 是否显示默认的加载更多text,默认为是
|
||
* @property {Boolean} show-loading-more-no-more-line 是否显示没有更多数据的分割线,默认为是
|
||
* @property {Object} loading-more-no-more-line-custom-style 自定义底部没有更多数据的分割线样式
|
||
* @property {Boolean} hide-empty-view 是否强制隐藏空数据图,默认为否
|
||
* @property {String|Object} empty-view-text 空数据图描述文字,默认为“没有数据哦~”
|
||
* @property {Boolean} show-empty-view-reload 是否显示空数据图重新加载按钮(无数据时),默认为否
|
||
* @property {Boolean} show-empty-view-reload-when-error 加载失败时是否显示空数据图重新加载按钮,默认为是
|
||
* @property {String} empty-view-img 空数据图图片,默认使用z-paging内置的图片
|
||
* @property {String|Object} empty-view-reload-text 空数据图点击重新加载文字
|
||
* @property {String|Object} empty-view-error-text 空数据图“加载失败”描述文字
|
||
* @property {String} empty-view-error-img 空数据图“加载失败”图片,默认使用z-paging内置的图片(建议使用绝对路径)
|
||
* @property {Object} empty-view-style 空数据图样式
|
||
* @property {Object} empty-view-img-style 空数据图img样式
|
||
* @property {Object} empty-view-title-style 空数据图描述文字样式
|
||
* @property {Object} empty-view-reload-style 空数据图重新加载按钮样式
|
||
* @property {Boolean} auto-hide-empty-view-when-loading 加载中时是否自动隐藏空数据图,默认为是
|
||
* @property {Boolean} auto-hide-loading-after-first-loaded 第一次加载后自动隐藏loading slot,默认为是
|
||
* @property {Boolean} auto-show-back-to-top 自动显示点击返回顶部按钮,默认为否
|
||
* @property {Number|String} back-to-top-threshold 点击返回顶部按钮显示/隐藏的阈值(滚动距离),单位为px,默认为400rpx
|
||
* @property {String} back-to-top-img 点击返回顶部按钮的自定义图片地址,默认使用z-paging内置的图片
|
||
* @property {Boolean} back-to-top-with-animate 点击返回顶部按钮返回到顶部时是否展示过渡动画,默认为是
|
||
* @property {Number|String} back-to-top-bottom 点击返回顶部按钮与底部的距离,注意添加单位px或rpx,默认为160rpx
|
||
* @property {Object} back-to-top-style 点击返回顶部按钮的自定义样式
|
||
* @property {Boolean} show-scrollbar 在设置滚动条位置时使用动画过渡,默认为否
|
||
* @property {Boolean} scroll-to-top-bounce-enabled iOS设备上滚动到顶部时是否允许回弹效果,默认为否。关闭回弹效果后可使滚动到顶部与下拉刷新更连贯,但是有吸顶view时滚动到顶部时可能出现抖动。
|
||
* @property {Boolean} scroll-with-animation 控制是否出现滚动条,默认为否
|
||
* @property {String} scroll-into-view 值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
|
||
* @property {Number|String} lower-threshold 距底部/右边多远时(单位px),触发 scrolltolower 事件,默认为100rpx
|
||
* @property {Boolean} enable-back-to-top iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向,默认为是
|
||
* @property {Boolean} refresher-enabled 是否开启自定义下拉刷新,默认为是
|
||
* @property {Number|String} refresher-threshold 设置自定义下拉刷新阈值,默认为80rpx
|
||
* @property {String} refresher-default-style 设置自定义下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式,默认为black
|
||
* @property {String} refresher-background 设置自定义下拉刷新区域背景颜色
|
||
* @property {Boolean} show-refresher-update-time 是否显示上次下拉刷新更新时间,默认为否
|
||
* @property {String} refresher-update-time-key 上次下拉刷新更新时间的key,用于区别不同的上次更新时间
|
||
* @property {Number|String} local-paging-loading-time 本地分页时上拉加载更多延迟时间,单位为毫秒,默认200毫秒
|
||
* @property {Boolean} use-chat-record-mode 使用聊天记录模式,默认为否
|
||
* @property {Number} top-z-index slot="top"的view的z-index,仅使用页面滚动时有效,默认为99
|
||
* @property {Number} super-content-z-index z-paging内容容器父view的z-index,默认为1
|
||
* @property {Number} content-z-index z-paging内容容器部分的z-index,默认为10
|
||
* @property {Number} empty-view-z-index 空数据view的z-index,默认为9
|
||
* @property {Boolean} auto-full-height 使用页面滚动时,是否在不满屏时自动填充满屏幕,默认为是
|
||
* @property {Boolean} concat 自动拼接complete中传过来的数组(使用聊天记录模式时无效),默认为是
|
||
* @property {String} nvue-list-is nvue中修改列表类型,可选值有list、waterfall和scroller,默认为list
|
||
* @property {Object} nvue-waterfall-config nvue waterfall配置,仅在nvue中且nvueListIs=waterfall时有效,配置参数详情参见:https://uniapp.dcloud.io/component/waterfall
|
||
* @property {Boolean} nvue-bounce nvue 控制是否回弹效果,iOS不支持动态修改(若禁用回弹效果,下拉刷新将失效),默认为是
|
||
* @property {Boolean} nvue-fast-scroll nvue中通过代码滚动到顶部/底部时,是否加快动画效果(无滚动动画时无效),默认为否
|
||
* @property {Boolean} show-console-error 是否将错误信息打印至控制台,默认为是
|
||
* @event {Function} query 组件加载时会自动触发此方法,因此默认页面加载时会自动触发,无需手动调用。pageNo和pageSize会自动计算好,直接传给服务器即可。
|
||
* @event {Function} refresherStatusChange 自定义下拉刷新状态改变(use-custom-refresher为true时生效)【注:通过`:refresher-status.sync`绑定当前data中的指定变量亦可】
|
||
* @event {Function} loadingStatusChange 上拉加载更多状态改变
|
||
* @event {Function} refresherTouchstart 自定义下拉刷新下拉开始(use-custom-refresher为true时生效)【注:当需要更细致定制自定义下拉刷新时使用,如果只需监听下拉刷新各个状态改变,使用`refresherStatusChange`即可】
|
||
* @event {Function} refresherTouchmove 自定义下拉刷新下拉中开始(use-custom-refresher为true时生效)【注:当需要更细致定制自定义下拉刷新时使用,如果只需监听下拉刷新各个状态改变,使用`refresherStatusChange`即可】
|
||
* @event {Function} refresherTouchend 自定义下拉刷新下拉结束(use-custom-refresher为true时生效)【注:当需要更细致定制自定义下拉刷新时使用,如果只需监听下拉刷新各个状态改变,使用`refresherStatusChange`即可】
|
||
* @event {Function} onRefresh 自定义下拉刷新被触发
|
||
* @event {Function} onRestore 自定义下拉刷新被复位
|
||
* @event {Function} scroll `z-paging`内置的scroll-view滚动时触发
|
||
* @event {Function} scrollTopChange scrollTop改变时触发,使用点击返回顶部时需要获取scrollTop时可使用此事件【注:通过`:scroll-top.sync`绑定当前data中的指定变量亦可】(@scrolltoupper触发时,也会自动触发此方法,且scrollTop=0)
|
||
* @event {Function} scrolltolower `z-paging`内置的scroll-view滚动底部时触发
|
||
* @event {Function} scrolltoupper `z-paging`内置的scroll-view滚动顶部时触发
|
||
* @event {Function} listChange 分页渲染的数组改变时触发
|
||
* @event {Function} emptyViewReload 点击了空数据图中的重新加载按钮
|
||
* @example <z-paging ref="paging" v-model="dataList" @query="queryList"></z-paging>
|
||
*/
|
||
export default {
|
||
name:"z-paging",
|
||
// #ifdef APP-VUE || H5
|
||
mixins: [pagingRenderjs],
|
||
// #endif
|
||
// 以下代码是为了欺骗编译器使props的代码提示功能生效,不会被编译到项目中
|
||
// #ifdef QUICKAPP-WEBVIEW-UNION
|
||
props: {
|
||
defaultPageNo: {type: [Number, String]},
|
||
defaultPageSize: {type: [Number, String]},
|
||
dataKey: {type: [Number, Object]},
|
||
autowireListName: {type: String},
|
||
autowireQueryName: {type: String},
|
||
delay: {type: [Number, String]},
|
||
language: {type: String},
|
||
followSystemLanguage: {type: Boolean},
|
||
pagingStyle: {type: Object},
|
||
pagingContentStyle: {type: Object},
|
||
autoHeight: {type: Boolean},
|
||
autoHeightAddition: {type: [Number, String]},
|
||
defaultThemeStyle: {type: String},
|
||
refresherThemeStyle: {type: String},
|
||
loadingMoreThemeStyle: {type: String},
|
||
refresherOnly: {type: Boolean},
|
||
usePageScroll: {type: Boolean},
|
||
fixed: {type: Boolean},
|
||
safeAreaInsetBottom: {type: Boolean},
|
||
scrollable: {type: Boolean},
|
||
mountedAutoCallReload: {type: Boolean},
|
||
auto: {type: Boolean},
|
||
autoScrollToTopWhenReload: {type: Boolean},
|
||
autoCleanListWhenReload: {type: Boolean},
|
||
showRefresherWhenReload: {type: Boolean},
|
||
showLoadingMoreWhenReload: {type: Boolean},
|
||
useCustomRefresher: {type: Boolean},
|
||
refresherFps: {type: [Number, String]},
|
||
refresherMaxAngle: {type: [Number, String]},
|
||
refresherAngleEnableChangeContinued: {type: Boolean},
|
||
refresherDefaultText: {type: [String, Object]},
|
||
refresherPullingText: {type: [String, Object]},
|
||
refresherRefreshingText: {type: [String, Object]},
|
||
refresherEndBounceEnabled: {type: Boolean},
|
||
loadingMoreCustomStyle: {type: Object},
|
||
loadingMoreLoadingIconCustomStyle: {type: Object},
|
||
loadingMoreLoadingIconType: {type: String},
|
||
loadingMoreLoadingIconCustomImage: {type: String},
|
||
loadingMoreLoadingAnimated: {type: Boolean},
|
||
loadingMoreEnabled: {type: Boolean},
|
||
toBottomLoadingMoreEnabled: {type: Boolean},
|
||
loadingMoreDefaultText: {type: [String, Object]},
|
||
loadingMoreLoadingText: {type: [String, Object]},
|
||
loadingMoreNoMoreText: {type: [String, Object]},
|
||
loadingMoreFailText: {type: [String, Object]},
|
||
hideLoadingMoreWhenNoMoreAndInsideOfPaging: {type: Boolean},
|
||
hideLoadingMoreWhenNoMoreByLimit: {type: Number},
|
||
insideMore: {type: Boolean},
|
||
showDefaultLoadingMoreText: {type: Boolean},
|
||
showLoadingMoreNoMoreView: {type: Boolean},
|
||
showLoadingMoreNoMoreLine: {type: Boolean},
|
||
loadingMoreNoMoreLineCustomStyle: {type: Object},
|
||
hideEmptyView: {type: Boolean},
|
||
emptyViewText: {type: [String, Object]},
|
||
showEmptyViewReload: {type: Boolean},
|
||
showEmptyViewReloadWhenError: {type: Boolean},
|
||
emptyViewReloadText: {type: [String, Object]},
|
||
emptyViewImg: {type: String},
|
||
emptyViewErrorText: {type: [String, Object]},
|
||
emptyViewErrorImg: {type: String},
|
||
emptyViewStyle: {type: Object},
|
||
emptyViewImgStyle: {type: Object},
|
||
emptyViewTitleStyle: {type: Object},
|
||
emptyViewReloadStyle: {type: Object},
|
||
autoHideEmptyViewWhenLoading: {type: Boolean},
|
||
autoHideLoadingAfterFirstLoaded: {type: Boolean},
|
||
autoShowBackToTop: {type: Boolean},
|
||
backToTopThreshold: {type: [Number, String]},
|
||
backToTopImg: {type: String},
|
||
backToTopWithAnimate: {type: Boolean},
|
||
backToTopBottom: {type: [Number, String]},
|
||
backToTopStyle: {type: Object},
|
||
showScrollbar: {type: Boolean},
|
||
scrollToTopBounceEnabled: {type: Boolean},
|
||
scrollToBottomBounceEnabled: {type: Boolean},
|
||
scrollWithAnimation: {type: Boolean},
|
||
scrollIntoView: {type: String},
|
||
lowerThreshold: {type: [Number, String]},
|
||
enableBackToTop: {type: Boolean},
|
||
refresherEnabled: {type: Boolean},
|
||
refresherThreshold: {type: [Number, String]},
|
||
refresherDefaultStyle: {type: String},
|
||
refresherBackground: {type: String},
|
||
refresherFixedBackground: {type: String},
|
||
refresherFixedBacHeight: {type: [Number, String]},
|
||
refresherOutRate: {type: Number},
|
||
showRefresherUpdateTime: {type: Boolean},
|
||
refresherUpdateTimeKey: {type: String},
|
||
localPagingLoadingTime: {type: [Number, String]},
|
||
useChatRecordMode: {type: Boolean},
|
||
topZIndex: {type: Number},
|
||
superContentZIndex: {type: Number},
|
||
contentZIndex: {type: Number},
|
||
emptyViewZIndex: {type: Number},
|
||
autoFullHeight: {type: Boolean},
|
||
concat: {type: Boolean},
|
||
nvueListIs: {type: String},
|
||
nvueWaterfallConfig: {type: Object},
|
||
nvueBounce: {type: Boolean},
|
||
nvueFastScroll: {type: Boolean},
|
||
showConsoleError: {type: Boolean},
|
||
value: {type: Array}
|
||
}
|
||
// #endif
|
||
}
|
||
</script>
|
||
<script
|
||
src="./js/z-paging-main.js"></script>
|
||
|
||
<style scoped>
|
||
@import "./css/z-paging-main.css";
|
||
@import "./css/z-paging-static.css";
|
||
</style>
|