liyubing

feat(信息流):一行两图卡业务数据转换成本地 稿件数据 Card_Comp_Zh_Grid_Layout-02

@@ -39,7 +39,7 @@ export const enum CompStyle { @@ -39,7 +39,7 @@ export const enum CompStyle {
39 Zh_Single_Column_10 = 'Zh_Single_Column-10', //18 服务组合卡 39 Zh_Single_Column_10 = 'Zh_Single_Column-10', //18 服务组合卡
40 Zh_Single_Column_11 = 'Zh_Single_Column-11', //19 问政组合卡 40 Zh_Single_Column_11 = 'Zh_Single_Column-11', //19 问政组合卡
41 Zh_Grid_Layout_01 = 'Zh_Grid_Layout-01', //4 信息流组合卡 41 Zh_Grid_Layout_01 = 'Zh_Grid_Layout-01', //4 信息流组合卡
42 - Zh_Grid_Layout_02 = 'Zh_Grid_Layout-02', //7 双列流小视频,一行两图卡 42 + Zh_Grid_Layout_02 = 'Zh_Grid_Layout-02', //7 双列流小视频,一行两图卡 ->标题
43 Zh_Grid_Layout_03 = 'Zh_Grid_Layout-03', //11 金刚位卡 43 Zh_Grid_Layout_03 = 'Zh_Grid_Layout-03', //11 金刚位卡
44 Card_01 = '1', // 小图卡 44 Card_01 = '1', // 小图卡
45 Card_02 = '2', // 大图卡 45 Card_02 = '2', // 大图卡
@@ -80,5 +80,7 @@ export const enum CompStyle { @@ -80,5 +80,7 @@ export const enum CompStyle {
80 /** 80 /**
81 * 本地稿件和组件样式 81 * 本地稿件和组件样式
82 */ 82 */
83 - Card_Comp_Adv = 'card_comp_adv', // 83 + Card_Comp_Adv = 'card_comp_adv', // 信息流广告稿件
  84 +
  85 + Card_Comp_Zh_Grid_Layout_02 = 'Card_Comp_Zh_Grid_Layout-02', // 一行两列卡业务内容
84 } 86 }
@@ -238,7 +238,6 @@ export class ProcessUtils { @@ -238,7 +238,6 @@ export class ProcessUtils {
238 238
239 } 239 }
240 240
241 -  
242 Logger.debug(TAG, `gotoWeb, ${content.objectId}`) 241 Logger.debug(TAG, `gotoWeb, ${content.objectId}`)
243 } 242 }
244 243
@@ -7,10 +7,11 @@ import { VoiceInfoDTO } from '../detail/VoiceInfoDTO'; @@ -7,10 +7,11 @@ import { VoiceInfoDTO } from '../detail/VoiceInfoDTO';
7 import { RmhInfoDTO } from '../detail/RmhInfoDTO'; 7 import { RmhInfoDTO } from '../detail/RmhInfoDTO';
8 import { commentInfo } from './commentInfo'; 8 import { commentInfo } from './commentInfo';
9 import { BaseDTO } from '../component/BaseDTO'; 9 import { BaseDTO } from '../component/BaseDTO';
  10 +import { LiveRoomDataBean } from '../live/LiveRoomDataBean';
10 11
11 @Observed 12 @Observed
12 export class ContentDTO implements BaseDTO { 13 export class ContentDTO implements BaseDTO {
13 - shareFlag?:string='1'; 14 + shareFlag?: string = '1';
14 appStyle: string = ''; 15 appStyle: string = '';
15 cityCode: string = ''; 16 cityCode: string = '';
16 coverSize: string = ''; 17 coverSize: string = '';
@@ -62,8 +63,7 @@ export class ContentDTO implements BaseDTO { @@ -62,8 +63,7 @@ export class ContentDTO implements BaseDTO {
62 videoInfo: VideoInfoDTO = {} as VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的 63 videoInfo: VideoInfoDTO = {} as VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的
63 64
64 newsSummary: string = ''; //appstyle:2 ,新闻详情 65 newsSummary: string = ''; //appstyle:2 ,新闻详情
65 - contentText?: string ='';  
66 - 66 + contentText?: string = '';
67 // 二次请求接口,返回的数据,这里组装到content里; 67 // 二次请求接口,返回的数据,这里组装到content里;
68 interactData?: InteractDataDTO; 68 interactData?: InteractDataDTO;
69 hasMore: number = -1; 69 hasMore: number = -1;
@@ -85,6 +85,10 @@ export class ContentDTO implements BaseDTO { @@ -85,6 +85,10 @@ export class ContentDTO implements BaseDTO {
85 // 链接类型: 0:无链接;1:内链(文章);2:外链 85 // 链接类型: 0:无链接;1:内链(文章);2:外链
86 openType: string = ''; 86 openType: string = '';
87 extra: string = '' 87 extra: string = ''
  88 + /*
  89 + 本地辅助字段
  90 + */
  91 + liveRoomDataBean?: LiveRoomDataBean // 批查获取到的直播观看人数
88 92
89 static clone(old: ContentDTO): ContentDTO { 93 static clone(old: ContentDTO): ContentDTO {
90 let content = new ContentDTO(); 94 let content = new ContentDTO();
@@ -42,6 +42,16 @@ export interface PageInfoDTO { @@ -42,6 +42,16 @@ export interface PageInfoDTO {
42 pageAdList:CompAdvBean[] 42 pageAdList:CompAdvBean[]
43 43
44 md5:string 44 md5:string
  45 +
  46 + /*
  47 + 信息流页面,最后一个楼层的最后一个组件的信息源
  48 + lastCompSourceType = 0 从楼层接口获取数据(compinfor)
  49 + = 1 表示 直播回看数据源
  50 + */
  51 + lastCompSourceType: number
  52 +
  53 +
  54 +
45 } 55 }
46 56
47 export interface ChannelInfoDTO { 57 export interface ChannelInfoDTO {
@@ -8,6 +8,8 @@ import { Card5Component } from './cardview/Card5Component'; @@ -8,6 +8,8 @@ import { Card5Component } from './cardview/Card5Component';
8 import { AdvCardParser } from './cardViewAdv/AdvCardParser'; 8 import { AdvCardParser } from './cardViewAdv/AdvCardParser';
9 import { ZhCarouselLayout01 } from './compview/ZhCarouselLayout01'; 9 import { ZhCarouselLayout01 } from './compview/ZhCarouselLayout01';
10 import { ZhGridLayout02 } from './compview/ZhGridLayout02'; 10 import { ZhGridLayout02 } from './compview/ZhGridLayout02';
  11 +import { ZhGridLayout02News } from './compview/ZhGridLayout02News';
  12 +import { ZhGridLayout02NewsContent } from './compview/ZhGridLayout02NewsContent';
11 import { ZhGridLayout03 } from './compview/ZhGridLayout03'; 13 import { ZhGridLayout03 } from './compview/ZhGridLayout03';
12 import { ZhSingleColumn04 } from './compview/ZhSingleColumn04'; 14 import { ZhSingleColumn04 } from './compview/ZhSingleColumn04';
13 import { ZhSingleColumn05 } from './compview/ZhSingleColumn05'; 15 import { ZhSingleColumn05 } from './compview/ZhSingleColumn05';
@@ -37,12 +39,10 @@ export struct CompParser { @@ -37,12 +39,10 @@ export struct CompParser {
37 39
38 build() { 40 build() {
39 Column() { 41 Column() {
40 - if (this.compDTO.name != "月度排行卡") {  
41 42
42 this.componentBuilder(); 43 this.componentBuilder();
43 } 44 }
44 } 45 }
45 - }  
46 46
47 @Builder 47 @Builder
48 componentBuilder() { 48 componentBuilder() {
@@ -75,9 +75,14 @@ export struct CompParser { @@ -75,9 +75,14 @@ export struct CompParser {
75 } else if (this.compDTO.compStyle === CompStyle.Zh_Single_Row_03) { 75 } else if (this.compDTO.compStyle === CompStyle.Zh_Single_Row_03) {
76 ZhSingleRow03({ compDTO: this.compDTO }) 76 ZhSingleRow03({ compDTO: this.compDTO })
77 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 77 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
78 - } else if (this.compDTO.compStyle === CompStyle.Zh_Grid_Layout_02) {  
79 - ZhGridLayout02({ compDTO: this.compDTO })  
80 - Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 78 + } else if (this.compDTO.compStyle === CompStyle.Zh_Grid_Layout_02) { //双列流小视频,一行两图卡 ->标题
  79 + //ZhGridLayout02({ compDTO: this.compDTO })
  80 + ZhGridLayout02News({ compDTO: this.compDTO })
  81 + // Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
  82 + } else if (this.compDTO.compStyle === CompStyle.Card_Comp_Zh_Grid_Layout_02) { //双列流小视频,一行两图卡
  83 +
  84 + ZhGridLayout02NewsContent({ compDTO: this.compDTO })
  85 +
81 } else if (this.compDTO.compStyle === CompStyle.Zh_Grid_Layout_03) { 86 } else if (this.compDTO.compStyle === CompStyle.Zh_Grid_Layout_03) {
82 ZhGridLayout03({ compDTO: this.compDTO }) 87 ZhGridLayout03({ compDTO: this.compDTO })
83 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 88 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
@@ -105,7 +110,7 @@ export struct CompParser { @@ -105,7 +110,7 @@ export struct CompParser {
105 // ZhSingleColumn05({ compDTO: compDTO }) 110 // ZhSingleColumn05({ compDTO: compDTO })
106 // Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 111 // Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
107 } else if (this.compDTO.compStyle === CompStyle.Zh_Single_Column_09) { 112 } else if (this.compDTO.compStyle === CompStyle.Zh_Single_Column_09) {
108 - Divider().strokeWidth(3).color('#ffffff').padding({ left: 16, right: 16 }).margin({top: -3}) 113 + Divider().strokeWidth(3).color('#ffffff').padding({ left: 16, right: 16 }).margin({ top: -3 })
109 Divider().strokeWidth(6).color('#f5f5f5') 114 Divider().strokeWidth(6).color('#f5f5f5')
110 ZhSingleColumn09({ compDTO: this.compDTO }) 115 ZhSingleColumn09({ compDTO: this.compDTO })
111 Divider().strokeWidth(6).color('#f5f5f5') 116 Divider().strokeWidth(6).color('#f5f5f5')
  1 +import { CompDTO, ContentDTO, LiveRoomDataBean } from 'wdBean';
  2 +import { CommonConstants } from 'wdConstant/Index';
  3 +import { Logger } from 'wdKit/Index';
  4 +import { ProcessUtils } from 'wdRouter';
  5 +import PageViewModel from '../../viewmodel/PageViewModel';
  6 +import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
  7 +
  8 +
  9 +/**
  10 + * 双图卡 的标题组件
  11 + *
  12 + */
  13 +@Component
  14 +export struct ZhGridLayout02News {
  15 + @State compDTO: CompDTO = new CompDTO
  16 +
  17 + aboutToAppear() {
  18 + }
  19 +
  20 + build() {
  21 + Column() {
  22 + Row() {
  23 + Image($r("app.media.redLine"))
  24 + .width(3)
  25 + .height(16)
  26 + .margin({ right: 4 })
  27 + Text(this.compDTO.objectTitle)
  28 + .fontSize($r("app.float.font_size_17"))
  29 + .fontColor($r("app.color.color_222222"))
  30 + .fontWeight(600)
  31 + }
  32 + .justifyContent(FlexAlign.Start)
  33 + .margin({ top: 16, bottom: 8 })
  34 + .width(CommonConstants.FULL_WIDTH)
  35 + }
  36 + .width(CommonConstants.FULL_WIDTH)
  37 + .padding({ left: 16, right: 16 })
  38 +
  39 + }
  40 +}
  41 +
  42 +
  1 +import { CompDTO, ContentDTO, LiveRoomDataBean } from 'wdBean';
  2 +import { CommonConstants } from 'wdConstant/Index';
  3 +import { Logger } from 'wdKit/Index';
  4 +import { ProcessUtils } from 'wdRouter';
  5 +import PageViewModel from '../../viewmodel/PageViewModel';
  6 +import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
  7 +
  8 +let listSize: number = 2;
  9 +
  10 +/**
  11 + * 双图卡 的标题组件
  12 + *
  13 + */
  14 +@Component
  15 +export struct ZhGridLayout02NewsContent {
  16 + @ObjectLink compDTO: CompDTO
  17 + @State loadImg: boolean = false;
  18 +
  19 + async aboutToAppear(): Promise<void> {
  20 +
  21 + this.loadImg = await onlyWifiLoadImg();
  22 + }
  23 +
  24 + build() {
  25 +
  26 + if (this.compDTO != undefined) {
  27 + GridRow({
  28 + gutter: { x: 12, y: 13 },
  29 + columns: { sm: listSize, md: 2 },
  30 + breakpoints: { value: ['320vp', '520vp', '840vp'] }
  31 + }) {
  32 + ForEach(this.compDTO.operDataList, (item: ContentDTO, index: number) => {
  33 + GridCol() {
  34 + this.buildItemCard(item);
  35 + }
  36 + })
  37 + }.width("100%").padding({ left: 16, right: 16 })
  38 + }
  39 +
  40 + }
  41 +
  42 + @Builder
  43 + buildItemCard(item: ContentDTO) {
  44 + Column() {
  45 + Stack({ alignContent: Alignment.BottomEnd }) {
  46 + Image(this.loadImg ? item.fullColumnImgUrls[0].url : '')
  47 + .backgroundColor(0xf5f5f5)
  48 + .width('100%')
  49 + .height(95)
  50 + .borderRadius(4)
  51 + if (item.liveRoomDataBean != null && item.liveRoomDataBean.pv > 0) {
  52 + Text(this.computeShowNum(item.liveRoomDataBean.pv))
  53 + .fontSize('11vp')
  54 + .fontWeight(400)
  55 + .fontColor(Color.White)
  56 + .margin({
  57 + right: '5vp',
  58 + bottom: '5vp'
  59 + })
  60 + }
  61 + }
  62 +
  63 + Text(item.newsTitle)
  64 + .margin({ top: '6',bottom:'10' })
  65 + .fontSize(13)
  66 + .maxLines(2)
  67 + .textOverflow({ overflow: TextOverflow.Ellipsis })
  68 + }
  69 + .width('100%')
  70 + .onClick(() => {
  71 + ProcessUtils.processPage(item)
  72 + })
  73 + }
  74 +
  75 + private computeShowNum(count: number): string {
  76 + if (count >= 10000) {
  77 + let num = (count / 10000).toFixed(1)
  78 + if (Number(num.substring(num.length - 1)) == 0) {
  79 + num = num.substring(0, num.length - 2)
  80 + }
  81 + return num + '万人参加'
  82 + }
  83 + return `${count}人参加`
  84 + }
  85 +}
  86 +
  87 +
1 -import { CompDTO, ContentDTO, InteractDataDTO, LiveReviewDTO, PageDTO, PageInfoDTO } from 'wdBean'; 1 +import { CompDTO, ContentDTO, InteractDataDTO, LiveReviewDTO, LiveRoomDataBean, PageDTO, PageInfoDTO } from 'wdBean';
2 import { CompStyle, ViewType } from 'wdConstant/Index'; 2 import { CompStyle, ViewType } from 'wdConstant/Index';
3 import { CollectionUtils, DateTimeUtils, LazyDataSource, Logger, NetworkUtil, StringUtils } from 'wdKit'; 3 import { CollectionUtils, DateTimeUtils, LazyDataSource, Logger, NetworkUtil, StringUtils } from 'wdKit';
4 import { closeRefresh } from '../utils/PullDownRefresh'; 4 import { closeRefresh } from '../utils/PullDownRefresh';
@@ -75,7 +75,7 @@ export class PageHelper { @@ -75,7 +75,7 @@ export class PageHelper {
75 // 清空comp列表 75 // 清空comp列表
76 pageModel.compList.clear() 76 pageModel.compList.clear()
77 } 77 }
78 - this.analysisPageGroupCompData(pageModel,pageDto, pageInfo, index == pageInfo.groups.length - 1) 78 + this.analysisPageGroupCompData(pageDto, pageInfo)
79 Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length); 79 Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length);
80 } 80 }
81 81
@@ -178,14 +178,31 @@ export class PageHelper { @@ -178,14 +178,31 @@ export class PageHelper {
178 // await,确保groups接口顺序执行 178 // await,确保groups接口顺序执行
179 let pageDto = await PageViewModel.getPageGroupCompData(pageModel.bizCopy()) as PageDTO 179 let pageDto = await PageViewModel.getPageGroupCompData(pageModel.bizCopy()) as PageDTO
180 let index = pageInfo.groups.indexOf(group) 180 let index = pageInfo.groups.indexOf(group)
181 - if (index == 0) {  
182 - // 清空comp列表  
183 - pageModel.compList.clear() 181 +
  182 + // 解析楼层组件
  183 + this.analysisPageGroupCompData(pageDto, pageInfo)
  184 +
  185 + // 最后一个楼层,特殊处理
  186 + if (index == pageInfo.groups.length - 1) {
  187 + // 检测楼层最后一个组件业务数据是否需要通过访问接口获取
  188 + let comp: CompDTO = pageDto.compList[pageDto.compList.length - 1]
  189 + // 直播回放,需要二次请求数据
  190 + if (comp.compStyle == CompStyle.Zh_Grid_Layout_02) {
  191 + pageInfo.lastCompSourceType = 1
  192 + let listReviewDtoBean = await PageViewModel.getLiveReviewUrl(1, 20) as LiveReviewDTO
  193 + Logger.error("ZZZXXXXX", 'getLiveReviewData------1---' + listReviewDtoBean.list.length);
  194 + // 创建一行两图卡组件
  195 + this.createDoubleColumComp(listReviewDtoBean, pageInfo)
  196 +
  197 + Logger.error("ZZZXXXXX", 'getLiveReviewData-----2----' + listReviewDtoBean.list.length);
  198 +
  199 + } else {
  200 + pageInfo.lastCompSourceType = 0
  201 + }
184 // // 保存缓存 202 // // 保存缓存
185 // CacheData.saveCacheData(CacheData.compGroupInfoDataCacheKey + pageModel.pageId + pageModel.groupId, pageDto, 203 // CacheData.saveCacheData(CacheData.compGroupInfoDataCacheKey + pageModel.pageId + pageModel.groupId, pageDto,
186 // pageDto.md5) 204 // pageDto.md5)
187 } 205 }
188 - this.analysisPageGroupCompData(pageModel,pageDto, pageInfo, index == pageInfo.groups.length - 1)  
189 Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length); 206 Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length);
190 } 207 }
191 208
@@ -196,9 +213,11 @@ export class PageHelper { @@ -196,9 +213,11 @@ export class PageHelper {
196 // 处理页面广告数据,投放到页面的位置 213 // 处理页面广告数据,投放到页面的位置
197 this.handlePageCompAdvPostion(pageInfo.oneRequestPageGroupCompList, pageModel, pageInfo.pageAdList); 214 this.handlePageCompAdvPostion(pageInfo.oneRequestPageGroupCompList, pageModel, pageInfo.pageAdList);
198 215
  216 + // 清空comp列表
  217 + pageModel.compList.clear()
199 //遍历所有组件和稿件数据 push到页面 218 //遍历所有组件和稿件数据 push到页面
200 for (let element of pageInfo.oneRequestPageGroupCompList) { 219 for (let element of pageInfo.oneRequestPageGroupCompList) {
201 - pageModel.compList.push(CompDTO.createNewsBean(element)) 220 + pageModel.compList.push(element)
202 } 221 }
203 222
204 // 批查互动数据 223 // 批查互动数据
@@ -225,26 +244,11 @@ export class PageHelper { @@ -225,26 +244,11 @@ export class PageHelper {
225 * @param pageInfo 信息流页面信息 244 * @param pageInfo 信息流页面信息
226 * @param isLastGroup pageDto信息是不是最后一个楼层 245 * @param isLastGroup pageDto信息是不是最后一个楼层
227 */ 246 */
228 - private async analysisPageGroupCompData(pageModel: PageModel,pageDto: PageDTO, pageInfo: PageInfoDTO, isLastGroup: boolean) { 247 + private async analysisPageGroupCompData(pageDto: PageDTO, pageInfo: PageInfoDTO) {
229 248
230 if (pageDto && pageDto.compList && pageDto.compList.length > 0) { 249 if (pageDto && pageDto.compList && pageDto.compList.length > 0) {
231 250
232 - let pageCompList: ArrayList<CompDTO> = new ArrayList() // 收集楼层组件、稿件和本地组件容器  
233 - // 遍历楼层的组件数据  
234 - pageDto.compList.forEach((element: CompDTO) => {  
235 - let contentInfo: ContentDTO = CollectionUtils.getElement(element.operDataList, 0);  
236 - //移除音频 和 活动  
237 - if (contentInfo && (contentInfo.objectType === '13' || contentInfo.objectType === '3')) {  
238 - Logger.debug(TAG, 'getGroupData 移除音频 和 活动');  
239 - } else {  
240 - // 暂时屏蔽活动和音频详情入口  
241 - if (element.operDataList[0]?.objectType === '3' || element.operDataList[0]?.objectType === '13') {  
242 - } else {  
243 - pageCompList.add(element)  
244 - }  
245 - }  
246 - })  
247 - 251 + let pageCompList = this.factoryCompArray(pageDto.compList)
248 // pageInfor 记录 252 // pageInfor 记录
249 pageCompList.forEach((comp: CompDTO) => { 253 pageCompList.forEach((comp: CompDTO) => {
250 pageInfo.oneRequestPageGroupCompList.add(comp) 254 pageInfo.oneRequestPageGroupCompList.add(comp)
@@ -255,19 +259,6 @@ export class PageHelper { @@ -255,19 +259,6 @@ export class PageHelper {
255 pageInfo.pageAdList.push(...pageDto.compAdList) 259 pageInfo.pageAdList.push(...pageDto.compAdList)
256 } 260 }
257 261
258 - // 检测最后一个楼层是否有一行两图卡  
259 - if (isLastGroup) {  
260 - // 最后一个楼层,特殊处理  
261 - // 检测楼层最后一个组件业务数据是否需要通过访问接口获取  
262 - let comp: CompDTO = pageDto.compList[pageDto.compList.length - 1]  
263 - // 直播回放,需要二次请求数据  
264 - if ( comp.compStyle == CompStyle.Zh_Grid_Layout_02) {  
265 - // 这个comp,数据自己二次请求,自己分页处理,这里加flag,将page层滑动及loadmore ui去掉  
266 - pageModel.contentNeedScroll = true  
267 -  
268 - //this.getLiveReviewData(pageInfo,comp)  
269 - }  
270 - }  
271 } 262 }
272 263
273 } 264 }
@@ -295,8 +286,16 @@ export class PageHelper { @@ -295,8 +286,16 @@ export class PageHelper {
295 promptAction.showToast({ message: err }); 286 promptAction.showToast({ message: err });
296 }) 287 })
297 } else { 288 } else {
  289 +
  290 + if (pageModel.pageInfo.lastCompSourceType == 1) {
  291 + // 加载更多 走 直播回看接口
  292 + this.getLiveReviewData(pageModel, pageModel.pageInfo)
  293 +
  294 + } else {
  295 + // 默认加载更多走 楼层接口
298 PageViewModel.getPageGroupCompData(pageModel.bizCopy()) 296 PageViewModel.getPageGroupCompData(pageModel.bizCopy())
299 .then((data: PageDTO) => { 297 .then((data: PageDTO) => {
  298 +
300 if (data == null || data.compList == null || data.compList.length == 0) { 299 if (data == null || data.compList == null || data.compList.length == 0) {
301 pageModel.hasMore = false; 300 pageModel.hasMore = false;
302 } else { 301 } else {
@@ -314,6 +313,7 @@ export class PageHelper { @@ -314,6 +313,7 @@ export class PageHelper {
314 }) 313 })
315 } 314 }
316 } 315 }
  316 + }
317 317
318 318
319 /** 319 /**
@@ -321,9 +321,34 @@ export class PageHelper { @@ -321,9 +321,34 @@ export class PageHelper {
321 */ 321 */
322 private loadMorePageComp(pageModel: PageModel, pageDto: PageDTO) { 322 private loadMorePageComp(pageModel: PageModel, pageDto: PageDTO) {
323 323
324 - let pageCompList: ArrayList<CompDTO> = new ArrayList() // 收集页面组件、稿件和本地组件容器 324 + let pageCompList = this.factoryCompArray(pageDto.compList) // 收集页面组件、稿件和本地组件容器
  325 +
  326 + // pageInfor 记录
  327 + pageModel.pageInfo.oneRequestPageGroupCompList.clear()
  328 + pageCompList.forEach((comp: CompDTO) => {
  329 + pageModel.pageInfo.oneRequestPageGroupCompList.add(comp)
  330 + })
  331 +
  332 + // 记录
  333 + pageModel.pageTotalCompSize = pageCompList.length + pageModel.pageTotalCompSize
  334 + // 处理页面广告数据,投放到页面的位置
  335 + this.handlePageCompAdvPostion(pageCompList, pageModel, pageDto.compAdList);
  336 +
  337 + //遍历所有组件和稿件数据 push到页面
  338 + for (let element of pageCompList) {
  339 + pageModel.compList.push(element)
  340 + }
325 341
326 - pageDto.compList.forEach((element: CompDTO) => { 342 + }
  343 +
  344 + /**
  345 + * 加工 组件数组信息
  346 + * @param compList
  347 + * @returns
  348 + */
  349 + private factoryCompArray(compList: CompDTO[]): ArrayList<CompDTO> {
  350 + let pageCompList: ArrayList<CompDTO> = new ArrayList() // 收集页面组件、稿件和本地组件容器
  351 + compList.forEach((element: CompDTO) => {
327 let contentInfo: ContentDTO = CollectionUtils.getElement(element.operDataList, 0); 352 let contentInfo: ContentDTO = CollectionUtils.getElement(element.operDataList, 0);
328 //移除音频 和 活动 353 //移除音频 和 活动
329 if (contentInfo && (contentInfo.objectType === '13' || contentInfo.objectType === '3')) { 354 if (contentInfo && (contentInfo.objectType === '13' || contentInfo.objectType === '3')) {
@@ -332,22 +357,17 @@ export class PageHelper { @@ -332,22 +357,17 @@ export class PageHelper {
332 // 暂时屏蔽活动和音频详情入口 357 // 暂时屏蔽活动和音频详情入口
333 if (element.operDataList[0]?.objectType === '3' || element.operDataList[0]?.objectType === '13') { 358 if (element.operDataList[0]?.objectType === '3' || element.operDataList[0]?.objectType === '13') {
334 } else { 359 } else {
335 - pageCompList.add(element) 360 + if (element.name == "月度排行卡") {
  361 +
  362 + } else {
  363 + pageCompList.add(CompDTO.createNewsBean(element))
  364 + }
336 } 365 }
337 } 366 }
338 367
339 }) 368 })
340 369
341 - // 记录  
342 - pageModel.pageTotalCompSize = pageCompList.length + pageModel.pageTotalCompSize  
343 - // 处理页面广告数据,投放到页面的位置  
344 - this.handlePageCompAdvPostion(pageCompList, pageModel, pageDto.compAdList);  
345 -  
346 - //遍历所有组件和稿件数据 push到页面  
347 - for (let element of pageCompList) {  
348 - pageModel.compList.push(CompDTO.createNewsBean(element))  
349 - }  
350 - 370 + return pageCompList
351 } 371 }
352 372
353 /** 373 /**
@@ -356,6 +376,8 @@ export class PageHelper { @@ -356,6 +376,8 @@ export class PageHelper {
356 * @param pageModel 376 * @param pageModel
357 */ 377 */
358 private allCompBatchRequest(compList: CompDTO[], pageModel: PageModel) { 378 private allCompBatchRequest(compList: CompDTO[], pageModel: PageModel) {
  379 +
  380 + // 批查人数
359 PageViewModel.getInteractData(compList).then((data: InteractDataDTO[]) => { 381 PageViewModel.getInteractData(compList).then((data: InteractDataDTO[]) => {
360 // 刷新,替换所有数据 382 // 刷新,替换所有数据
361 this.resetInteract(data, pageModel.compList) 383 this.resetInteract(data, pageModel.compList)
@@ -366,6 +388,9 @@ export class PageHelper { @@ -366,6 +388,9 @@ export class PageHelper {
366 } 388 }
367 }) 389 })
368 390
  391 + // 批查直播观看人数
  392 + // this.getLiveRoomDataInfo(compList)
  393 +
369 // 测试数据 394 // 测试数据
370 // setTimeout(() => { 395 // setTimeout(() => {
371 // let index = 1 396 // let index = 1
@@ -381,6 +406,59 @@ export class PageHelper { @@ -381,6 +406,59 @@ export class PageHelper {
381 } 406 }
382 407
383 /** 408 /**
  409 + * 直播回看的批查数据
  410 + * @param list
  411 + * @param compList
  412 + */
  413 + private getLiveRoomDataInfo(compList: CompDTO[]) {
  414 +
  415 + let list: ContentDTO[] = []
  416 + compList.forEach((comp: CompDTO) => {
  417 + if (comp.compStyle == CompStyle.Card_Comp_Zh_Grid_Layout_02) {
  418 + list.push(...comp.operDataList)
  419 + }
  420 + })
  421 +
  422 + let time = DateTimeUtils.getTimeStamp().toString()
  423 +
  424 + const reserveIds = this.getLiveDetailIds(list)
  425 + PageViewModel.getLiveRoomBatchInfo(reserveIds).then((result) => {
  426 + if (result && result.length > 0) {
  427 + result.forEach((bean: LiveRoomDataBean) => {
  428 + for (let item of list) {
  429 + if (item.objectId == bean.liveId.toString()) {
  430 + item.liveRoomDataBean = bean
  431 + outer: for (let compBean of compList) {
  432 + for (let contentBean of compBean.operDataList) {
  433 + if (contentBean === item) {
  434 + compBean.timestamp = time
  435 + break outer
  436 + }
  437 + }
  438 + }
  439 + break
  440 + }
  441 + }
  442 + })
  443 + }
  444 + }).catch(() => {
  445 + })
  446 + }
  447 +
  448 + /**
  449 + * 获取直播详情id入参
  450 + * @param list
  451 + * @returns
  452 + */
  453 + private getLiveDetailIds(list: ContentDTO[]): string {
  454 + let idList: string[] = []
  455 + list.forEach(item => {
  456 + idList.push(item.objectId)
  457 + });
  458 + return idList.join(',')
  459 + }
  460 +
  461 + /**
384 * 刷新互动数据到compList 462 * 刷新互动数据到compList
385 * @param interact 批查互动数据结果 463 * @param interact 批查互动数据结果
386 * @param compList comp list 464 * @param compList comp list
@@ -560,12 +638,99 @@ export class PageHelper { @@ -560,12 +638,99 @@ export class PageHelper {
560 /** 638 /**
561 * 获取直播回看数据 639 * 获取直播回看数据
562 */ 640 */
563 - private async getLiveReviewData(pageInfo: PageInfoDTO,comp: CompDTO) { 641 + private async getLiveReviewData(pageModel: PageModel, pageInfo: PageInfoDTO) {
564 642
565 - let currentPage = 1 643 + let currentPage = pageModel.currentPage
566 let pageSize = 20 644 let pageSize = 20
567 - let listReviewDtoBean = await PageViewModel.getLiveReviewUrl(currentPage, pageSize) as LiveReviewDTO  
568 - Logger.error("ZZZXXXXX", 'getLiveReviewData---------'+listReviewDtoBean.list.length); 645 +
  646 + PageViewModel.getLiveReviewUrl(currentPage, pageSize).then((liveReviewDTO) => {
  647 + if (liveReviewDTO == null || liveReviewDTO.list == null || liveReviewDTO.list.length == 0) {
  648 + pageModel.hasMore = false;
  649 + } else {
  650 +
  651 + pageInfo.oneRequestPageGroupCompList.clear()
  652 + // 直接认为有分页,一直加载分页。直到没有数据,再停止
  653 + pageModel.currentPage++;
  654 + pageModel.hasMore = true;
  655 +
  656 + let haveMoveContent = false
  657 + //获取当前页面最后一个组件
  658 + let lastIndex = pageModel.compList.totalCount() - 1
  659 + let lastComp = pageModel.compList.getData(lastIndex) as CompDTO
  660 + // 一行两图卡,需要从奇数 补齐成偶数内容
  661 + if (lastComp.compStyle == CompStyle.Card_Comp_Zh_Grid_Layout_02) {
  662 +
  663 + let operLength = lastComp.operDataList.length
  664 + Logger.error("ZZZXXXXX", 'getLiveReviewData------1---operLength=' + operLength);
  665 + // 最后一个组件的业务数据是奇数,需要从获取更多的业务数据中补一个数据
  666 + if (operLength === 1) {
  667 + lastComp.operDataList.push(liveReviewDTO.list[0])
  668 + // 更新某个组件
  669 + pageModel.compList.updateItem(lastComp, lastIndex)
  670 + // 移走新获取的数据中第一条数据
  671 + liveReviewDTO.list.splice(0, 1)
  672 + }
  673 + }
  674 +
  675 + this.createDoubleColumComp(liveReviewDTO, pageInfo)
  676 + // 统计页面的总的组件和稿件数量
  677 + pageModel.pageTotalCompSize = pageInfo.oneRequestPageGroupCompList.length + pageModel.pageTotalCompSize
  678 + //遍历所有组件和稿件数据 push到页面
  679 + for (let element of pageInfo.oneRequestPageGroupCompList) {
  680 + pageModel.compList.push(element)
  681 + }
  682 +
  683 + // 批查直播观看人数
  684 + // if (haveMoveContent) {
  685 + // // 把当前获取到的直播回看数据
  686 + // liveReviewDTO.list.push(lastComp.operDataList[1])
  687 + // pageInfo.oneRequestPageGroupCompList.add(lastComp)
  688 + // }
  689 + // this.getLiveRoomDataInfo(liveReviewDTO.list, pageInfo.oneRequestPageGroupCompList)
  690 +
  691 + }
  692 +
  693 + }).catch((err: string | Resource) => {
  694 + promptAction.showToast({ message: err });
  695 + })
  696 + }
  697 +
  698 + /**
  699 + * 创建一行两图卡 自定义的业务稿件
  700 + * @param listReviewDtoBean
  701 + * @param pageInfo
  702 + */
  703 + private async createDoubleColumComp(listReviewDtoBean: LiveReviewDTO, pageInfo: PageInfoDTO, test?: boolean) {
  704 + /*
  705 + 两个业务 内容 配置一个comp
  706 + */
  707 + let length = listReviewDtoBean.list.length
  708 +
  709 + Logger.error("ZZZXXXXX", 'createDoubleColumComp------1---test=' + test + " length=" + length);
  710 + if (test) {
  711 + // 偶数变成奇数
  712 + if (length % 2 === 0) {
  713 + listReviewDtoBean.list.splice(length - 1, 1)
  714 + length = listReviewDtoBean.list.length
  715 + }
  716 + }
  717 +
  718 + for (let i = 0; i < length; i = i + 2) {
  719 + let sliceArray: ContentDTO[]
  720 + let j = i + 2
  721 +
  722 + if (j < length) {
  723 + sliceArray = listReviewDtoBean.list.slice(i, j)
  724 + } else {
  725 + sliceArray = listReviewDtoBean.list.slice(i)
  726 + }
  727 + // 创建一行两图卡 自定义的业务稿件
  728 + let doubleColumnLiveReviewComp = new CompDTO()
  729 + doubleColumnLiveReviewComp.compStyle = CompStyle.Card_Comp_Zh_Grid_Layout_02
  730 + let operDataList: ContentDTO[] = sliceArray
  731 + doubleColumnLiveReviewComp.operDataList = operDataList
  732 + pageInfo.oneRequestPageGroupCompList.add(doubleColumnLiveReviewComp)
  733 + }
569 734
570 } 735 }
571 } 736 }