ENewspaperPageComponent.ets 6.01 KB
import { NewspaperListBean, NewspaperListItemBean } from 'wdBean'
import { NewspaperViewModel } from '../viewmodel/NewspaperViewModel'
import router from '@ohos.router'
import { ENewspaperItemComponent } from './ENewspaperItemComponent'

@Component
export struct ENewspaperPageComponent {
  @State newspaperListBean: NewspaperListBean = {} as NewspaperListBean
  @State currentPageNum: string = '01';
  private swiperController: SwiperController = new SwiperController()


  build() {
    RelativeContainer() {
      RelativeContainer() {
        Image($r('app.media.icon_arrow_down'))
          .height($r('app.float.top_arrow_size'))
          .width($r('app.float.top_arrow_size'))
          .alignRules({ left: { anchor: "__container__", align: HorizontalAlign.Start },
            center: { anchor: "__container__", align: VerticalAlign.Center } })
          .id('e_newspaper_back')
          .onClick((event: ClickEvent) => {
            router.back()
          })

        Row() {
          Text('2024.01.26')
            .fontSize($r('app.float.font_size_20'))
            .fontColor($r('app.color.white'))

          Image($r('app.media.icon_triangle'))
            .width($r('app.float.border_radius_6'))
            .height($r('app.float.border_radius_6'))
            .margin({ left: 2, bottom: 5 })
        }
        .alignItems(VerticalAlign.Bottom)
        .alignRules({ middle: { anchor: "__container__", align: HorizontalAlign.Center },
          center: { anchor: "__container__", align: VerticalAlign.Center } })
        .id('e_newspaper_date')

        Image($r('app.media.icon_share'))
          .height($r('app.float.top_arrow_size'))
          .width($r('app.float.top_arrow_size'))
          .alignRules({ right: { anchor: "__container__", align: HorizontalAlign.End },
            center: { anchor: "__container__", align: VerticalAlign.Center } })
          .id('e_newspaper_share')
      }
      .margin({ left: $r('app.float.margin_16'), right: $r('app.float.margin_16') })
      .height($r('app.float.top_bar_height'))
      .alignRules({ top: { anchor: '__container__', align: VerticalAlign.Top },
        left: { anchor: '__container__', align: HorizontalAlign.Start },
        right: { anchor: '__container__', align: HorizontalAlign.End } })
      .id('e_newspaper_top')

      if (this.newspaperListBean && this.newspaperListBean.list && this.newspaperListBean.list.length > 0) {
        Swiper(this.swiperController) {
          ForEach(this.newspaperListBean?.list, (item: NewspaperListItemBean, index: number) => {
            ENewspaperItemComponent({newspaperListItemBean: item})
          })
        }
        .width('100%')
        .vertical(true)
        .autoPlay(false)
        .cachedCount(3)
        .indicator(false)
        .displayCount(1)
        .aspectRatio(0.7)
        .margin({ top: $r('app.float.vp_55'), left: 10, right: 10 })
        .id('e_newspaper_content')
        .alignRules({ top: { anchor: "e_newspaper_top", align: VerticalAlign.Bottom },
          middle: { anchor: "__container__", align: HorizontalAlign.Center } })
        .onChange((index: number) => {
          this.currentPageNum = this.newspaperListBean?.list[index]?.pageNum
        })

        Image($r('app.media.newspaper_shadow'))
          .height($r('app.float.vp_12'))
          .margin({ left: 12, right: 12, top: -2 })
          .objectFit(ImageFit.Contain)
          .alignRules({ top: { anchor: "e_newspaper_content", align: VerticalAlign.Bottom },
            left: { anchor: 'e_newspaper_content', align: HorizontalAlign.Start },
            right: { anchor: 'e_newspaper_content', align: HorizontalAlign.End } })
          .id('e_newspaper_shadow')

        Row() {
          Text('滑动查看下一版')
            .fontColor(Color.White)
            .fontSize($r('app.float.font_size_14'))
          Image($r('app.media.icon_next_page'))
            .width($r('app.float.vp_16'))
            .height($r('app.float.vp_16'))
        }
        .justifyContent(FlexAlign.Center)
        .margin({ top: $r('app.float.margin_16') })
        .alignRules({ top: { anchor: "e_newspaper_shadow", align: VerticalAlign.Bottom },
          middle: { anchor: "__container__", align: HorizontalAlign.Center } })
        .id('e_newspaper_next')
        .onClick((event: ClickEvent) => {
          this.swiperController.showNext()
        })
      }

      Row() {
        Text(this.currentPageNum)
          .fontSize($r('app.float.font_size_36'))
          .fontColor($r('app.color.white'))
        Text('版')
          .fontSize($r('app.float.font_size_16'))
          .fontColor($r('app.color.white'))
          .margin({ bottom: 6 })

        Image($r('app.media.icon_triangle'))
          .width($r('app.float.border_radius_6'))
          .height($r('app.float.border_radius_6'))
          .margin({ left: 2, bottom: 6 })
      }
      .alignItems(VerticalAlign.Bottom)
      .margin({ left: $r('app.float.margin_16'), bottom: $r('app.float.top_tab_bar_height') })
      .alignRules({ bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
        left: { anchor: '__container__', align: HorizontalAlign.Start } })
      .id('e_newspaper_page_num')

      Row() {
        Image($r('app.media.icon_read_paper'))
          .width($r('app.float.vp_20'))
          .height($r('app.float.vp_20'))
          .margin({ right: $r('app.float.vp_3') })
        Text('读报纸')
          .fontSize($r('app.float.font_size_14'))
          .fontColor($r('app.color.white'))
      }
      .alignItems(VerticalAlign.Center)
      .margin({ right: $r('app.float.margin_16'), bottom: $r('app.float.top_tab_bar_height') })
      .alignRules({ bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
        right: { anchor: '__container__', align: HorizontalAlign.End } })
      .id('e_newspaper_read')
    }
    .width('100%')
    .height('100%')
    .backgroundColor($r('app.color.color_80000000'))
    .id('e_newspaper_container')
  }

  aboutToAppear() {
    let listBean = NewspaperViewModel.getNewspaperListFromLocal(getContext(this));
    this.newspaperListBean = listBean;

  }

  aboutToDisappear() {

  }
}