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

@@ -40,13 +40,13 @@ Git 历史采用 Conventional Commits且摘要多为中文例如 `feat:
<claude-mem-context>
# Memory Context
# [mp-xieyingeng] recent context, 2026-06-01 11:17am GMT+8
# [mp-xieyingeng] recent context, 2026-06-01 11:37am GMT+8
Legend: 🎯session 🔴bugfix 🟣feature 🔄refactor ✅change 🔵discovery ⚖decision 🚨security_alert 🔐security_note
Format: ID TIME TYPE TITLE
Fetch details: get_observations([IDs]) | Search: mem-search skill
Stats: 50 obs (15,406t read) | 2,405,914t work | 99% savings
Stats: 50 obs (15,736t read) | 2,461,717t work | 99% savings
### Apr 26, 2026
S1309 移除 PageLevel.ts 进入关卡时弹出体力扣减 toast (Apr 26 at 5:16 PM)
@@ -55,11 +55,8 @@ S1308 移除进入游戏关卡时弹出体力扣减的 toast 提示 (Apr 27 at 9
S1310 移除进入游戏体力扣减 toast 并在首页添加体力显示 (Apr 27 at 9:22 AM)
S1311 移除体力扣减 toast 并完善首页体验 (Apr 27 at 9:23 AM)
S1313 Implement object-fit: cover image scaling in Cocos Creator to prevent downloaded images from being distorted (Apr 27 at 9:26 AM)
1362 9:45a 🟣 Image Cover Mode Scaling in Cocos Creator
S1312 Fix image distortion in PageLevel.ts by implementing object-fit: cover behavior for downloaded images (Apr 27 at 9:45 AM)
1360 " ✅ Cocos Creator animation imports added to PageHome.ts
1361 " ✅ Animation constants added to PageHome class
1363 " ✅ Start game button integrated with stamina check and animation flow
1363 9:45a ✅ Start game button integrated with stamina check and animation flow
1364 " 🟣 Stamina consumption animation fully implemented in PageHome
S1314 Implement stamina consumption animation in Cocos Creator game - when clicking StarGame button, IconLive node flies to button with floating "-1" text, then navigates to level (Apr 27 at 9:45 AM)
1365 9:46a 🔴 Animation completes but navigation to PageLevel fails
@@ -113,7 +110,10 @@ S1317 Implement CSS cover-mode image scaling for PageLevel.ts mainImage nodes (A
1779 " 🔵 PageWriteLevels Layout Node Tree Verified After Widget Changes
1780 11:16a 🔵 TypeScript Check Requires Cocos Creator to Generate temp/declarations First
1781 " 🔵 New Widget Bottom Inset Produces Shorter Viewport on Small Screens vs Old Minimum
1783 " 🔵 PageWriteLevels Bottom Control Layout Constraints Mapped
1784 " ✅ ScrollView Widget Bottom Inset Revised from 559.076 to 752.53
1782 " 🔵 PageWriteLevels Prefab __id__ Reference Integrity Confirmed Valid
1785 11:19a ✅ PageWriteLevels Widget Layout Refactor Complete — Final Diff Confirmed
Access 2406k tokens of past work via get_observations([IDs]) or mem-search skill.
Access 2462k tokens of past work via get_observations([IDs]) or mem-search skill.
</claude-mem-context>

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) {