6a2e45d8创建于 2023年12月14日历史提交
/*
 * Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import router from '@ohos.router';
import Logger from '../utils/Logger';
import { SearchResult, VideoInfo } from '../appsampled/data/SearchResult';

const TAG: string = '[SearchVideoComponent]';

@Component
export default struct SearchVideoComponent {
  private scrollerHor: Scroller = new Scroller();
  private scrollerVer: Scroller = new Scroller();
  private currSearchResult?: SearchResult;
  @State selectTopIndex: number = 0;

  build() {
    Column() {
      Scroll(this.scrollerVer) {
        Column() {
          // 横向Label列表
          Row() {
            Scroll(this.scrollerHor) {
              Row({ space: 8 }) {
                // 全部
                Column() {
                  Text($r('app.string.All'))
                    .height(20)
                    .fontColor(this.selectTopIndex === 0 ? $r('app.color.COLOR_FFFFFF') : $r('app.color.COLOR_CCFFFFFF'))
                    .fontSize(16)
                    .fontFamily($r('app.string.Font_family_medium'))
                    .textAlign(TextAlign.Center)
                    .padding({ left: 16, right: 16 })
                }
                .height(40)
                .justifyContent(FlexAlign.Center)
                .backgroundColor(this.selectTopIndex === 0 ? $r('app.color.COLOR_393939') : $r('app.color.COLOR_99393939'))
                .borderRadius(4)
                .onClick(e => {
                  this.selectTopIndex = 0;
                })
                // 模拟数据 label列表
                ForEach(this.currSearchResult?.labelList, (title: string, index: number) => {
                  Column() {
                    Text(title)
                      .height(20)
                      .fontColor(this.selectTopIndex === (index + 1) ? $r('app.color.COLOR_FFFFFF') : $r('app.color.COLOR_CCFFFFFF'))
                      .fontSize(16)
                      .fontFamily($r('app.string.Font_family_medium'))
                      .textAlign(TextAlign.Center)
                      .padding({ left: 16, right: 16 })
                  }
                  .height(40)
                  .justifyContent(FlexAlign.Center)
                  .backgroundColor(this.selectTopIndex === (index + 1) ? $r('app.color.COLOR_393939') : $r('app.color.COLOR_99393939'))
                  .borderRadius(4)
                  .onClick(e => {
                    this.selectTopIndex = index + 1;
                  })
                })
              }
              .height('100%')
              .justifyContent(FlexAlign.Start)
            }
            .scrollable(ScrollDirection.Horizontal)
            .scrollBar(BarState.Off)
            .width('100%')
            .height('100%')
          }
          .width('100%')
          .height(60)
          .justifyContent(FlexAlign.Start)
          .padding({ left: 14, right: 8 })

          // 视频列表
          GridRow({columns: 2}) {
            // 模拟数据 音乐列表
            ForEach(this.currSearchResult?.videoInfo, (videoInfo: VideoInfo) => {
              GridCol() {
                this.VideoItem(videoInfo)
              }
              .width('100%')
              .margin({right: 1,bottom:1})
            })
          }
          .width('100%')

        }
        .width('100%')
      }
      .scrollable(ScrollDirection.Vertical)
      .scrollBar(BarState.Off)
      .width('100%')
      .height('100%')
      .align(Alignment.Top)
    }
    .width('100%')
    .height('100%')
    .backgroundColor($r('app.color.COLOR_151724'))
  }

  @Builder
  VideoItem(videoInfo: VideoInfo) {
    Stack() {
      Image($r('app.media.app_icon'))
        .width('100%')
        .height('100%')
        .objectFit(ImageFit.Fill)
        .borderRadius(4)
      Column() {
        Text(videoInfo.videoTitle)
          .fontColor($r('app.color.COLOR_FFFFFF'))
          .fontSize(18)
          .fontFamily($r('app.string.Font_family_regular'))
          .textAlign(TextAlign.Start)
          .textOverflow({ overflow: TextOverflow.Ellipsis })
          .padding({ left: 6, right: 6 })
        Row({space: 5}) {
          Image($r('app.media.app_icon'))
            .width(24)
            .height(24)
            .objectFit(ImageFit.Contain)
            .borderRadius(12)
          Text(videoInfo.videoAuthorName)
            .fontColor($r('app.color.COLOR_FFFFFF'))
            .fontSize(18)
            .fontFamily($r('app.string.Font_family_regular'))
            .textAlign(TextAlign.Start)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
          Blank()
          Image($r('app.media.app_icon'))
            .width(24)
            .height(24)
            .objectFit(ImageFit.Contain)
            .borderRadius(12)
          Text(videoInfo.videoLikeNum)
            .fontColor($r('app.color.COLOR_FFFFFF'))
            .fontSize(18)
            .fontFamily($r('app.string.Font_family_regular'))
            .textAlign(TextAlign.Start)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
        }
        .width('100%')
        .height(30)
        .padding({ left: 6, right: 6 })
      }
      .width('100%')
      .height(56)
      .alignItems(HorizontalAlign.Start)
    }
    .width('100%')
    .height(280)
    .backgroundColor(Color.Pink)
    .alignContent(Alignment.Bottom)
  }
}