yanlu

Merge commit '39eb8e24'

Showing 56 changed files with 1023 additions and 552 deletions
@@ -61,3 +61,5 @@ export { MpaasUtils } from './src/main/ets/mpaas/MpaasUtils' @@ -61,3 +61,5 @@ export { MpaasUtils } from './src/main/ets/mpaas/MpaasUtils'
61 export { MpaasUpgradeCheck, UpgradeTipContent } from './src/main/ets/mpaas/MpaasUpgradeCheck' 61 export { MpaasUpgradeCheck, UpgradeTipContent } from './src/main/ets/mpaas/MpaasUpgradeCheck'
62 62
63 export { TingyunAPM } from './src/main/ets/tingyunAPM/TingyunAPM' 63 export { TingyunAPM } from './src/main/ets/tingyunAPM/TingyunAPM'
  64 +
  65 +export { FastClickUtil } from './src/main/ets/utils/FastClickUtil';
  1 +import systemDateTime from '@ohos.systemDateTime';
  2 +
  3 +/**
  4 + * 屏蔽快速点击事件,规定时间内只触发一次
  5 + */
  6 +export class FastClickUtil {
  7 +
  8 + static MIN_DELAY_TIME = 500
  9 +
  10 + static minDelayBeforeTime = 0
  11 +
  12 + static async isMinDelayTime(): Promise<boolean> {
  13 + let systime = await systemDateTime.getCurrentTime();
  14 + return new Promise<boolean>((success, error) => {
  15 + let rtnvalue = systime - FastClickUtil.minDelayBeforeTime <= FastClickUtil.MIN_DELAY_TIME;
  16 + this.minDelayBeforeTime = systime;
  17 + success(rtnvalue);
  18 + })
  19 + }
  20 +}
  21 +
@@ -108,7 +108,11 @@ export class ProcessUtils { @@ -108,7 +108,11 @@ export class ProcessUtils {
108 break; 108 break;
109 case ContentConstants.TYPE_TELETEXT: 109 case ContentConstants.TYPE_TELETEXT:
110 // 图文详情,跳转h5 110 // 图文详情,跳转h5
  111 + if(content?.linkUrl){ //有 linkUrl 走专题页展示逻辑
  112 + ProcessUtils.gotoSpecialTopic(content)
  113 + }else{
111 ProcessUtils.gotoWeb(content); 114 ProcessUtils.gotoWeb(content);
  115 + }
112 break; 116 break;
113 case ContentConstants.TYPE_LINK: 117 case ContentConstants.TYPE_LINK:
114 ProcessUtils.gotoDefaultWeb(content); 118 ProcessUtils.gotoDefaultWeb(content);
@@ -452,7 +456,15 @@ export class ProcessUtils { @@ -452,7 +456,15 @@ export class ProcessUtils {
452 pageID: 'FeedBackActivity' 456 pageID: 'FeedBackActivity'
453 } as Params, 457 } as Params,
454 }; 458 };
  459 +
455 WDRouterRule.jumpWithAction(taskAction) 460 WDRouterRule.jumpWithAction(taskAction)
456 } 461 }
457 462
  463 + /**
  464 + * 跳转到登录页
  465 + */
  466 + public static gotoLoginPage() {
  467 +
  468 + WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
  469 + }
458 } 470 }
@@ -39,14 +39,14 @@ class AppLoginAuthInfo { @@ -39,14 +39,14 @@ class AppLoginAuthInfo {
39 } 39 }
40 40
41 interface IDataJson { 41 interface IDataJson {
42 - jumpType:number  
43 - jumpUrl:string  
44 - newsId:string  
45 - newsObjectLevel:string  
46 - newsObjectType:number  
47 - newsRelId:string  
48 - newsTitle:string  
49 - pageId:string 42 + jumpType: number
  43 + jumpUrl: string
  44 + newsId: string
  45 + newsObjectLevel: string
  46 + newsObjectType: number
  47 + newsRelId: string
  48 + newsTitle: string
  49 + pageId: string
50 } 50 }
51 51
52 /** 52 /**
@@ -209,6 +209,11 @@ function handleJsCallAppInnerLinkMethod(data: Message) { @@ -209,6 +209,11 @@ function handleJsCallAppInnerLinkMethod(data: Message) {
209 let creatorId = urlParams.get('creatorId') || '' 209 let creatorId = urlParams.get('creatorId') || ''
210 ProcessUtils.gotoPeopleShipHomePage(creatorId) 210 ProcessUtils.gotoPeopleShipHomePage(creatorId)
211 break; 211 break;
  212 + case 'app':
  213 + if (urlParams.get('subType') === 'login') {
  214 + ProcessUtils.gotoLoginPage()
  215 + }
  216 + break;
212 default: 217 default:
213 break; 218 break;
214 } 219 }
1 import { Message } from 'wdJsBridge/src/main/ets/bean/Message'; 1 import { Message } from 'wdJsBridge/src/main/ets/bean/Message';
2 -import { H5ReceiveDataJsonBean, postBatchAttentionStatusResult } from 'wdBean';  
3 -import { ResponseDTO, WDHttp, HttpUrlUtils } from 'wdNetwork'; 2 +import { WDHttp, HttpUrlUtils } from 'wdNetwork';
4 3
5 const TAG = 'JsCallAppService' 4 const TAG = 'JsCallAppService'
6 5
7 6
8 export function handleJsCallAppService(data: Message, callback: (res: string) => void) { 7 export function handleJsCallAppService(data: Message, callback: (res: string) => void) {
9 - let url: string = HttpUrlUtils.getHost() + data?.data?.url  
10 -  
11 - let responseMap: ResponseDTO<postBatchAttentionStatusResult> = {} as ResponseDTO<postBatchAttentionStatusResult> 8 + if (data?.data?.method === 'get') {
  9 + let queryString: string = ''
  10 + let parameters = data?.data?.parameters
  11 + if (parameters) {
  12 + queryString = Object.keys(parameters)
  13 + .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(parameters?.[key])}`)
  14 + .join('&');
  15 + }
12 16
13 - let h5ReceiveDataJson: H5ReceiveDataJsonBean<ResponseDTO<postBatchAttentionStatusResult>> = { 17 + let url: string = HttpUrlUtils.getHost() + data?.data?.url
  18 + if (queryString) {
  19 + url = url + `?${queryString}`
  20 + }
  21 + console.log('yzl', queryString, url)
  22 + WDHttp.get(url).then((res) => {
  23 + callback(JSON.stringify({
14 netError: '0', 24 netError: '0',
15 - responseMap  
16 - } as H5ReceiveDataJsonBean<ResponseDTO<postBatchAttentionStatusResult>> 25 + responseMap: res
  26 + }))
  27 + })
  28 + }
  29 + if (data?.data?.method === 'post') {
  30 + let url: string = HttpUrlUtils.getHost() + data?.data?.url
17 31
18 - // if (data?.data?.method === 'get') {  
19 - // WDHttp.get<ResponseDTO<postBatchAttentionStatusResult>>(url, headers).then((res: ResponseDTO<postBatchAttentionStatusResult>) => {  
20 - // callback(JSON.stringify(res))  
21 - // })  
22 - // }  
23 - if (data?.data?.method === 'post' && data?.data?.url === '/api/rmrb-interact/interact/zh/c/batchAttention/status') {  
24 - WDHttp.post<ResponseDTO<postBatchAttentionStatusResult>>(url, data?.data?.parameters).then((res: ResponseDTO<postBatchAttentionStatusResult>) => {  
25 - h5ReceiveDataJson.responseMap = res  
26 - callback(JSON.stringify(h5ReceiveDataJson)) 32 + WDHttp.post(url, data?.data?.parameters).then((res) => {
  33 + callback(JSON.stringify({
  34 + netError: '0',
  35 + responseMap: res
  36 + }))
27 }) 37 })
28 } 38 }
29 } 39 }
@@ -84,7 +84,7 @@ export class ContentDTO implements BaseDTO { @@ -84,7 +84,7 @@ export class ContentDTO implements BaseDTO {
84 openType: string = ''; 84 openType: string = '';
85 extra: string = '' 85 extra: string = ''
86 86
87 - static clone(old:ContentDTO): ContentDTO { 87 + static clone(old: ContentDTO): ContentDTO {
88 let content = new ContentDTO(); 88 let content = new ContentDTO();
89 content.appStyle = old.appStyle; 89 content.appStyle = old.appStyle;
90 content.cityCode = old.cityCode; 90 content.cityCode = old.cityCode;
1 export interface commentInfo { 1 export interface commentInfo {
2 commentTitle: string, 2 commentTitle: string,
3 newsTitle: string, 3 newsTitle: string,
4 - userName: string,  
5 - userHeaderUrl: string, 4 + userId?: string,
  5 + userName?: string,
  6 + userHeaderUrl?: string,
6 publishTime: number, 7 publishTime: number,
7 commentId: string, 8 commentId: string,
8 newsId: string, 9 newsId: string,
9 relId: string; 10 relId: string;
10 relType: string; 11 relType: string;
11 - userId: string; 12 + newsType?: string,
  13 + objectType?: string,
12 } 14 }
@@ -67,7 +67,7 @@ export { FirstTabTopSearchComponent } from "./src/main/ets/components/search/Fir @@ -67,7 +67,7 @@ export { FirstTabTopSearchComponent } from "./src/main/ets/components/search/Fir
67 67
68 export { ListHasNoMoreDataUI } from "./src/main/ets/components/reusable/ListHasNoMoreDataUI" 68 export { ListHasNoMoreDataUI } from "./src/main/ets/components/reusable/ListHasNoMoreDataUI"
69 69
70 -export { LottieView } from './src/main/ets/lottie/LottieView' 70 +export { LottieView } from './src/main/ets/components/lottie/LottieView'
71 71
72 export { SpacialTopicPageComponent } from './src/main/ets/components/SpacialTopicPageComponent' 72 export { SpacialTopicPageComponent } from './src/main/ets/components/SpacialTopicPageComponent'
73 73
1 -import { CommonConstants, CompStyle } from 'wdConstant';  
2 -import { ContentDTO } from 'wdBean'; 1 +import { CompStyle } from 'wdConstant';
  2 +import { CompDTO, ContentDTO } from 'wdBean';
3 import { Card2Component } from './cardview/Card2Component'; 3 import { Card2Component } from './cardview/Card2Component';
4 import { Card3Component } from './cardview/Card3Component'; 4 import { Card3Component } from './cardview/Card3Component';
5 import { Card4Component } from './cardview/Card4Component'; 5 import { Card4Component } from './cardview/Card4Component';
@@ -24,13 +24,14 @@ import { Card21Component } from './cardview/Card21Component'; @@ -24,13 +24,14 @@ import { Card21Component } from './cardview/Card21Component';
24 @Component 24 @Component
25 export struct CardParser { 25 export struct CardParser {
26 @State contentDTO: ContentDTO = new ContentDTO(); 26 @State contentDTO: ContentDTO = new ContentDTO();
  27 + @State compDTO: CompDTO = {} as CompDTO
27 28
28 build() { 29 build() {
29 - this.contentBuilder(this.contentDTO); 30 + this.contentBuilder(this.contentDTO, this.compDTO);
30 } 31 }
31 32
32 @Builder 33 @Builder
33 - contentBuilder(contentDTO: ContentDTO) { 34 + contentBuilder(contentDTO: ContentDTO, compDTO: CompDTO) {
34 if (contentDTO.appStyle === CompStyle.Card_02) { 35 if (contentDTO.appStyle === CompStyle.Card_02) {
35 Card2Component({ contentDTO }) 36 Card2Component({ contentDTO })
36 } else if (contentDTO.appStyle === CompStyle.Card_03) { 37 } else if (contentDTO.appStyle === CompStyle.Card_03) {
@@ -38,7 +39,7 @@ export struct CardParser { @@ -38,7 +39,7 @@ export struct CardParser {
38 } else if (contentDTO.appStyle === CompStyle.Card_04) { 39 } else if (contentDTO.appStyle === CompStyle.Card_04) {
39 Card4Component({ contentDTO }) 40 Card4Component({ contentDTO })
40 } else if (contentDTO.appStyle === CompStyle.Card_05) { 41 } else if (contentDTO.appStyle === CompStyle.Card_05) {
41 - Card5Component({ contentDTO }) 42 + Card5Component({ contentDTO, titleShowPolicy: compDTO.titleShowPolicy })
42 } else if (contentDTO.appStyle === CompStyle.Card_06 || contentDTO.appStyle === CompStyle 43 } else if (contentDTO.appStyle === CompStyle.Card_06 || contentDTO.appStyle === CompStyle
43 .Card_13) { 44 .Card_13) {
44 Card6Component({ contentDTO }) 45 Card6Component({ contentDTO })
@@ -64,8 +65,7 @@ export struct CardParser { @@ -64,8 +65,7 @@ export struct CardParser {
64 Card20Component({ contentDTO }) 65 Card20Component({ contentDTO })
65 } else if (contentDTO.appStyle === CompStyle.Card_21) { 66 } else if (contentDTO.appStyle === CompStyle.Card_21) {
66 Card21Component({ contentDTO }) 67 Card21Component({ contentDTO })
67 - }  
68 - else { 68 + } else {
69 // todo:组件未实现 / Component Not Implemented 69 // todo:组件未实现 / Component Not Implemented
70 // Text(contentDTO.appStyle) 70 // Text(contentDTO.appStyle)
71 // .width(CommonConstants.FULL_PARENT) 71 // .width(CommonConstants.FULL_PARENT)
1 -import { SPHelper,Logger,ToastUtils } from 'wdKit';  
2 -import { ContentDetailDTO, Action, ContentDTO,batchLikeAndCollectResult } from 'wdBean'; 1 +import { SPHelper, Logger, ToastUtils } from 'wdKit';
  2 +import { ContentDetailDTO, Action, ContentDTO, batchLikeAndCollectResult } from 'wdBean';
3 import { ProcessUtils } from 'wdRouter'; 3 import { ProcessUtils } from 'wdRouter';
4 import router from '@ohos.router'; 4 import router from '@ohos.router';
5 import { batchLikeAndCollectParams } from 'wdDetailPlayApi/src/main/ets/request/ContentDetailRequest'; 5 import { batchLikeAndCollectParams } from 'wdDetailPlayApi/src/main/ets/request/ContentDetailRequest';
6 import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel'; 6 import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel';
7 import { SpConstants } from 'wdConstant/Index'; 7 import { SpConstants } from 'wdConstant/Index';
8 import { WDShare } from 'wdShare/Index'; 8 import { WDShare } from 'wdShare/Index';
9 -import {LikeComponent} from './view/LikeComponent' 9 +import { LikeComponent } from './view/LikeComponent'
  10 +
10 const TAG = 'CarderInteraction' 11 const TAG = 'CarderInteraction'
  12 +
11 /** 13 /**
12 * 卡片 分享、评论、点赞公用组件 14 * 卡片 分享、评论、点赞公用组件
13 */ 15 */
@@ -15,9 +17,10 @@ const TAG = 'CarderInteraction' @@ -15,9 +17,10 @@ const TAG = 'CarderInteraction'
15 export struct CarderInteraction { 17 export struct CarderInteraction {
16 @Prop contentDTO: ContentDTO 18 @Prop contentDTO: ContentDTO
17 @State contentId: string = '' 19 @State contentId: string = ''
18 - @State contentDetailData: ContentDetailDTO = {} as ContentDetailDTO  
19 - @State newsStatusOfUser: batchLikeAndCollectResult = {} as batchLikeAndCollectResult// 点赞、收藏状态 20 + @Provide contentDetailData: ContentDetailDTO = {} as ContentDetailDTO
  21 + @State newsStatusOfUser: batchLikeAndCollectResult = {} as batchLikeAndCollectResult // 点赞、收藏状态
20 @State likeBean: Record<string, string> = {} 22 @State likeBean: Record<string, string> = {}
  23 +
21 async aboutToAppear() { 24 async aboutToAppear() {
22 await this.getContentDetailData() 25 await this.getContentDetailData()
23 // 点赞需要数据 26 // 点赞需要数据
@@ -28,51 +31,55 @@ export struct CarderInteraction { @@ -28,51 +31,55 @@ export struct CarderInteraction {
28 this.likeBean['userHeaderUrl'] = this.contentDetailData.userInfo?.headPhotoUrl + '' 31 this.likeBean['userHeaderUrl'] = this.contentDetailData.userInfo?.headPhotoUrl + ''
29 this.likeBean['channelId'] = this.contentDetailData.reLInfo?.channelId + '' 32 this.likeBean['channelId'] = this.contentDetailData.reLInfo?.channelId + ''
30 } 33 }
  34 +
31 build() { 35 build() {
32 - Row(){  
33 - Row(){ 36 + Row() {
  37 + Row() {
34 Image($r('app.media.CarderInteraction_share')) 38 Image($r('app.media.CarderInteraction_share'))
35 .width(18) 39 .width(18)
36 .height(18) 40 .height(18)
37 Text('分享') 41 Text('分享')
38 - .margin({left:4}) 42 + .margin({ left: 4 })
39 .fontSize(14) 43 .fontSize(14)
40 .fontColor('#666666') 44 .fontColor('#666666')
41 } 45 }
42 .justifyContent(FlexAlign.Center) 46 .justifyContent(FlexAlign.Center)
43 - .onClick(()=>{ 47 + .onClick(() => {
44 WDShare.shareContent(this.contentDetailData) 48 WDShare.shareContent(this.contentDetailData)
45 }) 49 })
46 - Row(){ 50 +
  51 + Row() {
47 Image($r('app.media.CarderInteraction_comment')) 52 Image($r('app.media.CarderInteraction_comment'))
48 .width(18) 53 .width(18)
49 .height(18) 54 .height(18)
50 Text('评论') 55 Text('评论')
51 - .margin({left:4}) 56 + .margin({ left: 4 })
52 .fontSize(14) 57 .fontSize(14)
53 .fontColor('#666666') 58 .fontColor('#666666')
54 } 59 }
55 .justifyContent(FlexAlign.Center) 60 .justifyContent(FlexAlign.Center)
56 - .onClick(()=>{ 61 + .onClick(() => {
57 ProcessUtils.processPage(this.contentDTO) 62 ProcessUtils.processPage(this.contentDTO)
58 }) 63 })
  64 +
59 this.builderLike() 65 this.builderLike()
60 } 66 }
61 .width('100%') 67 .width('100%')
62 - .margin({top:11}) 68 + .margin({ top: 11 })
63 .padding({ 69 .padding({
64 - left:21,  
65 - right:21 70 + left: 21,
  71 + right: 21
66 }) 72 })
67 .justifyContent(FlexAlign.SpaceBetween) 73 .justifyContent(FlexAlign.SpaceBetween)
68 .alignItems(VerticalAlign.Center) 74 .alignItems(VerticalAlign.Center)
69 } 75 }
  76 +
70 /** 77 /**
71 * 点赞组件 78 * 点赞组件
72 */ 79 */
73 @Builder 80 @Builder
74 builderLike() { 81 builderLike() {
75 - Row(){ 82 + Row() {
76 if (this.likeBean?.contentId) { 83 if (this.likeBean?.contentId) {
77 LikeComponent({ 84 LikeComponent({
78 data: this.likeBean, 85 data: this.likeBean,
@@ -88,13 +95,13 @@ export struct CarderInteraction { @@ -88,13 +95,13 @@ export struct CarderInteraction {
88 * */ 95 * */
89 private async getContentDetailData() { 96 private async getContentDetailData() {
90 try { 97 try {
91 - let data = await MultiPictureDetailViewModel.getDetailData(this.contentDTO.relId, this.contentDTO.objectId, this.contentDTO.relType) 98 + let data = await MultiPictureDetailViewModel.getDetailData(this.contentDTO.relId, this.contentDTO.objectId,
  99 + this.contentDTO.relType)
92 this.contentDetailData = data[0]; 100 this.contentDetailData = data[0];
93 - console.log('动态详情',JSON.stringify(this.contentDetailData)) 101 + console.log('动态详情', JSON.stringify(this.contentDetailData))
94 } catch (exception) { 102 } catch (exception) {
95 - console.log('请求失败',JSON.stringify(exception)) 103 + console.log('请求失败', JSON.stringify(exception))
96 } 104 }
97 } 105 }
98 -  
99 } 106 }
100 107
@@ -32,12 +32,12 @@ import { LiveHorizontalCardComponent } from './view/LiveHorizontalCardComponent' @@ -32,12 +32,12 @@ import { LiveHorizontalCardComponent } from './view/LiveHorizontalCardComponent'
32 @Component 32 @Component
33 export struct CompParser { 33 export struct CompParser {
34 @State compDTO: CompDTO = {} as CompDTO 34 @State compDTO: CompDTO = {} as CompDTO
35 - @State private pageModel: PageModel = new PageModel();  
36 @State compIndex: number = 0; 35 @State compIndex: number = 0;
  36 + @State private pageModel: PageModel = new PageModel();
37 37
38 build() { 38 build() {
39 Column() { 39 Column() {
40 - if (this.compDTO.name !="月度排行卡") { 40 + if (this.compDTO.name != "月度排行卡") {
41 41
42 this.componentBuilder(this.compDTO, this.compIndex); 42 this.componentBuilder(this.compDTO, this.compIndex);
43 } 43 }
@@ -53,7 +53,8 @@ export struct CompParser { @@ -53,7 +53,8 @@ export struct CompParser {
53 } else if (compDTO.compStyle === CompStyle.Zh_Carousel_Layout_01) { 53 } else if (compDTO.compStyle === CompStyle.Zh_Carousel_Layout_01) {
54 ZhCarouselLayout01({ compDTO: compDTO }) 54 ZhCarouselLayout01({ compDTO: compDTO })
55 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 55 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
56 - } else if (compDTO.compStyle === CompStyle.Zh_Single_Row_01 && compDTO.imageScale === 2) {// && compDTO.name ==="横划卡" 56 + } else if (compDTO.compStyle === CompStyle.Zh_Single_Row_01 &&
  57 + compDTO.imageScale === 2) { // && compDTO.name ==="横划卡"
57 58
58 LiveHorizontalCardComponent({ compDTO: compDTO }) 59 LiveHorizontalCardComponent({ compDTO: compDTO })
59 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 60 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
@@ -87,7 +88,7 @@ export struct CompParser { @@ -87,7 +88,7 @@ export struct CompParser {
87 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 88 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
88 } else if (compDTO.compStyle === CompStyle.Zh_Single_Column_02) { 89 } else if (compDTO.compStyle === CompStyle.Zh_Single_Column_02) {
89 //头图卡 和comStyle 2相同, 90 //头图卡 和comStyle 2相同,
90 - Card5Component({ contentDTO: compDTO.operDataList[0] }) 91 + Card5Component({ contentDTO: compDTO.operDataList[0], titleShowPolicy: compDTO.titleShowPolicy })
91 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 92 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
92 } else if (compDTO.compStyle === CompStyle.Zh_Single_Column_03) { 93 } else if (compDTO.compStyle === CompStyle.Zh_Single_Column_03) {
93 // 大图卡 94 // 大图卡
@@ -107,10 +108,9 @@ export struct CompParser { @@ -107,10 +108,9 @@ export struct CompParser {
107 //Text(`compIndex = ${compIndex}`).width('100%').fontSize('12fp').fontColor(Color.Red).padding({ left: 16, right: 16 }) 108 //Text(`compIndex = ${compIndex}`).width('100%').fontSize('12fp').fontColor(Color.Red).padding({ left: 16, right: 16 })
108 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 109 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
109 } else if (!Number.isNaN(Number(compDTO.compStyle))) { 110 } else if (!Number.isNaN(Number(compDTO.compStyle))) {
110 - CardParser({ contentDTO: compDTO.operDataList[0] }); 111 + CardParser({ contentDTO: compDTO.operDataList[0], compDTO });
111 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 112 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
112 - }  
113 - else { 113 + } else {
114 Text(compDTO.compStyle) 114 Text(compDTO.compStyle)
115 .width(CommonConstants.FULL_PARENT) 115 .width(CommonConstants.FULL_PARENT)
116 .padding(10) 116 .padding(10)
1 -import { AccountManagerUtils, Logger, DateTimeUtils, SPHelper, NumberFormatterUtils, DisplayUtils,  
2 - NetworkUtil } from 'wdKit'; 1 +import {
  2 + AccountManagerUtils,
  3 + Logger,
  4 + DateTimeUtils,
  5 + SPHelper,
  6 + NumberFormatterUtils,
  7 + DisplayUtils,
  8 + NetworkUtil,
  9 + FastClickUtil
  10 +} from 'wdKit';
3 import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel'; 11 import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel';
4 -import { ContentDetailDTO,postBatchAttentionStatusParams, 12 +import {
  13 + ContentDetailDTO,
  14 + postBatchAttentionStatusParams,
5 PhotoListBean, 15 PhotoListBean,
6 ContentDTO, 16 ContentDTO,
7 batchLikeAndCollectResult, 17 batchLikeAndCollectResult,
8 RmhInfoDTO, 18 RmhInfoDTO,
9 - InteractDataDTO, } from 'wdBean'; 19 + InteractDataDTO,
  20 +} from 'wdBean';
10 import media from '@ohos.multimedia.media'; 21 import media from '@ohos.multimedia.media';
11 import { OperRowListView } from './view/OperRowListView'; 22 import { OperRowListView } from './view/OperRowListView';
12 import { WDPlayerController } from 'wdPlayer/Index'; 23 import { WDPlayerController } from 'wdPlayer/Index';
@@ -33,6 +44,7 @@ import { detailedSkeleton } from './skeleton/detailSkeleton'; @@ -33,6 +44,7 @@ import { detailedSkeleton } from './skeleton/detailSkeleton';
33 44
34 const TAG = 'DynamicDetailComponent' 45 const TAG = 'DynamicDetailComponent'
35 const PATTERN_DATE_CN_RN: string = 'yyyy年MM月dd日 HH:mm'; 46 const PATTERN_DATE_CN_RN: string = 'yyyy年MM月dd日 HH:mm';
  47 +
36 // @Preview 48 // @Preview
37 @Component 49 @Component
38 export struct DynamicDetailComponent { 50 export struct DynamicDetailComponent {
@@ -40,39 +52,34 @@ export struct DynamicDetailComponent { @@ -40,39 +52,34 @@ export struct DynamicDetailComponent {
40 private relId: string = '' 52 private relId: string = ''
41 private contentId: string = '' 53 private contentId: string = ''
42 private relType: string = '' 54 private relType: string = ''
43 -  
44 //出参 55 //出参
45 - @State contentDetailData: ContentDetailDTO = {} as ContentDetailDTO 56 + @Provide contentDetailData: ContentDetailDTO = {} as ContentDetailDTO
46 //UI 57 //UI
47 scroller: Scroller = new Scroller(); 58 scroller: Scroller = new Scroller();
48 -  
49 //点赞 收藏 评论 数量 59 //点赞 收藏 评论 数量
50 - @State interactDataDTO: InteractDataDTO = {likeNum:0} as InteractDataDTO 60 + @State interactDataDTO: InteractDataDTO = { likeNum: 0 } as InteractDataDTO
51 /** 61 /**
52 * 关注状态:默认未关注 点击去关注 62 * 关注状态:默认未关注 点击去关注
53 */ 63 */
54 @State followStatus: String = ''; 64 @State followStatus: String = '';
55 -  
56 - @State newsStatusOfUser: batchLikeAndCollectResult = {} as batchLikeAndCollectResult// 点赞、收藏状态 65 + @State newsStatusOfUser: batchLikeAndCollectResult = {} as batchLikeAndCollectResult // 点赞、收藏状态
57 //跳转 66 //跳转
58 private mJumpInfo: ContentDTO = new ContentDTO(); 67 private mJumpInfo: ContentDTO = new ContentDTO();
59 -  
60 @State publishTime: string = '' 68 @State publishTime: string = ''
61 @State isNetConnected: boolean = true 69 @State isNetConnected: boolean = true
62 @State isPageEnd: boolean = false 70 @State isPageEnd: boolean = false
63 -  
64 @State publishCommentModel: publishCommentModel = new publishCommentModel() 71 @State publishCommentModel: publishCommentModel = new publishCommentModel()
65 72
66 -  
67 async aboutToAppear() { 73 async aboutToAppear() {
68 await this.getContentDetailData() 74 await this.getContentDetailData()
69 } 75 }
  76 +
70 onPageHide() { 77 onPageHide() {
71 78
72 } 79 }
73 80
74 build() { 81 build() {
75 - Column(){ 82 + Column() {
76 //logo、日期 83 //logo、日期
77 Row() { 84 Row() {
78 Image($r('app.media.ic_article_rmh')) 85 Image($r('app.media.ic_article_rmh'))
@@ -89,12 +96,13 @@ export struct DynamicDetailComponent { @@ -89,12 +96,13 @@ export struct DynamicDetailComponent {
89 .height($r('app.float.margin_48')) 96 .height($r('app.float.margin_48'))
90 .width('100%') 97 .width('100%')
91 .alignItems(VerticalAlign.Bottom) 98 .alignItems(VerticalAlign.Bottom)
92 - .padding({bottom:5}) 99 + .padding({ bottom: 5 })
  100 +
93 //分割线 101 //分割线
94 Image($r('app.media.ic_news_detail_division')) 102 Image($r('app.media.ic_news_detail_division'))
95 .width('100%') 103 .width('100%')
96 .height($r('app.float.margin_7')) 104 .height($r('app.float.margin_7'))
97 - .padding({left: $r('app.float.margin_16'), right: $r('app.float.margin_16')} ) 105 + .padding({ left: $r('app.float.margin_16'), right: $r('app.float.margin_16') })
98 Stack({ alignContent: Alignment.Bottom }) { 106 Stack({ alignContent: Alignment.Bottom }) {
99 if (!this.isNetConnected) { 107 if (!this.isNetConnected) {
100 EmptyComponent({ 108 EmptyComponent({
@@ -107,7 +115,7 @@ export struct DynamicDetailComponent { @@ -107,7 +115,7 @@ export struct DynamicDetailComponent {
107 } else { 115 } else {
108 if (!this.isPageEnd) { 116 if (!this.isPageEnd) {
109 detailedSkeleton() 117 detailedSkeleton()
110 - }else{ 118 + } else {
111 Scroll(this.scroller) { 119 Scroll(this.scroller) {
112 Column() { 120 Column() {
113 //号主信息 121 //号主信息
@@ -115,7 +123,8 @@ export struct DynamicDetailComponent { @@ -115,7 +123,8 @@ export struct DynamicDetailComponent {
115 //头像 123 //头像
116 Stack() { 124 Stack() {
117 Image(this.contentDetailData.rmhInfo?.rmhHeadUrl) 125 Image(this.contentDetailData.rmhInfo?.rmhHeadUrl)
118 - .alt(this.contentDetailData.rmhInfo?.userType=='1'?$r('app.media.default_head'):$r('app.media.icon_default_head_mater')) 126 + .alt(this.contentDetailData.rmhInfo?.userType == '1' ? $r('app.media.default_head') :
  127 + $r('app.media.icon_default_head_mater'))
119 .width($r('app.float.margin_32')) 128 .width($r('app.float.margin_32'))
120 .height($r('app.float.margin_32')) 129 .height($r('app.float.margin_32'))
121 .objectFit(ImageFit.Cover) 130 .objectFit(ImageFit.Cover)
@@ -125,7 +134,7 @@ export struct DynamicDetailComponent { @@ -125,7 +134,7 @@ export struct DynamicDetailComponent {
125 .height($r('app.float.margin_48')) 134 .height($r('app.float.margin_48'))
126 .objectFit(ImageFit.Cover) 135 .objectFit(ImageFit.Cover)
127 .borderRadius($r('app.float.margin_24')) 136 .borderRadius($r('app.float.margin_24'))
128 - if(!StringUtils.isEmpty(this.contentDetailData.rmhInfo?.authIcon)){ 137 + if (!StringUtils.isEmpty(this.contentDetailData.rmhInfo?.authIcon)) {
129 Stack() { 138 Stack() {
130 Image(this.contentDetailData.rmhInfo?.authIcon) 139 Image(this.contentDetailData.rmhInfo?.authIcon)
131 .width($r('app.float.vp_12')) 140 .width($r('app.float.vp_12'))
@@ -140,10 +149,16 @@ export struct DynamicDetailComponent { @@ -140,10 +149,16 @@ export struct DynamicDetailComponent {
140 .width($r('app.float.margin_48')) 149 .width($r('app.float.margin_48'))
141 .height($r('app.float.margin_48')) 150 .height($r('app.float.margin_48'))
142 .alignContent(Alignment.Center) 151 .alignContent(Alignment.Center)
143 - .onClick(() => {  
144 - ProcessUtils.gotoPeopleShipHomePage(this.contentDetailData.rmhInfo == null ?"":this.contentDetailData.rmhInfo.rmhId) 152 + .onClick(async () => {
  153 + let retvalue = await FastClickUtil.isMinDelayTime()
  154 + if(retvalue){
  155 + return
  156 + }
  157 + ProcessUtils.gotoPeopleShipHomePage(this.contentDetailData.rmhInfo == null ? "" :
  158 + this.contentDetailData.rmhInfo.rmhId)
145 }) 159 })
146 - Column(){ 160 +
  161 + Column() {
147 //昵称 162 //昵称
148 Text(this.contentDetailData.rmhInfo?.rmhName) 163 Text(this.contentDetailData.rmhInfo?.rmhName)
149 .fontSize($r('app.float.font_size_14')) 164 .fontSize($r('app.float.font_size_14'))
@@ -162,15 +177,16 @@ export struct DynamicDetailComponent { @@ -162,15 +177,16 @@ export struct DynamicDetailComponent {
162 .alignSelf(ItemAlign.Start) 177 .alignSelf(ItemAlign.Start)
163 } 178 }
164 .width('63%') 179 .width('63%')
165 - .margin({right: $r('app.float.margin_6')})  
166 - if(!StringUtils.isEmpty(this.followStatus)){ 180 + .margin({ right: $r('app.float.margin_6') })
  181 +
  182 + if (!StringUtils.isEmpty(this.followStatus)) {
167 if (this.followStatus == '0') { 183 if (this.followStatus == '0') {
168 Row() { 184 Row() {
169 Blank().layoutWeight(1) 185 Blank().layoutWeight(1)
170 Image($r('app.media.icon_add_attention')) 186 Image($r('app.media.icon_add_attention'))
171 .width($r('app.float.vp_12')) 187 .width($r('app.float.vp_12'))
172 .height($r('app.float.vp_12')) 188 .height($r('app.float.vp_12'))
173 - .margin({right:2}) 189 + .margin({ right: 2 })
174 Text('关注') 190 Text('关注')
175 .textAlign(TextAlign.Center) 191 .textAlign(TextAlign.Center)
176 .fontSize($r('app.float.font_size_12')) 192 .fontSize($r('app.float.font_size_12'))
@@ -181,7 +197,11 @@ export struct DynamicDetailComponent { @@ -181,7 +197,11 @@ export struct DynamicDetailComponent {
181 .height($r('app.float.margin_24')) 197 .height($r('app.float.margin_24'))
182 .borderRadius($r('app.float.vp_3')) 198 .borderRadius($r('app.float.vp_3'))
183 .backgroundColor($r('app.color.color_ED2800')) 199 .backgroundColor($r('app.color.color_ED2800'))
184 - .onClick(() => { 200 + .onClick(async () => {
  201 + let retvalue = await FastClickUtil.isMinDelayTime()
  202 + if(retvalue){
  203 + return
  204 + }
185 this.handleAccention() 205 this.handleAccention()
186 }) 206 })
187 } else { 207 } else {
@@ -195,30 +215,37 @@ export struct DynamicDetailComponent { @@ -195,30 +215,37 @@ export struct DynamicDetailComponent {
195 .borderColor($r('app.color.color_CCCCCC_1A')) 215 .borderColor($r('app.color.color_CCCCCC_1A'))
196 .backgroundColor($r('app.color.color_CCCCCC_1A')) 216 .backgroundColor($r('app.color.color_CCCCCC_1A'))
197 .fontColor($r('app.color.color_CCCCCC')) 217 .fontColor($r('app.color.color_CCCCCC'))
198 - .onClick(() => { 218 + .onClick(async () => {
  219 + let retvalue = await FastClickUtil.isMinDelayTime()
  220 + if(retvalue){
  221 + return
  222 + }
199 this.handleAccention() 223 this.handleAccention()
200 }) 224 })
201 } 225 }
202 } 226 }
203 } 227 }
204 .width('100%') 228 .width('100%')
205 - .margin({ left: $r('app.float.margin_16')}) 229 + .margin({ left: $r('app.float.margin_16') })
  230 +
206 //内容 231 //内容
207 Text(StringUtils.isEmpty(this.contentDetailData.newsContent) 232 Text(StringUtils.isEmpty(this.contentDetailData.newsContent)
208 - ?StringUtils.isEmpty(this.contentDetailData.newsSummary)  
209 - ?this.contentDetailData.newsTitle  
210 - :this.contentDetailData.newsSummary  
211 - :this.contentDetailData.newsContent) 233 + ? StringUtils.isEmpty(this.contentDetailData.newsSummary)
  234 + ? this.contentDetailData.newsTitle
  235 + : this.contentDetailData.newsSummary
  236 + : this.contentDetailData.newsContent)
212 .fontColor($r('app.color.color_222222')) 237 .fontColor($r('app.color.color_222222'))
213 .fontSize($r('app.float.font_size_18')) 238 .fontSize($r('app.float.font_size_18'))
214 .lineHeight($r('app.float.margin_25')) 239 .lineHeight($r('app.float.margin_25'))
215 - .margin({ top: $r('app.float.margin_6')  
216 - ,left: $r('app.float.margin_16')  
217 - ,right: $r('app.float.margin_16') }) 240 + .margin({
  241 + top: $r('app.float.margin_6')
  242 + , left: $r('app.float.margin_16')
  243 + , right: $r('app.float.margin_16')
  244 + })
218 .alignSelf(ItemAlign.Start) 245 .alignSelf(ItemAlign.Start)
219 - if(this.contentDetailData.newsType+"" == ContentConstants.TYPE_FOURTEEN){ 246 + if (this.contentDetailData.newsType + "" == ContentConstants.TYPE_FOURTEEN) {
220 //附件内容:图片/视频 247 //附件内容:图片/视频
221 - if(this.contentDetailData.photoList!= null && this.contentDetailData.photoList.length>0){ 248 + if (this.contentDetailData.photoList != null && this.contentDetailData.photoList.length > 0) {
222 // 图片-从无图到9图展示 249 // 图片-从无图到9图展示
223 GridRow({ 250 GridRow({
224 gutter: { x: 2, y: 2 } 251 gutter: { x: 2, y: 2 }
@@ -228,7 +255,7 @@ export struct DynamicDetailComponent { @@ -228,7 +255,7 @@ export struct DynamicDetailComponent {
228 if (this.getPicType(item) !== 3) { 255 if (this.getPicType(item) !== 3) {
229 GridCol({ 256 GridCol({
230 span: this.getPicType(item) === 1 ? 12 : 8 257 span: this.getPicType(item) === 1 ? 12 : 8
231 - }){ 258 + }) {
232 Stack({ 259 Stack({
233 alignContent: Alignment.BottomEnd 260 alignContent: Alignment.BottomEnd
234 }) { 261 }) {
@@ -249,7 +276,7 @@ export struct DynamicDetailComponent { @@ -249,7 +276,7 @@ export struct DynamicDetailComponent {
249 Image($r('app.media.icon_long_pic')) 276 Image($r('app.media.icon_long_pic'))
250 .width(14) 277 .width(14)
251 .height(14) 278 .height(14)
252 - .margin({right: 4}) 279 + .margin({ right: 4 })
253 Text('长图') 280 Text('长图')
254 .fontSize(12) 281 .fontSize(12)
255 .fontWeight(400) 282 .fontWeight(400)
@@ -257,12 +284,16 @@ export struct DynamicDetailComponent { @@ -257,12 +284,16 @@ export struct DynamicDetailComponent {
257 .fontFamily('PingFang SC') 284 .fontFamily('PingFang SC')
258 } 285 }
259 .width(48) 286 .width(48)
260 - .padding({bottom: 9}) 287 + .padding({ bottom: 9 })
261 288
262 } 289 }
263 } 290 }
264 - .onClick((event: ClickEvent) => {  
265 - ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList,index) 291 + .onClick(async (event: ClickEvent) => {
  292 + let retvalue = await FastClickUtil.isMinDelayTime()
  293 + if(retvalue){
  294 + return
  295 + }
  296 + ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList, index)
266 }) 297 })
267 } else { 298 } else {
268 GridCol({ 299 GridCol({
@@ -278,8 +309,12 @@ export struct DynamicDetailComponent { @@ -278,8 +309,12 @@ export struct DynamicDetailComponent {
278 item.height = callback?.height || 0; 309 item.height = callback?.height || 0;
279 }) 310 })
280 } 311 }
281 - .onClick((event: ClickEvent) => {  
282 - ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList,index) 312 + .onClick(async (event: ClickEvent) => {
  313 + let retvalue = await FastClickUtil.isMinDelayTime()
  314 + if(retvalue){
  315 + return
  316 + }
  317 + ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList, index)
283 }) 318 })
284 } 319 }
285 } else if (this.contentDetailData.photoList.length === 4) { 320 } else if (this.contentDetailData.photoList.length === 4) {
@@ -290,8 +325,12 @@ export struct DynamicDetailComponent { @@ -290,8 +325,12 @@ export struct DynamicDetailComponent {
290 .aspectRatio(1) 325 .aspectRatio(1)
291 .borderRadius(this.caclImageRadius(index)) 326 .borderRadius(this.caclImageRadius(index))
292 } 327 }
293 - .onClick((event: ClickEvent) => {  
294 - ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList,index) 328 + .onClick(async (event: ClickEvent) => {
  329 + let retvalue = await FastClickUtil.isMinDelayTime()
  330 + if(retvalue){
  331 + return
  332 + }
  333 + ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList, index)
295 }) 334 })
296 } else { 335 } else {
297 GridCol({ 336 GridCol({
@@ -301,16 +340,24 @@ export struct DynamicDetailComponent { @@ -301,16 +340,24 @@ export struct DynamicDetailComponent {
301 .aspectRatio(1) 340 .aspectRatio(1)
302 .borderRadius(this.caclImageRadius(index)) 341 .borderRadius(this.caclImageRadius(index))
303 } 342 }
304 - .onClick((event: ClickEvent) => {  
305 - ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList,index) 343 + .onClick(async (event: ClickEvent) => {
  344 + let retvalue = await FastClickUtil.isMinDelayTime()
  345 + if(retvalue){
  346 + return
  347 + }
  348 + ProcessUtils.gotoMultiPictureListPage(this.contentDetailData.photoList, index)
306 }) 349 })
307 } 350 }
308 }) 351 })
309 } 352 }
310 - .margin({ left: $r('app.float.margin_16'),right: $r('app.float.margin_16'),top: $r('app.float.margin_8')}) 353 + .margin({
  354 + left: $r('app.float.margin_16'),
  355 + right: $r('app.float.margin_16'),
  356 + top: $r('app.float.margin_8')
  357 + })
311 } 358 }
312 - }else{  
313 - if(this.contentDetailData.videoInfo!= null && this.contentDetailData.videoInfo.length>0){ 359 + } else {
  360 + if (this.contentDetailData.videoInfo != null && this.contentDetailData.videoInfo.length > 0) {
314 GridRow() { 361 GridRow() {
315 if (this.contentDetailData.videoInfo[0].videoLandScape === 1) { 362 if (this.contentDetailData.videoInfo[0].videoLandScape === 1) {
316 // 横屏 363 // 横屏
@@ -318,11 +365,13 @@ export struct DynamicDetailComponent { @@ -318,11 +365,13 @@ export struct DynamicDetailComponent {
318 span: { xs: 12 } 365 span: { xs: 12 }
319 }) { 366 }) {
320 Stack() { 367 Stack() {
321 - Image(this.contentDetailData.fullColumnImgUrls!= null && this.contentDetailData.fullColumnImgUrls.length>0&&!StringUtils.isEmpty(this.contentDetailData.fullColumnImgUrls[0].url)?  
322 - this.contentDetailData.fullColumnImgUrls[0].url: 368 + Image(this.contentDetailData.fullColumnImgUrls != null &&
  369 + this.contentDetailData.fullColumnImgUrls.length > 0 &&
  370 + !StringUtils.isEmpty(this.contentDetailData.fullColumnImgUrls[0].url) ?
  371 + this.contentDetailData.fullColumnImgUrls[0].url :
323 this.contentDetailData.videoInfo[0].firstFrameImageUri) 372 this.contentDetailData.videoInfo[0].firstFrameImageUri)
324 - .width(DisplayUtils.getDeviceWidth()- 32)  
325 - .height((DisplayUtils.getDeviceWidth()-32)* 9 / 16) 373 + .width(DisplayUtils.getDeviceWidth() - 32)
  374 + .height((DisplayUtils.getDeviceWidth() - 32) * 9 / 16)
326 .borderRadius($r('app.float.image_border_radius')) 375 .borderRadius($r('app.float.image_border_radius'))
327 CardMediaInfo({ contentDTO: this.mJumpInfo }) 376 CardMediaInfo({ contentDTO: this.mJumpInfo })
328 } 377 }
@@ -334,11 +383,13 @@ export struct DynamicDetailComponent { @@ -334,11 +383,13 @@ export struct DynamicDetailComponent {
334 span: { xs: 6 } 383 span: { xs: 6 }
335 }) { 384 }) {
336 Stack() { 385 Stack() {
337 - Image(this.contentDetailData.fullColumnImgUrls!= null && this.contentDetailData.fullColumnImgUrls.length>0&&!StringUtils.isEmpty(this.contentDetailData.fullColumnImgUrls[0].url)?  
338 - this.contentDetailData.fullColumnImgUrls[0].url: 386 + Image(this.contentDetailData.fullColumnImgUrls != null &&
  387 + this.contentDetailData.fullColumnImgUrls.length > 0 &&
  388 + !StringUtils.isEmpty(this.contentDetailData.fullColumnImgUrls[0].url) ?
  389 + this.contentDetailData.fullColumnImgUrls[0].url :
339 this.contentDetailData.videoInfo[0].firstFrameImageUri) 390 this.contentDetailData.videoInfo[0].firstFrameImageUri)
340 - .width(DisplayUtils.getDeviceWidth()/2)  
341 - .height(DisplayUtils.getDeviceWidth()/2* 4 / 3) 391 + .width(DisplayUtils.getDeviceWidth() / 2)
  392 + .height(DisplayUtils.getDeviceWidth() / 2 * 4 / 3)
342 .borderRadius($r('app.float.image_border_radius')) 393 .borderRadius($r('app.float.image_border_radius'))
343 CardMediaInfo({ contentDTO: this.mJumpInfo }) 394 CardMediaInfo({ contentDTO: this.mJumpInfo })
344 } 395 }
@@ -346,8 +397,15 @@ export struct DynamicDetailComponent { @@ -346,8 +397,15 @@ export struct DynamicDetailComponent {
346 } 397 }
347 } 398 }
348 } 399 }
349 - .padding({ left: this.contentDetailData.videoInfo[0].videoLandScape === 1?0: 25,top: $r('app.float.margin_8')})  
350 - .onClick((event: ClickEvent) => { 400 + .padding({
  401 + left: this.contentDetailData.videoInfo[0].videoLandScape === 1 ? 0 : 25,
  402 + top: $r('app.float.margin_8')
  403 + })
  404 + .onClick(async (event: ClickEvent) => {
  405 + let retvalue = await FastClickUtil.isMinDelayTime()
  406 + if(retvalue){
  407 + return
  408 + }
351 ProcessUtils.processPage(this.mJumpInfo) 409 ProcessUtils.processPage(this.mJumpInfo)
352 }) 410 })
353 } 411 }
@@ -357,9 +415,11 @@ export struct DynamicDetailComponent { @@ -357,9 +415,11 @@ export struct DynamicDetailComponent {
357 .fontColor($r('app.color.color_CCCCCC')) 415 .fontColor($r('app.color.color_CCCCCC'))
358 .fontSize($r('app.float.font_size_12')) 416 .fontSize($r('app.float.font_size_12'))
359 .lineHeight($r('app.float.margin_16')) 417 .lineHeight($r('app.float.margin_16'))
360 - .margin({ top: $r('app.float.margin_16')  
361 - ,left: $r('app.float.vp_12')  
362 - ,right: $r('app.float.vp_12') }) 418 + .margin({
  419 + top: $r('app.float.margin_16')
  420 + , left: $r('app.float.vp_12')
  421 + , right: $r('app.float.vp_12')
  422 + })
363 //微信/朋友圈/微博 423 //微信/朋友圈/微博
364 // Row(){ 424 // Row(){
365 // Image($r('app.media.xxhdpi_pic_wechat')) 425 // Image($r('app.media.xxhdpi_pic_wechat'))
@@ -379,37 +439,42 @@ export struct DynamicDetailComponent { @@ -379,37 +439,42 @@ export struct DynamicDetailComponent {
379 // } 439 // }
380 // .margin({ top: $r('app.float.margin_24')}) 440 // .margin({ top: $r('app.float.margin_24')})
381 //点赞 441 //点赞
382 - Row(){ 442 + Row() {
383 Blank().layoutWeight(1) 443 Blank().layoutWeight(1)
384 - Image(this.newsStatusOfUser?.likeStatus == '1'? 444 + Image(this.newsStatusOfUser?.likeStatus == '1' ?
385 $r('app.media.icon_like_selected_redheart') 445 $r('app.media.icon_like_selected_redheart')
386 - :$r('app.media.icon_like_unselect_grey_redheart')) 446 + : $r('app.media.icon_like_unselect_grey_redheart'))
387 .width($r('app.float.margin_36')) 447 .width($r('app.float.margin_36'))
388 .height($r('app.float.margin_36')) 448 .height($r('app.float.margin_36'))
389 .objectFit(ImageFit.Cover) 449 .objectFit(ImageFit.Cover)
390 - .margin({ left: $r('app.float.margin_6_negative'),right: $r('app.float.margin_6_negative')})  
391 - if(this.interactDataDTO?.likeNum != 0){ 450 + .margin({ left: $r('app.float.margin_6_negative'), right: $r('app.float.margin_6_negative') })
  451 + if (this.interactDataDTO?.likeNum != 0) {
392 Text(NumberFormatterUtils.formatNumberWithWan(this.interactDataDTO?.likeNum)) 452 Text(NumberFormatterUtils.formatNumberWithWan(this.interactDataDTO?.likeNum))
393 .fontColor($r('app.color.color_999999')) 453 .fontColor($r('app.color.color_999999'))
394 .fontSize($r('app.float.font_size_16')) 454 .fontSize($r('app.float.font_size_16'))
395 .lineHeight($r('app.float.margin_20')) 455 .lineHeight($r('app.float.margin_20'))
396 - .margin({ left: $r('app.float.margin_2')}) 456 + .margin({ left: $r('app.float.margin_2') })
397 } 457 }
398 Blank().layoutWeight(1) 458 Blank().layoutWeight(1)
399 } 459 }
400 .width($r('app.float.margin_154')) 460 .width($r('app.float.margin_154'))
401 .height($r('app.float.margin_40')) 461 .height($r('app.float.margin_40'))
402 - .margin({top:$r('app.float.margin_16')}) 462 + .margin({ top: $r('app.float.margin_16') })
403 .borderWidth($r('app.float.margin_1')) 463 .borderWidth($r('app.float.margin_1'))
404 .borderColor($r('app.color.color_EDEDED')) 464 .borderColor($r('app.color.color_EDEDED'))
405 .borderRadius($r('app.float.margin_20')) 465 .borderRadius($r('app.float.margin_20'))
406 - .onClick((event: ClickEvent) => { 466 + .onClick(async (event: ClickEvent) => {
  467 + let retvalue = await FastClickUtil.isMinDelayTime()
  468 + if(retvalue){
  469 + return
  470 + }
407 //点赞操作 471 //点赞操作
408 this.toggleLikeStatus() 472 this.toggleLikeStatus()
409 }) 473 })
  474 +
410 // 评论 475 // 评论
411 if (this.contentDetailData?.openComment) { 476 if (this.contentDetailData?.openComment) {
412 - Divider().strokeWidth(6).color('#f5f5f5').margin({top:$r('app.float.margin_24')}) 477 + Divider().strokeWidth(6).color('#f5f5f5').margin({ top: $r('app.float.margin_24') })
413 CommentComponent({ 478 CommentComponent({
414 publishCommentModel: { 479 publishCommentModel: {
415 targetId: String(this.contentDetailData?.newsId || ''), 480 targetId: String(this.contentDetailData?.newsId || ''),
@@ -447,11 +512,19 @@ export struct DynamicDetailComponent { @@ -447,11 +512,19 @@ export struct DynamicDetailComponent {
447 .width('100%') 512 .width('100%')
448 .height('100%') 513 .height('100%')
449 } 514 }
  515 +
450 /** 516 /**
451 * 请求(动态)详情页数据 517 * 请求(动态)详情页数据
452 * */ 518 * */
453 private async getContentDetailData() { 519 private async getContentDetailData() {
454 this.isNetConnected = NetworkUtil.isNetConnected() 520 this.isNetConnected = NetworkUtil.isNetConnected()
  521 + this.publishCommentModel.targetId = String(this.contentDetailData?.newsId || '')
  522 + this.publishCommentModel.targetRelId = String(this.contentDetailData?.reLInfo?.relId)
  523 + this.publishCommentModel.targetTitle = this.contentDetailData?.newsTitle
  524 + this.publishCommentModel.targetRelType = String(this.contentDetailData?.reLInfo?.relType)
  525 + this.publishCommentModel.targetRelObjectId = String(this.contentDetailData?.reLInfo?.relObjectId)
  526 + this.publishCommentModel.keyArticle = String(this.contentDetailData?.keyArticle)
  527 + this.publishCommentModel.targetType = String(this.contentDetailData?.newsType)
455 try { 528 try {
456 let data = await MultiPictureDetailViewModel.getDetailData(this.relId, this.contentId, this.relType) 529 let data = await MultiPictureDetailViewModel.getDetailData(this.relId, this.contentId, this.relType)
457 this.isPageEnd = true; 530 this.isPageEnd = true;
@@ -460,9 +533,9 @@ export struct DynamicDetailComponent { @@ -460,9 +533,9 @@ export struct DynamicDetailComponent {
460 DateTimeUtils.parseDate(this.contentDetailData?.publishTime, DateTimeUtils.PATTERN_DATE_TIME_HYPHEN); 533 DateTimeUtils.parseDate(this.contentDetailData?.publishTime, DateTimeUtils.PATTERN_DATE_TIME_HYPHEN);
461 let _publishTime = DateTimeUtils.formatDate(dateTime, PATTERN_DATE_CN_RN) 534 let _publishTime = DateTimeUtils.formatDate(dateTime, PATTERN_DATE_CN_RN)
462 this.publishTime = DateTimeUtils.removeTrailingZeros(_publishTime) 535 this.publishTime = DateTimeUtils.removeTrailingZeros(_publishTime)
463 - console.log('动态详情',JSON.stringify(this.contentDetailData)) 536 + console.log('动态详情', JSON.stringify(this.contentDetailData))
464 } catch (exception) { 537 } catch (exception) {
465 - console.log('请求失败',JSON.stringify(exception)) 538 + console.log('请求失败', JSON.stringify(exception))
466 this.isPageEnd = true; 539 this.isPageEnd = true;
467 } 540 }
468 this.getBatchAttentionStatus() 541 this.getBatchAttentionStatus()
@@ -471,10 +544,11 @@ export struct DynamicDetailComponent { @@ -471,10 +544,11 @@ export struct DynamicDetailComponent {
471 this.interactDataV2() 544 this.interactDataV2()
472 } 545 }
473 546
474 -  
475 private async interactDataV2() { 547 private async interactDataV2() {
476 this.interactDataDTO = await MultiPictureDetailViewModel.interactDataV2( 548 this.interactDataDTO = await MultiPictureDetailViewModel.interactDataV2(
477 - this.contentDetailData?.newsId+'',this.contentDetailData?.newsType+'',this.contentDetailData.reLInfo == null ?'':this.contentDetailData.reLInfo?.relId,this.contentDetailData.rmhPlatform) 549 + this.contentDetailData?.newsId + '', this.contentDetailData?.newsType + '',
  550 + this.contentDetailData.reLInfo == null ? '' : this.contentDetailData.reLInfo?.relId,
  551 + this.contentDetailData.rmhPlatform)
478 } 552 }
479 553
480 // 已登录->查询用户对作品点赞、收藏状态 554 // 已登录->查询用户对作品点赞、收藏状态
@@ -526,18 +600,19 @@ export struct DynamicDetailComponent { @@ -526,18 +600,19 @@ export struct DynamicDetailComponent {
526 } 600 }
527 601
528 //创建跳转信息 602 //创建跳转信息
529 - makeJumpInfo(){ 603 + makeJumpInfo() {
530 this.mJumpInfo.pageId = 'dynamicDetailPage' 604 this.mJumpInfo.pageId = 'dynamicDetailPage'
531 - this.mJumpInfo.objectId = this.contentDetailData.newsId+""  
532 - this.mJumpInfo.relType = this.contentDetailData.reLInfo?.relType+""  
533 - this.mJumpInfo.relId = this.contentDetailData.reLInfo?.relId+""  
534 - this.mJumpInfo.objectType = (this.contentDetailData.newsType+"") == ContentConstants.TYPE_FOURTEEN?this.contentDetailData.newsType+"":ContentConstants.TYPE_VOD  
535 - if(this.contentDetailData.videoInfo!= null && this.contentDetailData.videoInfo.length>0){ 605 + this.mJumpInfo.objectId = this.contentDetailData.newsId + ""
  606 + this.mJumpInfo.relType = this.contentDetailData.reLInfo?.relType + ""
  607 + this.mJumpInfo.relId = this.contentDetailData.reLInfo?.relId + ""
  608 + this.mJumpInfo.objectType =
  609 + (this.contentDetailData.newsType + "") == ContentConstants.TYPE_FOURTEEN ? this.contentDetailData.newsType + "" :
  610 + ContentConstants.TYPE_VOD
  611 + if (this.contentDetailData.videoInfo != null && this.contentDetailData.videoInfo.length > 0) {
536 this.mJumpInfo.videoInfo = this.contentDetailData.videoInfo[0] 612 this.mJumpInfo.videoInfo = this.contentDetailData.videoInfo[0]
537 } 613 }
538 } 614 }
539 615
540 -  
541 caclImageRadius(index: number) { 616 caclImageRadius(index: number) {
542 let radius: radiusType = { 617 let radius: radiusType = {
543 topLeft: index === 0 ? $r('app.float.image_border_radius') : 0, 618 topLeft: index === 0 ? $r('app.float.image_border_radius') : 0,
@@ -561,11 +636,11 @@ export struct DynamicDetailComponent { @@ -561,11 +636,11 @@ export struct DynamicDetailComponent {
561 return radius 636 return radius
562 } 637 }
563 638
564 - getPicType(item: PhotoListBean){ 639 + getPicType(item: PhotoListBean) {
565 if (item.width && item.width) { 640 if (item.width && item.width) {
566 - if (item.width / item.height > 343/172) { 641 + if (item.width / item.height > 343 / 172) {
567 return 1; //横长图 642 return 1; //横长图
568 - } else if (item.height / item.width > 305/228) { 643 + } else if (item.height / item.width > 305 / 228) {
569 return 2; //竖长图 644 return 2; //竖长图
570 } else { 645 } else {
571 return 3 646 return 3
@@ -590,7 +665,7 @@ export struct DynamicDetailComponent { @@ -590,7 +665,7 @@ export struct DynamicDetailComponent {
590 attentionUserType: this.contentDetailData?.rmhInfo?.userType || '', //被关注用户类型(1 普通用户 2 视频号 3 矩阵号) 665 attentionUserType: this.contentDetailData?.rmhInfo?.userType || '', //被关注用户类型(1 普通用户 2 视频号 3 矩阵号)
591 attentionUserId: this.contentDetailData?.rmhInfo?.userId || '', // 被关注用户号主id 666 attentionUserId: this.contentDetailData?.rmhInfo?.userId || '', // 被关注用户号主id
592 attentionCreatorId: this.contentDetailData?.rmhInfo?.rmhId || '', // 被关注用户号主id 667 attentionCreatorId: this.contentDetailData?.rmhInfo?.rmhId || '', // 被关注用户号主id
593 - status: this.followStatus == '0'? 1:0, 668 + status: this.followStatus == '0' ? 1 : 0,
594 } 669 }
595 ContentDetailRequest.postInteractAccentionOperate(params2).then(res => { 670 ContentDetailRequest.postInteractAccentionOperate(params2).then(res => {
596 console.log('关注号主==', JSON.stringify(res.data)) 671 console.log('关注号主==', JSON.stringify(res.data))
@@ -40,7 +40,7 @@ const TAG: string = 'ImageAndTextPageComponent' @@ -40,7 +40,7 @@ const TAG: string = 'ImageAndTextPageComponent'
40 export struct ImageAndTextPageComponent { 40 export struct ImageAndTextPageComponent {
41 scroller: Scroller = new Scroller(); 41 scroller: Scroller = new Scroller();
42 action: Action = {} as Action 42 action: Action = {} as Action
43 - @State contentDetailData: ContentDetailDTO [] = [] as ContentDetailDTO [] 43 + @Provide contentDetailData: ContentDetailDTO = {} as ContentDetailDTO
44 @State recommendList: ContentDTO[] = [] 44 @State recommendList: ContentDTO[] = []
45 @State newsStatusOfUser: batchLikeAndCollectResult | undefined = undefined // 点赞、收藏状态 45 @State newsStatusOfUser: batchLikeAndCollectResult | undefined = undefined // 点赞、收藏状态
46 @State interactData: InteractDataDTO = {} as InteractDataDTO 46 @State interactData: InteractDataDTO = {} as InteractDataDTO
@@ -52,11 +52,12 @@ export struct ImageAndTextPageComponent { @@ -52,11 +52,12 @@ export struct ImageAndTextPageComponent {
52 @State isNetConnected: boolean = true 52 @State isNetConnected: boolean = true
53 @State info: Area | null = null 53 @State info: Area | null = null
54 @State likeNum: number = 0 54 @State likeNum: number = 0
  55 +
55 build() { 56 build() {
56 Column() { 57 Column() {
57 // 发布时间 58 // 发布时间
58 Row() { 59 Row() {
59 - Image(this.contentDetailData[0]?.rmhInfo ? $r('app.media.logo_rmh') : $r('app.media.logo_rmrb')) 60 + Image(this.contentDetailData?.rmhInfo ? $r('app.media.logo_rmh') : $r('app.media.logo_rmrb'))
60 .width(80) 61 .width(80)
61 .height(28) 62 .height(28)
62 Text(this.publishTime) 63 Text(this.publishTime)
@@ -83,26 +84,26 @@ export struct ImageAndTextPageComponent { @@ -83,26 +84,26 @@ export struct ImageAndTextPageComponent {
83 Scroll(this.scroller) { 84 Scroll(this.scroller) {
84 Column() { 85 Column() {
85 ImageAndTextWebComponent({ 86 ImageAndTextWebComponent({
86 - contentDetailData: this.contentDetailData, 87 + contentDetailData: [this.contentDetailData],
87 action: this.action, 88 action: this.action,
88 isPageEnd: $isPageEnd 89 isPageEnd: $isPageEnd
89 }) 90 })
90 - .padding({bottom:10}) 91 + .padding({ bottom: 10 })
91 Column() { 92 Column() {
92 // 点赞 93 // 点赞
93 - if (this.contentDetailData[0]?.openLikes && this.contentDetailData[0]?.likesStyle !== 4) { 94 + if (this.contentDetailData?.openLikes && this.contentDetailData?.likesStyle !== 4) {
94 Row() { 95 Row() {
95 Row() { 96 Row() {
96 if (this.newsStatusOfUser?.likeStatus === '1') { 97 if (this.newsStatusOfUser?.likeStatus === '1') {
97 - Image(this.contentDetailData[0]?.likesStyle === 1 ? $r('app.media.ic_like_check') :  
98 - (this.contentDetailData[0]?.likesStyle === 2 ? $r('app.media.icon_prayer_active') : 98 + Image(this.contentDetailData?.likesStyle === 1 ? $r('app.media.ic_like_check') :
  99 + (this.contentDetailData?.likesStyle === 2 ? $r('app.media.icon_prayer_active') :
99 $r('app.media.icon_candle_active'))) 100 $r('app.media.icon_candle_active')))
100 .width(24) 101 .width(24)
101 .height(24) 102 .height(24)
102 .margin({ right: 5 }) 103 .margin({ right: 5 })
103 } else { 104 } else {
104 - Image(this.contentDetailData[0]?.likesStyle === 1 ? $r('app.media.icon_like') :  
105 - (this.contentDetailData[0]?.likesStyle === 2 ? $r('app.media.icon_prayer') : 105 + Image(this.contentDetailData?.likesStyle === 1 ? $r('app.media.icon_like') :
  106 + (this.contentDetailData?.likesStyle === 2 ? $r('app.media.icon_prayer') :
106 $r('app.media.icon_candle'))) 107 $r('app.media.icon_candle')))
107 .width(24) 108 .width(24)
108 .height(24) 109 .height(24)
@@ -129,7 +130,7 @@ export struct ImageAndTextPageComponent { @@ -129,7 +130,7 @@ export struct ImageAndTextPageComponent {
129 }) 130 })
130 131
131 }.width(CommonConstants.FULL_WIDTH) 132 }.width(CommonConstants.FULL_WIDTH)
132 - .padding({top:14,bottom:24}) 133 + .padding({ top: 14, bottom: 24 })
133 .justifyContent(FlexAlign.Center) 134 .justifyContent(FlexAlign.Center)
134 } 135 }
135 if (this.recommendList.length > 0) { 136 if (this.recommendList.length > 0) {
@@ -137,7 +138,7 @@ export struct ImageAndTextPageComponent { @@ -137,7 +138,7 @@ export struct ImageAndTextPageComponent {
137 RecommendList({ recommendList: this.recommendList }) 138 RecommendList({ recommendList: this.recommendList })
138 } 139 }
139 // 评论 140 // 评论
140 - if (this.contentDetailData[0]?.openComment) { 141 + if (this.contentDetailData?.openComment) {
141 Divider().strokeWidth(6).color('#f5f5f5') 142 Divider().strokeWidth(6).color('#f5f5f5')
142 CommentComponent({ 143 CommentComponent({
143 publishCommentModel: this.publishCommentModel 144 publishCommentModel: this.publishCommentModel
@@ -173,7 +174,7 @@ export struct ImageAndTextPageComponent { @@ -173,7 +174,7 @@ export struct ImageAndTextPageComponent {
173 //底部交互区 174 //底部交互区
174 if (this.operationButtonList.length) { 175 if (this.operationButtonList.length) {
175 OperRowListView({ 176 OperRowListView({
176 - contentDetailData: this.contentDetailData[0], 177 + contentDetailData: this.contentDetailData,
177 publishCommentModel: this.publishCommentModel, 178 publishCommentModel: this.publishCommentModel,
178 operationButtonList: this.operationButtonList, 179 operationButtonList: this.operationButtonList,
179 styleType: 1, 180 styleType: 1,
@@ -207,29 +208,29 @@ export struct ImageAndTextPageComponent { @@ -207,29 +208,29 @@ export struct ImageAndTextPageComponent {
207 } 208 }
208 let detailBeans = await DetailViewModel.getDetailPageData(relId, contentId, relType) 209 let detailBeans = await DetailViewModel.getDetailPageData(relId, contentId, relType)
209 if (detailBeans && detailBeans.length > 0) { 210 if (detailBeans && detailBeans.length > 0) {
210 - this.contentDetailData = detailBeans; 211 + this.contentDetailData = detailBeans[0];
211 let dateTime = 212 let dateTime =
212 - DateTimeUtils.parseDate(this.contentDetailData[0]?.publishTime, DateTimeUtils.PATTERN_DATE_TIME_HYPHEN); 213 + DateTimeUtils.parseDate(this.contentDetailData?.publishTime, DateTimeUtils.PATTERN_DATE_TIME_HYPHEN);
213 let _publishTime = DateTimeUtils.formatDate(dateTime, PATTERN_DATE_CN_RN) 214 let _publishTime = DateTimeUtils.formatDate(dateTime, PATTERN_DATE_CN_RN)
214 this.publishTime = DateTimeUtils.removeTrailingZeros(_publishTime) 215 this.publishTime = DateTimeUtils.removeTrailingZeros(_publishTime)
215 - if (this.contentDetailData[0]?.recommendShow === 1) { 216 + if (this.contentDetailData?.recommendShow === 1) {
216 this.getRecommend() 217 this.getRecommend()
217 } 218 }
218 - if (this.contentDetailData[0]?.openLikes === 1) { 219 + if (this.contentDetailData?.openLikes === 1) {
219 this.getInteractDataStatus() 220 this.getInteractDataStatus()
220 this.queryContentInteractCount() 221 this.queryContentInteractCount()
221 } 222 }
222 - if (this.contentDetailData[0]?.openComment) {  
223 - this.publishCommentModel.targetId = String(this.contentDetailData[0]?.newsId || '')  
224 - this.publishCommentModel.targetRelId = String(this.contentDetailData[0]?.reLInfo?.relId)  
225 - this.publishCommentModel.targetTitle = this.contentDetailData[0]?.newsTitle  
226 - this.publishCommentModel.targetRelType = String(this.contentDetailData[0]?.reLInfo?.relType)  
227 - this.publishCommentModel.targetRelObjectId = String(this.contentDetailData[0]?.reLInfo?.relObjectId)  
228 - this.publishCommentModel.keyArticle = String(this.contentDetailData[0]?.keyArticle)  
229 - this.publishCommentModel.targetType = String(this.contentDetailData[0]?.newsType)  
230 - }  
231 - if (this.contentDetailData[0]?.openAudio && this.contentDetailData[0]?.audioList?.length &&  
232 - this.contentDetailData[0]?.audioList[0].audioUrl) { 223 + if (this.contentDetailData?.openComment) {
  224 + this.publishCommentModel.targetId = String(this.contentDetailData?.newsId || '')
  225 + this.publishCommentModel.targetRelId = String(this.contentDetailData?.reLInfo?.relId)
  226 + this.publishCommentModel.targetTitle = this.contentDetailData?.newsTitle
  227 + this.publishCommentModel.targetRelType = String(this.contentDetailData?.reLInfo?.relType)
  228 + this.publishCommentModel.targetRelObjectId = String(this.contentDetailData?.reLInfo?.relObjectId)
  229 + this.publishCommentModel.keyArticle = String(this.contentDetailData?.keyArticle)
  230 + this.publishCommentModel.targetType = String(this.contentDetailData?.newsType)
  231 + }
  232 + if (this.contentDetailData?.openAudio && this.contentDetailData?.audioList?.length &&
  233 + this.contentDetailData?.audioList[0].audioUrl) {
233 this.operationButtonList = ['comment', 'collect', 'listen', 'share'] 234 this.operationButtonList = ['comment', 'collect', 'listen', 'share']
234 } else { 235 } else {
235 this.operationButtonList = ['comment', 'collect', 'share'] 236 this.operationButtonList = ['comment', 'collect', 'share']
@@ -242,11 +243,11 @@ export struct ImageAndTextPageComponent { @@ -242,11 +243,11 @@ export struct ImageAndTextPageComponent {
242 let params: postRecommendListParams = { 243 let params: postRecommendListParams = {
243 imei: HttpUtils.getImei(), 244 imei: HttpUtils.getImei(),
244 userId: HttpUtils.getUserId(), 245 userId: HttpUtils.getUserId(),
245 - contentId: String(this.contentDetailData[0]?.newsId),  
246 - recType: Number(this.contentDetailData[0]?.reLInfo?.relType),  
247 - contentType: this.contentDetailData[0]?.newsType,  
248 - relId: this.contentDetailData[0]?.reLInfo?.relId,  
249 - channelId: String(this.contentDetailData[0]?.reLInfo?.channelId) 246 + contentId: String(this.contentDetailData?.newsId),
  247 + recType: Number(this.contentDetailData?.reLInfo?.relType),
  248 + contentType: this.contentDetailData?.newsType,
  249 + relId: this.contentDetailData?.reLInfo?.relId,
  250 + channelId: String(this.contentDetailData?.reLInfo?.channelId)
250 } 251 }
251 let recommendList = await DetailViewModel.postRecommendList(params) 252 let recommendList = await DetailViewModel.postRecommendList(params)
252 this.recommendList = recommendList; 253 this.recommendList = recommendList;
@@ -258,8 +259,8 @@ export struct ImageAndTextPageComponent { @@ -258,8 +259,8 @@ export struct ImageAndTextPageComponent {
258 const params: batchLikeAndCollectParams = { 259 const params: batchLikeAndCollectParams = {
259 contentList: [ 260 contentList: [
260 { 261 {
261 - contentId: this.contentDetailData[0]?.newsId + '',  
262 - contentType: this.contentDetailData[0]?.newsType + '', 262 + contentId: this.contentDetailData?.newsId + '',
  263 + contentType: this.contentDetailData?.newsType + '',
263 } 264 }
264 ] 265 ]
265 } 266 }
@@ -284,8 +285,8 @@ export struct ImageAndTextPageComponent { @@ -284,8 +285,8 @@ export struct ImageAndTextPageComponent {
284 } 285 }
285 const params: postExecuteLikeParams = { 286 const params: postExecuteLikeParams = {
286 status: this.newsStatusOfUser?.likeStatus === '1' ? '0' : '1', 287 status: this.newsStatusOfUser?.likeStatus === '1' ? '0' : '1',
287 - contentId: this.contentDetailData[0]?.newsId + '',  
288 - contentType: this.contentDetailData[0]?.newsType + '', 288 + contentId: this.contentDetailData?.newsId + '',
  289 + contentType: this.contentDetailData?.newsType + '',
289 } 290 }
290 PageRepository.postExecuteLike(params).then(res => { 291 PageRepository.postExecuteLike(params).then(res => {
291 console.log(TAG, '点赞、取消点赞', 'toggleLikeStatus==',) 292 console.log(TAG, '点赞、取消点赞', 'toggleLikeStatus==',)
@@ -304,8 +305,8 @@ export struct ImageAndTextPageComponent { @@ -304,8 +305,8 @@ export struct ImageAndTextPageComponent {
304 console.error(TAG, 'contentDetailData2222', JSON.stringify(this.contentDetailData)) 305 console.error(TAG, 'contentDetailData2222', JSON.stringify(this.contentDetailData))
305 const params: contentListParams = { 306 const params: contentListParams = {
306 contentList: [{ 307 contentList: [{
307 - contentId: this.contentDetailData[0]?.newsId + '',  
308 - contentType: this.contentDetailData[0]?.newsType, 308 + contentId: this.contentDetailData?.newsId + '',
  309 + contentType: this.contentDetailData?.newsType,
309 }] 310 }]
310 } 311 }
311 PageRepository.getContentInteract(params).then(res => { 312 PageRepository.getContentInteract(params).then(res => {
1 -import { NetworkUtil, Logger, NetworkType, SPHelper, WindowModel, StringUtils} from 'wdKit'; 1 +import { NetworkUtil, Logger, NetworkType, SPHelper, WindowModel, StringUtils } from 'wdKit';
2 import { ResponseDTO } from 'wdNetwork'; 2 import { ResponseDTO } from 'wdNetwork';
3 import { 3 import {
4 ContentDetailDTO, 4 ContentDetailDTO,
@@ -35,7 +35,7 @@ export struct MultiPictureDetailPageComponent { @@ -35,7 +35,7 @@ export struct MultiPictureDetailPageComponent {
35 private picWidth: number = 0 35 private picWidth: number = 0
36 @State picHeight: number = 0 36 @State picHeight: number = 0
37 @State titleHeight: number = 0 37 @State titleHeight: number = 0
38 - @State contentDetailData: ContentDetailDTO = {} as ContentDetailDTO 38 + @Provide contentDetailData: ContentDetailDTO = {} as ContentDetailDTO
39 @Provide @Watch('onCurrentPageNumUpdated') currentPageNum: string = '01' 39 @Provide @Watch('onCurrentPageNumUpdated') currentPageNum: string = '01'
40 private swiperController: SwiperController = new SwiperController() 40 private swiperController: SwiperController = new SwiperController()
41 private swiperControllerItem: SwiperController = new SwiperController() 41 private swiperControllerItem: SwiperController = new SwiperController()
@@ -49,8 +49,8 @@ export struct MultiPictureDetailPageComponent { @@ -49,8 +49,8 @@ export struct MultiPictureDetailPageComponent {
49 @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') as number; 49 @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') as number;
50 @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') as number; 50 @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') as number;
51 @State windowHeight: number = AppStorage.get<number>('windowHeight') as number; 51 @State windowHeight: number = AppStorage.get<number>('windowHeight') as number;
52 - @State currentOffset:number = 0  
53 - @State duration:number = 0 52 + @State currentOffset: number = 0
  53 + @State duration: number = 0
54 54
55 //watch监听页码回调 55 //watch监听页码回调
56 onCurrentPageNumUpdated(): void { 56 onCurrentPageNumUpdated(): void {
@@ -83,7 +83,6 @@ export struct MultiPictureDetailPageComponent { @@ -83,7 +83,6 @@ export struct MultiPictureDetailPageComponent {
83 } 83 }
84 } 84 }
85 85
86 -  
87 aboutToDisappear() { 86 aboutToDisappear() {
88 87
89 } 88 }
@@ -101,10 +100,10 @@ export struct MultiPictureDetailPageComponent { @@ -101,10 +100,10 @@ export struct MultiPictureDetailPageComponent {
101 @Builder 100 @Builder
102 init() { 101 init() {
103 if (this.contentDetailData.rmhPlatform == 1) { 102 if (this.contentDetailData.rmhPlatform == 1) {
104 - if(!this.showDownload) { 103 + if (!this.showDownload) {
105 Row() { 104 Row() {
106 Row({ space: 8 }) { 105 Row({ space: 8 }) {
107 - if (this.getImgUrl()){ 106 + if (this.getImgUrl()) {
108 Row() { 107 Row() {
109 Stack() { 108 Stack() {
110 Image(this.getImgUrl()) 109 Image(this.getImgUrl())
@@ -115,7 +114,7 @@ export struct MultiPictureDetailPageComponent { @@ -115,7 +114,7 @@ export struct MultiPictureDetailPageComponent {
115 .height(36) 114 .height(36)
116 .objectFit(ImageFit.Fill) 115 .objectFit(ImageFit.Fill)
117 .interpolation(ImageInterpolation.High) 116 .interpolation(ImageInterpolation.High)
118 - if(!StringUtils.isEmpty(this.contentDetailData.rmhInfo?.authIcon)){ 117 + if (!StringUtils.isEmpty(this.contentDetailData.rmhInfo?.authIcon)) {
119 Stack() { 118 Stack() {
120 Image(this.contentDetailData.rmhInfo?.authIcon) 119 Image(this.contentDetailData.rmhInfo?.authIcon)
121 .width($r('app.float.vp_13')) 120 .width($r('app.float.vp_13'))
@@ -219,7 +218,7 @@ export struct MultiPictureDetailPageComponent { @@ -219,7 +218,7 @@ export struct MultiPictureDetailPageComponent {
219 .width('100%') 218 .width('100%')
220 .height(44) 219 .height(44)
221 .zIndex(10) 220 .zIndex(10)
222 - .margin({top:`${this.topSafeHeight + 12}px`}) 221 + .margin({ top: `${this.topSafeHeight + 12}px` })
223 .alignRules({ 222 .alignRules({
224 top: { anchor: "__container__", align: VerticalAlign.Top }, 223 top: { anchor: "__container__", align: VerticalAlign.Top },
225 middle: { anchor: "__container__", align: HorizontalAlign.Center } 224 middle: { anchor: "__container__", align: HorizontalAlign.Center }
@@ -249,12 +248,12 @@ export struct MultiPictureDetailPageComponent { @@ -249,12 +248,12 @@ export struct MultiPictureDetailPageComponent {
249 this.currentOffset = Math.abs(extraInfo.currentOffset) 248 this.currentOffset = Math.abs(extraInfo.currentOffset)
250 }) 249 })
251 .onTouch((event: TouchEvent) => { 250 .onTouch((event: TouchEvent) => {
252 - if(this.duration === 0) { 251 + if (this.duration === 0) {
253 this.duration = 500 252 this.duration = 500
254 } 253 }
255 - if(event.type === 1) { 254 + if (event.type === 1) {
256 // if(this.currentOffset > px2vp((this.windowHeight - item.height)/2 - 100)) { 255 // if(this.currentOffset > px2vp((this.windowHeight - item.height)/2 - 100)) {
257 - if(this.currentOffset > 160) { 256 + if (this.currentOffset > 160) {
258 router.back() 257 router.back()
259 } 258 }
260 } 259 }
@@ -296,9 +295,9 @@ export struct MultiPictureDetailPageComponent { @@ -296,9 +295,9 @@ export struct MultiPictureDetailPageComponent {
296 middle: { anchor: "__container__", align: HorizontalAlign.Center } 295 middle: { anchor: "__container__", align: HorizontalAlign.Center }
297 }) 296 })
298 } 297 }
299 - Column(){  
300 - if(!this.showDownload) {  
301 - Column(){ 298 + Column() {
  299 + if (!this.showDownload) {
  300 + Column() {
302 Row() { 301 Row() {
303 Scroll(this.scroller) { 302 Scroll(this.scroller) {
304 Row() { 303 Row() {
@@ -306,7 +305,7 @@ export struct MultiPictureDetailPageComponent { @@ -306,7 +305,7 @@ export struct MultiPictureDetailPageComponent {
306 direction: FlexDirection.Column, 305 direction: FlexDirection.Column,
307 justifyContent: FlexAlign.Start 306 justifyContent: FlexAlign.Start
308 }) { 307 }) {
309 - if(this.contentDetailData?.photoList?.length) { 308 + if (this.contentDetailData?.photoList?.length) {
310 Text() { 309 Text() {
311 Span(`${this.swiperIndex + 1}`) 310 Span(`${this.swiperIndex + 1}`)
312 .fontSize(24) 311 .fontSize(24)
@@ -322,7 +321,7 @@ export struct MultiPictureDetailPageComponent { @@ -322,7 +321,7 @@ export struct MultiPictureDetailPageComponent {
322 .fontColor(Color.White) 321 .fontColor(Color.White)
323 .margin(4) 322 .margin(4)
324 } 323 }
325 - if(this.contentDetailData.newsTitle) { 324 + if (this.contentDetailData.newsTitle) {
326 Text(`${this.contentDetailData.newsTitle}`) 325 Text(`${this.contentDetailData.newsTitle}`)
327 .fontColor(Color.White) 326 .fontColor(Color.White)
328 .fontSize(16) 327 .fontSize(16)
@@ -336,7 +335,7 @@ export struct MultiPictureDetailPageComponent { @@ -336,7 +335,7 @@ export struct MultiPictureDetailPageComponent {
336 right: 0 335 right: 0
337 }) 336 })
338 } 337 }
339 - if(this.contentDetailData.photoList?.[this.swiperIndex].picDesc) { 338 + if (this.contentDetailData.photoList?.[this.swiperIndex].picDesc) {
340 Text(`${this.contentDetailData.photoList?.[this.swiperIndex].picDesc}`) 339 Text(`${this.contentDetailData.photoList?.[this.swiperIndex].picDesc}`)
341 .fontColor(Color.White) 340 .fontColor(Color.White)
342 .fontSize(14) 341 .fontSize(14)
@@ -361,6 +360,7 @@ export struct MultiPictureDetailPageComponent { @@ -361,6 +360,7 @@ export struct MultiPictureDetailPageComponent {
361 .height(px2vp(this.titleHeight)) 360 .height(px2vp(this.titleHeight))
362 .align(Alignment.Bottom) 361 .align(Alignment.Bottom)
363 } 362 }
  363 +
364 OperRowListView({ 364 OperRowListView({
365 contentDetailData: this.contentDetailData, 365 contentDetailData: this.contentDetailData,
366 publishCommentModel: this.publishCommentModel, 366 publishCommentModel: this.publishCommentModel,
@@ -372,14 +372,14 @@ export struct MultiPictureDetailPageComponent { @@ -372,14 +372,14 @@ export struct MultiPictureDetailPageComponent {
372 TransitionEffect.translate({ x: 0, y: `-${this.bottomSafeHeight}px` }) 372 TransitionEffect.translate({ x: 0, y: `-${this.bottomSafeHeight}px` })
373 )) 373 ))
374 } 374 }
375 - if(this.showDownload) {  
376 - Column(){ 375 + if (this.showDownload) {
  376 + Column() {
377 Row() { 377 Row() {
378 Flex({ 378 Flex({
379 direction: FlexDirection.Row, 379 direction: FlexDirection.Row,
380 justifyContent: FlexAlign.SpaceBetween 380 justifyContent: FlexAlign.SpaceBetween
381 }) { 381 }) {
382 - if(this.contentDetailData?.photoList?.length) { 382 + if (this.contentDetailData?.photoList?.length) {
383 Text() { 383 Text() {
384 Span(`${this.swiperIndex + 1}`) 384 Span(`${this.swiperIndex + 1}`)
385 .fontSize(24) 385 .fontSize(24)
@@ -396,7 +396,7 @@ export struct MultiPictureDetailPageComponent { @@ -396,7 +396,7 @@ export struct MultiPictureDetailPageComponent {
396 .margin(4) 396 .margin(4)
397 } 397 }
398 398
399 - if(this.contentDetailData.photoList?.[this.swiperIndex].picPath) { 399 + if (this.contentDetailData.photoList?.[this.swiperIndex].picPath) {
400 ImageDownloadComponent({ url: this.contentDetailData.photoList?.[this.swiperIndex].picPath }) 400 ImageDownloadComponent({ url: this.contentDetailData.photoList?.[this.swiperIndex].picPath })
401 .margin({ 401 .margin({
402 top: 8, 402 top: 8,
@@ -18,7 +18,7 @@ export struct SpacialTopicPageComponent { @@ -18,7 +18,7 @@ export struct SpacialTopicPageComponent {
18 action: Action = {} as Action 18 action: Action = {} as Action
19 @State webUrl: string = ''; 19 @State webUrl: string = '';
20 @State isPageEnd: boolean = false 20 @State isPageEnd: boolean = false
21 - @State contentDetailData: ContentDetailDTO [] = [] as ContentDetailDTO [] 21 + @Provide contentDetailData: ContentDetailDTO = {} as ContentDetailDTO
22 private h5ReceiveAppData: H5ReceiveDetailBean = { dataSource: '2' } as H5ReceiveDetailBean 22 private h5ReceiveAppData: H5ReceiveDetailBean = { dataSource: '2' } as H5ReceiveDetailBean
23 private webPrepared = false; 23 private webPrepared = false;
24 private dataPrepared = false; 24 private dataPrepared = false;
@@ -63,15 +63,15 @@ export struct SpacialTopicPageComponent { @@ -63,15 +63,15 @@ export struct SpacialTopicPageComponent {
63 } 63 }
64 let detailBeans = await DetailViewModel.getDetailPageData(relId, contentId, relType) 64 let detailBeans = await DetailViewModel.getDetailPageData(relId, contentId, relType)
65 if (detailBeans && detailBeans.length > 0) { 65 if (detailBeans && detailBeans.length > 0) {
66 - this.contentDetailData = detailBeans; 66 + this.contentDetailData = detailBeans[0];
67 // if (this.contentDetailData[0]?.openComment) { 67 // if (this.contentDetailData[0]?.openComment) {
68 - this.publishCommentModel.targetId = String(this.contentDetailData[0]?.newsId || '')  
69 - this.publishCommentModel.targetRelId = String(this.contentDetailData[0]?.reLInfo?.relId)  
70 - this.publishCommentModel.targetTitle = this.contentDetailData[0]?.newsTitle  
71 - this.publishCommentModel.targetRelType = String(this.contentDetailData[0]?.reLInfo?.relType)  
72 - this.publishCommentModel.targetRelObjectId = String(this.contentDetailData[0]?.reLInfo?.relObjectId)  
73 - this.publishCommentModel.keyArticle = String(this.contentDetailData[0]?.keyArticle)  
74 - this.publishCommentModel.targetType = String(this.contentDetailData[0]?.newsType) 68 + this.publishCommentModel.targetId = String(this.contentDetailData?.newsId || '')
  69 + this.publishCommentModel.targetRelId = String(this.contentDetailData?.reLInfo?.relId)
  70 + this.publishCommentModel.targetTitle = this.contentDetailData?.newsTitle
  71 + this.publishCommentModel.targetRelType = String(this.contentDetailData?.reLInfo?.relType)
  72 + this.publishCommentModel.targetRelObjectId = String(this.contentDetailData?.reLInfo?.relObjectId)
  73 + this.publishCommentModel.keyArticle = String(this.contentDetailData?.keyArticle)
  74 + this.publishCommentModel.targetType = String(this.contentDetailData?.newsType)
75 // } 75 // }
76 this.trySendData2H5() 76 this.trySendData2H5()
77 } 77 }
@@ -92,14 +92,14 @@ export struct SpacialTopicPageComponent { @@ -92,14 +92,14 @@ export struct SpacialTopicPageComponent {
92 } 92 }
93 .width(CommonConstants.FULL_WIDTH) 93 .width(CommonConstants.FULL_WIDTH)
94 .height(CommonConstants.FULL_HEIGHT) 94 .height(CommonConstants.FULL_HEIGHT)
95 - .padding({bottom:75}) 95 + .padding({ bottom: 75 })
96 96
97 if (!this.isPageEnd) { 97 if (!this.isPageEnd) {
98 detailedSkeleton() 98 detailedSkeleton()
99 } 99 }
100 //底部交互区 100 //底部交互区
101 OperRowListView({ 101 OperRowListView({
102 - contentDetailData: this.contentDetailData[0], 102 + contentDetailData: this.contentDetailData,
103 publishCommentModel: this.publishCommentModel, 103 publishCommentModel: this.publishCommentModel,
104 operationButtonList: this.operationButtonList, 104 operationButtonList: this.operationButtonList,
105 }) 105 })
1 /** 1 /**
2 * 这里是人民号动态中的顶部信息:人民号logo,名字,描述,关注等 2 * 这里是人民号动态中的顶部信息:人民号logo,名字,描述,关注等
3 */ 3 */
  4 +import {
  5 + ContentDetailRequest,
  6 + postInteractAccentionOperateParams
  7 +} from 'wdDetailPlayApi/src/main/ets/request/ContentDetailRequest';
4 import { RmhInfoDTO } from 'wdBean' 8 import { RmhInfoDTO } from 'wdBean'
5 import { CommonConstants } from 'wdConstant/Index'; 9 import { CommonConstants } from 'wdConstant/Index';
6 -import { DateTimeUtils, SPHelper } from 'wdKit'; 10 +import { DateTimeUtils, SPHelper, Logger, ToastUtils } from 'wdKit';
7 import { SpConstants } from 'wdConstant/Index' 11 import { SpConstants } from 'wdConstant/Index'
8 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'; 12 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
9 import router from '@ohos.router' 13 import router from '@ohos.router'
  14 +import { postBatchAttentionStatusParams } from 'wdBean/Index';
  15 +import { MultiPictureDetailViewModel } from '../../viewmodel/MultiPictureDetailViewModel'
10 16
11 @Component 17 @Component
12 export struct RmhTitle { 18 export struct RmhTitle {
13 @Prop rmhInfo: RmhInfoDTO 19 @Prop rmhInfo: RmhInfoDTO
14 @Prop publishTime: string | undefined 20 @Prop publishTime: string | undefined
  21 + /**
  22 + * 是否需要隐藏发布时间超过2天的时间展示,默认不隐藏
  23 + */
15 @Prop hideTime: boolean 24 @Prop hideTime: boolean
  25 + /**
  26 + * 默认未关注 点击去关注
  27 + */
  28 + @State followStatus: string = '0';
16 29
17 - async appointReq() { 30 + /**
  31 + * 关注号主
  32 + */
  33 + async handleAccention() {
18 // 未登录,跳转登录 34 // 未登录,跳转登录
19 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '') 35 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
20 if (!user_id) { 36 if (!user_id) {
21 WDRouterRule.jumpWithPage(WDRouterPage.loginPage) 37 WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
22 return 38 return
23 } 39 }
  40 +
  41 + const params2: postInteractAccentionOperateParams = {
  42 + attentionUserType: this.rmhInfo?.userType || '', //被关注用户类型(1 普通用户 2 视频号 3 矩阵号)
  43 + attentionUserId: this.rmhInfo?.userId || '', // 被关注用户号主id
  44 + attentionCreatorId: this.rmhInfo?.rmhId || '', // 被关注用户号主id
  45 + status: this.followStatus == '0' ? 1 : 0,
  46 + }
  47 + ContentDetailRequest.postInteractAccentionOperate(params2).then(res => {
  48 + console.log('rmhTitle-data', JSON.stringify(res.data))
  49 + if (this.followStatus == '1') {
  50 + this.followStatus = '0'
  51 + } else {
  52 + this.followStatus = '1'
  53 + // 弹窗样式与何时调用待确认
  54 + ContentDetailRequest.postPointLevelOperate({ operateType: 6 }).then((res) => {
  55 + console.log('关注号主获取积分==', JSON.stringify(res.data))
  56 + if (res.data?.showToast) {
  57 + ToastUtils.showToast(res.data.ruleName + '+' + res.data.rulePoint + '积分', 1000);
  58 + }
  59 + })
  60 + }
  61 + })
  62 + }
  63 + /**
  64 + * 查询当前登录用户是否关注作品号主
  65 + * */
  66 + async getBatchAttentionStatus() {
  67 + try {
  68 + const params: postBatchAttentionStatusParams = {
  69 + creatorIds: [{ creatorId: this.rmhInfo?.rmhId ?? '' }]
  70 + }
  71 + let data = await MultiPictureDetailViewModel.getBatchAttentionStatus(params)
  72 + this.followStatus = data[0]?.status;
  73 + Logger.info(`rmhTitle-followStatus:${JSON.stringify(this.followStatus)}`)
  74 + } catch (exception) {
  75 + Logger.info(`rmhTitle-followStatus:${JSON.stringify(exception)}`)
  76 + }
24 } 77 }
25 78
26 aboutToAppear(): void { 79 aboutToAppear(): void {
  80 + this.getBatchAttentionStatus()
  81 +
27 let page = router.getState(); 82 let page = router.getState();
28 if (page.path.includes('/page/PeopleShipHomePage') || page.path.includes('/pages/MainPage')) { 83 if (page.path.includes('/page/PeopleShipHomePage') || page.path.includes('/pages/MainPage')) {
29 this.hideTime = true; 84 this.hideTime = true;
@@ -88,17 +143,20 @@ export struct RmhTitle { @@ -88,17 +143,20 @@ export struct RmhTitle {
88 Blank() 143 Blank()
89 if (this.rmhInfo.cnIsAttention) { 144 if (this.rmhInfo.cnIsAttention) {
90 Row() { 145 Row() {
  146 + if (Number(this.followStatus) === 0) {
91 Image($r('app.media.rmh_follow')) 147 Image($r('app.media.rmh_follow'))
92 .width(16) 148 .width(16)
93 .height(16) 149 .height(16)
94 - Text('关注') 150 + }
  151 +
  152 + Text(Number(this.followStatus) === 0 ? '关注' : '已关注')
95 .fontSize($r('app.float.font_size_13')) 153 .fontSize($r('app.float.font_size_13'))
96 .fontColor($r('app.color.color_ED2800')) 154 .fontColor($r('app.color.color_ED2800'))
97 } 155 }
98 .flexShrink(0) 156 .flexShrink(0)
99 .alignSelf(ItemAlign.Center) 157 .alignSelf(ItemAlign.Center)
100 .onClick(() => { 158 .onClick(() => {
101 - this.appointReq(); 159 + this.handleAccention();
102 }) 160 })
103 } 161 }
104 } 162 }
1 import { CompDTO } from 'wdBean/Index'; 1 import { CompDTO } from 'wdBean/Index';
2 -import { Logger } from 'wdKit/Index'; 2 +import { DateTimeUtils, Logger } from 'wdKit/Index';
3 import PageModel from '../../viewmodel/PageModel'; 3 import PageModel from '../../viewmodel/PageModel';
4 4
5 /** 5 /**
@@ -59,9 +59,9 @@ export struct CardAdvBottom { @@ -59,9 +59,9 @@ export struct CardAdvBottom {
59 break; 59 break;
60 } 60 }
61 } 61 }
62 - Logger.error("ZZZXXXXX","currentIndex====>"+currentIndex);  
63 if (currentIndex >= 0) { 62 if (currentIndex >= 0) {
64 this.pageModel.compList.deleteItem(currentIndex) 63 this.pageModel.compList.deleteItem(currentIndex)
  64 + this.pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
65 } 65 }
66 } 66 }
67 } 67 }
1 import { CompDTO } from 'wdBean/Index'; 1 import { CompDTO } from 'wdBean/Index';
2 -import { Logger } from 'wdKit/Index'; 2 +import { DateTimeUtils, Logger } from 'wdKit/Index';
3 import PageModel from '../../viewmodel/PageModel'; 3 import PageModel from '../../viewmodel/PageModel';
4 4
5 /** 5 /**
@@ -71,10 +71,9 @@ export struct CardAdvTop { @@ -71,10 +71,9 @@ export struct CardAdvTop {
71 break; 71 break;
72 } 72 }
73 } 73 }
74 -  
75 - Logger.error("ZZZXXXXX","currentIndex====>"+currentIndex);  
76 if (currentIndex >= 0) { 74 if (currentIndex >= 0) {
77 this.pageModel.compList.deleteItem(currentIndex) 75 this.pageModel.compList.deleteItem(currentIndex)
  76 + this.pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
78 } 77 }
79 } 78 }
80 } 79 }
@@ -48,8 +48,9 @@ export struct Card10Component { @@ -48,8 +48,9 @@ export struct Card10Component {
48 .onClick((event: ClickEvent) => { 48 .onClick((event: ClickEvent) => {
49 ProcessUtils.processPage(this.contentDTO) 49 ProcessUtils.processPage(this.contentDTO)
50 }) 50 })
51 - 51 + if (this.contentDTO.objectType == '5') {
52 Notes({ objectType: 5 }).margin({ left: 5, bottom: 5 }) 52 Notes({ objectType: 5 }).margin({ left: 5, bottom: 5 })
  53 + }
53 }.alignContent(Alignment.BottomStart) 54 }.alignContent(Alignment.BottomStart)
54 55
55 // 专题列表--后端返回三个, 56 // 专题列表--后端返回三个,
@@ -106,7 +107,7 @@ export struct Card10Component { @@ -106,7 +107,7 @@ export struct Card10Component {
106 .fontColor($r('app.color.color_222222')) 107 .fontColor($r('app.color.color_222222'))
107 .maxLines(2) 108 .maxLines(2)
108 .textOverflow({ overflow: TextOverflow.Ellipsis }) 109 .textOverflow({ overflow: TextOverflow.Ellipsis })
109 - .textIndent(item.objectType == '5' ? 40 : 0) 110 + .textIndent(item.objectType == '5' ? 38 : 0)
110 }.alignContent(Alignment.TopStart) 111 }.alignContent(Alignment.TopStart)
111 112
112 CardSourceInfo( 113 CardSourceInfo(
@@ -40,7 +40,7 @@ export struct Card2Component { @@ -40,7 +40,7 @@ export struct Card2Component {
40 .maxLines(2) 40 .maxLines(2)
41 .textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。 41 .textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。
42 .align(Alignment.Start) 42 .align(Alignment.Start)
43 - .textIndent(this.contentDTO.objectType == '5' ? 40 : 0) 43 + .textIndent(this.contentDTO.objectType == '5' ? 35 : 0)
44 } 44 }
45 .alignContent(Alignment.TopStart) 45 .alignContent(Alignment.TopStart)
46 46
@@ -12,7 +12,7 @@ const TAG: string = 'Card5Component'; @@ -12,7 +12,7 @@ const TAG: string = 'Card5Component';
12 @Component 12 @Component
13 export struct Card5Component { 13 export struct Card5Component {
14 @State contentDTO: ContentDTO = new ContentDTO(); 14 @State contentDTO: ContentDTO = new ContentDTO();
15 - @State titleShowPolicy: number | string = 1 15 + @Prop titleShowPolicy: number | string
16 @State loadImg: boolean = false; 16 @State loadImg: boolean = false;
17 @State clicked: boolean = false; 17 @State clicked: boolean = false;
18 18
@@ -22,12 +22,13 @@ export struct Card5Component { @@ -22,12 +22,13 @@ export struct Card5Component {
22 22
23 build() { 23 build() {
24 Stack() { 24 Stack() {
  25 +
25 Image(this.loadImg ? this.contentDTO.coverUrl : '') 26 Image(this.loadImg ? this.contentDTO.coverUrl : '')
26 .backgroundColor(0xf5f5f5) 27 .backgroundColor(0xf5f5f5)
27 .width(CommonConstants.FULL_WIDTH) 28 .width(CommonConstants.FULL_WIDTH)
28 .autoResize(true) 29 .autoResize(true)
29 .borderRadius($r('app.float.image_border_radius')) 30 .borderRadius($r('app.float.image_border_radius'))
30 - // if ((this.titleShowPolicy === 1 || this.contentDTO.titleShow === 1) && this.contentDTO.newsTitle) { 31 + if (this.titleShowPolicy === 1) {
31 Row() 32 Row()
32 .width(CommonConstants.FULL_WIDTH) 33 .width(CommonConstants.FULL_WIDTH)
33 .height(59) 34 .height(59)
@@ -41,20 +42,21 @@ export struct Card5Component { @@ -41,20 +42,21 @@ export struct Card5Component {
41 if (this.contentDTO.objectType == '5') { 42 if (this.contentDTO.objectType == '5') {
42 Notes({ objectType: this.contentDTO.objectType }) 43 Notes({ objectType: this.contentDTO.objectType })
43 } 44 }
  45 +
44 Text(this.contentDTO.newsTitle) 46 Text(this.contentDTO.newsTitle)
45 - .width(CommonConstants.FULL_WIDTH)// .height(CommonConstants.FULL_HEIGHT) 47 + .width(CommonConstants.FULL_WIDTH)
46 .fontColor(Color.White) 48 .fontColor(Color.White)
47 .fontSize($r('app.float.normal_text_size')) 49 .fontSize($r('app.float.normal_text_size'))
48 .fontWeight(FontWeight.Bold) 50 .fontWeight(FontWeight.Bold)
49 .maxLines(2) 51 .maxLines(2)
50 .align(Alignment.TopStart) 52 .align(Alignment.TopStart)
51 - .textIndent(this.contentDTO.objectType == '5' ? 40 : 0) 53 + .textIndent(this.contentDTO.objectType == '5' ? 35 : 0)
52 }.alignContent(Alignment.TopStart) 54 }.alignContent(Alignment.TopStart)
53 } 55 }
54 .justifyContent(FlexAlign.Start) 56 .justifyContent(FlexAlign.Start)
55 - // .height(40)  
56 .margin({ left: 12, bottom: 10, right: 12 }) 57 .margin({ left: 12, bottom: 10, right: 12 })
57 - // } 58 +
  59 + }
58 } 60 }
59 .alignContent(Alignment.Bottom) 61 .alignContent(Alignment.Bottom)
60 .width(CommonConstants.FULL_WIDTH) 62 .width(CommonConstants.FULL_WIDTH)
@@ -49,7 +49,7 @@ export struct Card6Component { @@ -49,7 +49,7 @@ export struct Card6Component {
49 .maxLines(3) 49 .maxLines(3)
50 .alignSelf(ItemAlign.Start) 50 .alignSelf(ItemAlign.Start)
51 .textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。 51 .textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。
52 - .textIndent(this.contentDTO.newTags?.length < 5 && this.contentDTO.newTags?.length > 2 ? 60 : 52 + .textIndent(this.contentDTO.newTags?.length < 5 && this.contentDTO.newTags?.length > 2 ? 58 :
53 (this.contentDTO.newTags?.length != 0 && this.contentDTO.newTags?.length) || 53 (this.contentDTO.newTags?.length != 0 && this.contentDTO.newTags?.length) ||
54 this.contentDTO.objectType == '5' ? 30 : 0) 54 this.contentDTO.objectType == '5' ? 30 : 0)
55 }.alignContent(Alignment.TopStart) 55 }.alignContent(Alignment.TopStart)
@@ -43,8 +43,11 @@ export struct Card9Component { @@ -43,8 +43,11 @@ export struct Card9Component {
43 topRight: $r('app.float.image_border_radius') 43 topRight: $r('app.float.image_border_radius')
44 }) 44 })
45 45
  46 + if (this.contentDTO.objectType == '5') {
46 Notes({ objectType: 5 }) 47 Notes({ objectType: 5 })
47 .margin({ left: 5, bottom: 5 }) 48 .margin({ left: 5, bottom: 5 })
  49 + }
  50 +
48 }.alignContent(Alignment.BottomStart) 51 }.alignContent(Alignment.BottomStart)
49 52
50 // 时间线--后端返回三个, 53 // 时间线--后端返回三个,
@@ -13,10 +13,10 @@ export struct Notes { @@ -13,10 +13,10 @@ export struct Notes {
13 build() { 13 build() {
14 if (this.returnTypeTitleFn()) { 14 if (this.returnTypeTitleFn()) {
15 Text(this.returnTypeTitleFn()) 15 Text(this.returnTypeTitleFn())
16 - .fontSize($r('app.float.font_size_12')) 16 + .fontSize($r('app.float.font_size_11'))
17 .padding({ 17 .padding({
18 - left: 5,  
19 - right: 5, 18 + left: 4,
  19 + right: 4,
20 top: 3, 20 top: 3,
21 bottom: 3 21 bottom: 3
22 }) 22 })
@@ -214,7 +214,7 @@ struct CarouselLayout01CardView { @@ -214,7 +214,7 @@ struct CarouselLayout01CardView {
214 .align(Alignment.Bottom) 214 .align(Alignment.Bottom)
215 .maxLines(CompUtils.MAX_LINES_2) 215 .maxLines(CompUtils.MAX_LINES_2)
216 .textOverflow({ overflow: TextOverflow.Ellipsis }) 216 .textOverflow({ overflow: TextOverflow.Ellipsis })
217 - .textIndent(this.item.objectType == '5' ? 40 : 0) 217 + .textIndent(this.item.objectType == '5' ? 35 : 0)
218 } 218 }
219 // .height(39) 219 // .height(39)
220 .padding({ 220 .padding({
@@ -40,6 +40,7 @@ export struct ZhSingleRow03 { @@ -40,6 +40,7 @@ export struct ZhSingleRow03 {
40 40
41 // 请求所有预约状态 41 // 请求所有预约状态
42 async getReserveState() { 42 async getReserveState() {
  43 + this.reservedIds = []
43 const reserveBean: reserveReqItem[] = this.compDTO.operDataList.map((item: ContentDTO) => { 44 const reserveBean: reserveReqItem[] = this.compDTO.operDataList.map((item: ContentDTO) => {
44 const reqItem: reserveReqItem = { 45 const reqItem: reserveReqItem = {
45 liveId: item.objectId.toString(), 46 liveId: item.objectId.toString(),
1 -import { commentInfo, CompDTO, ContentDTO, Params } from 'wdBean'; 1 +import { commentInfo, CompDTO, ContentDTO, Params, batchLikeAndCollectResult } from 'wdBean';
2 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'; 2 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
3 -import { DateTimeUtils, SPHelper } from 'wdKit/Index'; 3 +import { DateTimeUtils, SPHelper, Logger } from 'wdKit/Index';
4 import { ProcessUtils } from 'wdRouter'; 4 import { ProcessUtils } from 'wdRouter';
5 import { SpConstants } from 'wdConstant/Index' 5 import { SpConstants } from 'wdConstant/Index'
  6 +import {
  7 + batchLikeAndCollectParams,
  8 +} from 'wdDetailPlayApi/src/main/ets/request/ContentDetailRequest';
  9 +import { MultiPictureDetailViewModel } from '../../viewmodel/MultiPictureDetailViewModel';
  10 +import commentViewModel from '../../components/comment/viewmodel/CommentViewModel';
  11 +import { commentItemModel } from '../../components/comment/model/CommentModel'
6 12
7 /** 13 /**
8 * 精选评论卡 14 * 精选评论卡
9 * Zh_Single_Row-06 15 * Zh_Single_Row-06
10 */ 16 */
11 const TAG = 'Zh_Single_Row-06' 17 const TAG = 'Zh_Single_Row-06'
12 -  
13 -// interface commentInfo {  
14 -// commentTitle: string,  
15 -// newsTitle: string,  
16 -// userName: string,  
17 -// userHeaderUrl: string,  
18 -// publishTime: number  
19 -// }  
20 -// interface operDataListItem {  
21 -// commentInfo: commentInfo  
22 -// }  
23 -// interface CommentData{  
24 -// operDataList: Array<operDataListItem>  
25 -// }  
26 -  
27 @Entry 18 @Entry
28 @Component 19 @Component
29 export struct ZhSingleRow06 { 20 export struct ZhSingleRow06 {
30 @State compDTO: CompDTO = {} as CompDTO 21 @State compDTO: CompDTO = {} as CompDTO
31 - @State likeBl: boolean = false; 22 + @State newsStatusOfUser: batchLikeAndCollectResult = {
  23 + likeStatus: '0'
  24 + } as batchLikeAndCollectResult // 点赞、收藏状态
  25 +
  26 + aboutToAppear(): void {
  27 + this.getInteractDataStatus()
  28 + }
32 29
33 - async likeAction() { 30 + /**
  31 + * 点赞、取消点赞
  32 + */
  33 + async toggleLikeStatus() {
  34 + // 未登录,跳转登录
34 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '') 35 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
35 if (!user_id) { 36 if (!user_id) {
36 WDRouterRule.jumpWithPage(WDRouterPage.loginPage) 37 WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
37 return 38 return
38 } 39 }
39 40
40 - if (this.likeBl) {  
41 - this.likeBl = false;  
42 - } else {  
43 - this.likeBl = true; 41 + const commentInfo = this.compDTO.operDataList[0]?.commentInfo as commentInfo;
  42 + // commentLikeChange(this.item)
  43 + this.newsStatusOfUser.likeStatus = this.newsStatusOfUser.likeStatus === '1' ? '0' : '1';
  44 + const commentLikeParam = {
  45 + targetId: commentInfo.newsId || '',
  46 + id: commentInfo.commentId,
  47 + targetType: commentInfo?.objectType || '',
  48 + api_status: this.newsStatusOfUser?.likeStatus == '1' ? false : true
  49 + } as commentItemModel;
  50 + commentViewModel.commentLike(commentLikeParam).then(() => {
  51 + }).catch(() => {
  52 + this.newsStatusOfUser.likeStatus = this.newsStatusOfUser.likeStatus === '1' ? '0' : '1';
  53 + })
  54 + }
  55 +
  56 + // 已登录->查询用户对作品点赞、收藏状态
  57 + async getInteractDataStatus() {
  58 + // 未登录,跳转登录
  59 + const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
  60 + if (!user_id) {
  61 + return
  62 + }
  63 + try {
  64 + const params: batchLikeAndCollectParams = {
  65 + contentList: [
  66 + {
  67 + contentId: this.compDTO.operDataList[0]?.commentInfo?.newsId + '',
  68 + contentType: this.compDTO.operDataList[0]?.commentInfo?.newsType + '',
  69 + }
  70 + ]
  71 + }
  72 + let data = await MultiPictureDetailViewModel.getInteractDataStatus(params)
  73 + Logger.info(TAG, 'ZhSingleRow06-data', JSON.stringify(data))
  74 + this.newsStatusOfUser = data[0];
  75 + Logger.info(TAG, `ZhSingleRow06-newsStatusOfUser:${JSON.stringify(this.newsStatusOfUser)}`)
  76 + } catch (exception) {
  77 + console.error(TAG, JSON.stringify(exception))
44 } 78 }
45 } 79 }
46 80
@@ -95,7 +129,7 @@ export struct ZhSingleRow06 { @@ -95,7 +129,7 @@ export struct ZhSingleRow06 {
95 .fontColor(0x999999) 129 .fontColor(0x999999)
96 130
97 Row(){ 131 Row(){
98 - Image(this.likeBl ? $r('app.media.icon_like_select') : $r('app.media.icon_like')) 132 + Image(Number(this.newsStatusOfUser?.likeStatus) == 1 ? $r('app.media.icon_like_select') : $r('app.media.icon_like'))
99 .width(16) 133 .width(16)
100 .height(16) 134 .height(16)
101 .margin({right: 3}) 135 .margin({right: 3})
@@ -103,9 +137,11 @@ export struct ZhSingleRow06 { @@ -103,9 +137,11 @@ export struct ZhSingleRow06 {
103 Text('点赞') 137 Text('点赞')
104 .fontSize(15) 138 .fontSize(15)
105 .fontColor(0x999999) 139 .fontColor(0x999999)
  140 + .onClick(() => {
  141 + })
106 } 142 }
107 .onClick(() => { 143 .onClick(() => {
108 - this.likeAction() 144 + this.toggleLikeStatus()
109 }) 145 })
110 } 146 }
111 .justifyContent(FlexAlign.SpaceBetween) 147 .justifyContent(FlexAlign.SpaceBetween)
1 -import lottie, { AnimationSegment } from '@ohos/lottie'; 1 +import lottie, { AnimationItem, AnimationSegment } from '@ohos/lottie';
2 2
3 @Component 3 @Component
4 export struct LottieView { 4 export struct LottieView {
5 - @Prop name: string = ''  
6 - @Prop path: string = ''  
7 - @Prop lottieWidth?: number = 30  
8 - @Prop lottieHeight?: number = 30  
9 - @Prop autoplay?: boolean = false  
10 - @Prop loop?: boolean = false 5 + @Prop name: string
  6 + @Prop path: string
  7 + @Prop lottieWidth: number = 30
  8 + @Prop lottieHeight: number = 30
  9 + @Prop autoplay: boolean = false
  10 + @Prop loop: boolean = false
11 @Prop initialSegment?: AnimationSegment = [0, 120] // 动画起始帧 11 @Prop initialSegment?: AnimationSegment = [0, 120] // 动画起始帧
12 - @Prop onReady: (animateItem: ESObject) => void // 动画初始化完成事件 12 + @Prop onReady: (animateItem: AnimationItem | null) => void // 动画初始化完成事件
13 @Prop onComplete?: () => void // 动画完成事件 13 @Prop onComplete?: () => void // 动画完成事件
14 - private politeChickyController: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // CanvasRenderingContext2D对象  
15 - private animateItem: ESObject = null; // 初始化loadAnimation接口的返回对象 14 + private politeChickyController: CanvasRenderingContext2D =
  15 + new CanvasRenderingContext2D(); // CanvasRenderingContext2D对象
  16 + private animateItem: AnimationItem | null = null; // 初始化loadAnimation接口的返回对象
16 17
17 // 页面隐藏销毁动画 18 // 页面隐藏销毁动画
18 onPageHide(): void { 19 onPageHide(): void {
19 - this.animateItem.destroy() 20 + this.animateItem?.destroy()
20 21
21 if (this.onComplete) { 22 if (this.onComplete) {
22 - this.animateItem.removeEventListener('complete', this.onComplete) 23 + this.animateItem?.removeEventListener('complete', this.onComplete)
23 } 24 }
24 } 25 }
25 26
@@ -44,7 +45,7 @@ export struct LottieView { @@ -44,7 +45,7 @@ export struct LottieView {
44 // initialSegment: this.initialSegment 45 // initialSegment: this.initialSegment
45 }) 46 })
46 if (this.initialSegment) { 47 if (this.initialSegment) {
47 - this.animateItem.initialSegment = this.initialSegment 48 + this.animateItem.segments = this.initialSegment
48 } 49 }
49 50
50 if (this.onComplete) { 51 if (this.onComplete) {
@@ -57,7 +58,7 @@ export struct LottieView { @@ -57,7 +58,7 @@ export struct LottieView {
57 Stack({ alignContent: Alignment.TopStart }) { 58 Stack({ alignContent: Alignment.TopStart }) {
58 Canvas(this.politeChickyController) 59 Canvas(this.politeChickyController)
59 .width(this.lottieWidth) 60 .width(this.lottieWidth)
60 - .height(this.lottieHeight) 61 + .height(this.lottieHeight)// .backgroundColor(Color.Black)
61 .onReady(() => { 62 .onReady(() => {
62 this.loadAnimation(); 63 this.loadAnimation();
63 if (this.onReady) { 64 if (this.onReady) {
@@ -65,7 +66,7 @@ export struct LottieView { @@ -65,7 +66,7 @@ export struct LottieView {
65 } 66 }
66 }) 67 })
67 .onClick(() => { 68 .onClick(() => {
68 - this.animateItem.play() 69 + this.animateItem?.play()
69 }) 70 })
70 } 71 }
71 } 72 }
@@ -42,7 +42,8 @@ export default struct MinePagePersonFunctionUI { @@ -42,7 +42,8 @@ export default struct MinePagePersonFunctionUI {
42 WDRouterRule.jumpWithPage(WDRouterPage.loginPage) 42 WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
43 return 43 return
44 }else { 44 }else {
45 - WDRouterRule.jumpWithPage(WDRouterPage.mineHomePage) 45 + let params: Record<string, string> = {'comment': "1"};
  46 + WDRouterRule.jumpWithPage(WDRouterPage.mineHomePage,params)
46 } 47 }
47 break; 48 break;
48 } 49 }
1 import { SpConstants } from 'wdConstant/Index' 1 import { SpConstants } from 'wdConstant/Index'
2 -import { DateTimeUtils, SPHelper, StringUtils, ToastUtils, UserDataLocal } from 'wdKit/Index' 2 +import { SPHelper, StringUtils, ToastUtils, UserDataLocal } from 'wdKit/Index'
3 import { HttpUtils } from 'wdNetwork/Index' 3 import { HttpUtils } from 'wdNetwork/Index'
4 import { WDRouterRule, WDRouterPage } from 'wdRouter/Index' 4 import { WDRouterRule, WDRouterPage } from 'wdRouter/Index'
5 import MinePageDatasModel from '../../../model/MinePageDatasModel' 5 import MinePageDatasModel from '../../../model/MinePageDatasModel'
@@ -116,9 +116,14 @@ export struct FollowChildComponent{ @@ -116,9 +116,14 @@ export struct FollowChildComponent{
116 }.height('202lpx') 116 }.height('202lpx')
117 .justifyContent(FlexAlign.Start) 117 .justifyContent(FlexAlign.Start)
118 118
119 - Text().backgroundColor($r('app.color.color_EDEDED')) 119 + // Text().backgroundColor($r('app.color.color_EDEDED'))
  120 + // .width('100%')
  121 + // .height('2lpx')
  122 + Divider()
120 .width('100%') 123 .width('100%')
121 .height('2lpx') 124 .height('2lpx')
  125 + .color($r('app.color.color_F5F5F5'))
  126 + .strokeWidth('1lpx')
122 }.width('100%') 127 }.width('100%')
123 128
124 }else { 129 }else {
@@ -230,9 +235,15 @@ export struct FollowChildComponent{ @@ -230,9 +235,15 @@ export struct FollowChildComponent{
230 }.height('146lpx') 235 }.height('146lpx')
231 .justifyContent(FlexAlign.Center) 236 .justifyContent(FlexAlign.Center)
232 237
233 - Text().backgroundColor($r('app.color.color_EDEDED')) 238 + // Text().backgroundColor($r('app.color.color_EDEDED'))
  239 + // .width('100%')
  240 + // .height('2lpx')
  241 +
  242 + Divider()
234 .width('100%') 243 .width('100%')
235 .height('2lpx') 244 .height('2lpx')
  245 + .color($r('app.color.color_F5F5F5'))
  246 + .strokeWidth('1lpx')
236 }.width('100%') 247 }.width('100%')
237 248
238 } 249 }
@@ -255,12 +266,6 @@ export struct FollowChildComponent{ @@ -255,12 +266,6 @@ export struct FollowChildComponent{
255 this.data.status = this.data.status ==="0"?"1":"0" 266 this.data.status = this.data.status ==="0"?"1":"0"
256 267
257 UserDataLocal.setUserFollowOperation(this.data.creatorId+","+this.data.status) 268 UserDataLocal.setUserFollowOperation(this.data.creatorId+","+this.data.status)
258 -  
259 - // if(this.data.status === "1"){  
260 - // UserDataLocal.setUserFollowOperation(DateTimeUtils.getTimeStamp()+"")  
261 - // }else{  
262 - // UserDataLocal.setUserFollowOperation(DateTimeUtils.getTimeStamp()+","+this.data.creatorId)  
263 - // }  
264 } 269 }
265 } 270 }
266 }) 271 })
@@ -85,6 +85,7 @@ export struct BottomNavigationComponent { @@ -85,6 +85,7 @@ export struct BottomNavigationComponent {
85 VideoChannelPage({ 85 VideoChannelPage({
86 topNavList: navItem.topNavChannelList.filter(item => item.channelId != 2073), 86 topNavList: navItem.topNavChannelList.filter(item => item.channelId != 2073),
87 _currentNavIndex: $currentNavIndex, 87 _currentNavIndex: $currentNavIndex,
  88 + autoRefresh: this.autoRefresh
88 }) 89 })
89 } else { 90 } else {
90 TopNavigationComponent({ 91 TopNavigationComponent({
1 import { BottomNavDTO, CompDTO, TopNavDTO } from 'wdBean'; 1 import { BottomNavDTO, CompDTO, TopNavDTO } from 'wdBean';
2 import { SpConstants } from 'wdConstant'; 2 import { SpConstants } from 'wdConstant';
3 -import { DisplayUtils, LazyDataSource, Logger, SPHelper, NetworkUtil, ToastUtils } from 'wdKit'; 3 +import { DisplayUtils, LazyDataSource, Logger, NetworkUtil, SPHelper, ToastUtils } from 'wdKit';
4 import { ProcessUtils, WDRouterPage, WDRouterRule } from 'wdRouter'; 4 import { ProcessUtils, WDRouterPage, WDRouterRule } from 'wdRouter';
5 import { PageComponent } from './PageComponent'; 5 import { PageComponent } from './PageComponent';
6 import { ChannelSubscriptionLayout } from './ChannelSubscriptionLayout'; 6 import { ChannelSubscriptionLayout } from './ChannelSubscriptionLayout';
@@ -13,6 +13,8 @@ export struct VideoChannelPage { @@ -13,6 +13,8 @@ export struct VideoChannelPage {
13 readonly MAX_LINE: number = 1; 13 readonly MAX_LINE: number = 1;
14 private groupId: number = 0 14 private groupId: number = 0
15 private swiperController: SwiperController = new SwiperController() 15 private swiperController: SwiperController = new SwiperController()
  16 + // 自动刷新触发(双击tab自动刷新)
  17 + @Prop autoRefresh: number = 0
16 @Prop topNavList: TopNavDTO[] 18 @Prop topNavList: TopNavDTO[]
17 @Link _currentNavIndex?: number; 19 @Link _currentNavIndex?: number;
18 @Consume barBackgroundColor: Color 20 @Consume barBackgroundColor: Color
@@ -91,8 +93,12 @@ export struct VideoChannelPage { @@ -91,8 +93,12 @@ export struct VideoChannelPage {
91 right: $r('app.float.top_tab_item_padding_horizontal'), 93 right: $r('app.float.top_tab_item_padding_horizontal'),
92 }) 94 })
93 .onClick(() => { 95 .onClick(() => {
  96 + if (this.currentTopNavSelectedIndex === index) {
  97 + this.autoRefresh++
  98 + }
94 this.currentTopNavSelectedIndex = index 99 this.currentTopNavSelectedIndex = index
95 this.swiperController.changeIndex(index, true) 100 this.swiperController.changeIndex(index, true)
  101 +
96 }) 102 })
97 }, (item: TopNavDTO) => item.channelId + '') 103 }, (item: TopNavDTO) => item.channelId + '')
98 } 104 }
@@ -113,6 +119,7 @@ export struct VideoChannelPage { @@ -113,6 +119,7 @@ export struct VideoChannelPage {
113 groupId: this.groupId + '', 119 groupId: this.groupId + '',
114 pageId: item.pageId + '', 120 pageId: item.pageId + '',
115 channelId: item.channelId + '', 121 channelId: item.channelId + '',
  122 + autoRefresh: this.autoRefresh,
116 }) 123 })
117 } else { 124 } else {
118 // 直播 125 // 直播
@@ -121,7 +128,7 @@ export struct VideoChannelPage { @@ -121,7 +128,7 @@ export struct VideoChannelPage {
121 navIndex: index, 128 navIndex: index,
122 pageId: item.pageId + '', 129 pageId: item.pageId + '',
123 channelId: item.channelId + '', 130 channelId: item.channelId + '',
124 - autoRefresh: this.autoRefresh2Page 131 + autoRefresh: this.autoRefresh
125 }).margin({ top: 40 }) 132 }).margin({ top: 40 })
126 } 133 }
127 }, (item: TopNavDTO) => item.channelId + '') 134 }, (item: TopNavDTO) => item.channelId + '')
1 -import { ContentDTO, 1 +import {
  2 + ContentDTO,
2 contentListParams, 3 contentListParams,
3 - FullColumnImgUrlDTO, InteractDataDTO, 4 + FullColumnImgUrlDTO,
  5 + InteractDataDTO,
4 Params, 6 Params,
5 - RmhInfoDTO, VideoInfoDTO } from 'wdBean/Index' 7 + RmhInfoDTO,
  8 + VideoInfoDTO
  9 +} from 'wdBean/Index'
6 import { LiveInfoDTO } from 'wdBean/src/main/ets/bean/detail/LiveInfoDTO' 10 import { LiveInfoDTO } from 'wdBean/src/main/ets/bean/detail/LiveInfoDTO'
7 import { VoiceInfoDTO } from 'wdBean/src/main/ets/bean/detail/VoiceInfoDTO' 11 import { VoiceInfoDTO } from 'wdBean/src/main/ets/bean/detail/VoiceInfoDTO'
8 -import { LazyDataSource, Logger, StringUtils, ToastUtils } from 'wdKit/Index' 12 +import { LazyDataSource, Logger, StringUtils, ToastUtils, UserDataLocal } from 'wdKit/Index'
9 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index' 13 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'
  14 +import MinePageDatasModel from '../../model/MinePageDatasModel'
10 import SearcherAboutDataModel from '../../model/SearcherAboutDataModel' 15 import SearcherAboutDataModel from '../../model/SearcherAboutDataModel'
11 import { CreatorDetailRequestItem } from '../../viewmodel/CreatorDetailRequestItem' 16 import { CreatorDetailRequestItem } from '../../viewmodel/CreatorDetailRequestItem'
  17 +import { FollowListDetailItem } from '../../viewmodel/FollowListDetailItem'
  18 +import { FollowListStatusRequestItem } from '../../viewmodel/FollowListStatusRequestItem'
  19 +import { QueryListIsFollowedItem } from '../../viewmodel/QueryListIsFollowedItem'
12 import { SearchResultContentData } from '../../viewmodel/SearchResultContentData' 20 import { SearchResultContentData } from '../../viewmodel/SearchResultContentData'
13 import { SearchResultContentItem, SearchRmhDescription } from '../../viewmodel/SearchResultContentItem' 21 import { SearchResultContentItem, SearchRmhDescription } from '../../viewmodel/SearchResultContentItem'
14 import { CardParser } from '../CardParser' 22 import { CardParser } from '../CardParser'
  23 +import { FollowChildComponent } from '../mine/follow/FollowChildComponent'
15 import { ListHasNoMoreDataUI } from '../reusable/ListHasNoMoreDataUI' 24 import { ListHasNoMoreDataUI } from '../reusable/ListHasNoMoreDataUI'
16 import { ActivityItemComponent } from './ActivityItemComponent' 25 import { ActivityItemComponent } from './ActivityItemComponent'
17 import { SearchCreatorComponent } from './SearchCreatorComponent' 26 import { SearchCreatorComponent } from './SearchCreatorComponent'
@@ -19,27 +28,28 @@ import { SearchCreatorComponent } from './SearchCreatorComponent' @@ -19,27 +28,28 @@ import { SearchCreatorComponent } from './SearchCreatorComponent'
19 const TAG = "SearchResultContentComponent" 28 const TAG = "SearchResultContentComponent"
20 29
21 @Component 30 @Component
22 -export struct SearchResultContentComponent{  
23 - @State keywords:string = ""  
24 - @State searchType:string = "" 31 +export struct SearchResultContentComponent {
  32 + @State keywords: string = ""
  33 + @State searchType: string = ""
25 @State data: LazyDataSource<ContentDTO> = new LazyDataSource(); 34 @State data: LazyDataSource<ContentDTO> = new LazyDataSource();
26 @State data_rmh: SearchRmhDescription[] = [] 35 @State data_rmh: SearchRmhDescription[] = []
27 - @State count:number = -1;  
28 - @State isLoading:boolean = false  
29 - @State hasMore:boolean = true  
30 - curPageNum:number = 1;  
31 - 36 + @State count: number = -1;
  37 + @State isLoading: boolean = false
  38 + @State hasMore: boolean = true
  39 + curPageNum: number = 1;
  40 + @State bean: FollowListDetailItem = new FollowListDetailItem("", "", "", "", "", "", "", "", "", -1, -1, "")
  41 + scroller: Scroller = new Scroller()
32 42
33 aboutToAppear(): void { 43 aboutToAppear(): void {
34 - if(this.searchType == "全部"){ 44 + if (this.searchType == "全部") {
35 this.searchType = "all" 45 this.searchType = "all"
36 - }else if(this.searchType == "精选"){ 46 + } else if (this.searchType == "精选") {
37 this.searchType = "cms" 47 this.searchType = "cms"
38 - }else if(this.searchType == "人民号"){ 48 + } else if (this.searchType == "人民号") {
39 this.searchType = "rmh" 49 this.searchType = "rmh"
40 - }else if(this.searchType == "视频"){ 50 + } else if (this.searchType == "视频") {
41 this.searchType = "video" 51 this.searchType = "video"
42 - }else if(this.searchType == "活动"){ 52 + } else if (this.searchType == "活动") {
43 this.searchType = "activity" 53 this.searchType = "activity"
44 } 54 }
45 55
@@ -47,93 +57,135 @@ export struct SearchResultContentComponent{ @@ -47,93 +57,135 @@ export struct SearchResultContentComponent{
47 this.getNewSearchResultData() 57 this.getNewSearchResultData()
48 } 58 }
49 59
50 - getNewSearchResultData(){ 60 + getNewSearchResultData() {
51 this.isLoading = true 61 this.isLoading = true
52 - if(this.hasMore){  
53 - SearcherAboutDataModel.getSearchResultListData("20",`${this.curPageNum}`,this.searchType,this.keywords,getContext(this)).then((value)=>{  
54 - if (!this.data || value.list.length == 0){ 62 + if (this.hasMore) {
  63 + SearcherAboutDataModel.getSearchResultListData("15", `${this.curPageNum}`, this.searchType, this.keywords,
  64 + getContext(this)).then((value) => {
  65 + if (!this.data || value.list.length == 0) {
55 this.hasMore = false 66 this.hasMore = false
56 this.isLoading = false 67 this.isLoading = false
57 - this.count = this.count===-1?0:this.count  
58 - }else{  
59 - if(value.list[0].dataList!=null){ 68 + this.count = this.count === -1 ? 0 : this.count
  69 + } else {
  70 + if (value.list[0].dataList != null) {
60 let data_temp: SearchRmhDescription[] = [] 71 let data_temp: SearchRmhDescription[] = []
  72 +
61 data_temp = value.list[0].dataList 73 data_temp = value.list[0].dataList
62 74
63 //TODO 查询创作者详情接口 75 //TODO 查询创作者详情接口
64 let request = new CreatorDetailRequestItem() 76 let request = new CreatorDetailRequestItem()
65 77
66 - data_temp.forEach((data)=>{ 78 + data_temp.forEach((data) => {
67 request.creatorIdList.push(data.creatorId) 79 request.creatorIdList.push(data.creatorId)
68 }) 80 })
69 81
70 - SearcherAboutDataModel.getCreatorDetailListData(request).then((value)=>{  
71 - if(value!=null && value.length>0){  
72 - data_temp.forEach((data)=>{  
73 - value.forEach((item)=>{  
74 - if(data.creatorId == item.creatorId){ 82 + SearcherAboutDataModel.getCreatorDetailListData(request).then((value) => {
  83 + if (value != null && value.length > 0) {
  84 + data_temp.forEach((data) => {
  85 + value.forEach((item) => {
  86 + if (data.creatorId == item.creatorId) {
75 data.headerPhotoUrl = item.headPhotoUrl.split("?")[0] 87 data.headerPhotoUrl = item.headPhotoUrl.split("?")[0]
76 - data.mainControl = item.mainControl+"" 88 + data.mainControl = item.mainControl + ""
  89 +
  90 + if(data_temp.length === 1){
  91 + this.bean.headPhotoUrl = item.headPhotoUrl.split("?")[0]
  92 + this.bean.cnUserName = item.userName
  93 + this.bean.creatorId = item.creatorId
  94 + this.bean.authIcon = item.authIcon
  95 +
  96 + if (value[0].fansNum > 10000) {
  97 + let temp = (value[0].fansNum / 10000) + ""
  98 + let index = temp.indexOf('.')
  99 + if (index != -1) {
  100 + temp = temp.substring(0, index + 2)
  101 + } else {
  102 + temp = temp
  103 + }
  104 + this.bean.cnFansNum = temp + "万"
  105 + } else {
  106 + this.bean.cnFansNum = item.fansNum + ""
  107 + }
  108 + this.bean.introduction = item.introduction
  109 + this.bean.mainControl = item.mainControl
  110 + this.bean.banControl = item.banControl
  111 + this.bean.cnUserType = item.userType
  112 + this.bean.cnUserId = item.userId
  113 + }
77 } 114 }
78 }) 115 })
79 }) 116 })
80 } 117 }
81 - data_temp.forEach((data)=>{ 118 + data_temp.forEach((data) => {
82 this.data_rmh.push(data) 119 this.data_rmh.push(data)
83 }) 120 })
84 121
85 - }).catch((err:Error)=>{  
86 - console.log(TAG,JSON.stringify(err)) 122 + //只有一条创作者,获取 创作者信息
  123 + if (this.data_rmh.length === 1) {
  124 + if(StringUtils.isNotEmpty(UserDataLocal.getUserId())){
  125 + //查询是否被关注
  126 + let status = new FollowListStatusRequestItem()
  127 + status.creatorIds.push(new QueryListIsFollowedItem(this.data_rmh[0].creatorId))
  128 + MinePageDatasModel.getFollowListStatusData(status, getContext(this)).then((newValue) => {
  129 + this.bean.status = newValue[0].status
  130 + }).catch((err: Error) => {
  131 + console.log(TAG, "请求失败")
  132 + })
  133 + }else{
  134 + this.bean.status = ""
  135 + }
  136 + }
  137 + }).catch((err: Error) => {
  138 + console.log(TAG, JSON.stringify(err))
87 }) 139 })
88 } 140 }
89 this.getInteractData(value) 141 this.getInteractData(value)
90 } 142 }
91 - }).catch((err:Error)=>{  
92 - console.log(TAG,JSON.stringify(err)) 143 + }).catch((err: Error) => {
  144 + console.log(TAG, JSON.stringify(err))
93 this.isLoading = false 145 this.isLoading = false
94 - this.count = this.count===-1?0:this.count 146 + this.count = this.count === -1 ? 0 : this.count
95 }) 147 })
96 } 148 }
97 } 149 }
98 150
99 - getInteractData(resultData:SearchResultContentData){  
100 - if(resultData.list[0].dataList!=null){  
101 - resultData.list.splice(0,1) 151 + getInteractData(resultData: SearchResultContentData) {
  152 + if (resultData.list[0].dataList != null) {
  153 + resultData.list.splice(0, 1)
102 } 154 }
103 155
104 - let data : contentListParams = { 156 + let data: contentListParams = {
105 contentList: [] 157 contentList: []
106 } 158 }
107 - resultData.list.forEach((item)=>{ 159 + resultData.list.forEach((item) => {
108 data.contentList.push({ 160 data.contentList.push({
109 contentId: item.data.id + '', 161 contentId: item.data.id + '',
110 contentType: Number.parseInt(item.data.type) 162 contentType: Number.parseInt(item.data.type)
111 }) 163 })
112 }) 164 })
113 165
114 - SearcherAboutDataModel.getInteractListData(data,getContext(this)).then((newValue)=>{  
115 - newValue.forEach((item)=>{  
116 - resultData.list.forEach((data)=>{ 166 + SearcherAboutDataModel.getInteractListData(data, getContext(this)).then((newValue) => {
  167 + newValue.forEach((item) => {
  168 + resultData.list.forEach((data) => {
117 if (item.contentId == data.data.id) { 169 if (item.contentId == data.data.id) {
118 - data.data.collectNum = item.collectNum+""  
119 - data.data.commentNum = item.commentNum+""  
120 - data.data.likeNum = item.likeNum+""  
121 - data.data.readNum = item.readNum+""  
122 - data.data.shareNum = item.shareNum+"" 170 + data.data.collectNum = item.collectNum + ""
  171 + data.data.commentNum = item.commentNum + ""
  172 + data.data.likeNum = item.likeNum + ""
  173 + data.data.readNum = item.readNum + ""
  174 + data.data.shareNum = item.shareNum + ""
123 } 175 }
124 }) 176 })
125 }) 177 })
126 178
127 - resultData.list.forEach((value)=>{  
128 - let photos:FullColumnImgUrlDTO[] = []  
129 - if(value.data.appStyle === 4){  
130 - value.data.appStyleImages.split("&&").forEach((value)=>{  
131 - photos.push({url:value} as FullColumnImgUrlDTO) 179 + resultData.list.forEach((value) => {
  180 + let photos: FullColumnImgUrlDTO[] = []
  181 + if (value.data.appStyle === 4) {
  182 + value.data.appStyleImages.split("&&").forEach((value) => {
  183 + photos.push({ url: value } as FullColumnImgUrlDTO)
132 }) 184 })
133 } 185 }
134 186
135 - let contentDTO = this.dataTransform(value,photos);  
136 - if(contentDTO.appStyle != "13"){ 187 + let contentDTO = this.dataTransform(value, photos);
  188 + if (contentDTO.appStyle != "13") {
137 this.data.push(contentDTO) 189 this.data.push(contentDTO)
138 } 190 }
139 191
@@ -142,74 +194,128 @@ export struct SearchResultContentComponent{ @@ -142,74 +194,128 @@ export struct SearchResultContentComponent{
142 this.count = this.data.totalCount() 194 this.count = this.data.totalCount()
143 if (this.data.totalCount() < resultData.totalCount) { 195 if (this.data.totalCount() < resultData.totalCount) {
144 this.curPageNum++ 196 this.curPageNum++
145 - }else { 197 + } else {
146 this.hasMore = false 198 this.hasMore = false
147 } 199 }
148 this.isLoading = false 200 this.isLoading = false
149 201
150 - if(this.count === 0 && resultData.list.length > 0){ 202 + if (this.count === 0 && resultData.list.length > 0) {
151 this.count = -1 203 this.count = -1
152 - if(!this.isLoading){ 204 + if (!this.isLoading) {
153 //加载分页数据 205 //加载分页数据
154 this.getNewSearchResultData() 206 this.getNewSearchResultData()
155 } 207 }
156 - }else if(this.count <= 20 && resultData.list.length > 0){  
157 - if(!this.isLoading){ 208 + } else if (this.count <= 10 && resultData.list.length > 0) {
  209 + if (!this.isLoading) {
158 //加载分页数据 210 //加载分页数据
159 this.getNewSearchResultData() 211 this.getNewSearchResultData()
160 } 212 }
161 } 213 }
162 - }).catch((err:Error)=>{  
163 - console.log(TAG,"请求失败") 214 + }).catch((err: Error) => {
  215 + console.log(TAG, "请求失败")
164 this.isLoading = false 216 this.isLoading = false
165 - this.count = this.count===-1?0:this.count 217 + this.count = this.count === -1 ? 0 : this.count
166 }) 218 })
167 } 219 }
168 220
169 build() { 221 build() {
170 Column() { 222 Column() {
171 - if(this.count == 0){  
172 - ListHasNoMoreDataUI({style:2}) 223 + if (this.count == 0) {
  224 + ListHasNoMoreDataUI({ style: 2 })
  225 + } else {
  226 + List() {
  227 + if (this.data_rmh != null && this.data_rmh.length > 0){
  228 + if (this.data_rmh.length === 1){
  229 + ListItem(){
  230 + FollowChildComponent({ data: this.bean, type: 1 })
  231 + }.padding({left:"31lpx",right:"31lpx"})
173 }else{ 232 }else{
  233 + ListItem(){
174 Column(){ 234 Column(){
175 - if (this.data_rmh!=null && this.data_rmh.length > 0) {  
176 - //List  
177 - List({space:'8lpx'}) {  
178 - ForEach(this.data_rmh, (item: SearchRmhDescription, index: number) => { 235 + this.SearchListUI()
  236 + }
  237 + }
  238 + }
  239 + }
  240 + LazyForEach(this.data, (item: ContentDTO, index: number) => {
179 ListItem() { 241 ListItem() {
180 - SearchCreatorComponent({item:item})  
181 - }.onClick(()=>{  
182 - //TODO 跳转 242 + Column() {
  243 + if (this.searchType == "activity") {
  244 + ActivityItemComponent({ contentDTO: item })
  245 + } else {
  246 + CardParser({ contentDTO: item })
  247 + }
  248 + if (index != this.data.totalCount() - 1) {
  249 + Divider()
  250 + .width('100%')
  251 + .height('1lpx')
  252 + .color($r('app.color.color_F5F5F5'))
  253 + .strokeWidth('1lpx')
  254 + }
  255 + }
  256 + }
  257 + }, (item: ContentDTO, index: number) => index.toString())
  258 +
  259 + //没有更多数据 显示提示
  260 + if (!this.hasMore && this.data.totalCount() > 0) {
  261 + ListItem() {
  262 + ListHasNoMoreDataUI()
  263 + }
  264 + }
  265 + }.cachedCount(10)
  266 + .edgeEffect(EdgeEffect.None)
  267 + .scrollBar(BarState.Off)
  268 + .onReachEnd(() => {
  269 + console.log(TAG, "触底了");
  270 + if (!this.isLoading) {
  271 + //加载分页数据
  272 + this.getNewSearchResultData()
  273 + }
183 }) 274 })
  275 + }
  276 + }
  277 + .backgroundColor($r('app.color.white'))
  278 + .width('100%')
  279 + }
  280 +
  281 + @Builder
  282 + multiCreatorUI() {
  283 + Column() {
  284 + List() {
  285 + ForEach(this.data_rmh, (item: SearchRmhDescription, index: number) => {
  286 + ListItem() {
  287 + SearchCreatorComponent({ item: item })
  288 + }
184 .width('150lpx') 289 .width('150lpx')
185 .height('100%') 290 .height('100%')
186 }) 291 })
187 292
188 - ListItem(){  
189 - Column(){ 293 + ListItem() {
  294 + Column() {
190 Text("查看更多") 295 Text("查看更多")
191 .width('19lpx') 296 .width('19lpx')
192 .fontSize('19lpx') 297 .fontSize('19lpx')
193 .fontWeight('400lpx') 298 .fontWeight('400lpx')
194 .lineHeight('27lpx') 299 .lineHeight('27lpx')
195 .fontColor($r('app.color.color_9E9E9E')) 300 .fontColor($r('app.color.color_9E9E9E'))
196 - }.borderRadius({topLeft:'4lpx',bottomLeft:'4lpx'}) 301 + }
  302 + .borderRadius({ topLeft: '4lpx', bottomLeft: '4lpx' })
197 .height('180lpx') 303 .height('180lpx')
198 .width('77lpx') 304 .width('77lpx')
199 .backgroundColor($r('app.color.color_EDEDED')) 305 .backgroundColor($r('app.color.color_EDEDED'))
200 .justifyContent(FlexAlign.Center) 306 .justifyContent(FlexAlign.Center)
201 307
202 }.height('100%') 308 }.height('100%')
203 - .margin({left:'23lpx'})  
204 - .onClick(()=>{ 309 + .margin({ left: '23lpx' })
  310 + .onClick(() => {
205 let params: Params = { 311 let params: Params = {
206 pageID: this.keywords 312 pageID: this.keywords
207 } 313 }
208 - WDRouterRule.jumpWithPage(WDRouterPage.searchCreatorPage,params) 314 + WDRouterRule.jumpWithPage(WDRouterPage.searchCreatorPage, params)
209 }) 315 })
210 } 316 }
211 .cachedCount(6) 317 .cachedCount(6)
212 - .edgeEffect(EdgeEffect.Spring) 318 + .edgeEffect(EdgeEffect.None)
213 .scrollBar(BarState.Off) 319 .scrollBar(BarState.Off)
214 .listDirection(Axis.Horizontal) 320 .listDirection(Axis.Horizontal)
215 .width('100%') 321 .width('100%')
@@ -221,50 +327,54 @@ export struct SearchResultContentComponent{ @@ -221,50 +327,54 @@ export struct SearchResultContentComponent{
221 .color($r('app.color.color_F5F5F5')) 327 .color($r('app.color.color_F5F5F5'))
222 .strokeWidth('12lpx') 328 .strokeWidth('12lpx')
223 } 329 }
224 - //List  
225 - List({ space: '6lpx' }) {  
226 - LazyForEach(this.data, (item: ContentDTO, index: number) => {  
227 - ListItem() {  
228 - Column(){  
229 - if(this.searchType == "activity"){  
230 - ActivityItemComponent({contentDTO:item})  
231 - }else{  
232 - CardParser({contentDTO:item})  
233 - }  
234 - if(index != this.data.totalCount()-1 ){  
235 - Divider()  
236 - .width('100%')  
237 - .height('1lpx')  
238 - .color($r('app.color.color_F5F5F5'))  
239 - .strokeWidth('1lpx')  
240 - }  
241 } 330 }
  331 +
  332 + @Builder
  333 + SearchListUI() {
  334 + List({space:'8lpx'}) {
  335 + ForEach(this.data_rmh, (item: SearchRmhDescription, index: number) => {
  336 + ListItem() {
  337 + SearchCreatorComponent({item:item})
242 } 338 }
243 - }, (item: ContentDTO, index: number) => index.toString()) 339 + .width('150lpx')
  340 + .height('100%')
  341 + })
244 342
245 - //没有更多数据 显示提示  
246 - if(!this.hasMore && this.data.totalCount() > 0){  
247 ListItem(){ 343 ListItem(){
248 - ListHasNoMoreDataUI() 344 + Column(){
  345 + Text("查看更多")
  346 + .width('19lpx')
  347 + .fontSize('19lpx')
  348 + .fontWeight('400lpx')
  349 + .lineHeight('27lpx')
  350 + .fontColor($r('app.color.color_9E9E9E'))
  351 + }.borderRadius({topLeft:'4lpx',bottomLeft:'4lpx'})
  352 + .height('180lpx')
  353 + .width('77lpx')
  354 + .backgroundColor($r('app.color.color_EDEDED'))
  355 + .justifyContent(FlexAlign.Center)
  356 +
  357 + }.height('100%')
  358 + .margin({left:'23lpx'})
  359 + .onClick(()=>{
  360 + let params: Params = {
  361 + pageID: this.keywords
249 } 362 }
  363 + WDRouterRule.jumpWithPage(WDRouterPage.searchCreatorPage,params)
  364 + })
250 } 365 }
251 - }.cachedCount(6) 366 + .cachedCount(6)
252 .edgeEffect(EdgeEffect.None) 367 .edgeEffect(EdgeEffect.None)
253 .scrollBar(BarState.Off) 368 .scrollBar(BarState.Off)
254 - .layoutWeight(1)  
255 - .onReachEnd(()=>{  
256 - console.log(TAG,"触底了");  
257 - if(!this.isLoading){  
258 - //加载分页数据  
259 - this.getNewSearchResultData()  
260 - }  
261 - })  
262 - }.layoutWeight(1)  
263 - }  
264 - }  
265 - .backgroundColor($r('app.color.white'))  
266 - .layoutWeight(1) 369 + .listDirection(Axis.Horizontal)
267 .width('100%') 370 .width('100%')
  371 + .height('219lpx')
  372 +
  373 + Divider()
  374 + .width('100%')
  375 + .height('12lpx')
  376 + .color($r('app.color.color_F5F5F5'))
  377 + .strokeWidth('12lpx')
268 } 378 }
269 379
270 private dataTransform(value: SearchResultContentItem, photos: FullColumnImgUrlDTO[]): ContentDTO { 380 private dataTransform(value: SearchResultContentItem, photos: FullColumnImgUrlDTO[]): ContentDTO {
1 -import { Logger } from 'wdKit/Index' 1 +import { Logger, NumberFormatterUtils } from 'wdKit/Index'
2 import { LikeViewModel } from '../../viewmodel/LikeViewModel' 2 import { LikeViewModel } from '../../viewmodel/LikeViewModel'
3 import { SPHelper } from 'wdKit'; 3 import { SPHelper } from 'wdKit';
4 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'; 4 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
5 import { SpConstants } from 'wdConstant/Index'; 5 import { SpConstants } from 'wdConstant/Index';
  6 +import { ContentDetailDTO } from 'wdBean/Index';
6 7
7 8
8 const TAG = 'LikeComponent'; 9 const TAG = 'LikeComponent';
9 10
  11 +interface ILikeStyleResp {
  12 + url: Resource;
  13 + name: string;
  14 +}
  15 +
10 @Component 16 @Component
11 export struct LikeComponent { 17 export struct LikeComponent {
  18 + @Consume contentDetailData: ContentDetailDTO
  19 + @State likesStyle: number = this.contentDetailData.likesStyle // 赞样式 1红心(点赞) 2大拇指(祈福) 3蜡烛(默哀) 4置空
12 @State likeStatus: boolean = false 20 @State likeStatus: boolean = false
13 viewModel: LikeViewModel = new LikeViewModel() 21 viewModel: LikeViewModel = new LikeViewModel()
14 @Prop data: Record<string, string> 22 @Prop data: Record<string, string>
15 enableBtn = true 23 enableBtn = true
16 - componentType : number = 1 //1: 底部栏目样式 2: 新闻页中间位置样式 3:动态Tab内容下的互动入口  
17 - styleType : number = 1 //1: 白色背景(图文底部栏) 2: 黑色背景(图集底部栏) 24 + componentType: number = 1 //1: 底部栏目样式 2: 新闻页中间位置样式 3:动态Tab内容下的互动入口
  25 + styleType: number = 1 //1: 白色背景(图文底部栏) 2: 黑色背景(图集底部栏)
18 @State likeCount: number = 0 //点赞数 26 @State likeCount: number = 0 //点赞数
19 27
20 //上层传值 样例 28 //上层传值 样例
@@ -37,14 +45,57 @@ export struct LikeComponent { @@ -37,14 +45,57 @@ export struct LikeComponent {
37 } 45 }
38 46
39 build() { 47 build() {
40 - if (this.componentType == 2){ 48 +
  49 + if (this.componentType == 2) {
41 //2: 新闻页中间位置样式 50 //2: 新闻页中间位置样式
42 - Column() { 51 + this.likeCompStyle2()
  52 + } else if (this.componentType == 3) {
  53 + this.likeCompStyle3()
  54 + } else if (this.componentType == 4) {
  55 + // 直播,点赞按钮底测有灰色圆角背景+右上点赞数量
  56 + this.likeCompStyle4()
  57 + } else {
  58 + //1: 底部栏目样式 默认样式
  59 + this.likeCompStyle1()
  60 + }
  61 + }
43 62
44 - Button(){ 63 + /**
  64 + * 将点赞样式转换为icon
  65 + */
  66 + transLikeStyle(): ILikeStyleResp {
  67 + if (this.likesStyle === 1) {
  68 + return {
  69 + url: this.likeStatus ? $r(`app.media.ic_like_check`) :
  70 + this.styleType == 1 ? $r('app.media.icon_like_default') : $r(`app.media.ic_like_uncheck`),
  71 + name: '赞'
  72 + }
  73 + } else if (this.likesStyle === 2) {
  74 + return {
  75 + url: this.likeStatus ? $r(`app.media.ic_thub_check`) : $r(`app.media.ic_thub_uncheck`),
  76 + name: '祈祷'
  77 + }
  78 + } else if (this.likesStyle === 3) {
  79 + return {
  80 + url: this.likeStatus ? $r(`app.media.ic_candle_check`) :
  81 + $r(`app.media.ic_candle_uncheck`),
  82 + name: '默哀'
  83 + }
  84 + }
  85 + return {
  86 + url: this.likeStatus ? $r(`app.media.ic_like_check`) :
  87 + this.styleType == 1 ? $r('app.media.icon_like_default') : $r(`app.media.ic_like_uncheck`),
  88 + name: '点赞'
  89 + }
  90 + }
45 91
46 - Row(){  
47 - Image(this.likeStatus ? $r('app.media.icon_like_select') : $r('app.media.icon_like_default')) 92 + @Builder
  93 + likeCompStyle2() {
  94 + //2: 新闻页中间位置样式
  95 + Column() {
  96 + Button() {
  97 + Row() {
  98 + Image(this.transLikeStyle().url)
48 .width(20) 99 .width(20)
49 .height(20) 100 .height(20)
50 Text(this.likeCount.toString()) 101 Text(this.likeCount.toString())
@@ -68,21 +119,23 @@ export struct LikeComponent { @@ -68,21 +119,23 @@ export struct LikeComponent {
68 .borderColor('#EDEDED') 119 .borderColor('#EDEDED')
69 .borderRadius(20) 120 .borderRadius(20)
70 .borderWidth(1) 121 .borderWidth(1)
71 - .onClick(()=>{ 122 + .onClick(() => {
72 this.clickButtonEvent() 123 this.clickButtonEvent()
73 }) 124 })
74 } 125 }
75 .width(154) 126 .width(154)
76 .height(40) 127 .height(40)
77 - }else if(this.componentType == 3){  
78 - Row(){  
79 - Image(this.likeStatus ? $r('app.media.icon_like_select') : this.styleType == 1 ? $r('app.media.CarderInteraction_like') :  
80 - $r('app.media.icon_like_default_white')) 128 + }
  129 +
  130 + @Builder
  131 + likeCompStyle3() {
  132 + Row() {
  133 + Image(this.transLikeStyle().url)
81 .width(18) 134 .width(18)
82 .height(18) 135 .height(18)
83 - // Text(this.likeCount >0?this.likeCount.toString(): '点赞')  
84 - Text(this.likeStatus ?'已赞': '点赞')  
85 - .margin({left:4}) 136 + // Text(this.likeStatus ? '已赞' : '点赞')
  137 + Text(this.likeCount > 0 ? this.likeCount.toString() : '点赞')
  138 + .margin({ left: 4 })
86 .fontSize(14) 139 .fontSize(14)
87 .fontColor(this.likeStatus ? '#ED2800' : '#666666') 140 .fontColor(this.likeStatus ? '#ED2800' : '#666666')
88 } 141 }
@@ -90,12 +143,14 @@ export struct LikeComponent { @@ -90,12 +143,14 @@ export struct LikeComponent {
90 .onClick(() => { 143 .onClick(() => {
91 this.clickButtonEvent() 144 this.clickButtonEvent()
92 }) 145 })
93 - }else{ 146 + }
  147 +
  148 + @Builder
  149 + likeCompStyle1() {
94 //1: 底部栏目样式 默认样式 150 //1: 底部栏目样式 默认样式
95 Column() { 151 Column() {
96 // Image(this.likeStatus ? $r('app.media.icon_like_select') : $r('app.media.icon_like_default')) 152 // Image(this.likeStatus ? $r('app.media.icon_like_select') : $r('app.media.icon_like_default'))
97 - Image(this.likeStatus ? $r('app.media.icon_like_select') : this.styleType == 1 ? $r('app.media.icon_like_default') :  
98 - $r('app.media.icon_like_default_white')) 153 + Image(this.transLikeStyle().url)
99 .width(24) 154 .width(24)
100 .height(24) 155 .height(24)
101 .onClick(() => { 156 .onClick(() => {
@@ -104,39 +159,88 @@ export struct LikeComponent { @@ -104,39 +159,88 @@ export struct LikeComponent {
104 }.width(24).height(24) 159 }.width(24).height(24)
105 } 160 }
106 161
  162 + @Builder
  163 + likeCompStyle4() {
  164 + Stack({ alignContent: Alignment.Bottom }) {
  165 + Column() {
  166 + Image(this.transLikeStyle().url)
  167 + .width(24)
  168 + .height(24)
  169 + .onClick(() => {
  170 + this.clickButtonEvent()
  171 + })
107 } 172 }
  173 + .justifyContent(FlexAlign.Center)
  174 + .width(36)
  175 + .height(36)
  176 + .borderRadius(18)
  177 + .backgroundColor('#FFF5F5F5')
108 178
109 - async clickButtonEvent(){ 179 +
  180 + Row() {
  181 + Text(NumberFormatterUtils.formatNumberWithWan(this.likeCount || ''))
  182 + .fontSize(8)
  183 + .fontColor(Color.White)
  184 + .padding({ left: 4, right: 2 })
  185 + }
  186 + .height(12)
  187 + .alignItems(VerticalAlign.Center)
  188 + .position({ x: '100%', })
  189 + .markAnchor({ x: '100%' })
  190 + .backgroundImage($r('app.media.ic_like_back'))
  191 + .backgroundImageSize(ImageSize.Auto)
  192 + .visibility(this.likeCount > 0 ? Visibility.Visible : Visibility.Hidden)
  193 + }
  194 + .width(36)
  195 + .height(42)
  196 +
  197 + }
  198 +
  199 + async clickButtonEvent() {
  200 + console.log(TAG, '点赞点击')
110 // 未登录,跳转登录 201 // 未登录,跳转登录
111 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '') 202 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
112 if (!user_id) { 203 if (!user_id) {
  204 + console.log(TAG, '点赞点击,未登录')
113 WDRouterRule.jumpWithPage(WDRouterPage.loginPage) 205 WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
114 return 206 return
115 } 207 }
116 208
117 - if (!this.enableBtn) {  
118 - return  
119 - }  
120 - if (this.likeStatus) {  
121 - //1  
122 - this.executeLike('0')  
123 - } else {  
124 - //0  
125 - this.executeLike('1')  
126 - } 209 + // if (!this.enableBtn) {
  210 + // return
  211 + // }
  212 + this.executeLike(this.likeStatus ? '0' : '1')
127 213
128 } 214 }
129 215
130 executeLike(status: string) { 216 executeLike(status: string) {
  217 + console.log(TAG, '点赞接口调用', status)
131 this.data['status'] = status 218 this.data['status'] = status
  219 + this.data['contentId'] = this.contentDetailData?.newsId + ''
  220 + this.data['contentType'] = this.contentDetailData?.newsType + ''
  221 +
132 this.viewModel.executeLike2(this.data).then(() => { 222 this.viewModel.executeLike2(this.data).then(() => {
  223 +
  224 + console.log(TAG, '点赞接口调用成功')
  225 +
  226 + // 直播点赞一直增加
  227 + if (this.contentDetailData.liveInfo) {
  228 + this.likeStatus = true
  229 + this.likeCount++
  230 + } else {
133 this.likeStatus = !this.likeStatus 231 this.likeStatus = !this.likeStatus
134 //点赞和取消点赞成功后更新点赞数 232 //点赞和取消点赞成功后更新点赞数
135 - if(this.likeStatus){  
136 - this.likeCount ++  
137 - }else {  
138 - this.likeCount -- 233 + if (this.likeStatus) {
  234 + this.likeCount++
  235 + } else {
  236 + this.likeCount--
  237 + }
  238 + }
  239 +
  240 + if (this.likeCount <= 0) {
  241 + this.likeCount = 0
139 } 242 }
  243 +
140 this.enableBtn = true 244 this.enableBtn = true
141 }).catch(() => { 245 }).catch(() => {
142 this.enableBtn = true 246 this.enableBtn = true
@@ -147,7 +251,7 @@ export struct LikeComponent { @@ -147,7 +251,7 @@ export struct LikeComponent {
147 this.viewModel.getLikeStatus(this.data).then((data) => { 251 this.viewModel.getLikeStatus(this.data).then((data) => {
148 if (data && data['data'].length && data['data'][0]['likeStatus']) { 252 if (data && data['data'].length && data['data'][0]['likeStatus']) {
149 this.likeStatus = data['data'][0]['likeStatus'] 253 this.likeStatus = data['data'][0]['likeStatus']
150 - }else { 254 + } else {
151 this.likeStatus = false 255 this.likeStatus = false
152 } 256 }
153 }).catch(() => { 257 }).catch(() => {
@@ -160,14 +264,11 @@ export struct LikeComponent { @@ -160,14 +264,11 @@ export struct LikeComponent {
160 this.viewModel.getLikeCount(this.data).then((data) => { 264 this.viewModel.getLikeCount(this.data).then((data) => {
161 if (data && data['data']) { 265 if (data && data['data']) {
162 this.likeCount = data['data']['likeNum'] 266 this.likeCount = data['data']['likeNum']
163 - }else { 267 + } else {
164 this.likeCount = 0 268 this.likeCount = 0
165 } 269 }
166 }).catch(() => { 270 }).catch(() => {
167 this.likeCount = 0 271 this.likeCount = 0
168 }) 272 })
169 } 273 }
170 -  
171 -  
172 -  
173 } 274 }
@@ -33,7 +33,7 @@ const TAG = 'OperRowListView'; @@ -33,7 +33,7 @@ const TAG = 'OperRowListView';
33 * 2、(非必传) operationButtonList---组件展示条件, 33 * 2、(非必传) operationButtonList---组件展示条件,
34 * ['comment', 'like', 'collect', 'share'],需要展示什么传什么 34 * ['comment', 'like', 'collect', 'share'],需要展示什么传什么
35 * comment--评论;like--点赞;collect--收藏;listen--音频;share--分享; 35 * comment--评论;like--点赞;collect--收藏;listen--音频;share--分享;
36 - * 36 + * 注意:外层需注册 @Provide contentDetailData:contentDetailData = {} as contentDetailData
37 * 传值示例: 37 * 传值示例:
38 OperRowListView({ 38 OperRowListView({
39 contentDetailData: this.contentDetailData[0], 39 contentDetailData: this.contentDetailData[0],
@@ -48,22 +48,35 @@ export struct OperRowListView { @@ -48,22 +48,35 @@ export struct OperRowListView {
48 private onCommentFocus: () => void = () => { 48 private onCommentFocus: () => void = () => {
49 } 49 }
50 @Prop @Watch('onDetailUpdated') contentDetailData: ContentDetailDTO // 稿件详情 50 @Prop @Watch('onDetailUpdated') contentDetailData: ContentDetailDTO // 稿件详情
  51 + /**
  52 + * 组件样式类型,根据详情页类型传值,组件内部根据样式展现类型做判断
  53 + * 1:底部栏目样式
  54 + * 2:新闻页中间位置样式
  55 + * 3:动态Tab内容下的互动入口
  56 + * 4:视频详情页
  57 + * 5:横屏直播详情页
  58 + * 6:竖屏直播详情页
  59 + * 7:图集详情页
  60 + */
  61 + @Prop componentType: number = 1 //1: 底部栏目样式 2: 新闻页中间位置样式 3:动态Tab内容下的互动入口
  62 + @State likesStyle: number = this.contentDetailData.likesStyle // 赞样式 1红心(点赞) 2大拇指(祈福) 3蜡烛(默哀) 4置空
51 @State operationButtonList: string[] = ['comment', 'collect', 'share'] // 组件展示条件 63 @State operationButtonList: string[] = ['comment', 'collect', 'share'] // 组件展示条件
  64 + @State needLike: boolean = true
52 @ObjectLink publishCommentModel: publishCommentModel 65 @ObjectLink publishCommentModel: publishCommentModel
53 @State styleType: number = 1 66 @State styleType: number = 1
  67 + @State showCommentIcon: boolean = true
  68 + @State bgColor: ResourceColor = Color.White
54 @State interactData: InteractDataDTO = {} as InteractDataDTO 69 @State interactData: InteractDataDTO = {} as InteractDataDTO
55 @State newsStatusOfUser: batchLikeAndCollectResult | undefined = undefined // 点赞、收藏状态 70 @State newsStatusOfUser: batchLikeAndCollectResult | undefined = undefined // 点赞、收藏状态
56 @State likeBean: Record<string, string> = {} 71 @State likeBean: Record<string, string> = {}
57 @State audioUrl: string = '' 72 @State audioUrl: string = ''
58 - @State bgColor: ResourceColor = Color.White  
59 - @State showCommentIcon: boolean = true  
60 @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') || 0 73 @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') || 0
61 - needLike: boolean = true  
62 74
63 async aboutToAppear() { 75 async aboutToAppear() {
64 console.info(TAG, '22222----', this.styleType) 76 console.info(TAG, '22222----', this.styleType)
65 console.info(TAG, '3333----', this.needLike) 77 console.info(TAG, '3333----', this.needLike)
66 this.handleStyle() 78 this.handleStyle()
  79 + this.onDetailUpdated()
67 } 80 }
68 81
69 async onDetailUpdated() { 82 async onDetailUpdated() {
@@ -146,8 +159,8 @@ export struct OperRowListView { @@ -146,8 +159,8 @@ export struct OperRowListView {
146 .backgroundColor(this.bgColor) 159 .backgroundColor(this.bgColor)
147 .padding({ 160 .padding({
148 top: 10, 161 top: 10,
149 - // bottom: `${this.bottomSafeHeight}px`  
150 - bottom: 50 162 + bottom: `${this.bottomSafeHeight}px`
  163 + // bottom: 50
151 }) 164 })
152 } 165 }
153 166
@@ -183,15 +196,18 @@ export struct OperRowListView { @@ -183,15 +196,18 @@ export struct OperRowListView {
183 */ 196 */
184 @Builder 197 @Builder
185 builderLike() { 198 builderLike() {
  199 + // 点赞根据字段判断是否显示待添加
186 Column() { 200 Column() {
187 - if (this.likeBean?.contentId) { 201 + // if (this.likeBean?.contentId) {
188 LikeComponent({ 202 LikeComponent({
189 data: this.likeBean, 203 data: this.likeBean,
190 - styleType: this.styleType 204 + styleType: this.styleType,
  205 + componentType: this.componentType
191 }) 206 })
192 - } 207 + // }
193 } 208 }
194 .width(42) 209 .width(42)
  210 + .visibility(this.likesStyle !== 4 ? Visibility.Visible : Visibility.None)
195 } 211 }
196 212
197 /** 213 /**
@@ -301,10 +317,11 @@ export struct OperRowListView { @@ -301,10 +317,11 @@ export struct OperRowListView {
301 * 收藏、取消收藏 317 * 收藏、取消收藏
302 */ 318 */
303 async toggleCollectStatus() { 319 async toggleCollectStatus() {
304 - // console.log(TAG, '收藏--') 320 + console.log(TAG, '收藏点击')
305 // 未登录,跳转登录 321 // 未登录,跳转登录
306 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '') 322 const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
307 if (!user_id) { 323 if (!user_id) {
  324 + console.log(TAG, '收藏点击,用户未登录')
308 WDRouterRule.jumpWithPage(WDRouterPage.loginPage) 325 WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
309 return 326 return
310 } 327 }
@@ -316,7 +333,9 @@ export struct OperRowListView { @@ -316,7 +333,9 @@ export struct OperRowListView {
316 }], 333 }],
317 334
318 } 335 }
  336 + console.log(TAG, '收藏点击', JSON.stringify(params))
319 PageRepository.postExecuteCollectRecord(params).then(res => { 337 PageRepository.postExecuteCollectRecord(params).then(res => {
  338 + console.log(TAG, '收藏点击 res', JSON.stringify(res))
320 if (this.newsStatusOfUser) { 339 if (this.newsStatusOfUser) {
321 this.newsStatusOfUser.collectStatus = this.newsStatusOfUser?.collectStatus === 1 ? 0 : 1 340 this.newsStatusOfUser.collectStatus = this.newsStatusOfUser?.collectStatus === 1 ? 0 : 1
322 if (this.newsStatusOfUser.collectStatus === 1) { 341 if (this.newsStatusOfUser.collectStatus === 1) {
@@ -339,7 +358,9 @@ export struct OperRowListView { @@ -339,7 +358,9 @@ export struct OperRowListView {
339 contentType: this.contentDetailData?.newsType, 358 contentType: this.contentDetailData?.newsType,
340 }] 359 }]
341 } 360 }
  361 + console.log(TAG, '点赞点击', JSON.stringify(params))
342 PageRepository.getContentInteract(params).then(res => { 362 PageRepository.getContentInteract(params).then(res => {
  363 + console.log(TAG, '点赞点击 res', JSON.stringify(res))
343 if (res.data) { 364 if (res.data) {
344 this.interactData.likeNum = NumberFormatterUtils.formatNumberWithWan(res.data[0]?.likeNum) 365 this.interactData.likeNum = NumberFormatterUtils.formatNumberWithWan(res.data[0]?.likeNum)
345 this.interactData.collectNum = NumberFormatterUtils.formatNumberWithWan(res.data[0]?.collectNum) 366 this.interactData.collectNum = NumberFormatterUtils.formatNumberWithWan(res.data[0]?.collectNum)
1 -import lottie, { AnimationItem, AnimationSegment } from '@ohos/lottie';  
2 -  
3 -@Component  
4 -export struct LottieView {  
5 - @Prop name: string  
6 - @Prop path: string  
7 - @Prop lottieWidth: number = 30  
8 - @Prop lottieHeight: number = 30  
9 - @Prop autoplay: boolean = false  
10 - @Prop loop: boolean = false  
11 - @Prop initialSegment?: AnimationSegment = [0, 120] // 动画起始帧  
12 - @Prop onReady: (animateItem: AnimationItem | null) => void // 动画初始化完成事件  
13 - @Prop onComplete: () => void = () => {  
14 - } // 动画完成事件  
15 - private politeChickyController: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // CanvasRenderingContext2D对象  
16 - private animateItem: AnimationItem | null = null; // 初始化loadAnimation接口的返回对象  
17 -  
18 - // 页面隐藏销毁动画  
19 - onPageHide(): void {  
20 - this.animateItem?.destroy()  
21 -  
22 - if (this.onComplete) {  
23 - this.animateItem?.removeEventListener('complete', this.onComplete)  
24 - }  
25 - }  
26 -  
27 - /**  
28 - * 加载动画  
29 - * @param autoplay 控制动画是否自动播放参数  
30 - */  
31 - loadAnimation() {  
32 - // 销毁动画,减少缓存  
33 - if (this.animateItem !== null) {  
34 - this.animateItem.destroy();  
35 - this.animateItem = null;  
36 - }  
37 -  
38 - this.animateItem = lottie.loadAnimation({  
39 - container: this.politeChickyController,  
40 - renderer: 'canvas',  
41 - loop: this.loop,  
42 - autoplay: this.autoplay,  
43 - name: this.name, // 动画名称  
44 - path: this.path, // hap包内动画资源文件路径,仅支持json格式  
45 - // initialSegment: this.initialSegment  
46 - })  
47 - if (this.initialSegment) {  
48 - this.animateItem.segments = this.initialSegment  
49 - }  
50 -  
51 - if (this.onComplete) {  
52 - this.animateItem.addEventListener('complete', this.onComplete)  
53 - }  
54 -  
55 - }  
56 -  
57 - build() {  
58 - Stack({ alignContent: Alignment.TopStart }) {  
59 - Canvas(this.politeChickyController)  
60 - .width(this.lottieWidth)  
61 - .height(this.lottieHeight)  
62 - .backgroundColor(Color.Black)  
63 - .onReady(() => {  
64 - this.loadAnimation();  
65 - if (this.onReady) {  
66 - this.onReady(this.animateItem)  
67 - }  
68 - })  
69 - .onClick(() => {  
70 - this.animateItem?.play()  
71 - })  
72 - }  
73 - }  
74 -}  
@@ -31,10 +31,19 @@ struct MineHomePage { @@ -31,10 +31,19 @@ struct MineHomePage {
31 registTime:number = 0//账号注册时间 31 registTime:number = 0//账号注册时间
32 @State registerTimeForDay:number = 0 32 @State registerTimeForDay:number = 0
33 scroller: Scroller = new Scroller(); 33 scroller: Scroller = new Scroller();
  34 + @State params:Record<string, string> = router.getParams() as Record<string, string>;
  35 + @State isCommentEnter:string = "";
34 36
35 onPageShow(): void { 37 onPageShow(): void {
36 this.getUserInfo() 38 this.getUserInfo()
37 39
  40 + let intervalID = setInterval(() => {
  41 + this.isCommentEnter = this.params?.['comment'];
  42 + if(StringUtils.isNotEmpty(this.isCommentEnter)){
  43 + this.scroller.scrollEdge(Edge.Bottom)
  44 + }
  45 + clearInterval(intervalID);
  46 + }, 200);
38 } 47 }
39 48
40 build() { 49 build() {
@@ -9,7 +9,8 @@ export class LikeViewModel { @@ -9,7 +9,8 @@ export class LikeViewModel {
9 this.likeModel = new LikeModel(); 9 this.likeModel = new LikeModel();
10 } 10 }
11 11
12 - executeLike(contentId: string, userName: string, contentType: string, title: string, userHeaderUrl: string, channelId: string, status: string) { 12 + executeLike(contentId: string, userName: string, contentType: string, title: string, userHeaderUrl: string,
  13 + channelId: string, status: string) {
13 let bean: Record<string, string> = {} 14 let bean: Record<string, string> = {}
14 bean['contentId'] = contentId 15 bean['contentId'] = contentId
15 bean['userName'] = userName 16 bean['userName'] = userName
@@ -23,7 +24,6 @@ export class LikeViewModel { @@ -23,7 +24,6 @@ export class LikeViewModel {
23 24
24 //点赞 25 //点赞
25 executeLike2(bean: Record<string, string>) { 26 executeLike2(bean: Record<string, string>) {
26 -  
27 return new Promise<object>((success, fail) => { 27 return new Promise<object>((success, fail) => {
28 this.likeModel.executeLike(bean).then((data) => { 28 this.likeModel.executeLike(bean).then((data) => {
29 success(data) 29 success(data)
@@ -60,7 +60,4 @@ export class LikeViewModel { @@ -60,7 +60,4 @@ export class LikeViewModel {
60 }) 60 })
61 61
62 } 62 }
63 -  
64 -  
65 -  
66 } 63 }
@@ -49,9 +49,6 @@ export class LiveModel { @@ -49,9 +49,6 @@ export class LiveModel {
49 params['relationId'] = relationId 49 params['relationId'] = relationId
50 params['liveId'] = liveId 50 params['liveId'] = liveId
51 params['isSubscribe'] = `${isSubscribe}` 51 params['isSubscribe'] = `${isSubscribe}`
52 - Logger.info('relationId', relationId)  
53 - Logger.info('liveId', liveId)  
54 - Logger.info('isSubscribe', typeof isSubscribe)  
55 return new Promise<ResponseDTO<string>>((success, fail) => { 52 return new Promise<ResponseDTO<string>>((success, fail) => {
56 HttpRequest.post<ResponseDTO<string>>( 53 HttpRequest.post<ResponseDTO<string>>(
57 HttpUrlUtils.getLiveAppointmentUrl(), 54 HttpUrlUtils.getLiveAppointmentUrl(),
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 "main": "Index.ets", 7 "main": "Index.ets",
8 "version": "1.0.0", 8 "version": "1.0.0",
9 "dependencies": { 9 "dependencies": {
  10 + "@ohos/lottie": "2.0.10",
10 "wdComponent": "file:../../features/wdComponent", 11 "wdComponent": "file:../../features/wdComponent",
11 "wdPlayer": "file:../../features/wdPlayer", 12 "wdPlayer": "file:../../features/wdPlayer",
12 "wdNetwork": "file:../../commons/wdNetwork", 13 "wdNetwork": "file:../../commons/wdNetwork",
@@ -61,8 +61,8 @@ export struct DetailPlayLivePage { @@ -61,8 +61,8 @@ export struct DetailPlayLivePage {
61 .layoutWeight(503) 61 .layoutWeight(503)
62 .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None) 62 .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None)
63 63
64 - if (this.contentDetailData?.newsId) {  
65 OperRowListView({ 64 OperRowListView({
  65 + componentType: 4,
66 operationButtonList: ['comment', 'collect', 'share', 'like'], 66 operationButtonList: ['comment', 'collect', 'share', 'like'],
67 contentDetailData: this.contentDetailData, 67 contentDetailData: this.contentDetailData,
68 publishCommentModel: this.publishCommentModel, 68 publishCommentModel: this.publishCommentModel,
@@ -73,7 +73,7 @@ export struct DetailPlayLivePage { @@ -73,7 +73,7 @@ export struct DetailPlayLivePage {
73 } 73 }
74 }) 74 })
75 .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None) 75 .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None)
76 - } 76 +
77 // LiveCommentComponent({ heartNum: this.liveRoomDataBean.likeNum }) 77 // LiveCommentComponent({ heartNum: this.liveRoomDataBean.likeNum })
78 // .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None) 78 // .visibility(this.displayDirection == DisplayDirection.VERTICAL ? Visibility.Visible : Visibility.None)
79 } 79 }
1 import { window } from '@kit.ArkUI' 1 import { window } from '@kit.ArkUI'
  2 +import lottie from '@ohos/lottie';
  3 +
2 import { NumberFormatterUtils, StringUtils, WindowModel } from 'wdKit/Index' 4 import { NumberFormatterUtils, StringUtils, WindowModel } from 'wdKit/Index'
3 import { DateFormatUtil, WDPlayerController } from 'wdPlayer/Index' 5 import { DateFormatUtil, WDPlayerController } from 'wdPlayer/Index'
4 import { LiveDetailsBean, LiveRoomDataBean } from 'wdBean/Index' 6 import { LiveDetailsBean, LiveRoomDataBean } from 'wdBean/Index'
5 import { DisplayDirection } from 'wdConstant/Index' 7 import { DisplayDirection } from 'wdConstant/Index'
6 -import { LiveFollowComponent } from 'wdComponent/Index' 8 +import { LiveFollowComponent, LottieView } from 'wdComponent/Index'
7 9
8 @Component 10 @Component
9 export struct PlayUIComponent { 11 export struct PlayUIComponent {
@@ -44,6 +46,12 @@ export struct PlayUIComponent { @@ -44,6 +46,12 @@ export struct PlayUIComponent {
44 } 46 }
45 } 47 }
46 48
  49 + aboutToDisappear(): void {
  50 + if (this.liveDetailsBean.liveInfo?.liveState == 'running') {
  51 + lottie.destroy('live_status_wait')
  52 + }
  53 + }
  54 +
47 build() { 55 build() {
48 Column() { 56 Column() {
49 if (this.liveDetailsBean && this.liveDetailsBean.liveInfo) { 57 if (this.liveDetailsBean && this.liveDetailsBean.liveInfo) {
@@ -130,6 +138,7 @@ export struct PlayUIComponent { @@ -130,6 +138,7 @@ export struct PlayUIComponent {
130 // 预约 138 // 预约
131 if (this.liveDetailsBean.liveInfo?.liveState == 'wait') { 139 if (this.liveDetailsBean.liveInfo?.liveState == 'wait') {
132 Row() { 140 Row() {
  141 +
133 Image($r('app.media.icon_live_status_wait')) 142 Image($r('app.media.icon_live_status_wait'))
134 .width(22) 143 .width(22)
135 .height(18) 144 .height(18)
@@ -148,9 +157,21 @@ export struct PlayUIComponent { @@ -148,9 +157,21 @@ export struct PlayUIComponent {
148 // 直播中 157 // 直播中
149 else if (this.liveDetailsBean.liveInfo?.liveState == 'running') { 158 else if (this.liveDetailsBean.liveInfo?.liveState == 'running') {
150 Row() { 159 Row() {
151 - Image($r('app.media.icon_live_status_running')) 160 + Stack() {
  161 + Image($r('app.media.icon_live_status_running_back'))
152 .width(22) 162 .width(22)
153 .height(18) 163 .height(18)
  164 + LottieView({
  165 + name: 'live_status_wait',
  166 + path: "lottie/live_detail_living.json",
  167 + lottieWidth: 9,
  168 + lottieHeight: 9,
  169 + autoplay: true,
  170 + loop: true,
  171 + })
  172 + .margin({ right: 2 })
  173 + }
  174 +
154 Text('直播中') 175 Text('直播中')
155 .fontSize('11fp') 176 .fontSize('11fp')
156 .fontWeight(400) 177 .fontWeight(400)
  1 +import lottie from '@ohos/lottie'
1 import { LiveDetailsBean, LiveRoomDataBean } from 'wdBean/Index' 2 import { LiveDetailsBean, LiveRoomDataBean } from 'wdBean/Index'
2 -import { LiveFollowComponent } from 'wdComponent/Index' 3 +import { LiveFollowComponent, LottieView } from 'wdComponent/Index'
3 import { NumberFormatterUtils } from 'wdKit/Index' 4 import { NumberFormatterUtils } from 'wdKit/Index'
4 5
5 @Preview 6 @Preview
@@ -9,6 +10,12 @@ export struct PlayerTitleComponent { @@ -9,6 +10,12 @@ export struct PlayerTitleComponent {
9 @Consume liveRoomDataBean: LiveRoomDataBean 10 @Consume liveRoomDataBean: LiveRoomDataBean
10 @Consume liveState: string 11 @Consume liveState: string
11 12
  13 + aboutToDisappear(): void {
  14 + if (this.liveDetailsBean.liveInfo?.liveState == 'running') {
  15 + lottie.destroy('live_status_wait')
  16 + }
  17 + }
  18 +
12 build() { 19 build() {
13 Column() { 20 Column() {
14 Row() { 21 Row() {
@@ -47,10 +54,25 @@ export struct PlayerTitleComponent { @@ -47,10 +54,25 @@ export struct PlayerTitleComponent {
47 if (this.liveRoomDataBean.liveId) { 54 if (this.liveRoomDataBean.liveId) {
48 Row() { 55 Row() {
49 if (this.liveState == 'running') { 56 if (this.liveState == 'running') {
50 - Image($r('app.media.icon_live_status_running')) 57 + Stack() {
  58 + Image($r('app.media.icon_live_status_running_back'))
51 .width(22) 59 .width(22)
52 .height(18) 60 .height(18)
53 - .margin({ right: 1 }) 61 + LottieView({
  62 + name: 'live_status_wait',
  63 + path: "lottie/live_detail_living.json",
  64 + lottieWidth: 9,
  65 + lottieHeight: 9,
  66 + autoplay: true,
  67 + loop: true,
  68 + })
  69 + .margin({ right: 2 })
  70 + }.margin({ right: 1 })
  71 +
  72 + // Image($r('app.media.icon_live_status_running'))
  73 + // .width(22)
  74 + // .height(18)
  75 + // .margin({ right: 1 })
54 } 76 }
55 77
56 Text(this.liveState == 'running' ? '直播中' : '回看') 78 Text(this.liveState == 'running' ? '直播中' : '回看')
@@ -39,6 +39,7 @@ export struct VideoChannelDetail { @@ -39,6 +39,7 @@ export struct VideoChannelDetail {
39 // private recommend?: string = '' // 0.非推荐,1.推荐; 39 // private recommend?: string = '' // 0.非推荐,1.推荐;
40 @Link @Watch('navIndexChange') bottomNavIndex: number 40 @Link @Watch('navIndexChange') bottomNavIndex: number
41 @Link @Watch('navIndexChange') topNavIndex: number 41 @Link @Watch('navIndexChange') topNavIndex: number
  42 + @Prop @Watch('autoRefreshChange') autoRefresh: number = 0
42 @Consume barBackgroundColor: Color 43 @Consume barBackgroundColor: Color
43 private swiperController: SwiperController = new SwiperController() 44 private swiperController: SwiperController = new SwiperController()
44 @Provide showComment: boolean = false 45 @Provide showComment: boolean = false
@@ -54,6 +55,18 @@ export struct VideoChannelDetail { @@ -54,6 +55,18 @@ export struct VideoChannelDetail {
54 @State isMouted: boolean = false 55 @State isMouted: boolean = false
55 @State isRequestError: boolean = false 56 @State isRequestError: boolean = false
56 57
  58 + autoRefreshChange() {
  59 + if (this.topNavIndex === 0) {
  60 + this.data = []
  61 + this.interactDataList = []
  62 + this.totalCount = 0
  63 + this.isMouted = false
  64 + this.getRecCompInfo()
  65 + this.getRecCompInfo()
  66 + }
  67 +
  68 + }
  69 +
57 pageShowChange() { 70 pageShowChange() {
58 if (this.bottomNavIndex === 2 && this.topNavIndex === 0) { 71 if (this.bottomNavIndex === 2 && this.topNavIndex === 0) {
59 this.barBackgroundColor = Color.Black 72 this.barBackgroundColor = Color.Black
@@ -4,3 +4,4 @@ @@ -4,3 +4,4 @@
4 /build 4 /build
5 /.cxx 5 /.cxx
6 /.test 6 /.test
  7 +/oh-package-lock.json5
  1 +{"v":"5.6.10","fr":60,"ip":0,"op":80,"w":30,"h":30,"nm":"直播页面-动效","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"空 13","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[7.5,7.375,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"ip":0,"op":80,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"形状图层 3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34,20.073,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-15],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-15],[-2.25,-16.5],[2.25,-16.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-27.5],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-27.5],[-2.25,-29],[2.25,-29]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-15.5],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-15.5],[-2.25,-17],[2.25,-17]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-3.5],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-3.5],[-2.25,-5],[2.25,-5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-15.5],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-15.5],[-2.25,-17],[2.25,-17]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-27.5],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-27.5],[-2.25,-29],[2.25,-29]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-15.625],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-15.625],[-2.25,-17.125],[2.25,-17.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-3.375],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-3.375],[-2.25,-4.875],[2.25,-4.875]],"c":true}]},{"t":80,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-15.375],[3.75,15],[2.25,16.5],[-2.25,16.5],[-3.75,15],[-3.75,-15.375],[-2.25,-16.875],[2.25,-16.875]],"c":true}]}],"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":80,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-4,24.573,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-7.875],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-7.875],[-2.25,-9.375],[2.25,-9.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-20],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-20],[-2.25,-21.5],[2.25,-21.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-32],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-32],[-2.25,-33.5],[2.25,-33.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-20],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-20],[-2.25,-21.5],[2.25,-21.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-7.875],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-7.875],[-2.25,-9.375],[2.25,-9.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-20],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-20],[-2.25,-21.5],[2.25,-21.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-31.75],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-31.75],[-2.25,-33.25],[2.25,-33.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-19.875],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-19.875],[-2.25,-21.375],[2.25,-21.375]],"c":true}]},{"t":80,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-8],[3.75,10.5],[2.25,12],[-2.25,12],[-3.75,10.5],[-3.75,-8],[-2.25,-9.5],[2.25,-9.5]],"c":true}]}],"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":80,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"形状图层 1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,14.272,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-21],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-21],[-2.25,-22.5],[2.25,-22.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-9.375],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-9.375],[-2.25,-10.875],[2.25,-10.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,2.5],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,2.5],[-2.25,1],[2.25,1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-9.375],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-9.375],[-2.25,-10.875],[2.25,-10.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-21.5],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-21.5],[-2.25,-23],[2.25,-23]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-9.5],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-9.5],[-2.25,-11],[2.25,-11]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,2.5],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,2.5],[-2.25,1],[2.25,1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-9.5],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-9.5],[-2.25,-11],[2.25,-11]],"c":true}]},{"t":80,"s":[{"i":[[0,-0.828],[0,0],[0.828,0],[0,0],[0,0.828],[0,0],[-0.828,0],[0,0]],"o":[[0,0],[0,0.828],[0,0],[-0.828,0],[0,0],[0,-0.828],[0,0],[0.828,0]],"v":[[3.75,-21.375],[3.75,21],[2.25,22.5],[-2.25,22.5],[-3.75,21],[-3.75,-21.375],[-2.25,-22.875],[2.25,-22.875]],"c":true}]}],"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":80,"st":0,"bm":0}],"markers":[]}
  1 +{"v":"5.6.10","fr":30,"ip":0,"op":51,"w":500,"h":500,"nm":"预合成 1","ddd":0,"assets":[{"id":"image_0","w":90,"h":240,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAADwCAYAAACAL3OKAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADW0lEQVR4nO3cv2lcQRRG8Tuzs0iBFRhcgcEVGFSBwRUYXIHBFRicqTOVJJACSfvnc+BNXvbgMUeBzi8ZJhPnDuLpYtySnEvTjarKW/8Q74GhIYaGGBpiaIihIYaGGBpiaIihIYaGjKpy1wHwRUMMDTE0xNAQQ0MMDTE0xNAQQ0MMDTE0xNAQQ0MMDTE0xH00xBcNMTTE0BBDQwwNMTTE0BBDQwwNMTTE0BBDQwwNMTTE0BD30RBfNMTQEENDDA0xNMTQEENDDA0xNMTQEENDDA0xNMTQEEND3EdDfNEQQ0MMDTE0xNAQQ0MMDTE0xNAQQ0MMDTE0xNAQQ0MMDXEfDfFFQwwNMTTE0BBDQwwNMTTE0BBDQwwNMTTE0BBDQwwNMTTEfTTEFw0xNMTQEENDDA0xNMTQEENDDA0xNMTQEENDDA0xNMTQEPfREF80xNAQQ0MMDTE0xNAQQ0MMDTE0xNAQQ0MMDTE0xNAQQ0P6+XxO/Y+dqor3OfeW5O/GYWmFcSmuyXpVpfcez7lnO51Of6aMUAt+dUAMDTE0ZPTe/XcdAF80xNAQQ0MMDTE0xNAQQ0PcR4P76N8bh6UV3EdD3EeD++hfU0aohZHEXx0AP+8ghoaM3W7nPhrgi4YYGmJoiKEhhoYYGmJoSD+dTov9qfc595bk58ZhaYVxKa7JelVlt9vFc+7Zjsfjjykj1IJfHRBDQwwNcR8N8UVDDA0xNMTQEENDDA0xNKQfj8fF/tT7nHtL8n3jsLTCuBTXZL2qMsaI59yzHQ6Hb1NGqAW/OiCGhhgaMsYY7qMBvmiIoSGGhhgaYmiIoSGGhvTD4bDYn3qfc29JbjcOSyuMS3FN1qsq+/0+nnPP9vr6+nXKCLXgVwfE0BBDQ8Z+v3cfDfBFQwwNMTTE0BBDQwwNMTSkv7y8LPan3ufcW5IvG4elFcaluCbrVZWrq6t4zj3b8/Pz5ykj1IL/fzTEzzuIoSHj+vrafTTAFw0xNMTQEENDDA0xNMTQkP709LTYn3qfc29JPm0cllYYj4+P/uoA9CS5ubmJ59yzPTw8fHzrab8H7qMhhoYYGtKSfHjrH+I98C9DiKEhhoYYGmJoiKEhhob0+/v7xf7U+5x7S7LbOCytMO7u7vzVAWlJmufc8x+/85zyNf84xgAAAABJRU5ErkJggg==","e":1}],"fonts":{"list":[{"fName":"SourceHanSansSC-Normal","fFamily":"Source Han Sans SC","fStyle":"Normal","ascent":79.608999023214}]},"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"“图层 1”轮廓 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[160.08,177.473,0],"ix":2},"a":{"a":0,"k":[8.095,35.425,0],"ix":1},"s":{"a":0,"k":[300,300,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.244,-10.704],[-4.109,-12.458],[-0.711,-0.358],[-0.35,-0.041],[-0.041,-0.003],[-0.374,0.124],[-0.135,1.161],[0,0],[0.134,0.407],[-1.276,10.984],[-5.322,9.464],[0,0]],"o":[[-5.704,10.153],[-1.377,11.862],[0.249,0.755],[0.314,0.159],[0.041,0.005],[0.393,0.029],[1.109,-0.366],[0,0],[0.046,-0.426],[-3.832,-11.619],[1.152,-9.916],[0,0],[0,0]],"v":[[2.846,-34.399],[-7.576,-3.114],[-3.479,33.365],[-1.98,35.104],[-0.976,35.405],[-0.852,35.417],[0.31,35.274],[2.35,32.771],[2.353,32.749],[2.219,31.485],[-1.616,-2.421],[8.095,-31.491],[7.16,-35.425]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.094,35.425],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":51,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"矩形 1624.png","cl":"png","tt":1,"refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[100]},{"t":34,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[170.767,290.291,0],"ix":2},"a":{"a":0,"k":[45.395,241.486,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":1,"s":[100,10,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[100,56,100]},{"t":12,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":1,"op":52,"st":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[100]},{"t":34,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[-51]},{"t":12,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[157.75,279.75,0],"to":[-6.112,-21.415,0],"ti":[-5.612,39.702,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[145.538,168,0],"to":[5.612,-39.702,0],"ti":[-10.945,22.085,0]},{"t":12,"s":[174.75,77.75,0]}],"ix":2},"a":{"a":0,"k":[-75.25,-172.25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-96.5,-181.5],[-62.25,-189],[-54,-155.5]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":52,"st":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"形状图层 1","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":20,"ix":10},"p":{"a":0,"k":[34.937,47.412,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[33.333,33.333,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[28.935,-6.447],[9,-5.25],[-17.25,4],[-21.26,3.424],[-12.805,-4.71],[2.25,-2.5]],"o":[[0,0],[-24.106,5.371],[-16.232,9.469],[9.485,-2.2],[33.448,-5.387],[9.5,4.25],[-2.25,2.5]],"v":[[52.75,-14.25],[-9.435,-6.803],[-56.25,10.25],[-46.25,39],[7.26,24.826],[88,19],[89,36.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[26.479,-4.851],[8.679,-2.444],[-17.998,2.691],[-23.469,3.069],[-12.805,-4.71],[2.25,-2.5]],"o":[[0,0],[-12.46,2.283],[-15.41,4.339],[4.383,-0.655],[33.593,-4.393],[9.5,4.25],[-2.25,2.5]],"v":[[58,-15],[-7.178,-6.584],[-53.707,4.823],[-47,29.75],[0.76,22.576],[88,19],[89,36.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[26.919,0.031],[6.044,-0.659],[-15.132,-2.622],[-23.644,1.071],[-12.805,-4.71],[2.25,-2.5]],"o":[[0,0],[-13.471,-0.016],[-14.086,1.535],[4.404,0.763],[32.111,-1.455],[9.5,4.25],[-2.25,2.5]],"v":[[54.157,-14.073],[-2.442,-8.813],[-49.103,-6.764],[-50.1,19.6],[-0.512,21.013],[88,19],[89,36.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[26.479,-4.851],[8.679,-2.444],[-17.998,2.691],[-23.469,3.069],[-12.805,-4.71],[2.25,-2.5]],"o":[[0,0],[-12.46,2.283],[-15.41,4.339],[4.383,-0.655],[33.593,-4.393],[9.5,4.25],[-2.25,2.5]],"v":[[58,-15],[-7.178,-6.584],[-53.707,4.823],[-47,29.75],[0.76,22.576],[88,19],[89,36.25]],"c":false}]},{"t":40,"s":[{"i":[[0,0],[28.935,-6.447],[9,-5.25],[-17.25,4],[-21.26,3.424],[-12.805,-4.71],[2.25,-2.5]],"o":[[0,0],[-24.106,5.371],[-16.232,9.469],[9.485,-2.2],[33.448,-5.387],[9.5,4.25],[-2.25,2.5]],"v":[[58,-15],[-9.435,-6.803],[-56.25,10.25],[-46.25,39],[7.26,24.826],[88,19],[89,36.25]],"c":false}]}],"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":12,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":50,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"“img_hand”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.775],"y":[0.621]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":10,"s":[12]},{"t":40.0234375,"s":[-19.954]}],"ix":10},"p":{"a":0,"k":[447.982,216,0],"ix":2},"a":{"a":0,"k":[100.827,59.333,0],"ix":1},"s":{"a":0,"k":[300,300,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.033,0.015],[0,0],[0.783,-0.214],[0.314,-0.792],[-0.133,-0.656],[-0.603,-0.563],[-0.587,-0.233],[0,0],[-0.073,-0.04],[-0.516,-0.842],[0.479,-1.208],[0.953,-0.502],[0,0],[0,0],[0,0],[-1.392,-0.86],[0.091,-1.641],[2.925,-1.592],[2.563,-0.334],[1.888,-0.636],[1.036,-1.094],[0.103,-0.722],[-0.26,-0.631],[-1.483,0.566],[-3.818,0.653],[-5.209,0.17],[-9.286,3.911],[0,0],[0,0],[-0.469,-0.165],[-0.024,-0.01],[0,0],[-0.206,-0.489],[0.163,-0.467],[0.01,-0.026],[0.495,-0.209],[0,0],[6.587,-0.214],[2.994,-0.511],[4.409,-1.635],[1.511,0.673],[0.629,1.524],[-0.21,1.467],[-0.98,1.035],[-2.962,0.997],[-2.561,0.334],[-1.666,0.907],[-0.117,0.852],[0.021,0.025],[0.515,0.318],[-2.348,-0.527],[0,0],[0,0],[-2.029,-0.079],[-0.168,0.089],[-0.048,0.103],[0.49,0.277],[0,0],[0.631,0.589],[0.298,1.464],[-0.637,1.605],[-1.864,0.508],[-0.535,0.015],[-0.648,1.306],[-1.813,0.428],[-1.806,-0.438],[-0.392,1.028],[-0.023,0.048],[-2.123,0.451],[-2.602,-1.082],[-0.033,-0.016],[0,0],[-0.034,-0.019],[-1.699,-3.421],[0,0],[0,0],[0.169,-0.503],[0.013,-0.032],[0.443,-0.22],[0.502,0.17],[0.033,0.013],[0.219,0.442],[0,0],[6.83,3.793],[0,0],[1.064,-0.227],[0.455,-0.915],[-0.154,-0.539],[-0.497,-0.308],[0,0],[0.408,-1.027],[1.026,0.405],[0,0],[0,0],[0.068,0.036],[0,0],[0.842,-0.198],[0.277,-0.557],[-0.093,-0.504],[-0.425,-0.402],[0,0],[0.237,-0.935],[0.032,-0.08],[0.015,-0.033],[0.934,0.237],[0.08,0.031]],"o":[[0,0],[-1.444,-0.567],[-0.577,0.157],[-0.344,0.868],[0.128,0.627],[0.263,0.245],[0,0],[0.077,0.03],[1.204,0.661],[0.679,1.108],[-0.415,1.046],[-0.842,0.444],[0,0],[0,0],[0,0],[2.121,1.31],[-0.133,2.377],[-2.104,1.145],[-2.301,0.3],[-2.333,0.785],[-0.397,0.419],[-0.107,0.745],[0.49,1.186],[4.665,-1.731],[3.174,-0.542],[6.094,-0.198],[0,0],[0,0],[0.458,-0.193],[0.024,0.009],[0,0],[0.491,0.2],[0.192,0.456],[-0.009,0.027],[-0.198,0.499],[0,0],[-9.741,4.104],[-5.028,0.164],[-3.573,0.611],[-1.873,0.715],[-1.375,-0.612],[-0.539,-1.304],[0.223,-1.562],[1.492,-1.576],[2.135,-0.719],[2.069,-0.269],[1.546,-0.841],[-0.014,-0.019],[-0.21,-0.254],[-1.135,-0.701],[1.606,0.361],[0,0],[0,0],[0.359,0.014],[0.069,-0.036],[-0.151,-0.213],[0,0],[-1.055,-0.418],[-1.228,-1.144],[-0.291,-1.433],[0.805,-2.031],[0.48,-0.13],[-0.099,-1.203],[0.833,-1.68],[1.331,-0.314],[0.031,-0.905],[0.019,-0.05],[1.024,-2.145],[1.886,-0.401],[0.034,0.014],[0,0],[0.034,0.016],[7.589,4.209],[0,0],[0,0],[0.236,0.476],[-0.012,0.033],[-0.182,0.46],[-0.475,0.236],[-0.033,-0.011],[-0.459,-0.182],[0,0],[-1.329,-2.67],[0,0],[-1.813,-0.748],[-0.816,0.173],[-0.338,0.913],[0.115,0.405],[0,0],[1.026,0.408],[-0.406,1.025],[0,0],[0,0],[-0.071,-0.028],[0,0],[-1.472,-0.43],[-0.593,0.14],[-0.357,0.721],[0.077,0.416],[0,0],[0.876,0.403],[-0.021,0.083],[-0.013,0.033],[-0.403,0.876],[-0.084,-0.021],[-0.033,-0.014]],"v":[[1.962,-13.096],[-8.76,-18.034],[-12.1,-18.564],[-13.438,-17.141],[-13.753,-14.855],[-12.658,-13.071],[-11.383,-12.354],[0.275,-7.73],[0.501,-7.625],[3.081,-5.371],[3.381,-1.898],[1.329,0.424],[-1.686,0.991],[-2.437,0.965],[-1.432,7.985],[4.895,10.726],[7.939,15.152],[3.353,21.106],[-3.648,23.325],[-9.932,24.728],[-14.984,27.546],[-15.734,29.258],[-15.503,31.322],[-12.544,32.252],[0.181,28.677],[12.755,27.609],[35.825,21.445],[35.827,21.444],[35.831,21.442],[37.273,21.398],[37.346,21.426],[37.363,21.432],[38.452,22.508],[38.497,23.942],[38.468,24.022],[37.385,25.128],[37.379,25.13],[12.887,31.607],[0.855,32.62],[-11.118,35.989],[-16.195,36.052],[-19.201,32.848],[-19.693,28.692],[-17.889,24.796],[-11.208,20.937],[-4.163,19.358],[1.439,17.593],[3.934,15.053],[3.882,14.987],[2.794,14.129],[-2.327,11.916],[-1.459,8.034],[-2.393,1.013],[-1.324,-2.997],[-0.535,-3.116],[-0.359,-3.325],[-1.32,-4.06],[-12.856,-8.636],[-15.385,-10.146],[-17.674,-14.058],[-17.156,-18.616],[-13.152,-22.424],[-11.63,-22.643],[-10.805,-26.407],[-6.835,-29.569],[-2.13,-29.383],[-1.495,-32.282],[-1.432,-32.43],[3.288,-36.324],[10.021,-35.302],[10.12,-35.257],[31.193,-25.105],[31.295,-25.052],[45.227,-13.607],[45.228,-13.604],[45.229,-13.603],[45.333,-12.075],[45.296,-11.977],[44.326,-10.922],[42.799,-10.819],[42.7,-10.855],[41.646,-11.825],[41.642,-11.833],[29.404,-21.527],[8.436,-31.629],[4.12,-32.411],[2.213,-30.778],[1.936,-28.6],[2.854,-27.53],[8.822,-25.163],[9.944,-22.566],[7.352,-21.443],[7.348,-21.444],[1.316,-23.823],[1.107,-23.919],[-2.447,-25.328],[-5.917,-25.676],[-7.222,-24.63],[-7.62,-22.792],[-6.867,-21.566],[3.635,-16.729],[4.737,-14.42],[4.658,-14.175],[4.615,-14.076],[2.307,-12.974],[2.061,-13.053]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.39,50.134],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":50,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":5,"nm":"上滑查看更多视频","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.5,409.099,0],"ix":2},"a":{"a":0,"k":[4.786,-22.901,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":60,"f":"SourceHanSansSC-Normal","t":"上滑查看更多视频","j":2,"tr":0,"lh":72,"ls":0,"fc":[1,1,1],"sc":[0,0,0],"sw":0.00999999977648,"of":true},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":50,"st":0,"bm":0}],"markers":[{"tm":1,"cm":"{\n\t\"exportFlag\":\t1,\n\t\"storePath\":\t\"/Users/changkang/Downloads/中文版动效/动效导出最终版本的/动效\"\n}","dr":0}],"chars":[{"ch":"上","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[43.405,-82.883],[43.405,-3.625],[5.338,-3.625],[5.338,3.122],[95.471,3.122],[95.471,-3.625],[50.455,-3.625],[50.455,-44.614],[88.623,-44.614],[88.623,-51.361],[50.455,-51.361],[50.455,-82.883]],"c":true},"ix":2},"nm":"上","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"上","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"滑","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.928,-3.726],[0,0],[6.143,3.625]],"o":[[6.244,3.827],[0,0],[-3.928,-3.525],[0,0]],"v":[[9.467,-78.653],[27.594,-65.359],[31.924,-70.496],[13.696,-82.983]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-3.827,-3.122],[0,0],[5.74,2.921]],"o":[[5.841,3.122],[0,0],[-3.928,-3.122],[0,0]],"v":[[4.33,-50.656],[21.552,-39.679],[25.58,-44.916],[8.258,-55.389]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[4.633,-7.553],[0,0],[-4.431,10.272],[0,0]],"o":[[0,0],[5.035,-9.164],[0,0],[-4.935,11.078]],"v":[[7.755,1.913],[13.596,6.244],[29.105,-25.681],[23.868,-29.81]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[45.923,-22.055],[79.156,-22.055],[79.156,-14.2],[45.923,-14.2]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[45.923,-27.191],[45.923,-34.845],[79.156,-34.845],[79.156,-27.191]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.41,0],[5.237,0.201],[-0.302,-1.511],[-2.618,1.007],[0,3.525],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1.309],[-1.41,0.101],[0.806,1.611],[7.251,0],[2.618,-0.906],[0,0],[0,0]],"v":[[39.679,-40.384],[39.679,7.855],[45.923,7.855],[45.923,-9.164],[79.156,-9.164],[79.156,0.806],[77.344,2.518],[65.863,2.417],[67.776,7.956],[82.178,6.949],[85.602,0.806],[85.602,-40.384]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[40.384,-80.667],[40.384,-53.476],[29.709,-53.476],[29.709,-36.658],[35.953,-36.658],[35.953,-47.836],[89.227,-47.836],[89.227,-36.658],[95.773,-36.658],[95.773,-53.476],[84.998,-53.476],[84.998,-80.667]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[46.628,-53.476],[46.628,-63.144],[61.029,-63.144],[61.029,-53.476]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[78.653,-53.476],[66.769,-53.476],[66.769,-67.978],[46.628,-67.978],[46.628,-75.229],[78.653,-75.229]],"c":true},"ix":2},"nm":"滑","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"滑","np":12,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"查","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[29.205,-21.854],[71.201,-21.854],[71.201,-12.891],[29.205,-12.891]],"c":true},"ix":2},"nm":"查","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[29.205,-35.55],[71.201,-35.55],[71.201,-26.688],[29.205,-26.688]],"c":true},"ix":2},"nm":"查","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[22.559,-40.585],[22.559,-7.855],[78.149,-7.855],[78.149,-40.585]],"c":true},"ix":2},"nm":"查","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[7.654,-1.511],[7.654,4.532],[93.457,4.532],[93.457,-1.511]],"c":true},"ix":2},"nm":"查","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[12.589,-4.33],[-1.007,-1.611],[-9.265,12.085],[0,0],[0,0],[0,0],[-14.099,-5.237],[-1.611,1.208],[8.862,9.467],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-8.862,9.769],[1.41,1.309],[13.797,-5.539],[0,0],[0,0],[0,0],[9.366,11.884],[0.906,-1.712],[-12.991,-4.129],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[46.729,-84.494],[46.729,-71.301],[5.841,-71.301],[5.841,-65.359],[39.175,-65.359],[3.827,-42.197],[8.258,-36.758],[46.729,-65.259],[46.729,-43.707],[53.476,-43.707],[53.476,-65.359],[92.45,-37.564],[96.982,-43.103],[60.928,-65.359],[95.068,-65.359],[95.068,-71.301],[53.476,-71.301],[53.476,-84.494]],"c":true},"ix":2},"nm":"查","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"查","np":8,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"看","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[32.73,-21.854],[78.049,-21.854],[78.049,-14.301],[32.73,-14.301]],"c":true},"ix":2},"nm":"看","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[32.73,-26.788],[32.73,-34.14],[78.049,-34.14],[78.049,-26.788]],"c":true},"ix":2},"nm":"看","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[32.73,-9.467],[78.049,-9.467],[78.049,-1.511],[32.73,-1.511]],"c":true},"ix":2},"nm":"看","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[24.573,-0.201],[-0.201,-1.611],[-9.567,0.403],[0.906,-2.518],[0,0],[0,0],[0,0],[1.41,-2.618],[0,0],[0,0],[0,0],[11.581,-6.647],[-0.906,-1.41],[-5.237,5.942],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.41,2.618],[0,0],[0,0],[0,0],[-1.108,2.719],[0,0],[0,0],[0,0],[-0.806,2.618],[-10.071,2.115]],"o":[[-15.912,3.424],[0.705,1.511],[8.862,0],[-0.705,2.518],[0,0],[0,0],[0,0],[-1.108,2.719],[0,0],[0,0],[0,0],[-6.445,10.876],[1.41,1.309],[7.15,-4.23],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.611,-2.417],[0,0],[0,0],[0,0],[1.208,-2.618],[0,0],[0,0],[0,0],[0.906,-2.618],[14.603,-0.906],[0,0]],"v":[[83.286,-83.588],[11.884,-78.452],[13.394,-73.114],[41.492,-73.819],[39.175,-66.367],[13.394,-66.367],[13.394,-60.928],[37.161,-60.928],[33.435,-52.771],[5.942,-52.771],[5.942,-47.131],[30.313,-47.131],[3.525,-20.142],[7.855,-14.905],[26.285,-30.313],[26.285,8.057],[32.73,8.057],[32.73,4.028],[78.049,4.028],[78.049,8.057],[84.695,8.057],[84.695,-39.578],[33.435,-39.578],[38.068,-47.131],[94.766,-47.131],[94.766,-52.771],[40.988,-52.771],[44.513,-60.928],[88.824,-60.928],[88.824,-66.367],[46.527,-66.367],[49.045,-74.222],[87.717,-78.653]],"c":true},"ix":2},"nm":"看","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"看","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"更","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.424,5.539],[0,0],[-5.136,-3.827],[12.387,-2.417],[-0.806,-1.511],[-6.747,4.532],[-23.666,-1.007],[-1.309,1.611],[12.991,6.143],[-1.309,6.345],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.935,-4.23]],"o":[[0,0],[3.525,6.042],[-6.244,3.625],[1.511,1.611],[13.394,-2.921],[13.797,7.452],[0.302,-2.216],[-22.961,-0.705],[5.539,-5.237],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.208,5.136],[-5.035,-3.424]],"v":[[25.177,-24.17],[19.437,-21.854],[32.327,-7.15],[4.834,2.014],[8.862,7.956],[38.47,-3.223],[94.464,7.654],[97.385,1.007],[43.909,-7.553],[53.375,-25.177],[87.817,-25.177],[87.817,-63.849],[54.382,-63.849],[54.382,-72.711],[94.061,-72.711],[94.061,-78.854],[6.546,-78.854],[6.546,-72.711],[47.433,-72.711],[47.433,-63.849],[15.912,-63.849],[15.912,-25.177],[46.326,-25.177],[37.766,-10.977]],"c":true},"ix":2},"nm":"更","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.101,-2.216],[0,0]],"o":[[0,0],[0,0],[0,2.216],[0,0],[0,0]],"v":[[22.357,-41.794],[47.433,-41.794],[47.433,-37.564],[47.232,-30.917],[22.357,-30.917]],"c":true},"ix":2},"nm":"更","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,2.216],[0,0],[0,0],[0,0]],"o":[[0.101,-2.216],[0,0],[0,0],[0,0],[0,0]],"v":[[54.181,-30.917],[54.382,-37.564],[54.382,-41.794],[81.07,-41.794],[81.07,-30.917]],"c":true},"ix":2},"nm":"更","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[22.357,-58.109],[47.433,-58.109],[47.433,-47.333],[22.357,-47.333]],"c":true},"ix":2},"nm":"更","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[54.382,-58.109],[81.07,-58.109],[81.07,-47.333],[54.382,-47.333]],"c":true},"ix":2},"nm":"更","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"更","np":8,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"多","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[16.214,-6.848],[-1.007,-1.611],[-6.647,5.438],[0,0],[8.157,-4.834],[4.532,2.518],[0,0],[-3.424,-3.021],[11.38,-2.014],[-0.705,-1.813],[-12.891,22.357],[0,0],[0,0],[0,0],[-2.014,2.518]],"o":[[-6.345,8.459],[1.511,1.108],[9.265,-4.431],[0,0],[-5.136,6.546],[-3.625,-3.122],[0,0],[4.129,2.417],[-10.977,5.539],[1.208,1.41],[25.681,-5.438],[0,0],[0,0],[0,0],[2.518,-2.417],[0,0]],"v":[[46.326,-84.595],[11.581,-59.216],[16.214,-54.382],[40.082,-69.388],[69.287,-69.388],[48.743,-52.267],[35.248,-61.533],[30.414,-58.008],[42.801,-49.146],[8.157,-37.665],[11.481,-31.622],[79.66,-73.114],[75.33,-75.833],[73.92,-75.531],[46.93,-75.531],[53.778,-82.983]],"c":true},"ix":2},"nm":"多","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[20.444,-7.452],[-0.906,-1.611],[-8.359,6.949],[0,0],[9.064,-5.136],[4.23,2.921],[0,0],[-3.323,-3.424],[17.322,-1.712],[-0.403,-1.913],[-14.099,29.709],[0,0],[0,0],[0,0],[-2.014,2.618]],"o":[[-7.352,10.071],[1.511,1.309],[12.79,-5.136],[0,0],[-5.136,8.258],[-3.525,-3.424],[0,0],[4.028,3.021],[-14.301,6.747],[1.108,1.611],[35.248,-4.23],[0,0],[0,0],[0,0],[2.518,-2.518],[0,0]],"v":[[62.741,-49.649],[20.444,-20.746],[24.774,-15.61],[56.598,-34.14],[84.796,-34.14],[63.144,-14.099],[50.253,-24.573],[44.714,-21.35],[56.9,-10.776],[7.956,1.511],[10.776,8.057],[94.867,-37.866],[90.436,-40.686],[89.127,-40.283],[63.345,-40.283],[70.193,-48.038]],"c":true},"ix":2},"nm":"多","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"多","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"视","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[45.721,-79.459],[45.721,-25.882],[52.167,-25.882],[52.167,-73.416],[84.192,-73.416],[84.192,-25.882],[90.939,-25.882],[90.939,-79.459]],"c":true},"ix":2},"nm":"视","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-1.813,-3.726],[0,0],[3.928,3.726]],"o":[[3.726,3.928],[0,0],[-1.813,-3.625],[0,0]],"v":[[15.912,-81.171],[25.378,-67.978],[30.817,-71.603],[21.048,-84.192]],"c":true},"ix":2},"nm":"视","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[25.378,-13.193],[-0.705,-1.41],[-3.827,11.38],[0,0],[-6.647,0],[0,0],[-0.906,15.811],[1.712,1.41],[3.726,0],[0,0],[0,2.921],[0,0],[0,0],[0,5.438],[0,0]],"o":[[0,0],[0,15.811],[1.41,1.108],[15.811,-8.258],[0,0],[0,6.445],[0,0],[8.459,0],[-1.813,-0.403],[-0.504,14.603],[0,0],[-3.021,0],[0,0],[0,0],[1.41,-5.942],[0,0],[0,0]],"v":[[64.453,-65.561],[64.453,-45.218],[35.953,2.921],[40.182,7.956],[67.676,-22.861],[67.676,-1.813],[76.941,6.345],[86.508,6.345],[96.982,-13.495],[91.241,-16.214],[86.609,1.108],[77.847,1.108],[74.02,-2.518],[74.02,-27.795],[69.086,-27.795],[70.898,-45.016],[70.898,-65.561]],"c":true},"ix":2},"nm":"视","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[10.474,-7.251],[-0.604,-1.913],[-4.028,4.431],[0,0],[0,0],[0,0],[-2.115,-3.122],[0,0],[3.827,4.028],[-2.82,7.855],[0,0],[0,0]],"o":[[0,0],[0,0],[-6.042,13.092],[1.108,1.208],[4.028,-3.021],[0,0],[0,0],[0,0],[3.726,4.633],[0,0],[-1.913,-2.216],[4.935,-6.949],[0,0],[0,0],[0,0]],"v":[[6.546,-67.072],[6.546,-60.828],[31.622,-60.828],[4.129,-27.594],[7.452,-21.149],[19.638,-32.428],[19.638,7.855],[25.983,7.855],[25.983,-36.356],[36.456,-22.458],[40.787,-27.896],[27.795,-42.499],[39.78,-64.856],[36.154,-67.273],[34.946,-67.072]],"c":true},"ix":2},"nm":"视","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"视","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"},{"ch":"频","size":60,"style":"Normal","w":100,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[24.573,-6.647],[-0.504,-1.41],[-0.302,37.766]],"o":[[-0.302,35.751],[1.208,1.208],[26.184,-7.452],[0,0]],"v":[[70.898,-50.958],[44.916,3.323],[48.239,8.157],[76.639,-50.958]],"c":true},"ix":2},"nm":"频","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-4.23,-4.532],[0,0],[6.848,4.834]],"o":[[6.848,5.035],[0,0],[-4.33,-4.431],[0,0]],"v":[[73.416,-8.661],[93.155,8.157],[97.284,3.726],[77.243,-12.488]],"c":true},"ix":2},"nm":"频","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[21.249,-6.949],[-0.806,-1.712],[-5.539,22.458]],"o":[[-5.237,20.847],[1.309,1.41],[22.458,-8.157],[0,0]],"v":[[43.506,-38.873],[5.338,3.021],[8.963,8.258],[49.347,-37.463]],"c":true},"ix":2},"nm":"频","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[4.33,-5.237],[-1.108,-0.906],[-2.316,8.258]],"o":[[-2.115,7.452],[1.511,0.806],[4.33,-5.539],[0,0]],"v":[[13.898,-39.88],[4.028,-19.638],[9.064,-16.415],[19.638,-38.672]],"c":true},"ix":2},"nm":"频","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.41,3.726],[0,0],[0,0],[0,0],[0,0],[0,0],[1.41,-3.223]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.309,-3.323],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.007,3.525],[0,0]],"v":[[54.886,-61.432],[54.886,-13.898],[60.727,-13.898],[60.727,-55.994],[86.407,-55.994],[86.407,-13.998],[92.551,-13.998],[92.551,-61.432],[74.222,-61.432],[78.351,-72.409],[95.572,-72.409],[95.572,-78.452],[52.267,-78.452],[52.267,-72.409],[71.805,-72.409],[67.978,-61.432]],"c":true},"ix":2},"nm":"频","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.884,-75.632],[11.884,-52.872],[4.129,-52.872],[4.129,-46.729],[25.378,-46.729],[25.378,-16.113],[31.522,-16.113],[31.522,-46.729],[50.555,-46.729],[50.555,-52.872],[33.234,-52.872],[33.234,-65.863],[48.138,-65.863],[48.138,-71.603],[33.234,-71.603],[33.234,-84.494],[27.09,-84.494],[27.09,-52.872],[17.624,-52.872],[17.624,-75.632]],"c":true},"ix":2},"nm":"频","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"频","np":9,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Source Han Sans SC"}]}