press-next
Version:
Vue3 组件库,支持 Composition API
176 lines (155 loc) • 3.76 kB
text/typescript
import {
BATTLE_STATE_MAP,
REMATCH_STATE_MAP,
// SCHEDULE_CUSTOM_STATUS_MAP,
SCHEDULE_STATUS_MAP,
} from './config';
// import { timeStampFormat } from 't-comm/es/time/time';
enum MiddleCodeEnum {
end = 'end',
ing = 'ing',
entering = 'entering',
notStart = 'notStart',
}
export function mapBattleStatus(status: any) {
if (status <= BATTLE_STATE_MAP.WAIT_CREATE_ROOM) {
return MiddleCodeEnum.entering;
}
if (status > BATTLE_STATE_MAP.WAIT_CREATE_ROOM && status <= BATTLE_STATE_MAP.IN_BATTLE) {
return MiddleCodeEnum.ing;
}
if (status >= BATTLE_STATE_MAP.ENDED_READING_DATA && status <= BATTLE_STATE_MAP.ENDED) {
return MiddleCodeEnum.end;
}
return MiddleCodeEnum.notStart;
}
function getBattleStatus({
battleState = 0,
battleList = [],
curBo = 0,
}: {
battleState?: number,
battleList?: Array<any>,
curBo?: number,
}) {
if (battleState === 0
|| ((battleList?.length === curBo)
&& battleList?.[battleList?.length - 1]?.battle_state === BATTLE_STATE_MAP.ENDED)
|| battleList?.length <= 0
) {
return MiddleCodeEnum.notStart;
}
return mapBattleStatus(battleState);
}
/**
* timeDesc: 赛程树用,结束时间
* statusDesc: 赛程树用,描述
* playingDesc: 赛程树和列表视图用,用于比赛中+图标
* listViewStatusDesc: 列表视图用,用于比赛中+图标
* battleDesc: 操作面板用
*/
function getStatusDescInner({
code,
// time,
isManualStart = false,
}: {
code: MiddleCodeEnum;
time?: number;
isManualStart: boolean;
}) {
if (code === MiddleCodeEnum.end) {
// const timeDesc = timeStampFormat(time, 'M/d hh:mm');
return {
timeDesc: '',
statusDesc: '已结束',
playingDesc: '',
listViewStatusDesc: '已结束',
battleDesc: '已结束',
};
}
if (code === MiddleCodeEnum.ing) {
return {
timeDesc: '',
statusDesc: '',
playingDesc: '比赛中',
listViewStatusDesc: '',
battleDesc: '比赛中',
};
}
if (code === MiddleCodeEnum.entering) {
return {
timeDesc: '',
statusDesc: '上场中',
playingDesc: '',
listViewStatusDesc: '上场中',
battleDesc: '上场中',
};
}
if (code === MiddleCodeEnum.notStart) {
const desc = isManualStart ? '待管理员开赛' : '未开始';
return {
timeDesc: '',
statusDesc: desc,
playingDesc: '',
listViewStatusDesc: desc,
battleDesc: '未开始',
};
}
return {
timeDesc: '',
statusDesc: '',
playingDesc: '',
listViewStatusDesc: '',
battleDesc: '',
};
}
export function getGpBattleState({
state = 0,
battleState = 0,
curBo = 0,
battleList = [],
isManualStart = false,
time = 0,
}) {
const code = getMiddleCode({
state,
battleState,
curBo,
battleList,
});
return getStatusDescInner({
code,
time,
isManualStart,
});
}
function getMiddleCode({
state = 0,
battleState = 0,
curBo = 0,
battleList = [],
}) {
if ([SCHEDULE_STATUS_MAP.ENDED].includes(state as any)) {
return MiddleCodeEnum.end;
}
if (!state) {
return MiddleCodeEnum.notStart;
}
if (battleState && !battleList?.length) {
// 对应 list-view 数据,没有 battle_list,只有 battle_state
return mapBattleStatus(battleState);
}
if (battleList?.length) {
const rNode: Record<string, any> = battleList.find((item: any) => {
if (item.bonum === curBo && +item.rematch_state !== REMATCH_STATE_MAP.REMATCH) {
return true;
}
}) || {};
return rNode ? getBattleStatus({
battleState: rNode.battle_state,
battleList,
curBo,
}) : MiddleCodeEnum.notStart;
}
return MiddleCodeEnum.notStart;
}