# 赛程核心逻辑
赛程模块总体架构是总分总结构
。

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
构成
# 解析赛程树
- 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';
# 常量
- 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_group
为 0
:
- 单败淘汰赛,不同页,
page
改变, 0, 1, 2, 3 ... - 循环赛,不同组,
partition_id
改变,1, 2, 3, 4 ...
手动指定分组,stageInfo.multi_group
为 1
:
- 分组淘汰赛,不同页,
partition_id
改变,1, 2, 3, 4 ... - 双败赛,不同页,
partition_id
改变,1, 2, 3, 4 ...
本质是分页,但展示形式不同,stageInfo.multi_group
为 0
:
- 匹配循环赛,不同页,
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_group
为 0
:

淘汰赛非自动分组,stageInfo.multi_group
为 1
:


双败赛非自动分组,stageInfo.multi_group
为 1
:
