feat: 重构勘察业务为明细模式并新增定时任务人性化配置

- 重构勘察业务:移除SOP相关表,新增勘察明细表支持建筑/楼层/房间/照片管理
- 新增定时任务人性化频率配置,支持分钟/小时/天/周/月/自定义六种模式
- 新增频率预览接口,支持配置转换为cron表达式与执行时间预览
- 更新系统品牌名称为鑫潼智电,修改全局标题与登录页文案
This commit is contained in:
andyesfly committed 2026-10-17 10:08:42 +08:00
1 parent f72644c24f
commit 22d27a940d
29 files changed
+1908 -576

No files matched your search

+37 -1
View File
@@ -9,11 +9,33 @@ export interface JobParamField {
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;
@@ -71,13 +93,23 @@ export interface JobLogQuery {
}
export interface UpdateJobPayload {
cronExpression: string;
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;
@@ -99,6 +131,10 @@ export const jobApi = {
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 }),