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 { 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 GameRootUI from "../../../Main/Common/GameRootUI"; 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(); }); 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(); GameRootUI.I.showDefaultView(); }, 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 memberId7 = shopData.get7DayMemberId(); const price7 = shopData.getOriginalPriceById(memberId7); this.vipPrice7.string = `$ ${price7}`; const memberId30 = shopData.get30DayMemberId(); const price30 = shopData.getOriginalPriceById(memberId30); this.vipPrice30.string = `$ ${price30}`; // 充值商品 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) { const shopData = DataManager.I.getDataById(DataId.Shop); const isRechargeId = shopData.isRechargeId(id); if (isRechargeId) { // 需要外部支付进行购买 this.startPayment(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); } // 使用余额购买商品 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) { // 请求数据 const reqData = { goodId }; 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); } } } onDestroy() { Utils.removeInnerEL(InnerMsgCode.BalanceChange, this, () => { }); Utils.removeInnerEL(InnerMsgCode.VipExpireChange, this, () => { }); super.onDestroy(); } }