wangliang_wd

Merge branch 'main' of http://192.168.1.42/developOne/harmonyPool into main

* 'main' of http://192.168.1.42/developOne/harmonyPool:
  fix(17811):  UI还原问题-【uat】意见反馈-电话和邮箱显示和android不一致,看图
  ref |> 直播模块显示自己发的评论数据
  ref |> 直播模块新增发布评论接口调用
  ref |> 修复因为播放链接为空导致崩溃问题
  desc:置顶top 字段添加
  del log
  feat: 18024 搜索结果-时间轴专题样式卡,显示标题的时间轴卡,标题展示不全,见截图
  fix:bug[17967] 号主页-页面展示_顶部展示异常
  fix:频道订阅缓存问题修复
  沉浸式播放--直播和搜索的颜色不正确,底部bar切换到视频,页面状态栏区域,tab标题位置不正确
  web相关耗时优化——web初始化提前
  fix:bug[18313] 【华为验收】【ux-直板机】【底部导航条适配】点击 我的-关注,进入该页面,该页面底部导航条未沉浸
Showing 33 changed files with 376 additions and 127 deletions
@@ -29,6 +29,14 @@ @@ -29,6 +29,14 @@
29 "value": "14fp" 29 "value": "14fp"
30 }, 30 },
31 { 31 {
  32 + "name": "font_size_14_5",
  33 + "value": "14.5fp"
  34 + },
  35 + {
  36 + "name": "font_size_15",
  37 + "value": "15fp"
  38 + },
  39 + {
32 "name": "font_size_16", 40 "name": "font_size_16",
33 "value": "16fp" 41 "value": "16fp"
34 }, 42 },
  1 +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><g><g></g><g style="opacity:0.5;"><g><path d="M20.314453125,11.330568125C20.314453125,6.360008125,16.285053124999997,2.330566406,11.314453125,2.330566406C6.343893125,2.330566406,2.314453125,6.360008125,2.314453125,11.330568125C2.314453125,13.375078125,2.999354125,15.317678125,4.237673125,16.891578125000002C5.933093125,19.046478125,8.518933125,20.330578125,11.314453125,20.330578125C16.285053124999997,20.330578125,20.314453125,16.301178125,20.314453125,11.330568125ZM4.314453125,11.330568125C4.314453125,7.464568125,7.448463125,4.330568125,11.314453125,4.330568125C15.180453125,4.330568125,18.314453125,7.464568125,18.314453125,11.330568125C18.314453125,15.196578125,15.180453125,18.330578125,11.314453125,18.330578125C9.138813125,18.330578125,7.129653125,17.332878125,5.8094931249999995,15.654978125C4.846133125,14.430478125,4.314453125,12.922378125,4.314453125,11.330568125Z" fill-rule="evenodd" fill="#8794A3" fill-opacity="1"/></g><g transform="matrix(0.7071067690849304,0.7071067690849304,-0.7071067690849304,0.7071067690849304,16.41416933434084,-7.627309776376933)" style="opacity:0.800000011920929;"><path d="M17.6140625,16L22.7906525,16C22.9393225,16,23.0360225,16.156463,22.9695325,16.289443L22.1695325,17.88944C22.1356625,17.9572,22.0664025,18,21.9906525,18L17.6140625,18C17.5036056,18,17.4140625,17.91046,17.4140625,17.8L17.4140625,16.2C17.4140625,16.0895431,17.5036056,16,17.6140625,16" fill="#8794A3" fill-opacity="0.800000011920929"/></g></g></g></svg>
  1 +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><g><g></g><g style="opacity:0.5;"><g><path d="M20.314453125,11.330568125C20.314453125,6.360008125,16.285053124999997,2.330566406,11.314453125,2.330566406C6.343893125,2.330566406,2.314453125,6.360008125,2.314453125,11.330568125C2.314453125,13.375078125,2.999354125,15.317678125,4.237673125,16.891578125000002C5.933093125,19.046478125,8.518933125,20.330578125,11.314453125,20.330578125C16.285053124999997,20.330578125,20.314453125,16.301178125,20.314453125,11.330568125ZM4.314453125,11.330568125C4.314453125,7.464568125,7.448463125,4.330568125,11.314453125,4.330568125C15.180453125,4.330568125,18.314453125,7.464568125,18.314453125,11.330568125C18.314453125,15.196578125,15.180453125,18.330578125,11.314453125,18.330578125C9.138813125,18.330578125,7.129653125,17.332878125,5.8094931249999995,15.654978125C4.846133125,14.430478125,4.314453125,12.922378125,4.314453125,11.330568125Z" fill-rule="evenodd" fill="#000000" fill-opacity="1"/></g><g transform="matrix(0.7071067690849304,0.7071067690849304,-0.7071067690849304,0.7071067690849304,16.41416933434084,-7.627309776376933)" style="opacity:0.800000011920929;"><path d="M17.6140625,16L22.7906525,16C22.9393225,16,23.0360225,16.156463,22.9695325,16.289443L22.1695325,17.88944C22.1356625,17.9572,22.0664025,18,21.9906525,18L17.6140625,18C17.5036056,18,17.4140625,17.91046,17.4140625,17.8L17.4140625,16.2C17.4140625,16.0895431,17.5036056,16,17.6140625,16" fill="#000000" fill-opacity="0.800000011920929"/></g></g></g></svg>
@@ -681,6 +681,15 @@ export class HttpUrlUtils { @@ -681,6 +681,15 @@ export class HttpUrlUtils {
681 return url 681 return url
682 } 682 }
683 683
  684 + static getLiveSendBarrageUrl() {
  685 + let url = HttpUrlUtils.getHost() + "/api/live-center-message/zh/c/live/message/chat/send"
  686 + return url
  687 + }
  688 + static getLiveTouristSendBarrageUrl() {
  689 + let url = HttpUrlUtils.getHost() + "/api/live-center-message/zh/a/live/message/chat/tourist/send"
  690 + return url
  691 + }
  692 +
684 static getAppointmentStatusUrl() { 693 static getAppointmentStatusUrl() {
685 let url = HttpUrlUtils.getHost() + HttpUrlUtils.LIVE_APPOINTMENT_BATCH_PATH 694 let url = HttpUrlUtils.getHost() + HttpUrlUtils.LIVE_APPOINTMENT_BATCH_PATH
686 return url 695 return url
@@ -103,6 +103,7 @@ export class ContentDTO implements BaseDTO { @@ -103,6 +103,7 @@ export class ContentDTO implements BaseDTO {
103 liveRoomDataBean : LiveRoomDataBean = {} as LiveRoomDataBean// 批查获取到的直播观看人数 103 liveRoomDataBean : LiveRoomDataBean = {} as LiveRoomDataBean// 批查获取到的直播观看人数
104 //本地字段:时间轴专题页节点组件时间;【如果开启模糊则显示时间->左右;0:否,1:是】 104 //本地字段:时间轴专题页节点组件时间;【如果开启模糊则显示时间->左右;0:否,1:是】
105 timeBlurred:number = 0 105 timeBlurred:number = 0
  106 + top:number = 0
106 107
107 static clone(old: ContentDTO): ContentDTO { 108 static clone(old: ContentDTO): ContentDTO {
108 let content = new ContentDTO(); 109 let content = new ContentDTO();
@@ -49,10 +49,15 @@ export struct FeedBackActivity { @@ -49,10 +49,15 @@ export struct FeedBackActivity {
49 Column() { 49 Column() {
50 Text($r('app.string.feedback_opinion_type')) 50 Text($r('app.string.feedback_opinion_type'))
51 .fontColor($r('app.color.color_222222')) 51 .fontColor($r('app.color.color_222222'))
52 - .fontSize($r('app.float.font_size_16'))  
53 - .fontWeight(FontWeight.Bold) 52 + .fontSize($r('app.float.font_size_14_5'))
  53 + .fontWeight(600)
54 .width('100%') 54 .width('100%')
55 .margin({ left: 24, top: $r('app.float.vp_14') }) 55 .margin({ left: 24, top: $r('app.float.vp_14') })
  56 + Blank()
  57 + .height(0.5)
  58 + .width('94%')
  59 + .margin({ top: $r('app.float.vp_12') })
  60 + .backgroundColor($r('app.color.color_EDEDED'))
56 GridRow({ 61 GridRow({
57 columns:3, 62 columns:3,
58 }) { 63 }) {
@@ -89,8 +94,8 @@ export struct FeedBackActivity { @@ -89,8 +94,8 @@ export struct FeedBackActivity {
89 .backgroundColor($r('app.color.color_F5F5F5')) 94 .backgroundColor($r('app.color.color_F5F5F5'))
90 Text($r('app.string.feedback_opinion_tv')) 95 Text($r('app.string.feedback_opinion_tv'))
91 .fontColor($r('app.color.color_222222')) 96 .fontColor($r('app.color.color_222222'))
92 - .fontSize($r('app.float.font_size_16'))  
93 - .fontWeight(FontWeight.Bold) 97 + .fontSize($r('app.float.font_size_14_5'))
  98 + .fontWeight(600)
94 .width(CommonConstants.FULL_WIDTH) 99 .width(CommonConstants.FULL_WIDTH)
95 .margin({ left: 24, top: $r('app.float.vp_12') }) 100 .margin({ left: 24, top: $r('app.float.vp_12') })
96 Stack({ alignContent: Alignment.BottomEnd }) { 101 Stack({ alignContent: Alignment.BottomEnd }) {
@@ -191,26 +196,46 @@ export struct FeedBackActivity { @@ -191,26 +196,46 @@ export struct FeedBackActivity {
191 .fontSize($r('app.float.font_size_13_2')) 196 .fontSize($r('app.float.font_size_13_2'))
192 .width('94%') 197 .width('94%')
193 .margin({ top: $r('app.float.margin_24') }) 198 .margin({ top: $r('app.float.margin_24') })
  199 +
194 Row() { 200 Row() {
  201 + Blank().width('3%')
195 Text($r('app.string.feedback_mail')) 202 Text($r('app.string.feedback_mail'))
  203 + .height(CommonConstants.FULL_HEIGHT)
196 .fontColor($r('app.color.color_222222')) 204 .fontColor($r('app.color.color_222222'))
197 - .fontSize($r('app.float.font_size_14'))  
198 - .fontWeight(FontWeight.Bold) 205 + .fontSize($r('app.float.font_size_13_2'))
  206 + .fontWeight(600)
  207 + .padding({left: $r('app.float.margin_12') })
  208 + .backgroundColor($r('app.color.color_F5F5F5'))
  209 + .borderRadius({
  210 + topLeft: 4,
  211 + topRight: 0,
  212 + bottomLeft: 4,
  213 + bottomRight: 0,
  214 + })
  215 +
199 TextInput({ placeholder: $r('app.string.feedback_hideemail') }) 216 TextInput({ placeholder: $r('app.string.feedback_hideemail') })
200 - .width(CommonConstants.FULL_WIDTH) 217 + .width(0)
  218 + .layoutWeight(1)
201 .height(CommonConstants.FULL_HEIGHT) 219 .height(CommonConstants.FULL_HEIGHT)
202 - // .margin({left:15}) 220 + .fontColor($r('app.color.color_222222'))
  221 + .fontSize($r('app.float.font_size_13_2'))
  222 + .placeholderColor($r('app.color.color_CCCCCC'))
  223 + .placeholderFont({size:$r('app.float.font_size_13_2')})
203 .backgroundColor($r('app.color.color_F5F5F5')) 224 .backgroundColor($r('app.color.color_F5F5F5'))
  225 + .borderRadius({
  226 + topLeft: 0,
  227 + topRight: 4,
  228 + bottomLeft: 0,
  229 + bottomRight: 4,
  230 + })
204 .onChange((value) => { 231 .onChange((value) => {
205 - // Logger.debug(TAG, "onChange" + value + "/" + this.passwordContent)  
206 this.email = value 232 this.email = value
207 }) 233 })
  234 + Blank().width('3%')
208 } 235 }
209 - .height(44)  
210 - .width('94%')  
211 - .backgroundColor($r('app.color.color_F5F5F5'))  
212 - .margin({top: $r('app.float.margin_16') })  
213 - .borderRadius(4) 236 + .height(42)
  237 + .width(CommonConstants.FULL_WIDTH)
  238 + .margin({top: $r('app.float.margin_16')})
214 Blank().layoutWeight(1) 239 Blank().layoutWeight(1)
215 } 240 }
216 } 241 }
@@ -222,8 +247,8 @@ export struct FeedBackActivity { @@ -222,8 +247,8 @@ export struct FeedBackActivity {
222 Column(){ 247 Column(){
223 Text($r('app.string.submit')) 248 Text($r('app.string.submit'))
224 .textAlign(TextAlign.Center) 249 .textAlign(TextAlign.Center)
225 - .height(44)  
226 - .width('90%') 250 + .height(42)
  251 + .width('94%')
227 .fontColor(this.canSubmit ? $r('app.color.color_fff') : $r('app.color.color_FFFFFF_40')) 252 .fontColor(this.canSubmit ? $r('app.color.color_fff') : $r('app.color.color_FFFFFF_40'))
228 .fontSize($r('app.float.font_size_18')) 253 .fontSize($r('app.float.font_size_18'))
229 .backgroundColor(this.canSubmit ? $r('app.color.color_ED2800') : $r('app.color.color_ED2800_99')) 254 .backgroundColor(this.canSubmit ? $r('app.color.color_ED2800') : $r('app.color.color_ED2800_99'))
@@ -117,9 +117,6 @@ export struct FollowChildComponent{ @@ -117,9 +117,6 @@ export struct FollowChildComponent{
117 }.height('202lpx') 117 }.height('202lpx')
118 .justifyContent(FlexAlign.Start) 118 .justifyContent(FlexAlign.Start)
119 119
120 - // Text().backgroundColor($r('app.color.color_EDEDED'))  
121 - // .width('100%')  
122 - // .height('2lpx')  
123 Divider() 120 Divider()
124 .width('100%') 121 .width('100%')
125 .height('2lpx') 122 .height('2lpx')
@@ -236,10 +233,6 @@ export struct FollowChildComponent{ @@ -236,10 +233,6 @@ export struct FollowChildComponent{
236 }.height('146lpx') 233 }.height('146lpx')
237 .justifyContent(FlexAlign.Center) 234 .justifyContent(FlexAlign.Center)
238 235
239 - // Text().backgroundColor($r('app.color.color_EDEDED'))  
240 - // .width('100%')  
241 - // .height('2lpx')  
242 -  
243 Divider() 236 Divider()
244 .width('100%') 237 .width('100%')
245 .height('2lpx') 238 .height('2lpx')
@@ -95,6 +95,8 @@ export struct FollowFirstTabsComponent{ @@ -95,6 +95,8 @@ export struct FollowFirstTabsComponent{
95 TabContent(){ 95 TabContent(){
96 FollowSecondTabsComponent({data:$data,firstIndex:index}) 96 FollowSecondTabsComponent({data:$data,firstIndex:index})
97 }.tabBar(this.TabBuilder(index,item)) 97 }.tabBar(this.TabBuilder(index,item))
  98 + .backgroundColor($r('app.color.white'))
  99 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
98 }, (item: FollowListItem, index: number) => index.toString()) 100 }, (item: FollowListItem, index: number) => index.toString())
99 } 101 }
100 .vertical(false) 102 .vertical(false)
@@ -108,9 +110,11 @@ export struct FollowFirstTabsComponent{ @@ -108,9 +110,11 @@ export struct FollowFirstTabsComponent{
108 trackTabFirstClick(this.data[index].directoryName) 110 trackTabFirstClick(this.data[index].directoryName)
109 }) 111 })
110 .width('100%') 112 .width('100%')
  113 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
111 .layoutWeight(1) 114 .layoutWeight(1)
112 } 115 }
113 }.width('100%') 116 }.width('100%')
  117 + .height("100%")
114 } 118 }
115 119
116 reloadNetWork(){ 120 reloadNetWork(){
@@ -91,8 +91,6 @@ export struct FollowListDetailUI { @@ -91,8 +91,6 @@ export struct FollowListDetailUI {
91 ListItem() { 91 ListItem() {
92 FollowChildComponent({ data: item, type: this.type }) 92 FollowChildComponent({ data: item, type: this.type })
93 } 93 }
94 - .onClick(() => {  
95 - })  
96 }, (item: FollowListDetailItem) => item.creatorId) 94 }, (item: FollowListDetailItem) => item.creatorId)
97 95
98 //没有更多数据 显示提示 96 //没有更多数据 显示提示
@@ -102,6 +100,7 @@ export struct FollowListDetailUI { @@ -102,6 +100,7 @@ export struct FollowListDetailUI {
102 } 100 }
103 } 101 }
104 } 102 }
  103 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
105 .edgeEffect(EdgeEffect.None) 104 .edgeEffect(EdgeEffect.None)
106 .cachedCount(5) 105 .cachedCount(5)
107 .padding({ left: '31lpx', right: '31lpx' }) 106 .padding({ left: '31lpx', right: '31lpx' })
@@ -118,6 +117,7 @@ export struct FollowListDetailUI { @@ -118,6 +117,7 @@ export struct FollowListDetailUI {
118 } 117 }
119 } 118 }
120 .width('100%') 119 .width('100%')
  120 + .layoutWeight(1)
121 } 121 }
122 122
123 async addFollowStatusObserver() { 123 async addFollowStatusObserver() {
@@ -22,15 +22,35 @@ export struct FollowSecondTabsComponent{ @@ -22,15 +22,35 @@ export struct FollowSecondTabsComponent{
22 22
23 if(this.data != null){ 23 if(this.data != null){
24 if(this.data[this.firstIndex].children == null || this.data[this.firstIndex].children.length == 0){ 24 if(this.data[this.firstIndex].children == null || this.data[this.firstIndex].children.length == 0){
25 - FollowListDetailUI({creatorDirectoryId:this.data[this.firstIndex].id,type:1})  
26 - .layoutWeight(1) 25 + Stack({ alignContent: Alignment.Top }){
  26 + Row()
  27 + .width("100%")
  28 + .height("100%")
  29 + .backgroundColor($r('app.color.color_transparent'))
  30 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
  31 +
  32 + FollowListDetailUI({creatorDirectoryId:this.data[this.firstIndex].id,type:1})
  33 + .height("100%")
  34 + .width("100%")
  35 + }.width("100%")
  36 + .layoutWeight(1)
27 }else{ 37 }else{
28 - this.FollowSecondUI() 38 + Stack({ alignContent: Alignment.Top }){
  39 + Row()
  40 + .width("100%")
  41 + .height("100%")
  42 + .backgroundColor($r('app.color.color_transparent'))
  43 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
  44 +
  45 + this.FollowSecondUI()
  46 + }.width("100%")
  47 + .layoutWeight(1)
29 } 48 }
30 } 49 }
31 } 50 }
32 .width('100%') 51 .width('100%')
33 .layoutWeight(1) 52 .layoutWeight(1)
  53 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
34 } 54 }
35 55
36 @Builder FollowSecondUI(){ 56 @Builder FollowSecondUI(){
@@ -51,6 +71,7 @@ export struct FollowSecondTabsComponent{ @@ -51,6 +71,7 @@ export struct FollowSecondTabsComponent{
51 .scrollBar(BarState.Off) 71 .scrollBar(BarState.Off)
52 .height('100%') 72 .height('100%')
53 }.height('100%') 73 }.height('100%')
  74 + .backgroundColor($r('app.color.color_F9F9F9'))
54 .alignItems(HorizontalAlign.Center) 75 .alignItems(HorizontalAlign.Center)
55 } 76 }
56 .alignItems(VerticalAlign.Top) 77 .alignItems(VerticalAlign.Top)
@@ -60,8 +81,7 @@ export struct FollowSecondTabsComponent{ @@ -60,8 +81,7 @@ export struct FollowSecondTabsComponent{
60 ForEach(this.data[this.firstIndex].children, (item: FollowSecondListItem, index: number ) => { 81 ForEach(this.data[this.firstIndex].children, (item: FollowSecondListItem, index: number ) => {
61 TabContent(){ 82 TabContent(){
62 FollowThirdTabsComponent({data:$data,firstIndex:$firstIndex,secondIndex:index}) 83 FollowThirdTabsComponent({data:$data,firstIndex:$firstIndex,secondIndex:index})
63 - }  
64 - .backgroundColor($r('app.color.white')) 84 + }.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
65 }, (item: FollowListItem, index: number) => index.toString()) 85 }, (item: FollowListItem, index: number) => index.toString())
66 } 86 }
67 .vertical(true) 87 .vertical(true)
@@ -73,6 +93,7 @@ export struct FollowSecondTabsComponent{ @@ -73,6 +93,7 @@ export struct FollowSecondTabsComponent{
73 .barWidth(0) 93 .barWidth(0)
74 .height('100%') 94 .height('100%')
75 .layoutWeight(1) 95 .layoutWeight(1)
  96 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
76 }.width('100%') 97 }.width('100%')
77 } 98 }
78 99
@@ -104,6 +104,8 @@ export struct FollowThirdTabsComponent{ @@ -104,6 +104,8 @@ export struct FollowThirdTabsComponent{
104 this.currentIndex = index 104 this.currentIndex = index
105 }) 105 })
106 .width('100%') 106 .width('100%')
  107 + .layoutWeight(1)
  108 + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
107 } 109 }
108 } 110 }
109 111
@@ -23,7 +23,7 @@ struct ChannelSubscriptionLayout { @@ -23,7 +23,7 @@ struct ChannelSubscriptionLayout {
23 @Link myChannelList: TopNavDTO [] 23 @Link myChannelList: TopNavDTO []
24 @Link moreChannelList: TopNavDTO [] 24 @Link moreChannelList: TopNavDTO []
25 @Link localChannelList: TopNavDTO [] 25 @Link localChannelList: TopNavDTO []
26 - @Link channelIds: number [] 26 + @State channelIds: number [] = []
27 @State isShow: boolean = false 27 @State isShow: boolean = false
28 @State dragItem: number = -1 28 @State dragItem: number = -1
29 private dragRefOffsetX: number = 0 29 private dragRefOffsetX: number = 0
@@ -40,6 +40,9 @@ struct ChannelSubscriptionLayout { @@ -40,6 +40,9 @@ struct ChannelSubscriptionLayout {
40 40
41 aboutToAppear() { 41 aboutToAppear() {
42 this.currentTopNavSelectedItem = this.myChannelList[this.currentTopNavSelectedIndex] 42 this.currentTopNavSelectedItem = this.myChannelList[this.currentTopNavSelectedIndex]
  43 + this.myChannelList.forEach(item=>{
  44 + this.channelIds.push(item.channelId)
  45 + })
43 } 46 }
44 47
45 //交换我的频道数组中的位置 48 //交换我的频道数组中的位置
@@ -54,7 +57,7 @@ struct ChannelSubscriptionLayout { @@ -54,7 +57,7 @@ struct ChannelSubscriptionLayout {
54 delChannelItem(index: number){ 57 delChannelItem(index: number){
55 let item = this.myChannelList.splice(index, 1)[0] 58 let item = this.myChannelList.splice(index, 1)[0]
56 this.channelIds.splice(index, 1) 59 this.channelIds.splice(index, 1)
57 - AppStorage.setOrCreate('channelIds', this.channelIds.join(',')) 60 + AppStorage.setOrCreate('channelIds', JSON.stringify(this.channelIds))
58 if (item.moreChannel === '1') { 61 if (item.moreChannel === '1') {
59 this.moreChannelList.unshift(item) 62 this.moreChannelList.unshift(item)
60 } 63 }
@@ -29,7 +29,7 @@ struct FollowListPage { @@ -29,7 +29,7 @@ struct FollowListPage {
29 //Tab 详情 29 //Tab 详情
30 FollowFirstTabsComponent({changeIndex:Number(this.curIndex)}) 30 FollowFirstTabsComponent({changeIndex:Number(this.curIndex)})
31 } 31 }
32 - .backgroundColor($r('app.color.color_F9F9F9')) 32 + .backgroundColor($r('app.color.white'))
33 .height('100%') 33 .height('100%')
34 .width('100%') 34 .width('100%')
35 } 35 }
@@ -28,7 +28,7 @@ struct PeopleShipHomePage { @@ -28,7 +28,7 @@ struct PeopleShipHomePage {
28 // 总滑动空间 28 // 总滑动空间
29 scroller: Scroller = new Scroller() 29 scroller: Scroller = new Scroller()
30 // 顶部透明度 30 // 顶部透明度
31 - @State topOpacity: number = 0 31 + @Watch('topOpacityChange') @State topOpacity: number = 0
32 //发布数量 32 //发布数量
33 @State publishCount: number = 0 33 @State publishCount: number = 0
34 // 是否关注 34 // 是否关注
@@ -42,6 +42,22 @@ struct PeopleShipHomePage { @@ -42,6 +42,22 @@ struct PeopleShipHomePage {
42 @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') || 0 42 @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') || 0
43 @State isConnectNetwork : boolean = NetworkUtil.isNetConnected() 43 @State isConnectNetwork : boolean = NetworkUtil.isNetConnected()
44 44
  45 + onPageShow(): void {
  46 + WindowModel.shared.setWindowSystemBarProperties({ statusBarContentColor: '#ffffff'})
  47 + }
  48 +
  49 + onPageHide(): void {
  50 + WindowModel.shared.setWindowSystemBarProperties({ statusBarContentColor: '#000000', })
  51 + }
  52 +
  53 + topOpacityChange(){
  54 + if(this.topOpacity > 0.8){
  55 + WindowModel.shared.setWindowSystemBarProperties({ statusBarContentColor: '#000000', })
  56 + }else{
  57 + WindowModel.shared.setWindowSystemBarProperties({ statusBarContentColor: '#ffffff'})
  58 + }
  59 + }
  60 +
45 build() { 61 build() {
46 if(this.isConnectNetwork){ 62 if(this.isConnectNetwork){
47 Stack({ alignContent: Alignment.TopStart }) { 63 Stack({ alignContent: Alignment.TopStart }) {
@@ -50,7 +66,8 @@ struct PeopleShipHomePage { @@ -50,7 +66,8 @@ struct PeopleShipHomePage {
50 Image($r('app.media.home_page_bg')) 66 Image($r('app.media.home_page_bg'))
51 .width('100%') 67 .width('100%')
52 .height('120vp') 68 .height('120vp')
53 - .objectFit(ImageFit.Fill) 69 + .objectFit(ImageFit.Auto)
  70 + .objectRepeat(ImageRepeat.NoRepeat)
54 .backgroundColor(Color.White) 71 .backgroundColor(Color.White)
55 .visibility(this.isLoading ? Visibility.None : Visibility.Visible) 72 .visibility(this.isLoading ? Visibility.None : Visibility.Visible)
56 .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP]) 73 .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])
@@ -46,8 +46,6 @@ export struct TopNavigationComponentNew { @@ -46,8 +46,6 @@ export struct TopNavigationComponentNew {
46 // 顶导数据 46 // 顶导数据
47 @State @Watch('onTopNavigationDataUpdated') topNavList: TopNavDTO[] = [] 47 @State @Watch('onTopNavigationDataUpdated') topNavList: TopNavDTO[] = []
48 @State indexSettingChannelId: number = AppStorage.get<number>('indexSettingChannelId') || 2002 48 @State indexSettingChannelId: number = AppStorage.get<number>('indexSettingChannelId') || 2002
49 - //我的频道id列表  
50 - @State channelIds: number[] = []  
51 //本地缓存频道id列表 49 //本地缓存频道id列表
52 @State storageChannelIds: string = AppStorage.get<string>('channelIds') || '' 50 @State storageChannelIds: string = AppStorage.get<string>('channelIds') || ''
53 @State homeChannelList: TopNavDTO[] = [] 51 @State homeChannelList: TopNavDTO[] = []
@@ -192,7 +190,6 @@ export struct TopNavigationComponentNew { @@ -192,7 +190,6 @@ export struct TopNavigationComponentNew {
192 myChannelList: $myChannelList, 190 myChannelList: $myChannelList,
193 moreChannelList: $moreChannelList, 191 moreChannelList: $moreChannelList,
194 localChannelList: $localChannelList, 192 localChannelList: $localChannelList,
195 - channelIds: $channelIds,  
196 changeTab: (index) => { 193 changeTab: (index) => {
197 this.changePage(index) 194 this.changePage(index)
198 } 195 }
@@ -260,7 +257,7 @@ export struct TopNavigationComponentNew { @@ -260,7 +257,7 @@ export struct TopNavigationComponentNew {
260 .edgeEffect(EdgeEffect.None) 257 .edgeEffect(EdgeEffect.None)
261 .height($r('app.float.top_tab_bar_height_common')) 258 .height($r('app.float.top_tab_bar_height_common'))
262 .backgroundColor(this.barBackgroundColor) 259 .backgroundColor(this.barBackgroundColor)
263 - .margin({top:10}) 260 + .margin({ top: 10 })
264 .onAreaChange((oldValue: Area, newValue: Area) => { 261 .onAreaChange((oldValue: Area, newValue: Area) => {
265 let width = Number.parseFloat(newValue.width.toString()) 262 let width = Number.parseFloat(newValue.width.toString())
266 this.tabsWidth = Number.isNaN(width) ? 0 : width 263 this.tabsWidth = Number.isNaN(width) ? 0 : width
@@ -342,8 +339,6 @@ export struct TopNavigationComponentNew { @@ -342,8 +339,6 @@ export struct TopNavigationComponentNew {
342 //处理新闻tab顶导频道数据 339 //处理新闻tab顶导频道数据
343 topNavListHandle() { 340 topNavListHandle() {
344 let cityName = SPHelper.default.getSync(SpConstants.LOCATION_CITY_NAME, '') as string 341 let cityName = SPHelper.default.getSync(SpConstants.LOCATION_CITY_NAME, '') as string
345 -  
346 - let _channelIds: number [] = []  
347 let _myChannelList: TopNavDTO [] = [] 342 let _myChannelList: TopNavDTO [] = []
348 let _storageChannelIds: string [] = [] //list1 343 let _storageChannelIds: string [] = [] //list1
349 let defaultMyChannelList: TopNavDTO[] = [] 344 let defaultMyChannelList: TopNavDTO[] = []
@@ -379,11 +374,7 @@ export struct TopNavigationComponentNew { @@ -379,11 +374,7 @@ export struct TopNavigationComponentNew {
379 } 374 }
380 }) 375 })
381 defaultList.unshift(...defaultMyChannelList) 376 defaultList.unshift(...defaultMyChannelList)
382 -  
383 defaultList.forEach((item, index) => { 377 defaultList.forEach((item, index) => {
384 - if (this.storageChannelIds && _storageChannelIds.includes(String(item.channelId))) {  
385 - item.myChannel = '1'  
386 - }  
387 if (item.channelType === 2) { 378 if (item.channelType === 2) {
388 if (cityName.includes(item.name)) { 379 if (cityName.includes(item.name)) {
389 item.myChannel = '1' 380 item.myChannel = '1'
@@ -399,32 +390,34 @@ export struct TopNavigationComponentNew { @@ -399,32 +390,34 @@ export struct TopNavigationComponentNew {
399 item.moreChannel = '1' 390 item.moreChannel = '1'
400 } 391 }
401 } 392 }
402 - 393 + if (this.storageChannelIds && _storageChannelIds.includes(String(item.channelId))) {
  394 + item.myChannel = '1'
  395 + }
403 //频道分类 396 //频道分类
404 if (item.name !== '播报') { //暂时隐藏播报 397 if (item.name !== '播报') { //暂时隐藏播报
405 - if (item.myChannel === '1' && !this.storageChannelIds) { 398 + if (item.myChannel === '1') {
406 _myChannelList.push(item) 399 _myChannelList.push(item)
407 - _channelIds.push(item.channelId)  
408 } 400 }
409 - if (item.moreChannel === '1') { 401 + if (item.moreChannel === '1' && item.myChannel !== '1') {
410 this.moreChannelList.push(item) 402 this.moreChannelList.push(item)
411 } 403 }
412 if (item.localChannel === '1' && item.myChannel !== '1') { 404 if (item.localChannel === '1' && item.myChannel !== '1') {
413 this.localChannelList.push(item) 405 this.localChannelList.push(item)
414 } 406 }
415 } 407 }
416 -  
417 }) 408 })
418 409
419 - if(this.storageChannelIds){  
420 - _storageChannelIds.forEach((_item:string)=>{  
421 - let index = defaultList.findIndex(ele => Number(_item) === ele.channelId)  
422 - if(index > -1){  
423 - _myChannelList.push(defaultList[index])  
424 - _channelIds.push(defaultList[index].channelId)  
425 - }  
426 - }) 410 + //根据缓存数组排序
  411 + if (this.storageChannelIds) {
  412 + let sortedyChannelList = _myChannelList.sort((item1, item2) => {
  413 + let index1 = this.storageChannelIds.indexOf(String(item1.channelId));
  414 + let index2 = this.storageChannelIds.indexOf(String(item2.channelId));
  415 + return index1 - index2;
  416 + });
  417 + _myChannelList = sortedyChannelList
427 } 418 }
  419 +
  420 +
428 if (cityName) { 421 if (cityName) {
429 let index = _myChannelList.findIndex(ele => cityName.includes(ele.name)) 422 let index = _myChannelList.findIndex(ele => cityName.includes(ele.name))
430 const localChannelitem = _myChannelList.splice(index, 1)[0]; 423 const localChannelitem = _myChannelList.splice(index, 1)[0];
@@ -432,7 +425,6 @@ export struct TopNavigationComponentNew { @@ -432,7 +425,6 @@ export struct TopNavigationComponentNew {
432 _myChannelList.splice(3, 0, localChannelitem); 425 _myChannelList.splice(3, 0, localChannelitem);
433 } 426 }
434 427
435 - this.channelIds = _channelIds  
436 this.myChannelList = _myChannelList 428 this.myChannelList = _myChannelList
437 429
438 //缓存首页频道 430 //缓存首页频道
@@ -620,22 +612,22 @@ export struct TopNavigationComponentNew { @@ -620,22 +612,22 @@ export struct TopNavigationComponentNew {
620 }) 612 })
621 } 613 }
622 614
623 - clickMorningEveningPaper(){ 615 + clickMorningEveningPaper() {
624 if (NetworkUtil.isNetConnected()) { 616 if (NetworkUtil.isNetConnected()) {
625 - DailyPaperTopicModel.getDailyPaperTopic().then(dailyPaperTopicBean =>{ 617 + DailyPaperTopicModel.getDailyPaperTopic().then(dailyPaperTopicBean => {
626 if (dailyPaperTopicBean && dailyPaperTopicBean.id > 0) { 618 if (dailyPaperTopicBean && dailyPaperTopicBean.id > 0) {
627 SPHelper.default.saveSync('dailyPaperTopicPageId', dailyPaperTopicBean.id); 619 SPHelper.default.saveSync('dailyPaperTopicPageId', dailyPaperTopicBean.id);
628 ProcessUtils.gotoMorningEveningPaper() 620 ProcessUtils.gotoMorningEveningPaper()
629 - TrackingButton.click('morning_evening_news_click',TrackConstants.SummaryType.MorningAndEveningNews,TrackConstants.SummaryType.MorningAndEveningNews)  
630 - }else { 621 + TrackingButton.click('morning_evening_news_click', TrackConstants.SummaryType.MorningAndEveningNews,
  622 + TrackConstants.SummaryType.MorningAndEveningNews)
  623 + } else {
631 ToastUtils.showToast('暂无早晚报信息', 1000) 624 ToastUtils.showToast('暂无早晚报信息', 1000)
632 } 625 }
633 - }).catch((err:string) =>{ 626 + }).catch((err: string) => {
634 ToastUtils.showToast('暂无早晚报信息', 1000) 627 ToastUtils.showToast('暂无早晚报信息', 1000)
635 }) 628 })
636 } else { 629 } else {
637 ToastUtils.showToast('网络出小差了,请检查网络后重试', 1000) 630 ToastUtils.showToast('网络出小差了,请检查网络后重试', 1000)
638 } 631 }
639 } 632 }
640 -  
641 } 633 }
@@ -276,6 +276,7 @@ export struct PeopleShipHomeArticleListComponent { @@ -276,6 +276,7 @@ export struct PeopleShipHomeArticleListComponent {
276 let extModel = element.contentExt[0]; 276 let extModel = element.contentExt[0];
277 contentDTO.openLikes = extModel.openLikes; 277 contentDTO.openLikes = extModel.openLikes;
278 contentDTO.openComment = extModel.openComment; 278 contentDTO.openComment = extModel.openComment;
  279 + contentDTO.top = extModel.top //是否置顶
279 } 280 }
280 // 页面 281 // 页面
281 if (contentDTO.appStyle == '2' || contentDTO.appStyle == '13' || contentDTO.appStyle == '20') { 282 if (contentDTO.appStyle == '2' || contentDTO.appStyle == '13' || contentDTO.appStyle == '20') {
@@ -40,7 +40,9 @@ export struct PeopleShipHomePageTopComponent { @@ -40,7 +40,9 @@ export struct PeopleShipHomePageTopComponent {
40 Image($r('app.media.home_page_bg')) 40 Image($r('app.media.home_page_bg'))
41 .width('100%') 41 .width('100%')
42 .height('48vp') 42 .height('48vp')
43 - .objectFit(ImageFit.Fill) 43 + .objectFit(ImageFit.Auto)
  44 + .objectRepeat(ImageRepeat.NoRepeat)
  45 + .objectFit(ImageFit.Auto)
44 .backgroundColor(Color.White) 46 .backgroundColor(Color.White)
45 // 头像和名称 47 // 头像和名称
46 Row() { 48 Row() {
@@ -28,10 +28,10 @@ export struct CustomTitleUI { @@ -28,10 +28,10 @@ export struct CustomTitleUI {
28 Text(this.titleName) 28 Text(this.titleName)
29 .maxLines(1) 29 .maxLines(1)
30 .id("title") 30 .id("title")
31 - .fontSize('35lpx') 31 + .fontSize('30lpx')
32 .fontWeight(400) 32 .fontWeight(400)
33 .fontColor($r('app.color.color_222222')) 33 .fontColor($r('app.color.color_222222'))
34 - .lineHeight('42lpx') 34 + .lineHeight('43lpx')
35 .alignRules({ 35 .alignRules({
36 center: {anchor: "__container__", align: VerticalAlign.Center}, 36 center: {anchor: "__container__", align: VerticalAlign.Center},
37 middle: {anchor: "__container__", align: HorizontalAlign.Center} 37 middle: {anchor: "__container__", align: HorizontalAlign.Center}
@@ -372,6 +372,7 @@ export struct LiveOperRowListView { @@ -372,6 +372,7 @@ export struct LiveOperRowListView {
372 this.publishCommentModel.rootCommentId = '-1'; 372 this.publishCommentModel.rootCommentId = '-1';
373 this.publishCommentModel.parentId = '-1'; 373 this.publishCommentModel.parentId = '-1';
374 this.publishCommentModel.placeHolderText = "说两句..." 374 this.publishCommentModel.placeHolderText = "说两句..."
  375 + this.publishCommentModel.commentContent = ""
375 this.commentInputDialogController?.open(); 376 this.commentInputDialogController?.open();
376 } 377 }
377 378
@@ -466,14 +467,20 @@ export struct LiveOperRowListView { @@ -466,14 +467,20 @@ export struct LiveOperRowListView {
466 this.showCommentInput = canComment 467 this.showCommentInput = canComment
467 468
468 let mLiveId: string = this.contentDetailData.liveInfo.mlive.mliveId as string 469 let mLiveId: string = this.contentDetailData.liveInfo.mlive.mliveId as string
469 - if (!HttpUtils.isLogin() || mLiveId == undefined) { 470 + if (!mLiveId) {
  471 + return
  472 + }
  473 + if (!HttpUtils.isLogin()) {
  474 + this.banComment = false
470 return 475 return
471 } 476 }
472 477
473 // 查询是否被禁言 478 // 查询是否被禁言
474 PageRepository.fetchLiveBarrageBan(mLiveId).then(res => { 479 PageRepository.fetchLiveBarrageBan(mLiveId).then(res => {
475 - this.banComment = res.data as boolean  
476 - this.showCommentInput = !this.banComment && canComment 480 + if (res.code == 0) {
  481 + this.banComment = res.data as boolean
  482 + this.showCommentInput = !this.banComment && canComment
  483 + }
477 }) 484 })
478 } 485 }
479 } 486 }
@@ -27,32 +27,60 @@ export class SearchShowRed { @@ -27,32 +27,60 @@ export class SearchShowRed {
27 res.push(content); 27 res.push(content);
28 } 28 }
29 29
30 - SearchShowRed.formatTitle(html, res, 0, textArr); 30 + console.log('SearchShowRed-res', JSON.stringify(res))
  31 +
  32 + SearchShowRed.formatTitle(
  33 + html.replaceAll('<em>', '').replaceAll('</em>', ''),
  34 + res,
  35 + 0,
  36 + textArr
  37 + );
31 } 38 }
32 39
33 const titleInitRes: titleInitRes = { 40 const titleInitRes: titleInitRes = {
34 titleMarked, 41 titleMarked,
35 textArr 42 textArr
36 } 43 }
  44 + console.log('SearchShowRed-titleInitRes', JSON.stringify(titleInitRes))
37 return titleInitRes 45 return titleInitRes
38 } 46 }
39 47
40 private static formatTitle(textStr: string, matchArr: string[], index: number, textArr: textItem[]) { 48 private static formatTitle(textStr: string, matchArr: string[], index: number, textArr: textItem[]) {
41 const item: string = matchArr[index]; 49 const item: string = matchArr[index];
42 - const arr = textStr.split(item);  
43 - arr.forEach((str: string, ind: number) => {  
44 - if (ind === 0) {  
45 - textArr.push({  
46 - content: str.replaceAll('<em>', '').replaceAll('</em>', ''),  
47 - isRed: false  
48 - } as textItem)  
49 - textArr.push({  
50 - content: item,  
51 - isRed: true  
52 - })  
53 - } else if (ind === 1) {  
54 - SearchShowRed.formatTitle(str, matchArr, index + 1, textArr)  
55 - }  
56 - }) 50 + if (!item) {
  51 + textArr.push({
  52 + content: textStr,
  53 + isRed: false
  54 + })
  55 + return;
  56 + }
  57 + const ind = textStr.indexOf(item);
  58 + const len = item.length;
  59 + if (ind === 0) {
  60 + textArr.push({
  61 + content: item,
  62 + isRed: true
  63 + })
  64 + SearchShowRed.formatTitle(textStr.slice(len), matchArr, index + 1, textArr);
  65 + } else if (ind + len === textStr.length) {
  66 + textArr.push({
  67 + content: textStr.slice(0, ind),
  68 + isRed: false
  69 + })
  70 + textArr.push({
  71 + content: item,
  72 + isRed: true
  73 + })
  74 + } else {
  75 + textArr.push({
  76 + content: textStr.slice(0, ind),
  77 + isRed: false
  78 + })
  79 + textArr.push({
  80 + content: item,
  81 + isRed: true
  82 + })
  83 + SearchShowRed.formatTitle(textStr.slice(ind + len), matchArr, index + 1, textArr);
  84 + }
57 } 85 }
58 } 86 }
@@ -29,6 +29,14 @@ @@ -29,6 +29,14 @@
29 "value": "14fp" 29 "value": "14fp"
30 }, 30 },
31 { 31 {
  32 + "name": "font_size_14_5",
  33 + "value": "14.5fp"
  34 + },
  35 + {
  36 + "name": "font_size_15",
  37 + "value": "15fp"
  38 + },
  39 + {
32 "name": "font_size_16", 40 "name": "font_size_16",
33 "value": "16fp" 41 "value": "16fp"
34 }, 42 },
1 -import { ContentDetailDTO, LiveRoomDataBean } from 'wdBean/Index'; 1 +import { ContentDetailDTO, LiveRoomDataBean, LiveRoomItemBean } from 'wdBean/Index';
2 import { LiveViewModel } from '../viewModel/LiveViewModel'; 2 import { LiveViewModel } from '../viewModel/LiveViewModel';
3 import { TabComponent } from '../widgets/details/TabComponent'; 3 import { TabComponent } from '../widgets/details/TabComponent';
4 import { TopPlayComponent } from '../widgets/details/video/TopPlayComponet'; 4 import { TopPlayComponent } from '../widgets/details/video/TopPlayComponet';
@@ -35,6 +35,10 @@ export struct DetailPlayLivePage { @@ -35,6 +35,10 @@ export struct DetailPlayLivePage {
35 @Consume contentDetailData: ContentDetailDTO 35 @Consume contentDetailData: ContentDetailDTO
36 @Consume publishCommentModel: publishCommentModel 36 @Consume publishCommentModel: publishCommentModel
37 37
  38 + // 尽量不要动属性。用来作为输入了评论之后,值传递
  39 + @State lastInputedLiveComment: LiveRoomItemBean = {} as LiveRoomItemBean // 上次输入的直播间消息
  40 + @State lastInputedChatComment: LiveRoomItemBean = {} as LiveRoomItemBean // 上次输入的大家聊消息
  41 +
38 aboutToAppear(): void { 42 aboutToAppear(): void {
39 Logger.info(TAG, `wyj-aboutToAppear`) 43 Logger.info(TAG, `wyj-aboutToAppear`)
40 44
@@ -65,7 +69,10 @@ export struct DetailPlayLivePage { @@ -65,7 +69,10 @@ export struct DetailPlayLivePage {
65 TopPlayComponent({ playerController: this.playerController }) 69 TopPlayComponent({ playerController: this.playerController })
66 .height(this.displayDirection == DisplayDirection.VERTICAL ? 211 : '100%') 70 .height(this.displayDirection == DisplayDirection.VERTICAL ? 211 : '100%')
67 71
68 - TabComponent({ tabs: this.tabs, changeToTab: this.changeToTab }) 72 + TabComponent({ tabs: this.tabs,
  73 + changeToTab: this.changeToTab,
  74 + lastInputedLiveComment: this.lastInputedLiveComment,
  75 + lastInputedChatComment: this.lastInputedChatComment})
69 .layoutWeight(1) 76 .layoutWeight(1)
70 .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None) 77 .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None)
71 78
@@ -79,7 +86,16 @@ export struct DetailPlayLivePage { @@ -79,7 +86,16 @@ export struct DetailPlayLivePage {
79 }, 86 },
80 onCommentInputed: (content) => { 87 onCommentInputed: (content) => {
81 if (content.comment) { 88 if (content.comment) {
82 - this.liveViewModel.sendComment(content.comment) 89 + this.liveViewModel.sendComment(content.comment, this.contentDetailData).then(result => {
  90 + if (!result) {
  91 + return
  92 + }
  93 + if (result.isWall == 1) {
  94 + this.lastInputedLiveComment = result
  95 + } else {
  96 + this.lastInputedChatComment = result
  97 + }
  98 + })
83 } 99 }
84 } 100 }
85 }).visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None) 101 }).visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None)
1 -import { HttpUrlUtils, ResponseDTO } from 'wdNetwork'; 1 +import { HttpUrlUtils, HttpUtils, ResponseDTO } from 'wdNetwork';
2 import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest'; 2 import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest';
3 -import { Logger, ToastUtils, EmitterEventId, EmitterUtils } from 'wdKit';  
4 -import { ContentDetailDTO, LiveDetailsBean, LiveRoomBean, LiveRoomDataBean, ReserveItemBean, ValueType } from 'wdBean/Index'; 3 +import { Logger, ToastUtils, EmitterEventId, EmitterUtils, SPHelper } from 'wdKit';
  4 +import { ContentDetailDTO, LiveDetailsBean, LiveRoomBean, LiveRoomDataBean,
  5 + LiveRoomItemBean,
  6 + ReserveItemBean, ValueType } from 'wdBean/Index';
5 import { ContentDetailRequest } from 'wdDetailPlayApi/Index'; 7 import { ContentDetailRequest } from 'wdDetailPlayApi/Index';
  8 +import { SpConstants } from 'wdConstant/Index';
6 9
7 const TAG = 'LiveModel' 10 const TAG = 'LiveModel'
8 11
@@ -266,5 +269,61 @@ export class LiveModel { @@ -266,5 +269,61 @@ export class LiveModel {
266 }) 269 })
267 }) 270 })
268 } 271 }
  272 +
  273 + liveSendComment(comment: string, content: ContentDetailDTO) {
  274 + let tourist: boolean = !HttpUtils.isLogin()
  275 + let roomId: string = content.liveInfo.mlive.roomId as string
  276 + let liveId: string = content.newsId + ''
  277 + let mLiveId: string = content.liveInfo.mlive.mliveId as string
  278 +
  279 + let commentItem: LiveRoomItemBean = {} as LiveRoomItemBean
  280 + commentItem.text = comment
  281 + commentItem.isWall = 0
  282 + commentItem.dataType = "ZH_TEXT_MSG"
  283 +
  284 + let params: Record<string, string | number> = {};
  285 + params["liveId"] = liveId
  286 + params["mliveId"] = mLiveId
  287 + params["roomId"] = roomId
  288 + params["title"] = content.newsTitle
  289 + params["text"] = comment
  290 +
  291 + if (tourist) {
  292 + params["deviceId"] = HttpUtils.getDeviceId()
  293 + params["senderUserName"] = SPHelper.default.getSync(SpConstants.TOURIST_NICK_NAME, "") as string
  294 + } else {
  295 + params["senderUserId"] = SPHelper.default.getSync(SpConstants.USER_ID, "") as string
  296 + params["senderAvatarUrl"] = SPHelper.default.getSync(SpConstants.USER_HEAD_PHOTO_URL, "") as string
  297 + params["senderUserName"] = SPHelper.default.getSync(SpConstants.USER_NAME, "") as string
  298 + commentItem.senderUserAvatarUrl = params["senderAvatarUrl"]
  299 + }
  300 + commentItem.senderUserName = params["senderUserName"]
  301 + params["customizeExpression"] = 0
  302 + params["role"] = tourist ? "tourist" : "audience"
  303 + commentItem.role = tourist ? "tourist" : "audience"
  304 +
  305 + let url = tourist ? HttpUrlUtils.getLiveTouristSendBarrageUrl() : HttpUrlUtils.getLiveSendBarrageUrl()
  306 + return new Promise<SendLiveCommentRes>((success, fail) => {
  307 + HttpRequest.post<ResponseDTO<SendLiveCommentInterfaceRes>>(url, params).then((data) => {
  308 + let res:SendLiveCommentRes = {
  309 + preDisplay: data.data?.preDisplay || false,
  310 + tipMessage: data.message,
  311 + commentItem: commentItem
  312 + }
  313 + success(res)
  314 + }, (error: Error) => {
  315 + fail(error.message)
  316 + Logger.debug(TAG + ":error ", error.toString())
  317 + })
  318 + })
  319 + }
269 } 320 }
270 321
  322 +interface SendLiveCommentInterfaceRes {
  323 + preDisplay: boolean
  324 +}
  325 +export interface SendLiveCommentRes {
  326 + preDisplay: boolean
  327 + tipMessage: string
  328 + commentItem: LiveRoomItemBean
  329 +}
1 import { ContentDetailDTO, 1 import { ContentDetailDTO,
2 GetPullAddressBean, 2 GetPullAddressBean,
3 - LiveDetailsBean, LiveRoomBean, LiveRoomDataBean, ValueType } from 'wdBean/Index' 3 + LiveDetailsBean, LiveRoomBean, LiveRoomDataBean,
  4 + LiveRoomItemBean,
  5 + ValueType } from 'wdBean/Index'
4 import { ContentDetailRequest } from 'wdDetailPlayApi/Index' 6 import { ContentDetailRequest } from 'wdDetailPlayApi/Index'
5 - 7 +import { Logger } from 'wdKit/Index'
  8 +import { ToastUtils } from 'wdKit/src/main/ets/utils/ToastUtils'
6 import { ResponseDTO } from 'wdNetwork/Index' 9 import { ResponseDTO } from 'wdNetwork/Index'
7 import { LiveModel } from './LiveModel' 10 import { LiveModel } from './LiveModel'
8 11
@@ -136,7 +139,40 @@ export class LiveViewModel { @@ -136,7 +139,40 @@ export class LiveViewModel {
136 }) 139 })
137 } 140 }
138 141
139 - sendComment(comment: string) { 142 + // 发送评论
  143 + sendComment(comment: string, content: ContentDetailDTO) {
  144 + return new Promise<LiveRoomItemBean | undefined>((success, fail) => {
  145 + this.liveModel.liveSendComment(comment, content).then((data) => {
  146 + Logger.debug(TAG, "发送评论结果: " + JSON.stringify(data))
  147 + if (data.preDisplay) {
  148 + success(data.commentItem)
  149 + } else {
  150 + success(undefined)
  151 + }
  152 + ToastUtils.showToast(data.tipMessage, 3000)
  153 + }).catch((message: string) => {
  154 + fail(message)
  155 + })
  156 + })
  157 + }
140 158
  159 + deepCopyLiveRoomItem(item: LiveRoomItemBean) {
  160 + return item
  161 + let retItem: LiveRoomItemBean = {} as LiveRoomItemBean
  162 + retItem.text = item.text
  163 + retItem.senderUserAvatarUrl = item.senderUserAvatarUrl
  164 + retItem.senderUserName = item.senderUserName
  165 + retItem.pictureUrls = item.pictureUrls
  166 + retItem.time = item.time
  167 + retItem.isWall = item.isWall
  168 + retItem.isTop = item.isTop
  169 + retItem.dataType = item.dataType
  170 + retItem.transcodeImageUrl = item.transcodeImageUrl
  171 + retItem.videoUrl = item.videoUrl
  172 + retItem.pictureResolutions = item.pictureResolutions
  173 + retItem.duration = item.duration
  174 + retItem.audioUrl = item.audioUrl
  175 + retItem.fullColumnImgUrlDto = item.fullColumnImgUrlDto
  176 + return retItem
141 } 177 }
142 -}  
  178 +}
@@ -23,6 +23,7 @@ export struct TabChatComponent { @@ -23,6 +23,7 @@ export struct TabChatComponent {
23 @State liveChatList: Array<LiveRoomItemBean> = [] 23 @State liveChatList: Array<LiveRoomItemBean> = []
24 @Consume contentDetailData: ContentDetailDTO 24 @Consume contentDetailData: ContentDetailDTO
25 @Consume publishCommentModel: publishCommentModel 25 @Consume publishCommentModel: publishCommentModel
  26 + @Prop @Watch("lastInputedCommentChanged") lastInputedComment: LiveRoomItemBean
26 27
27 aboutToAppear(): void { 28 aboutToAppear(): void {
28 this.getLiveChatList() 29 this.getLiveChatList()
@@ -46,6 +47,12 @@ export struct TabChatComponent { @@ -46,6 +47,12 @@ export struct TabChatComponent {
46 }) 47 })
47 } 48 }
48 49
  50 + lastInputedCommentChanged(info: string) {
  51 + Logger.debug(TAG, "2显示评论》》》: " + JSON.stringify(this.lastInputedComment))
  52 + this.liveChatList.push(this.liveViewModel.deepCopyLiveRoomItem(this.lastInputedComment))
  53 + this.pageModel.viewType = ViewType.LOADED;
  54 + }
  55 +
49 build() { 56 build() {
50 Stack() { 57 Stack() {
51 if (this.pageModel.viewType == ViewType.LOADING) { 58 if (this.pageModel.viewType == ViewType.LOADING) {
1 import { LiveRoomItemBean, Action, PhotoListBean, Params } from 'wdBean/Index' 1 import { LiveRoomItemBean, Action, PhotoListBean, Params } from 'wdBean/Index'
2 -import { StringUtils } from 'wdKit/Index' 2 +import { Logger, StringUtils } from 'wdKit/Index'
3 // import { Action, LiveRoomItemBean, Params, PhotoListBean } from 'wdBean/Index' 3 // import { Action, LiveRoomItemBean, Params, PhotoListBean } from 'wdBean/Index'
4 import { WDRouterRule } from 'wdRouter' 4 import { WDRouterRule } from 'wdRouter'
5 import { ExtraDTO } from 'wdBean/src/main/ets/bean/component/extra/ExtraDTO' 5 import { ExtraDTO } from 'wdBean/src/main/ets/bean/component/extra/ExtraDTO'
6 6
  7 +const TAG = "TabChatItemComponent"
  8 +
7 @Component 9 @Component
8 export struct TabChatItemComponent { 10 export struct TabChatItemComponent {
9 item: LiveRoomItemBean = {} as LiveRoomItemBean 11 item: LiveRoomItemBean = {} as LiveRoomItemBean
10 12
11 aboutToAppear(): void { 13 aboutToAppear(): void {
  14 + Logger.debug(TAG, "评论内容: " + this.item.text + " 评论sender: " + this.item.senderUserName)
12 } 15 }
13 16
14 build() { 17 build() {
  1 +import { LiveRoomItemBean } from 'wdBean/Index'
1 import { TabChatComponent } from './TabChatComponent' 2 import { TabChatComponent } from './TabChatComponent'
2 import { TabInfoComponent } from './TabInfoComponent' 3 import { TabInfoComponent } from './TabInfoComponent'
3 import { TabLiveComponent } from './TabLiveComponent' 4 import { TabLiveComponent } from './TabLiveComponent'
@@ -13,6 +14,9 @@ export struct TabComponent { @@ -13,6 +14,9 @@ export struct TabComponent {
13 @State currentIndex: number = 0 14 @State currentIndex: number = 0
14 private controller: TabsController = new TabsController() 15 private controller: TabsController = new TabsController()
15 @Prop tabs: string[] = [] 16 @Prop tabs: string[] = []
  17 + @Prop lastInputedLiveComment: LiveRoomItemBean // 上次输入的直播间消息
  18 + @Prop lastInputedChatComment: LiveRoomItemBean // 上次输入的大家聊消息
  19 +
16 aboutToAppear(): void { 20 aboutToAppear(): void {
17 21
18 } 22 }
@@ -34,9 +38,9 @@ export struct TabComponent { @@ -34,9 +38,9 @@ export struct TabComponent {
34 if ('简介' === item) { 38 if ('简介' === item) {
35 TabInfoComponent() 39 TabInfoComponent()
36 } else if ('直播间' === item) { 40 } else if ('直播间' === item) {
37 - TabLiveComponent() 41 + TabLiveComponent({lastInputedComment: this.lastInputedLiveComment})
38 } else if ('大家聊' === item) { 42 } else if ('大家聊' === item) {
39 - TabChatComponent() 43 + TabChatComponent({lastInputedComment: this.lastInputedChatComment})
40 } 44 }
41 } 45 }
42 .backgroundColor('#F5F5F5') 46 .backgroundColor('#F5F5F5')
@@ -105,4 +109,4 @@ export struct TabComponent { @@ -105,4 +109,4 @@ export struct TabComponent {
105 109
106 aboutToDisappear(): void { 110 aboutToDisappear(): void {
107 } 111 }
108 -}  
  112 +}
@@ -23,11 +23,18 @@ export struct TabLiveComponent { @@ -23,11 +23,18 @@ export struct TabLiveComponent {
23 @Consume @Watch('updateData') contentDetailData: ContentDetailDTO 23 @Consume @Watch('updateData') contentDetailData: ContentDetailDTO
24 @State private pageModel: PageModel = new PageModel() 24 @State private pageModel: PageModel = new PageModel()
25 private scroller: Scroller = new Scroller() 25 private scroller: Scroller = new Scroller()
  26 + @Prop @Watch("lastInputedCommentChanged") lastInputedComment: LiveRoomItemBean
26 27
27 aboutToAppear(): void { 28 aboutToAppear(): void {
28 this.getLiveList() 29 this.getLiveList()
29 } 30 }
30 31
  32 + lastInputedCommentChanged(info: string) {
  33 + Logger.debug(TAG, "1显示评论》》》: " + JSON.stringify(this.lastInputedComment))
  34 + this.liveList.push(this.liveViewModel.deepCopyLiveRoomItem(this.lastInputedComment))
  35 + this.pageModel.viewType = ViewType.LOADED;
  36 + }
  37 +
31 build() { 38 build() {
32 Stack() { 39 Stack() {
33 if (this.pageModel.viewType == ViewType.LOADING) { 40 if (this.pageModel.viewType == ViewType.LOADING) {
@@ -200,4 +207,4 @@ export struct TabLiveComponent { @@ -200,4 +207,4 @@ export struct TabLiveComponent {
200 } 207 }
201 this.getLiveList() 208 this.getLiveList()
202 } 209 }
203 -}  
  210 +}
@@ -10,7 +10,7 @@ import { LiveViewModel } from '../../viewModel/LiveViewModel' @@ -10,7 +10,7 @@ import { LiveViewModel } from '../../viewModel/LiveViewModel'
10 import { ChartItemCompereComponent } from './ChartItemCompereComponent' 10 import { ChartItemCompereComponent } from './ChartItemCompereComponent'
11 import { ChatItemComponent } from './ChartItemComponent' 11 import { ChatItemComponent } from './ChartItemComponent'
12 import { router } from '@kit.ArkUI' 12 import { router } from '@kit.ArkUI'
13 -import { EmitterEventId, EmitterUtils, SPHelper, WindowModel } from 'wdKit/Index' 13 +import { EmitterEventId, EmitterUtils, Logger, SPHelper, WindowModel } from 'wdKit/Index'
14 14
15 const TAG = "PlayerCommentComponent" 15 const TAG = "PlayerCommentComponent"
16 16
@@ -28,22 +28,6 @@ export struct PlayerCommentComponent { @@ -28,22 +28,6 @@ export struct PlayerCommentComponent {
28 async aboutToAppear(): Promise<void> { 28 async aboutToAppear(): Promise<void> {
29 29
30 this.getLiveChatList() 30 this.getLiveChatList()
31 - //注册通知  
32 - EmitterUtils.receiveEvent(EmitterEventId.COMMENT_PUBLISH, async (targetId?: string) => {  
33 - if (targetId) {  
34 - if (targetId == this.publishCommentModel.targetId) {  
35 - const info = {  
36 - senderUserName: this.publishCommentModel.lastCommentModel.fromUserName,  
37 - text: this.publishCommentModel.lastCommentModel.commentContent,  
38 - } as LiveRoomItemBean  
39 -  
40 - this.liveChatList.push(info)  
41 - this.scroller.scrollEdge(Edge.Bottom)  
42 - console.log(TAG, '发布评论:', JSON.stringify(this.publishCommentModel.lastCommentModel))  
43 - }  
44 - }  
45 - })  
46 -  
47 } 31 }
48 32
49 generateRandomString() { 33 generateRandomString() {
@@ -122,7 +106,14 @@ export struct PlayerCommentComponent { @@ -122,7 +106,14 @@ export struct PlayerCommentComponent {
122 }, 106 },
123 onCommentInputed: (content) => { 107 onCommentInputed: (content) => {
124 if (content.comment) { 108 if (content.comment) {
125 - this.liveViewModel.sendComment(content.comment) 109 + this.liveViewModel.sendComment(content.comment, this.contentDetailData).then(result => {
  110 + if (!result) {
  111 + return
  112 + }
  113 + Logger.debug(TAG, "3显示评论》》》: " + JSON.stringify(result))
  114 + this.liveChatList.push(result)
  115 + this.scroller.scrollEdge(Edge.Bottom)
  116 + })
126 } 117 }
127 }, 118 },
128 onBack: () => { 119 onBack: () => {
@@ -267,6 +267,7 @@ export class WDAliPlayerController { @@ -267,6 +267,7 @@ export class WDAliPlayerController {
267 267
268 async firstPlay(url: string) { 268 async firstPlay(url: string) {
269 if (StringUtils.isEmpty(url)) { 269 if (StringUtils.isEmpty(url)) {
  270 + Logger.error(TAG, "播放链接为空")
270 return 271 return
271 } 272 }
272 273
@@ -292,7 +293,7 @@ export class WDAliPlayerController { @@ -292,7 +293,7 @@ export class WDAliPlayerController {
292 293
293 this.avPlayer?.setAutoPlay(false) 294 this.avPlayer?.setAutoPlay(false)
294 295
295 - Logger.debug(TAG, "开始播放:"+ this.url) 296 + Logger.debug(TAG, "开始播放: " + this.url)
296 this.setAliPlayerURL(this.url); 297 this.setAliPlayerURL(this.url);
297 298
298 Logger.info(TAG, "设置SurfaceId: " + this.surfaceId) 299 Logger.info(TAG, "设置SurfaceId: " + this.surfaceId)
@@ -473,4 +474,4 @@ export class WDAliPlayerController { @@ -473,4 +474,4 @@ export class WDAliPlayerController {
473 setStartTime(time?: number) { 474 setStartTime(time?: number) {
474 this.startTime = time ?? 0; 475 this.startTime = time ?? 0;
475 } 476 }
476 -}  
  477 +}
@@ -56,9 +56,9 @@ export struct VideoChannelPage { @@ -56,9 +56,9 @@ export struct VideoChannelPage {
56 */ 56 */
57 getTopNavFontColor(item: TopNavDTO, index: number): Color | string { 57 getTopNavFontColor(item: TopNavDTO, index: number): Color | string {
58 if (item.name === '视频' && this.currentBottomNavInfo.name === '视频') { 58 if (item.name === '视频' && this.currentBottomNavInfo.name === '视频') {
59 - return this.currentTopNavSelectedIndex === index ? Color.White : '#e5e0e0' 59 + return this.currentTopNavSelectedIndex === index ? Color.White : '#949494'
60 } else { 60 } else {
61 - return this.currentTopNavSelectedIndex === index ? Color.Black : "#999999" 61 + return this.currentTopNavSelectedIndex === index ? Color.Black : "#B2B2B2"
62 } 62 }
63 } 63 }
64 64
@@ -74,7 +74,7 @@ export struct VideoChannelPage { @@ -74,7 +74,7 @@ export struct VideoChannelPage {
74 74
75 @Builder 75 @Builder
76 topNavView() { 76 topNavView() {
77 - Stack({ alignContent: Alignment.TopEnd }) { 77 + Stack({ alignContent: Alignment.End }) {
78 Row() { 78 Row() {
79 ForEach(this.topNavList, (item: TopNavDTO, index: number) => { 79 ForEach(this.topNavList, (item: TopNavDTO, index: number) => {
80 Column() { 80 Column() {
@@ -117,7 +117,7 @@ export struct VideoChannelPage { @@ -117,7 +117,7 @@ export struct VideoChannelPage {
117 117
118 // 搜索按钮 118 // 搜索按钮
119 Row() { 119 Row() {
120 - Image($r('app.media.icon_search')) 120 + Image($r(this.currentTopNavSelectedIndex === 0 ? 'app.media.icon_search_gray_svg' :'app.media.icon_search_svg'))
121 .width('24vp') 121 .width('24vp')
122 .height('24vp') 122 .height('24vp')
123 } 123 }
@@ -18,6 +18,7 @@ import { JSON } from '@kit.ArkTS' @@ -18,6 +18,7 @@ import { JSON } from '@kit.ArkTS'
18 import app from '@system.app' 18 import app from '@system.app'
19 import { GetuiPush, HWLocationUtils } from 'wdHwAbility/Index' 19 import { GetuiPush, HWLocationUtils } from 'wdHwAbility/Index'
20 import { ImageKnife, ImageKnifeGlobal } from '@ohos/imageknife' 20 import { ImageKnife, ImageKnifeGlobal } from '@ohos/imageknife'
  21 +import { webview } from '@kit.ArkWeb'
21 22
22 const TAG = "[StartupManager]" 23 const TAG = "[StartupManager]"
23 24
@@ -120,7 +121,8 @@ export class StartupManager { @@ -120,7 +121,8 @@ export class StartupManager {
120 GetuiPush.sharedInstance().onReachMainPage() 121 GetuiPush.sharedInstance().onReachMainPage()
121 122
122 //TODO: 123 //TODO:
123 - 124 + // 提前初始化webview
  125 + webview.WebviewController.initializeWebEngine()
124 resolve() 126 resolve()
125 }) 127 })
126 } 128 }