// src/stores/memory.ts import { defineStore } from 'pinia' import { ref, computed } from 'vue' import type { Memory } from '@/types' import { listMemories, uploadMemory, deleteMemory, getGroupStorageUsed, getGroupStorageLimit } from '@/api/memories' export const useMemoryStore = defineStore('memory', () => { const memories = ref([]) const storageUsed = ref(0) const storageLimit = ref(getGroupStorageLimit()) const loading = ref(false) // 计算属性:已用/总容量百分比 const storagePercent = computed(() => { if (storageLimit.value === 0) return 0 return Math.round((storageUsed.value / storageLimit.value) * 10000) / 100 }) // 加载记忆列表 async function loadMemories(groupId: string, fileType?: string) { try { loading.value = true const result = await listMemories(groupId, { fileType }) memories.value = result.items // 同时刷新存储用量 storageUsed.value = await getGroupStorageUsed(groupId) } catch (error) { console.error('加载记忆列表失败:', error) } finally { loading.value = false } } // 上传记忆文件 async function upload(groupId: string, file: File, meta?: { title?: string; description?: string; tags?: string[] }) { try { loading.value = true await uploadMemory(groupId, file, meta) // 上传后刷新列表和容量 await loadMemories(groupId) } catch (error) { console.error('上传记忆失败:', error) throw error } finally { loading.value = false } } // 删除记忆 async function remove(memoryId: string, groupId: string) { try { await deleteMemory(memoryId) // 从本地列表中移除 const index = memories.value.findIndex(m => m.id === memoryId) if (index !== -1) { memories.value.splice(index, 1) } // 刷新容量 storageUsed.value = await getGroupStorageUsed(groupId) } catch (error) { console.error('删除记忆失败:', error) throw error } } return { memories, storageUsed, storageLimit, loading, storagePercent, loadMemories, upload, remove } })