press-next
Version:
Vue3 组件库,支持 Composition API
243 lines (215 loc) • 7.16 kB
text/typescript
import { CORE_TIME_MAP_MINUTE } from './config';
import {
CARD_BUTTON_CLASS,
CARD_BUTTON_MAP,
} from './utils';
export function getSatisfiedAndCanInviteCardCustom({
rawBattleList = [],
curShowingBattleIndex = 0,
enterBattleRoomDuration = CORE_TIME_MAP_MINUTE.JUMP_TO_ROOM,
primaryButtonDisabledToShowQRCode = false,
}: {
rawBattleList: Array<Record<string, any>>;
curShowingBattleIndex?: number;
enterBattleRoomDuration?: number;
primaryButtonDisabledToShowQRCode?: boolean;
}) {
const rawCurBattle = rawBattleList[curShowingBattleIndex] || {};
const {
battle_status: battleStatus = 0,
start_time: startTime,
battle_id: battleId,
can_enter_game: canEnterGame,
enter_game_remain: enterGameRemain = 0,
} = rawCurBattle;
const isNotStart = battleStatus <= 100;
const isIng = battleStatus == 200;
const gap = startTime - Math.floor(Date.now() / 1000);
const canEnterVirtualRoom = gap > 0 && gap <= enterBattleRoomDuration * 60;
const hasNextBattle = rawBattleList.length > curShowingBattleIndex + 1;
if (isNotStart) {
if (canEnterVirtualRoom) {
return {
mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
secondButton: CARD_BUTTON_MAP.TO_GROUPING,
secondCountdown: startTime * 1000,
secondButtonTips: '请在倒计时结束前进入备战房',
secondButtonClass: primaryButtonDisabledToShowQRCode
? CARD_BUTTON_CLASS.INVALID
: CARD_BUTTON_CLASS.PRIMARY,
};
}
return {
mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
secondButton: CARD_BUTTON_MAP.WAIT_START,
secondCountdown: startTime * 1000,
secondButtonTips: gap > 0
? '已满足参赛人数,倒计时结束后开赛'
: '已满足参赛人数',
secondButtonClass: CARD_BUTTON_CLASS.INVALID,
};
}
if (isIng) {
const getButton = () => {
const groupGap = Math.floor(Date.now() / 1000) - startTime;
const isGroupingStage = groupGap > 0 && groupGap < 5 * 60;
if (canEnterGame == 1) {
// 理论上不会出现
return {
secondButton: CARD_BUTTON_MAP.LAUNCH_GAME,
secondCountdown: enterGameRemain * 1000 + Date.now(),
secondButtonTips: enterGameRemain * 1000 > Date.now() ? CARD_BUTTON_MAP.LAUNCH_GAME_TIP : '',
secondButtonClass: primaryButtonDisabledToShowQRCode
? CARD_BUTTON_CLASS.INVALID
: CARD_BUTTON_CLASS.PRIMARY,
};
}
if (isGroupingStage) {
// 理论上不会出现
return {
secondButton: CARD_BUTTON_MAP.TO_GROUPING,
secondButtonTips: CARD_BUTTON_MAP.JUMP_TO_ROOM_TIP,
secondButtonClass: primaryButtonDisabledToShowQRCode
? CARD_BUTTON_CLASS.INVALID
: CARD_BUTTON_CLASS.PRIMARY,
};
}
if (battleId) {
// 理论上不会出现
return {
secondButton: '进行中',
secondButtonTips: hasNextBattle ? '请等待下一局比赛开赛' : '',
secondButtonClass: CARD_BUTTON_CLASS.INVALID,
};
}
return {
secondButton: '进行中',
secondButtonTips: hasNextBattle ? '请等待下一局比赛开赛' : '',
secondButtonClass: CARD_BUTTON_CLASS.INVALID,
};
};
const {
secondButton,
secondCountdown = 0,
secondButtonTips = '',
secondButtonClass,
} = getButton();
return {
mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
secondButton,
secondCountdown,
secondButtonTips,
secondButtonClass,
};
}
return {
mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
secondButton: '已结束',
secondCountdown: -1,
secondButtonTips: '请等待下一局比赛开赛',
secondButtonClass: CARD_BUTTON_CLASS.INVALID,
};
}
export function getSatisfiedAndCannotInviteCardCustom({
rawBattleList = [],
curShowingBattleIndex = 0,
enterBattleRoomDuration = CORE_TIME_MAP_MINUTE.JUMP_TO_ROOM,
primaryButtonDisabledToShowQRCode = false,
}: {
rawBattleList: Array<Record<string, any>>;
curShowingBattleIndex?: number;
enterBattleRoomDuration?: number
primaryButtonDisabledToShowQRCode?: boolean;
}) {
const rawCurBattle = rawBattleList[curShowingBattleIndex] || {};
const {
battle_status: battleStatus = 0,
can_enter_game: canEnterGame,
start_time: startTime,
battle_id: battleId,
enter_game_remain: enterGameRemain = 0,
} = rawCurBattle;
const isNotStart = battleStatus <= 100;
const isIng = battleStatus == 200;
if (isNotStart) {
const gap = startTime - Math.floor(Date.now() / 1000);
if (gap > 0 && gap < enterBattleRoomDuration * 60) {
return {
title: CARD_BUTTON_MAP.BATTLE_WILL_START,
mainButton: CARD_BUTTON_MAP.TO_GROUPING,
mainButtonClass: primaryButtonDisabledToShowQRCode
? CARD_BUTTON_CLASS.INVALID
: CARD_BUTTON_CLASS.PRIMARY,
mainButtonCountdown: startTime * 1000,
buttonTips: CARD_BUTTON_MAP.JUMP_TO_ROOM_TIP,
};
}
return {
title: CARD_BUTTON_MAP.BATTLE_WILL_START,
mainButton: CARD_BUTTON_MAP.WAIT_START,
mainButtonClass: CARD_BUTTON_CLASS.INVALID,
mainButtonCountdown: 0,
buttonTips: CARD_BUTTON_MAP.WAIT_VIRTUAL_START_TIP,
};
}
if (isIng) {
const getButton = () => {
const groupGap = Math.floor(Date.now() / 1000) - startTime;
const isGroupingStage = groupGap > 0 && groupGap < 5 * 60;
if (canEnterGame == 1) {
return {
title: '比赛已开启',
mainButton: CARD_BUTTON_MAP.LAUNCH_GAME,
mainButtonClass: primaryButtonDisabledToShowQRCode
? CARD_BUTTON_CLASS.INVALID
: CARD_BUTTON_CLASS.PRIMARY,
mainButtonCountdown: enterGameRemain * 1000 + Date.now(),
buttonTips: enterGameRemain * 1000 > Date.now() ? CARD_BUTTON_MAP.LAUNCH_GAME_TIP : '',
};
}
if (isGroupingStage) {
return {
title: '比赛已开启',
mainButton: CARD_BUTTON_MAP.TO_GROUPING,
mainButtonClass: primaryButtonDisabledToShowQRCode
? CARD_BUTTON_CLASS.INVALID
: CARD_BUTTON_CLASS.PRIMARY,
buttonTips: CARD_BUTTON_MAP.JUMP_TO_ROOM_TIP,
};
}
if (battleId) {
return {
title: '比赛进行中',
mainButton: CARD_BUTTON_MAP.BATTLE_PLAYING,
mainButtonClass: CARD_BUTTON_CLASS.INVALID,
};
}
return {
title: '比赛进行中',
mainButton: CARD_BUTTON_MAP.NOT_ENTER_GAME,
mainButtonClass: CARD_BUTTON_CLASS.INVALID,
};
};
const {
title,
mainButton,
mainButtonClass,
mainButtonCountdown = 0,
buttonTips,
} = getButton();
return {
title,
mainButton,
mainButtonClass,
mainButtonCountdown,
buttonTips,
};
}
return {
title: '比赛已结束',
mainButton: battleId ? '比赛已结束' : '您未出战',
mainButtonClass: CARD_BUTTON_CLASS.INVALID,
mainButtonCountdown: 0,
buttonTips: '',
};
}