workspace.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { ProjectAPI } from '@/api';
  2. import {
  3. ActionTree, GetterTree, Module, MutationTree,
  4. } from 'vuex';
  5. import {
  6. WorkspaceState, RootState, ChangeProjectPayload, UserState,
  7. } from '../typings';
  8. const DEFAULT: WorkspaceState = {
  9. currentProjectId: -1,
  10. currentProjectMembers: [],
  11. projectList: [],
  12. };
  13. const actions: ActionTree<WorkspaceState, RootState> = {
  14. async refreshProjectList({ commit }, userId) {
  15. const projectList = await ProjectAPI.getProjectListByUserId(userId);
  16. commit('updateProjectList', projectList);
  17. },
  18. async changeProject({ commit }, payload: ChangeProjectPayload) {
  19. const members = await ProjectAPI.getProjectMembersByProjectId(payload.projectId);
  20. commit('updateMembers', members);
  21. commit('changeProject', payload);
  22. },
  23. resetCurrentProject({ commit }) {
  24. commit('changeProject', -1);
  25. },
  26. };
  27. const mutations: MutationTree<WorkspaceState> = {
  28. updateMembers(state, payload: Array<UserState>) {
  29. state.currentProjectMembers = payload;
  30. },
  31. updateProjectList(state, payload: Array<Project>) {
  32. state.projectList = payload;
  33. },
  34. changeProject(state, { projectId }: ChangeProjectPayload) {
  35. state.currentProjectId = projectId;
  36. },
  37. };
  38. const getters: GetterTree<WorkspaceState, RootState> = {
  39. currentProjectInfo(state) {
  40. return Array.prototype.find.call(state.projectList, (project) => project.id === state.currentProjectId)
  41. || {
  42. id: -1,
  43. name: '未选择项目',
  44. };
  45. },
  46. userOptions(state) {
  47. return state.currentProjectMembers.map((user) => ({
  48. label: user.username,
  49. value: user.id,
  50. }));
  51. },
  52. };
  53. export const workspace: Module<WorkspaceState, RootState> = {
  54. state: () => DEFAULT,
  55. actions,
  56. mutations,
  57. getters,
  58. };