From b9bd29a1a81f6f7de479e3cc3fdfe3d85fc660bf Mon Sep 17 00:00:00 2001 From: he wei <858544502@qq.com> Date: 星期三, 23 四月 2025 13:35:06 +0800 Subject: [PATCH] UA 整理提交 --- src/store/user.js | 194 +++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 174 insertions(+), 20 deletions(-) diff --git a/src/store/user.js b/src/store/user.js index 71283c0..92ef5a2 100644 --- a/src/store/user.js +++ b/src/store/user.js @@ -1,21 +1,175 @@ -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") - }; - }, - actions: { - setName(value) { - this.uname = value; - localStorage.setItem("uname", value); - }, - setId(value) { - this.uid = value; - localStorage.setItem("uid", value); - }, - }, - getters: {}, -})); +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() + }; + 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); + } + + 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 + } +}); -- Gitblit v1.9.1