调整布局、新增导航栏,调整页面跳转逻辑
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
import { _decorator, Component, Node } from "cc";
|
||||
import { ThemeService } from "../network/services/ThemeService";
|
||||
import { GirlService } from "../network/services/GirlService";
|
||||
import { ShopService } from "../network/services/ShopService";
|
||||
import { DataManager, DataId } from "../data/DataManager";
|
||||
import { ThemeData } from "../data/ThemeData";
|
||||
import { GirlData } from "../data/GirlData";
|
||||
import { ShopData } from "../data/ShopData";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("MainController")
|
||||
export class MainController {
|
||||
private static _instance: MainController;
|
||||
public static get I(): MainController {
|
||||
if (!MainController._instance) {
|
||||
MainController._instance = new MainController();
|
||||
}
|
||||
return MainController._instance;
|
||||
}
|
||||
private constructor() {}
|
||||
|
||||
// 数据预加载状态标记
|
||||
private isThemeDataPreloaded: boolean = false;
|
||||
private isDailyRecommendPreloaded: boolean = false;
|
||||
private isShopListPreloaded: boolean = false;
|
||||
|
||||
/**
|
||||
* 初始化并预加载数据
|
||||
*/
|
||||
async init(): Promise<void> {
|
||||
console.log("[MainController] 开始初始化并预加载数据");
|
||||
|
||||
// 并行预加载所有数据
|
||||
await Promise.all([
|
||||
this.preloadThemeData(),
|
||||
this.preloadDailyRecommend(),
|
||||
this.preloadShopList()
|
||||
]);
|
||||
|
||||
console.log("[MainController] 数据预加载完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 预加载主题数据
|
||||
*/
|
||||
async preloadThemeData(): Promise<boolean> {
|
||||
if (this.isThemeDataPreloaded) {
|
||||
console.log("[MainController] 主题数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log("[MainController] 开始预加载主题数据");
|
||||
const reqData = {};
|
||||
const res = await ThemeService.I.reqHallTheme(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
||||
themeData.themes = res.data;
|
||||
this.isThemeDataPreloaded = true;
|
||||
console.log("[MainController] 主题数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 主题数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 主题数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 预加载每日推荐
|
||||
*/
|
||||
async preloadDailyRecommend(): Promise<boolean> {
|
||||
if (this.isDailyRecommendPreloaded) {
|
||||
console.log("[MainController] 每日推荐数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log("[MainController] 开始预加载每日推荐数据");
|
||||
const reqData = {};
|
||||
const res = await GirlService.I.reqDailyRecommend(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setDailyRecommend(res.data);
|
||||
this.isDailyRecommendPreloaded = true;
|
||||
console.log("[MainController] 每日推荐数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 每日推荐数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 每日推荐数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 预加载商品列表
|
||||
*/
|
||||
async preloadShopList(): Promise<boolean> {
|
||||
if (this.isShopListPreloaded) {
|
||||
console.log("[MainController] 商品列表数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log("[MainController] 开始预加载商品列表数据");
|
||||
const reqData = {};
|
||||
const res = await ShopService.I.reqShopList(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const shopData = DataManager.I.getDataById<ShopData>(DataId.Shop);
|
||||
shopData.goods = res.data;
|
||||
this.isShopListPreloaded = true;
|
||||
console.log("[MainController] 商品列表数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 商品列表数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 商品列表数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查数据是否已预加载
|
||||
*/
|
||||
isDataPreloaded(): boolean {
|
||||
return this.isThemeDataPreloaded && this.isDailyRecommendPreloaded && this.isShopListPreloaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预加载状态
|
||||
*/
|
||||
getPreloadStatus() {
|
||||
return {
|
||||
themeData: this.isThemeDataPreloaded,
|
||||
dailyRecommend: this.isDailyRecommendPreloaded,
|
||||
shopList: this.isShopListPreloaded,
|
||||
allComplete: this.isDataPreloaded()
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置预加载状态(用于重新加载数据)
|
||||
*/
|
||||
resetPreloadStatus(): void {
|
||||
this.isThemeDataPreloaded = false;
|
||||
this.isDailyRecommendPreloaded = false;
|
||||
this.isShopListPreloaded = false;
|
||||
console.log("[MainController] 预加载状态已重置");
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制刷新主题数据
|
||||
*/
|
||||
async refreshThemeData(): Promise<boolean> {
|
||||
console.log("[MainController] 开始强制刷新主题数据");
|
||||
try {
|
||||
const reqData = {};
|
||||
const res = await ThemeService.I.reqHallTheme(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
||||
themeData.themes = res.data;
|
||||
this.isThemeDataPreloaded = true;
|
||||
console.log("[MainController] 主题数据刷新成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 主题数据刷新失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 主题数据刷新异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制刷新每日推荐数据
|
||||
*/
|
||||
async refreshDailyRecommend(): Promise<boolean> {
|
||||
console.log("[MainController] 开始强制刷新每日推荐数据");
|
||||
try {
|
||||
const reqData = {};
|
||||
const res = await GirlService.I.reqDailyRecommend(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
// 保存数据到DataManager
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setDailyRecommend(res.data);
|
||||
this.isDailyRecommendPreloaded = true;
|
||||
console.log("[MainController] 每日推荐数据刷新成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 每日推荐数据刷新失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 每日推荐数据刷新异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user