158 lines
4.8 KiB
TypeScript
158 lines
4.8 KiB
TypeScript
import { pick } from 'underscore';
|
|
import { BIND_PHONE_STATUS, SNS_LINK_TYPE } from '../../consts';
|
|
import { ActivityModelType } from '../../db/Activity';
|
|
import { ActivityBindPhoneRewardType } from '../../db/ActivityBindPhoneReward';
|
|
import { LinkType } from '../../db/Link';
|
|
import { UserType } from '../../db/User';
|
|
import { ActivityBase } from './activityField';
|
|
import { ActivityPublicAccountCodeType } from '../../db/ActivityPublicAccountCode';
|
|
|
|
// 数据库
|
|
interface PageDataInDb {
|
|
pageIndex: number;
|
|
pageName: string;
|
|
type: number;
|
|
rewards: string;
|
|
}
|
|
|
|
interface BindPhoneDataInDb {
|
|
pages: PageDataInDb[];
|
|
}
|
|
|
|
class PageData {
|
|
pageIndex: number;
|
|
pageName: string;
|
|
type: number;
|
|
|
|
constructor(pageData: PageDataInDb) {
|
|
this.pageIndex = pageData.pageIndex;
|
|
this.pageName = pageData.pageName;
|
|
this.type = pageData.type;
|
|
}
|
|
}
|
|
|
|
class WXGroupPage extends PageData {
|
|
link: string = ''; // 微信群外链
|
|
qrCodeLink: string = ''; // 微信群二维码
|
|
|
|
public setLink(link: LinkType) {
|
|
this.link = link.link;
|
|
this.qrCodeLink = link.qrCodeLink;
|
|
}
|
|
}
|
|
|
|
class BindPhonePage extends PageData {
|
|
rewards: string; // 绑定手机后能有的奖励
|
|
status: number = BIND_PHONE_STATUS.WAIT_BIND; // 状态 0-未绑定 1-已绑定 3-已领取
|
|
|
|
constructor(pageData: PageDataInDb) {
|
|
super(pageData);
|
|
this.rewards = pageData.rewards;
|
|
}
|
|
|
|
public setBindPhoneStatus(user: UserType, data: ActivityBindPhoneRewardType) {
|
|
if(user && user.channelInfo && user.channelInfo.is_phone_bind == 1) this.status = BIND_PHONE_STATUS.HAS_BIND;
|
|
if(data) this.status = data.status;
|
|
}
|
|
}
|
|
|
|
class WXPublicAccountPage extends PageData {
|
|
qrCodeLink: string; // 公众号二维码
|
|
rewards: string; // 口令能有的奖励
|
|
giftCode: string; // 加密后的口令
|
|
status: number = BIND_PHONE_STATUS.WAIT_BIND; // 状态 0-未使用 1-可领取 2-已领取
|
|
|
|
constructor(pageData: PageDataInDb) {
|
|
super(pageData);
|
|
this.rewards = pageData.rewards;
|
|
}
|
|
|
|
public setLink(link: LinkType) {
|
|
this.qrCodeLink = link.qrCodeLink;
|
|
}
|
|
|
|
public setEncodeGiftCode(giftCode: string) {
|
|
this.giftCode = giftCode;
|
|
}
|
|
|
|
public setPlayerRecord(playerRecord: ActivityPublicAccountCodeType) {
|
|
if(!playerRecord) return;
|
|
this.status = playerRecord.hasReceived? BIND_PHONE_STATUS.RECEIVED: BIND_PHONE_STATUS.HAS_BIND;
|
|
}
|
|
|
|
public getShowResult() {
|
|
return pick(this, ['pageIndex', 'pageName', 'type', 'qrCodeLink', 'rewards', 'giftCode', 'status']);
|
|
}
|
|
}
|
|
|
|
class BBSPage extends PageData {
|
|
iosLink: string; // 论坛外链
|
|
androidLink: string; // 安卓外链
|
|
|
|
public setLink(link: LinkType) {
|
|
this.iosLink = link.link;
|
|
this.androidLink = link.androidLink;
|
|
}
|
|
}
|
|
|
|
// 数据
|
|
export class BindPhoneData extends ActivityBase {
|
|
wxGroup: WXGroupPage;
|
|
bindPhone: BindPhonePage;
|
|
wxPublicAccount: WXPublicAccountPage;
|
|
bbs: BBSPage;
|
|
|
|
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
|
|
super(activityData, createTime, serverTime);
|
|
this.initData(activityData.data);
|
|
}
|
|
|
|
public initData(data: string) {
|
|
let dataObj: BindPhoneDataInDb = JSON.parse(data);
|
|
for(let pageData of (dataObj?.pages||[])) {
|
|
switch(pageData.type) {
|
|
case SNS_LINK_TYPE.WX_GROUP: {
|
|
this.wxGroup = new WXGroupPage(pageData); break;
|
|
}
|
|
case SNS_LINK_TYPE.BIND_PHONE: {
|
|
this.bindPhone = new BindPhonePage(pageData); break;
|
|
}
|
|
case SNS_LINK_TYPE.WX_PUBLIC_ACCOUNT: {
|
|
this.wxPublicAccount = new WXPublicAccountPage(pageData); break;
|
|
}
|
|
case SNS_LINK_TYPE.BBS: {
|
|
this.bbs = new BBSPage(pageData); break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public setLinks(links: LinkType[]) {
|
|
for(let link of links) {
|
|
switch (link.type) {
|
|
case SNS_LINK_TYPE.WX_GROUP: {
|
|
this.wxGroup?.setLink(link); break;
|
|
}
|
|
case SNS_LINK_TYPE.WX_PUBLIC_ACCOUNT: {
|
|
this.wxPublicAccount?.setLink(link); break;
|
|
}
|
|
case SNS_LINK_TYPE.BBS: {
|
|
this.bbs?.setLink(link); break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public getShowResult() {
|
|
let pages: any[] = [];
|
|
if(this.wxGroup) pages.push(this.wxGroup);
|
|
if(this.bindPhone) pages.push(this.bindPhone);
|
|
if(this.wxPublicAccount) pages.push(this.wxPublicAccount.getShowResult());
|
|
if(this.bbs) pages.push(this.bbs);
|
|
return {
|
|
...this.getBaseKeys(),
|
|
pages
|
|
}
|
|
}
|
|
|
|
} |