TabLiveComponent.ets 4.84 KB
import { LiveDetailsBean, LiveRoomItemBean } from 'wdBean/Index'
import { EmptyComponent, ErrorComponent, ListHasNoMoreDataUI, WDViewDefaultType } from 'wdComponent/Index'
import { TabLiveItemComponent } from './TabLiveItemComponent'
import CustomRefreshLoadLayout from 'wdComponent/src/main/ets/components/page/CustomRefreshLoadLayout'
import { RefreshLayoutBean } from 'wdComponent/src/main/ets/components/page/RefreshLayoutBean'
import PageModel from 'wdComponent/src/main/ets/viewmodel/PageModel'
import { ViewType } from 'wdConstant/Index'
import LoadMoreLayout from 'wdComponent/src/main/ets/components/page/LoadMoreLayout'
import RefreshLayout from 'wdComponent/src/main/ets/components/page/RefreshLayout'
import { StringUtils } from 'wdKit/Index'
import { LiveViewModel } from '../../viewModel/LiveViewModel'

@Component
export struct TabLiveComponent {
  liveViewModel: LiveViewModel = new LiveViewModel()
  @State liveList: Array<LiveRoomItemBean> = []
  @Consume liveDetailsBean: LiveDetailsBean
  @State private pageModel: PageModel = new PageModel()

  aboutToAppear(): void {
    this.getLiveList()
  }

  build() {
    Stack() {
      if (this.pageModel.viewType == ViewType.LOADING) {
        this.LoadingLayout()
      } else if (this.pageModel.viewType == ViewType.ERROR) {
        ErrorComponent()
      } else if (this.pageModel.viewType == ViewType.EMPTY) {
        EmptyComponent({ emptyType: WDViewDefaultType.WDViewDefaultType_NoContent1 })
      } else {
        this.ListLayout()
      }
    }
    .alignContent(Alignment.Top)
    .backgroundColor('#F5F5F5')
    .height('100%')
    .width('100%')
  }

  @Builder
  ListLayout() {
    List() {
      ListItem() {
        // 下拉刷新
        RefreshLayout({
          refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage,
            this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight)
        })
      }

      ForEach(this.liveList, (item: LiveRoomItemBean) => {
        ListItem() {
          TabLiveItemComponent({ item: item })
        }
      })
      // 加载更多
      ListItem() {
        if (this.pageModel.hasMore) {
          LoadMoreLayout({
            refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage,
              this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight)
          })
        } else {
          ListHasNoMoreDataUI()
        }
      }
    }
  }

  @Builder
  LoadingLayout() {
    CustomRefreshLoadLayout({
      refreshBean: new RefreshLayoutBean(true,
        $r('app.media.ic_pull_up_load'), $r('app.string.pull_up_load_text'), this.pageModel.pullDownRefreshHeight)
    })
  }

  getLiveList() {
    this.pageModel.currentPage = 1
    this.liveViewModel.getLiveList(
      this.pageModel.currentPage,
      this.liveDetailsBean?.liveInfo?.mlive?.mliveId,
      this.liveDetailsBean?.newsId,
      20)
      .then(
        (data) => {
          if (data.barrageResponses && data.barrageResponses.length > 0) {
            /**
             * 在直播聊天添加一条新内容逻辑:
             判断 oldNewsId:迁移id非空 且 直播状态不是预约:"wait"
             消息内容:
             1.头像固定:APP默认头像
             2.名称固定:人民日报主持人
             3.内容:详情接口的简介,newIntroduction
             */
            this.pageModel.viewType = ViewType.LOADED;
            this.liveList.push(...data.barrageResponses)
            if (data.barrageResponses.length === this.pageModel.pageSize) {
              this.pageModel.currentPage++;
              this.pageModel.hasMore = true;
            } else {
              this.pageModel.hasMore = false;
              if (StringUtils.isEmpty(this.liveDetailsBean.oldNewsId)
                && this.liveDetailsBean
                && this.liveDetailsBean.liveInfo.liveState != 'wait') {
                let liveRoomItemBeanTemp: LiveRoomItemBean = {} as LiveRoomItemBean
                liveRoomItemBeanTemp.text = this.liveDetailsBean.newIntroduction
                liveRoomItemBeanTemp.senderUserName = '人民日报主持人'
                liveRoomItemBeanTemp.pictureUrls = []
                liveRoomItemBeanTemp.pictureUrls.push(this.liveDetailsBean?.fullColumnImgUrls[0]?.url)
                liveRoomItemBeanTemp.dataType = 'ZH_TEXT_AND_IMAGE_MSG'
                let temp = this.liveDetailsBean?.fullColumnImgUrls[0]
                if (temp) {
                  liveRoomItemBeanTemp.pictureResolutions = []
                  liveRoomItemBeanTemp.pictureResolutions.push(`${temp.height}*${temp.weight}`)
                }
                this.liveList.push(liveRoomItemBeanTemp)
              }
            }
          } else {
            this.pageModel.viewType = ViewType.EMPTY;
          }
        },
        () => {

        })
  }

  aboutToDisappear(): void {
  }
}