zhenghy

Merge remote-tracking branch 'origin/main'

@@ -61,6 +61,7 @@ export class ContentDTO implements BaseDTO { @@ -61,6 +61,7 @@ export class ContentDTO implements BaseDTO {
61 videoInfo: VideoInfoDTO = {} as VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的 61 videoInfo: VideoInfoDTO = {} as VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的
62 62
63 newsSummary: string = ''; //appstyle:2 ,新闻详情 63 newsSummary: string = ''; //appstyle:2 ,新闻详情
  64 + contentText?: string ='';
64 65
65 // 二次请求接口,返回的数据,这里组装到content里; 66 // 二次请求接口,返回的数据,这里组装到content里;
66 interactData?: InteractDataDTO; 67 interactData?: InteractDataDTO;
@@ -16,6 +16,7 @@ import { Card17Component } from './cardview/Card17Component'; @@ -16,6 +16,7 @@ import { Card17Component } from './cardview/Card17Component';
16 import { Card19Component } from './cardview/Card19Component'; 16 import { Card19Component } from './cardview/Card19Component';
17 import { Card20Component } from './cardview/Card20Component'; 17 import { Card20Component } from './cardview/Card20Component';
18 import { Card21Component } from './cardview/Card21Component'; 18 import { Card21Component } from './cardview/Card21Component';
  19 +import { SearchContentComponent } from './cardview/SearchContentComponent';
19 20
20 /** 21 /**
21 * card适配器,卡片样式汇总,依据ContentDTO#appStyle 22 * card适配器,卡片样式汇总,依据ContentDTO#appStyle
@@ -32,6 +33,9 @@ export struct CardParser { @@ -32,6 +33,9 @@ export struct CardParser {
32 33
33 @Builder 34 @Builder
34 contentBuilder(contentDTO: ContentDTO, compDTO: CompDTO) { 35 contentBuilder(contentDTO: ContentDTO, compDTO: CompDTO) {
  36 + if (!!contentDTO.contentText) {
  37 + SearchContentComponent({ contentDTO })
  38 + } else {
35 if (contentDTO.appStyle === CompStyle.Card_02) { 39 if (contentDTO.appStyle === CompStyle.Card_02) {
36 Card2Component({ contentDTO }) 40 Card2Component({ contentDTO })
37 } else if (contentDTO.appStyle === CompStyle.Card_03) { 41 } else if (contentDTO.appStyle === CompStyle.Card_03) {
@@ -73,4 +77,6 @@ export struct CardParser { @@ -73,4 +77,6 @@ export struct CardParser {
73 // .backgroundColor(Color.Brown) // 展示本页未实现的compStyle 77 // .backgroundColor(Color.Brown) // 展示本页未实现的compStyle
74 } 78 }
75 } 79 }
  80 +
  81 + }
76 } 82 }
@@ -96,10 +96,10 @@ export struct RmhTitle { @@ -96,10 +96,10 @@ export struct RmhTitle {
96 build() { 96 build() {
97 Flex() { 97 Flex() {
98 Stack() { 98 Stack() {
99 - Image(this.rmhInfo.rmhHeadUrl) 99 + Image(this.rmhInfo?.rmhHeadUrl)
100 .width(36) 100 .width(36)
101 .height(36).borderRadius(50) 101 .height(36).borderRadius(50)
102 - Image(this.rmhInfo.authIcon) 102 + Image(this.rmhInfo?.authIcon)
103 .width(14) 103 .width(14)
104 .height(14) 104 .height(14)
105 .borderRadius(50) 105 .borderRadius(50)
@@ -109,7 +109,7 @@ export struct RmhTitle { @@ -109,7 +109,7 @@ export struct RmhTitle {
109 .flexShrink(0) 109 .flexShrink(0)
110 110
111 Column() { 111 Column() {
112 - Text(this.rmhInfo.rmhName) 112 + Text(this.rmhInfo?.rmhName)
113 .fontSize($r('app.float.font_size_13')) 113 .fontSize($r('app.float.font_size_13'))
114 .fontColor($r('app.color.color_222222')) 114 .fontColor($r('app.color.color_222222'))
115 .fontWeight(600) 115 .fontWeight(600)
@@ -122,13 +122,13 @@ export struct RmhTitle { @@ -122,13 +122,13 @@ export struct RmhTitle {
122 .fontSize($r("app.float.font_size_12")) 122 .fontSize($r("app.float.font_size_12"))
123 .fontColor($r("app.color.color_B0B0B0")) 123 .fontColor($r("app.color.color_B0B0B0"))
124 } 124 }
125 - if (this.publishTime && this.rmhInfo.rmhDesc) { 125 + if (this.publishTime && this.rmhInfo?.rmhDesc) {
126 Image($r('app.media.point')) 126 Image($r('app.media.point'))
127 .width(16) 127 .width(16)
128 .height(16) 128 .height(16)
129 } 129 }
130 } 130 }
131 - Text(this.rmhInfo.rmhDesc) 131 + Text(this.rmhInfo?.rmhDesc)
132 .fontSize($r("app.float.font_size_12")) 132 .fontSize($r("app.float.font_size_12"))
133 .fontColor($r("app.color.color_B0B0B0")) 133 .fontColor($r("app.color.color_B0B0B0"))
134 .maxLines(1) 134 .maxLines(1)
@@ -141,7 +141,7 @@ export struct RmhTitle { @@ -141,7 +141,7 @@ export struct RmhTitle {
141 } 141 }
142 142
143 Blank() 143 Blank()
144 - if (this.rmhInfo.cnIsAttention) { 144 + if (this.rmhInfo?.cnIsAttention) {
145 Row() { 145 Row() {
146 if (Number(this.followStatus) === 0) { 146 if (Number(this.followStatus) === 0) {
147 Image($r('app.media.rmh_follow')) 147 Image($r('app.media.rmh_follow'))
@@ -40,7 +40,7 @@ export struct Card17Component { @@ -40,7 +40,7 @@ export struct Card17Component {
40 this.contentDTO.fullColumnImgUrls.length > 0 ? this.contentDTO.fullColumnImgUrls[0].url : '' : '') 40 this.contentDTO.fullColumnImgUrls.length > 0 ? this.contentDTO.fullColumnImgUrls[0].url : '' : '')
41 .backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5) 41 .backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5)
42 .width(CommonConstants.FULL_WIDTH) 42 .width(CommonConstants.FULL_WIDTH)
43 - .aspectRatio(16 / 9) 43 + .height(160)// .aspectRatio(CompUtils.ASPECT_RATIO_16_9)
44 .borderRadius({ 44 .borderRadius({
45 topLeft: $r('app.float.image_border_radius'), 45 topLeft: $r('app.float.image_border_radius'),
46 bottomLeft: $r('app.float.image_border_radius'), 46 bottomLeft: $r('app.float.image_border_radius'),
@@ -52,7 +52,7 @@ export struct Card17Component { @@ -52,7 +52,7 @@ export struct Card17Component {
52 this.contentDTO.fullColumnImgUrls.length > 1 ? this.contentDTO.fullColumnImgUrls[1].url : '' : '') 52 this.contentDTO.fullColumnImgUrls.length > 1 ? this.contentDTO.fullColumnImgUrls[1].url : '' : '')
53 .backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5) 53 .backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5)
54 .width(CommonConstants.FULL_WIDTH) 54 .width(CommonConstants.FULL_WIDTH)
55 - .aspectRatio(16 / 9) 55 + .height(79)// .aspectRatio(CompUtils.ASPECT_RATIO_16_9)
56 .margin({ bottom: 1 }) 56 .margin({ bottom: 1 })
57 .borderRadius({ 57 .borderRadius({
58 topRight: $r('app.float.image_border_radius'), 58 topRight: $r('app.float.image_border_radius'),
@@ -69,7 +69,7 @@ export struct Card17Component { @@ -69,7 +69,7 @@ export struct Card17Component {
69 this.contentDTO.fullColumnImgUrls.length > 2 ? this.contentDTO.fullColumnImgUrls[2].url : '' : '') 69 this.contentDTO.fullColumnImgUrls.length > 2 ? this.contentDTO.fullColumnImgUrls[2].url : '' : '')
70 .backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5) 70 .backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5)
71 .width(CommonConstants.FULL_WIDTH) 71 .width(CommonConstants.FULL_WIDTH)
72 - .aspectRatio(16 / 9) 72 + .height(79)// .aspectRatio(CompUtils.ASPECT_RATIO_16_9)
73 .margin({ top: 1 }) 73 .margin({ top: 1 })
74 .borderRadius({ 74 .borderRadius({
75 bottomRight: $r('app.float.image_border_radius'), 75 bottomRight: $r('app.float.image_border_radius'),
@@ -108,3 +108,11 @@ export struct Card17Component { @@ -108,3 +108,11 @@ export struct Card17Component {
108 }) 108 })
109 } 109 }
110 } 110 }
  111 +
  112 +// 全局公共样式
  113 +@Styles
  114 +function ImageSize() {
  115 + .padding({ right: 18, left: 18 })
  116 + .width('100%')
  117 + .margin({ top: 10 })
  118 +}
@@ -22,10 +22,24 @@ export struct Card2Component { @@ -22,10 +22,24 @@ export struct Card2Component {
22 @State contentDTO: ContentDTO = new ContentDTO(); 22 @State contentDTO: ContentDTO = new ContentDTO();
23 @State loadImg: boolean = false; 23 @State loadImg: boolean = false;
24 @State clicked: boolean = false; 24 @State clicked: boolean = false;
  25 + @State titleMarked: boolean = false;
  26 + @State str01: string = '';
  27 + @State str02: string = '';
  28 + @State str03: string = '';
25 29
26 async aboutToAppear(): Promise<void> { 30 async aboutToAppear(): Promise<void> {
27 this.loadImg = await onlyWifiLoadImg(); 31 this.loadImg = await onlyWifiLoadImg();
28 // this.clicked = hasClicked(this.contentDTO.objectId) 32 // this.clicked = hasClicked(this.contentDTO.objectId)
  33 + this.titleInit();
  34 + }
  35 +
  36 + titleInit() {
  37 + if (this.contentDTO.title.includes('<em>') && this.contentDTO.title.includes('</em>')) {
  38 + this.titleMarked = true;
  39 + this.str01 = this.contentDTO.newsTitle?.split('<em>')[0] || '';
  40 + this.str02 = this.contentDTO.newsTitle?.split('<em>')[1].split('</em>')[0] || '';
  41 + this.str03 = this.contentDTO.newsTitle?.split('<em>')[1].split('</em>')[1] || '';
  42 + }
29 } 43 }
30 44
31 build() { 45 build() {
@@ -36,7 +50,17 @@ export struct Card2Component { @@ -36,7 +50,17 @@ export struct Card2Component {
36 if (this.contentDTO.objectType == '5') { 50 if (this.contentDTO.objectType == '5') {
37 Notes({ objectType: this.contentDTO.objectType }) 51 Notes({ objectType: this.contentDTO.objectType })
38 } 52 }
39 - Text(this.contentDTO.newsTitle) 53 +
  54 + Text() {
  55 + if (this.titleMarked) {
  56 + Span(this.str01)
  57 + Span(this.str02)
  58 + .fontColor(0xED2800)
  59 + Span(this.str03)
  60 + } else {
  61 + Span(this.contentDTO.newsTitle)
  62 + }
  63 + }
40 .fontSize($r('app.float.font_size_17')) 64 .fontSize($r('app.float.font_size_17'))
41 .fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222')) 65 .fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
42 .maxLines(2) 66 .maxLines(2)
@@ -18,10 +18,24 @@ export struct Card4Component { @@ -18,10 +18,24 @@ export struct Card4Component {
18 @State contentDTO: ContentDTO = new ContentDTO(); 18 @State contentDTO: ContentDTO = new ContentDTO();
19 @State loadImg: boolean = false; 19 @State loadImg: boolean = false;
20 @State clicked: boolean = false; 20 @State clicked: boolean = false;
  21 + @State titleMarked: boolean = false;
  22 + @State str01: string = '';
  23 + @State str02: string = '';
  24 + @State str03: string = '';
21 25
22 26
23 async aboutToAppear(): Promise<void> { 27 async aboutToAppear(): Promise<void> {
24 this.loadImg = await onlyWifiLoadImg(); 28 this.loadImg = await onlyWifiLoadImg();
  29 + this.titleInit();
  30 + }
  31 +
  32 + titleInit() {
  33 + if (this.contentDTO.title.includes('<em>') && this.contentDTO.title.includes('</em>')) {
  34 + this.titleMarked = true;
  35 + this.str01 = this.contentDTO.newsTitle?.split('<em>')[0] || '';
  36 + this.str02 = this.contentDTO.newsTitle?.split('<em>')[1].split('</em>')[0] || '';
  37 + this.str03 = this.contentDTO.newsTitle?.split('<em>')[1].split('</em>')[1] || '';
  38 + }
25 } 39 }
26 40
27 build() { 41 build() {
@@ -29,7 +43,16 @@ export struct Card4Component { @@ -29,7 +43,16 @@ export struct Card4Component {
29 //body 43 //body
30 Column() { 44 Column() {
31 //新闻标题 45 //新闻标题
32 - Text(this.contentDTO.newsTitle) 46 + Text() {
  47 + if (this.titleMarked) {
  48 + Span(this.str01)
  49 + Span(this.str02)
  50 + .fontColor(0xED2800)
  51 + Span(this.str03)
  52 + } else {
  53 + Span(this.contentDTO.newsTitle)
  54 + }
  55 + }
33 .fontSize($r('app.float.font_size_17')) 56 .fontSize($r('app.float.font_size_17'))
34 .fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222')) 57 .fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
35 .maxLines(3) 58 .maxLines(3)
  1 +import { ContentDTO, FullColumnImgUrlDTO } from 'wdBean';
  2 +import { CommonConstants } from 'wdConstant/Index';
  3 +import { ProcessUtils } from 'wdRouter';
  4 +import { CardSourceInfo } from '../cardCommon/CardSourceInfo'
  5 +import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
  6 +import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
  7 +const TAG: string = 'Card4Component';
  8 +
  9 +/**
  10 + * 上图下文,用于搜索页命中搜索内容展示
  11 + */
  12 +@Component
  13 +export struct SearchContentComponent {
  14 + @State contentDTO: ContentDTO = new ContentDTO();
  15 + @State loadImg: boolean = false;
  16 + @State clicked: boolean = false;
  17 + @State str01: string = '';
  18 + @State str02: string = '';
  19 + @State str03: string = '';
  20 +
  21 +
  22 + async aboutToAppear(): Promise<void> {
  23 + this.loadImg = await onlyWifiLoadImg();
  24 + this.titleInit();
  25 + }
  26 +
  27 + titleInit() {
  28 + this.str01 = this.contentDTO.contentText?.split('<em>')[0] || '';
  29 + this.str02 = this.contentDTO.contentText?.split('<em>')[1].split('</em>')[0] || '';
  30 + this.str03 = this.contentDTO.contentText?.split('<em>')[1].split('</em>')[1] || '';
  31 + }
  32 +
  33 + build() {
  34 + Column() {
  35 + //body
  36 + Column() {
  37 + //新闻标题
  38 + Text(this.contentDTO.newsTitle)
  39 + .fontSize($r('app.float.font_size_17'))
  40 + .fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
  41 + .maxLines(3)
  42 + .textOverflow({ overflow: TextOverflow.Ellipsis }) // 超出的部分显示省略号。
  43 +
  44 + // 命中内容
  45 + Text(this.contentDTO.contentText) {
  46 + Span(this.str01)
  47 + Span(this.str02)
  48 + .fontColor(0xED2800)
  49 + Span(this.str03)
  50 + }
  51 + .fontSize(13)
  52 + .width(CommonConstants.FULL_PARENT)
  53 + .margin({ top: 8 })
  54 + .fontColor(0x222222)
  55 + }
  56 + .width('100%')
  57 + .justifyContent(FlexAlign.Start)
  58 + .alignItems(HorizontalAlign.Start)
  59 + .onClick((event: ClickEvent) => {
  60 + this.clicked = true;
  61 + ProcessUtils.processPage(this.contentDTO)
  62 + })
  63 + //bottom 评论等信息
  64 + CardSourceInfo({ contentDTO: this.contentDTO })
  65 + }
  66 + .width(CommonConstants.FULL_WIDTH)
  67 + .padding({
  68 + left: $r('app.float.card_comp_pagePadding_lf'),
  69 + right: $r('app.float.card_comp_pagePadding_lf'),
  70 + top: $r('app.float.card_comp_pagePadding_tb'),
  71 + bottom: $r('app.float.card_comp_pagePadding_tb')
  72 + })
  73 + }
  74 +}
  75 +
  76 +
  77 +@Extend(Text)
  78 +function bottomTextStyle() {
  79 + .fontSize(12)
  80 + .fontColor('#B0B0B0')
  81 +}
1 import { CompDTO, ContentDTO, LiveRoomDataBean } from 'wdBean'; 1 import { CompDTO, ContentDTO, LiveRoomDataBean } from 'wdBean';
2 import { CommonConstants } from 'wdConstant/Index'; 2 import { CommonConstants } from 'wdConstant/Index';
3 -import { Logger, LazyDataSource } from 'wdKit/Index'; 3 +import { Logger } from 'wdKit/Index';
4 import { ProcessUtils } from 'wdRouter'; 4 import { ProcessUtils } from 'wdRouter';
5 import PageViewModel from '../../viewmodel/PageViewModel'; 5 import PageViewModel from '../../viewmodel/PageViewModel';
6 import { onlyWifiLoadImg } from '../../utils/lazyloadImg'; 6 import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
@@ -8,6 +8,7 @@ import { onlyWifiLoadImg } from '../../utils/lazyloadImg'; @@ -8,6 +8,7 @@ import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
8 const TAG = 'Zh_Grid_Layout-02'; 8 const TAG = 'Zh_Grid_Layout-02';
9 const FULL_PARENT: string = '100%'; 9 const FULL_PARENT: string = '100%';
10 let listSize: number = 2; 10 let listSize: number = 2;
  11 +
11 /** 12 /**
12 * 双图卡 13 * 双图卡
13 * 枚举值Zh_Grid_Layout-02 14 * 枚举值Zh_Grid_Layout-02
@@ -20,6 +21,8 @@ export struct ZhGridLayout02 { @@ -20,6 +21,8 @@ export struct ZhGridLayout02 {
20 @State operDataList: ContentDTO[] = [] 21 @State operDataList: ContentDTO[] = []
21 @State loadImg: boolean = false; 22 @State loadImg: boolean = false;
22 @State liveRoomList: LiveRoomDataBean[] = [] 23 @State liveRoomList: LiveRoomDataBean[] = []
  24 + currentPage = 1
  25 + pageSize = 12
23 26
24 async aboutToAppear(): Promise<void> { 27 async aboutToAppear(): Promise<void> {
25 Logger.debug(TAG, 'aboutToAppear ' + this.compDTO.objectTitle) 28 Logger.debug(TAG, 'aboutToAppear ' + this.compDTO.objectTitle)
@@ -33,9 +36,6 @@ export struct ZhGridLayout02 { @@ -33,9 +36,6 @@ export struct ZhGridLayout02 {
33 this.loadImg = await onlyWifiLoadImg(); 36 this.loadImg = await onlyWifiLoadImg();
34 } 37 }
35 38
36 - currentPage = 1  
37 - pageSize = 12  
38 -  
39 build() { 39 build() {
40 Column() { 40 Column() {
41 Scroll() { 41 Scroll() {
@@ -51,7 +51,7 @@ export struct ZhGridLayout02 { @@ -51,7 +51,7 @@ export struct ZhGridLayout02 {
51 .fontWeight(600) 51 .fontWeight(600)
52 } 52 }
53 .justifyContent(FlexAlign.Start) 53 .justifyContent(FlexAlign.Start)
54 - .margin({ top: 8, bottom: 8 }) 54 + .margin({ top: 16, bottom: 8 })
55 .width(CommonConstants.FULL_WIDTH) 55 .width(CommonConstants.FULL_WIDTH)
56 56
57 GridRow({ 57 GridRow({
@@ -101,7 +101,7 @@ export struct ZhGridLayout02 { @@ -101,7 +101,7 @@ export struct ZhGridLayout02 {
101 @Builder 101 @Builder
102 buildItemCard(item: ContentDTO) { 102 buildItemCard(item: ContentDTO) {
103 Column() { 103 Column() {
104 - Stack({alignContent: Alignment.BottomEnd}) { 104 + Stack({ alignContent: Alignment.BottomEnd }) {
105 Image(this.loadImg ? item.fullColumnImgUrls[0].url : '') 105 Image(this.loadImg ? item.fullColumnImgUrls[0].url : '')
106 .backgroundColor(0xf5f5f5) 106 .backgroundColor(0xf5f5f5)
107 .width('100%') 107 .width('100%')
@@ -114,12 +114,13 @@ export struct ZhGridLayout02 { @@ -114,12 +114,13 @@ export struct ZhGridLayout02 {
114 .fontColor(Color.White) 114 .fontColor(Color.White)
115 .margin({ 115 .margin({
116 right: '5vp', 116 right: '5vp',
117 - bottom:'5vp' 117 + bottom: '5vp'
118 }) 118 })
119 } 119 }
120 } 120 }
  121 +
121 Text(item.newsTitle) 122 Text(item.newsTitle)
122 - .margin({top:'5'}) 123 + .margin({ top: '5' })
123 .fontSize(13) 124 .fontSize(13)
124 .maxLines(2) 125 .maxLines(2)
125 .textOverflow({ overflow: TextOverflow.Ellipsis }) 126 .textOverflow({ overflow: TextOverflow.Ellipsis })
@@ -130,14 +131,6 @@ export struct ZhGridLayout02 { @@ -130,14 +131,6 @@ export struct ZhGridLayout02 {
130 }) 131 })
131 } 132 }
132 133
133 -  
134 - private getLiveDetailIds(list: ContentDTO[]): string {  
135 - let idList: string[] = []  
136 - list.forEach(item => {  
137 - idList.push(item.objectId)  
138 - });  
139 - return idList.join(',')  
140 - }  
141 // 获取评论数 134 // 获取评论数
142 async getLiveRoomDataInfo(list: ContentDTO[]) { 135 async getLiveRoomDataInfo(list: ContentDTO[]) {
143 const reserveIds = this.getLiveDetailIds(list) 136 const reserveIds = this.getLiveDetailIds(list)
@@ -145,7 +138,7 @@ export struct ZhGridLayout02 { @@ -145,7 +138,7 @@ export struct ZhGridLayout02 {
145 if (result && result.length > 0) { 138 if (result && result.length > 0) {
146 this.liveRoomList.push(...result) 139 this.liveRoomList.push(...result)
147 } 140 }
148 - }).catch(() =>{ 141 + }).catch(() => {
149 }) 142 })
150 } 143 }
151 144
@@ -160,16 +153,6 @@ export struct ZhGridLayout02 { @@ -160,16 +153,6 @@ export struct ZhGridLayout02 {
160 return '' 153 return ''
161 } 154 }
162 155
163 - private computeShowNum(count: number): string {  
164 - if (count >= 10000) {  
165 - let num = ( count / 10000).toFixed(1)  
166 - if (Number(num.substring(num.length-1)) == 0) {  
167 - num = num.substring(0, num.length-2)  
168 - }  
169 - return num + '万人参加'  
170 - }  
171 - return `${count}人参加`  
172 - }  
173 addItems() { 156 addItems() {
174 Logger.debug(TAG, 'addItems') 157 Logger.debug(TAG, 'addItems')
175 this.currentPage++ 158 this.currentPage++
@@ -179,6 +162,25 @@ export struct ZhGridLayout02 { @@ -179,6 +162,25 @@ export struct ZhGridLayout02 {
179 Logger.debug(TAG, 'addItems after: ' + this.operDataList.length) 162 Logger.debug(TAG, 'addItems after: ' + this.operDataList.length)
180 }) 163 })
181 } 164 }
  165 +
  166 + private getLiveDetailIds(list: ContentDTO[]): string {
  167 + let idList: string[] = []
  168 + list.forEach(item => {
  169 + idList.push(item.objectId)
  170 + });
  171 + return idList.join(',')
  172 + }
  173 +
  174 + private computeShowNum(count: number): string {
  175 + if (count >= 10000) {
  176 + let num = (count / 10000).toFixed(1)
  177 + if (Number(num.substring(num.length - 1)) == 0) {
  178 + num = num.substring(0, num.length - 2)
  179 + }
  180 + return num + '万人参加'
  181 + }
  182 + return `${count}人参加`
  183 + }
182 } 184 }
183 185
184 186
@@ -49,7 +49,7 @@ export class LiveModel { @@ -49,7 +49,7 @@ export class LiveModel {
49 success(data.data) 49 success(data.data)
50 }, (error: Error) => { 50 }, (error: Error) => {
51 fail(error.message) 51 fail(error.message)
52 - Logger.debug(TAG + ":error ", error.toString()) 52 + Logger.debug(TAG + ":error ", error.message)
53 }) 53 })
54 }) 54 })
55 } 55 }
@@ -26,6 +26,7 @@ export struct TabComponent { @@ -26,6 +26,7 @@ export struct TabComponent {
26 } 26 }
27 27
28 build() { 28 build() {
  29 + Stack({alignContent: Alignment.TopStart}) {
29 Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) { 30 Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
30 ForEach(this.tabs, (item: string, index: number) => { 31 ForEach(this.tabs, (item: string, index: number) => {
31 TabContent() { 32 TabContent() {
@@ -36,7 +37,7 @@ export struct TabComponent { @@ -36,7 +37,7 @@ export struct TabComponent {
36 } else if ('大家聊' === item) { 37 } else if ('大家聊' === item) {
37 TabChatComponent() 38 TabChatComponent()
38 } 39 }
39 - }.tabBar(this.tabBuilder(index, item)) 40 + }
40 .backgroundColor('#F5F5F5') 41 .backgroundColor('#F5F5F5')
41 }, (item: string, index: number) => { 42 }, (item: string, index: number) => {
42 return item + index 43 return item + index
@@ -45,13 +46,37 @@ export struct TabComponent { @@ -45,13 +46,37 @@ export struct TabComponent {
45 .layoutWeight(1) 46 .layoutWeight(1)
46 .vertical(false) 47 .vertical(false)
47 .barMode(BarMode.Fixed) 48 .barMode(BarMode.Fixed)
48 - .barWidth(70 * this.tabs.length)  
49 .barHeight(48) 49 .barHeight(48)
50 .animationDuration(100) 50 .animationDuration(100)
51 .onChange((index: number) => { 51 .onChange((index: number) => {
52 this.currentIndex = index 52 this.currentIndex = index
53 }) 53 })
54 .backgroundColor(Color.White) 54 .backgroundColor(Color.White)
  55 +
  56 + // 页签
  57 + Row() {
  58 + Scroll() {
  59 + Row({space: '24vp'}) {
  60 + ForEach(this.tabs, (item: string, index: number) => {
  61 + this.tabBuilder(index, item)
  62 + })
  63 + }
  64 + .width('100%')
  65 + .justifyContent(FlexAlign.Center)
  66 + }
  67 + .backgroundColor(Color.White)
  68 + .align(Alignment.Start)
  69 + .scrollable(ScrollDirection.Horizontal)
  70 + .scrollBar(BarState.Off)
  71 + .width('100%')
  72 + }
  73 + .backgroundColor(Color.White)
  74 + .height('48vp')
  75 + .alignItems(VerticalAlign.Bottom)
  76 + .width('100%')
  77 + }.layoutWeight(1)
  78 +
  79 +
55 } 80 }
56 81
57 @Builder 82 @Builder
@@ -60,7 +85,7 @@ export struct TabComponent { @@ -60,7 +85,7 @@ export struct TabComponent {
60 Text(name) 85 Text(name)
61 .margin({ top: 6 }) 86 .margin({ top: 6 })
62 .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor) 87 .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
63 - .fontSize('18fp') 88 + .fontSize('18vp')
64 .fontWeight(this.currentIndex === index ? 600 : 400) 89 .fontWeight(this.currentIndex === index ? 600 : 400)
65 Divider() 90 Divider()
66 .strokeWidth(2) 91 .strokeWidth(2)
@@ -68,7 +93,13 @@ export struct TabComponent { @@ -68,7 +93,13 @@ export struct TabComponent {
68 .width(15) 93 .width(15)
69 .color('#CB0000') 94 .color('#CB0000')
70 .visibility(this.currentIndex === index ? Visibility.Visible : Visibility.Hidden) 95 .visibility(this.currentIndex === index ? Visibility.Visible : Visibility.Hidden)
71 - }.width('100%') 96 + }.justifyContent(FlexAlign.Center)
  97 + .constraintSize({ minWidth: 35 })
  98 + .height('48vp')
  99 + .onClick(() => {
  100 + this.controller.changeIndex(index)
  101 + this.currentIndex = index
  102 + })
72 } 103 }
73 104
74 aboutToDisappear(): void { 105 aboutToDisappear(): void {