// 简单的 IndexedDB 封装 const DB_NAME = 'SpreadsheetDB' const STORE_NAME = 'sheets' const DB_VERSION = 1 const openDB = () => { return new Promise((resolve, reject) => { const request = indexedDB.open(DB_NAME, DB_VERSION) request.onupgradeneeded = (event) => { const db = event.target.result if (!db.objectStoreNames.contains(STORE_NAME)) { db.createObjectStore(STORE_NAME) } } request.onsuccess = () => resolve(request.result) request.onerror = () => reject(request.error) }) } export const db = { async get(key) { const db = await openDB() return new Promise((resolve, reject) => { const transaction = db.transaction(STORE_NAME, 'readonly') const store = transaction.objectStore(STORE_NAME) const request = store.get(key) request.onsuccess = () => resolve(request.result) request.onerror = () => reject(request.error) }) }, async set(key, value) { const db = await openDB() return new Promise((resolve, reject) => { const transaction = db.transaction(STORE_NAME, 'readwrite') const store = transaction.objectStore(STORE_NAME) // 使用 JSON.parse(JSON.stringify()) 去除 Proxy 对象,确保存储的是纯数据 const rawValue = JSON.parse(JSON.stringify(value)) const request = store.put(rawValue, key) request.onsuccess = () => resolve() request.onerror = () => reject(request.error) }) } }