feat: 每次进入 write level 页面都拉取最新的数据

This commit is contained in:
richarjiang
2026-06-01 11:40:05 +08:00
parent b9f3dce173
commit 411ca8c772
2 changed files with 43 additions and 14 deletions

View File

@@ -80,6 +80,7 @@ export class PageWriteLevels extends BaseView {
private _levelCount: number = 0;
private _itemNodes: Node[] = [];
private _scrollViewComp: ScrollView | null = null;
private _levelListLoadToken: number = 0;
/** 缓存 view 节点的 UITransform避免每次 _updateContentSize 重复查找 */
private _viewTransform: UITransform | null = null;
@@ -140,11 +141,7 @@ export class PageWriteLevels extends BaseView {
console.log('[PageWriteLevels] onViewShow');
this._resizeScrollViewport();
this._updateContentSize();
// 仅首次初始化列表,从预览页返回时保留选中状态
if (this._itemNodes.length === 0) {
void this._initLevelList();
}
void this._initLevelList();
}
private _resizeScrollViewport(): void {
@@ -170,23 +167,32 @@ export class PageWriteLevels extends BaseView {
}
private async _initLevelList(): Promise<void> {
this._clearList();
const loadToken = ++this._levelListLoadToken;
const selectedLevelIds = this._getSelectedLevelIdSet();
// 拉取当前用户所有已通关关卡
const levels = await CompletedLevelsManager.instance.fetch();
const levels = await CompletedLevelsManager.instance.fetch(true);
if (loadToken !== this._levelListLoadToken) {
return;
}
if (levels === null) {
console.warn('[PageWriteLevels] 获取已通关关卡失败');
ToastManager.instance.show('获取关卡列表失败,请稍后重试');
return;
}
this._clearList();
this._levels = levels;
this._levelCount = this._levels.length;
this._restoreSelectedIndices(selectedLevelIds);
console.log('[PageWriteLevels] 已通关关卡总数:', this._levelCount);
if (this._levelCount === 0) {
console.warn('[PageWriteLevels] 用户尚未通关任何关卡');
ToastManager.instance.show('还没有已通关的关卡,快去玩几关吧');
this._updateContentSize();
this._updateSelectionUI();
return;
}
@@ -198,6 +204,29 @@ export class PageWriteLevels extends BaseView {
}
}
private _getSelectedLevelIdSet(): Set<string> {
const selectedLevelIds = new Set<string>();
for (const index of this._selectedIndices) {
const level = this._levels[index] ?? null;
if (level) {
selectedLevelIds.add(level.id);
}
}
return selectedLevelIds;
}
private _restoreSelectedIndices(selectedLevelIds: Set<string>): void {
if (selectedLevelIds.size === 0) {
return;
}
for (let index = 0; index < this._levels.length; index++) {
if (selectedLevelIds.has(this._levels[index].id)) {
this._selectedIndices.add(index);
}
}
}
private _clearList(): void {
for (const node of this._itemNodes) {
if (node && node.isValid) {