158 lines
4.1 KiB
JavaScript
158 lines
4.1 KiB
JavaScript
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)
|
|
}
|
|
}
|
|
})
|