feat:资源点使用实时更新

This commit is contained in:
Roe-xin
2026-02-25 10:14:00 +08:00
parent 0ea3afbe70
commit 1467ae8a89
4 changed files with 819 additions and 1 deletions

View File

@ -20,6 +20,7 @@ import { ChatHistoryManager } from "../utils/chatHistoryManager";
import { MessageType } from "../types/chatHistory";
import { getCachedUserInfo } from "../services/userService";
import { isTokenExpired } from "../utils/jwtUtils";
import { setBalanceUpdateCallback } from "../services/creditsService";
/**
* 获取会员等级图标 URI
@ -222,6 +223,26 @@ export async function showICHelperPanel(
console.error('[ICHelperPanel] 获取用户信息失败:', error);
}
// 设置余额更新回调
setBalanceUpdateCallback((balance: number) => {
const userInfo = getCachedUserInfo();
if (userInfo) {
userInfo.credits = balance;
const tierIconUrl = getTierIconUri(panel.webview, context, userInfo.membership?.tierCode);
panel.webview.postMessage({
command: 'updateUserInfo',
userInfo: {
userId: userInfo.userId,
nickname: userInfo.nickname,
username: userInfo.username,
credits: balance,
membership: userInfo.membership
},
tierIconUrl: tierIconUrl
});
}
});
// 检查是否有待发送的消息
const pendingMessage = context.globalState.get('pendingMessage') as any;
if (pendingMessage) {

View File

@ -25,6 +25,9 @@ const CACHE_TTL_MS = 5 * 60 * 1000;
/** ExtensionContext 用于持久化存储 */
let extensionContext: vscode.ExtensionContext | null = null;
/** 余额更新回调函数 */
let onBalanceUpdateCallback: ((balance: number) => void) | null = null;
/**
* 初始化 Credits 服务(设置 context
*/
@ -39,6 +42,13 @@ export function initCreditsService(context: vscode.ExtensionContext): void {
}
}
/**
* 设置余额更新回调
*/
export function setBalanceUpdateCallback(callback: (balance: number) => void): void {
onBalanceUpdateCallback = callback;
}
/**
* 保存余额到持久化存储
*/
@ -60,6 +70,10 @@ export function updateCachedBalance(balance: number): void {
saveBalance(balance).catch(err => {
console.error('[CreditsService] 保存余额失败:', err);
});
// 通知前端更新余额显示
if (onBalanceUpdateCallback) {
onBalanceUpdateCallback(balance);
}
}
/**

View File

@ -720,7 +720,7 @@ export function getPlanCardScript(): string {
segmentDiv.innerHTML = \`
<div class="plan-card">
<div class="plan-header">
<span class="plan-icon">📋</span>
<!-- <span class="plan-icon">📋</span> -->
<span class="plan-title">\${segment.planTitle || '执行计划'}</span>
</div>
\${progressHtml}