格式化代码,websocket功能完善
This commit is contained in:
@@ -1,93 +1,93 @@
|
||||
import { ref } from 'vue'
|
||||
import { defineStore } from 'pinia'
|
||||
import { resetRouter } from '../../router'
|
||||
import { customStorage } from '../persist'
|
||||
import userRoutes from '@/config/routes'
|
||||
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',
|
||||
export const useUserStore = defineStore(
|
||||
"user",
|
||||
() => {
|
||||
const token = ref('')
|
||||
const userInfo = ref(null)
|
||||
const menu = ref([])
|
||||
const permissions = ref([])
|
||||
const token = ref("");
|
||||
const userInfo = ref(null);
|
||||
const menu = ref([]);
|
||||
const permissions = ref([]);
|
||||
|
||||
// 设置 token
|
||||
function setToken(newToken) {
|
||||
token.value = newToken
|
||||
token.value = newToken;
|
||||
}
|
||||
|
||||
// 设置用户信息
|
||||
function setUserInfo(info) {
|
||||
userInfo.value = info
|
||||
userInfo.value = info;
|
||||
}
|
||||
|
||||
// 设置菜单
|
||||
function setMenu(newMenu) {
|
||||
const staticMenus = userRoutes || []
|
||||
const staticMenus = userRoutes || [];
|
||||
|
||||
// 合并静态菜单和后端菜单
|
||||
// 如果后端菜单为空,只使用静态菜单
|
||||
// 如果后端菜单不为空,合并两个菜单,后端菜单优先
|
||||
let mergedMenus = [...staticMenus]
|
||||
let mergedMenus = [...staticMenus];
|
||||
|
||||
if (newMenu && newMenu.length > 0) {
|
||||
// 创建菜单映射,用于去重(以路径为唯一标识)
|
||||
const menuMap = new Map()
|
||||
const menuMap = new Map();
|
||||
|
||||
// 先添加静态菜单
|
||||
staticMenus.forEach(menu => {
|
||||
staticMenus.forEach((menu) => {
|
||||
if (menu.path) {
|
||||
menuMap.set(menu.path, menu)
|
||||
menuMap.set(menu.path, menu);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
// 添加后端菜单,如果路径重复则覆盖
|
||||
newMenu.forEach(menu => {
|
||||
newMenu.forEach((menu) => {
|
||||
if (menu.path) {
|
||||
menuMap.set(menu.path, menu)
|
||||
menuMap.set(menu.path, menu);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
// 转换为数组
|
||||
mergedMenus = Array.from(menuMap.values())
|
||||
mergedMenus = Array.from(menuMap.values());
|
||||
}
|
||||
menu.value = mergedMenus
|
||||
menu.value = mergedMenus;
|
||||
}
|
||||
|
||||
// 获取菜单
|
||||
function getMenu() {
|
||||
return menu.value
|
||||
return menu.value;
|
||||
}
|
||||
|
||||
// 清除菜单
|
||||
function clearMenu() {
|
||||
menu.value = []
|
||||
menu.value = [];
|
||||
}
|
||||
|
||||
// 设置权限
|
||||
function setPermissions(data){
|
||||
permissions.value = data
|
||||
function setPermissions(data) {
|
||||
permissions.value = data;
|
||||
}
|
||||
|
||||
// 登出
|
||||
function logout() {
|
||||
token.value = ''
|
||||
userInfo.value = null
|
||||
menu.value = []
|
||||
token.value = "";
|
||||
userInfo.value = null;
|
||||
menu.value = [];
|
||||
|
||||
// 重置路由
|
||||
resetRouter()
|
||||
resetRouter();
|
||||
}
|
||||
|
||||
// 检查是否已登录
|
||||
function isLoggedIn() {
|
||||
return !!token.value
|
||||
return !!token.value;
|
||||
}
|
||||
|
||||
// 检查用户信息是否完整(用于 WebSocket 初始化)
|
||||
function isUserInfoComplete() {
|
||||
return !!(token.value && userInfo.value && userInfo.value.id)
|
||||
return !!(token.value && userInfo.value && userInfo.value.id);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -103,13 +103,13 @@ import userRoutes from '@/config/routes'
|
||||
logout,
|
||||
isLoggedIn,
|
||||
isUserInfoComplete,
|
||||
}
|
||||
};
|
||||
},
|
||||
{
|
||||
persist: {
|
||||
key: 'user-store',
|
||||
key: "user-store",
|
||||
storage: customStorage,
|
||||
pick: ['token', 'userInfo', 'menu']
|
||||
}
|
||||
}
|
||||
)
|
||||
pick: ["token", "userInfo", "menu"],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user