press-plus
Version:
129 lines (106 loc) • 4.07 kB
text/typescript
import { SPECIAL_TEAM_STATE_MAP, SCH_STATE_MAP, SPECIAL_TEAM_ID_MAP } from '../config';
function getFromBracketDesc(preNode: Record<string, any> = {}, roundInfo: Record<string, any>) {
if (preNode === null) {
return '轮空';
}
// console.log('preNode', preNode);
const { round_type: roundType, bracket_id: bracketId } = preNode;
const { round_type: nowRoundType } = roundInfo;
const isWinner = roundType === 'winner';
const postfixDesc = nowRoundType === 'loser' && isWinner ? '败者' : '胜者';
return `${isWinner ? 'U' : 'L'}${bracketId}${postfixDesc}`;
}
/**
* 1. 若 team_id = "999" 表示 “弃权”
2. both_team_set < 3,team_id="" 表示“待定”
3. both_team_set = 3 team_id = "" 表示 “轮空”
4. both_team_set = 4 也表示双方待定
*/
// 获取队伍信息
export function getTeamInfo(
nodeItem: Record<string, any> = {},
pos: string,
isPreview: number,
roundInfo: Record<string, any>,
teamMap: Record<string, any>,
) {
// nodeItem.sch_score.teama_id = '0'
// nodeItem.sch_score.teamb_id = '0'
const schScore = nodeItem.sch_score || {};
const bothTeamSet = nodeItem?.sch_dantao?.both_team_set || 0;
const teamid = schScore[`team${pos}_id`];
const teamInfo = {
...(teamMap[teamid] || {}),
};
let preTreeNode = [];
try {
preTreeNode = JSON.parse(nodeItem?.sch_rule?.pre_tree_node);
} catch (e) {
//
}
if (preTreeNode?.length) {
const index = pos === 'a' ? 0 : 1;
const fromBracketDesc = getFromBracketDesc(preTreeNode[index], roundInfo);
teamInfo.fromBracketDesc = fromBracketDesc;
}
// 根据teamid和bothTeamSet,联合判断状态是轮空还是待定
if (!teamid) {
if (bothTeamSet == 4 || bothTeamSet < 3) {
teamInfo.teamname = SPECIAL_TEAM_STATE_MAP.DAI_DING.name;
teamInfo.teamavatar = SPECIAL_TEAM_STATE_MAP.DAI_DING.avatar;
nodeItem.state = SPECIAL_TEAM_STATE_MAP.DAI_DING.state;
nodeItem.specState = SPECIAL_TEAM_STATE_MAP.DAI_DING.specState;
} else {
teamInfo.teamname = SPECIAL_TEAM_STATE_MAP.LUN_KONG.name;
teamInfo.teamavatar = SPECIAL_TEAM_STATE_MAP.LUN_KONG.avatar;
nodeItem.state = SPECIAL_TEAM_STATE_MAP.LUN_KONG.state;
nodeItem.specState = SPECIAL_TEAM_STATE_MAP.LUN_KONG.specState;
}
} else if (teamid == 999) {
teamInfo.teamname = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.name;
teamInfo.specState = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.specState;
teamInfo.teamavatar = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.avatar;
} else {
teamInfo.score = schScore[`team${pos}_score`] || 0;
}
// 裁判强制设置结果的,只有AdminResult有值,winner没有值
if (nodeItem.admin_result && nodeItem.admin_result === teamid) {
teamInfo.isWinner = 1;
} else if (!nodeItem.admin_result && nodeItem.winner && nodeItem.winner === teamid) {
teamInfo.isWinner = 1;
}
if ((nodeItem.admin_result == 999
|| (!nodeItem.admin_result && nodeItem.winner == 999))
&& teamInfo.teamname != SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.name // 不要显示两个弃字
) {
teamInfo.specState = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.specState;
}
// 处理赛程状态
nodeItem.status = SCH_STATE_MAP[(nodeItem.state || 0) as keyof typeof SCH_STATE_MAP];
// 预赛程逻辑
if (isPreview) {
if (teamid === undefined) {
schScore[`team${pos}_id`] = SPECIAL_TEAM_ID_MAP.PREVIEW_EMPTY;
teamInfo.teamid = SPECIAL_TEAM_ID_MAP.PREVIEW_EMPTY;
} else {
schScore[`team${pos}_id`] = SPECIAL_TEAM_ID_MAP.PREVIEW;
teamInfo.teamid = SPECIAL_TEAM_ID_MAP.PREVIEW;
}
}
return teamInfo;
}
/**
* 拉平队伍
* @param {Array} teamList
*/
export function flattenTeamInfo(teamList: Array<any> = []) {
return teamList.reduce((acc, item) => {
acc[item.teamid] = item;
return acc;
}, {});
}
export const iFindTeam = (
schInfo: Record<string, any>,
myTeamId: string,
) => schInfo?.battleList?.[0]?.teamList?.[0]?.teamid == myTeamId
|| schInfo?.battleList?.[0]?.teamList?.[1]?.teamid == myTeamId;