yangsunyue_wd

desc:热门评论相关 90%

@@ -513,6 +513,24 @@ export class HttpUrlUtils { @@ -513,6 +513,24 @@ export class HttpUrlUtils {
513 return url 513 return url
514 } 514 }
515 515
  516 + /*评论状态*/
  517 + static getBatchCommentStatusUrl() {
  518 + let url = HttpUrlUtils._hostUrl + "/api/rmrb-comment/comment/zh/c/batchCommentStatus"
  519 + return url
  520 + }
  521 +
  522 + /*levleIcon*/
  523 + static getBatchUserUrl() {
  524 + let url = HttpUrlUtils._hostUrl + "/api/rmrb-user-point/auth/level/zh/c/batchUser"
  525 + return url
  526 + }
  527 +
  528 + /*authIcon 20个一次上限*/
  529 + static getDetailListUrl() {
  530 + let url = HttpUrlUtils._hostUrl + "/api/rmrb-contact/contact/zh/c/master/detailList"
  531 + return url
  532 + }
  533 +
516 534
517 //账户注销 535 //账户注销
518 static accountLogoutUrl() { 536 static accountLogoutUrl() {
@@ -72,6 +72,8 @@ export class WDRouterPage { @@ -72,6 +72,8 @@ export class WDRouterPage {
72 static privacySettingPage = new WDRouterPage("wdComponent", "ets/components/page/PrivacySettingPage"); 72 static privacySettingPage = new WDRouterPage("wdComponent", "ets/components/page/PrivacySettingPage");
73 // 关于页 73 // 关于页
74 static aboutPage = new WDRouterPage("wdComponent", "ets/components/page/SettingAboutPage"); 74 static aboutPage = new WDRouterPage("wdComponent", "ets/components/page/SettingAboutPage");
  75 + // 精选评论页
  76 + static QualityCommentsPage = new WDRouterPage("wdComponent", "ets/components/page/QualityCommentsPage");
75 // 设置页 77 // 设置页
76 static settingPage = new WDRouterPage("wdComponent", "ets/components/page/SettingPage"); 78 static settingPage = new WDRouterPage("wdComponent", "ets/components/page/SettingPage");
77 // 设置页 79 // 设置页
@@ -17,6 +17,7 @@ import { CardParser } from './CardParser'; @@ -17,6 +17,7 @@ import { CardParser } from './CardParser';
17 import { LiveHorizontalReservationComponent } from './view/LiveHorizontalReservationComponent'; 17 import { LiveHorizontalReservationComponent } from './view/LiveHorizontalReservationComponent';
18 import { ZhGridLayout02 } from './compview/ZhGridLayout02'; 18 import { ZhGridLayout02 } from './compview/ZhGridLayout02';
19 import { Card5Component } from './cardview/Card5Component' 19 import { Card5Component } from './cardview/Card5Component'
  20 +import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
20 21
21 /** 22 /**
22 * comp适配器. 23 * comp适配器.
@@ -69,6 +70,11 @@ export struct CompParser { @@ -69,6 +70,11 @@ export struct CompParser {
69 Text(compDTO.compStyle) 70 Text(compDTO.compStyle)
70 .width(CommonConstants.FULL_PARENT) 71 .width(CommonConstants.FULL_PARENT)
71 .padding(10) 72 .padding(10)
  73 + .onClick(()=>{
  74 + if (compDTO.compStyle === CompStyle.Zh_Single_Row_06) {//精选评论
  75 + WDRouterRule.jumpWithPage(WDRouterPage.QualityCommentsPage)
  76 + }
  77 + })
72 // .backgroundColor(Color.Brown) // 展示本页未实现的compStyle 78 // .backgroundColor(Color.Brown) // 展示本页未实现的compStyle
73 } 79 }
74 } 80 }
@@ -33,9 +33,17 @@ export class commentListModel extends PageModel{ @@ -33,9 +33,17 @@ export class commentListModel extends PageModel{
33 totalCount: number = 0 33 totalCount: number = 0
34 hasNext: number = 0 34 hasNext: number = 0
35 list: commentItemModel[] = [] 35 list: commentItemModel[] = []
  36 +}
36 37
  38 +export class commentStatusListModel extends PageModel{
  39 + pageNum: number = 0
  40 + pageSize: number = 0
  41 + totalCount: number = 0
  42 + hasNext: number = 0
  43 + list: commentStatusModel[] = []
37 } 44 }
38 45
  46 +
39 @Observed 47 @Observed
40 export class commentItemModel { 48 export class commentItemModel {
41 authorLike: string = '' 49 authorLike: string = ''
@@ -94,9 +102,17 @@ export class commentItemModel { @@ -94,9 +102,17 @@ export class commentItemModel {
94 targetType:string = ''; 102 targetType:string = '';
95 visitorComment:string = ''; 103 visitorComment:string = '';
96 shareInfo:commentItemShareInfoModel = new commentItemShareInfoModel; 104 shareInfo:commentItemShareInfoModel = new commentItemShareInfoModel;
97 - // targetId:string = '';  
98 - // targetId:string = '';  
99 - // targetId:string = ''; 105 +
  106 + api_commentId:string = '';
  107 + api_status:string = '';
  108 +
  109 + api_level:string = '';
  110 + api_levelHead:string = 'http';
  111 + api_userId:string = '';
  112 +
  113 + api_creatorId:string = '';
  114 + api_userType:string = '';
  115 + api_authIcon:string = '';
100 116
101 } 117 }
102 118
@@ -106,3 +122,18 @@ export class commentItemShareInfoModel { @@ -106,3 +122,18 @@ export class commentItemShareInfoModel {
106 shareTitle: string = '' 122 shareTitle: string = ''
107 shareUrl: string = '' 123 shareUrl: string = ''
108 } 124 }
  125 +
  126 +export class commentStatusModel {
  127 + commentId:string = '';
  128 + status:string = '';
  129 +
  130 + level:string = '';
  131 + levelHead:string = '';
  132 + userId:string = '';
  133 +
  134 +
  135 + creatorId:string = '';
  136 + userType:string = '';
  137 + authIcon:string = '';
  138 +
  139 +}
@@ -6,6 +6,13 @@ import { commentItemModel, commentListModel, WDPublicUserType } from '../model/C @@ -6,6 +6,13 @@ import { commentItemModel, commentListModel, WDPublicUserType } from '../model/C
6 import commentViewModel from '../viewmodel/CommentViewModel' 6 import commentViewModel from '../viewmodel/CommentViewModel'
7 import { CommentText } from './CommentText'; 7 import { CommentText } from './CommentText';
8 import measure from '@ohos.measure' 8 import measure from '@ohos.measure'
  9 +import {CommentCustomDialog} from './CommentCustomDialog'
  10 +
  11 +const TAG = 'CommentComponent';
  12 +
  13 +
  14 +
  15 +
9 16
10 @Entry 17 @Entry
11 @Preview 18 @Preview
@@ -13,10 +20,19 @@ import measure from '@ohos.measure' @@ -13,10 +20,19 @@ import measure from '@ohos.measure'
13 export struct CommentComponent { 20 export struct CommentComponent {
14 @State private browSingModel: commentListModel = new commentListModel() 21 @State private browSingModel: commentListModel = new commentListModel()
15 isloading: boolean = false 22 isloading: boolean = false
16 - // @State allDatas :commentItemModel[] = [];  
17 -  
18 @State allDatas: LazyDataSource<commentItemModel> = new LazyDataSource(); 23 @State allDatas: LazyDataSource<commentItemModel> = new LazyDataSource();
19 24
  25 + dialogController: CustomDialogController = new CustomDialogController({
  26 + builder: CommentCustomDialog(),
  27 + autoCancel: true,
  28 + alignment: DialogAlignment.Bottom,
  29 + customStyle: true,
  30 + offset: {
  31 + dx: 0,
  32 + dy: -20
  33 + }
  34 + })
  35 +
20 aboutToAppear() { 36 aboutToAppear() {
21 this.getData(); 37 this.getData();
22 this.getData(); 38 this.getData();
@@ -59,7 +75,7 @@ export struct CommentComponent { @@ -59,7 +75,7 @@ export struct CommentComponent {
59 .height('32') 75 .height('32')
60 .objectFit(ImageFit.Cover) 76 .objectFit(ImageFit.Cover)
61 .borderRadius(16) 77 .borderRadius(16)
62 - Image($r('app.media.icon_border_test')) 78 + Image(item.api_levelHead)
63 .width('48') 79 .width('48')
64 .height('48') 80 .height('48')
65 .objectFit(ImageFit.Cover) 81 .objectFit(ImageFit.Cover)
@@ -167,7 +183,6 @@ export struct CommentComponent { @@ -167,7 +183,6 @@ export struct CommentComponent {
167 // ///1天~2天:1天前 183 // ///1天~2天:1天前
168 // ///2天~:日期隐藏 184 // ///2天~:日期隐藏
169 185
170 -  
171 Text(DateTimeUtils.getCommentTime(Number.parseFloat(item.createTime))) 186 Text(DateTimeUtils.getCommentTime(Number.parseFloat(item.createTime)))
172 .fontColor($r('app.color.color_B0B0B0')) 187 .fontColor($r('app.color.color_B0B0B0'))
173 .fontSize(12) 188 .fontSize(12)
@@ -212,6 +227,10 @@ export struct CommentComponent { @@ -212,6 +227,10 @@ export struct CommentComponent {
212 227
213 List() { 228 List() {
214 ListItemGroup({ header: this.titleHeader() }) 229 ListItemGroup({ header: this.titleHeader() })
  230 + .onClick(()=>{
  231 + console.log(TAG)
  232 + this.dialogController.open()
  233 + })
215 LazyForEach(this.allDatas, (item: commentItemModel, index: number) => { 234 LazyForEach(this.allDatas, (item: commentItemModel, index: number) => {
216 if (item.hasMore) { 235 if (item.hasMore) {
217 ListItemGroup({ header: this.CommentHeaderItem(item), footer: this.GroupFooterView(item) }) { 236 ListItemGroup({ header: this.CommentHeaderItem(item), footer: this.GroupFooterView(item) }) {
@@ -219,6 +238,9 @@ export struct CommentComponent { @@ -219,6 +238,9 @@ export struct CommentComponent {
219 ListItem() { 238 ListItem() {
220 ChildCommentItem(); 239 ChildCommentItem();
221 } 240 }
  241 + .onClick(()=>{
  242 + console.log(TAG)
  243 + })
222 }) 244 })
223 } 245 }
224 }else { 246 }else {
@@ -227,6 +249,9 @@ export struct CommentComponent { @@ -227,6 +249,9 @@ export struct CommentComponent {
227 ListItem() { 249 ListItem() {
228 ChildCommentItem(); 250 ChildCommentItem();
229 } 251 }
  252 + .onClick(()=>{
  253 + console.log(TAG)
  254 + })
230 }) 255 })
231 } 256 }
232 } 257 }
  1 +@Preview
  2 +@CustomDialog
  3 +export struct CommentCustomDialog {
  4 + controller: CustomDialogController = new CustomDialogController({
  5 + builder: CommentCustomDialog(),
  6 + autoCancel: true,
  7 + alignment: DialogAlignment.Bottom,
  8 + customStyle: true,
  9 + })
  10 +
  11 + build() {
  12 + Column() {
  13 + Row() {
  14 + TextArea({ placeholder: '优质评论会获得最佳评论人的称号' })
  15 + .height('100%')
  16 + .width('100%')
  17 + .backgroundColor($r('app.color.color_transparent'))
  18 + }
  19 + .backgroundColor('#F9F9F9')
  20 + // .width('100%')
  21 + .margin({ top: 12,right: 12, left: 12, bottom: 10 })
  22 + .height(80)
  23 + .borderRadius(4)
  24 +
  25 + Row(){
  26 + Row() {
  27 + Row({ space: 12 }) {
  28 + //语音暂时不做,隐藏
  29 + // Image($r('app.media.WDInput_voice')).width(30).height(30)
  30 +
  31 + Image($r('app.media.WDInput_keyboardImage')).width(30).height(30)
  32 + }
  33 + // Blank()
  34 +
  35 + Row() {
  36 + Text('发布')
  37 + .backgroundColor('#F89381')
  38 + .width(80)
  39 + .height(30)
  40 + .fontSize(15)
  41 + .fontColor(Color.White)
  42 + .textAlign(TextAlign.Center)
  43 + .borderRadius(4)
  44 + }
  45 + }.justifyContent(FlexAlign.SpaceBetween)
  46 + .width('100%')
  47 + .height(60)
  48 + // .margin({ right: 12, left: 12 })
  49 + // .backgroundColor(Color.Red)
  50 + }.padding({left:12, right:12})
  51 + }.backgroundColor(Color.White)
  52 + .width('100%')
  53 + .offset({
  54 + y: 20
  55 + })
  56 + }
  57 +}
  58 +
  59 +
  60 +
  61 +
@@ -2,7 +2,8 @@ import { ViewType } from 'wdConstant/Index' @@ -2,7 +2,8 @@ import { ViewType } from 'wdConstant/Index'
2 import { DateTimeUtils, LazyDataSource, WindowModel } from 'wdKit/Index' 2 import { DateTimeUtils, LazyDataSource, WindowModel } from 'wdKit/Index'
3 import { commentItemModel, commentListModel } from '../model/CommentModel' 3 import { commentItemModel, commentListModel } from '../model/CommentModel'
4 import commentViewModel from '../viewmodel/CommentViewModel' 4 import commentViewModel from '../viewmodel/CommentViewModel'
5 -import { window } from '@kit.ArkUI' 5 +import { router, window } from '@kit.ArkUI'
  6 +import { CustomTitleUI } from '../../reusable/CustomTitleUI'
6 7
7 const TAG = 'QualityCommentsComponent'; 8 const TAG = 'QualityCommentsComponent';
8 9
@@ -10,11 +11,14 @@ const TAG = 'QualityCommentsComponent'; @@ -10,11 +11,14 @@ const TAG = 'QualityCommentsComponent';
10 @Preview 11 @Preview
11 @Component 12 @Component
12 export struct QualityCommentsComponent { 13 export struct QualityCommentsComponent {
  14 + @State tileOpacity: number = 0;
  15 + firstPositionY: number = 0;
13 bottomSafeHeight: string = AppStorage.get<number>('bottomSafeHeight') + 'px'; 16 bottomSafeHeight: string = AppStorage.get<number>('bottomSafeHeight') + 'px';
  17 + topSafeHeight: number = AppStorage.get<number>('topSafeHeight') as number;
14 @State private browSingModel: commentListModel = new commentListModel() 18 @State private browSingModel: commentListModel = new commentListModel()
15 isloading: boolean = false 19 isloading: boolean = false
16 - lastWindowColor:string = '#ffffff'  
17 - currentWindowColor:string = '#FF4202' 20 + lastWindowColor: string = '#ffffff'
  21 + currentWindowColor: string = '#FF4202'
18 @State allDatas: LazyDataSource<commentItemModel> = new LazyDataSource(); 22 @State allDatas: LazyDataSource<commentItemModel> = new LazyDataSource();
19 23
20 aboutToDisappear(): void { 24 aboutToDisappear(): void {
@@ -32,25 +36,25 @@ export struct QualityCommentsComponent { @@ -32,25 +36,25 @@ export struct QualityCommentsComponent {
32 this.fullScreen(); 36 this.fullScreen();
33 37
34 38
35 - commentViewModel.fetchQualityCommentListLocal(getContext()).then(commentListModel => {  
36 - this.allDatas.push(...commentListModel.list)  
37 - })  
38 -  
39 - // commentViewModel.fetchQualityCommentList('1').then((commentListModel) => {  
40 - // if (commentListModel && commentListModel.list && commentListModel.list.length > 0) {  
41 - // // commentListModel.hasMore = true;  
42 - // // this.browSingModel.viewType = ViewType.LOADED; 39 + // commentViewModel.fetchQualityCommentListLocal(getContext()).then(commentListModel => {
43 // this.allDatas.push(...commentListModel.list) 40 // this.allDatas.push(...commentListModel.list)
44 - // // if (commentListModel.list.length === this.browSingModel.pageSize) {  
45 - // // this.browSingModel.currentPage++;  
46 - // // this.browSingModel.hasMore = true;  
47 - // // } else {  
48 - // // this.browSingModel.hasMore = false;  
49 - // // } 41 + // })
  42 +
  43 + commentViewModel.fetchQualityCommentList('1').then((commentListModel) => {
  44 + if (commentListModel && commentListModel.list && commentListModel.list.length > 0) {
  45 + // commentListModel.hasMore = true;
  46 + // this.browSingModel.viewType = ViewType.LOADED;
  47 + this.allDatas.push(...commentListModel.list)
  48 + // if (commentListModel.list.length === this.browSingModel.pageSize) {
  49 + // this.browSingModel.currentPage++;
  50 + // this.browSingModel.hasMore = true;
50 // } else { 51 // } else {
51 - // this.browSingModel.viewType = ViewType.EMPTY; 52 + // this.browSingModel.hasMore = false;
52 // } 53 // }
53 - // }) 54 + } else {
  55 + this.browSingModel.viewType = ViewType.EMPTY;
  56 + }
  57 + })
54 } 58 }
55 59
56 fullScreen() { 60 fullScreen() {
@@ -69,30 +73,143 @@ export struct QualityCommentsComponent { @@ -69,30 +73,143 @@ export struct QualityCommentsComponent {
69 @Builder 73 @Builder
70 titleHeader() { 74 titleHeader() {
71 Row() { 75 Row() {
72 - Image($r('app.media.comment_img_banner')).width('100%').aspectRatio(375 / 283); 76 + Image($r('app.media.comment_img_banner')).width('100%')
  77 + .height(283)
  78 + // .aspectRatio(375 / 283);
  79 + }
  80 + .onAreaChange((oldValue: Area, newValue: Area) => {
  81 +
  82 + let persent = Math.abs(Number(newValue.globalPosition.y)) / 150
  83 + if (persent > 1) {
  84 + persent = 1
  85 + }
  86 + this.tileOpacity = persent
  87 +
  88 + })
  89 + }
  90 +
  91 + /*透明导航栏*/
  92 + @Builder
  93 + TabbarTransparent() {
  94 + RelativeContainer() {
  95 + //标题栏目
  96 + Image($r('app.media.icon_arrow_left_white'))
  97 + .width(24)
  98 + .height(24)
  99 + .objectFit(ImageFit.Auto)
  100 + .id("back_icon")
  101 + .alignRules({
  102 + center: { anchor: "__container__", align: VerticalAlign.Center },
  103 + left: { anchor: "__container__", align: HorizontalAlign.Start }
  104 + })
  105 + .offset({
  106 + y: (this.topSafeHeight / 2) + 'px'
  107 + })
  108 + .margin({ left: 16 })
  109 + .onClick(() => {
  110 + router.back()
  111 + })
73 } 112 }
  113 + .visibility(this.tileOpacity > 0 ? 1 : 0)
  114 + .height(this.topSafeHeight + vp2px(44) + 'px')
  115 + .width('100%')
  116 + .backgroundColor($r('app.color.color_transparent'))
  117 + }
  118 +
  119 + /*导航栏*/
  120 + @Builder
  121 + TabbarNormal() {
  122 + RelativeContainer() {
  123 + //标题栏目
  124 + Image($r('app.media.icon_arrow_left'))
  125 + .width(24)
  126 + .height(24)
  127 + .objectFit(ImageFit.Auto)
  128 + .id("back_icon")
  129 + .alignRules({
  130 + center: { anchor: "__container__", align: VerticalAlign.Center },
  131 + left: { anchor: "__container__", align: HorizontalAlign.Start }
  132 + })
  133 + .offset({
  134 + y: (this.topSafeHeight / 2) + 'px'
  135 + })
  136 + .margin({ left: 16 })
  137 + .onClick(() => {
  138 + router.back()
  139 + })
  140 +
  141 + Text('精选评论')
  142 + // .height('42lpx')
  143 + .maxLines(1)
  144 + .id("title")
  145 + .fontSize('35lpx')
  146 + .fontWeight(400)
  147 + .fontColor($r('app.color.color_222222'))
  148 + .lineHeight('42lpx')
  149 + .alignRules({
  150 + center: {anchor: "__container__", align: VerticalAlign.Center},
  151 + middle: {anchor: "__container__", align: HorizontalAlign.Center}
  152 + })
  153 + .offset({
  154 + y: (this.topSafeHeight / 2) + 'px'
  155 + })
  156 + }
  157 + .visibility(this.tileOpacity > 0 ? 0 : 1)
  158 + .opacity(this.tileOpacity)
  159 + .height(this.topSafeHeight + vp2px(44) + 'px')
  160 + .width('100%')
  161 + .backgroundColor($r('app.color.white'))
74 } 162 }
75 163
76 build() { 164 build() {
77 Column() { 165 Column() {
78 - // this.titleHeader()  
79 - List({ space: 28 }) {  
80 - ListItemGroup({ header: this.titleHeader() }) 166 + Stack({ alignContent: Alignment.Top }) {
  167 +
  168 + Scroll() {
  169 + Column() {
  170 + Stack() {
  171 + this.titleHeader()
81 172
  173 + List({ space: 12 }) {
  174 + // ListItemGroup({ header: this.titleHeader() })
82 LazyForEach(this.allDatas, (item: commentItemModel, index: number) => { 175 LazyForEach(this.allDatas, (item: commentItemModel, index: number) => {
83 ListItem() { 176 ListItem() {
84 QualityCommentItem({ item: item }).margin({ left: 12, right: 12 }) 177 QualityCommentItem({ item: item }).margin({ left: 12, right: 12 })
85 } 178 }
86 - // .offset({  
87 - // y:-87  
88 - // })  
89 }) 179 })
  180 + ListItem() {
  181 +
  182 + }.height(this.bottomSafeHeight)
90 } 183 }
91 - // .contentStartOffset(- 87) 184 + .margin({ top: 196 })
  185 + .height("100%")
  186 + .width("100%")
92 .edgeEffect(EdgeEffect.Spring) 187 .edgeEffect(EdgeEffect.Spring)
93 - .margin({bottom:this.bottomSafeHeight}) 188 + .nestedScroll({
  189 + scrollForward: NestedScrollMode.PARENT_FIRST,
  190 + scrollBackward: NestedScrollMode.SELF_FIRST
  191 + })
  192 +
  193 + // .margin({ bottom: this.bottomSafeHeight })
  194 +
94 // .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) 195 // .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
95 - }.backgroundColor(this.currentWindowColor).height('100%').width('100%') 196 + }.alignContent(Alignment.Top)
  197 + }.backgroundColor(this.currentWindowColor).width('100%')
  198 + }
  199 + .friction(0.6)
  200 + .scrollBar(BarState.Off)
  201 + .edgeEffect(EdgeEffect.None)
  202 + .width('100%')
  203 + .height('100%')
  204 +
  205 + this.TabbarTransparent()
  206 + this.TabbarNormal()
  207 +
  208 +
  209 + }
  210 +
  211 + }
  212 +
96 } 213 }
97 } 214 }
98 215
@@ -103,8 +220,11 @@ struct QualityCommentItem { @@ -103,8 +220,11 @@ struct QualityCommentItem {
103 220
104 build() { 221 build() {
105 Column() { 222 Column() {
  223 + Column().height(16).width('100%').opacity(0)
  224 + Column() {
106 /*头像以及昵称*/ 225 /*头像以及昵称*/
107 RelativeContainer() { 226 RelativeContainer() {
  227 +
108 Image(this.item.fromUserHeader) 228 Image(this.item.fromUserHeader)
109 .width(50) 229 .width(50)
110 .height(50) 230 .height(50)
@@ -185,22 +305,35 @@ struct QualityCommentItem { @@ -185,22 +305,35 @@ struct QualityCommentItem {
185 /*时间 点赞评论*/ 305 /*时间 点赞评论*/
186 Row() { 306 Row() {
187 307
188 - Text(DateTimeUtils.getCommentTime(DateTimeUtils.getDateTimestamp(this.item.createTime))).fontSize(14).fontColor('#999999') 308 + Text(DateTimeUtils.getCommentTime(DateTimeUtils.getDateTimestamp(this.item.createTime)))
  309 + .fontSize(14)
  310 + .fontColor('#999999')
189 311
190 - Row({space:16}){  
191 - Row(){ 312 + Row({ space: 16 }) {
  313 + Row() {
192 Image($r('app.media.comment_icon_pinglun')).width(16).height(16) 314 Image($r('app.media.comment_icon_pinglun')).width(16).height(16)
193 } 315 }
194 316
195 - Row(){ 317 + Row() {
196 //comment_like_select 318 //comment_like_select
197 - Image($r(this.item.likeNum?'app.media.comment_like_select':'app.media.comment_like_normal')).width(16).height(16)  
198 - if (this.item.likeNum){Text(this.item.likeNum).fontColor(this.item.isLike?'#ED2800':'#999999').fontSize(14).margin({left:3})} 319 + Image($r(this.item.likeNum ? 'app.media.comment_like_select' : 'app.media.comment_like_normal'))
  320 + .width(16)
  321 + .height(16)
  322 + if (this.item.likeNum) {
  323 + Text(this.item.likeNum)
  324 + .fontColor(this.item.isLike ? '#ED2800' : '#999999')
  325 + .fontSize(14)
  326 + .margin({ left: 3 })
  327 + }
199 } 328 }
200 } 329 }
201 }.height(38).width('100%').justifyContent(FlexAlign.SpaceBetween) 330 }.height(38).width('100%').justifyContent(FlexAlign.SpaceBetween)
202 331
203 }.backgroundColor('#FFFFFF').padding({ top: 0, left: 16, right: 16 }).borderRadius(4) 332 }.backgroundColor('#FFFFFF').padding({ top: 0, left: 16, right: 16 }).borderRadius(4)
  333 + }
204 334
205 } 335 }
206 } 336 }
  337 +
  338 +
  339 +
1 import { Logger, ResourcesUtils } from 'wdKit/Index'; 1 import { Logger, ResourcesUtils } from 'wdKit/Index';
2 -import { HttpUrlUtils, ResponseDTO } from 'wdNetwork/Index'; 2 +import { HttpBizUtil, HttpUrlUtils, ResponseDTO } from 'wdNetwork/Index';
3 import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest'; 3 import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest';
4 -import { commentItemModel, commentListModel } from '../model/CommentModel'; 4 +import { commentItemModel, commentListModel, commentStatusListModel, commentStatusModel } from '../model/CommentModel';
5 import HashMap from '@ohos.util.HashMap'; 5 import HashMap from '@ohos.util.HashMap';
  6 +import { ifaa } from '@kit.OnlineAuthenticationKit';
6 7
7 const TAG = "CommentViewModel" 8 const TAG = "CommentViewModel"
8 9
9 class CommentViewModel { 10 class CommentViewModel {
10 private static instance: CommentViewModel 11 private static instance: CommentViewModel
  12 +
11 /** 13 /**
12 * 单例模式 14 * 单例模式
13 * @returns 15 * @returns
@@ -19,35 +21,34 @@ class CommentViewModel { @@ -19,35 +21,34 @@ class CommentViewModel {
19 return CommentViewModel.instance; 21 return CommentViewModel.instance;
20 } 22 }
21 23
22 -  
23 /*获取本地mock数据*/ 24 /*获取本地mock数据*/
24 async getCommentLocal(context: Context): Promise<commentListModel> { 25 async getCommentLocal(context: Context): Promise<commentListModel> {
25 Logger.info(TAG, `getBottomNavDataMock start`); 26 Logger.info(TAG, `getBottomNavDataMock start`);
26 - let compRes: ResponseDTO<commentListModel> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<commentListModel>>(context,'comment_local.json' ); 27 + let compRes: ResponseDTO<commentListModel> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<commentListModel>>(context, 'comment_local.json');
27 if (!compRes || !compRes.data) { 28 if (!compRes || !compRes.data) {
28 Logger.info(TAG, `getAppointmentListDataLocal compRes is empty`); 29 Logger.info(TAG, `getAppointmentListDataLocal compRes is empty`);
29 return new commentListModel() 30 return new commentListModel()
30 } 31 }
31 Logger.info(TAG, `getAppointmentListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`); 32 Logger.info(TAG, `getAppointmentListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`);
32 - return compRes.data 33 + return this.fetchCommentStatusAndConfigAuthIcon(compRes.data)
  34 + // this.fetchCommentStatusAndConfigAuthIcon(compRes.data)
  35 + // return compRes.data
33 } 36 }
34 37
35 - /*获取本地mock数据*/ 38 + /*获取热门评论本地mock数据*/
36 async fetchQualityCommentListLocal(context: Context): Promise<commentListModel> { 39 async fetchQualityCommentListLocal(context: Context): Promise<commentListModel> {
37 Logger.info(TAG, `getBottomNavDataMock start`); 40 Logger.info(TAG, `getBottomNavDataMock start`);
38 - let compRes: ResponseDTO<commentListModel> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<commentListModel>>(context,'qualityComment_local.json' ); 41 + let compRes: ResponseDTO<commentListModel> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<commentListModel>>(context, 'qualityComment_local.json');
39 if (!compRes || !compRes.data) { 42 if (!compRes || !compRes.data) {
40 Logger.info(TAG, `getAppointmentListDataLocal compRes is empty`); 43 Logger.info(TAG, `getAppointmentListDataLocal compRes is empty`);
41 return new commentListModel() 44 return new commentListModel()
42 } 45 }
43 Logger.info(TAG, `getAppointmentListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`); 46 Logger.info(TAG, `getAppointmentListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`);
44 - return compRes.data 47 + return this.fetchCommentStatusAndConfigAuthIcon(compRes.data)
45 } 48 }
46 49
47 -  
48 -  
49 - //qualityComment_local.json  
50 - fetchQualityCommentList(pageNum: string) { 50 + /*获取热门评论*/
  51 + fetchQualityCommentList(pageNum: string): Promise<commentListModel> {
51 let url = HttpUrlUtils.getQualityCommentUrl() + `?&pageSize=${10}&pageNum=${pageNum}` 52 let url = HttpUrlUtils.getQualityCommentUrl() + `?&pageSize=${10}&pageNum=${pageNum}`
52 let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders(); 53 let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
53 return new Promise<commentListModel>((success, fail) => { 54 return new Promise<commentListModel>((success, fail) => {
@@ -62,7 +63,15 @@ class CommentViewModel { @@ -62,7 +63,15 @@ class CommentViewModel {
62 } 63 }
63 let listData = data.data as commentListModel 64 let listData = data.data as commentListModel
64 65
65 - success(listData) 66 + this.fetchCommentStatusAndConfigAuthIcon(listData).then((commentListModel) =>{
  67 + console.log(TAG, 'fetchCommentStatusAndConfigAuthIcon完成')
  68 + success(commentListModel)
  69 + })
  70 +
  71 + // return this.fetchCommentStatusAndConfigAuthIcon(listData)
  72 +
  73 + // this.fetchCommentStatusAndConfigAuthIcon(listData)
  74 + // success(listData)
66 }, (error: Error) => { 75 }, (error: Error) => {
67 fail(error.message) 76 fail(error.message)
68 Logger.debug(TAG, error.toString()) 77 Logger.debug(TAG, error.toString())
@@ -70,35 +79,192 @@ class CommentViewModel { @@ -70,35 +79,192 @@ class CommentViewModel {
70 }) 79 })
71 } 80 }
72 81
  82 + /*多接口批查*/
  83 + fetchCommentStatusAndConfigAuthIcon(model: commentListModel): Promise<commentListModel> {
  84 +
  85 + let commentIDs: string[] = [];
  86 +
  87 + let fromUserIDs: string[] = [];
  88 +
  89 + let creatorIDs: string[] = [];
  90 +
  91 + //主评论
  92 + for (const element of model.list) {
  93 + if ((element.id + '').length > 0) {
  94 + commentIDs.push(element.id + '')
  95 + }
  96 + if ((element.fromUserId + '').length > 0) {
  97 + fromUserIDs.push(element.fromUserId)
  98 + }
  99 + if ((element.fromCreatorId + '').length > 0) {
  100 + creatorIDs.push(element.fromCreatorId)
  101 + }
  102 +
  103 +
  104 + //子评论
  105 + if (element.childComments) {
  106 + for (const obj2 of element.childComments) {
  107 + if ((obj2.id + '').length > 0) {
  108 + commentIDs.push(obj2.id + '')
  109 + }
  110 + if ((obj2.fromUserId + '').length > 0) {
  111 + fromUserIDs.push(obj2.fromUserId)
  112 + }
  113 + if ((obj2.fromCreatorId + '').length > 0) {
  114 + creatorIDs.push(obj2.fromCreatorId)
  115 + }
  116 + }
  117 + }
  118 + }
73 119
74 - // BaseGetRequest(contentID:number,contentType:string,pageNum:string){  
75 - // let url = HttpUrlUtils.getMyCollectionListDataUrl()+ `?type=${type}&operateTag=${1}&pageSize=${10}&pageNum=${pageNum}`  
76 - // if (tagId.length > 0) {  
77 - // url = url + `&tagId=${tagId}`  
78 - // }  
79 - // let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders()  
80 - // return WDHttp.get<ResponseDTO<commentListModel>>(url, headers)  
81 - // }  
82 - //  
83 - //  
84 - // fetchCommentList(contentID:number,contentType:string,pageNum:string):Promise<commentListModel>{  
85 - // return new Promise<commentListModel>((success,error) => {  
86 - // this.BaseGetRequest(contentID,contentType,pageNum).then((navResDTO: ResponseDTO<commentListModel>) => {  
87 - // if (!navResDTO || navResDTO.code != 0) {  
88 - // // success(this.getAppointmentListDataLocal(context))  
89 - // return  
90 - // }  
91 - // Logger.info(TAG, "getAppointmentList then,AppointmentResDTO.timeStamp:" + navResDTO.timestamp);  
92 - // let listData = navResDTO.data as commentListModel  
93 - // success(listData)  
94 - // }).catch((err: Error) => {  
95 - // Logger.error(TAG, `fetchAppointmentListDataApi catch, error.name : ${err.name}, error.message:${err.message}`);  
96 - // error("page data invalid");  
97 - // })  
98 - // })  
99 - // }  
100 120
  121 + let promiseArray: Promise<commentStatusListModel | void>[] = [];
101 122
  123 + //TODO 未登录不用批查
  124 + if (commentIDs.length > 0) {
  125 + let promise1 = new Promise<void>((success) => {
  126 + // HttpRequest HttpBizUtil
  127 + let url = HttpUrlUtils.getBatchCommentStatusUrl();
  128 + let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
  129 + let bean: Record<string, string[]> = {};
  130 + bean['commentIdList'] = commentIDs;
  131 + HttpRequest.post<ResponseDTO<commentStatusModel[]>>(url, bean, headers).then((data: ResponseDTO<commentStatusModel[]>) => {
  132 + if (!data || !data.data) {
  133 + success()
  134 + return
  135 + }
  136 + if (data.code != 0) {
  137 + success()
  138 + return
  139 + }
  140 + if (data.data.length == 0) {
  141 + success()
  142 + return
  143 + }
  144 + let listData = data.data as commentStatusModel[]
  145 +
  146 + for (const element of listData) {
  147 + for (const commentModel of model.list) {
  148 + if (element.commentId == commentModel.id) {
  149 + commentModel.api_status = element.status
  150 + }
  151 + if (commentModel.childComments) {
  152 + for (const childCommentModel of commentModel.childComments) {
  153 + if (element.commentId == childCommentModel.id) {
  154 + childCommentModel.api_status = element.status
  155 + }
  156 + }
  157 + }
  158 + }
  159 + }
  160 + success()
  161 + }, (error: Error) => {
  162 + success()
  163 + Logger.debug(TAG, error.toString())
  164 + })
  165 + })
  166 + promiseArray.push(promise1);
  167 + }
  168 +
  169 + if (fromUserIDs.length > 0) {
  170 + let promise2 = new Promise<void>((success) => {
  171 + let url = HttpUrlUtils.getBatchUserUrl();
  172 + let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
  173 + // HttpRequest HttpBizUtil
  174 + HttpRequest.post<ResponseDTO<commentStatusModel[]>>(url, fromUserIDs, headers).then((data: ResponseDTO<commentStatusModel[]>) => {
  175 + if (!data || !data.data) {
  176 + success()
  177 + return
  178 + }
  179 + if (data.code != 0) {
  180 + success()
  181 + return
  182 + }
  183 + if (data.data.length == 0) {
  184 + success()
  185 + return
  186 + }
  187 + let listData = data.data as commentStatusModel[]
  188 +
  189 + for (const element of listData) {
  190 + for (const commentModel of model.list) {
  191 + if (element.userId == commentModel.fromUserId) {
  192 + commentModel.api_levelHead = element.levelHead
  193 + }
  194 + if (commentModel.childComments) {
  195 + for (const childCommentModel of commentModel.childComments) {
  196 + if (element.userId == childCommentModel.fromUserId) {
  197 + childCommentModel.api_levelHead = element.levelHead
  198 + }
  199 + }
  200 + }
  201 + }
  202 + }
  203 + success()
  204 + }, (error: Error) => {
  205 + success()
  206 + Logger.debug(TAG, error.toString())
  207 + })
  208 + })
  209 + promiseArray.push(promise2);
  210 + }
  211 +
  212 + //TODO 一次20个上限
  213 + if (creatorIDs.length > 0) {
  214 + let promise3 = new Promise<void>((success) => {
  215 + let url = HttpUrlUtils.getDetailListUrl();
  216 + let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
  217 + let bean: Record<string, string[]> = {};
  218 + bean['creatorIdList'] = creatorIDs;
  219 + // HttpRequest HttpBizUtil
  220 + HttpRequest.post<ResponseDTO<commentStatusModel[]>>(url, bean, headers).then((data: ResponseDTO<commentStatusModel[]>) => {
  221 + if (!data || !data.data) {
  222 + success()
  223 + return
  224 + }
  225 + if (data.code != 0) {
  226 + success()
  227 + return
  228 + }
  229 + if (data.data.length == 0) {
  230 + success()
  231 + return
  232 + }
  233 + let listData = data.data as commentStatusModel[]
  234 +
  235 + for (const element of listData) {
  236 + for (const commentModel of model.list) {
  237 + if (element.creatorId == commentModel.fromCreatorId) {
  238 + commentModel.api_authIcon = element.authIcon
  239 + }
  240 + if (commentModel.childComments) {
  241 + for (const childCommentModel of commentModel.childComments) {
  242 + if (element.creatorId == childCommentModel.fromCreatorId) {
  243 + childCommentModel.api_authIcon = element.authIcon
  244 + }
  245 + }
  246 + }
  247 + }
  248 + }
  249 + success()
  250 + }, (error: Error) => {
  251 + success()
  252 + Logger.debug(TAG, error.toString())
  253 + })
  254 + })
  255 + promiseArray.push(promise3);
  256 + }
  257 +
  258 + return new Promise<commentListModel>((success) => {
  259 + Promise.all(promiseArray).then(() => {
  260 + console.log(TAG, 'Promise.all');
  261 + success(model)
  262 + })
  263 +
  264 + })
  265 +
  266 +
  267 + }
102 } 268 }
103 269
104 270
  1 +import { QualityCommentsComponent } from '../comment/view/QualityCommentsComponent';
  2 +
  3 +@Entry
  4 +@Component
  5 +struct QualityCommentsPage {
  6 + build() {
  7 + Column(){
  8 + QualityCommentsComponent();
  9 + }
  10 +
  11 + }
  12 +}
@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 "pages/MineHomePage", 6 "pages/MineHomePage",
7 "components/page/SettingPage", 7 "components/page/SettingPage",
8 "components/page/SettingAboutPage", 8 "components/page/SettingAboutPage",
  9 + "components/page/QualityCommentsPage",
9 "components/page/PrivacySettingPage", 10 "components/page/PrivacySettingPage",
10 "components/page/EditUserInfoPage", 11 "components/page/EditUserInfoPage",
11 "components/page/EditUserNikeNamePage", 12 "components/page/EditUserNikeNamePage",
@@ -502,6 +502,406 @@ @@ -502,6 +502,406 @@
502 "topicType": null, 502 "topicType": null,
503 "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2", 503 "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
504 "visitorComment": 1 504 "visitorComment": 1
  505 + }, {
  506 + "authorLike": 0,
  507 + "avatarFrame": "",
  508 + "checkStatus": 2,
  509 + "commentContent": "外婆企图",
  510 + "commentContentSensitive": "",
  511 + "commentLevel": 1,
  512 + "commentPics": "",
  513 + "commentSensitive": "",
  514 + "commentType": "2",
  515 + "contentAuthor": 0,
  516 + "createTime": "2024-04-01 14:22:37",
  517 + "creatorFlag": 0,
  518 + "fromCreatorId": "",
  519 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  520 + "fromUserId": "574444396143685",
  521 + "fromUserName": "人民日报网友2Ai3yZ",
  522 + "fromUserType": 1,
  523 + "h5Url": "",
  524 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  525 + "highQualityTime": "2024-04-12T18:26:05+0800",
  526 + "id": 56792966,
  527 + "likeNum": 0,
  528 + "mySelf": 0,
  529 + "pageId": null,
  530 + "parentId": -1,
  531 + "region": "安徽",
  532 + "replyNum": 0,
  533 + "rootCommentId": 56792966,
  534 + "sensitiveExist": 0,
  535 + "sensitiveShow": 1,
  536 + "shareInfo": {
  537 + "shareCoverUrl": "",
  538 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  539 + "shareTitle": "学会这三种说话方式,受益无穷",
  540 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  541 + },
  542 + "targetId": "30044115488",
  543 + "targetRelId": "500005262017",
  544 + "targetRelObjectId": "2003",
  545 + "targetRelType": 1,
  546 + "targetStatus": 0,
  547 + "targetTitle": "学会这三种说话方式,受益无穷",
  548 + "targetType": 13,
  549 + "toUserContentAuthor": 0,
  550 + "toUserName": "",
  551 + "topFlag": 0,
  552 + "topicType": null,
  553 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  554 + "visitorComment": 1
  555 + }, {
  556 + "authorLike": 0,
  557 + "avatarFrame": "",
  558 + "checkStatus": 2,
  559 + "commentContent": "外婆企图",
  560 + "commentContentSensitive": "",
  561 + "commentLevel": 1,
  562 + "commentPics": "",
  563 + "commentSensitive": "",
  564 + "commentType": "2",
  565 + "contentAuthor": 0,
  566 + "createTime": "2024-04-01 14:22:37",
  567 + "creatorFlag": 0,
  568 + "fromCreatorId": "",
  569 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  570 + "fromUserId": "574444396143685",
  571 + "fromUserName": "人民日报网友2Ai3yZ",
  572 + "fromUserType": 1,
  573 + "h5Url": "",
  574 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  575 + "highQualityTime": "2024-04-12T18:26:05+0800",
  576 + "id": 56792966,
  577 + "likeNum": 0,
  578 + "mySelf": 0,
  579 + "pageId": null,
  580 + "parentId": -1,
  581 + "region": "安徽",
  582 + "replyNum": 0,
  583 + "rootCommentId": 56792966,
  584 + "sensitiveExist": 0,
  585 + "sensitiveShow": 1,
  586 + "shareInfo": {
  587 + "shareCoverUrl": "",
  588 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  589 + "shareTitle": "学会这三种说话方式,受益无穷",
  590 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  591 + },
  592 + "targetId": "30044115488",
  593 + "targetRelId": "500005262017",
  594 + "targetRelObjectId": "2003",
  595 + "targetRelType": 1,
  596 + "targetStatus": 0,
  597 + "targetTitle": "学会这三种说话方式,受益无穷",
  598 + "targetType": 13,
  599 + "toUserContentAuthor": 0,
  600 + "toUserName": "",
  601 + "topFlag": 0,
  602 + "topicType": null,
  603 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  604 + "visitorComment": 1
  605 + }, {
  606 + "authorLike": 0,
  607 + "avatarFrame": "",
  608 + "checkStatus": 2,
  609 + "commentContent": "外婆企图",
  610 + "commentContentSensitive": "",
  611 + "commentLevel": 1,
  612 + "commentPics": "",
  613 + "commentSensitive": "",
  614 + "commentType": "2",
  615 + "contentAuthor": 0,
  616 + "createTime": "2024-04-01 14:22:37",
  617 + "creatorFlag": 0,
  618 + "fromCreatorId": "",
  619 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  620 + "fromUserId": "574444396143685",
  621 + "fromUserName": "人民日报网友2Ai3yZ",
  622 + "fromUserType": 1,
  623 + "h5Url": "",
  624 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  625 + "highQualityTime": "2024-04-12T18:26:05+0800",
  626 + "id": 56792966,
  627 + "likeNum": 0,
  628 + "mySelf": 0,
  629 + "pageId": null,
  630 + "parentId": -1,
  631 + "region": "安徽",
  632 + "replyNum": 0,
  633 + "rootCommentId": 56792966,
  634 + "sensitiveExist": 0,
  635 + "sensitiveShow": 1,
  636 + "shareInfo": {
  637 + "shareCoverUrl": "",
  638 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  639 + "shareTitle": "学会这三种说话方式,受益无穷",
  640 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  641 + },
  642 + "targetId": "30044115488",
  643 + "targetRelId": "500005262017",
  644 + "targetRelObjectId": "2003",
  645 + "targetRelType": 1,
  646 + "targetStatus": 0,
  647 + "targetTitle": "学会这三种说话方式,受益无穷",
  648 + "targetType": 13,
  649 + "toUserContentAuthor": 0,
  650 + "toUserName": "",
  651 + "topFlag": 0,
  652 + "topicType": null,
  653 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  654 + "visitorComment": 1
  655 + }, {
  656 + "authorLike": 0,
  657 + "avatarFrame": "",
  658 + "checkStatus": 2,
  659 + "commentContent": "外婆企图",
  660 + "commentContentSensitive": "",
  661 + "commentLevel": 1,
  662 + "commentPics": "",
  663 + "commentSensitive": "",
  664 + "commentType": "2",
  665 + "contentAuthor": 0,
  666 + "createTime": "2024-04-01 14:22:37",
  667 + "creatorFlag": 0,
  668 + "fromCreatorId": "",
  669 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  670 + "fromUserId": "574444396143685",
  671 + "fromUserName": "人民日报网友2Ai3yZ",
  672 + "fromUserType": 1,
  673 + "h5Url": "",
  674 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  675 + "highQualityTime": "2024-04-12T18:26:05+0800",
  676 + "id": 56792966,
  677 + "likeNum": 0,
  678 + "mySelf": 0,
  679 + "pageId": null,
  680 + "parentId": -1,
  681 + "region": "安徽",
  682 + "replyNum": 0,
  683 + "rootCommentId": 56792966,
  684 + "sensitiveExist": 0,
  685 + "sensitiveShow": 1,
  686 + "shareInfo": {
  687 + "shareCoverUrl": "",
  688 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  689 + "shareTitle": "学会这三种说话方式,受益无穷",
  690 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  691 + },
  692 + "targetId": "30044115488",
  693 + "targetRelId": "500005262017",
  694 + "targetRelObjectId": "2003",
  695 + "targetRelType": 1,
  696 + "targetStatus": 0,
  697 + "targetTitle": "学会这三种说话方式,受益无穷",
  698 + "targetType": 13,
  699 + "toUserContentAuthor": 0,
  700 + "toUserName": "",
  701 + "topFlag": 0,
  702 + "topicType": null,
  703 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  704 + "visitorComment": 1
  705 + }, {
  706 + "authorLike": 0,
  707 + "avatarFrame": "",
  708 + "checkStatus": 2,
  709 + "commentContent": "外婆企图",
  710 + "commentContentSensitive": "",
  711 + "commentLevel": 1,
  712 + "commentPics": "",
  713 + "commentSensitive": "",
  714 + "commentType": "2",
  715 + "contentAuthor": 0,
  716 + "createTime": "2024-04-01 14:22:37",
  717 + "creatorFlag": 0,
  718 + "fromCreatorId": "",
  719 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  720 + "fromUserId": "574444396143685",
  721 + "fromUserName": "人民日报网友2Ai3yZ",
  722 + "fromUserType": 1,
  723 + "h5Url": "",
  724 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  725 + "highQualityTime": "2024-04-12T18:26:05+0800",
  726 + "id": 56792966,
  727 + "likeNum": 0,
  728 + "mySelf": 0,
  729 + "pageId": null,
  730 + "parentId": -1,
  731 + "region": "安徽",
  732 + "replyNum": 0,
  733 + "rootCommentId": 56792966,
  734 + "sensitiveExist": 0,
  735 + "sensitiveShow": 1,
  736 + "shareInfo": {
  737 + "shareCoverUrl": "",
  738 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  739 + "shareTitle": "学会这三种说话方式,受益无穷",
  740 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  741 + },
  742 + "targetId": "30044115488",
  743 + "targetRelId": "500005262017",
  744 + "targetRelObjectId": "2003",
  745 + "targetRelType": 1,
  746 + "targetStatus": 0,
  747 + "targetTitle": "学会这三种说话方式,受益无穷",
  748 + "targetType": 13,
  749 + "toUserContentAuthor": 0,
  750 + "toUserName": "",
  751 + "topFlag": 0,
  752 + "topicType": null,
  753 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  754 + "visitorComment": 1
  755 + }, {
  756 + "authorLike": 0,
  757 + "avatarFrame": "",
  758 + "checkStatus": 2,
  759 + "commentContent": "外婆企图",
  760 + "commentContentSensitive": "",
  761 + "commentLevel": 1,
  762 + "commentPics": "",
  763 + "commentSensitive": "",
  764 + "commentType": "2",
  765 + "contentAuthor": 0,
  766 + "createTime": "2024-04-01 14:22:37",
  767 + "creatorFlag": 0,
  768 + "fromCreatorId": "",
  769 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  770 + "fromUserId": "574444396143685",
  771 + "fromUserName": "人民日报网友2Ai3yZ",
  772 + "fromUserType": 1,
  773 + "h5Url": "",
  774 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  775 + "highQualityTime": "2024-04-12T18:26:05+0800",
  776 + "id": 56792966,
  777 + "likeNum": 0,
  778 + "mySelf": 0,
  779 + "pageId": null,
  780 + "parentId": -1,
  781 + "region": "安徽",
  782 + "replyNum": 0,
  783 + "rootCommentId": 56792966,
  784 + "sensitiveExist": 0,
  785 + "sensitiveShow": 1,
  786 + "shareInfo": {
  787 + "shareCoverUrl": "",
  788 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  789 + "shareTitle": "学会这三种说话方式,受益无穷",
  790 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  791 + },
  792 + "targetId": "30044115488",
  793 + "targetRelId": "500005262017",
  794 + "targetRelObjectId": "2003",
  795 + "targetRelType": 1,
  796 + "targetStatus": 0,
  797 + "targetTitle": "学会这三种说话方式,受益无穷",
  798 + "targetType": 13,
  799 + "toUserContentAuthor": 0,
  800 + "toUserName": "",
  801 + "topFlag": 0,
  802 + "topicType": null,
  803 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  804 + "visitorComment": 1
  805 + }, {
  806 + "authorLike": 0,
  807 + "avatarFrame": "",
  808 + "checkStatus": 2,
  809 + "commentContent": "外婆企图",
  810 + "commentContentSensitive": "",
  811 + "commentLevel": 1,
  812 + "commentPics": "",
  813 + "commentSensitive": "",
  814 + "commentType": "2",
  815 + "contentAuthor": 0,
  816 + "createTime": "2024-04-01 14:22:37",
  817 + "creatorFlag": 0,
  818 + "fromCreatorId": "",
  819 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  820 + "fromUserId": "574444396143685",
  821 + "fromUserName": "人民日报网友2Ai3yZ",
  822 + "fromUserType": 1,
  823 + "h5Url": "",
  824 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  825 + "highQualityTime": "2024-04-12T18:26:05+0800",
  826 + "id": 56792966,
  827 + "likeNum": 0,
  828 + "mySelf": 0,
  829 + "pageId": null,
  830 + "parentId": -1,
  831 + "region": "安徽",
  832 + "replyNum": 0,
  833 + "rootCommentId": 56792966,
  834 + "sensitiveExist": 0,
  835 + "sensitiveShow": 1,
  836 + "shareInfo": {
  837 + "shareCoverUrl": "",
  838 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  839 + "shareTitle": "学会这三种说话方式,受益无穷",
  840 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  841 + },
  842 + "targetId": "30044115488",
  843 + "targetRelId": "500005262017",
  844 + "targetRelObjectId": "2003",
  845 + "targetRelType": 1,
  846 + "targetStatus": 0,
  847 + "targetTitle": "学会这三种说话方式,受益无穷",
  848 + "targetType": 13,
  849 + "toUserContentAuthor": 0,
  850 + "toUserName": "",
  851 + "topFlag": 0,
  852 + "topicType": null,
  853 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  854 + "visitorComment": 1
  855 + }, {
  856 + "authorLike": 0,
  857 + "avatarFrame": "",
  858 + "checkStatus": 2,
  859 + "commentContent": "外婆企图",
  860 + "commentContentSensitive": "",
  861 + "commentLevel": 1,
  862 + "commentPics": "",
  863 + "commentSensitive": "",
  864 + "commentType": "2",
  865 + "contentAuthor": 0,
  866 + "createTime": "2024-04-01 14:22:37",
  867 + "creatorFlag": 0,
  868 + "fromCreatorId": "",
  869 + "fromUserHeader": "https://cdnjdphoto.aikan.pdnews.cn//zhbj/img/user/2024040114/133af3190cd84eb7a5e70c4c23071881.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg",
  870 + "fromUserId": "574444396143685",
  871 + "fromUserName": "人民日报网友2Ai3yZ",
  872 + "fromUserType": 1,
  873 + "h5Url": "",
  874 + "highQualityExpireTime": "2024-04-15T18:26:05+0800",
  875 + "highQualityTime": "2024-04-12T18:26:05+0800",
  876 + "id": 56792966,
  877 + "likeNum": 0,
  878 + "mySelf": 0,
  879 + "pageId": null,
  880 + "parentId": -1,
  881 + "region": "安徽",
  882 + "replyNum": 0,
  883 + "rootCommentId": 56792966,
  884 + "sensitiveExist": 0,
  885 + "sensitiveShow": 1,
  886 + "shareInfo": {
  887 + "shareCoverUrl": "",
  888 + "shareSummary": "说话的艺术,说到底就是生活的艺术。",
  889 + "shareTitle": "学会这三种说话方式,受益无穷",
  890 + "shareUrl": "https://people.pdnews.cn/column/30044115488-500005262017"
  891 + },
  892 + "targetId": "30044115488",
  893 + "targetRelId": "500005262017",
  894 + "targetRelObjectId": "2003",
  895 + "targetRelType": 1,
  896 + "targetStatus": 0,
  897 + "targetTitle": "学会这三种说话方式,受益无穷",
  898 + "targetType": 13,
  899 + "toUserContentAuthor": 0,
  900 + "toUserName": "",
  901 + "topFlag": 0,
  902 + "topicType": null,
  903 + "uuid": "dcc25c99-8e27-42fc-aa29-861beec958f2",
  904 + "visitorComment": 1
505 }], 905 }],
506 "pageNum": 1, 906 "pageNum": 1,
507 "pageSize": 10, 907 "pageSize": 10,