# 赛程核心逻辑

赛程模块总体架构是总分总结构

  • schedule-content: 多 tab 下的 schedule-bridge,还包括 pagination、赛程图 icon
  • schedule-bridge: 根据赛制使用不同组件,如
    • schedule-swiss-system
    • schedule-cycle
    • schedule-knockout
    • schedule-match-mode
    • schedule-double-fail
    • 以及 empty 组件
  • 不同赛制组件内部都是由 schedule-tree, schedule-list-view 构成

# 解析赛程树

查看源码 (opens new window)

  • getBattleId(nodeItem)
  • getRedSide(nodeItem)
import { getBattleId, getRedSide } from '@tencent/press-plus/press-schedule-tree/parser/battle-id';
  • mapBattleStatus(status)
  • getBattleState(nodeItem)
import { mapBattleStatus, getBattleState } from '@tencent/press-plus/press-schedule-tree/parser/battle-status';
  • getCurScheduleType({ stageCfgList, curStageIdx, reqStage })
import { getCurScheduleType } from '@tencent/press-plus/press-schedule-tree/parser/cur-schedule-type';
  • getCurTab(scheInfo)
import { getCurTab } from '@tencent/press-plus/press-schedule-tree/parser/cur-tab';
  • judgeScheVersion(gameInfo)
import { judgeScheVersion } from '@tencent/press-plus/press-schedule-tree/parser/judge-sche-version';
  • mockOriginGame(resp, reqStage)
import { mockOriginGame } from '@tencent/press-plus/press-schedule-tree/parser/origin-game';
  • judgePreview(resp)
import { judgePreview } from '@tencent/press-plus/press-schedule-tree/parser/preview';
  • judgeScheVersion(gameInfo)
import { judgeScheVersion } from '@tencent/press-plus/press-schedule-tree/parser/judge-sche-version';
  • parseTreeRoundList(treeRoundList)
  • handleRoundList(resp)
import { parseTreeRoundList, handleRoundList } from '@tencent/press-plus/press-schedule-tree/parser/round-list';
  • handleScheList(resp, isPreview, roundInfo)
import { handleScheList } from '@tencent/press-plus/press-schedule-tree/parser/sche-info';
  • getTeamInfo(nodeItem, pos, isPreview, roundInfo, teamMap)
  • flattenTeamInfo(teamList)
  • iFindTeam(schInfo, myTeamId)
import { getTeamInfo } from '@tencent/press-plus/press-schedule-tree/parser/team-info';
  • getTreeNodeUniId(nodeItem)
import { getTreeNodeUniId } from '@tencent/press-plus/press-schedule-tree/parser/tree-node-uni-id';

# 常量

查看源码 (opens new window)

  • START_BATTLE_CODE_MAP, 开赛模式映射表
  • START_BATTLE_TITLE_MAP,开赛模式及名称映射表
  • SCHEDULE_CUSTOM_STATUS_MAP,轮空、待定自定义 code
  • SCHEDULE_STATUS_MAP,赛程组状态
  • SPECIAL_TEAM_ID_MAP,特殊队伍 id 映射,用于预览阶段
  • PREVIEW_STATE_MAP,预览状态
  • SPECIAL_STATE_MAP,轮空、待定、弃权对应的英文状态
  • GROUP_TYPE_NAME_MAP,赛制名称
  • SCHEDULE_TYPE_MAP,赛程类别映射表
  • GROUP_TYPE_MAP,赛制映射
  • BATTLE_STATE_MAP,对局状态
  • REMATCH_STATE_MAP,重赛状态
  • CUSTOM_PREVIEW_STATUS_MAP,预览阶段状态
  • SCH_STATE_MAP,赛程状态名称映射
  • SPECIAL_TEAM_STATE_MAP,特殊状态队伍信息
import {
 START_BATTLE_CODE_MAP,
} from '@tencent/press-plus/press-schedule-tree/config';

# 分页与分组

分页和分组逻辑与后台相关。

队伍数过多,自动分组,stageInfo.multi_group0:

  • 单败淘汰赛,不同页,page 改变, 0, 1, 2, 3 ...
  • 循环赛,不同组,partition_id 改变,1, 2, 3, 4 ...

手动指定分组,stageInfo.multi_group1:

  • 分组淘汰赛,不同页,partition_id 改变,1, 2, 3, 4 ...
  • 双败赛,不同页,partition_id 改变,1, 2, 3, 4 ...

本质是分页,但展示形式不同,stageInfo.multi_group0:

  • 匹配循环赛,不同页,page 改变,0, 1, 2, 3 ...
if (!reRefresh) {
  // 手动分组,且存在分组,且是淘汰赛类型
  if (stageInfo.multi_group === 1
    && pageTotal > 1
    && (stageInfo.schedule_type === SCHEDULE_TYPE_MAP.DOUBLE_FAIL
    || stageInfo.schedule_type === SCHEDULE_TYPE_MAP.KNOCK_OUT)
  ) {
    partitionId = zoneIdx ? zoneIdx + 1 : 1;
  }
  // 队伍众多, 且是单淘(未分组)
  if (stageInfo.multi_group !== 1
    && stageInfo.schedule_type === SCHEDULE_TYPE_MAP.KNOCK_OUT
    && pageTotal > 1) {
    group = zoneIdx ? zoneIdx : 0;
  }
}
if (onInit) {
  // 点击赛程搜索卡片管理按钮进入
  // 分页/分组跳转起始index
  const index = +getRouteParamsObj().partitionId;
  if (index > 0) {
    partitionId = index;
  }
  // 阶段变化
  if (curSelectedStage) {
    reqStage = curSelectedStage;
  }
}
// 循环赛
if (stageInfo.schedule_type === SCHEDULE_TYPE_MAP.CYCLE && pageTotal > 1) {
  partitionId = curGroup > 0 ? curGroup : 1;
}

淘汰赛自动分组,stageInfo.multi_group0:

淘汰赛非自动分组,stageInfo.multi_group1:

双败赛非自动分组,stageInfo.multi_group1:

横屏
最后更新时间: 2024/1/25 10:00:49