wangliang_wd

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

* 'main' of http://192.168.1.42/developOne/harmonyPool:
  pulltorefresh升级库;lottie库集成合并
  图集无网络缺省图修改
  fix:1)搜索 输入wuhuhuan,人民号提示暂无内容,android显示对应结果
  解决搜索页面,appfreeze、crash问题
@@ -7,7 +7,6 @@ @@ -7,7 +7,6 @@
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",  
11 "wdConstant": "file:../../commons/wdConstant", 10 "wdConstant": "file:../../commons/wdConstant",
12 "wdPlayer": "file:../../features/wdPlayer", 11 "wdPlayer": "file:../../features/wdPlayer",
13 "wdLogin": "file:../../features/wdLogin", 12 "wdLogin": "file:../../features/wdLogin",
@@ -5,6 +5,7 @@ import { promptAction } from '@kit.ArkUI'; @@ -5,6 +5,7 @@ import { promptAction } from '@kit.ArkUI';
5 import { image } from '@kit.ImageKit'; 5 import { image } from '@kit.ImageKit';
6 import { photoAccessHelper } from '@kit.MediaLibraryKit'; 6 import { photoAccessHelper } from '@kit.MediaLibraryKit';
7 import fs from '@ohos.file.fs'; 7 import fs from '@ohos.file.fs';
  8 +import { NetworkUtil } from 'wdKit';
8 9
9 const PERMISSIONS: Array<Permissions> = [ 10 const PERMISSIONS: Array<Permissions> = [
10 'ohos.permission.READ_IMAGEVIDEO', 11 'ohos.permission.READ_IMAGEVIDEO',
@@ -47,8 +48,13 @@ export struct ImageDownloadComponent { @@ -47,8 +48,13 @@ export struct ImageDownloadComponent {
47 } 48 }
48 49
49 aboutToAppear(): void { 50 aboutToAppear(): void {
  51 + // 注册监听网络连接
  52 + let netStatus = NetworkUtil.isNetConnected()
  53 + if (netStatus) {
  54 + // 有网络
50 this.onChangeUrl() 55 this.onChangeUrl()
51 } 56 }
  57 + }
52 58
53 async onChangeUrl(): Promise<void> { 59 async onChangeUrl(): Promise<void> {
54 console.info(`cj2024 图片下载 ${this.url}`) 60 console.info(`cj2024 图片下载 ${this.url}`)
@@ -27,6 +27,7 @@ export struct MultiPictureDetailItemComponent { @@ -27,6 +27,7 @@ export struct MultiPictureDetailItemComponent {
27 private MultiPictureDetailItem: PhotoListBean = {} as PhotoListBean 27 private MultiPictureDetailItem: PhotoListBean = {} as PhotoListBean
28 //alt app.media.picture_loading 设计稿尺寸 28 //alt app.media.picture_loading 设计稿尺寸
29 @State imageWidth:string | number = 167 29 @State imageWidth:string | number = 167
  30 + private scroller: Scroller = new Scroller()
30 31
31 32
32 async aboutToAppear() { 33 async aboutToAppear() {
@@ -179,6 +180,7 @@ export struct MultiPictureDetailItemComponent { @@ -179,6 +180,7 @@ export struct MultiPictureDetailItemComponent {
179 180
180 build() { 181 build() {
181 Row() { 182 Row() {
  183 + Scroll(this.scroller) {
182 if(this.imageUri != null && (this.imageUri.includes('.gif') || this.imageUri.includes('.GIF'))){ 184 if(this.imageUri != null && (this.imageUri.includes('.gif') || this.imageUri.includes('.GIF'))){
183 Image(this.imageUri)// TODO:知识点:宽高只根据其尺寸设置一个,通过保持宽高比来设置另一个属性 185 Image(this.imageUri)// TODO:知识点:宽高只根据其尺寸设置一个,通过保持宽高比来设置另一个属性
184 .alt($r('app.media.datail_imageLoading_w')) 186 .alt($r('app.media.datail_imageLoading_w'))
@@ -197,7 +199,7 @@ export struct MultiPictureDetailItemComponent { @@ -197,7 +199,7 @@ export struct MultiPictureDetailItemComponent {
197 this.imageWidth = '100%' 199 this.imageWidth = '100%'
198 }) 200 })
199 }else{ 201 }else{
200 - Image(this.imagePixelMap)// TODO:知识点:宽高只根据其尺寸设置一个,通过保持宽高比来设置另一个属性 202 + Image(this.imagePixelMap || 'app.media.datail_imageLoading_w')// TODO:知识点:宽高只根据其尺寸设置一个,通过保持宽高比来设置另一个属性
201 .alt($r('app.media.datail_imageLoading_w')) 203 .alt($r('app.media.datail_imageLoading_w'))
202 .width(this.imageWidth) 204 .width(this.imageWidth)
203 .objectFit(ImageFit.Auto)// TODO:知识点:保持宽高比进行缩放,可以超出父组件,以便实现多图切换的增强功能 205 .objectFit(ImageFit.Auto)// TODO:知识点:保持宽高比进行缩放,可以超出父组件,以便实现多图切换的增强功能
@@ -215,6 +217,10 @@ export struct MultiPictureDetailItemComponent { @@ -215,6 +217,10 @@ export struct MultiPictureDetailItemComponent {
215 }) 217 })
216 } 218 }
217 } 219 }
  220 + .scrollable(ScrollDirection.Vertical)
  221 + .scrollBarWidth(0)
  222 + .height(this.imageDefaultSize.height || "100%")
  223 + }
218 .onBlur(() => { 224 .onBlur(() => {
219 this.resetCurrentImageInfo(); 225 this.resetCurrentImageInfo();
220 }) 226 })
@@ -66,31 +66,31 @@ export struct SearchComponent { @@ -66,31 +66,31 @@ export struct SearchComponent {
66 this.breakpointSystem.unregister(); 66 this.breakpointSystem.unregister();
67 } 67 }
68 68
69 - getRelatedSearchContent() {  
70 - if (StringUtils.isNotEmpty(this.searchText)) {  
71 - SearcherAboutDataModel.getRelatedSearchContentData(encodeURI(this.searchText), getContext(this)).then((value) => { 69 + getRelatedSearchContent(searchText: string) {
  70 + if (StringUtils.isNotEmpty(searchText)) {
  71 + SearcherAboutDataModel.getRelatedSearchContentData(encodeURI(searchText), getContext(this)).then((value) => {
72 if (value != null && value.length > 0) { 72 if (value != null && value.length > 0) {
73 this.relatedSearchContentsData = [] 73 this.relatedSearchContentsData = []
74 value.forEach(item => { 74 value.forEach(item => {
75 let tempValue: string = item 75 let tempValue: string = item
76 let tempArr: string[] = [] 76 let tempArr: string[] = []
77 - if (tempValue.indexOf(this.searchText) === -1) { 77 + if (tempValue.indexOf(searchText) === -1) {
78 tempArr.push(item) 78 tempArr.push(item)
79 this.relatedSearchContentsData.push(new SearchRelatedItem(item, tempArr)) 79 this.relatedSearchContentsData.push(new SearchRelatedItem(item, tempArr))
80 } else { 80 } else {
81 - while (tempValue.indexOf(this.searchText) != -1) {  
82 - let index = tempValue.indexOf(this.searchText) 81 + while (tempValue.indexOf(searchText) != -1) {
  82 + let index = tempValue.indexOf(searchText)
83 if (index === 0) { 83 if (index === 0) {
84 try { 84 try {
85 - tempArr.push(this.searchText)  
86 - tempValue = tempValue.substring(this.searchText.length, tempValue.length) 85 + tempArr.push(searchText)
  86 + tempValue = tempValue.substring(searchText.length, tempValue.length)
87 } catch (e) { 87 } catch (e) {
88 } 88 }
89 } else { 89 } else {
90 try { 90 try {
91 tempArr.push(tempValue.substring(0, index)) 91 tempArr.push(tempValue.substring(0, index))
92 - tempArr.push(this.searchText)  
93 - tempValue = tempValue.substring(index + this.searchText.length, tempValue.length) 92 + tempArr.push(searchText)
  93 + tempValue = tempValue.substring(index + searchText.length, tempValue.length)
94 } catch (e) { 94 } catch (e) {
95 } 95 }
96 } 96 }
@@ -356,7 +356,7 @@ export struct SearchComponent { @@ -356,7 +356,7 @@ export struct SearchComponent {
356 this.resetSearch() 356 this.resetSearch()
357 } else { 357 } else {
358 if (this.hasInputContent) { 358 if (this.hasInputContent) {
359 - this.getRelatedSearchContent() 359 + this.getRelatedSearchContent(value)
360 } 360 }
361 } 361 }
362 }) 362 })
@@ -19,8 +19,7 @@ import { FollowListDetailItem } from '../../viewmodel/FollowListDetailItem' @@ -19,8 +19,7 @@ import { FollowListDetailItem } from '../../viewmodel/FollowListDetailItem'
19 import { FollowListStatusRequestItem } from '../../viewmodel/FollowListStatusRequestItem' 19 import { FollowListStatusRequestItem } from '../../viewmodel/FollowListStatusRequestItem'
20 import { QueryListIsFollowedItem } from '../../viewmodel/QueryListIsFollowedItem' 20 import { QueryListIsFollowedItem } from '../../viewmodel/QueryListIsFollowedItem'
21 import { SearchResultContentData } from '../../viewmodel/SearchResultContentData' 21 import { SearchResultContentData } from '../../viewmodel/SearchResultContentData'
22 -import {  
23 - SearchResultContentItem, SearchRmhDescription } from '../../viewmodel/SearchResultContentItem' 22 +import { SearchResultContentItem, SearchRmhDescription } from '../../viewmodel/SearchResultContentItem'
24 import { CardParser } from '../CardParser' 23 import { CardParser } from '../CardParser'
25 import { FollowChildComponent } from '../mine/follow/FollowChildComponent' 24 import { FollowChildComponent } from '../mine/follow/FollowChildComponent'
26 import { ListHasNoMoreDataUI } from '../reusable/ListHasNoMoreDataUI' 25 import { ListHasNoMoreDataUI } from '../reusable/ListHasNoMoreDataUI'
@@ -38,7 +37,7 @@ export struct SearchResultContentComponent { @@ -38,7 +37,7 @@ export struct SearchResultContentComponent {
38 @State keywords: string = "" 37 @State keywords: string = ""
39 @State searchType: string = "" 38 @State searchType: string = ""
40 @State data: LazyDataSource<ContentDTO> = new LazyDataSource(); 39 @State data: LazyDataSource<ContentDTO> = new LazyDataSource();
41 - tempList : ContentDTO[] = [] 40 + tempList: ContentDTO[] = []
42 @State data_rmh: SearchRmhDescription[] = [] 41 @State data_rmh: SearchRmhDescription[] = []
43 @State count: number = -1; 42 @State count: number = -1;
44 @State isLoading: boolean = false 43 @State isLoading: boolean = false
@@ -48,14 +47,14 @@ export struct SearchResultContentComponent { @@ -48,14 +47,14 @@ export struct SearchResultContentComponent {
48 scroller: Scroller = new Scroller() 47 scroller: Scroller = new Scroller()
49 private scroller2: Scroller = new Scroller() 48 private scroller2: Scroller = new Scroller()
50 @State ellipseW: number = 0 49 @State ellipseW: number = 0
51 - @State moreWidth:number = 20 50 + @State moreWidth: number = 20
52 @State listLeft: number = 0 51 @State listLeft: number = 0
53 @State isEnd: boolean = false 52 @State isEnd: boolean = false
54 - @Watch('updateData') @Prop sameSearch:number = 0  
55 - @Prop isCurrentShow:boolean = false; 53 + @Watch('updateData') @Prop sameSearch: number = 0
  54 + @Prop isCurrentShow: boolean = false;
56 55
57 - updateData(){  
58 - if(this.isCurrentShow){ 56 + updateData() {
  57 + if (this.isCurrentShow) {
59 this.data_rmh = [] 58 this.data_rmh = []
60 59
61 this.data.clearAllData() 60 this.data.clearAllData()
@@ -115,7 +114,7 @@ export struct SearchResultContentComponent { @@ -115,7 +114,7 @@ export struct SearchResultContentComponent {
115 data.headerPhotoUrl = item.headPhotoUrl.split("?")[0] 114 data.headerPhotoUrl = item.headPhotoUrl.split("?")[0]
116 data.mainControl = item.mainControl + "" 115 data.mainControl = item.mainControl + ""
117 116
118 - if(data_temp.length === 1){ 117 + if (data_temp.length === 1) {
119 this.bean.headPhotoUrl = item.headPhotoUrl.split("?")[0] 118 this.bean.headPhotoUrl = item.headPhotoUrl.split("?")[0]
120 this.bean.cnUserName = item.userName 119 this.bean.cnUserName = item.userName
121 this.bean.creatorId = item.creatorId 120 this.bean.creatorId = item.creatorId
@@ -133,8 +132,8 @@ export struct SearchResultContentComponent { @@ -133,8 +132,8 @@ export struct SearchResultContentComponent {
133 } else { 132 } else {
134 this.bean.cnFansNum = item.fansNum + "" 133 this.bean.cnFansNum = item.fansNum + ""
135 } 134 }
136 - let regex:RegExp = new RegExp('\n','g')  
137 - this.bean.introduction = item.introduction.replace(regex,'') 135 + let regex: RegExp = new RegExp('\n', 'g')
  136 + this.bean.introduction = item.introduction.replace(regex, '')
138 137
139 this.bean.mainControl = item.mainControl 138 this.bean.mainControl = item.mainControl
140 this.bean.banControl = item.banControl 139 this.bean.banControl = item.banControl
@@ -148,9 +147,13 @@ export struct SearchResultContentComponent { @@ -148,9 +147,13 @@ export struct SearchResultContentComponent {
148 data_temp.forEach((data) => { 147 data_temp.forEach((data) => {
149 this.data_rmh.push(data) 148 this.data_rmh.push(data)
150 }) 149 })
  150 +
  151 + if(this.data_rmh.length > 0){
  152 + this.count = 1
  153 + }
151 //只有一条创作者,获取 创作者信息 154 //只有一条创作者,获取 创作者信息
152 if (this.data_rmh.length === 1) { 155 if (this.data_rmh.length === 1) {
153 - if(StringUtils.isNotEmpty(UserDataLocal.getUserId())){ 156 + if (StringUtils.isNotEmpty(UserDataLocal.getUserId())) {
154 //查询是否被关注 157 //查询是否被关注
155 let status = new FollowListStatusRequestItem() 158 let status = new FollowListStatusRequestItem()
156 status.creatorIds.push(new QueryListIsFollowedItem(this.data_rmh[0].creatorId)) 159 status.creatorIds.push(new QueryListIsFollowedItem(this.data_rmh[0].creatorId))
@@ -159,7 +162,7 @@ export struct SearchResultContentComponent { @@ -159,7 +162,7 @@ export struct SearchResultContentComponent {
159 }).catch((err: Error) => { 162 }).catch((err: Error) => {
160 console.log(TAG, "请求失败") 163 console.log(TAG, "请求失败")
161 }) 164 })
162 - }else{ 165 + } else {
163 this.bean.status = "" 166 this.bean.status = ""
164 } 167 }
165 } 168 }
@@ -192,6 +195,8 @@ export struct SearchResultContentComponent { @@ -192,6 +195,8 @@ export struct SearchResultContentComponent {
192 }) 195 })
193 }) 196 })
194 197
  198 + if (data.contentList.length > 0) {
  199 +
195 SearcherAboutDataModel.getInteractListData(data, getContext(this)).then((newValue) => { 200 SearcherAboutDataModel.getInteractListData(data, getContext(this)).then((newValue) => {
196 newValue.forEach((item) => { 201 newValue.forEach((item) => {
197 resultData.list.forEach((data) => { 202 resultData.list.forEach((data) => {
@@ -206,32 +211,32 @@ export struct SearchResultContentComponent { @@ -206,32 +211,32 @@ export struct SearchResultContentComponent {
206 }) 211 })
207 // 批量号主信息 212 // 批量号主信息
208 let creatorIdList: string[] = [] 213 let creatorIdList: string[] = []
209 - resultData.list.forEach((value:SearchResultContentItem) => { 214 + resultData.list.forEach((value: SearchResultContentItem) => {
210 creatorIdList.push(value.data.creatorId) 215 creatorIdList.push(value.data.creatorId)
211 }) 216 })
212 - SearcherAboutDataModel.getCreatorDetailListData({creatorIdList:creatorIdList}).then((rem) => { 217 + SearcherAboutDataModel.getCreatorDetailListData({ creatorIdList: creatorIdList }).then((rem) => {
213 resultData.list.forEach((value: SearchResultContentItem) => { 218 resultData.list.forEach((value: SearchResultContentItem) => {
214 const landscape = value.data.landscape 219 const landscape = value.data.landscape
215 let photos: FullColumnImgUrlDTO[] = [] 220 let photos: FullColumnImgUrlDTO[] = []
216 // if (value.data.appStyle === 4) { 221 // if (value.data.appStyle === 4) {
217 value.data.appStyleImages.split("&&").forEach((value) => { 222 value.data.appStyleImages.split("&&").forEach((value) => {
218 let resizeParams = MinePageDatasModel.extractResizeParams(value) 223 let resizeParams = MinePageDatasModel.extractResizeParams(value)
219 - if(resizeParams && resizeParams.length === 2){ 224 + if (resizeParams && resizeParams.length === 2) {
220 photos.push( 225 photos.push(
221 { 226 {
222 fullUrl: value, 227 fullUrl: value,
223 - weight:resizeParams[0],  
224 - height:resizeParams[1], 228 + weight: resizeParams[0],
  229 + height: resizeParams[1],
225 landscape: Number(landscape), 230 landscape: Number(landscape),
226 } as FullColumnImgUrlDTO 231 } as FullColumnImgUrlDTO
227 ) 232 )
228 } 233 }
229 }) 234 })
230 // } 235 // }
231 - let contentDTO = this.dataTransform(rem,value, photos);  
232 - if(value.data.type != "13"){ 236 + let contentDTO = this.dataTransform(rem, value, photos);
  237 + if (value.data.type != "13") {
233 this.data.push(contentDTO) 238 this.data.push(contentDTO)
234 - if(value.data.sameContentList != null && value.data.sameContentList.length > 0) { 239 + if (value.data.sameContentList != null && value.data.sameContentList.length > 0) {
235 let contentDTO2 = new ContentDTO(); 240 let contentDTO2 = new ContentDTO();
236 contentDTO2.sameContentListJson = JSON.stringify(value.data.sameContentList) 241 contentDTO2.sameContentListJson = JSON.stringify(value.data.sameContentList)
237 contentDTO2.sameContentListSize = value.data.sameContentList.length 242 contentDTO2.sameContentListSize = value.data.sameContentList.length
@@ -257,6 +262,9 @@ export struct SearchResultContentComponent { @@ -257,6 +262,9 @@ export struct SearchResultContentComponent {
257 this.isLoading = false 262 this.isLoading = false
258 this.count = this.count === -1 ? 0 : this.count 263 this.count = this.count === -1 ? 0 : this.count
259 }) 264 })
  265 + }else {
  266 + this.hasMore = false
  267 + }
260 } 268 }
261 269
262 build() { 270 build() {
@@ -264,15 +272,15 @@ export struct SearchResultContentComponent { @@ -264,15 +272,15 @@ export struct SearchResultContentComponent {
264 if (this.count == 0) { 272 if (this.count == 0) {
265 ListHasNoMoreDataUI({ style: 2 }) 273 ListHasNoMoreDataUI({ style: 2 })
266 } else { 274 } else {
267 - List({scroller:this.scroller2}) {  
268 - if (this.data_rmh != null && this.data_rmh.length > 0){  
269 - if (this.data_rmh.length === 1){  
270 - ListItem(){ 275 + List({ scroller: this.scroller2 }) {
  276 + if (this.data_rmh != null && this.data_rmh.length > 0) {
  277 + if (this.data_rmh.length === 1) {
  278 + ListItem() {
271 FollowChildComponent({ data: this.bean, type: 1 }) 279 FollowChildComponent({ data: this.bean, type: 1 })
272 - }.padding({left:"31lpx",right:"31lpx"})  
273 - }else{  
274 - ListItem(){  
275 - Column(){ 280 + }.padding({ left: "31lpx", right: "31lpx" })
  281 + } else {
  282 + ListItem() {
  283 + Column() {
276 this.SearchListUI() 284 this.SearchListUI()
277 } 285 }
278 } 286 }
@@ -283,21 +291,26 @@ export struct SearchResultContentComponent { @@ -283,21 +291,26 @@ export struct SearchResultContentComponent {
283 Column() { 291 Column() {
284 if (this.searchType == "activity") { 292 if (this.searchType == "activity") {
285 ActivityItemComponent({ contentDTO: item }) 293 ActivityItemComponent({ contentDTO: item })
286 - }else if(item.sameContentListSize > 0){ 294 + } else if (item.sameContentListSize > 0) {
287 MoreComponent({ contentDTO: item }) 295 MoreComponent({ contentDTO: item })
288 - }else if(item.appStyle == "9"){  
289 - Column(){  
290 - Card9Component({ compDTO: new CompDTO, contentDTO:item, pageId: "", pageName: "" }) 296 + } else if (item.appStyle == "9") {
  297 + Column() {
  298 + Card9Component({
  299 + compDTO: new CompDTO,
  300 + contentDTO: item,
  301 + pageId: "",
  302 + pageName: ""
  303 + })
291 Divider().strokeWidth(5).color('#f5f5f5').padding({ left: 0, right: 0 }) 304 Divider().strokeWidth(5).color('#f5f5f5').padding({ left: 0, right: 0 })
292 } 305 }
293 } else { 306 } else {
294 - if(this.data?.get(index + 1)?.sameContentListSize > 0) { 307 + if (this.data?.get(index + 1)?.sameContentListSize > 0) {
295 Divider() 308 Divider()
296 .width('100%') 309 .width('100%')
297 .color($r('app.color.color_F5F5F5')) 310 .color($r('app.color.color_F5F5F5'))
298 .strokeWidth(4) 311 .strokeWidth(4)
299 } 312 }
300 - CardParser({compDTO:new CompDTO, contentDTO: item }) 313 + CardParser({ compDTO: new CompDTO, contentDTO: item })
301 } 314 }
302 if (index != this.data.totalCount() - 1) { 315 if (index != this.data.totalCount() - 1) {
303 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 }) 316 Divider().strokeWidth(1).color('#f5f5f5').padding({ left: 16, right: 16 })
@@ -312,7 +325,7 @@ export struct SearchResultContentComponent { @@ -312,7 +325,7 @@ export struct SearchResultContentComponent {
312 }, (item: ContentDTO, index: number) => index.toString()) 325 }, (item: ContentDTO, index: number) => index.toString())
313 326
314 //没有更多数据 显示提示 327 //没有更多数据 显示提示
315 - if (!this.hasMore && this.data.totalCount() > 0) { 328 + if (!this.hasMore && (this.data.totalCount() > 0|| (this.data_rmh != null && this.data_rmh.length > 0))) {
316 ListItem() { 329 ListItem() {
317 ListHasNoMoreDataUI() 330 ListHasNoMoreDataUI()
318 } 331 }
@@ -320,6 +333,7 @@ export struct SearchResultContentComponent { @@ -320,6 +333,7 @@ export struct SearchResultContentComponent {
320 }.cachedCount(5) 333 }.cachedCount(5)
321 .edgeEffect(EdgeEffect.None) 334 .edgeEffect(EdgeEffect.None)
322 .scrollBar(BarState.Off) 335 .scrollBar(BarState.Off)
  336 + .height('100%')
323 .onReachEnd(() => { 337 .onReachEnd(() => {
324 console.log(TAG, "触底了"); 338 console.log(TAG, "触底了");
325 if (!this.isLoading) { 339 if (!this.isLoading) {
@@ -334,23 +348,23 @@ export struct SearchResultContentComponent { @@ -334,23 +348,23 @@ export struct SearchResultContentComponent {
334 348
335 @Builder 349 @Builder
336 SearchListUI() { 350 SearchListUI() {
337 - List({initialIndex: 0,space:'8lpx',scroller: this.scroller}) {  
338 - ListItemGroup(){ 351 + List({ initialIndex: 0, space: '8lpx', scroller: this.scroller }) {
  352 + ListItemGroup() {
339 ForEach(this.data_rmh, (item: SearchRmhDescription, index: number) => { 353 ForEach(this.data_rmh, (item: SearchRmhDescription, index: number) => {
340 ListItem() { 354 ListItem() {
341 - SearchCreatorComponent({item:item}) 355 + SearchCreatorComponent({ item: item })
342 } 356 }
343 .width('150lpx') 357 .width('150lpx')
344 .height('100%') 358 .height('100%')
345 }) 359 })
346 }.offset({ left: this.listLeft }) 360 }.offset({ left: this.listLeft })
347 361
348 - ListItem(){  
349 - if (this.data_rmh.length === 10){ 362 + ListItem() {
  363 + if (this.data_rmh.length === 10) {
350 this.itemEnd() 364 this.itemEnd()
351 } 365 }
352 }.height('100%') 366 }.height('100%')
353 - .margin({left:'23lpx'}) 367 + .margin({ left: '23lpx' })
354 } 368 }
355 .edgeEffect(EdgeEffect.None) 369 .edgeEffect(EdgeEffect.None)
356 .scrollBar(BarState.Off) 370 .scrollBar(BarState.Off)
@@ -359,10 +373,10 @@ export struct SearchResultContentComponent { @@ -359,10 +373,10 @@ export struct SearchResultContentComponent {
359 .height('219lpx') 373 .height('219lpx')
360 .onReachEnd(() => { 374 .onReachEnd(() => {
361 this.isEnd = true 375 this.isEnd = true
362 - console.log(TAG,'is end') 376 + console.log(TAG, 'is end')
363 }) 377 })
364 .onScrollFrameBegin((offset: number, state: ScrollState) => { 378 .onScrollFrameBegin((offset: number, state: ScrollState) => {
365 - console.log(TAG,'offset', offset) 379 + console.log(TAG, 'offset', offset)
366 if (!this.scroller.isAtEnd()) { 380 if (!this.scroller.isAtEnd()) {
367 this.isEnd = false 381 this.isEnd = false
368 } 382 }
@@ -374,31 +388,35 @@ export struct SearchResultContentComponent { @@ -374,31 +388,35 @@ export struct SearchResultContentComponent {
374 .parallelGesture( 388 .parallelGesture(
375 PanGesture({ direction: PanDirection.Horizontal, distance: 1 }) 389 PanGesture({ direction: PanDirection.Horizontal, distance: 1 })
376 .onActionStart((event: GestureEvent) => { 390 .onActionStart((event: GestureEvent) => {
377 - console.info(TAG,'Pan start') 391 + console.info(TAG, 'Pan start')
378 }) 392 })
379 .onActionUpdate((event: GestureEvent) => { 393 .onActionUpdate((event: GestureEvent) => {
380 ///小于10个不展示滑动 394 ///小于10个不展示滑动
381 - if (this.data_rmh.length < 10) return; 395 + if (this.data_rmh.length < 10) {
  396 + return;
  397 + }
382 if (event && this.isEnd) { 398 if (event && this.isEnd) {
383 // console.log('event.offsetX',event.offsetX) 399 // console.log('event.offsetX',event.offsetX)
384 this.listLeft = event.offsetX < -60 ? -60 : event.offsetX > 0 ? 0 : event.offsetX 400 this.listLeft = event.offsetX < -60 ? -60 : event.offsetX > 0 ? 0 : event.offsetX
385 this.ellipseW = (-this.listLeft) / 1.5 401 this.ellipseW = (-this.listLeft) / 1.5
386 402
387 - console.log(TAG,"this.ellipseW==>" + this.ellipseW) 403 + console.log(TAG, "this.ellipseW==>" + this.ellipseW)
388 } 404 }
389 }) 405 })
390 .onActionEnd((event: GestureEvent) => { 406 .onActionEnd((event: GestureEvent) => {
391 - if (this.data_rmh.length < 10) return;  
392 - console.info(TAG,'Pan end') 407 + if (this.data_rmh.length < 10) {
  408 + return;
  409 + }
  410 + console.info(TAG, 'Pan end')
393 this.listLeft = 0 411 this.listLeft = 0
394 // this.moreWidth = 20 412 // this.moreWidth = 20
395 413
396 - if (event.offsetX < 0 && this.ellipseW >=20) {  
397 - console.log(TAG,'跳转') 414 + if (event.offsetX < 0 && this.ellipseW >= 20) {
  415 + console.log(TAG, '跳转')
398 let params: Params = { 416 let params: Params = {
399 pageID: this.keywords 417 pageID: this.keywords
400 } 418 }
401 - WDRouterRule.jumpWithPage(WDRouterPage.searchCreatorPage,params) 419 + WDRouterRule.jumpWithPage(WDRouterPage.searchCreatorPage, params)
402 } 420 }
403 this.ellipseW = 0 421 this.ellipseW = 0
404 }) 422 })
@@ -411,18 +429,17 @@ export struct SearchResultContentComponent { @@ -411,18 +429,17 @@ export struct SearchResultContentComponent {
411 .strokeWidth('12lpx') 429 .strokeWidth('12lpx')
412 } 430 }
413 431
414 -  
415 @Builder 432 @Builder
416 itemEnd() { 433 itemEnd() {
417 Row() { 434 Row() {
418 Ellipse() 435 Ellipse()
419 - .width(2* this.ellipseW) 436 + .width(2 * this.ellipseW)
420 .height('100%') 437 .height('100%')
421 .fill('rgb(240,235,238)') 438 .fill('rgb(240,235,238)')
422 .position({ left: -this.ellipseW, top: 0 }) 439 .position({ left: -this.ellipseW, top: 0 })
423 440
424 - Column(){  
425 - Text(this.ellipseW === 0 ? '' : this.ellipseW < 20? '查看更多' : '松手查看') 441 + Column() {
  442 + Text(this.ellipseW === 0 ? '' : this.ellipseW < 20 ? '查看更多' : '松手查看')
426 .width('19lpx') 443 .width('19lpx')
427 .fontSize('19lpx') 444 .fontSize('19lpx')
428 .fontWeight('400lpx') 445 .fontWeight('400lpx')
@@ -437,17 +454,18 @@ export struct SearchResultContentComponent { @@ -437,17 +454,18 @@ export struct SearchResultContentComponent {
437 .height('100%') 454 .height('100%')
438 } 455 }
439 456
440 - private dataTransform(rem:CreatorDetailResponseItem[],value: SearchResultContentItem, photos: FullColumnImgUrlDTO[]): ContentDTO {  
441 - let rmhInfo = this.getRmhInfo(rem,value)  
442 - console.log('获取photos',JSON.stringify(photos))  
443 - console.log('获取value2',JSON.stringify(value)) 457 + private dataTransform(rem: CreatorDetailResponseItem[], value: SearchResultContentItem,
  458 + photos: FullColumnImgUrlDTO[]): ContentDTO {
  459 + let rmhInfo = this.getRmhInfo(rem, value)
  460 + console.log('获取photos', JSON.stringify(photos))
  461 + console.log('获取value2', JSON.stringify(value))
444 let liveType = value.data?.liveType; 462 let liveType = value.data?.liveType;
445 let seoTags = value.data?.seoTags 463 let seoTags = value.data?.seoTags
446 let cornerMark = value.data?.cornerMark 464 let cornerMark = value.data?.cornerMark
447 let contentDTO = new ContentDTO(); 465 let contentDTO = new ContentDTO();
448 - contentDTO.liveType = liveType?liveType: ""  
449 - contentDTO.seoTags = seoTags?seoTags: ""  
450 - contentDTO.cornerMark = cornerMark?cornerMark: "" 466 + contentDTO.liveType = liveType ? liveType : ""
  467 + contentDTO.seoTags = seoTags ? seoTags : ""
  468 + contentDTO.cornerMark = cornerMark ? cornerMark : ""
451 contentDTO.appStyle = value.data.appStyle + "" 469 contentDTO.appStyle = value.data.appStyle + ""
452 contentDTO.cityCode = value.data.cityCode 470 contentDTO.cityCode = value.data.cityCode
453 contentDTO.coverSize = "" 471 contentDTO.coverSize = ""
@@ -529,13 +547,13 @@ export struct SearchResultContentComponent { @@ -529,13 +547,13 @@ export struct SearchResultContentComponent {
529 } 547 }
530 548
531 // 搜索数据转化rmhInfo 549 // 搜索数据转化rmhInfo
532 - private getRmhInfo(rem:CreatorDetailResponseItem[],value:SearchResultContentItem){ 550 + private getRmhInfo(rem: CreatorDetailResponseItem[], value: SearchResultContentItem) {
533 let obj = value.data 551 let obj = value.data
534 - let rmhInfo:RmhInfoDTO = {  
535 - rmhHeadUrl:obj.headerPhotoUrl,  
536 - rmhName:obj.creatorName,  
537 - rmhId:obj.creatorId,  
538 - authIcon:obj.authIcon, 552 + let rmhInfo: RmhInfoDTO = {
  553 + rmhHeadUrl: obj.headerPhotoUrl,
  554 + rmhName: obj.creatorName,
  555 + rmhId: obj.creatorId,
  556 + authIcon: obj.authIcon,
539 authTitle: obj.authTitle, 557 authTitle: obj.authTitle,
540 authTitle2: '', 558 authTitle2: '',
541 banControl: 0, 559 banControl: 0,
@@ -546,44 +564,43 @@ export struct SearchResultContentComponent { @@ -546,44 +564,43 @@ export struct SearchResultContentComponent {
546 cnMainControl: 0, 564 cnMainControl: 0,
547 cnShareControl: 0, 565 cnShareControl: 0,
548 cnIsComment: 0, 566 cnIsComment: 0,
549 - cnIsLike:0, 567 + cnIsLike: 0,
550 posterShareControl: 0, 568 posterShareControl: 0,
551 rmhDesc: obj.introduction, 569 rmhDesc: obj.introduction,
552 userId: obj.userId, 570 userId: obj.userId,
553 userType: obj.userType, 571 userType: obj.userType,
554 - honoraryIcon:'',  
555 - rmhPlatform:0 572 + honoraryIcon: '',
  573 + rmhPlatform: 0
556 } 574 }
557 - if(rem.length>0){  
558 - rem.forEach(item=>{  
559 - if(item.creatorId === obj.creatorId){ 575 + if (rem.length > 0) {
  576 + rem.forEach(item => {
  577 + if (item.creatorId === obj.creatorId) {
560 rmhInfo = { 578 rmhInfo = {
561 - rmhHeadUrl:item.headPhotoUrl,  
562 - rmhName:item.userName,  
563 - rmhId:item.creatorId,  
564 - authIcon:item.authIcon, 579 + rmhHeadUrl: item.headPhotoUrl,
  580 + rmhName: item.userName,
  581 + rmhId: item.creatorId,
  582 + authIcon: item.authIcon,
565 authTitle: item.authTitle, 583 authTitle: item.authTitle,
566 authTitle2: '', 584 authTitle2: '',
567 banControl: 0, 585 banControl: 0,
568 - cnIsAttention:item.isAttention, 586 + cnIsAttention: item.isAttention,
569 cnAttention: 0, 587 cnAttention: 0,
570 cnlsComment: 0, 588 cnlsComment: 0,
571 cnlsLike: 0, 589 cnlsLike: 0,
572 cnMainControl: 0, 590 cnMainControl: 0,
573 cnShareControl: 0, 591 cnShareControl: 0,
574 cnIsComment: 0, 592 cnIsComment: 0,
575 - cnIsLike:0, 593 + cnIsLike: 0,
576 posterShareControl: 0, 594 posterShareControl: 0,
577 rmhDesc: item.introduction, 595 rmhDesc: item.introduction,
578 userId: item.userId, 596 userId: item.userId,
579 userType: item.userType, 597 userType: item.userType,
580 - honoraryIcon:'',  
581 - rmhPlatform:0 598 + honoraryIcon: '',
  599 + rmhPlatform: 0
582 } 600 }
583 } 601 }
584 }) 602 })
585 } 603 }
586 return rmhInfo 604 return rmhInfo
587 } 605 }
588 -  
589 } 606 }
@@ -58,6 +58,7 @@ export struct EmptyComponent { @@ -58,6 +58,7 @@ export struct EmptyComponent {
58 @State emptyHeight: string | number = CommonConstants.FULL_PARENT; 58 @State emptyHeight: string | number = CommonConstants.FULL_PARENT;
59 @State emptyType: number = WDViewDefaultType.WDViewDefaultType_Default; // 缺省图类型,传枚举 59 @State emptyType: number = WDViewDefaultType.WDViewDefaultType_Default; // 缺省图类型,传枚举
60 @State emptyButton: boolean = false 60 @State emptyButton: boolean = false
  61 + @State isBlack: boolean = false // 背景是否为黑色 默认白色
61 @State timeNum: number = 10 62 @State timeNum: number = 10
62 /** 63 /**
63 * The empty image width percentage setting. 64 * The empty image width percentage setting.
@@ -135,7 +136,7 @@ export struct EmptyComponent { @@ -135,7 +136,7 @@ export struct EmptyComponent {
135 }) 136 })
136 137
137 if (this.isShowButton()) { 138 if (this.isShowButton()) {
138 - if (this.emptyType !== 15) { 139 + if (this.emptyType !== 15 && !this.isBlack) {
139 Button('点击重试') 140 Button('点击重试')
140 .type(ButtonType.Normal) 141 .type(ButtonType.Normal)
141 .width(80) 142 .width(80)
@@ -253,7 +254,7 @@ export struct EmptyComponent { @@ -253,7 +254,7 @@ export struct EmptyComponent {
253 } 254 }
254 255
255 isShowButton() { 256 isShowButton() {
256 - if (this.emptyType === 1 || this.emptyType === 9 || this.emptyType === 15) { 257 + if (this.emptyType === 1 || this.emptyType === 9 || this.emptyType === 15 && this.emptyButton) {
257 return true 258 return true
258 } else { 259 } else {
259 return false 260 return false
1 -import { image } from '@kit.ImageKit';  
2 -import { matrix4, promptAction, window } from '@kit.ArkUI';  
3 -import { BusinessError } from '@kit.BasicServicesKit';  
4 -import { ScaleModel } from '../../model/ScaleModel';  
5 -import { OffsetModel } from '../../model/OffsetModel';  
6 -import { windowSizeManager } from '../../utils/Managers';  
7 -import { runWithAnimation } from '../../utils/FuncUtils';  
8 -import { PhotoListBean } from 'wdBean/Index';  
9 -import { http } from '@kit.NetworkKit';  
10 -  
11 -// TODO:知识点:组件复用  
12 -@Reusable  
13 -@Component  
14 -export struct ImageItemView {  
15 - // @Consume private bgc: Color;  
16 - @Link isEnableSwipe: boolean; // TODO:需求:多图切换  
17 - @State isEnableOffset: boolean = false;  
18 - @State imageScaleInfo: ScaleModel = new ScaleModel(1.0, 1.0, 1.5, 0.3);  
19 - @State imageOffsetInfo: OffsetModel = new OffsetModel(0, 0);  
20 - @State matrix: matrix4.Matrix4Transit = matrix4.identity().copy();  
21 - @State imagePixelMap: image.PixelMap | null = null; // 当前图片pixelMap,用于Image组件显示  
22 - @State fitWH: "width" | "height" | undefined = undefined; // 表示当前图片是根据宽度适配还是高度适配  
23 - @State imageDefaultSize: image.Size = { width: 0, height: 0 }; // 图片默认大小,即,与屏幕大小最适配的显示大小  
24 - imageUri: string = ""; // 当前图片uri  
25 - imageWHRatio: number = 0; // 图片原始宽高比  
26 - private MultiPictureDetailItem: PhotoListBean = {} as PhotoListBean  
27 - @State imageBuffer: ArrayBuffer | undefined = undefined; // 图片ArrayBuffer  
28 - //alt app.media.picture_loading 设计稿尺寸  
29 - @State imageWidth:string | number = 167  
30 - private scroller: Scroller = new Scroller()  
31 -  
32 - aboutToAppear(): void {  
33 - this.imageUri = this.MultiPictureDetailItem.picPath  
34 - this.getPicture()  
35 - }  
36 -  
37 - /**  
38 - * 通过http的request方法从网络下载图片资源  
39 - */  
40 - async getPicture() {  
41 - // 每一个httpRequest对应一个HTTP请求任务,不可复用  
42 - let httpRequest = http.createHttp();  
43 - // 用于订阅HTTP响应头事件  
44 - httpRequest.on('headersReceive', (header: Object) => {  
45 - console.info('header: ' + JSON.stringify(header));  
46 - });  
47 - // 用于订阅HTTP流式响应数据接收事件  
48 - let res = new ArrayBuffer(0);  
49 - httpRequest.on('dataReceive', (data: ArrayBuffer) => {  
50 - const newRes = new ArrayBuffer(res.byteLength + data.byteLength);  
51 - const resView = new Uint8Array(newRes);  
52 - resView.set(new Uint8Array(res));  
53 - resView.set(new Uint8Array(data), res.byteLength);  
54 - res = newRes;  
55 - // console.info('dataReceive res length: ' + res.byteLength);  
56 - });  
57 - // 用于订阅HTTP流式响应数据接收完毕事件  
58 - httpRequest.on('dataEnd', () => {  
59 - this.transcodePixelMap(res);  
60 - // 判断网络获取到的资源是否为ArrayBuffer类型  
61 - console.info(`dataEnd getPicture ${res}`)  
62 - if (res instanceof ArrayBuffer) {  
63 - console.info(`dataEnd getPicture`)  
64 - this.imageBuffer = res as ArrayBuffer;  
65 - }  
66 - console.info('No more data in response, data receive end');  
67 - });  
68 - httpRequest.requestInStream(this.imageUri,  
69 - (error: BusinessError, data: number) => {  
70 - if (error) {  
71 - // 下载失败时弹窗提示检查网络,不执行后续逻辑  
72 - promptAction.showToast({  
73 - message: $r('app.string.image_request_fail'),  
74 - duration: 2000  
75 - })  
76 - this.getPicture()  
77 - console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);  
78 - return;  
79 - }  
80 - // 取消订阅HTTP响应头事件  
81 - httpRequest.off('headersReceive');  
82 - // 取消订阅HTTP流式响应数据接收事件  
83 - httpRequest.off('dataReceive');  
84 - // 取消订阅HTTP流式响应数据接收完毕事件  
85 - httpRequest.off('dataEnd');  
86 - // 当该请求使用完毕时,调用destroy方法主动销毁  
87 - httpRequest.destroy();  
88 - }  
89 - )  
90 - }  
91 -  
92 - /**  
93 - * 使用createPixelMap将ArrayBuffer类型的图片装换为PixelMap类型  
94 - * @param data:网络获取到的资源  
95 - */  
96 - transcodePixelMap(data: ArrayBuffer) {  
97 - const imageData: ArrayBuffer = data;  
98 - // 通过ArrayBuffer创建图片源实例。  
99 - const imageSource: image.ImageSource = image.createImageSource(imageData);  
100 - this.initCurrentImageInfo(imageSource);  
101 - }  
102 -  
103 - /**  
104 - * 根据图片宽高比及窗口大小计算图片的默认宽高,即,图片最适配屏幕的大小  
105 - * @param imageWHRatio:图片原始宽高比  
106 - * @param size:窗口大小{with:number,height:number}  
107 - * @returns image.Size  
108 - */  
109 - calcImageDefaultSize(imageWHRatio: number, size: window.Size): image.Size {  
110 - let width = 0  
111 - let height = 0;  
112 - width = size.width;  
113 - height = size.width / imageWHRatio;  
114 - return { width: width, height: height };  
115 - }  
116 -  
117 - /**  
118 - * TODO:知识点:根据图片大小(宽高<=屏幕宽高)和屏幕大小计算图片放大适配屏幕进行显示的缩放倍率  
119 - * @param imageSize:图片当前大小  
120 - * @param windowSize:窗口大小  
121 - * @returns:缩放倍率  
122 - */  
123 - calcFitScaleRatio(imageSize: image.Size, windowSize: window.Size): number {  
124 - let ratio: number = 1.0;  
125 - if (windowSize.width > imageSize.width) {  
126 - ratio = windowSize.width / imageSize.width;  
127 - } else {  
128 - ratio = windowSize.height / imageSize.height;  
129 - }  
130 - return ratio;  
131 - }  
132 -  
133 - /**  
134 - * 设置当前图片的相关信息:uri、whRatio、pixelMap、fitWH、defaultSize、maxScaleValue  
135 - * TODO:知识点:提前获取图片的信息,以进行Image组件的尺寸设置及后续的相关计算  
136 - */  
137 - initCurrentImageInfo(imageSource: image.ImageSource): void {  
138 - this.matrix = matrix4.identity().copy();  
139 - // const imageSource: image.ImageSource = image.createImageSource(this.imageUri);  
140 - imageSource.getImageInfo(0).then((data: image.ImageInfo) => {  
141 - this.imageWHRatio = data.size.width / data.size.height;  
142 - console.error(`this.imageDefaultSize this.imageWHRatio = ${this.imageWHRatio}`);  
143 - console.error(`this.imageDefaultSize width = ${data.size.width}`);  
144 - console.error(`this.imageDefaultSize height = ${data.size.height}`);  
145 - this.imageDefaultSize = this.calcImageDefaultSize(this.imageWHRatio, windowSizeManager.get());  
146 - console.error(`this.imageDefaultSize = ${JSON.stringify(windowSizeManager.get())}`);  
147 - console.error(`this.imageDefaultSize = ${JSON.stringify(this.imageDefaultSize)}`);  
148 - if (this.imageDefaultSize.width === windowSizeManager.get().width) {  
149 - this.fitWH = "width";  
150 - } else {  
151 - this.fitWH = "height";  
152 - }  
153 - this.imageScaleInfo.maxScaleValue += this.fitWH === "width" ?  
154 - (windowSizeManager.get().height / this.imageDefaultSize.height) :  
155 - (windowSizeManager.get().width / this.imageDefaultSize.width);  
156 - }).catch((err: BusinessError) => {  
157 - console.error(`[error][getImageInfo]${err.message}`);  
158 - });  
159 - imageSource.createPixelMap().then((data: image.PixelMap) => {  
160 - this.imagePixelMap = data;  
161 - }).catch((err: BusinessError) => {  
162 - console.error(`[error][createPixelMap]${err.message}`);  
163 - });  
164 - this.isEnableOffset = false;  
165 - this.imageScaleInfo.reset();  
166 - this.imageOffsetInfo.reset();  
167 - }  
168 -  
169 - /**  
170 - * 在图片消失时,将当前图片的信息设置为默认值  
171 - */  
172 - resetCurrentImageInfo(): void {  
173 - this.imageScaleInfo.reset();  
174 - this.imageOffsetInfo.reset();  
175 - this.matrix = matrix4.identity().copy();  
176 - }  
177 -  
178 - /**  
179 - * TODO:需求:在偏移时评估是否到达边界,以便进行位移限制与图片的切换  
180 - * @returns:长度为4的boolean数组,表示上下左右是否到达边界  
181 - */  
182 - evaluateBound(): boolean[] {  
183 - return [false, false, false, false];  
184 - }  
185 -  
186 - build() {  
187 - Stack() {  
188 - Scroll(this.scroller) {  
189 - if(this.imageUri != null && (this.imageUri.includes('.gif') || this.imageUri.includes('.GIF'))){  
190 - Image(this.imageUri)// TODO:知识点:宽高只根据其尺寸设置一个,通过保持宽高比来设置另一个属性  
191 - .alt($r('app.media.datail_imageLoading_w'))  
192 - .width(this.imageWidth)  
193 - .objectFit(ImageFit.Auto)// TODO:知识点:保持宽高比进行缩放,可以超出父组件,以便实现多图切换的增强功能  
194 - .interpolation(ImageInterpolation.High)  
195 - .autoResize(false)  
196 - .transform(this.matrix)// TODO:知识点:通过matrix控制图片的缩放  
197 - .defaultFocus(true)  
198 - .offset({  
199 - // TODO:知识点:通过offset控制图片的偏移  
200 - x: this.imageOffsetInfo.currentX,  
201 - y: this.imageOffsetInfo.currentY  
202 - })  
203 - .onComplete(event => {  
204 - this.imageWidth = '100%'  
205 - })  
206 - } else {  
207 - Image(this.imagePixelMap)// TODO:知识点:宽高只根据其尺寸设置一个,通过保持宽高比来设置另一个属性  
208 - .alt($r('app.media.datail_imageLoading_w'))  
209 - .width(this.imageWidth)  
210 - .objectFit(ImageFit.Auto)// TODO:知识点:保持宽高比进行缩放,可以超出父组件,以便实现多图切换的增强功能  
211 - .interpolation(ImageInterpolation.High)  
212 - .autoResize(false)  
213 - .transform(this.matrix)// TODO:知识点:通过matrix控制图片的缩放  
214 - .defaultFocus(true)  
215 - .offset({  
216 - // TODO:知识点:通过offset控制图片的偏移  
217 - x: this.imageOffsetInfo.currentX,  
218 - y: this.imageOffsetInfo.currentY  
219 - })  
220 - .onComplete(event => {  
221 - this.imageWidth = '100%'  
222 - })  
223 - }  
224 - }  
225 - .scrollable(ScrollDirection.Vertical)  
226 - .scrollBarWidth(0)  
227 - .constraintSize({  
228 - maxHeight: this.imageDefaultSize.height  
229 - })  
230 - }  
231 - .onBlur(() => {  
232 - this.resetCurrentImageInfo();  
233 - })  
234 - // .backgroundColor(this.bgc)  
235 - .alignContent(Alignment.Center)  
236 - .width("100%")  
237 - .height("100%")  
238 - .backgroundColor(Color.Black)  
239 - .gesture(  
240 - GestureGroup(  
241 - GestureMode.Exclusive,  
242 - // TODO:知识点:双击切换图片大小  
243 - TapGesture({ count: 2 })  
244 - .onAction(() => {  
245 - let fn: Function;  
246 - // 已经是放大状态下,双击缩小  
247 - if (this.imageScaleInfo.scaleValue > this.imageScaleInfo.defaultScaleValue) {  
248 - fn = () => {  
249 - this.isEnableSwipe = true;  
250 - this.imageScaleInfo.reset();  
251 - this.imageOffsetInfo.reset();  
252 - this.matrix = matrix4.identity().copy();  
253 - };  
254 - } else {  
255 - // 已经是缩小状态,双击放大  
256 - fn = () => {  
257 - this.isEnableSwipe = false;  
258 - const ratio: number = this.calcFitScaleRatio(this.imageDefaultSize, windowSizeManager.get());  
259 - this.imageScaleInfo.scaleValue = ratio;  
260 - this.imageOffsetInfo.reset();  
261 - this.matrix = matrix4.identity().scale({  
262 - x: ratio,  
263 - y: ratio,  
264 - }).copy();  
265 - this.imageScaleInfo.stash();  
266 - }  
267 - }  
268 - runWithAnimation(fn);  
269 - }),  
270 - // 单击切换背景色  
271 - // TapGesture({ count: 1 }).onAction(() => {  
272 - // runWithAnimation(() => {  
273 - // this.bgc = this.bgc === Color.White ? Color.Black : Color.White;  
274 - // });  
275 - // }),  
276 - // TODO:知识点:双指捏合缩放图片  
277 - PinchGesture({ fingers: 2, distance: 1 })  
278 - .onActionUpdate((event: GestureEvent) => {  
279 - this.imageScaleInfo.scaleValue = this.imageScaleInfo.lastValue * event.scale;  
280 - // TODO:知识点:缩放时不允许大于最大缩放因子+额外缩放因子,不允许小于默认大小-额外缩放因子,额外缩放因子用于提升用户体验  
281 - if (this.imageScaleInfo.scaleValue > this.imageScaleInfo.maxScaleValue *  
282 - (1 + this.imageScaleInfo.extraScaleValue)  
283 - ) {  
284 - this.imageScaleInfo.scaleValue = this.imageScaleInfo.maxScaleValue *  
285 - (1 + this.imageScaleInfo.extraScaleValue);  
286 - }  
287 - if (this.imageScaleInfo.scaleValue < this.imageScaleInfo.defaultScaleValue *  
288 - (1 - this.imageScaleInfo.extraScaleValue)) {  
289 - this.imageScaleInfo.scaleValue = this.imageScaleInfo.defaultScaleValue *  
290 - (1 - this.imageScaleInfo.extraScaleValue);  
291 - }  
292 - // TODO:知识点:matrix默认缩放中心为组件中心  
293 - this.matrix = matrix4.identity().scale({  
294 - x: this.imageScaleInfo.scaleValue,  
295 - y: this.imageScaleInfo.scaleValue,  
296 - }).copy();  
297 - console.debug(this.imageScaleInfo.toString());  
298 - })  
299 - .onActionEnd((event: GestureEvent) => {  
300 - /**  
301 - * TODO:知识点:当小于默认大小时,恢复为默认大小  
302 - */  
303 - if (this.imageScaleInfo.scaleValue < this.imageScaleInfo.defaultScaleValue) {  
304 - runWithAnimation(() => {  
305 - this.imageScaleInfo.reset();  
306 - this.imageOffsetInfo.reset();  
307 - this.matrix = matrix4.identity().copy();  
308 - })  
309 - }  
310 - // TODO:知识点:当大于最大缩放因子时,恢复到最大  
311 - if (this.imageScaleInfo.scaleValue > this.imageScaleInfo.maxScaleValue) {  
312 - runWithAnimation(() => {  
313 - this.imageScaleInfo.scaleValue = this.imageScaleInfo.maxScaleValue;  
314 - this.matrix = matrix4.identity()  
315 - .scale({  
316 - x: this.imageScaleInfo.maxScaleValue,  
317 - y: this.imageScaleInfo.maxScaleValue  
318 - });  
319 - })  
320 - }  
321 - this.imageScaleInfo.stash();  
322 - }),  
323 - // // TODO:知识点:滑动图片  
324 - // PanGesture({ fingers: 1 })// TODO:需求:默认大小下左右滑动应当是切换图片  
325 - // .onActionUpdate((event: GestureEvent) => {  
326 - // if (this.imageScaleInfo.scaleValue === this.imageScaleInfo.defaultScaleValue) {  
327 - // // 默认大小下不允许移动  
328 - // return;  
329 - // }  
330 - // this.imageOffsetInfo.currentX = this.imageOffsetInfo.lastX + event.offsetX;  
331 - // this.imageOffsetInfo.currentY = this.imageOffsetInfo.lastY + event.offsetY;  
332 - // })  
333 - // .onActionEnd((event: GestureEvent) => {  
334 - // this.imageOffsetInfo.stash();  
335 - // })  
336 - ),  
337 - )  
338 - }  
339 -}  
1 import { PhotoListBean } from 'wdBean/Index'; 1 import { PhotoListBean } from 'wdBean/Index';
2 import { display, router } from '@kit.ArkUI'; 2 import { display, router } from '@kit.ArkUI';
3 -import { ImageItemView } from '../components/view/ImageItemView';  
4 import { ImageDownloadComponent } from '../components/ImageDownloadComponent'; 3 import { ImageDownloadComponent } from '../components/ImageDownloadComponent';
  4 +import { MultiPictureDetailItemComponent } from '../components/MultiPictureDetailItemComponent';
  5 +
5 import { Action } from 'wdBean'; 6 import { Action } from 'wdBean';
6 import { WindowModel } from 'wdKit/Index'; 7 import { WindowModel } from 'wdKit/Index';
7 8
@@ -68,11 +69,10 @@ export struct MultiPictureListPage { @@ -68,11 +69,10 @@ export struct MultiPictureListPage {
68 }) 69 })
69 .id("backImg") 70 .id("backImg")
70 71
71 -  
72 if (this.photoList && this.photoList?.length > 0) { 72 if (this.photoList && this.photoList?.length > 0) {
73 Swiper(this.swiperController) { 73 Swiper(this.swiperController) {
74 ForEach(this.photoList, (item: PhotoListBean) => { 74 ForEach(this.photoList, (item: PhotoListBean) => {
75 - ImageItemView({ MultiPictureDetailItem: item, isEnableSwipe: this.isEnableSwipe }) 75 + MultiPictureDetailItemComponent({ MultiPictureDetailItem: item, isEnableSwipe: this.isEnableSwipe })
76 }) 76 })
77 } 77 }
78 .index(this.swiperIndex) 78 .index(this.swiperIndex)
@@ -135,7 +135,6 @@ export struct MultiPictureListPage { @@ -135,7 +135,6 @@ export struct MultiPictureListPage {
135 middle: { anchor: "__container__", align: HorizontalAlign.Center } 135 middle: { anchor: "__container__", align: HorizontalAlign.Center }
136 }) 136 })
137 } 137 }
138 -  
139 ImageDownloadComponent({ url: this.currentUrl }) 138 ImageDownloadComponent({ url: this.currentUrl })
140 .alignRules({ 139 .alignRules({
141 bottom: { anchor: "__container__", align: VerticalAlign.Bottom }, 140 bottom: { anchor: "__container__", align: VerticalAlign.Bottom },
@@ -152,6 +151,7 @@ export struct MultiPictureListPage { @@ -152,6 +151,7 @@ export struct MultiPictureListPage {
152 .width('100%') 151 .width('100%')
153 .height('100%') 152 .height('100%')
154 .id('e_picture_container') 153 .id('e_picture_container')
  154 + .backgroundColor(Color.Black)
155 } 155 }
156 156
157 aboutToDisappear(): void { 157 aboutToDisappear(): void {
@@ -7,7 +7,6 @@ @@ -7,7 +7,6 @@
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",  
11 "wdComponent": "file:../../features/wdComponent", 10 "wdComponent": "file:../../features/wdComponent",
12 "wdPlayer": "file:../../features/wdPlayer", 11 "wdPlayer": "file:../../features/wdPlayer",
13 "wdNetwork": "file:../../commons/wdNetwork", 12 "wdNetwork": "file:../../commons/wdNetwork",
@@ -7,7 +7,6 @@ @@ -7,7 +7,6 @@
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.0",  
11 "wdPlayer": "file:../../features/wdPlayer", 10 "wdPlayer": "file:../../features/wdPlayer",
12 "wdKit": "file:../../commons/wdKit", 11 "wdKit": "file:../../commons/wdKit",
13 "wdBean": "file:../../features/wdBean", 12 "wdBean": "file:../../features/wdBean",
@@ -204,7 +204,7 @@ export struct DetailVideoListPage { @@ -204,7 +204,7 @@ export struct DetailVideoListPage {
204 build() { 204 build() {
205 if (this.netStatus !== undefined) { 205 if (this.netStatus !== undefined) {
206 EmptyComponent({ 206 EmptyComponent({
207 - emptyType: 1, emptyButton: true, retry: () => { 207 + emptyType: 1, emptyButton: true, isBlack: true, retry: () => {
208 this.getContentDetail(this.contentId, this.relId, this.relType) 208 this.getContentDetail(this.contentId, this.relId, this.relType)
209 } 209 }
210 }) 210 })
@@ -10,7 +10,8 @@ @@ -10,7 +10,8 @@
10 "main": "", 10 "main": "",
11 "version": "1.0.0", 11 "version": "1.0.0",
12 "dependencies": { 12 "dependencies": {
13 - "@ohos/pulltorefresh": "^2.0.5", 13 + "@ohos/pulltorefresh": "^2.0.6-rc.0",
  14 + "@ohos/lottie": "v2.0.11-rc.6",
14 "@mpaas/udid": "0.0.2", 15 "@mpaas/udid": "0.0.2",
15 "@mpaas/upgrade": "0.0.2", 16 "@mpaas/upgrade": "0.0.2",
16 "@mpaas/framework": "0.0.2", 17 "@mpaas/framework": "0.0.2",
@@ -7,7 +7,6 @@ @@ -7,7 +7,6 @@
7 "main": "", 7 "main": "",
8 "version": "1.0.0", 8 "version": "1.0.0",
9 "dependencies": { 9 "dependencies": {
10 - "@ohos/lottie": "v2.0.11-rc.6",  
11 "wdComponent": "file:../../features/wdComponent", 10 "wdComponent": "file:../../features/wdComponent",
12 "wdConstant": "file:../../commons/wdConstant", 11 "wdConstant": "file:../../commons/wdConstant",
13 "wdKit": "file:../../commons/wdKit", 12 "wdKit": "file:../../commons/wdKit",
@@ -525,7 +525,7 @@ export struct MultiPictureDetailPageComponent { @@ -525,7 +525,7 @@ export struct MultiPictureDetailPageComponent {
525 @Builder 525 @Builder
526 noNet() { 526 noNet() {
527 EmptyComponent({ 527 EmptyComponent({
528 - emptyType: 1, emptyButton: true, retry: () => { 528 + emptyType: 1, emptyButton: true, isBlack: true, retry: () => {
529 this.getContentDetailData() 529 this.getContentDetailData()
530 } 530 }
531 }) 531 })
@@ -534,6 +534,7 @@ export struct MultiPictureDetailPageComponent { @@ -534,6 +534,7 @@ export struct MultiPictureDetailPageComponent {
534 center: { anchor: "__container__", align: VerticalAlign.Center }, 534 center: { anchor: "__container__", align: VerticalAlign.Center },
535 middle: { anchor: "__container__", align: HorizontalAlign.Center } 535 middle: { anchor: "__container__", align: HorizontalAlign.Center }
536 }) 536 })
  537 + .backgroundColor(Color.Black)
537 } 538 }
538 539
539 @Builder 540 @Builder