c77fb700创建于 2025年1月16日历史提交
import router from '@ohos.router'
import ListModelPopular from '../component/ListModelPopular'
import ListModelNew from '../component/ListModelNew'
import ListModelAll from '../component/ListModelAll'
import { AuthorPage, SettingsPage } from './ContentPage'


@Entry
@Component
struct HomePage {
  @StorageLink('routerObj') routerObj: router.RouterOptions = {
    url:'pages/loginPage'
  };
  @StorageLink('homeTabBottomIndex') homeTabBottomIndex: number = 0;
  @StorageLink('homeTabTopIndex') homeTabTopIndex: number = 0;

  topController: TabsController = new TabsController();
  bottomController: TabsController = new TabsController();

  aboutToAppear() {
    router.clear();
  }

  @Builder
  TabBuilder(title: string, index: number, normalImg: Resource, selectImg: Resource) {
    Column() {
      Image(this.homeTabBottomIndex == index ? selectImg : normalImg)
        .height(20)
        .height(20)
      Text(title)
        .fontSize(15)
        .fontColor(this.homeTabBottomIndex == index ? Color.Black : Color.Gray)
    }
    .onClick(() => {
      this.homeTabBottomIndex = index
      this.bottomController.changeIndex(index)
    }
    )
  }

  @Builder
  TabBuilderStart(title: string, index: number, normalImg: Resource, selectImg: Resource) {
    Column() {
      Image(this.homeTabTopIndex === index ? selectImg : normalImg)
        .height(20)
        .height(20)
        .margin({ bottom: 10 })
      Text(title)
        .fontSize(15)
        .fontColor(this.homeTabTopIndex === index ? Color.Black : Color.Gray)
      Divider()
        .strokeWidth(2)
        .color(Color.Black)
        .width(40)
        .opacity(this.homeTabTopIndex === index ? 1 : 0)
        .margin({ top: 8 })
    }
    .height(60)
    .backgroundColor('#B6C5D1').width('100%')
    .onClick(() => {
      this.homeTabTopIndex = index
      this.topController.changeIndex(index)
    })
  }

  build() {
    Column() {
      Tabs({
        barPosition: BarPosition.End,
        controller: this.bottomController,
        index:this.homeTabBottomIndex
      }) {
        TabContent() {
          Column() {
            Text('Books')
              .fontSize(30)
              .backgroundColor('#B6C5D1')
              .width('100%')
              .height('12%')
              .padding({ left: 15 })
            Tabs({
              barPosition: BarPosition.Start,
              controller: this.topController,
              index:this.homeTabTopIndex
            }) {
              TabContent() {
                ListModelPopular()
              }
              .tabBar(this.TabBuilderStart('Popular', 0, $r('app.media.popular'), $r('app.media.sel_popular')))

              TabContent() {
                ListModelNew()
              }
              .tabBar(this.TabBuilderStart('New', 1, $r('app.media.new'), $r('app.media.sel_new')))

              TabContent() {
                ListModelAll()
              }
              .tabBar(this.TabBuilderStart('All', 2, $r('app.media.all'), $r('app.media.sel_all')))
            }
            .barHeight(70)
            .margin({ top: -8 })
            .onChange((index) => {
              this.homeTabTopIndex = index;
            })
          }
        }
        .tabBar(this.TabBuilder('Book', 0, $r('app.media.books'), $r('app.media.sel_books')))

        TabContent() {
          AuthorPage()
        }
        .tabBar(this.TabBuilder('Authors', 1, $r('app.media.authors'), $r('app.media.sel_authors')))

        TabContent() {
          SettingsPage()
        }
        .tabBar(this.TabBuilder('Settings', 2, $r('app.media.settings'), $r('app.media.sel_settings')))
      }
      .scrollable(false)
      .onChange((index) => {
        this.homeTabBottomIndex = index;
      })
    }
  }
}