zhangbo1_wd

下拉刷新加超时保护

@@ -6,6 +6,7 @@ import PageAdModel from '../viewmodel/PageAdvModel'; @@ -6,6 +6,7 @@ import PageAdModel from '../viewmodel/PageAdvModel';
6 import { LoadStatus } from '../components/refresh/RefreshLayoutBean'; 6 import { LoadStatus } from '../components/refresh/RefreshLayoutBean';
7 import { Logger } from 'wdKit/Index'; 7 import { Logger } from 'wdKit/Index';
8 8
  9 +const TAG = 'PullDownRefresh'
9 /***********新的下拉、上拉手势 start **********/ 10 /***********新的下拉、上拉手势 start **********/
10 export function onActionStart(pageModel: PageModel, pageAdvModel: PageAdModel, event?: GestureEvent) { 11 export function onActionStart(pageModel: PageModel, pageAdvModel: PageAdModel, event?: GestureEvent) {
11 if (event === undefined) { 12 if (event === undefined) {
@@ -157,11 +158,22 @@ export function touchUpPullRefresh(pageModel: PageModel, pageAdvModel: PageAdMod @@ -157,11 +158,22 @@ export function touchUpPullRefresh(pageModel: PageModel, pageAdvModel: PageAdMod
157 let advSelf: PageAdModel = pageAdvModel; 158 let advSelf: PageAdModel = pageAdvModel;
158 PageHelper.refreshUI(self, advSelf) 159 PageHelper.refreshUI(self, advSelf)
159 }, Const.DELAY_TIME); 160 }, Const.DELAY_TIME);
  161 + setRefreshTimeoutTimer(pageModel)
160 } else { 162 } else {
161 closeRefresh(pageModel, false); 163 closeRefresh(pageModel, false);
162 } 164 }
163 } 165 }
164 166
  167 +export function setRefreshTimeoutTimer(pageModel: PageModel) {
  168 + let timeoutId = setTimeout(() => {
  169 + closeRefresh(pageModel, false);
  170 + Logger.error(TAG, 'closeRefresh by timeout')
  171 + }, Const.REFRESH_TIMEOUT__TIME);
  172 + // 取消超时关闭定时器
  173 + clearTimeout(pageModel.refreshTimeoutTimerId)
  174 + pageModel.refreshTimeoutTimerId = timeoutId
  175 +}
  176 +
165 /** 177 /**
166 * 自动刷新接口,如首页底导,双击按钮自动刷新 178 * 自动刷新接口,如首页底导,双击按钮自动刷新
167 * @param pageModel 页面数据 179 * @param pageModel 页面数据
@@ -177,6 +189,7 @@ export function autoRefresh(pageModel: PageModel, pageAdvModel: PageAdModel) { @@ -177,6 +189,7 @@ export function autoRefresh(pageModel: PageModel, pageAdvModel: PageAdModel) {
177 pullRefreshState(pageModel, RefreshState.Refreshing); 189 pullRefreshState(pageModel, RefreshState.Refreshing);
178 pageModel.currentPage = 1; 190 pageModel.currentPage = 1;
179 PageHelper.refreshUI(pageModel, pageAdvModel) 191 PageHelper.refreshUI(pageModel, pageAdvModel)
  192 + setRefreshTimeoutTimer(pageModel)
180 } 193 }
181 194
182 export function pullRefreshState(pageModel: PageModel, state: number) { 195 export function pullRefreshState(pageModel: PageModel, state: number) {
@@ -225,6 +238,8 @@ export function pullRefreshState(pageModel: PageModel, state: number) { @@ -225,6 +238,8 @@ export function pullRefreshState(pageModel: PageModel, state: number) {
225 238
226 export function closeRefresh(pageModel: PageModel, isRefreshSuccess: boolean) { 239 export function closeRefresh(pageModel: PageModel, isRefreshSuccess: boolean) {
227 let self = pageModel; 240 let self = pageModel;
  241 + // 取消超时关闭定时器
  242 + clearTimeout(self.refreshTimeoutTimerId)
228 setTimeout(() => { 243 setTimeout(() => {
229 let delay = Const.RefreshConstant_DELAY_PULL_DOWN_REFRESH; 244 let delay = Const.RefreshConstant_DELAY_PULL_DOWN_REFRESH;
230 if (self.isCanRefresh === true) { 245 if (self.isCanRefresh === true) {
1 import PageModel from '../viewmodel/PageModel'; 1 import PageModel from '../viewmodel/PageModel';
2 import { RefreshConstants as Const } from './RefreshConstants'; 2 import { RefreshConstants as Const } from './RefreshConstants';
3 import PageHelper from '../viewmodel/PageHelper'; 3 import PageHelper from '../viewmodel/PageHelper';
  4 +import { Logger } from 'wdKit/Index';
  5 +
  6 +const TAG = 'PullUpLoadMore'
4 7
5 export function touchMoveLoadMore(model: PageModel, event: TouchEvent) { 8 export function touchMoveLoadMore(model: PageModel, event: TouchEvent) {
6 // list size +1 9 // list size +1
7 - if (model.endIndex >= model.compList.totalCount()-3 && model.endIndex <= model.compList.totalCount()) { 10 + if (model.endIndex >= model.compList.totalCount() - 3 && model.endIndex <= model.compList.totalCount()) {
8 // model.offsetY = event.touches[0].y - model.downY; 11 // model.offsetY = event.touches[0].y - model.downY;
9 // if (Math.abs(model.offsetY) > vp2px(model.pullUpLoadHeight) / 2) { 12 // if (Math.abs(model.offsetY) > vp2px(model.pullUpLoadHeight) / 2) {
10 // model.isCanLoadMore = true; 13 // model.isCanLoadMore = true;
@@ -32,6 +35,7 @@ export function touchUpLoadMore(model: PageModel) { @@ -32,6 +35,7 @@ export function touchUpLoadMore(model: PageModel) {
32 // closeLoadMore(model); 35 // closeLoadMore(model);
33 PageHelper.loadMore(self) 36 PageHelper.loadMore(self)
34 }, Const.DELAY_TIME); 37 }, Const.DELAY_TIME);
  38 + setLoadMoreTimeoutTimer(self)
35 } else { 39 } else {
36 closeLoadMore(self); 40 closeLoadMore(self);
37 } 41 }
@@ -41,4 +45,14 @@ export function closeLoadMore(model: PageModel) { @@ -41,4 +45,14 @@ export function closeLoadMore(model: PageModel) {
41 model.isCanLoadMore = false; 45 model.isCanLoadMore = false;
42 model.isLoading = false; 46 model.isLoading = false;
43 model.isVisiblePullUpLoad = false; 47 model.isVisiblePullUpLoad = false;
  48 +}
  49 +
  50 +export function setLoadMoreTimeoutTimer(pageModel: PageModel) {
  51 + let timeoutId = setTimeout(() => {
  52 + closeLoadMore(pageModel);
  53 + Logger.error(TAG, 'closeLoadMore by timeout')
  54 + }, Const.REFRESH_TIMEOUT__TIME);
  55 + // 取消超时关闭定时器
  56 + clearTimeout(pageModel.loadMoreTimeoutTimerId)
  57 + pageModel.loadMoreTimeoutTimerId = timeoutId
44 } 58 }
@@ -14,7 +14,7 @@ export class RefreshConstants { @@ -14,7 +14,7 @@ export class RefreshConstants {
14 * The delay time. 14 * The delay time.
15 */ 15 */
16 static readonly DELAY_TIME: number = 50; 16 static readonly DELAY_TIME: number = 50;
17 - 17 + static readonly REFRESH_TIMEOUT__TIME: number = 10000;
18 /** 18 /**
19 * The animation duration. 19 * The animation duration.
20 */ 20 */
@@ -25,12 +25,10 @@ export class RefreshConstants { @@ -25,12 +25,10 @@ export class RefreshConstants {
25 static readonly RefreshConstant_DELAY_PULL_DOWN_REFRESH: number = 50; 25 static readonly RefreshConstant_DELAY_PULL_DOWN_REFRESH: number = 50;
26 static readonly RefreshConstant_CLOSE_PULL_DOWN_REFRESH_TIME: number = 150; 26 static readonly RefreshConstant_CLOSE_PULL_DOWN_REFRESH_TIME: number = 150;
27 static readonly RefreshConstant_DELAY_SHRINK_ANIMATION_TIME: number = 1500; 27 static readonly RefreshConstant_DELAY_SHRINK_ANIMATION_TIME: number = 1500;
28 -  
29 /** 28 /**
30 * The page size. 29 * The page size.
31 */ 30 */
32 static readonly PAGE_SIZE: number = 20; 31 static readonly PAGE_SIZE: number = 20;
33 -  
34 /** 32 /**
35 * The refresh and load height. 33 * The refresh and load height.
36 */ 34 */
@@ -59,6 +57,7 @@ export class RefreshConstants { @@ -59,6 +57,7 @@ export class RefreshConstants {
59 static readonly RefreshLayout_IMAGE_WIDTH: number = 18; 57 static readonly RefreshLayout_IMAGE_WIDTH: number = 18;
60 static readonly RefreshLayout_IMAGE_HEIGHT: number = 18; 58 static readonly RefreshLayout_IMAGE_HEIGHT: number = 18;
61 } 59 }
  60 +
62 /** 61 /**
63 * The refresh state enum. 62 * The refresh state enum.
64 */ 63 */
@@ -49,6 +49,9 @@ export class PageHelper { @@ -49,6 +49,9 @@ export class PageHelper {
49 } 49 }
50 50
51 private refreshUIEnd(pageModel: PageModel, isRefreshSuccess: boolean) { 51 private refreshUIEnd(pageModel: PageModel, isRefreshSuccess: boolean) {
  52 + if (pageModel.loadStrategy != 2) {
  53 + return
  54 + }
52 closeRefresh(pageModel, isRefreshSuccess) 55 closeRefresh(pageModel, isRefreshSuccess)
53 } 56 }
54 57
@@ -119,6 +122,7 @@ export class PageHelper { @@ -119,6 +122,7 @@ export class PageHelper {
119 } 122 }
120 }).catch((err: string | Resource) => { 123 }).catch((err: string | Resource) => {
121 promptAction.showToast({ message: err }); 124 promptAction.showToast({ message: err });
  125 + this.refreshUIEnd(pageModel, false)
122 }) 126 })
123 } else { 127 } else {
124 Logger.debug(TAG, 'getPageInfo') 128 Logger.debug(TAG, 'getPageInfo')
@@ -127,6 +131,7 @@ export class PageHelper { @@ -127,6 +131,7 @@ export class PageHelper {
127 if (pageInfo == null) { 131 if (pageInfo == null) {
128 pageModel.viewType = ViewType.EMPTY; 132 pageModel.viewType = ViewType.EMPTY;
129 pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_NoContent1; 133 pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_NoContent1;
  134 + this.refreshUIEnd(pageModel, false)
130 return; 135 return;
131 } 136 }
132 pageModel.pageInfo = pageInfo; 137 pageModel.pageInfo = pageInfo;
@@ -146,6 +151,7 @@ export class PageHelper { @@ -146,6 +151,7 @@ export class PageHelper {
146 Logger.debug(TAG, 'getPageInfo go on') 151 Logger.debug(TAG, 'getPageInfo go on')
147 this.parseGroup(pageModel, false) 152 this.parseGroup(pageModel, false)
148 }).catch(() => { 153 }).catch(() => {
  154 + this.refreshUIEnd(pageModel, false)
149 if (this.isPageLoaded(pageModel)) { 155 if (this.isPageLoaded(pageModel)) {
150 return 156 return
151 } 157 }
@@ -406,7 +412,7 @@ export class PageHelper { @@ -406,7 +412,7 @@ export class PageHelper {
406 /** 412 /**
407 * 竖直方向list,将数据拆出来,组装成comp 413 * 竖直方向list,将数据拆出来,组装成comp
408 */ 414 */
409 - private createSpecialComp(compList: CompDTO[]): CompDTO[]{ 415 + private createSpecialComp(compList: CompDTO[]): CompDTO[] {
410 if (!compList) { 416 if (!compList) {
411 return compList 417 return compList
412 } 418 }
@@ -50,6 +50,8 @@ export default class PageModel { @@ -50,6 +50,8 @@ export default class PageModel {
50 isPullRefreshOperation = false; 50 isPullRefreshOperation = false;
51 isLoading: boolean = false; 51 isLoading: boolean = false;
52 isCanLoadMore: boolean = false; 52 isCanLoadMore: boolean = false;
  53 + refreshTimeoutTimerId: number = 0;
  54 + loadMoreTimeoutTimerId: number = 0;
53 // keyGenerator相关字符串,用于刷新list布局 55 // keyGenerator相关字符串,用于刷新list布局
54 timestamp: String = '1'; 56 timestamp: String = '1';
55 57