- 重构勘察业务:移除SOP相关表,新增勘察明细表支持建筑/楼层/房间/照片管理 - 新增定时任务人性化频率配置,支持分钟/小时/天/周/月/自定义六种模式 - 新增频率预览接口,支持配置转换为cron表达式与执行时间预览 - 更新系统品牌名称为鑫潼智电,修改全局标题与登录页文案
150 lines
3.5 KiB
TypeScript
150 lines
3.5 KiB
TypeScript
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<string, any>;
|
|
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<string, any>;
|
|
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<JobListResult>('/jobs', { params }),
|
|
|
|
updateJob: (id: number, data: UpdateJobPayload) =>
|
|
request.put<JobItem>(`/jobs/${id}`, data),
|
|
|
|
/** 频率预览:人性化配置 → cron / 中文描述 / 未来 5 次执行时间 */
|
|
previewCron: (data: { freqType: FreqType; freqConfig: FreqConfig }) =>
|
|
request.post<CronPreviewResult>('/jobs/cron/preview', data),
|
|
|
|
changeJobStatus: (id: number, status: 0 | 1) =>
|
|
request.put<JobItem>(`/jobs/${id}/status`, { status }),
|
|
|
|
runJob: (id: number) =>
|
|
request.post<JobRunResult>(`/jobs/${id}/run`),
|
|
|
|
getJobLogs: (id: number, params: JobLogQuery) =>
|
|
request.get<JobLogListResult>(`/jobs/${id}/logs`, { params }),
|
|
|
|
clearJobLogs: (days = 90) =>
|
|
request.delete<{ deleted: number }>('/jobs/logs/clear', { params: { days } }),
|
|
};
|