import { defineStore } from 'pinia'; import { login, QueyrUserInfo, QueyrRoutesList } from '../../apis/login'; import { kuky_Authorization, localST_UserInfo, localST_RoutesList } from '../storage'; /** * 当前登录的用户信息 */ export const useCurrentUserStore = defineStore('current_user', { persist: { enabled: true, // 可选:自定义存储的 key 和要持久化的路径 strategies: [ { key: 'info', storage: localStorage, paths: ['username'] // 只持久化 username 属性 } ] }, state: () => { return { name: 'Jack', token_type: '', token: kuky_Authorization.get(), username: '', nickname: '', dept: [], roles: [], permissions: [], user: {} }; }, actions: { updateName(name) { this.name = name; }, toLogin(data) { const { username, password } = data; return new Promise((resolve, reject) => { login({ username, password }) .then((res) => { if (res.code == 200 && res.data.access_token.length) { this.token = res.data.access_token; this.token_type = res.data.token_type; this.username = res.data.username; this.nickname = res.data.nickname; kuky_Authorization.set(res.data.access_token); resolve(res.msg); /** * 获取用户信息 * 暂时先在这里去调用,后续可以考虑放在路由拦截中去调用 */ this.getInfo(); } else { reject(res.msg); } }) .catch((err) => { reject(err); }); }); }, // 获取并且存储用户路由列表 async getRoutesList() { const { code, data: { routers } } = await QueyrRoutesList(); if (code === 200) { // 将 setItem 包装在一个 Promise 中并等待完成 return new Promise((resolve, reject) => { try { localST_RoutesList.setItem(JSON.stringify(routers)); resolve(); } catch (error) { reject(error); } }); } }, // 获取并且存储用户信息 async getUserInfo() { const { code, data: { permissions, dept, roles } } = await QueyrUserInfo(); if (code === 200) { return new Promise((resolve, reject) => { try { localST_UserInfo.setItem(JSON.stringify({ permissions, dept, roles })); resolve(); } catch (error) { reject(error); } }); } } } });