初始化项目

This commit is contained in:
2026-02-08 22:38:13 +08:00
commit 334d2c6312
201 changed files with 32724 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
import { ref } from 'vue'
import { defineStore } from 'pinia'
import { resetRouter } from '../../router'
import { customStorage } from '../persist'
import userRoutes from '@/config/routes'
export const useUserStore = defineStore(
'user',
() => {
const token = ref('')
const refreshToken = ref('')
const userInfo = ref(null)
const menu = ref([])
const permissions = ref([])
// 设置 token
function setToken(newToken) {
token.value = newToken
}
// 设置 refresh token
function setRefreshToken(newRefreshToken) {
refreshToken.value = newRefreshToken
}
// 设置用户信息
function setUserInfo(info) {
userInfo.value = info
}
// 设置菜单
function setMenu(newMenu) {
const staticMenus = userRoutes || []
// 合并静态菜单和后端菜单
// 如果后端菜单为空,只使用静态菜单
// 如果后端菜单不为空,合并两个菜单,后端菜单优先
let mergedMenus = [...staticMenus]
if (newMenu && newMenu.length > 0) {
// 创建菜单映射,用于去重(以路径为唯一标识)
const menuMap = new Map()
// 先添加静态菜单
staticMenus.forEach(menu => {
if (menu.path) {
menuMap.set(menu.path, menu)
}
})
// 添加后端菜单,如果路径重复则覆盖
newMenu.forEach(menu => {
if (menu.path) {
menuMap.set(menu.path, menu)
}
})
// 转换为数组
mergedMenus = Array.from(menuMap.values())
}
menu.value = mergedMenus
}
// 获取菜单
function getMenu() {
return menu.value
}
// 清除菜单
function clearMenu() {
menu.value = []
}
// 设置权限
function setPermissions(data){
permissions.value = data
}
// 登出
function logout() {
token.value = ''
refreshToken.value = ''
userInfo.value = null
menu.value = []
// 重置路由
resetRouter()
}
// 检查是否已登录
function isLoggedIn() {
return !!token.value
}
return {
token,
refreshToken,
userInfo,
menu,
setToken,
setRefreshToken,
setUserInfo,
setMenu,
getMenu,
clearMenu,
setPermissions,
logout,
isLoggedIn,
}
},
{
persist: {
key: 'user-store',
storage: customStorage,
pick: ['token', 'refreshToken', 'userInfo', 'menu']
}
}
)