diff --git a/game-server/app/servers/activity/handler/bindPhoneHandler.ts b/game-server/app/servers/activity/handler/bindPhoneHandler.ts index 8a6de39b8..a775858d6 100644 --- a/game-server/app/servers/activity/handler/bindPhoneHandler.ts +++ b/game-server/app/servers/activity/handler/bindPhoneHandler.ts @@ -6,7 +6,7 @@ import { DailyItem } from '../../../domain/activityField/dailyChallengesField'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges'; -import { getBindPhoneData } from '../../../services/activity/bindPhoneService'; +import { getBindPhoneData, getBindPhoneDataShow } from '../../../services/activity/bindPhoneService'; import { ActivityBindPhoneRewardModel } from '../../../db/ActivityBindPhoneReward'; @@ -19,6 +19,18 @@ export class BindPhoneHandler { constructor(private app: Application) { } + async getData(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const uid = session.get('userid'); + + let playerData = await getBindPhoneDataShow(activityId, roleId, serverId, uid); + return resResult(STATUS.SUCCESS, { + playerData + }) + } + /************************绑定手机****************************/ /** @@ -36,8 +48,9 @@ export class BindPhoneHandler { const uid = session.get('userid'); let playerData = await getBindPhoneData(activityId, roleId, serverId, uid); - if(!playerData) return resResult(STATUS.ACTIVITY_ID_ERROR); - if(playerData.status != BIND_PHONE_STATUS.WAIT_BIND) return resResult(STATUS.ACTIVITY_HAS_BIND); + let bindPhoneData = playerData?.bindPhone; + if(!bindPhoneData) return resResult(STATUS.ACTIVITY_ID_ERROR); + if(bindPhoneData.status != BIND_PHONE_STATUS.WAIT_BIND) return resResult(STATUS.ACTIVITY_HAS_BIND); await ActivityBindPhoneRewardModel.addRecord(activityId, uid, BIND_PHONE_STATUS.HAS_BIND, { roleId, roleName, serverId }); @@ -62,12 +75,13 @@ export class BindPhoneHandler { const uid = session.get('userid'); let playerData = await getBindPhoneData(activityId, roleId, serverId, uid); - if(!playerData) return resResult(STATUS.ACTIVITY_ID_ERROR); - if(playerData.status == BIND_PHONE_STATUS.WAIT_BIND) return resResult(STATUS.ACTIVITY_BIND_ERR); - if(playerData.status == BIND_PHONE_STATUS.RECEIVED) return resResult(STATUS.ACTIVITY_BIND_RECEIVED); + let bindPhoneData = playerData?.bindPhone; + if(!bindPhoneData) return resResult(STATUS.ACTIVITY_ID_ERROR); + if(bindPhoneData.status == BIND_PHONE_STATUS.WAIT_BIND) return resResult(STATUS.ACTIVITY_BIND_ERR); + if(bindPhoneData.status == BIND_PHONE_STATUS.RECEIVED) return resResult(STATUS.ACTIVITY_BIND_RECEIVED); await ActivityBindPhoneRewardModel.addRecord(activityId, uid, BIND_PHONE_STATUS.RECEIVED, { roleId, roleName, serverId }); - let rewardArray = stringToRewardParam(playerData.rewards) + let rewardArray = stringToRewardParam(bindPhoneData.rewards) let { goods, addHeros } = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.ACT_BIND_PHONE); return resResult(STATUS.SUCCESS, { @@ -77,4 +91,24 @@ export class BindPhoneHandler { }); } + /** + * 领取公众号口令奖励 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof BindPhoneHandler + */ + async receiveGiftCode(msg: { activityId: number }, session: BackendSession) { + return resResult(STATUS.SUCCESS); + } + + + /** + * 前往论坛,用于前往论坛任务 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof BindPhoneHandler + */ + async skipOutSide(msg: { activityId: number }, session: BackendSession) { + return resResult(STATUS.SUCCESS); + } } diff --git a/game-server/app/services/activity/bindPhoneService.ts b/game-server/app/services/activity/bindPhoneService.ts index 5627a4c28..ead7c070a 100644 --- a/game-server/app/services/activity/bindPhoneService.ts +++ b/game-server/app/services/activity/bindPhoneService.ts @@ -2,6 +2,7 @@ import { ACTIVITY_TYPE } from '../../consts'; import { ActivityModel, ActivityModelType } from '../../db/Activity'; import { ActivityBindPhoneRewardModel } from '../../db/ActivityBindPhoneReward'; import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '../../db/ActivityDailyChallenges'; +import { LinkModel } from '../../db/Link'; import { RoleModel } from '../../db/Role'; import { ServerlistModel } from '../../db/Serverlist'; import { UserModel } from '../../db/User'; @@ -28,9 +29,14 @@ export async function getBindPhoneData(activityId: number, roleId: string, serve let serverTime = await getServerCreateTime(serverId); let playerData = new BindPhoneData(activityData, createTime, serverTime); - let user = await UserModel.findUserByUid(uid); - let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid); - playerData.setRecord(user, receiveRec); + let links = await LinkModel.findByServerId(serverId); + playerData.setLinks(links); + + if(playerData.bindPhone) { + let user = await UserModel.findUserByUid(uid); + let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid); + playerData.setBindPhoneStatus(user, receiveRec); + } return playerData; } diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index 194c7c924..c8f4d3786 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -123,6 +123,10 @@ export function checkRouteParam(route: string, msg: any) { case 'activity.miniGameHandler.getMiniGameActivity': case 'activity.weeklyFundHandler.getData': case 'activity.monthlyFundHandler.getData': + case 'activity.bindPhoneHandler.bind': + case 'activity.bindPhoneHandler.receiveReward': + case 'activity.bindPhoneHandler.receiveGiftCode': + case 'activity.bindPhoneHandler.skipOutSide': { if(!checkNaturalNumbers(msg.activityId)) return false; break; diff --git a/game-server/app/services/connectorService.ts b/game-server/app/services/connectorService.ts index fcf692dab..2ff6f27f3 100644 --- a/game-server/app/services/connectorService.ts +++ b/game-server/app/services/connectorService.ts @@ -8,7 +8,7 @@ import { getCurTask, getPvpTask } from './task/taskService'; import { RoleType } from '../db/Role'; import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus'; import { getRandEelmWithWeight, resResult } from '../pubUtils/util'; -import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT, ENTERY_ROLE_PICK, JEWEL_SELECT, ITEM_SELECT, SKIN_SELECT, PUSH_ROUTE, ARTIFACT_SELECT, ACTIVITYITEM_SELECT } from '../consts'; +import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT, ENTERY_ROLE_PICK, JEWEL_SELECT, ITEM_SELECT, SKIN_SELECT, PUSH_ROUTE, ARTIFACT_SELECT, ACTIVITYITEM_SELECT, SNS_LINK_TYPE } from '../consts'; import { getAllShopList } from './shopService'; import { getGeneralRank, getRankFirstReward } from './rankService'; import { getFriendList, getApplyList } from './friendService'; @@ -52,6 +52,7 @@ import { PvpDataReturn } from '../domain/battleField/pvp'; import { getHiddenData } from './dataService'; import { ArtifactModel } from '../db/Artifact'; import { ActivityItemModel } from '../db/ActivityItem'; +import { LinkModel } from '../db/Link'; /** * init: 初始的时候是否推送 true-推 false-不推 @@ -87,6 +88,7 @@ const modules = [ { id: 26, type: 'survey', init: false, refresh: true, guild: false }, { id: 27, type: 'ladder', init: false, refresh: true, guild: false }, { id: 28, type: 'hiddenData', init: true, refresh: true, guild: false }, + { id: 29, type: 'customerLink', init: true, refresh: true, guild: false }, ] export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') { @@ -127,6 +129,7 @@ export async function getModuleData(type: string, data: { role: RoleType, sessio let skins = await SkinModel.findbyRole(role.roleId, SKIN_SELECT.ENTRY); let artifacts = await ArtifactModel.findbyRole(role.roleId, ARTIFACT_SELECT.ENTRY); let activityItems = await ActivityItemModel.findbyRole(role.roleId, ACTIVITYITEM_SELECT.ENTRY); + let link = await LinkModel.findByType(SNS_LINK_TYPE.CUSTOMER); role['heros'] = heros.map(hero => new HeroParam(hero)); role['jewels'] = jewels; @@ -142,6 +145,7 @@ export async function getModuleData(type: string, data: { role: RoleType, sessio role.heads = role.heads.filter(cur => cur.status); role.frames = role.frames.filter(cur => cur.status); role.spines = role.spines.filter(cur => cur.status); + role['customerLink'] = link?.link||''; return pick(role, ENTERY_ROLE_PICK); case 'shop': // 商店 return await getAllShopList(roleId, serverId); diff --git a/gm-server/app/controller/game.ts b/gm-server/app/controller/game.ts index 8b6f98397..f01309b5e 100644 --- a/gm-server/app/controller/game.ts +++ b/gm-server/app/controller/game.ts @@ -251,4 +251,25 @@ export default class GameController extends Controller { ctx.body = await ctx.service.game.getGVGConfig(); return } + + public async getLinks() { + const { ctx } = this; + const { types } = ctx.request.body; + ctx.body = await ctx.service.game.getLinks(types); + return + } + + public async updateWXLink() { + const { ctx } = this; + const { serverId, link, qrCodeLink } = ctx.request.body; + ctx.body = await ctx.service.game.updateWXLink(serverId, link, qrCodeLink); + return + } + + public async updateOtherLink() { + const { ctx } = this; + const { wxPublicAccountQrCode, bbsLink, customerLink } = ctx.request.body; + ctx.body = await ctx.service.game.updateOtherLink(wxPublicAccountQrCode, bbsLink, customerLink); + return + } } diff --git a/gm-server/app/controller/upload.ts b/gm-server/app/controller/upload.ts index 36a8ba1e5..7c1b1c7e6 100644 --- a/gm-server/app/controller/upload.ts +++ b/gm-server/app/controller/upload.ts @@ -15,6 +15,7 @@ const publishPath = '/root/hot_update_backup'; import {exec} from 'child_process' import { reloadResources } from '@pubUtils/data'; import { decodeArrayStr } from '@pubUtils/util'; +import { getLocalQrCodeUrl, getRemoteQrCodeUrl } from '@pubUtils/battleUtils'; const sendToWormhole = require('stream-wormhole'); export default class UploadController extends Controller { @@ -276,6 +277,49 @@ export default class UploadController extends Controller { return; } } + +public async uploadQrCode() { + const { ctx } = this; + + try { + const { ctx } = this; + const parts = ctx.multipart(); + let part, env = ctx.request.headers.env, fileName = ''; + while ((part = await parts()) != null) { + if (part.length) { + console.log('kv: ', `${part[0]}: ${part[1]}`); + } else { + if (!part.filename) continue; + + let filenames = part.filename.split('.'); + let ext = filenames[filenames.length - 1]; + let writePath = getLocalQrCodeUrl(this.app.config.realEnv, env); + fileName = `QR${moment().valueOf()}.${ext}`; + let fullPath = `${writePath}/${fileName}`; + try { + fs.accessSync(writePath); + } catch (err) { + if (err) { + fs.mkdirSync(writePath, { recursive: true }); + } + } + if (!fs.existsSync(fullPath)) { + fs.writeFileSync(fullPath, ''); + } + const writeStream = fs.createWriteStream(fullPath); + await pump(part, writeStream); + + // remoteUrl = `${getRemoteRplUrl(ctx.app.config.realEnv, roleId, warType, battleCode)}/${battleCode}.bin`; + } + await sendToWormhole(part); + } + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: true, url: getRemoteQrCodeUrl(env, fileName) }); + return; + } catch(e) { + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: false, err: e.stack }); + return; + } +} } export function childExec(commond: string) { diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 88547d23b..6d64bbac4 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -12,6 +12,7 @@ export default (app: Application) => { router.post('/api/upload/hotupdate', tokenParser, controller.upload.upload); router.post('/api/upload/uploadjson', tokenParser, controller.upload.uploadJson); router.post('/api/upload/reloadresource', tokenParser, controller.upload.reloadResource); + router.post('/api/upload/uploadqrcode', tokenParser, controller.upload.uploadQrCode); router.post('/api/gmaccount/getgmlist', tokenParser, controller.gmaccount.getGmList); router.post('/api/gmaccount/createaccount', tokenParser,controller.gmaccount.createGmAccount); @@ -65,6 +66,9 @@ export default (app: Application) => { router.post('/api/game/getexisthiddendata', controller.game.getExistHiddenData); router.post('/api/game/getgvgservergroup', controller.game.getGVGServerGroup); router.post('/api/game/getgvgconfig', controller.game.getGVGConfig); + router.post('/api/game/getlinks', tokenParser, controller.game.getLinks); + router.post('/api/game/updatewxlink', tokenParser, controller.game.updateWXLink); + router.post('/api/game/updateotherlink', tokenParser, controller.game.updateOtherLink); router.post('/api/dic/getdicgoods', tokenParser, controller.game.getDicGoods); router.post('/api/dic/getdichero', tokenParser, controller.game.getDicHero); diff --git a/gm-server/app/service/Game.ts b/gm-server/app/service/Game.ts index 9cf6e5c41..b95ceac01 100644 --- a/gm-server/app/service/Game.ts +++ b/gm-server/app/service/Game.ts @@ -1,6 +1,6 @@ import { PackageModel } from '@db/Package'; import { Service } from 'egg'; -import { REDIS_KEY, STATUS } from '@consts'; +import { REDIS_KEY, SNS_LINK_TYPE, STATUS } from '@consts'; import { ServerlistModel } from '@db/Serverlist'; import { gameData } from '@pubUtils/data'; import { DicHero } from '@pubUtils/dictionary/DicHero'; @@ -26,6 +26,7 @@ import { HiddenDataByIdModel } from '@db/HiddenDataById'; import { isNumber } from 'util'; import { ServerGroupModel } from '@db/ServerGroup'; import { GVGConfigModel } from '@db/GVGConfig'; +import { LinkModel } from '@db/Link'; /** * Test Service @@ -420,4 +421,31 @@ export default class Game extends Service { list: gvgconfig?[{...gvgconfig, env: this.app.config.realEnv }]: [] }); } + + public async getLinks(types: number[]) { + const { ctx } = this; + const links = await LinkModel.findByTypes(types); + + return ctx.service.utils.resResult(STATUS.SUCCESS, { + list: links.map(cur => ({...cur, env: this.app.config.realEnv })) + }); + } + + public async updateWXLink(serverId: number, link: string, qrCodeLink: string ) { + const { ctx } = this; + await LinkModel.updateByServerAndType(serverId, SNS_LINK_TYPE.WX_GROUP, { link, qrCodeLink }, ctx.user?.uid); + + return ctx.service.utils.resResult(STATUS.SUCCESS); + } + + public async updateOtherLink(wxPublicAccountQrCode: string, bbsLink: string, customerLink: string ) { + const { ctx } = this; + let updateArr: { type: number, link?: string, qrCodeLink?: string }[] = []; + if(wxPublicAccountQrCode) updateArr.push({ type: SNS_LINK_TYPE.WX_PUBLIC_ACCOUNT, qrCodeLink: wxPublicAccountQrCode }); + if(bbsLink) updateArr.push({ type: SNS_LINK_TYPE.BBS, link: bbsLink }); + if(customerLink) updateArr.push({ type: SNS_LINK_TYPE.CUSTOMER, link: customerLink }); + await LinkModel.updateLinks(updateArr, ctx.user?.uid); + + return ctx.service.utils.resResult(STATUS.SUCCESS); + } } diff --git a/gm-server/config/config.default.ts b/gm-server/config/config.default.ts index cde64ca6f..3118da750 100644 --- a/gm-server/config/config.default.ts +++ b/gm-server/config/config.default.ts @@ -47,7 +47,7 @@ export default (appInfo: EggAppInfo) => { fileSize: '100mb', mode: 'stream', whitelist: [ - '.json', '.ts', '.zip' + '.json', '.ts', '.zip', '.jpg', '.png', '.jpeg' ], fileExtensions: ['.json', '.ts', '.zip', '.tar.gz'], // 扩展几种上传的文件格式 autoFields: true diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 87e2b3fa1..5a4777181 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -265,4 +265,12 @@ export enum BIND_PHONE_STATUS { export enum MINI_GAME_TYPE { ERASE = 1, // 消消乐 SHOOT = 2, // 射箭 +} + +export enum SNS_LINK_TYPE { + WX_GROUP = 1, // 微信群 + BIND_PHONE = 2, // 绑定手机 + WX_PUBLIC_ACCOUNT = 3, // 公众号 + BBS = 4, // 论坛 + CUSTOMER = 5, // 客服地址 } \ No newline at end of file diff --git a/shared/db/Link.ts b/shared/db/Link.ts new file mode 100644 index 000000000..d94413386 --- /dev/null +++ b/shared/db/Link.ts @@ -0,0 +1,48 @@ +// 链接 + +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; + +@index({ type: 1 }) +@index({ serverId: 1 }) +export default class Link extends BaseModel { + @prop({ required: true, default: 0 }) + type: number; // 1-微信群,2-手机绑定 3-公众号关注 4-论坛 5-客服 + @prop({ required: true, default: 0 }) + serverId: number; // 小区id,不限的为0 + @prop({ required: true, default: '' }) + link: string; // 外链 + @prop({ required: true, default: '' }) + qrCodeLink: string; // 微信群二维码 + + public static async findByServerId(serverId: number) { + const result: LinkType[] = await LinkModel.find({ serverId: { $in: [serverId, 0] } }).sort({ serverId: 1 }).lean(); + return result; + } + + public static async findByType(type: number) { + const result: LinkType = await LinkModel.findOne({ type }).select('-_id -__v').lean(); + return result; + } + + public static async findByTypes(types: number[]) { + const result: LinkType[] = await LinkModel.find({ type: { $in: types } }).select('-_id -__v').sort({ serverId: 1 }).lean(); + return result; + } + + public static async updateByServerAndType(serverId: number, type: number, param: LinkUpdateInter, uid: number) { + const result: LinkType = await LinkModel.findOneAndUpdate({ serverId, type }, { $set: {...param, updatedBy: uid}, $setOnInsert: { createdBy: uid } }, { new: true, upsert: true }).lean(); + return result; + } + + public static async updateLinks(updateArr: { type: number, link?: string, qrCodeLink?: string }[], uid: number) { + await LinkModel.bulkWrite(updateArr.map(({type, link, qrCodeLink}) => { + return { updateOne: { filter: { type, serverId: 0 }, update: { $set: { link, qrCodeLink, updatedBy: uid }, $setOnInsert: { createdBy: uid } }, upsert: true} } + })) + } +} + +export const LinkModel = getModelForClass(Link); + +export interface LinkType extends Pick, keyof Link> { }; +export type LinkUpdateInter = Partial; \ No newline at end of file diff --git a/shared/domain/activityField/bindPhoneField.ts b/shared/domain/activityField/bindPhoneField.ts index a48cb3d83..de4e69427 100644 --- a/shared/domain/activityField/bindPhoneField.ts +++ b/shared/domain/activityField/bindPhoneField.ts @@ -1,40 +1,154 @@ -import { BIND_PHONE_STATUS } from '../../consts'; +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'; // 数据库 -interface BindPhoneDataInDb { +interface PageDataInDb { + pageIndex: number; + pageName: string; + type: number; rewards: string; + giftCode: 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; + } +} + +class WXPublicAccountPage extends PageData { + qrCodeLink: string; // 公众号二维码 + rewards: string; // 口令能有的奖励 + originGiftCode: string; // 加密后的口令 + giftCode: string; // 加密后的口令 + status: number = BIND_PHONE_STATUS.WAIT_BIND; // 状态 0-未使用 1-可领取 2-已领取 + + constructor(pageData: PageDataInDb) { + super(pageData); + this.originGiftCode = pageData.giftCode; + this.rewards = pageData.rewards; + } + + public setLink(link: LinkType) { + this.qrCodeLink = link.qrCodeLink; + } + + public setEncodeGiftCode(giftCode: string) { + this.giftCode = giftCode; + } + + public getShowResult() { + return pick(this, ['pageIndex', 'pageName', 'type', 'qrCodeLink', 'rewards', 'giftCode', 'status']); + } +} + +class BBSPage extends PageData { + link: string; // 论坛外链 + + public setLink(link: LinkType) { + this.link = link.link; + } } // 数据 export class BindPhoneData extends ActivityBase { - rewards: string; - - status: number = BIND_PHONE_STATUS.WAIT_BIND; // 状态 0-未绑定 1-已绑定可领取 2-已领取 + wxGroup: WXGroupPage; + bindPhone: BindPhonePage; + wxPublicAccount: WXPublicAccountPage; + bbs: BBSPage; constructor(activityData: ActivityModelType, createTime: number, serverTime: number) { super(activityData, createTime, serverTime); - this.initData(activityData.data) + this.initData(activityData.data); } public initData(data: string) { let dataObj: BindPhoneDataInDb = JSON.parse(data); - this.rewards = dataObj.rewards; + 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 setRecord(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; + 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 setBindPhoneStatus(user: UserType, data: ActivityBindPhoneRewardType) { + if(this.bindPhone) { + if(user && user.channelInfo && user.channelInfo.is_phone_bind == 1) this.bindPhone.status = BIND_PHONE_STATUS.HAS_BIND; + if(data) this.bindPhone.status = data.status; + } } public getShowResult() { + let pages: (WXGroupPage|BindPhonePage|WXPublicAccountPage|BBSPage)[] = []; + 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(), - rewards: this.rewards, - status: this.status, + pages } } diff --git a/shared/pubUtils/battleUtils.ts b/shared/pubUtils/battleUtils.ts index 117080a97..b80684b70 100644 --- a/shared/pubUtils/battleUtils.ts +++ b/shared/pubUtils/battleUtils.ts @@ -49,3 +49,16 @@ export function getRemoteRplFilePath(roleId: string, warType: number, battleCode const rplUrl = `/${roleId}/${warType}/${battleClass}/${battleCode}.bin`; return rplUrl; } + +export function getLocalQrCodeUrl(curEnv: string, env: string) { + if(curEnv == 'development') { + return './img' + } else { + return `/zyz_logs/img/${md5(env).substring(0, 4)}/qrcode`; + } +} + +export function getRemoteQrCodeUrl(env: string, fileName: string) { + const rplUrl = `${getPrefixByEnv(env)}/img/${md5(env).substring(0, 4)}/qrcode/` + fileName; + return rplUrl; +} diff --git a/shared/resource/jsons/dic_api.json b/shared/resource/jsons/dic_api.json index 0d0f80fbc..1e96776d5 100644 --- a/shared/resource/jsons/dic_api.json +++ b/shared/resource/jsons/dic_api.json @@ -971,6 +971,33 @@ "name": "编辑子包", "module": "server", "type": "find" + }, + { + "id": 140, + "api": "/api/game/getlinks", + "name": "获取外链", + "module": "server", + "type": "find" + }, + { + "id": 141, + "api": "/api/game/updatewxlink", + "name": "更新微信群外链", + "module": "server", + "type": "update" + }, + { + "id": 142, + "api": "/api/game/updateotherlink", + "name": "更新其他外链", + "module": "server", + "type": "update" + }, + { + "id": 143, + "api": "/api/upload/uploadqrcode", + "name": "上传二维码", + "module": "server", + "type": "update" } - ] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_activityType.json b/shared/resource/jsons/dic_zyz_activityType.json index 35d086b02..d56f95e35 100644 --- a/shared/resource/jsons/dic_zyz_activityType.json +++ b/shared/resource/jsons/dic_zyz_activityType.json @@ -273,7 +273,7 @@ "id": 50, "activityType": 50, "name": "BIND_PHONE", - "string": "绑定手机" + "string": "关注豪礼" }, { "id": 51,