You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.9 KiB

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
let app_user_token = "app_user_token";
function getUserInfo(state) {
if (state.userInfo) return state.userInfo;
let userInfo = uni.getStorageSync(app_user_token);
if (userInfo) {
state.userInfo = JSON.parse(userInfo);
}
return state.userInfo;
}
const store = new Vuex.Store({
state: {
test: '',
permission: [],
userInfo: null
},
mutations: {
setCountInc(state, value) {
state.test = value;
},
setPermission(state, data) { //调用方式 this.$store.commit('setPermission', data)
if (!data || typeof data != 'object') return;
if (data instanceof Array) {
state.permission.push(...data);
} else {
state.permission = data;
}
},
setUserInfo(state, data) {
state.userInfo = data;
uni.setStorageSync(app_user_token, JSON.stringify(data));
},
clearUserInfo(state) {
state.permission = [];
state.userInfo = null;
uni.clearStorage(app_user_token);
},
},
actions: {
setPermission(context, data) {
context.commit('setPermission', data); //调用方式 store.dispatch('push')
},
},
getters: {
test(state, getters) {
return state.test
},
getPermission: (state) => (path) => { //调用方式 store.getters.getPermission('sys_User')
if (!path) return state.permission;
return state.permission.find(x => x.path == path);
},
getMenu: (state) => () => {
return state.permission || [];
},
getUserInfo: (state) => () => {
getUserInfo(state);
return state.userInfo;
},
getUserName: (state) => () => {
getUserInfo(state);
if (state.userInfo) {
return state.userInfo.userName;
}
return '';
},
getToken: (state) => () => {
getUserInfo(state);
if (state.userInfo) {
return 'Bearer ' + state.userInfo.token;
}
return '';
},
isLogin: (state) => () => {
if (getUserInfo(state)) {
return true;
}
return false;
}
}
})
export default store