export const useItemsStore = defineStore('items', () => { const list = ref([]); const total = ref(0); const page = ref(1); const hasMore = ref(false); const loading = ref(false); const initialLoad = ref(true); const ui = useUIStore(); async function fetchItems() { loading.value = true; try { const params: Record = { page: String(page.value), limit: '20', }; if (ui.filterType !== 'all') { if (ui.filterType === 'starred') params.starred = 'true'; else params.type = ui.filterType; } if (ui.currentCategoryId) params.categoryId = String(ui.currentCategoryId); if (ui.currentView === 'inbox') params.categoryId = 'inbox'; if (ui.searchQuery) params.q = ui.searchQuery; const res = await $fetch('/api/items', { params }); if (res.code === 0) { list.value = res.data.data; total.value = res.data.total; hasMore.value = res.data.hasMore; } } finally { loading.value = false; initialLoad.value = false; } } async function loadMore() { if (!hasMore.value || loading.value) return; page.value++; loading.value = true; try { const params: Record = { page: String(page.value), limit: '20', }; if (ui.filterType !== 'all') { if (ui.filterType === 'starred') params.starred = 'true'; else params.type = ui.filterType; } if (ui.currentCategoryId) params.categoryId = String(ui.currentCategoryId); if (ui.currentView === 'inbox') params.categoryId = 'inbox'; if (ui.searchQuery) params.q = ui.searchQuery; const res = await $fetch('/api/items', { params }); if (res.code === 0) { list.value.push(...res.data.data); total.value = res.data.total; hasMore.value = res.data.hasMore; } } finally { loading.value = false; } } async function createItem(data: any) { const res = await $fetch('/api/items', { method: 'POST', body: data, }); if (res.code === 0) { list.value.unshift(res.data); total.value++; ui.showToast('✅ 收藏已保存'); } return res; } async function toggleStar(id: number) { const item = list.value.find(i => i.id === id); if (!item) return; const newStarred = !item.starred; await $fetch(`/api/items/${id}`, { method: 'PATCH', body: { starred: newStarred }, }); item.starred = newStarred; ui.showToast(newStarred ? '已加入星标' : '已移除星标'); } async function deleteItem(id: number) { await $fetch(`/api/items/${id}`, { method: 'DELETE' }); list.value = list.value.filter(i => i.id !== id); total.value--; ui.closeDetail(); ui.showToast('已删除'); } return { list, total, page, hasMore, loading, initialLoad, fetchItems, loadMore, createItem, toggleStar, deleteItem }; });