import { defineStore } from 'pinia' export const useCollectionStore = defineStore('collection', { state: () => ({ // 福印列表 seals: [ { id: 'seal-1', name: '前门福', sceneId: 'qianmen', image: 'https://picsum.photos/id/100/100/100', description: '前门商圈的福印', collected: false }, { id: 'seal-2', name: '崇文福', sceneId: 'chongwen', image: 'https://picsum.photos/id/101/100/100', description: '崇文商圈的福印', collected: false }, { id: 'seal-3', name: '王府井福', sceneId: 'wangfujing', image: 'https://picsum.photos/id/102/100/100', description: '王府井商圈的福印', collected: false }, { id: 'seal-4', name: '隆福寺福', sceneId: 'longfusi', image: 'https://picsum.photos/id/103/100/100', description: '隆福寺商圈的福印', collected: false }, { id: 'seal-5', name: '东直门福', sceneId: 'dongzhimen', image: 'https://picsum.photos/id/104/100/100', description: '东直门商圈的福印', collected: false } ], // 收集时间记录 collectionHistory: [] }), getters: { // 获取已收集的福印数量 collectedCount: (state) => { return state.seals.filter(seal => seal.collected).length }, // 获取已收集的福印列表 collectedSeals: (state) => { return state.seals.filter(seal => seal.collected) }, // 获取未收集的福印列表 uncollectedSeals: (state) => { return state.seals.filter(seal => !seal.collected) }, // 检查福印是否已收集 isSealCollected: (state) => (sealId) => { return state.seals.some(seal => seal.id === sealId && seal.collected) }, // 检查场景福印是否已收集 isSceneSealCollected: (state) => (sceneId) => { return state.seals.some(seal => seal.sceneId === sceneId && seal.collected) }, // 获取收集进度百分比 getCollectionProgress: (state) => { const total = state.seals.length const collected = state.seals.filter(seal => seal.collected).length return Math.round((collected / total) * 100) }, // 检查是否收集了所有福印 isAllCollected: (state) => { return state.seals.every(seal => seal.collected) } }, actions: { // 收集福印 collectSeal(sealId) { const seal = this.seals.find(seal => seal.id === sealId) if (seal && !seal.collected) { seal.collected = true // 记录收集时间 this.collectionHistory.push({ sealId, timestamp: new Date().toISOString() }) return true } return false }, // 通过场景ID收集福印 collectSealBySceneId(sceneId) { const seal = this.seals.find(seal => seal.sceneId === sceneId) if (seal) { return this.collectSeal(seal.id) } return false }, // 取消收集福印 cancelCollectSeal(sealId) { const seal = this.seals.find(seal => seal.id === sealId) if (seal && seal.collected) { seal.collected = false // 移除收集记录 this.collectionHistory = this.collectionHistory.filter(item => item.sealId !== sealId) return true } return false }, // 重置收集状态 resetCollection() { this.seals.forEach(seal => { seal.collected = false }) this.collectionHistory = [] }, // 批量收集福印 collectMultipleSeals(sealIds) { const collectedIds = [] sealIds.forEach(sealId => { if (this.collectSeal(sealId)) { collectedIds.push(sealId) } }) return collectedIds }, // 获取福印详情 getSealById(sealId) { return this.seals.find(seal => seal.id === sealId) }, // 获取场景对应的福印 getSealBySceneId(sceneId) { return this.seals.find(seal => seal.sceneId === sceneId) } } })