JuHua-app/store/index.js

78 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

2024-12-09 14:16:57 +08:00
import Vue from 'vue';
import Vuex from 'vuex';
import permission from '@/store/modules/permission';
Vue.use(Vuex);
// 需要永久存储且下次APP启动需要取出的在state中的变量名
let saveStateKeys = ['vuex_token', 'profile'];
// 保存变量到本地存储中
const saveLifeData = function (key, value) {
// 判断变量名是否在需要存储的数组中
if (saveStateKeys.indexOf(key) != -1) {
// 获取本地存储的lifeData对象将变量添加到对象中
let tmp = uni.getStorageSync('lifeData');
// 第一次打开APP不存在lifeData变量故放一个{}空对象
tmp = tmp ? tmp : {};
tmp[key] = value;
// 执行这一步后所有需要存储的变量都挂载在本地的lifeData对象中
uni.setStorageSync('lifeData', tmp);
}
}
const store = new Vuex.Store({
modules: {
permission,
},
state: {
vuex_token: 'token',
profile: {},
},
getters: {
},
mutations: {
$uStore (state, payload) {
// 判断是否多层级调用state中为对象存在的情况诸如user.info.score = 1
let nameArr = payload.name.split('.');
let saveKey = '';
let len = nameArr.length;
if (len >= 2) {
let obj = state[nameArr[0]];
for (let i = 1; i < len - 1; i++) {
obj = obj[nameArr[i]];
}
obj[nameArr[len - 1]] = payload.value;
saveKey = nameArr[0];
} else {
// 单层级变量在state就是一个普通变量的情况
state[payload.name] = payload.value;
saveKey = payload.name;
}
// 保存变量到本地,见顶部函数定义
saveLifeData(saveKey, state[saveKey])
},
},
actions: {
},
})
// 从缓存中取得相同的key进行覆盖操作
let lifeData = uni.getStorageSync('lifeData') || {};
for (let key in lifeData) {
if (store.state.hasOwnProperty(key)) {
store.commit('$uStore', {
name: key,
value: lifeData[key]
})
}
}
export default store;