feat: 每次进入 write level 页面都拉取最新的数据
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user