项目列表完整功能

This commit is contained in:
zhuer
2025-03-06 11:50:32 +08:00
parent 86bfb30545
commit c3c6859025
42 changed files with 1861 additions and 3530 deletions

View File

@ -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);
}