diff --git a/.workbuddy/expert-history.json b/.workbuddy/expert-history.json index d295549..0a9d4d5 100644 --- a/.workbuddy/expert-history.json +++ b/.workbuddy/expert-history.json @@ -13,5 +13,5 @@ } ] }, - "lastUpdated": 1776136244169 + "lastUpdated": 1776140518763 } \ No newline at end of file diff --git a/frontend/ops_vue_js/src/stores/users.js b/frontend/ops_vue_js/src/stores/users.js index 6ef79f8..a100a27 100644 --- a/frontend/ops_vue_js/src/stores/users.js +++ b/frontend/ops_vue_js/src/stores/users.js @@ -4,23 +4,37 @@ import { defineStore } from 'pinia' import { ref } from 'vue' import { usersApi } from '@/api/users'; -export const useUsersStore = defineStore('users', () => { - const usersInfo =ref([]); +const usersInfo = ref([]); +// 正在请求中的 userID 集合,避免重复发请求 +const pendingFetch = new Set(); - function getUserFromUserID(userID){ +export const useUsersStore = defineStore('users', () => { + + function getUserFromUserID(userID) { return usersInfo.value?.find(item => item.UserID === userID) ?? null } - function getUsernameFromUserID(userID){ + function fetchUser(userID) { + if (pendingFetch.has(userID)) return + pendingFetch.add(userID) + usersApi.getUserInfoFromUserID(userID).then((r) => { + if (r.errCode == 0 && r.raw.err_code == 0 && r.raw.return?.userinfo) { + // 防止并发写入重复数据 + if (!usersInfo.value.find(item => item.UserID === userID)) { + usersInfo.value.push(r.raw.return.userinfo) + } + } + }).finally(() => { + pendingFetch.delete(userID) + }) + } + + function getUsernameFromUserID(userID) { const target = getUserFromUserID(userID) if (target) { return target.Username } - usersApi.getUserInfoFromUserID(userID).then((r) => { - if (r.errCode == 0 && r.raw.err_code == 0 && r.raw.return.userinfo) { - usersInfo.value.push(r.raw.return.userinfo) - } - }) + fetchUser(userID) return "..." } @@ -29,11 +43,13 @@ export const useUsersStore = defineStore('users', () => { if (target?.AvatarPath) { return `/api/static/avatar/${target.AvatarPath}` } + // 触发加载(如果还没加载过) + fetchUser(userID) return `/ava.svg` } - return{ - usersInfo,getUsernameFromUserID,getAvatarUrlFromUserID, + return { + usersInfo, getUsernameFromUserID, getAvatarUrlFromUserID, } -}) \ No newline at end of file +})