UNPKG

press-next

Version:

Vue3 组件库,支持 Composition API

243 lines (215 loc) 7.16 kB
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: '', }; }