140 lines
3.3 KiB
TypeScript
140 lines
3.3 KiB
TypeScript
|
|
import type { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|||
|
|
import http from '../utils/http';
|
|||
|
|
import { AvailabilityDto } from './models';
|
|||
|
|
type config = { url: string; requestConfig?: AxiosRequestConfig };
|
|||
|
|
interface BaseApiConfig {
|
|||
|
|
add: config;
|
|||
|
|
edit: config;
|
|||
|
|
delete: Pick<config, 'url'>;
|
|||
|
|
list: Pick<config, 'url'>;
|
|||
|
|
setStatus: config;
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* 通用api增删改查 (A:添加的参数类型,E:编辑的参数类型,P:列表查询的返回结果类型)
|
|||
|
|
*/
|
|||
|
|
export class BaseApi<A = any, E = any, P = any> {
|
|||
|
|
basePath: string;
|
|||
|
|
config: BaseApiConfig;
|
|||
|
|
readonly axios: AxiosInstance;
|
|||
|
|
constructor(
|
|||
|
|
basePath: string,
|
|||
|
|
config: BaseApiConfig = {
|
|||
|
|
add: { url: 'add' },
|
|||
|
|
edit: { url: 'edit' },
|
|||
|
|
delete: { url: 'delete' },
|
|||
|
|
list: { url: 'page' },
|
|||
|
|
setStatus: { url: 'setstatus' },
|
|||
|
|
}
|
|||
|
|
) {
|
|||
|
|
this.basePath = basePath.startsWith('/') ? basePath : `/${basePath}/`;
|
|||
|
|
this.config = config;
|
|||
|
|
this.axios = http.instance;
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* 拼接api地址
|
|||
|
|
* @param action 接口操作
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
protected combine = (action: string) => {
|
|||
|
|
return `${this.basePath}${action}`;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* get请求
|
|||
|
|
* @param url 请求地址
|
|||
|
|
* @param config 配置参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
protected get = <T = any>(url: string, config?: AxiosRequestConfig): Promise<ApiResult<T>> => {
|
|||
|
|
return http.get(url, config);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* post请求
|
|||
|
|
* @param url 请求地址
|
|||
|
|
* @param data 请求数据
|
|||
|
|
* @param config 配置参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
protected post = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResult<T>> => {
|
|||
|
|
return http.post(url, data, config);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* put请求
|
|||
|
|
* @param url 请求地址
|
|||
|
|
* @param data 请求数据
|
|||
|
|
* @param config 配置参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
protected put = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResult<T>> => {
|
|||
|
|
return http.put(url, data, config);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* patch请求
|
|||
|
|
* @param url 请求地址
|
|||
|
|
* @param data 请求数据
|
|||
|
|
* @param config 配置参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
protected patch = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResult<T>> => {
|
|||
|
|
return http.patch(url, data, config);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* delete请求
|
|||
|
|
* @param url 请求地址
|
|||
|
|
* @param config 配置参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
protected remove = <T = any>(url: string, config?: AxiosRequestConfig): Promise<ApiResult<T>> => {
|
|||
|
|
return http.delete(url, config);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 编辑
|
|||
|
|
* @param data 参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
add = (data: A) => {
|
|||
|
|
return http.post(`${this.basePath}${this.config.add.url}`, data, this.config.add.requestConfig);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 编辑
|
|||
|
|
* @param data 参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
edit = (data: E) => {
|
|||
|
|
return http.put(`${this.basePath}${this.config.edit.url}`, data, this.config.edit.requestConfig);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
* @param params 分页查询
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
page = (params?: any) => {
|
|||
|
|
return http.get<P>(`${this.basePath}${this.config.list.url}`, { params });
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 删除
|
|||
|
|
* @param data 参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
delete = (data?: Record<string, any>) => {
|
|||
|
|
return http.delete(`${this.basePath}${this.config.delete.url}`, { data });
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 设置状态
|
|||
|
|
* @param data 参数
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
setStatus = (data: AvailabilityDto) => {
|
|||
|
|
return http.patch(`${this.basePath}${this.config.setStatus.url}`, data, this.config.setStatus.requestConfig);
|
|||
|
|
};
|
|||
|
|
}
|