193 lines
6.1 KiB
TypeScript
193 lines
6.1 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { IPrizeConfig } from '@/types/storeType';
|
|
import { defaultPrizeList } from './data';
|
|
export const usePrizeConfig = defineStore('prize', {
|
|
state() {
|
|
return {
|
|
prizeConfig: {
|
|
prizeList: defaultPrizeList,
|
|
currentPrize: {
|
|
id: '001',
|
|
name: '三等奖',
|
|
sort: 1,
|
|
isAll: false,
|
|
count: 12,
|
|
isUsedCount: 0,
|
|
picture: {
|
|
id: '2',
|
|
name: '三等奖',
|
|
url: 'https://24years.top/resource/image/image3.png'
|
|
},
|
|
separateCount: {
|
|
enable: true,
|
|
countList: []
|
|
},
|
|
desc: '三等奖',
|
|
isShow: true,
|
|
isUsed: false,
|
|
frequency: 1,
|
|
} as IPrizeConfig,
|
|
temporaryPrize: {
|
|
id: '',
|
|
name: '',
|
|
sort: 0,
|
|
isAll: false,
|
|
count: 1,
|
|
isUsedCount: 0,
|
|
picture: {
|
|
id: '-1',
|
|
name: '',
|
|
url: ''
|
|
},
|
|
separateCount: {
|
|
enable: true,
|
|
countList: []
|
|
},
|
|
desc: '',
|
|
isShow: false,
|
|
isUsed: false,
|
|
frequency: 1,
|
|
} as IPrizeConfig
|
|
}
|
|
};
|
|
},
|
|
getters: {
|
|
// 获取全部配置
|
|
getPrizeConfigAll(state) {
|
|
return state.prizeConfig;
|
|
},
|
|
// 获取奖品列表
|
|
getPrizeConfig(state) {
|
|
return state.prizeConfig.prizeList;
|
|
},
|
|
// 根据id获取配置
|
|
getPrizeConfigById(state) {
|
|
return (id: number | string) => {
|
|
return state.prizeConfig.prizeList.find(item => item.id === id);
|
|
}
|
|
},
|
|
// 获取当前奖项
|
|
getCurrentPrize(state) {
|
|
return state.prizeConfig.currentPrize;
|
|
},
|
|
// 获取临时的奖项
|
|
getTemporaryPrize(state) {
|
|
return state.prizeConfig.temporaryPrize;
|
|
},
|
|
|
|
},
|
|
actions: {
|
|
// 设置奖项
|
|
setPrizeConfig(prizeList: IPrizeConfig[]) {
|
|
this.prizeConfig.prizeList = prizeList;
|
|
},
|
|
// 添加奖项
|
|
addPrizeConfig(prizeConfigItem: IPrizeConfig) {
|
|
this.prizeConfig.prizeList.push(prizeConfigItem);
|
|
},
|
|
// 删除奖项
|
|
deletePrizeConfig(prizeConfigItemId: number | string) {
|
|
this.prizeConfig.prizeList = this.prizeConfig.prizeList.filter(item => item.id !== prizeConfigItemId);
|
|
},
|
|
// 更新奖项数据
|
|
updatePrizeConfig(prizeConfigItem: IPrizeConfig) {
|
|
const prizeListLength = this.prizeConfig.prizeList.length;
|
|
if (prizeConfigItem.isUsed && prizeListLength) {
|
|
for (let i = 0; i < prizeListLength; i++) {
|
|
if (!this.prizeConfig.prizeList[i].isUsed) {
|
|
this.setCurrentPrize(this.prizeConfig.prizeList[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
return
|
|
}
|
|
this.resetTemporaryPrize()
|
|
},
|
|
// 删除全部奖项
|
|
deleteAllPrizeConfig() {
|
|
this.prizeConfig.prizeList = [] as IPrizeConfig[];
|
|
},
|
|
// 设置当前奖项
|
|
setCurrentPrize(prizeConfigItem: IPrizeConfig) {
|
|
this.prizeConfig.currentPrize = prizeConfigItem
|
|
},
|
|
// 设置临时奖项
|
|
setTemporaryPrize(prizeItem: IPrizeConfig) {
|
|
if (prizeItem.isShow == false) {
|
|
for (let i = 0; i < this.prizeConfig.prizeList.length; i++) {
|
|
if (this.prizeConfig.prizeList[i].isUsed == false) {
|
|
this.setCurrentPrize(this.prizeConfig.prizeList[i]);
|
|
|
|
break
|
|
}
|
|
}
|
|
this.resetTemporaryPrize()
|
|
|
|
return
|
|
}
|
|
|
|
this.prizeConfig.temporaryPrize = prizeItem
|
|
},
|
|
// 重置临时奖项
|
|
resetTemporaryPrize() {
|
|
this.prizeConfig.temporaryPrize = {
|
|
id: '',
|
|
name: '',
|
|
sort: 0,
|
|
isAll: false,
|
|
count: 1,
|
|
isUsedCount: 0,
|
|
picture: {
|
|
id: '-1',
|
|
name: '',
|
|
url: ''
|
|
},
|
|
desc: '',
|
|
isShow: false,
|
|
isUsed: false,
|
|
frequency: 1,
|
|
} as IPrizeConfig;
|
|
},
|
|
// 重置所有配置
|
|
resetDefault() {
|
|
this.prizeConfig = {
|
|
prizeList: defaultPrizeList,
|
|
currentPrize: {
|
|
id: '001',
|
|
name: '三等奖',
|
|
sort: 1,
|
|
isAll: false,
|
|
count: 12,
|
|
isUsedCount: 0,
|
|
picture: {
|
|
id: '2',
|
|
name: '三等奖',
|
|
url: 'https://24years.top/resource/image/image3.png'
|
|
},
|
|
separateCount: {
|
|
enable: true,
|
|
countList: []
|
|
},
|
|
desc: '三等奖',
|
|
isShow: true,
|
|
isUsed: false,
|
|
frequency: 1,
|
|
} as IPrizeConfig,
|
|
temporaryPrize: {} as IPrizeConfig
|
|
}
|
|
}
|
|
},
|
|
persist: {
|
|
enabled: true,
|
|
strategies: [
|
|
{
|
|
// 如果要存储在localStorage中
|
|
storage: localStorage,
|
|
key: 'prizeConfig',
|
|
},
|
|
],
|
|
},
|
|
});
|