import { request } from '@/utils/request' /** * 分页查询结果 */ export interface PageResult { /** 列表数据 */ list: T[] /** 总记录数 */ total: number } /** * 分页参数 */ export interface PageParams { page: number size: number } /** * 通用 Service 基类 * *

封装标准 CRUD 操作,子类只需传入 baseUrl 即可使用:

* *
 * class UserService extends BaseService {
 *   constructor() {
 *     super('/user/admin/user')
 *   }
 * }
 * 
*/ export class BaseService { /** 接口基础路径 */ protected baseUrl: string constructor(baseUrl: string) { this.baseUrl = baseUrl } /** * 分页查询 * * @param params 分页参数 + 查询条件 * @returns 分页结果 */ async page(params: PageParams & Record): Promise> { const res: any = await request({ url: `${this.baseUrl}/page`, method: 'get', params, }) return { list: res.data?.records || [], total: res.data?.total || 0, } } /** * 列表查询 * * @param params 查询条件 * @returns 数据列表 */ async list(params?: Record): Promise { const res: any = await request({ url: `${this.baseUrl}/list`, method: 'get', params, }) return res.data || [] } /** * 根据 ID 查询详情 * * @param id 主键 ID * @returns 实体数据 */ async getById(id: number | string): Promise { const res: any = await request({ url: `${this.baseUrl}/${id}`, method: 'get', }) return res.data } /** * 新增 * * @param data 实体数据 * @returns 新增后的实体(包含生成的ID) */ async add(data: Partial): Promise { const res: any = await request({ url: this.baseUrl, method: 'post', data, }) return res.data } /** * 修改 * * @param data 实体数据(必须包含 id) * @returns 是否成功 */ async update(data: Partial & { id: number | string }): Promise { const res: any = await request({ url: this.baseUrl, method: 'put', data, }) return res.data === true } /** * 删除 * * @param id 主键 ID * @returns 是否成功 */ async remove(id: number | string): Promise { const res: any = await request({ url: `${this.baseUrl}/${id}`, method: 'delete', }) return res.data === true } /** * 批量删除(调用后端批量删除接口) * * @param ids 主键 ID 列表 * @returns 是否成功 */ async batchRemove(ids: (number | string)[]): Promise { const res: any = await request({ url: `${this.baseUrl}/batch`, method: 'delete', data: ids, }) return res.data === true } /** * 状态切换(启用/禁用) * * @param id 主键 ID * @param status 状态值(0禁用 1启用) * @returns 是否成功 */ async changeStatus(id: number | string, status: number): Promise { const res: any = await request({ url: `${this.baseUrl}/status`, method: 'put', params: { id, status }, }) return res.data === true } }