主要通过taro的getStorageSync,setStorageSync
实现配置持久化
// https://pinia.esm.dev/introduction.html
import { defineStore } from 'pinia';
import { CreditCardDateUtils } from '@/untils/compute';
import { getStorageSync, setStorageSync } from "@tarojs/taro";
interface dataType {
id: string,
name: string,
statementDay: number,//出账日
dueDay: number,//还款日
dueDate?: string,//还款日
freeDay?: number,//免息天数
currentFreeDay: number,//剩余免息天数
isCurrentCycle: boolean,//是否本周期
}
export const useCardStore = defineStore('card', {
state: () => {
return {
_cardData: <dataType[]>[],
};
},
getters: {
getCardInfo: state => {
return (id: string) => state._cardData.find((item) => (item.id === id));
},
getCardDataList: state => {
return () => state._cardData;
},
getIndexCardDataList: state => {
const dataList = state._cardData.map((item) => {
const creditCardUtils = new CreditCardDateUtils(Number(item.statementDay), Number(item.dueDay));
item.freeDay = creditCardUtils.calculateMonthlyGracePeriod();
item.currentFreeDay = creditCardUtils.calculateGracePeriodDays();
const { dueDate, isCurrentCycle } = creditCardUtils.getCreditCardDueDate();
item.dueDate = dueDate.toLocaleDateString();
item.isCurrentCycle = isCurrentCycle;
return item;
}).sort((a, b) => {
// 1. 当前周期的卡片优先
if (a.isCurrentCycle && !b.isCurrentCycle) return -1;
if (!a.isCurrentCycle && b.isCurrentCycle) return 1;
// 2. 同一周期内按剩余免息天数降序排列
return b.currentFreeDay - a.currentFreeDay;
});
console.log(dataList, 'dataList')
return () => dataList;
}
},
actions: {
delCardData(id: string) {
this._cardData = this._cardData.filter((item) => item.id !== id);
console.log(id);
console.log(this._cardData);
},
setCardData(cardData: dataType) {
const index = this._cardData.findIndex((item: dataType) => item.id == cardData.id);
console.log(this._cardData, 'this._cardData');
console.log(cardData, 'cardData');
console.log(index, 'index');
if (index <= -1) {
this._cardData.push(cardData);
} else {
this._cardData[index] = cardData;
}
},
},
// persist: true,
// 配置持久化
persist: {
// 调整为兼容多端的API
storage: {
setItem(key, value) {
setStorageSync(key, value) // [!code warning]
},
getItem(key) {
return getStorageSync(key) // [!code warning]
}
},
}
})