张善主

fix(聚合页):增加下拉刷新功能

... ... @@ -244,7 +244,6 @@ export class HttpUrlUtils {
* first_load&refreshTime=1710829610144&pageId=28927&channelStrategy=2&groupId=40621&
* pageSize=20&pageNum=1&topicId=10000009445
* */
static readonly MORNING_EVENING_PAGE_INFO_PATH: string = "/api/rmrb-bff-display-zh/display/zh/c/pageInfo";
/**
* 直播回顾
* */
... ...
import { CompAdvMatInfoBean } from '../adv/CompAdvInfoBean';
import { AudioDTO } from '../content/AudioDTO';
import { ContentDTO } from '../content/ContentDTO';
export interface BaseDTO {
}
\ No newline at end of file
... ...
import { CompAdvMatInfoBean } from '../adv/CompAdvInfoBean';
import { AudioDTO } from '../content/AudioDTO';
import { ContentDTO } from '../content/ContentDTO';
import { BaseDTO } from './BaseDTO';
export interface CompDTO {
export interface CompDTO extends BaseDTO{
backgroundColor: string;
backgroundImgUrl: string;
cityCode: string;
... ...
... ... @@ -6,8 +6,9 @@ import { slideShows } from '../morningevening/slideShows';
import { VoiceInfoDTO } from '../detail/VoiceInfoDTO';
import { RmhInfoDTO } from '../detail/RmhInfoDTO';
import { commentInfo } from './commentInfo';
import { BaseDTO } from '../component/BaseDTO';
export interface ContentDTO {
export interface ContentDTO extends BaseDTO {
appStyle: string;
cityCode: string;
coverSize: string;
... ...
... ... @@ -53,7 +53,7 @@ export struct CardAdvBottom {
let a = this.compDTO;
let currentIndex = -1
for (let i = 0; i < this.pageModel.compList.size(); i++) {
let b = this.pageModel.compList.getData(i)
let b = this.pageModel.compList.getData(i) as CompDTO
if (a.compStyle === b.compStyle && a.matInfo === b.matInfo) {
currentIndex = i
break;
... ...
... ... @@ -65,7 +65,7 @@ export struct CardAdvTop {
let a = this.compDTO;
let currentIndex = -1
for (let i = 0; i < this.pageModel.compList.size(); i++) {
let b = this.pageModel.compList.getData(i)
let b = this.pageModel.compList.getData(i) as CompDTO
if (a.compStyle === b.compStyle && a.matInfo === b.matInfo) {
currentIndex = i
break;
... ...
import { ContentDTO , Action,GoldenPositionExtraBean} from 'wdBean';
import { CommonConstants ,ViewType} from 'wdConstant';
import PageViewModel from '../../viewmodel/PageViewModel';
import RefreshLayout from '../page/RefreshLayout';
import { RefreshLayoutBean } from '../page/RefreshLayoutBean';
import PageModel from '../../viewmodel/PageModel';
import { DateTimeUtils, LazyDataSource } from 'wdKit/Index';
import router from '@ohos.router';
... ... @@ -10,6 +8,12 @@ import { CardParser } from '../CardParser';
import { channelSkeleton } from '../skeleton/channelSkeleton'
import { ErrorComponent } from '../view/ErrorComponent';
import { EmptyComponent } from '../view/EmptyComponent';
import { listTouchEvent } from '../../utils/PullDownRefresh';
import PageAdModel from '../../viewmodel/PageAdvModel';
import { RefreshLayoutBean } from '../refresh/RefreshLayoutBean';
import RefreshLayout from '../refresh/RefreshLayout';
import PageNoMoreLayout from './PageNoMoreLayout';
import { NoMoreBean } from './NoMoreBean';
const TAG: string = 'ThemeListPage';
... ... @@ -17,22 +21,26 @@ const TAG: string = 'ThemeListPage';
@Component
struct ThemeListPage {
@State private pageModel: PageModel = new PageModel();
@State data: LazyDataSource<ContentDTO> = new LazyDataSource();
sort: number = 1;
currentPage: number = 1;
pageSize: number = 20;
title: string = '金刚位聚合页'
extra: string = ''
@State private pageAdvModel: PageAdModel = new PageAdModel();
aboutToAppear(): void {
let par:Action = router.getParams() as Action;
let params = par?.params;
this.extra = params?.extra?.extra || '';
this.title = params?.extra?.title || '';
PageViewModel.postThemeList(this.sort, this.currentPage, this.pageSize,this.extra).then((liveReviewDTO) => {
this.pageModel.pageType = 1;
this.pageModel.extra = this.extra;
PageViewModel.postThemeList(this.currentPage, this.pageSize,this.extra).then((liveReviewDTO) => {
console.log(`postThemeList${JSON.stringify(liveReviewDTO)}`)
this.data.push(...liveReviewDTO.list)
if(this.data.getDataArray().length > 0){
this.pageModel.compList.addItems(liveReviewDTO.list)
if(this.pageModel.compList.getDataArray().length > 0){
this.pageModel.viewType = ViewType.LOADED;
}else{
this.pageModel.viewType = ViewType.EMPTY
... ... @@ -56,6 +64,13 @@ struct ThemeListPage {
.padding({
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onTouch((event: TouchEvent | undefined) => {
if (event) {
if (this.pageModel.viewType === ViewType.LOADED) {
listTouchEvent(this.pageModel, this.pageAdvModel, event);
}
}
})
}
@Builder
LoadingLayout() {
... ... @@ -105,12 +120,12 @@ struct ThemeListPage {
// 下拉刷新
ListItem() {
RefreshLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage,
this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight)
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.load,
this.pageModel.offsetY)
})
}
LazyForEach(this.data, (contentDTO: ContentDTO, contentIndex: number) => {
LazyForEach(this.pageModel.compList, (contentDTO: ContentDTO, contentIndex: number) => {
ListItem() {
Column() {
CardParser({ contentDTO });
... ... @@ -119,6 +134,17 @@ struct ThemeListPage {
},
(contentDTO: ContentDTO, contentIndex: number) => contentDTO.pageId + contentIndex.toString()
)
// 加载更多
ListItem() {
if (this.pageModel.hasMore) {
// LoadMoreLayout({
// refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage,
// this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight)
// })
} else if (!this.pageModel.contentNeedScroll) {
PageNoMoreLayout({ noMoreBean: new NoMoreBean(this.pageModel.pageInfo.baselineCopywriting) })
}
}
}
.scrollBar(BarState.Off)
.cachedCount(8)
... ...
... ... @@ -180,7 +180,7 @@ export class PageRepository {
* 早晚报pageInfo请求
* */
static getMorningEveningPageInfoUrl(pageId: string) {
let url = HttpUrlUtils.getHost() + HttpUrlUtils.MORNING_EVENING_PAGE_INFO_PATH;
let url = HttpUrlUtils.getHost() + HttpUrlUtils.PAGE_INFO_PATH;
url = url + "?pageId=" + pageId;
Logger.info(TAG, "getMorningEveningPageInfoUrl url = " + url)
return url;
... ...
... ... @@ -4,7 +4,7 @@ import PageModel from '../viewmodel/PageModel';
import PageHelper from '../viewmodel/PageHelper';
import PageAdModel from '../viewmodel/PageAdvModel';
import { LoadStatus } from '../components/refresh/RefreshLayoutBean';
//下拉刷新上拉加载更多组件
export function listTouchEvent(pageModel: PageModel, pageAdvModel: PageAdModel, event: TouchEvent) {
switch (event.type) {
case TouchType.Down:
... ...
... ... @@ -51,6 +51,19 @@ export class PageHelper {
getPageInfo(pageModel: PageModel, pageAdvModel: PageAdModel) {
pageModel.currentPage = 1;
if(pageModel.pageType == 1){
PageViewModel.postThemeList(pageModel.currentPage, pageModel.pageSize,pageModel.extra).then((liveReviewDTO) => {
if(liveReviewDTO == null || liveReviewDTO.list == null || liveReviewDTO.list.length == 0){
pageModel.viewType = ViewType.EMPTY;
pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_NoContent1;
return;
}else{
//更新数据
pageModel.compList.addItems(liveReviewDTO.list);
closeRefresh(pageModel, true);
}
})
}else{
PageViewModel.getPageInfo(pageModel.pageId).then(pageInfo => {
if (pageInfo == null) {
pageModel.viewType = ViewType.EMPTY;
... ... @@ -66,6 +79,7 @@ export class PageHelper {
pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_ContentFailed;
})
}
}
async parseGroup(pageModel: PageModel) {
... ... @@ -292,6 +306,10 @@ export class PageHelper {
* comp加载更多,分页加载
*/
private compLoadMore(pageModel: PageModel) {
//聚合页
if(pageModel.pageType == 1){
}else{
PageViewModel.getPageData(pageModel.bizCopy())
.then((data: PageDTO) => {
pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
... ... @@ -318,6 +336,7 @@ export class PageHelper {
promptAction.showToast({ message: err });
})
}
}
/**
... ...
... ... @@ -7,6 +7,7 @@ import { GroupInfoDTO, PageInfoDTO } from 'wdBean/src/main/ets/bean/navigation/P
import { AdvRuleBean, CompAdvBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean';
import { WDViewDefaultType } from '../components/view/EmptyComponent';
import { LoadStatus } from '../components/refresh/RefreshLayoutBean';
import { BaseDTO } from 'wdBean/src/main/ets/bean/component/BaseDTO';
/**
* 页面下拉刷新、上拉加载数据bean。
... ... @@ -22,7 +23,7 @@ export default class PageModel {
groupList: GroupInfoDTO[] = [];
// 当前请求数据的group
groupData: GroupInfoDTO = {} as GroupInfoDTO;
compList: LazyDataSource<CompDTO> = new LazyDataSource();
compList: LazyDataSource<BaseDTO> = new LazyDataSource();
// 是否comp自己处理分页加载;默认是最后一个comp下的content有分页数据,需要节目内容的分页加载
// (如:首页-视频tab-直播tab,最后一个comp是直播回看列表,视频内容需要分页加载)
contentNeedScroll: boolean = false;
... ... @@ -58,7 +59,10 @@ export default class PageModel {
// 记录已经展示的稿件和组件数量
pageTotalCompSize: number = 0;
//0默认信息流,1聚合页
pageType: number = 0;
extra: string = ''
/**
* 简单复制业务数据
*/
... ...
... ... @@ -380,7 +380,7 @@ export class PageViewModel extends BaseViewModel {
})
}
async postThemeList(sort: number, pageNum: number, pageSize: number,extra: string) : Promise<LiveReviewDTO> {
async postThemeList(pageNum: number, pageSize: number,extra: string) : Promise<LiveReviewDTO> {
let bean: GoldenPositionExtraBean = JSON.parse(extra)
bean.pageNum = pageNum
bean.pageSize = pageSize
... ...