broker.ts 4.73 KB
import { AnyObject, QueryForPaginationParams, QueryForParams, ServiceResponse } from '@/types/global';
import { User } from '@/utils/model';
import axios, { AxiosRequestConfig } from 'axios';
import FileSaver from 'file-saver';

export default class useBrokerApi {}

export interface BrokerUserConfigItem {
  user_id: number;
  user?: User;
  identifier: '';
  singer_count: 0;
  status: 0 | 1;
}

export interface BrokerUserConfig {
  id: number;
  title: string;
  begin_at: string;
  end_at: string;
  push_type: number;
  push_at: string;
  user_id: number;
  user?: User;
  items?: BrokerUserConfigItem[];
}

export class useUserConfigApi {
  static get(params?: QueryForParams | QueryForPaginationParams): Promise<ServiceResponse<BrokerUserConfig[]>> {
    return axios.get('system/broker/user-configs', { params });
  }

  static async create(data: AnyObject): Promise<BrokerUserConfig> {
    return axios.post('system/broker/user-configs', data).then((res) => Promise.resolve(res.data));
  }

  static async createLevel(id: number, data: AnyObject) {
    return axios.post(`system/broker/user-configs/${id}/level`, data).then((res) => Promise.resolve(res.data));
  }

  static async show(id: number): Promise<BrokerUserConfig> {
    return axios.get(`system/broker/user-configs/${id}`).then((res) => Promise.resolve(res.data));
  }

  static async update(id: number, data: AnyObject): Promise<BrokerUserConfig> {
    return axios.put(`system/broker/user-configs/${id}`, data).then((res) => Promise.resolve(res.data));
  }

  static async destroy(id: number) {
    return axios.delete(`system/broker/user-configs/${id}`).then((res) => Promise.resolve(res.data));
  }
}

export interface BrokerPushConfig {
  id: number;
  identifier: string;
  title: string;
  intro: string;
  match_title: string;
  match_intro: string;
  user_id: number;
  user?: User;
}

export class usePushConfigApi {
  static get(params?: QueryForParams | QueryForPaginationParams): Promise<ServiceResponse<BrokerPushConfig[]>> {
    return axios.get('system/broker/push-configs', { params });
  }

  static async create(data: AnyObject): Promise<BrokerPushConfig> {
    return axios.post('system/broker/push-configs', data).then((res) => Promise.resolve(res.data));
  }

  static async update(id: number, data: AnyObject): Promise<BrokerPushConfig> {
    return axios.put(`system/broker/push-configs/${id}`, data).then((res) => Promise.resolve(res.data));
  }

  static async destroy(id: number) {
    return axios.delete(`system/broker/push-configs/${id}`).then((res) => Promise.resolve(res.data));
  }
}

export class usePushMatchRecordApi {
  static get(params?: QueryForParams | QueryForPaginationParams): Promise<ServiceResponse> {
    return axios.get('system/broker/push-match-records', { params });
  }

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

  static async rollback(recordId: number) {
    return axios.post(`system/broker/push-match-records/${recordId}/rollback`);
  }

  static async send(recordId: number) {
    return axios.post(`system/broker/push-match-records/${recordId}/send`);
  }
}

export interface BrokerPushLevel {
  id: number;
  user_id: number;
  title: string;
  is_alert: 1 | 0;
  begin_at: string;
  end_at: string;
  publish_at: string;
  status: number;
}

export class usePushLevelRecordApi {
  static statusOption = [
    { value: 0, label: '待发送' },
    { value: 1, label: '处理中' },
    { value: 2, label: '已发送' },
    { value: 3, label: '已撤销' },
    { value: -1, label: '发送失败' },
  ];

  static async get(params?: QueryForParams | QueryForPaginationParams): Promise<ServiceResponse<BrokerPushLevel[]>> {
    return axios.get('system/broker/push-level-records', { params });
  }

  static async update(id: number, data: AnyObject): Promise<BrokerPushLevel> {
    return axios.put(`system/broker/push-level-records/${id}`, data).then((res) => Promise.resolve(res.data));
  }

  static async send(id: number) {
    return axios.post(`system/broker/push-level-records/${id}/send`).then((res) => Promise.resolve(res.data));
  }

  static async rollback(id: number) {
    return axios.post(`system/broker/push-level-records/${id}/rollback`).then((res) => Promise.resolve(res.data));
  }

  static async destroy(id: number) {
    return axios.delete(`system/broker/push-level-records/${id}`).then((res) => Promise.resolve(res.data));
  }

  static getChildren(id: number, params?: QueryForParams | QueryForPaginationParams) {
    return axios.get(`system/broker/push-level-records/${id}/children`, { params });
  }
}