fix(web,plugin): 前端审计修复 — 401 消除 + 统计卡片 crash + 销售漏斗 500 + antd 6 废弃 API
- API client: proactive token refresh(请求前 30s 检查过期,提前刷新避免 401) - Plugin store: fetchPlugins promise 去重,防止 StrictMode 并发重复请求 - Home stats: 简化 useEffect 加载逻辑,修复 tagColor undefined crash - PluginGraphPage: valueStyle → styles.content, Spin tip → description(antd 6) - DashboardWidgets: trailColor → railColor(antd 6) - data_service: build_scope_sql 参数索引修复(硬编码 $100 → 动态 values.len()+1) - erp-core error: Internal 错误添加 tracing::error 日志输出
This commit is contained in:
@@ -27,6 +27,9 @@ interface PluginStore {
|
||||
refreshMenuItems: () => void;
|
||||
}
|
||||
|
||||
// 请求去重:防止并发重复调用 fetchPlugins
|
||||
let fetchPluginsPromise: Promise<void> | null = null;
|
||||
|
||||
export const usePluginStore = create<PluginStore>((set, get) => ({
|
||||
plugins: [],
|
||||
loading: false,
|
||||
@@ -35,10 +38,16 @@ export const usePluginStore = create<PluginStore>((set, get) => ({
|
||||
schemaCache: {},
|
||||
|
||||
fetchPlugins: async (page = 1, status?: PluginStatus) => {
|
||||
set({ loading: true });
|
||||
try {
|
||||
const result = await listPlugins(page, 100, status);
|
||||
set({ plugins: result.data });
|
||||
// 如果已有进行中的请求,复用该 Promise
|
||||
if (fetchPluginsPromise) {
|
||||
await fetchPluginsPromise;
|
||||
return;
|
||||
}
|
||||
fetchPluginsPromise = (async () => {
|
||||
set({ loading: true });
|
||||
try {
|
||||
const result = await listPlugins(page, 100, status);
|
||||
set({ plugins: result.data });
|
||||
|
||||
// 先基于 entities 生成回退菜单,确保侧边栏快速渲染
|
||||
get().refreshMenuItems();
|
||||
@@ -68,9 +77,12 @@ export const usePluginStore = create<PluginStore>((set, get) => ({
|
||||
}
|
||||
set({ schemaCache: schemas });
|
||||
get().refreshMenuItems();
|
||||
} finally {
|
||||
set({ loading: false });
|
||||
}
|
||||
} finally {
|
||||
set({ loading: false });
|
||||
fetchPluginsPromise = null;
|
||||
}
|
||||
})();
|
||||
await fetchPluginsPromise;
|
||||
},
|
||||
|
||||
refreshMenuItems: () => {
|
||||
|
||||
Reference in New Issue
Block a user