From e7e3e2bb4783cc0a516ea7834bd1e424bc5f0b86 Mon Sep 17 00:00:00 2001 From: MikiVL Date: Mon, 27 Jul 2026 21:23:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=99=BB=E5=BD=95=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=97=B6=E4=BB=A5=E8=BF=9C=E7=AB=AF=E6=95=B0=E6=8D=AE=E4=B8=BA?= =?UTF-8?q?=E5=87=86=EF=BC=8C=E9=81=BF=E5=85=8D=E7=A7=8D=E5=AD=90=E7=AC=94?= =?UTF-8?q?=E8=AE=B0=E6=B1=A1=E6=9F=93=E4=BA=91=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 远端有数据时直接覆盖本地,不再合并本地 IndexedDB 种子数据; 仅远端为空(首次激活云同步)时才上传本地数据。 Co-Authored-By: Claude Sonnet 4.6 --- src/stores/appStore.ts | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/stores/appStore.ts b/src/stores/appStore.ts index e1d7d59..8a29a78 100644 --- a/src/stores/appStore.ts +++ b/src/stores/appStore.ts @@ -2,7 +2,7 @@ import { create } from 'zustand' import { db, type Note, type Folder } from '../db' import { generateId, extractTextFromJSON } from '../lib/utils' import { getToken, clearToken, parseToken, apiGetMe, type CurrentUser } from '../lib/auth' -import { pullAll, pushAll, pushNote, pushFolder, pushDeleteNote, pushDeleteFolder, mergeNotes, mergeFolders } from '../lib/sync' +import { pullAll, pushAll, pushNote, pushFolder, pushDeleteNote, pushDeleteFolder } from '../lib/sync' interface AppState { notes: Note[] @@ -285,12 +285,21 @@ export const useAppStore = create((set, get) => ({ set({ syncStatus: 'syncing' }) try { const remote = await pullAll() - const mergedNotes = mergeNotes(notes, remote.notes) - const mergedFolders = mergeFolders(folders, remote.folders) - await Promise.all(mergedNotes.map((n: any) => db.notes.put(n))) - await Promise.all(mergedFolders.map((f: any) => db.folders.put(f))) - await pushAll({ notes: mergedNotes, folders: mergedFolders }) - set({ notes: mergedNotes, folders: mergedFolders, syncStatus: 'idle', _notesVersion: get()._notesVersion + 1, _filteredCache: null }) + // 远端有数据时以远端为准,避免本地种子数据污染云端 + // 只有远端完全为空(首次激活)才把本地数据上传 + if (remote.notes.length > 0 || remote.folders.length > 0) { + await db.notes.clear() + await db.folders.clear() + await Promise.all(remote.notes.map((n: any) => db.notes.put({ ...n, tags: Array.isArray(n.tags) ? n.tags : JSON.parse(n.tags as any) }))) + await Promise.all(remote.folders.map((f: any) => db.folders.put(f))) + set({ notes: remote.notes.map((n: any) => ({ ...n, tags: Array.isArray(n.tags) ? n.tags : JSON.parse(n.tags as any) })), folders: remote.folders, syncStatus: 'idle', _notesVersion: get()._notesVersion + 1, _filteredCache: null }) + } else { + // 远端为空:首次激活,把本地数据推上去 + const localNotes = notes.filter(n => n.deletedAt === null) + const localFolders = folders + await pushAll({ notes: localNotes, folders: localFolders }) + set({ syncStatus: 'idle' }) + } } catch { set({ syncStatus: 'error' }) }