活动:首充增加页签

This commit is contained in:
luying
2022-03-01 15:32:57 +08:00
parent 9e6a43a90a
commit c8c64f7e48
8 changed files with 163 additions and 85 deletions

View File

@@ -5,76 +5,134 @@ import { ActivityFirstGiftModelType } from '../../db/ActivityFirstGift';
import { deltaDays } from '../../pubUtils/util';
import { ActivityBase } from './activityField';
/************** 在数据库中首充礼包的格式 ***********/
interface FirstGiftRewardInDb {
index: number; // 第几天从1开始
reward: string; // type&id&count, type: 1-武将 2-道具 3-礼包
goldCount: number; // 元宝数量
}
interface FirstGiftDataInDb {
pageIndex: number; // 首充第几页
targetMoney: number; // 充值到几元
rewards: FirstGiftRewardInDb[]; // 可领取奖励
}
interface FirstGiftInDb {
data: FirstGiftDataInDb[]
}
/************** 给客户端返回的数据 ***********/
// 首充礼包的数据
export class FirstGiftItem {
index: number; // 第几天从1开始
name: string; //名称
reward: string; //奖励
goldCount: number; // 显示用的可获得元宝
goldCount: number;
isReceive: boolean = false; //是否领取过奖励
constructor(data: any) {
this.name = data.name;
constructor(data: FirstGiftRewardInDb) {
this.index = data.index;
this.reward = data.reward;
this.goldCount = data.goldCount;
this.isReceive = false;
}
public setReceived(daysNum: number[] = []) {
if (daysNum.indexOf(this.index) !== -1) {
this.isReceive = true;
}
}
public canReceive(todayIndex: number) {
return !this.isReceive && this.index <= todayIndex;
}
}
// 30天任务活动数据
export class FirstGiftData extends ActivityBase {
state: number = FIRST_GIFT_STATE.CLOSED;//活动状态
list: Array<FirstGiftItem> = [];//奖励
export class FirstGiftPage {
pageIndex: number;
targetMoney: number; // 这页的目标充值金额
state: number = FIRST_GIFT_STATE.NOT_PAY; //活动状态
todayIndex: number = 0; // 玩家首次充值到达该金额后第几天
items: FirstGiftItem[] = []; //奖励
constructor(data: FirstGiftDataInDb) {
console.log(data)
this.pageIndex = data.pageIndex;
this.targetMoney = data.targetMoney;
for (let obj of data.rewards) {
this.items.push(new FirstGiftItem(obj))
}
}
public setPlayerRecord(playerData: ActivityFirstGiftModelType) {
if(playerData) {
this.state = FIRST_GIFT_STATE.PAY;
this.todayIndex = deltaDays(moment(playerData.createdAt).startOf('d').toDate(), new Date) + 1;
let daysNum = playerData.days||[];
for (let obj of this.items) {
obj.setReceived(daysNum);
}
}
}
//全部领取完成
public isComplete() {
for (let i = 0; i < this.list.length; i++) {
if (!this.list[i].isReceive) {
for (let i = 0; i < this.items.length; i++) {
if (!this.items[i].isReceive) {
return false
}
}
return true;
}
//奖励内容
public findFirstGiftItem(index: number): FirstGiftItem {
let listIndex = this.list.findIndex(obj => { return obj && obj.index == index });
// 寻找每日奖励领取数据
public findItem(index: number) {
let listIndex = this.items.findIndex(obj => { return obj && obj.index == index });
if (listIndex != -1) {
return this.list[listIndex];
return this.items[listIndex];
}
return null;
}
//可以领取的奖励
public canReceiveItems(): FirstGiftItem[] {
return this.list.filter(obj => { return obj && !obj.isReceive && obj.index <= this.todayIndex });
public getCanReceiveItems() {
return this.items.filter(obj => {
return obj && obj.canReceive(this.todayIndex);
});
}
}
// 30天任务活动数据
export class FirstGiftData extends ActivityBase {
list: FirstGiftPage[] = [];//奖励
private map: Map<number, number> = new Map(); // pageIndex => index
// 根据页码获得对象
public findPageByIndex(pageIndex: number) {
let index = this.map.get(pageIndex);
return this.list[index];
}
//解析玩家任务领取记录
public setPlayerRecords(data: ActivityFirstGiftModelType) {
public setPlayerRecords(data: ActivityFirstGiftModelType[]) {
this.todayIndex = 0;
if (!data) {
return;
}
this.todayIndex = deltaDays(moment(data.createdAt).startOf('d').toDate(), new Date) + 1;
this.state = FIRST_GIFT_STATE.OPEN
let daysNum = data.days ? data.days : [];
for (let obj of this.list) {
if (daysNum.indexOf(obj.index) !== -1) {
obj.isReceive = true;
}
for(let playerData of data) {
let pageData = this.findPageByIndex(playerData.pageIndex);
if(pageData) pageData.setPlayerRecord(playerData);
}
}
public initData(data: string) {
let dataObj = JSON.parse(data);
let dataObj: FirstGiftInDb = JSON.parse(data);
let arr = dataObj.data;
for (let obj of arr) {
this.list.push(new FirstGiftItem(obj))
let page = new FirstGiftPage(obj);
this.list.push(page);
this.map.set(page.pageIndex, this.list.length - 1);
}
}