diff --git a/src/components/common/block-strategy.vue b/src/components/common/block-strategy.vue new file mode 100644 index 0000000..b7ebb3c --- /dev/null +++ b/src/components/common/block-strategy.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/components/common/executor-type.vue b/src/components/common/executor-type.vue new file mode 100644 index 0000000..104bcb3 --- /dev/null +++ b/src/components/common/executor-type.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/components/common/route-key.vue b/src/components/common/route-key.vue index 679a1ad..af29e1a 100644 --- a/src/components/common/route-key.vue +++ b/src/components/common/route-key.vue @@ -4,6 +4,10 @@ import { $t } from '@/locales'; import { translateOptions } from '@/utils/common'; import { routeKeyRecordOptions } from '@/constants/business'; +defineOptions({ + name: 'RouterKey' +}); + const routeKeyRef = ref(); const emit = defineEmits(); diff --git a/src/components/common/task-type.vue b/src/components/common/task-type.vue new file mode 100644 index 0000000..a4be4cb --- /dev/null +++ b/src/components/common/task-type.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/components/common/trigger-type.vue b/src/components/common/trigger-type.vue new file mode 100644 index 0000000..78d53f8 --- /dev/null +++ b/src/components/common/trigger-type.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/constants/business.ts b/src/constants/business.ts index 27eb553..16e4c00 100644 --- a/src/constants/business.ts +++ b/src/constants/business.ts @@ -124,6 +124,28 @@ export const routeKeyRecord: Record = { }; export const routeKeyRecordOptions = transformRecordToNumberOption(routeKeyRecord, true); +/** 阻塞策略 */ +export const blockStrategyRecord: Record = { + 1: 'common.blockStrategy.items.discard', + 2: 'common.blockStrategy.items.overwrite', + 3: 'common.blockStrategy.items.parallel' +}; +export const blockStrategyRecordOptions = transformRecordToNumberOption(blockStrategyRecord); + +/** 执行器类型 */ +export const executorTypeRecord: Record = { + 1: 'common.executorType.items.java' +}; +export const executorTypeRecordOptions = transformRecordToNumberOption(executorTypeRecord); + +/** 任务类型 */ +export const taskTypeRecord: Record = { + 1: 'common.taskType.items.cluster', + 2: 'common.taskType.items.broadcast', + 3: 'common.taskType.items.slice' +}; +export const taskTypeRecordRecordOptions = transformRecordToNumberOption(taskTypeRecord); + /** 延迟等级 */ export const DelayLevel: Record = { 1: '10s', @@ -160,7 +182,7 @@ export const triggerTypeRecord: Record = // 只会在定时任务中使用 99: 'page.jobTask.triggerTypeItem.workflow' }; -export const triggerTypeOptions = transformRecordToNumberOption(triggerTypeRecord, true); +export const triggerTypeOptions = transformRecordToNumberOption(triggerTypeRecord); export const taskBatchStatusRecord: Record = { 1: 'common.taskBatchStatus.items.waiting', @@ -170,7 +192,7 @@ export const taskBatchStatusRecord: Record = { 0: 'common.jobOperationReason.items.none', @@ -189,4 +211,4 @@ export const operationReasonRecord: Record Promise import("@/views/notify/recipient/index.vue"), notify_scene: () => import("@/views/notify/scene/index.vue"), pods: () => import("@/views/pods/index.vue"), + retry_log: () => import("@/views/retry/log/index.vue"), retry_scene: () => import("@/views/retry/scene/index.vue"), retry_task: () => import("@/views/retry/task/index.vue"), "user-center": () => import("@/views/user-center/index.vue"), diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts index 5f154db..40911c1 100644 --- a/src/router/elegant/routes.ts +++ b/src/router/elegant/routes.ts @@ -420,6 +420,15 @@ export const generatedRoutes: GeneratedRoute[] = [ icon: 'carbon:retry-failed' }, children: [ + { + name: 'retry_log', + path: '/retry/log', + component: 'view.retry_log', + meta: { + title: 'retry_log', + i18nKey: 'route.retry_log' + } + }, { name: 'retry_scene', path: '/retry/scene', diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index e6a6ee2..6e4f79e 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -183,6 +183,7 @@ const routeMap: RouteMap = { "notify_scene": "/notify/scene", "pods": "/pods", "retry": "/retry", + "retry_log": "/retry/log", "retry_scene": "/retry/scene", "retry_task": "/retry/task", "user-center": "/user-center", diff --git a/src/service/api/index.ts b/src/service/api/index.ts index a28e4c9..723387f 100644 --- a/src/service/api/index.ts +++ b/src/service/api/index.ts @@ -9,4 +9,4 @@ export * from './group'; export * from './retry-task'; export * from './retry'; export * from './workflow'; -export * from './job-task'; +export * from './job'; diff --git a/src/service/api/job-task.ts b/src/service/api/job-task.ts deleted file mode 100644 index 36245e4..0000000 --- a/src/service/api/job-task.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { request } from '../request'; - -/** get JobTask page */ -export function fetchGetJobTaskPage(params?: Api.Job.JobSearchParams) { - return request({ - url: '/job/page/list', - method: 'get', - params - }); -} - -/** add JobTask */ -export function fetchAddJobTask(params?: Api.Job.Job) { - return request({ - url: '/job/page/list', - method: 'post', - params - }); -} - -/** edit JobTask */ -export function fetchEditJobTask(params?: Api.Job.Job) { - return request({ - url: '/job/page/list', - method: 'put', - params - }); -} diff --git a/src/service/api/job.ts b/src/service/api/job.ts new file mode 100644 index 0000000..51ac746 --- /dev/null +++ b/src/service/api/job.ts @@ -0,0 +1,37 @@ +import { request } from '../request'; + +/** get Job page */ +export function fetchGetJobPage(params?: Api.Job.JobSearchParams) { + return request({ + url: '/job/page/list', + method: 'get', + params + }); +} + +/** add Job */ +export function fetchAddJob(data: Api.Job.Job) { + return request({ + url: '/job', + method: 'post', + data + }); +} + +/** edit Job */ +export function fetchEditJob(data: Api.Job.Job) { + return request({ + url: '/job', + method: 'put', + data + }); +} + +/** edit Job */ +export function fetchUpdateJobStatus(data: Api.Job.JobUpdateJobStatusRequestVO) { + return request({ + url: '/job/status', + method: 'put', + data + }); +} diff --git a/src/typings/api.d.ts b/src/typings/api.d.ts index fc6520b..da4f748 100644 --- a/src/typings/api.d.ts +++ b/src/typings/api.d.ts @@ -73,6 +73,18 @@ declare namespace Api { /** 1: 一致性Hash 2: 随机 3: LRU 4: 轮询 */ type RouteKey = 1 | 2 | 3 | 4; + /** 阻塞策略 1:丢弃 2:覆盖 3:并行 */ + type BlockStrategy = 1 | 2 | 3; + + /** 执行器类型 1:Java */ + type ExecutorType = 1; + + /** 触发类型 2:固定时间 3:CRON 表达式 99:工作流 */ + type TriggerType = 2 | 3 | 99; + + /** 任务类型 1:集群 2:广播 3:切片 */ + type TaskType = 1 | 2 | 3; + /** 1、待处理 2、运行中 3、成功 4、失败 5、停止 6、取消 */ type TaskBatchStatus = 1 | 2 | 3 | 4 | 5 | 6; @@ -817,12 +829,11 @@ declare namespace Api { } /** - * namespace JobTask + * namespace Job * - * backend api module: "jobTask" + * backend api module: "job" */ namespace Job { - import EnableStatusNumber = Api.Common.EnableStatusNumber; type CommonSearchParams = Pick; /** Job */ @@ -834,23 +845,25 @@ declare namespace Api { /** 方法参数 */ argsStr: string; /** 参数类型 */ - argsType: string; + argsType: number; /** 扩展字段 */ - extAttrs: string; + extAttrs?: string; /** 下次触发时间 */ - nextTriggerAt: string; + nextTriggerAt?: string; /** 状态 */ - jobStatus: EnableStatusNumber; + jobStatus: Common.EnableStatusNumber; /** 路由策略 */ - routeKey: string; + routeKey: Common.RouteKey; /** 执行器类型 */ - executorType: string; + executorType: Common.ExecutorType; + /** 执行器名称 */ + executorInfo: string; /** 触发类型 */ - triggerType: string; + triggerType: Common.TriggerType; /** 间隔时长 */ - triggerInterval: number; + triggerInterval: string; /** 阻塞策略 */ - blockStrategy: number; + blockStrategy: Common.BlockStrategy; /** 超时时间 */ executorTimeout: number; /** 最大重试次数 */ @@ -858,13 +871,13 @@ declare namespace Api { /** 重试间隔 */ retryInterval: number; /** 任务类型 */ - taskType: number; + taskType: Common.TaskType; /** 并行数 */ parallelNum: number; /** Bucket */ - bucketIndex: number; + bucketIndex?: number; /** 描述 */ - description: string; + description?: string; }>; /** JobTask search params */ @@ -891,6 +904,11 @@ declare namespace Api { CommonSearchParams >; + type JobUpdateJobStatusRequestVO = { + id: string; + jobStatus: Common.EnableStatusNumber; + }; + /** JobTask list */ type JobList = Common.PaginatingQueryRecord; diff --git a/src/typings/app.d.ts b/src/typings/app.d.ts index b311712..19cfa02 100644 --- a/src/typings/app.d.ts +++ b/src/typings/app.d.ts @@ -319,6 +319,40 @@ declare namespace App { round: string; }; }; + blockStrategy: { + label: string; + form: string; + items: { + discard: string; + overwrite: string; + parallel: string; + }; + }; + executorType: { + label: string; + form: string; + items: { + java: string; + }; + }; + taskType: { + label: string; + form: string; + items: { + cluster: string; + broadcast: string; + slice: string; + }; + }; + triggerType: { + label: string; + form: string; + items: { + cron: string; + fixed: string; + workflow: string; + }; + }; taskBatchStatus: { label: string; form: string; @@ -967,6 +1001,7 @@ declare namespace App { jobStatus: string; routeKey: string; executorType: string; + executorInfo: string; triggerType: string; triggerInterval: string; blockStrategy: string; @@ -986,10 +1021,12 @@ declare namespace App { triggerType: string; executorTimeout: string; triggerInterval: string; + triggerInterval_CRON: string; taskType: string; parallelNum: string; bucketIndex: string; executorType: string; + executorInfo: string; routeKey: string; blockStrategy: string; argsType: string; diff --git a/src/views/job/task/index.vue b/src/views/job/task/index.vue index 2b64026..1286ed5 100644 --- a/src/views/job/task/index.vue +++ b/src/views/job/task/index.vue @@ -1,16 +1,19 @@