feat: 新增电工APP端与定时任务管理功能

- 新增电工APP独立鉴权中间件与登录注册接口
- 新增定时任务管理模块,支持任务配置、执行日志与手动触发
- 新增运维费定价与电工派单成本价目管理
- 新增电工资质证照管理与到期提醒定时任务
- 完善数据库实体与DTO校验,优化权限控制
This commit is contained in:
andyesfly committed 2026-10-02 16:08:00 +08:00
1 parent 1803ad679c
commit f4454ad014
57 files changed
+9388 -200

No files matched your search

+113
View File
@@ -0,0 +1,113 @@
import request from '@/utils/request';
export interface JobParamField {
key: string;
label: string;
type: 'number' | 'string';
min?: number;
max?: number;
placeholder?: string;
}
export interface JobItem {
id: number;
jobKey: string;
jobName: string;
cronExpression: string;
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 {
cronExpression: string;
params: Record<string, any>;
retryTimes: number;
retryInterval: number;
remark?: 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),
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 } }),
};