workspace.ts 1.6 KB

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