alipay-emulator/store/index.js

137 lines
2.8 KiB
JavaScript

import { reactive, ref, watch } from 'vue';
import { storage } from '../utils/storage';
// 防抖函数
const debounce = (fn, delay = 300) => {
let timer = null
return function (...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this, args)
}, delay)
}
}
// 定义应用的全局状态
export const store = reactive({
// 用户信息
userInfo: storage.get('userInfo') || null,
// 应用设置
settings: storage.get('settings') || {
theme: 'light',
language: 'zh-CN',
notifications: true
},
// 系统信息(从缓存读取,避免重复调用)
systemInfo: uni.getStorageSync('systemInfo') || {
statusBarHeight: 0,
windowHeight: 0,
windowWidth: 0,
platform: ''
},
// 账单列表
billList: JSON.parse(JSON.stringify(storage.get('bill_list') || [])),
});
// 定义操作方法
export const useStore = () => {
// 用户相关操作
const setUserInfo = (userInfo) => {
store.userInfo = userInfo;
};
const clearUserInfo = () => {
store.userInfo = null;
};
// 设置相关操作
const updateSettings = (settings) => {
store.settings = { ...store.settings, ...settings };
};
// 账单相关操作
const addBill = (bill) => {
store.billList.unshift(bill);
return bill;
};
const updateBill = (id, updates) => {
const index = store.billList.findIndex(bill => bill.id === id);
if (index !== -1) {
store.billList[index] = { ...store.billList[index], ...updates };
return store.billList[index];
}
return null;
};
const deleteBill = (id) => {
const index = store.billList.findIndex(bill => bill.id === id);
if (index !== -1) {
store.billList.splice(index, 1);
return true;
}
return false;
};
const getBillList = () => {
return JSON.parse(JSON.stringify(store.billList))
}
// 优化后的监听:使用防抖减少存储频率
const debouncedSaveSettings = debounce((newValue) => {
storage.set('settings', newValue)
}, 500)
watch(
() => store.userInfo,
(newValue) => storage.set('userInfo', newValue),
{ deep: true }
);
watch(
() => store.settings,
(newValue) => debouncedSaveSettings(newValue),
{ deep: true }
);
// 监听billList改变自动保存
watch(
() => store.billList,
(newValue) => {
console.log("store.billList")
storage.set('bill_list', newValue)
},
{ deep: true }
);
// 获取系统信息(从缓存读取)
const getSystemInfo = () => {
const cachedInfo = uni.getStorageSync('systemInfo')
if (cachedInfo) {
store.systemInfo = cachedInfo
}
};
return {
store,
setUserInfo,
clearUserInfo,
updateSettings,
addBill,
updateBill,
deleteBill,
getBillList,
getSystemInfo
};
};