project.ts 2.32 KB
import { AttributeData, QueryForParams, ServiceResponse } from '@/types/global';
import axios, { AxiosRequestConfig } from 'axios';
import FileSaver from 'file-saver';
import { Project } from '@/types/project';
import { User } from '@/types/user';

type ProjectList = Project & {
  activity_count: number;
  activity_up_count: number;
  activity_match_count: number;
  activity_down_count: number;
  activity_send_count: number;
  manage_count: number;
};

export default class useProjectApi {
  static promoteStatusOption = [
    { label: '否', value: 0 },
    { label: '是', value: 1 },
  ];

  static statusOption = [
    { label: '启用', value: 1 },
    { label: '禁用', value: 0 },
  ];

  static async get(params?: QueryForParams): Promise<ServiceResponse<ProjectList[]>> {
    return axios.get('audition/projects', { params });
  }

  static async getExport(fileName: string, params?: QueryForParams) {
    const config = { params: { ...params, fetchType: 'excel' }, timeout: 60000, responseType: 'blob' } as AxiosRequestConfig;
    return axios.get('audition/projects', config).then(({ data }) => FileSaver.saveAs(data, `${fileName}.xlsx`));
  }

  static async show(id: number): Promise<Project> {
    return axios.get(`/audition/projects/${id}`).then((res) => Promise.resolve(res.data));
  }

  static async update(id: number, data: AttributeData): Promise<Project> {
    return axios.put(`audition/projects/${id}`, data).then((res) => Promise.resolve(res.data));
  }

  static async manageUsers(projectId: number, params?: QueryForParams): Promise<ServiceResponse<User[]>> {
    return axios.get(`/audition/projects/${projectId}/managers`, { params });
  }

  static async memberUsers(projectId: number, params?: QueryForParams): Promise<ServiceResponse<User[]>> {
    return axios.get(`/audition/projects/${projectId}/members`, { params });
  }

  static async outManageUsers(projectId: number, params?: QueryForParams): Promise<ServiceResponse<User[]>> {
    return axios.get(`/audition/projects/${projectId}/out-managers`, { params });
  }

  static destroyOutManageUsers(projectId: number, data = {}) {
    return axios.post(`/audition/projects/${projectId}/out-managers`, data);
  }

  static async dynamics(id: number, params?: QueryForParams): Promise<ServiceResponse> {
    return axios.get(`/audition/projects/${id}/dynamics`, { params });
  }
}