300 lines
9.3 KiB
TypeScript
300 lines
9.3 KiB
TypeScript
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 { logger } from "db://assets/Scripts/Main/Common/Logger";
|
|
|
|
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 isRecommendListPreloaded: boolean = false;
|
|
private isShopListPreloaded: boolean = false;
|
|
|
|
/**
|
|
* 初始化并预加载数据
|
|
*/
|
|
async init(): Promise<void> {
|
|
logger.log("[MainController] 开始初始化并预加载数据");
|
|
|
|
// 并行预加载所有数据
|
|
await Promise.all([
|
|
this.preloadThemeData(),
|
|
//this.preloadDailyRecommend(),
|
|
this.preloadRecommendList(true, 1, 10),
|
|
this.preloadShopList(),
|
|
]);
|
|
|
|
logger.log("[MainController] 数据预加载完成");
|
|
}
|
|
|
|
/**
|
|
* 预加载主题数据
|
|
*/
|
|
async preloadThemeData(): Promise<boolean> {
|
|
if (this.isThemeDataPreloaded) {
|
|
logger.log("[MainController] 主题数据已预加载");
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
logger.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;
|
|
logger.log("[MainController] 主题数据预加载成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 主题数据预加载失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 主题数据预加载异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 预加载每日推荐
|
|
*/
|
|
async preloadDailyRecommend(): Promise<boolean> {
|
|
if (this.isDailyRecommendPreloaded) {
|
|
logger.log("[MainController] 每日推荐数据已预加载");
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
logger.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;
|
|
logger.log("[MainController] 每日推荐数据预加载成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 每日推荐数据预加载失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 每日推荐数据预加载异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 请求技师推荐列表
|
|
* @param isFirstReq 是否首次请求(true 表示首次请求,将覆盖旧数据;false 表示分页加载,追加数据)
|
|
* @param page 当前页码,从 1 开始
|
|
* @param limit 每页数据条数,最少10条
|
|
*/
|
|
async preloadRecommendList(isFirstReq: boolean, page: number, limit: number): Promise<boolean> {
|
|
if (this.isRecommendListPreloaded) {
|
|
logger.log("[MainController] 推荐列表已预加载");
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
logger.log("[MainController] 开始预加载推荐列表");
|
|
const reqData = {
|
|
page,
|
|
limit,
|
|
};
|
|
const res = await GirlService.I.reqRecommendList(reqData);
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
const resData = res.data;
|
|
// 保存数据
|
|
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
|
if (isFirstReq) {
|
|
girlData.setRecommendList(resData);
|
|
} else {
|
|
girlData.addRecommendList(resData);
|
|
}
|
|
this.isRecommendListPreloaded = true;
|
|
logger.log("[MainController] 推荐列表预加载成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 推荐列表预加载失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 推荐列表预加载异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 预加载商品列表
|
|
*/
|
|
async preloadShopList(): Promise<boolean> {
|
|
if (this.isShopListPreloaded) {
|
|
logger.log("[MainController] 商品列表数据已预加载");
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
logger.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;
|
|
logger.log("[MainController] 商品列表数据预加载成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 商品列表数据预加载失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 商品列表数据预加载异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 检查数据是否已预加载
|
|
*/
|
|
isDataPreloaded(): boolean {
|
|
return (
|
|
this.isThemeDataPreloaded &&
|
|
this.isDailyRecommendPreloaded &&
|
|
this.isRecommendListPreloaded &&
|
|
this.isShopListPreloaded
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取预加载状态
|
|
*/
|
|
getPreloadStatus() {
|
|
return {
|
|
themeData: this.isThemeDataPreloaded,
|
|
dailyRecommend: this.isDailyRecommendPreloaded,
|
|
recommendList: this.isRecommendListPreloaded,
|
|
shopList: this.isShopListPreloaded,
|
|
allComplete: this.isDataPreloaded(),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 重置预加载状态(用于重新加载数据)
|
|
*/
|
|
resetPreloadStatus(): void {
|
|
this.isThemeDataPreloaded = false;
|
|
this.isDailyRecommendPreloaded = false;
|
|
this.isRecommendListPreloaded = false;
|
|
this.isShopListPreloaded = false;
|
|
logger.log("[MainController] 预加载状态已重置");
|
|
}
|
|
|
|
/**
|
|
* 强制刷新主题数据
|
|
*/
|
|
async refreshThemeData(): Promise<boolean> {
|
|
logger.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;
|
|
logger.log("[MainController] 主题数据刷新成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 主题数据刷新失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 主题数据刷新异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 强制刷新每日推荐数据
|
|
*/
|
|
async refreshDailyRecommend(): Promise<boolean> {
|
|
logger.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;
|
|
logger.log("[MainController] 每日推荐数据刷新成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 每日推荐数据刷新失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 每日推荐数据刷新异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 强制刷新推荐列表数据
|
|
*/
|
|
async refreshRecommendList(): Promise<boolean> {
|
|
logger.log("[MainController] 开始强制刷新推荐列表数据");
|
|
try {
|
|
const reqData = {
|
|
page: 1,
|
|
limit: 10,
|
|
};
|
|
const res = await GirlService.I.reqRecommendList(reqData);
|
|
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
// 保存数据到DataManager
|
|
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
|
girlData.setRecommendList(res.data);
|
|
this.isRecommendListPreloaded = true;
|
|
logger.log("[MainController] 推荐列表数据刷新成功");
|
|
return true;
|
|
} else {
|
|
logger.warn("[MainController] 推荐列表数据刷新失败:", res);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
logger.error("[MainController] 推荐列表数据刷新异常:", error);
|
|
return false;
|
|
}
|
|
}
|
|
}
|