import { _decorator, Component, Node, instantiate, Label, Sprite, UITransform, } from "cc"; import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView"; import Utils from "db://assets/Scripts/Main/Common/Utils"; import { GButton } from "db://assets/Scripts/Main/Common/GButton"; import ResManager from "db://assets/Scripts/Main/Manager/ResManager"; import { ThemeItem } from "../../uiitems/ThemeItem"; import { NavigationManager } from "../../manager/NavigationManager"; import { GirlListItem } from "../../uiitems/GirlListItem"; import LanguageUtils from "../../../Main/Common/LanguageUtils"; import { ViewManager } from "../../../Main/Manager/ViewManager"; import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode"; import { ThemeService } from "db://assets/Scripts/chat18x/network/services/ThemeService"; import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlService"; import { ShopService } from "db://assets/Scripts/chat18x/network/services/ShopService"; import { DataManager, DataId } from "../../data/DataManager"; import { ThemeData } from "../../data/ThemeData"; import { GirlData } from "../../data/GirlData"; import { WalletData } from "../../data/WalletData"; import { AccountData } from "../../data/AccountData"; import { ShopData } from "../../data/ShopData"; import proto from "db://assets/Scripts/proto/proto.pb.js"; import GameRootUI from "../../../Main/Common/GameRootUI"; const { ccclass, property } = _decorator; @ccclass("ThemePanel") export class ThemePanel extends li_BaseView { private _nodeTab: any = {}; coinNum: Label; uid: Label; itemInst: GirlListItem; content: Node; private vipLeftTime: Label; recId: number; recName: Label; recSprite: Sprite; cache: ThemeItem[] = []; onLoadCT() { Utils.parseNode(this.node, this._nodeTab); this.coinNum = this._nodeTab.coinNum.getComponent(Label); this.uid = this._nodeTab.uid.getComponent(Label); this.recName = this._nodeTab.characterNameText.getComponent(Label); this.recSprite = this._nodeTab.recPic.getComponent(Sprite); this.vipLeftTime = this._nodeTab.vipText.getComponent(Label); this.registerListener(); this.itemInst = this._nodeTab.ThemeItem.getComponent(ThemeItem); this.itemInst.node.active = false; this.content = this._nodeTab.allThemecontent; this.Show(); } rectNameKey: string; async Show() { this._nodeTab.loadingRec.active = true; //some temp data this.refreshCoinNum(); this.refreshVipExpire(); const accountData = DataManager.I.getDataById(DataId.Account); this.uid.string = "uid: " + accountData.accId; this.recId = 1; if (this.cache) { for (let i = this.cache.length - 1; i >= 0; i--) { this.cache[i].node.destroy(); } } // 请求主题数据 const reqData = {}; let res = await ThemeService.I.reqHallTheme(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据 const themeData = DataManager.I.getDataById(DataId.Theme); themeData.themes = res.data; // 根据数据,刷新界面 const themeIds = themeData.themeIds; for (let id of themeIds) { let newNode = instantiate(this.itemInst.node); let item = newNode.getComponent(ThemeItem); item.refresh(id); newNode.active = true; this.cache.push(item); this.content.addChild(newNode); } } // 请求每日推荐 const reqData2 = {}; let res2 = await GirlService.I.reqDailyRecommend(reqData2); if (res2 && res2.code === proto.cs.EnmRetCode.SUCCESS) { const girlData = DataManager.I.getDataById(DataId.Girl); girlData.setDailyRecommend(res2.data); // 根据数据,刷新界面 this.recId = girlData.getRecommendGirlId(); this.rectNameKey = girlData.getRecommendGrilName(); let avatarPath = girlData.getRecommendGrilAvatar(); this.recName.string = LanguageUtils.getText(this.rectNameKey); ResManager.I.changeBundleSpriteFrame( this.recSprite, avatarPath, "Girls", () => { let sizeTran = this.recSprite.node.parent.getComponent(UITransform); Utils.adjustBgPixelRatioToSize( sizeTran.contentSize, this.recSprite.node, 1 ); } ); } this._nodeTab.loadingRec.active = false; // 获取商品列表,提前把数据拿下来 this.reqShopList(); } private registerListener() { GButton.BandClick(this._nodeTab.settingBtn, this.openSetting, this); GButton.BandClick(this._nodeTab.msgBoxBtn, this.openMsgBox, this); GButton.BandClick(this._nodeTab.ChatWithRecBtn, this.chatWithRec, this); GButton.BandClick(this._nodeTab.ShopPanelEntry, this.enterShop, this); Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => { this.recName.string = LanguageUtils.getText(this.rectNameKey); }); Utils.addInnerEL(InnerMsgCode.BalanceChange, this, () => { this.refreshCoinNum(); }); Utils.addInnerEL(InnerMsgCode.VipExpireChange, this, () => { this.refreshVipExpire(); }); } enterShop() { ViewManager.I.openBundlesView("PurchasePanel"); } chatWithRec() { const girlData = DataManager.I.getDataById(DataId.Girl); // 是否已经解锁 const isRelease = girlData.getIsRelease( girlData.getGrilCategoryById(this.recId).toString(), this.recId ); const isFree = girlData.getGrilPrice( girlData.getGrilCategoryById(this.recId).toString(), this.recId ) == 0; if (isRelease || isFree) { NavigationManager.Instance.navigateToGirlDetail(this.recId); GameRootUI.I.hideDefaultView(); } else { //未解锁 ViewManager.I.openBundlesPopupView("GirlListPopupPanel", { base: this, category: girlData.getGrilCategoryById(this.recId), id: this.recId, }); } } openSetting() { ViewManager.I.openBundlesView("SettingPanel"); } openMsgBox() { console.log("打开信箱"); } // 刷新余额 private refreshCoinNum() { const walletData = DataManager.I.getDataById(DataId.Wallet); const balance = walletData.getOriginalBalance(); this.coinNum.string = balance.toString(); } // 刷新 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 reqShopList() { // 请求购买商品 const reqData = {}; let res = await ShopService.I.reqShopList(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { const resData = res.data; // 保存数据 const shopData = DataManager.I.getDataById(DataId.Shop); shopData.goods = res.data; } } onDestroy(): void { Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => { this.recName.string = LanguageUtils.getText(this.rectNameKey); }); Utils.removeInnerEL(InnerMsgCode.BalanceChange, this, () => {}); Utils.removeInnerEL(InnerMsgCode.VipExpireChange, this, () => {}); } }