import { defineStore, storeToRefs } from "pinia";
|
import pinia from '@/utils/pinia';
|
import { ref } from "vue";
|
import { login as apiLogin, logout as apiLogout, getPermits } from '@/api/user';
|
import { getToken, removeToken, setToken, getUname, setUname, removeUname, getUrole, setUrole, removeUrole, getSessionId, setSessionId, removeSessionId } from '@/utils/auth';
|
import router, { resetRouter } from '@/router';
|
import { useTagsViewStore } from './tagsView';
|
import { usePermissionStore } from './permission';
|
console.log('pinia', pinia, '=============');
|
|
const tagsViewStore = useTagsViewStore(pinia);
|
const permissionStore = usePermissionStore(pinia);
|
const { delAllViews } = tagsViewStore;
|
const { generateRoutes } = permissionStore;
|
|
export const useUserStore = defineStore("user", () => {
|
const uid = ref(localStorage.getItem("uid"));
|
const uname = ref(localStorage.getItem("uname"));
|
const token = ref(getToken());
|
const urole = ref(getUrole());
|
const sessionid = ref(getSessionId());
|
const introduction = ref("");
|
const roles = ref([]);
|
const avatar = ref("");
|
let _permits = localStorage.getItem("permits");
|
const permits = ref(_permits ? JSON.parse(_permits) : []);
|
|
function updateSessionId(_sessionid) {
|
setSessionId(_sessionid);
|
sessionid.value = _sessionid;
|
}
|
|
function setPermits(_data) {
|
permits.value = Array.isArray(_data) ? _data : [];
|
localStorage.setItem('permits', JSON.stringify(_data));
|
}
|
|
function updatePermits() {
|
getPermits().then(res => {
|
setPermits(res.data2);
|
}).catch(error => {
|
console.log(error);
|
});
|
}
|
|
function login(userInfo) {
|
const { username, password } = userInfo;
|
return new Promise((resolve, reject) => {
|
apiLogin(username.trim(), password).then((response) => {
|
if (response.code === 1 && response.data) {
|
let name = response.data2.uname;
|
let role = response.data2.urole;
|
uname.value = name;
|
setUname(name);
|
let _token = 'someone';
|
debugger;
|
if (response.data2.uid && response.data2.uid <= 10000) {
|
_token = 'manager';
|
if (response.data2.uid <= 100) {
|
_token = 'admin';
|
}
|
}
|
token.value = _token;
|
setToken(_token);
|
urole.value = role;
|
setUrole(role);
|
resolve(response);
|
updatePermits();
|
} else {
|
// reject('用户名/密码错误');
|
reject(response.msg);
|
}
|
}).catch(error => {
|
reject(error);
|
});
|
});
|
}
|
|
function getInfo() {
|
return new Promise((resolve) => {
|
const data = {
|
// roles: ['admin'],
|
roles: [token.value],
|
introduction: 'I am a super administrator',
|
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
|
// name: 'Super Admin'
|
name: uname.value
|
};
|
const { roles: _roles, name, avatar: _avatar, introduction: _introduction } = data;
|
roles.value = _roles;
|
// uname.value = name;
|
avatar.value = _avatar;
|
introduction.value = _introduction;
|
|
resolve(data);
|
});
|
}
|
|
function logout() {
|
return new Promise((resolve, reject) => {
|
apiLogout().then(() => {
|
token.value = '';
|
roles.value = [];
|
removeToken();
|
removeUname();
|
removeUrole();
|
resetRouter();
|
|
// reset visited views and cached views
|
// to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
|
delAllViews();
|
|
resolve();
|
}).catch(error => {
|
reject(error);
|
});
|
});
|
}
|
|
function resetToken() {
|
token.value = '';
|
roles.value = [];
|
removeToken();
|
}
|
|
async function changeRoles(role) {
|
debugger;
|
const _token = role + '-token';
|
|
token.value = _token;
|
setToken(_token);
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
const infoRes = await getInfo();
|
let _roles = [];
|
if (infoRes.roles) {
|
_roles = infoRes.roles;
|
}
|
|
resetRouter();
|
|
// generate accessible routes map based on roles
|
console.log('debug', _roles, '=============');
|
|
const accessRoutes = await generateRoutes(_roles);
|
// dynamically add accessible routes
|
// router.addRoutes(accessRoutes);
|
accessRoutes.forEach(item => {
|
router.addRoute(item);
|
});
|
|
// reset visited views and cached views
|
delAllViews();
|
}
|
|
function setName(value) {
|
uname.value = value;
|
localStorage.setItem("uname", value);
|
}
|
|
function setId(value) {
|
uid.value = value;
|
localStorage.setItem("uid", value);
|
}
|
|
return {
|
uid,
|
uname,
|
permits,
|
token,
|
urole,
|
sessionid,
|
introduction,
|
roles,
|
avatar,
|
login,
|
logout,
|
getInfo,
|
resetToken,
|
changeRoles,
|
setName,
|
setId,
|
updateSessionId
|
}
|
});
|