import request from '@/utils/request'; export interface JobParamField { key: string; label: string; type: 'number' | 'string'; min?: number; max?: number; placeholder?: string; } /** 频率类型:每N分钟 / 每N小时 / 每天 / 每周 / 每月 / 自定义 cron */ export type FreqType = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'custom'; /** 频率配置(字段按 freqType 取用) */ export interface FreqConfig { /** minute/hour:间隔数量 */ interval?: number; /** hour:每小时的第几分钟 */ minute?: number; /** day/week/month:执行时间点 HH:mm */ times?: string[]; /** week:星期,0=周日 ... 6=周六 */ weekdays?: number[]; /** month:日期 1-31 */ days?: number[]; /** custom:自定义 cron 表达式 */ expression?: string; } export interface JobItem { id: number; jobKey: string; jobName: string; cronExpression: string; freqType: FreqType; freqConfig: FreqConfig; cronDescription?: string | null; params: Record; retryTimes: number; retryInterval: number; status: number; remark?: string; lastRunAt?: string | null; lastRunStatus?: number | null; lastRunCostMs?: number | null; lastError?: string | null; createdAt?: string; updatedAt?: string; description?: string; paramFields?: JobParamField[]; registered: boolean; nextRunTime?: string | null; } export interface JobLogItem { id: number; jobId: number; jobKey: string; jobName: string; triggerType: number; status: number; attempt: number; startedAt?: string | null; finishedAt?: string | null; costMs?: number | null; message?: string | null; errorStack?: string | null; createdAt?: string | null; } export interface JobRunResult { status: number; message: string; costMs: number; attempt: number; } export interface JobQuery { page?: number; pageSize?: number; jobName?: string; status?: number; } export interface JobLogQuery { page?: number; pageSize?: number; status?: number; triggerType?: number; startDate?: string; endDate?: string; } export interface UpdateJobPayload { freqType: FreqType; freqConfig: FreqConfig; params: Record; retryTimes: number; retryInterval: number; remark?: string; } /** 频率预览结果:由后端由频率配置推导 cron、中文描述与未来执行时间 */ export interface CronPreviewResult { valid: boolean; error?: string | null; cronExpression?: string | null; description?: string | null; nextRuns: string[]; } export interface JobListResult { list: JobItem[]; total: number; page: number; pageSize: number; } export interface JobLogListResult { list: JobLogItem[]; total: number; page: number; pageSize: number; } export const jobApi = { getJobList: (params: JobQuery) => request.get('/jobs', { params }), updateJob: (id: number, data: UpdateJobPayload) => request.put(`/jobs/${id}`, data), /** 频率预览:人性化配置 → cron / 中文描述 / 未来 5 次执行时间 */ previewCron: (data: { freqType: FreqType; freqConfig: FreqConfig }) => request.post('/jobs/cron/preview', data), changeJobStatus: (id: number, status: 0 | 1) => request.put(`/jobs/${id}/status`, { status }), runJob: (id: number) => request.post(`/jobs/${id}/run`), getJobLogs: (id: number, params: JobLogQuery) => request.get(`/jobs/${id}/logs`, { params }), clearJobLogs: (days = 90) => request.delete<{ deleted: number }>('/jobs/logs/clear', { params: { days } }), };