fix(staff): loadWechatStats 加载竞态守卫(token)+ 重查时清空旧窗数字

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
浅念
2026-08-07 18:50:02 +08:00
parent 876767cd68
commit cab8ab95dc
+9 -3
View File
@@ -83,18 +83,24 @@ const statsEnd = computed(() => dateRange.value[1].getTime())
/** account_id → stats 缓存(wechat 行)。undefined 表示尚未加载,cell 显示 '--'。 */ /** account_id → stats 缓存(wechat 行)。undefined 表示尚未加载,cell 显示 '--'。 */
const staffStats = ref<Record<string, StaffChatStats | undefined>>({}) const staffStats = ref<Record<string, StaffChatStats | undefined>>({})
// 单调递增 token:防止快速切换日期窗时旧 in-flight fetch(捕获旧窗)覆盖新结果。
let statsLoadToken = 0
async function loadWechatStats(rows: Account[]): Promise<void> { async function loadWechatStats(rows: Account[]): Promise<void> {
const myToken = ++statsLoadToken
const ids = rows.map((r) => r.account_id).filter(Boolean) const ids = rows.map((r) => r.account_id).filter(Boolean)
// 先清空当前批次缓存 → cell 显示 '--'(加载中),并防止旧窗 in-flight 写回覆盖新结果
for (const id of ids) staffStats.value[id] = undefined
await Promise.all( await Promise.all(
ids.map(async (id) => { ids.map(async (id) => {
try { try {
staffStats.value[id] = await getStaffChatStats({ const stats = await getStaffChatStats({
owner_account_id: id, owner_account_id: id,
start: statsStart.value, start: statsStart.value,
end: statsEnd.value, end: statsEnd.value,
}) })
if (myToken === statsLoadToken) staffStats.value[id] = stats
} catch { } catch {
staffStats.value[id] = undefined // 失败留空,cell 显示 '--' if (myToken === statsLoadToken) staffStats.value[id] = undefined // 失败留空,cell 显示 '--'
} }
}), }),
) )
@@ -111,7 +117,7 @@ function statNum(
function onStatsDateChange(): void { function onStatsDateChange(): void {
// 改日期 → 重查当前可见 wechat 行(覆盖其缓存条目)。 // 改日期 → 重查当前可见 wechat 行(覆盖其缓存条目)。
loadWechatStats(tabState.wechat.items) void loadWechatStats(tabState.wechat.items)
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------