qs_xinchun2026_h5/store/collection.js

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)
}
}
})