feat(sj_1.0.0): 定义job状态和操作原因

This commit is contained in:
opensnail 2024-04-24 21:44:33 +08:00
parent 32627dee23
commit d114a844ed
16 changed files with 336 additions and 104 deletions

View File

@ -0,0 +1,29 @@
<script setup lang="ts">
import { ref } from 'vue';
import { $t } from '@/locales';
import { translateOptions } from '@/utils/common';
import { operationReasonOptions } from '@/constants/business';
const operationReasonRef = ref<Api.Common.OperationReason>();
const emit = defineEmits<Emits>();
interface Emits {
(e: 'update:value', value: Api.Common.OperationReason): void;
}
const handleUpdate = (operationReason: Api.Common.OperationReason) => {
emit('update:value', operationReason);
};
</script>
<template>
<NSelect
v-model:value="operationReasonRef"
:placeholder="$t('common.jobOperationReason.form')"
:options="translateOptions(operationReasonOptions)"
clearable
@update:value="handleUpdate"
/>
</template>
<style scoped></style>

View File

@ -0,0 +1,29 @@
<script setup lang="ts">
import { ref } from 'vue';
import { $t } from '@/locales';
import { translateOptions } from '@/utils/common';
import { routeKeyRecordOptions } from '@/constants/business';
const routeKeyRef = ref<Api.Common.RouteKey>();
const emit = defineEmits<Emits>();
interface Emits {
(e: 'update:value', value: Api.Common.RouteKey): void;
}
const handleUpdate = (routeKey: Api.Common.RouteKey) => {
emit('update:value', routeKey);
};
</script>
<template>
<NSelect
v-model:value="routeKeyRef"
:placeholder="$t('common.routeKey.routeForm')"
:options="translateOptions(routeKeyRecordOptions)"
clearable
@update:value="handleUpdate"
/>
</template>
<style scoped></style>

View File

@ -0,0 +1,29 @@
<script setup lang="ts">
import { ref } from 'vue';
import { $t } from '@/locales';
import { translateOptions } from '@/utils/common';
import { taskBatchStatusRecordOptions } from '@/constants/business';
const taskBatchStatusRef = ref<Api.Common.TaskBatchStatus>();
const emit = defineEmits<Emits>();
interface Emits {
(e: 'update:value', value: Api.Common.TaskBatchStatus): void;
}
const handleUpdate = (taskBatchStatus: Api.Common.TaskBatchStatus) => {
emit('update:value', taskBatchStatus);
};
</script>
<template>
<NSelect
v-model:value="taskBatchStatusRef"
:placeholder="$t('common.taskBatchStatus.form')"
:options="translateOptions(taskBatchStatusRecordOptions)"
clearable
@update:value="handleUpdate"
/>
</template>
<style scoped></style>

View File

@ -116,11 +116,11 @@ export const backOffRecord: Record<Api.RetryScene.BackOff, App.I18n.I18nKey> = {
}; };
export const backOffRecordOptions = transformRecordToNumberOption(backOffRecord, true); export const backOffRecordOptions = transformRecordToNumberOption(backOffRecord, true);
export const routeKeyRecord: Record<Api.RetryScene.RouteKey, App.I18n.I18nKey> = { export const routeKeyRecord: Record<Api.Common.RouteKey, App.I18n.I18nKey> = {
1: 'page.retryScene.routeKeyItem.consistentHash', 1: 'common.routeKey.items.consistentHash',
2: 'page.retryScene.routeKeyItem.random', 2: 'common.routeKey.items.random',
3: 'page.retryScene.routeKeyItem.lru', 3: 'common.routeKey.items.lru',
4: 'page.retryScene.routeKeyItem.round' 4: 'common.routeKey.items.round'
}; };
export const routeKeyRecordOptions = transformRecordToNumberOption(routeKeyRecord, true); export const routeKeyRecordOptions = transformRecordToNumberOption(routeKeyRecord, true);
@ -153,3 +153,40 @@ export const DelayLevel: Record<number, string> = {
25: '11h', 25: '11h',
26: '12h' 26: '12h'
}; };
export const triggerTypeRecord: Record<Api.Job.TriggerType, App.I18n.I18nKey> = {
2: 'page.jobTask.triggerTypeItem.fixed',
3: 'page.jobTask.triggerTypeItem.cron',
// 只会在定时任务中使用
99: 'page.jobTask.triggerTypeItem.workflow'
};
export const triggerTypeOptions = transformRecordToNumberOption(triggerTypeRecord, true);
export const taskBatchStatusRecord: Record<Api.Common.TaskBatchStatus, App.I18n.I18nKey> = {
1: 'common.taskBatchStatus.items.waiting',
2: 'common.taskBatchStatus.items.running',
3: 'common.taskBatchStatus.items.success',
4: 'common.taskBatchStatus.items.fail',
5: 'common.taskBatchStatus.items.stop',
6: 'common.taskBatchStatus.items.cancel'
};
export const taskBatchStatusRecordOptions = transformRecordToNumberOption(taskBatchStatusRecord, true);
export const operationReasonRecord: Record<Api.Common.OperationReason, App.I18n.I18nKey> = {
0: 'common.jobOperationReason.items.none',
1: 'common.jobOperationReason.items.taskExecutionTimeout',
2: 'common.jobOperationReason.items.notClient',
3: 'common.jobOperationReason.items.closed',
4: 'common.jobOperationReason.items.discard',
5: 'common.jobOperationReason.items.overlay',
6: 'common.jobOperationReason.items.notExecutionTask',
7: 'common.jobOperationReason.items.taskExecutionError',
8: 'common.jobOperationReason.items.mannerStop',
9: 'common.jobOperationReason.items.workflowConditionNodeExecutionError',
10: 'common.jobOperationReason.items.jobTaskInterrupted',
11: 'common.jobOperationReason.items.workflowCallbackNodeExecutionError',
12: 'common.jobOperationReason.items.workflowNodeNoRequired',
13: 'common.jobOperationReason.items.workflowNodeClosedSkipExecution',
14: 'common.jobOperationReason.items.workflowDecisionFailed'
};
export const operationReasonOptions = transformRecordToNumberOption(operationReasonRecord, true);

View File

@ -62,6 +62,49 @@ const local: App.I18n.Schema = {
callback: 'Callback task', callback: 'Callback task',
job: 'Job task', job: 'Job task',
workflow: 'Workflow' workflow: 'Workflow'
},
routeKey: {
routeLabel: '路由策略',
routeForm: '请输入路由策略',
items: {
consistentHash: '一致性哈希',
random: '随机',
lru: 'LRU',
round: '轮询'
}
},
taskBatchStatus: {
label: '执行状态',
form: '请选择执行状态',
items: {
waiting: '待处理',
running: '运行中',
success: '处理成功',
fail: '处理失败',
stop: '任务停止',
cancel: '取消'
}
},
jobOperationReason: {
label: '操作原因',
form: '请选择执行状态',
items: {
none: '',
taskExecutionTimeout: '任务执行超时',
notClient: '无客户端节点',
closed: '任务已关闭',
discard: '任务丢弃',
overlay: '任务被覆盖',
notExecutionTask: '无可执行任务项',
taskExecutionError: '任务执行期间发生非预期异常',
mannerStop: '手动停止',
workflowConditionNodeExecutionError: '条件节点执行异常',
jobTaskInterrupted: '任务中断',
workflowCallbackNodeExecutionError: '回调节点执行异常',
workflowNodeNoRequired: '无需处理',
workflowNodeClosedSkipExecution: '节点关闭跳过执行',
workflowDecisionFailed: '判定未通过'
}
} }
}, },
request: { request: {
@ -695,12 +738,6 @@ const local: App.I18n.Schema = {
fixed: '固定时间', fixed: '固定时间',
cron: 'CRON表达式', cron: 'CRON表达式',
random: '随机等待' random: '随机等待'
},
routeKeyItem: {
consistentHash: '一致性哈希',
random: '随机',
lru: 'LRU',
round: '轮询'
} }
}, },
workflowBatch: { workflowBatch: {
@ -778,7 +815,12 @@ const local: App.I18n.Schema = {
retryInterval: 'Please enter retry interval' retryInterval: 'Please enter retry interval'
}, },
addJobTask: 'Add job task', addJobTask: 'Add job task',
editJobTask: 'Edit job task' editJobTask: 'Edit job task',
triggerTypeItem: {
fixed: '固定时间',
cron: 'CRON表达式',
workflow: '工作流'
}
} }
}, },
form: { form: {

View File

@ -62,6 +62,49 @@ const local: App.I18n.Schema = {
callback: '回调任务', callback: '回调任务',
job: '定时任务', job: '定时任务',
workflow: '工作流' workflow: '工作流'
},
routeKey: {
routeLabel: '路由策略',
routeForm: '请输入路由策略',
items: {
consistentHash: '一致性哈希',
random: '随机',
lru: 'LRU',
round: '轮询'
}
},
taskBatchStatus: {
label: '执行状态',
form: '请选择执行状态',
items: {
waiting: '待处理',
running: '运行中',
success: '处理成功',
fail: '处理失败',
stop: '任务停止',
cancel: '取消'
}
},
jobOperationReason: {
label: '操作原因',
form: '请选择执行状态',
items: {
none: '',
taskExecutionTimeout: '任务执行超时',
notClient: '无客户端节点',
closed: '任务已关闭',
discard: '任务丢弃',
overlay: '任务被覆盖',
notExecutionTask: '无可执行任务项',
taskExecutionError: '任务执行期间发生非预期异常',
mannerStop: '手动停止',
workflowConditionNodeExecutionError: '条件节点执行异常',
jobTaskInterrupted: '任务中断',
workflowCallbackNodeExecutionError: '回调节点执行异常',
workflowNodeNoRequired: '无需处理',
workflowNodeClosedSkipExecution: '节点关闭跳过执行',
workflowDecisionFailed: '判定未通过'
}
} }
}, },
request: { request: {
@ -691,12 +734,6 @@ const local: App.I18n.Schema = {
fixed: '固定时间', fixed: '固定时间',
cron: 'CRON表达式', cron: 'CRON表达式',
random: '随机等待' random: '随机等待'
},
routeKeyItem: {
consistentHash: '一致性哈希',
random: '随机',
lru: 'LRU',
round: '轮询'
} }
}, },
workflow: { workflow: {
@ -774,7 +811,12 @@ const local: App.I18n.Schema = {
retryInterval: '请输入重试间隔' retryInterval: '请输入重试间隔'
}, },
addJobTask: '新增定时任务', addJobTask: '新增定时任务',
editJobTask: '编辑定时任务' editJobTask: '编辑定时任务',
triggerTypeItem: {
fixed: '固定时间',
cron: 'CRON表达式',
workflow: '工作流'
}
} }
}, },
form: { form: {

View File

@ -1,8 +1,8 @@
import { request } from '../request'; import { request } from '../request';
/** get JobTask page */ /** get JobTask page */
export function fetchGetJobTaskPage(params?: Api.JobTask.JobTaskSearchParams) { export function fetchGetJobTaskPage(params?: Api.Job.JobSearchParams) {
return request<Api.JobTask.JobTaskList>({ return request<Api.Job.JobList>({
url: '/job/page/list', url: '/job/page/list',
method: 'get', method: 'get',
params params
@ -10,7 +10,7 @@ export function fetchGetJobTaskPage(params?: Api.JobTask.JobTaskSearchParams) {
} }
/** add JobTask */ /** add JobTask */
export function fetchAddJobTask(params?: Api.JobTask.JobTask) { export function fetchAddJobTask(params?: Api.Job.Job) {
return request<boolean>({ return request<boolean>({
url: '/job/page/list', url: '/job/page/list',
method: 'post', method: 'post',
@ -19,7 +19,7 @@ export function fetchAddJobTask(params?: Api.JobTask.JobTask) {
} }
/** edit JobTask */ /** edit JobTask */
export function fetchEditJobTask(params?: Api.JobTask.JobTask) { export function fetchEditJobTask(params?: Api.Job.Job) {
return request<boolean>({ return request<boolean>({
url: '/job/page/list', url: '/job/page/list',
method: 'put', method: 'put',

34
src/typings/api.d.ts vendored
View File

@ -69,6 +69,18 @@ declare namespace Api {
/** record status */ /** record status */
status?: EnableStatus | null; status?: EnableStatus | null;
} & T; } & T;
/** 1: 一致性Hash 2: 随机 3: LRU 4: 轮询 */
type RouteKey = 1 | 2 | 3 | 4;
/** 1、待处理 2、运行中 3、成功 4、失败 5、停止 6、取消 */
type TaskBatchStatus = 1 | 2 | 3 | 4 | 5 | 6;
/**
* 1 2 3JOB已关闭 4 5 6 7 8 9 10 11 12
* 13 14
*/
type OperationReason = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14;
} }
/** /**
@ -730,7 +742,7 @@ declare namespace Api {
/** 退避策略 */ /** 退避策略 */
backOff: BackOff; backOff: BackOff;
/** 路由策略 */ /** 路由策略 */
routeKey: RouteKey; routeKey: Common.RouteKey;
/** 最大重试次数 */ /** 最大重试次数 */
maxRetryCount: number; maxRetryCount: number;
/** 间隔时间 */ /** 间隔时间 */
@ -766,9 +778,6 @@ declare namespace Api {
/** 1: 延迟等级 2: 固定时间 3: CRON表达式 4: 随机等待 */ /** 1: 延迟等级 2: 固定时间 3: CRON表达式 4: 随机等待 */
type BackOff = 1 | 2 | 3 | 4; type BackOff = 1 | 2 | 3 | 4;
/** 1: 一致性Hash 2: 随机 3: LRU 4: 轮询 */
type RouteKey = 1 | 2 | 3 | 4;
} }
/** /**
@ -791,7 +800,7 @@ declare namespace Api {
/** 状态 */ /** 状态 */
workflowStatus: EnableStatusNumber; workflowStatus: EnableStatusNumber;
/** 触发类型 */ /** 触发类型 */
triggerType: number; triggerType: Job.TriggerType;
/** 间隔时长 */ /** 间隔时长 */
triggerInterval: string; triggerInterval: string;
/** 超时时间 */ /** 超时时间 */
@ -812,11 +821,11 @@ declare namespace Api {
* *
* backend api module: "jobTask" * backend api module: "jobTask"
*/ */
namespace JobTask { namespace Job {
type CommonSearchParams = Pick<Common.PaginatingCommonParams, 'page' | 'size'>; type CommonSearchParams = Pick<Common.PaginatingCommonParams, 'page' | 'size'>;
/** JobTask */ /** Job */
type JobTask = Common.CommonRecord<{ type Job = Common.CommonRecord<{
/** 组名称 */ /** 组名称 */
groupName: string; groupName: string;
/** 任务名称 */ /** 任务名称 */
@ -858,9 +867,9 @@ declare namespace Api {
}>; }>;
/** JobTask search params */ /** JobTask search params */
type JobTaskSearchParams = CommonType.RecordNullable< type JobSearchParams = CommonType.RecordNullable<
Pick< Pick<
Api.JobTask.JobTask, Api.Job.Job,
| 'groupName' | 'groupName'
| 'jobName' | 'jobName'
| 'argsStr' | 'argsStr'
@ -882,7 +891,10 @@ declare namespace Api {
>; >;
/** JobTask list */ /** JobTask list */
type JobTaskList = Common.PaginatingQueryRecord<JobTask>; type JobList = Common.PaginatingQueryRecord<Job>;
/** 2、固定时间 3、CRON表达式 99、工作流 */
type TriggerType = 2 | 3 | 99;
} }
/** /**

54
src/typings/app.d.ts vendored
View File

@ -309,6 +309,49 @@ declare namespace App {
job: string; job: string;
workflow: string; workflow: string;
}; };
routeKey: {
routeLabel: string;
routeForm: string;
items: {
consistentHash: string;
random: string;
lru: string;
round: string;
};
};
taskBatchStatus: {
label: string;
form: string;
items: {
waiting: string;
running: string;
success: string;
fail: string;
stop: string;
cancel: string;
};
};
jobOperationReason: {
label: string;
form: string;
items: {
none: string;
taskExecutionTimeout: string;
notClient: string;
closed: string;
discard: string;
overlay: string;
notExecutionTask: string;
taskExecutionError: string;
mannerStop: string;
workflowConditionNodeExecutionError: string;
jobTaskInterrupted: string;
workflowCallbackNodeExecutionError: string;
workflowNodeNoRequired: string;
workflowNodeClosedSkipExecution: string;
workflowDecisionFailed: string;
};
};
}; };
request: { request: {
logout: string; logout: string;
@ -859,12 +902,6 @@ declare namespace App {
cron: string; cron: string;
random: string; random: string;
}; };
routeKeyItem: {
consistentHash: string;
random: string;
lru: string;
round: string;
};
}; };
workflow: { workflow: {
title: string; title: string;
@ -942,6 +979,11 @@ declare namespace App {
}; };
addJobTask: string; addJobTask: string;
editJobTask: string; editJobTask: string;
triggerTypeItem: {
fixed: string;
cron: string;
workflow: string;
};
}; };
}; };
form: { form: {

View File

@ -13,7 +13,7 @@ interface Props {
/** the type of operation */ /** the type of operation */
operateType: NaiveUI.TableOperateType; operateType: NaiveUI.TableOperateType;
/** the edit row data */ /** the edit row data */
rowData?: Api.JobTask.JobTask | null; rowData?: Api.Job.Job | null;
} }
const props = defineProps<Props>(); const props = defineProps<Props>();
@ -40,7 +40,7 @@ const title = computed(() => {
}); });
type Model = Pick< type Model = Pick<
Api.JobTask.JobTask, Api.Job.Job,
| 'groupName' | 'groupName'
| 'jobName' | 'jobName'
| 'argsStr' | 'argsStr'

View File

@ -12,7 +12,7 @@ interface Emits {
const emit = defineEmits<Emits>(); const emit = defineEmits<Emits>();
const model = defineModel<Api.JobTask.JobTaskSearchParams>('model', { required: true }); const model = defineModel<Api.Job.JobSearchParams>('model', { required: true });
function reset() { function reset() {
emit('reset'); emit('reset');

View File

@ -3,14 +3,10 @@ import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue';
import CronInput from '@sa/cron-input'; import CronInput from '@sa/cron-input';
import { useFormRules, useNaiveForm } from '@/hooks/common/form'; import { useFormRules, useNaiveForm } from '@/hooks/common/form';
import OperateDrawer from '@/components/common/operate-drawer.vue'; import OperateDrawer from '@/components/common/operate-drawer.vue';
import RouteKey from '@/components/common/route-key.vue';
import { $t } from '@/locales'; import { $t } from '@/locales';
import { fetchAddRetryScene, fetchEditRetryScene, fetchGetAllGroupNameList } from '@/service/api'; import { fetchAddRetryScene, fetchEditRetryScene, fetchGetAllGroupNameList } from '@/service/api';
import { import { DelayLevel, backOffRecordOptions, enableStatusNumberOptions } from '@/constants/business';
DelayLevel,
backOffRecordOptions,
enableStatusNumberOptions,
routeKeyRecordOptions
} from '@/constants/business';
import { translateOptions, translateOptions2 } from '@/utils/common'; import { translateOptions, translateOptions2 } from '@/utils/common';
import { useAppStore } from '@/store/modules/app'; import { useAppStore } from '@/store/modules/app';
@ -265,13 +261,8 @@ watch(
clearable clearable
/> />
</NFormItem> </NFormItem>
<NFormItem :label="$t('page.retryScene.routeKey')" path="routeKey"> <NFormItem :label="$t('common.routeKey.routeLabel')" path="routeKey">
<NSelect <RouteKey v-model:value="model.routeKey" />
v-model:value="model.routeKey"
:placeholder="$t('page.retryScene.form.routeKey')"
:options="translateOptions(routeKeyRecordOptions)"
clearable
/>
</NFormItem> </NFormItem>
<NFormItem :label="$t('page.retryScene.backOff')" path="backOff"> <NFormItem :label="$t('page.retryScene.backOff')" path="backOff">
<NSelect <NSelect

View File

@ -16,16 +16,6 @@ const emit = defineEmits<Emits>();
const model = defineModel<Api.RetryScene.SceneSearchParams>('model', { required: true }); const model = defineModel<Api.RetryScene.SceneSearchParams>('model', { required: true });
/** 组列表 */
// const groupNameList = ref<string[]>([]);
/** 场景列表 */
// const sceneNameList = ref<string[]>([]);
// async function getGroupNameList() {
// const res = await fetchGetAllGroupNameList();
// groupNameList.value = res.data as string[];
// }
function reset() { function reset() {
emit('reset'); emit('reset');
} }
@ -33,43 +23,14 @@ function reset() {
function search() { function search() {
emit('search'); emit('search');
} }
// async function handleGroupNameUpdate(groupName: string) {
// if (groupName) {
// const res = await fetchGetRetrySceneList({ groupName });
// sceneNameList.value = res.data!.map((scene: Api.RetryScene.Scene) => scene.sceneName);
// } else {
// model.value.sceneName = '';
// sceneNameList.value = [];
// }
// }
// onMounted(() => {
// getGroupNameList();
// });
</script> </script>
<template> <template>
<SearchForm :model="model" @search="search" @reset="reset"> <SearchForm :model="model" @search="search" @reset="reset">
<NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.groupName')" path="userName" class="pr-24px"> <NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.groupName')" path="userName" class="pr-24px">
<!-- <NSelect-->
<!-- v-model:value="model.groupName"-->
<!-- :placeholder="$t('page.retryScene.form.groupName')"-->
<!-- :options="translateOptions2(groupNameList)"-->
<!-- clearable-->
<!-- filterable-->
<!-- @update:value="handleGroupNameUpdate"-->
<!-- />-->
<SelectGroup v-model="model.groupName" /> <SelectGroup v-model="model.groupName" />
</NFormItemGi> </NFormItemGi>
<NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.sceneName')" path="userName" class="pr-24px"> <NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.sceneName')" path="userName" class="pr-24px">
<!-- <NSelect-->
<!-- v-model:value="model.sceneName"-->
<!-- :placeholder="$t('page.retryScene.form.sceneName')"-->
<!-- :options="translateOptions2(sceneNameList)"-->
<!-- clearable-->
<!-- />-->
<SelectScene v-model:value="model.sceneName" :group-name="model.groupName as string" /> <SelectScene v-model:value="model.sceneName" :group-name="model.groupName as string" />
</NFormItemGi> </NFormItemGi>
</SearchForm> </SearchForm>

View File

@ -2,6 +2,7 @@
import { ref } from 'vue'; import { ref } from 'vue';
import { $t } from '@/locales'; import { $t } from '@/locales';
import SelectGroup from '@/components/common/select-group.vue'; import SelectGroup from '@/components/common/select-group.vue';
import TaskBatchStatus from '@/components/common/task-batch-status.vue';
import { fetchGetWorkflowNameList } from '@/service/api'; import { fetchGetWorkflowNameList } from '@/service/api';
@ -36,10 +37,10 @@ async function groupNameUpdate(groupName: string) {
<template> <template>
<SearchForm :model="model" @search="search" @reset="reset"> <SearchForm :model="model" @search="search" @reset="reset">
<NFormItemGi span="24 s:12 m:6" :label="$t('page.workflowBatch.groupName')" path="userName" class="pr-24px"> <NFormItemGi span="24 s:12 m:6" :label="$t('page.workflowBatch.groupName')" path="groupName" class="pr-24px">
<SelectGroup v-model:value="model.groupName" @update:value="groupNameUpdate" /> <SelectGroup v-model:value="model.groupName" @update:value="groupNameUpdate" />
</NFormItemGi> </NFormItemGi>
<NFormItemGi span="24 s:12 m:6" :label="$t('page.workflowBatch.workflowName')" path="userName" class="pr-24px"> <NFormItemGi span="24 s:12 m:6" :label="$t('page.workflowBatch.workflowName')" path="workflowName" class="pr-24px">
<NSelect <NSelect
v-model:value="model.workflowId" v-model:value="model.workflowId"
:placeholder="$t('page.workflowBatch.form.workflowName')" :placeholder="$t('page.workflowBatch.form.workflowName')"
@ -50,8 +51,8 @@ async function groupNameUpdate(groupName: string) {
filterable filterable
/> />
</NFormItemGi> </NFormItemGi>
<NFormItemGi span="24 s:12 m:6" :label="$t('page.workflowBatch.taskBatchStatus')" path="userName" class="pr-24px"> <NFormItemGi span="24 s:12 m:6" :label="$t('common.taskBatchStatus.label')" path="taskBatchStatus" class="pr-24px">
<NInput v-model:value="model.taskBatchStatus" :placeholder="$t('page.workflowBatch.form.taskBatchStatus')" /> <TaskBatchStatus v-model:value="model.taskBatchStatus" />
</NFormItemGi> </NFormItemGi>
</SearchForm> </SearchForm>
</template> </template>

View File

@ -1,9 +1,10 @@
<script setup lang="tsx"> <script setup lang="tsx">
import { NButton, NPopconfirm } from 'naive-ui'; import { NButton, NPopconfirm, NTag } from 'naive-ui';
import { fetchGetWorkflowPageList } from '@/service/api'; import { fetchGetWorkflowPageList } from '@/service/api';
import { $t } from '@/locales'; import { $t } from '@/locales';
import { useAppStore } from '@/store/modules/app'; import { useAppStore } from '@/store/modules/app';
import { useTable, useTableOperate } from '@/hooks/common/table'; import { useTable, useTableOperate } from '@/hooks/common/table';
import { enableStatusNumberRecord, triggerTypeRecord } from '@/constants/business';
import WorkflowSearch from './modules/workflow-search.vue'; import WorkflowSearch from './modules/workflow-search.vue';
const appStore = useAppStore(); const appStore = useAppStore();
@ -53,13 +54,29 @@ const { columns, columnChecks, data, getData, loading, mobilePagination, searchP
key: 'workflowStatus', key: 'workflowStatus',
title: $t('page.workflow.workflowStatus'), title: $t('page.workflow.workflowStatus'),
align: 'left', align: 'left',
minWidth: 120 minWidth: 120,
render: row => {
if (!row.workflowStatus) {
return null;
}
const label = $t(enableStatusNumberRecord[row.workflowStatus!]);
return <NTag type="primary">{label}</NTag>;
}
}, },
{ {
key: 'triggerType', key: 'triggerType',
title: $t('page.workflow.triggerType'), title: $t('page.workflow.triggerType'),
align: 'left', align: 'left',
minWidth: 120 minWidth: 120,
render: row => {
if (!row.triggerType) {
return null;
}
const label = $t(triggerTypeRecord[row.triggerType!]);
return <NTag type="primary">{label}</NTag>;
}
}, },
{ {
key: 'triggerInterval', key: 'triggerInterval',

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { $t } from '@/locales'; import { $t } from '@/locales';
import { translateOptions } from '@/utils/common'; import { translateOptions } from '@/utils/common';
import { retryTaskStatusTypeOptions } from '@/constants/business'; import { enableStatusNumberOptions } from '@/constants/business';
import SelectGroup from '@/components/common/select-group.vue'; import SelectGroup from '@/components/common/select-group.vue';
defineOptions({ defineOptions({
@ -38,7 +38,7 @@ function search() {
<NSelect <NSelect
v-model:value="model.workflowStatus" v-model:value="model.workflowStatus"
:placeholder="$t('page.workflow.form.workflowStatus')" :placeholder="$t('page.workflow.form.workflowStatus')"
:options="translateOptions(retryTaskStatusTypeOptions)" :options="translateOptions(enableStatusNumberOptions)"
/> />
</NFormItemGi> </NFormItemGi>
</SearchForm> </SearchForm>