diff --git a/apps/web/stores/useProductStore.ts b/apps/web/stores/useProductStore.ts index 646fc58..f24757f 100644 --- a/apps/web/stores/useProductStore.ts +++ b/apps/web/stores/useProductStore.ts @@ -102,18 +102,19 @@ export const useProductStore = create((set, get) => ({ fetchOverview: async () => { if (get().overview.length > 0) return; const cached = loadLocal(); - if (cached.length > 0) set({ overview: cached, loading: false }); - else set({ loading: true, error: null }); + if (cached.length > 0) { + // 有本地缓存,直接用,不再调远端覆盖(mock 模式核心数据在本地) + set({ overview: cached, loading: false }); + return; + } + set({ loading: true, error: null }); try { const overview = await api.get('/products/overview'); set({ overview, loading: false }); saveLocal(overview); } catch { - if (cached.length === 0) { - set({ overview: MOCK_OVERVIEW, error: null, loading: false }); - } else { - set({ loading: false }); - } + set({ overview: MOCK_OVERVIEW, error: null, loading: false }); + saveLocal(MOCK_OVERVIEW); } }, @@ -133,24 +134,22 @@ export const useProductStore = create((set, get) => ({ }, createProduct: async (data) => { - try { - await api.post('/products', data); - await get().fetchOverview(); - } catch { - const newProduct: ProductOverview = { - id: `local-${Date.now()}`, - name: data.name || '', - description: data.description || '', - createdAt: new Date().toISOString(), - updatedAt: new Date().toISOString(), - projects: [], - versions: [], - _count: { requirements: 0, projects: 0, versions: 0 }, - }; - const updated = [newProduct, ...get().overview]; - set({ overview: updated }); - saveLocal(updated); - } + // 直接本地新增(mock 模式核心,保留远端兼容但不依赖) + const newProduct: ProductOverview = { + id: `local-${Date.now()}`, + name: data.name || '', + description: data.description || '', + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + projects: [], + versions: [], + _count: { requirements: 0, projects: 0, versions: 0 }, + }; + const updated = [newProduct, ...get().overview]; + set({ overview: updated }); + saveLocal(updated); + // 异步尝试同步远端(失败也无所谓,本地已更新) + try { await api.post('/products', data); } catch {} }, updateProduct: async (id, data) => {