InteractMessagePage.ets 4.06 KB

import MyCollectionViewModel from '../../viewmodel/MyCollectionViewModel';
import PageModel from '../../viewmodel/PageModel';
import { CommonConstants, ViewType } from 'wdConstant'
import { EmptyComponent,WDViewDefaultType } from '../view/EmptyComponent'
import { ContentDTO } from 'wdBean'
import NoMoreLayout from './NoMoreLayout'
import CustomRefreshLoadLayout from './CustomRefreshLoadLayout';
import { CustomSelectUI } from '../view/CustomSelectUI';
import { CustomBottomFuctionUI } from '../view/CustomBottomFuctionUI';
import { BigPicCardComponent } from '../view/BigPicCardComponent';

import { CustomTitleUI } from '../reusable/CustomTitleUI';
import { CustomPullToRefresh } from '../reusable/CustomPullToRefresh';

@Entry
@Component
struct InteractMessagePage {
  @State private browSingModel: PageModel = new PageModel()
  isloading : boolean = false
  @Provide isEditState:boolean = false
  @State allDatas :ContentDTO[] = [];
  private scroller: Scroller = new Scroller();
  @State likeNum: number = 20

  aboutToAppear(){
    this.getData()
  }

  build() {
    Column(){
      CustomTitleUI({titleName:'互动消息'})



      if(this.browSingModel.viewType == ViewType.ERROR){
        EmptyComponent({emptyType:WDViewDefaultType.WDViewDefaultType_NetworkFailed})
      }else if(this.browSingModel.viewType == ViewType.EMPTY){
        EmptyComponent({emptyType:WDViewDefaultType.WDViewDefaultType_NoHistory})
      }else {
        CustomPullToRefresh({
          alldata:this.allDatas,
          scroller:this.scroller,
          customList:()=>{
            this.ListLayout()
          },
          onRefresh:(resolve)=>{
            this.browSingModel.currentPage = 0
            this.getData(resolve)
          },
          onLoadMore:(resolve)=> {
            this.browSingModel.currentPage++
            this.getData()
          }
        })
      }

    }
    .width(CommonConstants.FULL_WIDTH)
    .height(CommonConstants.FULL_HEIGHT)
  }

  @Builder ListLayout() {
    List({scroller: this.scroller}) {
      ListItem(){
        this.likeUILayout()
      }

      // 下拉刷新
      ForEach(this.allDatas, (compDTO: ContentDTO, compIndex: number) => {
        ListItem() {
          this.newCompParser(compDTO,compIndex)
        }
      })
      // 加载更多
      ListItem() {
        if (this.browSingModel.hasMore) {
        } else {
          NoMoreLayout()
        }
      }
    }
    .height(CommonConstants.FULL_PARENT)
    .edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
  }

  @Builder
  likeUILayout(){
    Column(){
      Row(){
        Text('共获')
          .fontSize(18)
        Text(this.likeNum.toString())
          .fontSize(30)
          .fontColor(Color.Red)
        Text('赞')
          .fontSize(18)

      }.height(75)


      Divider()
        .color('#f5f5f5')
        .backgroundColor('#f5f5f5')
        .width('100%')
        .height(5)
    }
    .alignItems(HorizontalAlign.Start)
    .padding({ left:16,right:16 })
    .width('100%')
    .height(80)

  }

  @Builder
  newCompParser(compDTO: ContentDTO, compIndex: number){
    Row(){
      if (this.isEditState){
        CustomSelectUI({
          isOn:compDTO.isSelect,
          selectCallback:(isOn)=>{

          }
        })
          .margin({left:16})
      }
      Column() {
        BigPicCardComponent({contentDTO:compDTO})
      }
    }
  }


  async getData(resolve?: (value: string | PromiseLike<string>) => void){
    MyCollectionViewModel.fetchMyCollectList(2,'1',this.browSingModel.currentPage,getContext(this)).then(collectionItem => {
      if(resolve) resolve('刷新成功')
      if (collectionItem && collectionItem.list && collectionItem.list.length > 0) {
        this.browSingModel.viewType = ViewType.LOADED;
        this.allDatas.push(...collectionItem.list)
        if (collectionItem.list.length === this.browSingModel.pageSize) {
          this.browSingModel.currentPage++;
          this.browSingModel.hasMore = true;
        } else {
          this.browSingModel.hasMore = false;
        }
      } else {
        this.browSingModel.viewType = ViewType.EMPTY;
      }
    })
  }

}