项目列表完整功能
This commit is contained in:
@ -1,9 +1,10 @@
|
||||
import { to } from 'await-to-js';
|
||||
import { getToken, removeToken, setToken } from '@/utils/auth';
|
||||
import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '@/api/login';
|
||||
import { LoginData } from '@/api/types';
|
||||
import { login as loginApi, logout as logoutApi, getInfo as getUserInfo, getUserProject } from '@/api/login';
|
||||
import { LoginData, UserProject } from '@/api/types';
|
||||
import defAva from '@/assets/images/profile.jpg';
|
||||
import store from '@/store';
|
||||
import { defineStore } from 'pinia';
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
const token = ref(getToken());
|
||||
@ -15,6 +16,8 @@ export const useUserStore = defineStore('user', () => {
|
||||
const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
|
||||
const permissions = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
|
||||
|
||||
const projects = ref<Array<{ id: string; name: string }>>([]);
|
||||
const selectedProject = ref<{ id: string; name: string } | null>(projects.value[0]); // 默认选中第一个
|
||||
/**
|
||||
* 登录
|
||||
* @param userInfo
|
||||
@ -40,7 +43,6 @@ export const useUserStore = defineStore('user', () => {
|
||||
const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar;
|
||||
|
||||
if (data.roles && data.roles.length > 0) {
|
||||
// 验证返回的roles是否是一个非空数组
|
||||
roles.value = data.roles;
|
||||
permissions.value = data.permissions;
|
||||
} else {
|
||||
@ -51,11 +53,31 @@ export const useUserStore = defineStore('user', () => {
|
||||
avatar.value = profile;
|
||||
userId.value = user.userId;
|
||||
tenantId.value = user.tenantId;
|
||||
|
||||
|
||||
// **新增项目数据获取**
|
||||
const [projectErr, projectRes] = await to(getUserProject());
|
||||
if (projectRes?.data) {
|
||||
const projectList = projectRes.data.map(p => ({
|
||||
id: p.projectId,
|
||||
name: p.projectName || '未知项目'
|
||||
}));
|
||||
|
||||
setProjects(projectList);
|
||||
|
||||
if (projectList.length > 0) {
|
||||
setSelectedProject(projectList[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return Promise.resolve();
|
||||
}
|
||||
return Promise.reject(err);
|
||||
};
|
||||
|
||||
|
||||
// 注销
|
||||
const logout = async (): Promise<void> => {
|
||||
await logoutApi();
|
||||
@ -69,6 +91,19 @@ export const useUserStore = defineStore('user', () => {
|
||||
avatar.value = value;
|
||||
};
|
||||
|
||||
const setProjects = (projectList: Array<{ id: string; name: string }>) => {
|
||||
projects.value = projectList;
|
||||
};
|
||||
|
||||
const setSelectedProject = (project: { id: string; name: string }) => {
|
||||
selectedProject.value = project;
|
||||
// ** 切换项目后,需要清空当前项目下的所有缓存数据 **
|
||||
// 清空 pinia 缓存
|
||||
// store.$reset();
|
||||
// console.log("选择的新项目名称:" + selectedProject.value.name)
|
||||
// console.log("选择的新项目id:" + selectedProject.value.id)
|
||||
};
|
||||
|
||||
return {
|
||||
userId,
|
||||
tenantId,
|
||||
@ -80,12 +115,17 @@ export const useUserStore = defineStore('user', () => {
|
||||
login,
|
||||
getInfo,
|
||||
logout,
|
||||
setAvatar
|
||||
setAvatar,
|
||||
setProjects,
|
||||
setSelectedProject,
|
||||
projects,
|
||||
selectedProject
|
||||
};
|
||||
});
|
||||
|
||||
export default useUserStore;
|
||||
// 非setup
|
||||
|
||||
// 非 setup 方式
|
||||
export function useUserStoreHook() {
|
||||
return useUserStore(store);
|
||||
}
|
||||
|
Reference in New Issue
Block a user