import { MissionStatus, ActivityStatus, MissionInfo, MissionActivityVO, AwardActivityVO, } from '../types/mission'; /** * 判断任务是否可领取 */ export function isMissionClaimable(mission: MissionInfo): boolean { return mission.missionStatus === 0; } /** * 判断任务是否已完成 */ export function isMissionCompleted(mission: MissionInfo): boolean { return mission.missionStatus === 1; } /** * 判断任务是否已过期/抢完 */ export function isMissionExpired(mission: MissionInfo): boolean { return mission.missionStatus === 2; } /** * 判断任务活动是否进行中 */ export function isMissionActivityActive(activity: MissionActivityVO): boolean { const now = Date.now(); return now >= activity.activityStartTime && now <= activity.activityEndTime && activity.activityStatus === 0; } /** * 根据时间获取任务活动状态文案 */ export function getMissionActivityStatusText(activity: MissionActivityVO): string { const now = Date.now(); // 如果活动状态不为0(进行中),则直接判断为已结束 if (activity.activityStatus !== 0) { return '已结束'; } // 未开始 if (now < activity.activityStartTime) { return '未开始'; } // 已结束 if (now > activity.activityEndTime) { return '已结束'; } // 进行中 return '进行中'; } /** * 判断奖励活动是否进行中 */ export function isAwardActivityActive(activity: AwardActivityVO): boolean { const now = Date.now(); return now >= activity.startTime && now <= activity.endTime && activity.status === 0; } /** * 获取任务状态描述 */ export function getMissionStatusText(status: MissionStatus): string { switch (status) { case -1: return '未完成'; case 0: return '可领取'; case 1: return '已领取'; case 2: return '已抢完'; default: return ''; } } /** * 获取活动状态描述 */ export function getActivityStatusText(status: ActivityStatus): string { switch (status) { case -1: return '未开始'; case 0: return '进行中'; case 1: return '已结束'; default: return '未知状态'; } } /** * 获取任务剩余时间(毫秒) */ export function getMissionTimeRemaining(activity: MissionActivityVO): number { const now = Date.now(); const endTime = activity.activityEndTime; return Math.max(0, endTime - now); } /** * 格式化时间差 */ export function formatTimeRemaining(milliseconds: number): string { if (milliseconds <= 0) return '已结束'; const seconds = Math.floor(milliseconds / 1000); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60); const days = Math.floor(hours / 24); if (days > 0) return `${days}天${hours % 24}小时`; if (hours > 0) return `${hours}小时${minutes % 60}分钟`; if (minutes > 0) return `${minutes}分钟`; return `${seconds}秒`; } /** * 过滤显示的任务 */ export function filterVisibleMissions(missions: MissionInfo[]): MissionInfo[] { // console.log('过滤前的任务数量:', missions.length); // console.log('过滤前的任务详情:', missions.map(m => ({ // code: m.code, // title: m.title, // show: m.show, // channelShow: m.channelShow // }))); // 只根据 show 字段过滤,不过滤 channelShow 为 false 的任务 const visibleMissions = missions.filter(mission => mission.show); // console.log('过滤后的任务数量:', visibleMissions.length); // console.log('过滤后的任务详情:', visibleMissions.map(m => ({ // code: m.code, // title: m.title, // show: m.show, // channelShow: m.channelShow // }))); return visibleMissions; }