import { _decorator, Component, Label, Node } from "cc"; import li_BaseView from "../../../Main/Common/li_BaseView"; import Utils from "../../../Main/Common/Utils"; import { GButton } from "../../../Main/Common/GButton"; import { PurchasePanelItem } from "../../uiitems/PurchasePanelItem"; import LanguageUtils from "../../../Main/Common/LanguageUtils"; import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode"; import { DataManager, DataId } from "../../data/DataManager"; import { WalletData } from "../../data/WalletData"; import { ShopData } from "../../data/ShopData"; import { GirlData } from "../../data/GirlData"; import { ShopService } from "db://assets/Scripts/chat18x/network/services/ShopService"; import { PaymentService } from "db://assets/Scripts/chat18x/payment/PaymentService"; import proto from "db://assets/Scripts/proto/proto.pb.js"; import { NavigationManager } from "../../manager/NavigationManager"; 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; @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(); }); for (let index = 0; index < this.items.length; index++) { const element = this.items[index]; element.init(this); } this.Show(); } bandBtn() { GButton.BandClick( this._nodeTab.Buy7DayVipBt, () => { // 购买7天会员 const shopData = DataManager.I.getDataById(DataId.Shop); const memberId = shopData.get7DayMemberId(); this.reqBuyGood(memberId); }, this ); GButton.BandClick( this._nodeTab.Buy30DayVipBtn, () => { // 购买30天会员 const shopData = DataManager.I.getDataById(DataId.Shop); const memberId = shopData.get30DayMemberId(); this.reqBuyGood(memberId); }, this ); GButton.BandClick( this._nodeTab.ReturnBtn, () => { this.onClose(); // NavigationPanel 始终显示,不需要显示 DefaultView }, 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(); this.updateShops(); } } shopData: ShopData; updateView() { this.getPlayerMerData(); this.shopData = DataManager.I.getDataById(DataId.Shop); // VIP会员 const memberId7 = this.shopData.get7DayMemberId(); const price7 = this.shopData.getOriginalPriceById(memberId7); this.vipPrice7.string = `$ ${price7}`; const memberId30 = this.shopData.get30DayMemberId(); const price30 = this.shopData.getOriginalPriceById(memberId30); this.vipPrice30.string = `$ ${price30}`; } // 0:cash 1:web3 updateShops(type: number = 0) { // 充值商品 缺:分开获取现金充值或者web3币充值 const rechargeIds = this.shopData.getRechargeIds(); for (let index = 0; index < this.items.length; index++) { const element = this.items[index]; element.refresh(rechargeIds[index]); } } setDiamondTag(id: number) { const shopData = DataManager.I.getDataById(DataId.Shop); const isRechargeId = shopData.isRechargeId(id); if (isRechargeId) { // 需要外部支付进行购买 this.startPayment(id, proto.cs.EnmPayType.EPT_Cash_INR, 0); } else { //是u币充值,打开页面 NavigationManager.Instance.openSubPanel("Web3PopPanel", this.node); } } 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); } // 使用余额购买商品 async reqBuyGood(goodId: number) { // 请求购买商品 const reqData = { goodId: goodId, girlId: 0, }; let res = await ShopService.I.reqBuyGood(reqData); console.log("请求使用余额购买商品的响应数据:", res); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { const resData = res.data; // 保存数据 const girlData = DataManager.I.getDataById(DataId.Girl); const walletData = DataManager.I.getDataById(DataId.Wallet); walletData.balance = Number(resData.balance); walletData.vipExpire = Number(resData.vipExpire); // 刷新界面 } } // 创建订单 async startPayment(goodId: number, payType: number, network: number) { // 请求数据 const reqData = { goodId, payType, network, }; let res = await PaymentService.I.startPayment(reqData); console.log("支付完成的响应数据:", res); if (res) { let status = res.status; if (status === -1) { console.log("支付失败!!!,错误码:", res.retCode); } else if (status === 0) { console.log("支付成功!!!"); const walletData = DataManager.I.getDataById(DataId.Wallet); walletData.balance = Number(res.balance); walletData.vipExpire = Number(res.vipExpire); } } } onClickCashBtn() { this.updateShops(0); } onClickWeb3Btn() { this.updateShops(1); } onDestroy() { Utils.removeInnerEL(InnerMsgCode.BalanceChange, this, () => {}); Utils.removeInnerEL(InnerMsgCode.VipExpireChange, this, () => {}); super.onDestroy(); } }