| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { ProjectAPI } from '@/api';
- import {
- ActionTree, GetterTree, Module, MutationTree,
- } from 'vuex';
- import {
- WorkspaceState, RootState, ChangeProjectPayload, UserState,
- } from '../typings';
- const DEFAULT: WorkspaceState = {
- currentProjectId: -1,
- currentProjectMembers: [],
- projectList: [],
- };
- const actions: ActionTree<WorkspaceState, RootState> = {
- async refreshProjectList({ commit }, userId) {
- const projectList = await ProjectAPI.getProjectListByUserId(userId);
- commit('updateProjectList', projectList);
- },
- async changeProject({ commit }, payload: ChangeProjectPayload) {
- const members = await ProjectAPI.getProjectMembersByProjectId(payload.projectId);
- commit('updateMembers', members);
- commit('changeProject', payload);
- },
- resetCurrentProject({ commit }) {
- commit('changeProject', -1);
- },
- };
- const mutations: MutationTree<WorkspaceState> = {
- updateMembers(state, payload: Array<UserState>) {
- state.currentProjectMembers = payload;
- },
- updateProjectList(state, payload: Array<Project>) {
- state.projectList = payload;
- },
- changeProject(state, { projectId }: ChangeProjectPayload) {
- state.currentProjectId = projectId;
- },
- };
- const getters: GetterTree<WorkspaceState, RootState> = {
- currentProjectInfo(state) {
- return Array.prototype.find.call(state.projectList, (project) => project.id === state.currentProjectId)
- || {
- id: -1,
- name: '未选择项目',
- };
- },
- userOptions(state) {
- return state.currentProjectMembers.map((user) => ({
- label: user.username,
- value: user.id,
- }));
- },
- };
- export const workspace: Module<WorkspaceState, RootState> = {
- state: () => DEFAULT,
- actions,
- mutations,
- getters,
- };
|