feat(sj_1.0.0): 新增重试场景

This commit is contained in:
opensnail 2024-04-21 09:47:13 +08:00
parent d57ab2a954
commit 62b5152d86
8 changed files with 78 additions and 19 deletions

View File

@ -93,3 +93,11 @@ export const groupConfigYesOrNoRecord: Record<Api.GroupConfig.YesOrNoType, App.I
1: 'common.yesOrNo.yes'
};
export const groupConfigYesOrNoOptions = transformRecordToNumberOption(groupConfigYesOrNoRecord, true);
export const backOffRecord: Record<Api.RetryScene.BackOff, App.I18n.I18nKey> = {
1: 'page.retryScene.backOffItem.delayLevel',
2: 'page.retryScene.backOffItem.fixed',
3: 'page.retryScene.backOffItem.cron',
4: 'page.retryScene.backOffItem.random'
};
export const backOffRecordOptions = transformRecordToNumberOption(backOffRecord, true);

View File

@ -632,7 +632,13 @@ const local: App.I18n.Schema = {
backOff: 'Please enter Backoff strategy'
},
addScene: 'Add Scenes',
editScene: 'Add Scenes'
editScene: 'Add Scenes',
backOffItem: {
delayLevel: '延迟等级',
fixed: '固定时间',
cron: 'CRON表达式',
random: '随机等待'
}
}
},
form: {

View File

@ -628,7 +628,13 @@ const local: App.I18n.Schema = {
backOff: '请输入退避策略'
},
addScene: '新增场景',
editScene: '编辑场景'
editScene: '编辑场景',
backOffItem: {
delayLevel: '延迟等级',
fixed: '固定时间',
cron: 'CRON表达式',
random: '随机等待'
}
}
},
form: {

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

@ -629,7 +629,9 @@ declare namespace Api {
/** 状态 */
sceneStatus: EnableStatusNumber;
/** 退避策略 */
backOff: number;
backOff: BackOff;
/** 路由策略 */
routeKey: RouteKey;
/** 最大重试次数 */
maxRetryCount: number;
/** 间隔时间 */
@ -640,8 +642,6 @@ declare namespace Api {
executorTimeout: number;
/** 描述 */
description: string;
/** 路由策略 */
routeKey: number;
}>;
/** scene search params */
@ -664,5 +664,11 @@ declare namespace Api {
/** scene list */
type SceneList = Common.PaginatingQueryRecord<Scene>;
/** 1: 延迟等级 2: 固定时间 3: CRON表达式 4: 随机等待 */
type BackOff = 1 | 2 | 3 | 4;
/** 1: 一致性Hash 2: 随机 3: LRU 4: 轮询 */
type RouteKey = 1 | 2 | 3 | 4;
}
}

View File

@ -802,6 +802,12 @@ declare namespace App {
};
addScene: string;
editScene: string;
backOffItem: {
delayLevel: string;
fixed: string;
cron: string;
random: string;
};
};
};
form: {

View File

@ -223,7 +223,7 @@ watch(visible, () => {
<template>
<OperateDrawer v-model="visible" :title="title" @handle-submit="handleSubmit">
<NForm ref="formRef" :model="model" :rules="rules">
<NFormItem :label="$t('page.notifyConfig.groupName')" path="name">
<NFormItem :label="$t('page.notifyConfig.groupName')" path="groupName">
<NSelect
v-model:value="model.groupName"
:placeholder="$t('page.notifyConfig.form.groupName')"

View File

@ -1,10 +1,11 @@
<script setup lang="ts">
import { computed, reactive, watch } from 'vue';
import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue';
import { useFormRules, useNaiveForm } from '@/hooks/common/form';
import OperateDrawer from '@/components/common/operate-drawer.vue';
import { $t } from '@/locales';
import { fetchAddRetryScene, fetchEditRetryScene } from '@/service/api';
import { enableStatus01Options } from '@/constants/business';
import { fetchAddRetryScene, fetchEditRetryScene, fetchGetAllGroupNameList } from '@/service/api';
import { backOffRecordOptions, enableStatus01Options } from '@/constants/business';
import { translateOptions, translateOptions2 } from '@/utils/common';
defineOptions({
name: 'SceneOperateDrawer'
@ -17,6 +18,8 @@ interface Props {
rowData?: Api.RetryScene.Scene | null;
}
const groupNameList = ref<string[]>([]);
const props = defineProps<Props>();
interface Emits {
@ -62,16 +65,27 @@ function createDefaultModel(): Model {
groupName: '',
sceneName: '',
sceneStatus: 1,
backOff: 0,
backOff: 1,
maxRetryCount: 0,
triggerInterval: '',
deadlineRequest: 0,
executorTimeout: 0,
description: '',
routeKey: 0
routeKey: 1
};
}
onMounted(() => {
nextTick(() => {
getGroupNameList();
});
});
async function getGroupNameList() {
const res = await fetchGetAllGroupNameList();
groupNameList.value = res.data as string[];
}
type RuleKey = Extract<
keyof Model,
| 'groupName'
@ -186,9 +200,6 @@ watch(visible, () => {
<template>
<OperateDrawer v-model="visible" :title="title" @handle-submit="handleSubmit">
<NForm ref="formRef" :model="model" :rules="rules">
<NFormItem :label="$t('page.retryScene.groupName')" path="groupName">
<NInput v-model:value="model.groupName" :placeholder="$t('page.retryScene.form.groupName')" />
</NFormItem>
<NFormItem :label="$t('page.retryScene.sceneName')" path="sceneName">
<NInput v-model:value="model.sceneName" :placeholder="$t('page.retryScene.form.sceneName')" />
</NFormItem>
@ -204,6 +215,22 @@ watch(visible, () => {
</NSpace>
</NRadioGroup>
</NFormItem>
<NFormItem :label="$t('page.retryScene.groupName')" path="groupName">
<NSelect
v-model:value="model.groupName"
:placeholder="$t('page.retryScene.form.groupName')"
:options="translateOptions2(groupNameList)"
clearable
/>
</NFormItem>
<NFormItem :label="$t('page.retryScene.backOff')" path="systemTaskType">
<NSelect
v-model:value="model.backOff"
:placeholder="$t('page.retryScene.form.backOff')"
:options="translateOptions(backOffRecordOptions)"
clearable
/>
</NFormItem>
</NForm>
<template #footer>
<NSpace :size="16">

View File

@ -25,13 +25,13 @@ function search() {
<template>
<SearchForm :model="model" @search="search" @reset="reset">
<NFormItemGi span="24 s:12 m:6" :label="$t('page.scene.scene.groupName')" path="userName" class="pr-24px">
<NInput v-model:value="model.groupName" :placeholder="$t('page.scene.scene.form.groupName')" />
<NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.groupName')" path="userName" class="pr-24px">
<NInput v-model:value="model.groupName" :placeholder="$t('page.retryScene.form.groupName')" />
</NFormItemGi>
<NFormItemGi span="24 s:12 m:6" :label="$t('page.scene.scene.sceneName')" path="userName" class="pr-24px">
<NInput v-model:value="model.sceneName" :placeholder="$t('page.scene.scene.form.sceneName')" />
<NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.sceneName')" path="userName" class="pr-24px">
<NInput v-model:value="model.sceneName" :placeholder="$t('page.retryScene.form.sceneName')" />
</NFormItemGi>
<NFormItemGi span="24 s:12 m:6" :label="$t('page.scene.scene.sceneStatus')" path="userName" class="pr-24px">
<NFormItemGi span="24 s:12 m:6" :label="$t('page.retryScene.sceneStatus')" path="userName" class="pr-24px">
<!-- <NInput v-model:value="model.sceneStatus" :placeholder="$t('page.scene.scene.form.sceneStatus')" />-->
</NFormItemGi>
</SearchForm>