SpacialTopicPageComponent.ets 4.28 KB
import { Action, H5ReceiveDetailBean, ContentDetailDTO } from 'wdBean';
import { WdWebComponent } from 'wdWebComponent';
import router from '@ohos.router';
import { CommonConstants } from 'wdConstant'
import { BridgeWebViewControl } from 'wdJsBridge/Index';
import { detailedSkeleton } from './skeleton/detailSkeleton'
import { NativeCallH5Type } from 'wdWebComponent/src/main/ets/pages/NativeCallH5Type';
import { OperRowListView } from './view/OperRowListView';
import DetailViewModel from '../viewmodel/DetailViewModel';
import { publishCommentModel } from '../components/comment/model/PublishCommentModel';

const TAG: string = 'SpacialTopicPageComponent'

@Component
export struct SpacialTopicPageComponent {
  webviewControl: BridgeWebViewControl = new BridgeWebViewControl()
  scroller: Scroller = new Scroller();
  action: Action = {} as Action
  @State webUrl: string = '';
  @State isPageEnd: boolean = false
  @State contentDetailData: ContentDetailDTO [] = [] as ContentDetailDTO []
  private h5ReceiveAppData: H5ReceiveDetailBean = { dataSource: '2' } as H5ReceiveDetailBean
  private webPrepared = false;
  private dataPrepared = false;
  @State publishCommentModel: publishCommentModel = new publishCommentModel()
  @State operationButtonList: string[] = ['comment', 'collect', 'share']

  private trySendData2H5() {
    if (!this.webPrepared || !this.dataPrepared) {
      return
    }
    // 数据、web组件,都准备好了,开始塞详情数据
    this.sendContentData2H5(this.h5ReceiveAppData)
  }

  private onWebPrepared() {
    this.webPrepared = true
    this.trySendData2H5()
  }

  private sendContentData2H5(h5ReceiveAppData: H5ReceiveDetailBean) {
    this.webviewControl.callHandle(NativeCallH5Type.jsCall_receiveAppData,
      JSON.stringify(h5ReceiveAppData), (data: string) => {
      })
  }

  private async getDetail() {
    let contentId: string = ''
    let relId: string = ''
    let relType: string = ''
    if (this.action && this.action.params) {
      if (this.action.params.contentID) {
        contentId = this.action.params.contentID;
      }
      if (this.action && this.action.params && this.action.params.extra) {
        if (this.action.params.extra.relId) {
          relId = this.action.params.extra.relId;
        }
        if (this.action.params.extra.relType) {
          relType = this.action.params.extra.relType
        }

      }
      let detailBeans = await DetailViewModel.getDetailPageData(relId, contentId, relType)
      if (detailBeans && detailBeans.length > 0) {
        this.contentDetailData = detailBeans;
        // if (this.contentDetailData[0]?.openComment) {
          this.publishCommentModel.targetId = String(this.contentDetailData[0]?.newsId || '')
          this.publishCommentModel.targetRelId = String(this.contentDetailData[0]?.reLInfo?.relId)
          this.publishCommentModel.targetTitle = this.contentDetailData[0]?.newsTitle
          this.publishCommentModel.targetRelType = String(this.contentDetailData[0]?.reLInfo?.relType)
          this.publishCommentModel.targetRelObjectId = String(this.contentDetailData[0]?.reLInfo?.relObjectId)
          this.publishCommentModel.keyArticle = String(this.contentDetailData[0]?.keyArticle)
          this.publishCommentModel.targetType = String(this.contentDetailData[0]?.newsType)
        // }
        this.trySendData2H5()
      }
    }
  }

  build() {
    Column() {
      Stack({ alignContent: Alignment.Bottom }) {
        Column() {
          WdWebComponent({
            webviewControl: this.webviewControl,
            webUrl: this.webUrl,
            backVisibility: false,
            onWebPrepared: this.onWebPrepared.bind(this),
            isPageEnd: $isPageEnd
          })
        }
        .width(CommonConstants.FULL_WIDTH)
        .height(CommonConstants.FULL_HEIGHT)
        .padding({bottom:75})

        if (!this.isPageEnd) {
          detailedSkeleton()
        }
        //底部交互区
          OperRowListView({
            contentDetailData: this.contentDetailData[0],
            publishCommentModel: this.publishCommentModel,
            operationButtonList: this.operationButtonList,
          })
      }
    }.width(CommonConstants.FULL_WIDTH).height(CommonConstants.FULL_HEIGHT)
  }

  aboutToAppear() {
    if (this.action) {
      this.webUrl = this.action.params?.url || ''
    }
    this.getDetail()
  }
}