import { _decorator, Component, Label, Node } from "cc"; import li_BaseView from "../../../Main/Common/li_BaseView"; import Utils from "../../../Main/Common/Utils"; import { CommercialData } from "../../data/CommercialData"; import { ConfigManager } from "../../manager/ConfigManager"; import { GButton } from "../../../Main/Common/GButton"; import { PurchasePanelItem } from "../../uiitems/PurchasePanelItem"; import { ViewManager } from "../../../Main/Manager/ViewManager"; import LanguageUtils from "../../../Main/Common/LanguageUtils"; import { InnerEventCode, InnerMsgCode } from "../../../Main/Config/InnerMsgCode"; import { DataManager, DataId } from "../../data/DataManager"; import { WalletData } from "../../data/WalletData"; import { ShopData } from "../../data/ShopData"; import { ShopService } from "db://assets/Scripts/chat18x/network/services/ShopService"; import proto from 'db://assets/Scripts/proto/proto.pb.js'; const { ccclass, property } = _decorator; @ccclass("PurchasePanel") export class PurchasePanel extends li_BaseView { private _nodeTab: any = {}; private coinNum: Label; private vipLeftTime: Label; private vipPrice7: Label; private vipTime7: Label; private vipPrice30: Label; private vipTime30: Label; private tryBuyId: number; @property([PurchasePanelItem]) public items: PurchasePanelItem[] = []; onLoadCT(): void { Utils.parseNode(this.node, this._nodeTab); this.coinNum = this._nodeTab.coinNum.getComponent(Label); this.vipLeftTime = this._nodeTab.vipText.getComponent(Label); this.vipPrice7 = this._nodeTab.vipPrice7.getComponent(Label); this.vipTime7 = this._nodeTab.vipTime7.getComponent(Label); this.vipPrice30 = this._nodeTab.vipPrice30.getComponent(Label); this.vipTime30 = this._nodeTab.vipTime30.getComponent(Label); this.bandBtn(); //订阅商业化数据事件 Utils.addInnerEL(InnerMsgCode.BalanceChange, this, () => { this.onBalanceChange(); }); Utils.addInnerEL(InnerMsgCode.VipExpireChange, this, () => { this.onVipExpireChange(); }); this.Show(); } bandBtn() { GButton.BandClick( this._nodeTab.BuyVipBtn, () => { //TODO:购买vip console.log("购买Vip"); }, this ); GButton.BandClick( this._nodeTab.BuyDiamondBtn, () => { //TODO:购买钻石 console.log("购买钻石,商品id:" + this.tryBuyId); }, this ); GButton.BandClick( this._nodeTab.QUIT, () => { //TODO:购买钻石 ViewManager.I.closeView(this.node); }, this ); } async Show() { // 请求商城数据 const reqData = { }; let res = await ShopService.I.reqShopList(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据 const shopData = DataManager.I.getDataById(DataId.Shop); shopData.goods = res.data; // 根据数据,刷新界面 this.updateView(); } } updateView() { this.getPlayerMerData(); const shopData = DataManager.I.getDataById(DataId.Shop); // VIP会员 const memberIds = shopData.getMemberIds(); for (let i = 0; i < memberIds.length; i++) { const id = memberIds[i]; const price = shopData.getOriginalPriceById(id); if (i === 0) { this.vipPrice7.string = `$ ${price}`; } else if (i === 1) { this.vipPrice30.string = `$ ${price}`; } } // 充值商品 const rechargeIds = shopData.getRechargeIds(); for (let index = 0; index < this.items.length; index++) { const element = this.items[index]; element.init(this, rechargeIds[index]); } this.items.forEach((item) => item.show()); } setDiamondTag(id: number) { this.tryBuyId = id; } getPlayerMerData() { //todo: 获取服务器玩家商业化数据 this.refreshCoinNum(); this.refreshVipExpire(); } onBalanceChange() { this.refreshCoinNum(); } // 刷新余额 private refreshCoinNum() { const walletData = DataManager.I.getDataById(DataId.Wallet); const balance = walletData.getOriginalBalance(); this.coinNum.string = balance.toString(); } onVipExpireChange() { this.refreshVipExpire(); } // 刷新 vip失效时间戳 private refreshVipExpire() { const walletData = DataManager.I.getDataById(DataId.Wallet); const vipExpire = walletData.vipExpire; const leftTime = Utils.formatVipLeftTime(vipExpire); this.vipLeftTime.string = LanguageUtils.getText( "purchasepanel.vip_left" ).replace("${leftTime}", leftTime); } onDestroy() { Utils.removeInnerEL(InnerMsgCode.BalanceChange, this, () => { }); Utils.removeInnerEL(InnerMsgCode.VipExpireChange, this, () => { }); super.onDestroy(); } }