| | |
| | | import { defineStore } from "pinia"; |
| | | 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, '============='); |
| | | |
| | | export const useUserStore = defineStore("user", () => ({ |
| | | state() { |
| | | return { |
| | | uid: localStorage.getItem("uid"), |
| | | uname: localStorage.getItem("uname") |
| | | 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); |
| | | token.value = 'admin'; |
| | | setToken('admin'); |
| | | 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'], |
| | | introduction: 'I am a super administrator', |
| | | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
| | | // name: 'Super Admin' |
| | | name: getUname() |
| | | }; |
| | | }, |
| | | actions: { |
| | | setName(value) { |
| | | this.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) { |
| | | 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); |
| | | }, |
| | | setId(value) { |
| | | this.uid = value; |
| | | } |
| | | |
| | | function setId(value) { |
| | | uid.value = value; |
| | | localStorage.setItem("uid", value); |
| | | }, |
| | | }, |
| | | getters: {}, |
| | | })); |
| | | } |
| | | |
| | | return { |
| | | uid, |
| | | uname, |
| | | permits, |
| | | token, |
| | | urole, |
| | | sessionid, |
| | | introduction, |
| | | roles, |
| | | avatar, |
| | | login, |
| | | logout, |
| | | getInfo, |
| | | resetToken, |
| | | changeRoles, |
| | | setName, |
| | | setId, |
| | | updateSessionId |
| | | } |
| | | }); |