HomeChannelUtils.ets 2.98 KB
import { BottomNavDTO, NavigationBodyDTO, TopNavDTO } from 'wdBean/Index';
import { EmitterEventId, EmitterUtils, StringUtils } from 'wdKit/Index';
import { WDRouterPage } from '../router/WDRouterPage';
import { WDRouterRule } from '../router/WDRouterRule';

/**
 * 首页、频道相关跳转、处理
 */
export class HomeChannelUtils {
  private bottomNavData: NavigationBodyDTO | null = null

  setBottomNavData(bottomNavData: NavigationBodyDTO) {
    this.bottomNavData = bottomNavData
  }

  /**
   * 切换到指定频道
   *
   * @param channelId 频道id【顶导id】
   * @param pageId 目标页面id
   */
  jumpChannelTab(channelId: string, pageId: string, pageName?: string) {
    // 1、首页所有展示频道遍历,找到目标频道
    // 2、频道管理里的,非我的频道所有列表遍历,找到目标频道 【这步去掉,和this.bottomNavData重复了】
    // 3、一级频道【1、2里找到目标】->【切换底导、切换频道/新增临时频道】
    // 4、二级频道【1、2里都没有找到目标】->【跳转栏目页面-ColumnPageComponent】

    // 1. 遍历查找目标channel
    if (this.bottomNavData == null || this.bottomNavData.bottomNavList == null ||
      this.bottomNavData.bottomNavList.length <= 0) {
      this.jumpColumn(channelId, pageId)
      return
    }
    let bean = new AssignChannelParam()
    bean.channelId = channelId
    bean.pageId = pageId ? pageId : ''
    let bottomNavList = this.bottomNavData.bottomNavList
    for (let i = 0; i < bottomNavList.length; i++) {
      let bottomNavDTO: BottomNavDTO = bottomNavList[i]
      let channelList = bottomNavDTO.topNavChannelList
      if (channelList == null || channelList.length <= 0) {
        continue
      }
      for (let j = 0; j < channelList.length; j++) {
        let topNavDTO: TopNavDTO = channelList[j]
        if (topNavDTO.channelId.toString() === channelId) {
          bean.pageId = topNavDTO.pageId.toString()
          bean.bottomNavId = bottomNavDTO.id.toString()
          break
        }
      }
    }
    if (StringUtils.isEmpty(bean.bottomNavId)) {
      this.jumpColumn(channelId, pageId, pageName)
    } else {
      this.jumpHomeChannel(bean)
    }
  }

  jumpColumn(channelId: string, pageId: string, pageName?: string) {
    let params: AssignChannelParam = new AssignChannelParam()
    params.pageId = pageId
    params.channelId = channelId
    params.pageName = pageName || ''
    WDRouterRule.jumpWithPage(WDRouterPage.columnPage, params)
  }

  jumpHomeChannel(param: AssignChannelParam) {
    // 跳转首页
    WDRouterRule.jumpWithPage(WDRouterPage.mainPage, undefined, true)
    // 通知切换频道
    EmitterUtils.sendEvent(EmitterEventId.JUMP_HOME_CHANNEL, JSON.stringify(param))
  }
}

@Observed
export class AssignChannelParam {
  pageId: string = '';
  channelId: string = '';
  bottomNavId: string = '';
  // 跳转专题/二级栏目用到
  pageName: string = ''
}

let homeChannelUtils = new HomeChannelUtils();

export default homeChannelUtils as HomeChannelUtils;