feat(sj_1.3.0-beta1): 重试任务、工作流任务新增告警通知场景

This commit is contained in:
wodeyangzipingpingwuqi 2024-12-12 17:18:57 +08:00
parent a4c8916000
commit 044f731aa2
7 changed files with 70 additions and 7 deletions

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch } from 'vue'; import { nextTick, onMounted, ref, watch } from 'vue';
import CronInput from '@sa/cron-input'; import CronInput from '@sa/cron-input';
import { type FormInst, type FormItemRule } from 'naive-ui'; import { type FormInst, type FormItemRule } from 'naive-ui';
import { import {
@ -8,7 +8,7 @@ import {
workFlowNodeStatusOptions workFlowNodeStatusOptions
} from '@/constants/business'; } from '@/constants/business';
import { $t } from '@/locales'; import { $t } from '@/locales';
import { fetchGetAllGroupNameList } from '@/service/api'; import { fetchGetAllGroupNameList, fetchGetNotifyConfigSystemTaskTypeList } from '@/service/api';
import { isNotNull, parseContent, stringToContent } from '@/utils/common'; import { isNotNull, parseContent, stringToContent } from '@/utils/common';
import { useWorkflowStore } from '@/store/modules/workflow'; import { useWorkflowStore } from '@/store/modules/workflow';
import EditableInput from '@/components/common/editable-input.vue'; import EditableInput from '@/components/common/editable-input.vue';
@ -22,6 +22,7 @@ interface Props {
open?: boolean; open?: boolean;
} }
const notifyNameList = ref<CommonType.Option<number>[]>([]);
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
open: false, open: false,
modelValue: () => ({ modelValue: () => ({
@ -34,6 +35,16 @@ interface Emits {
(e: 'save', form: Workflow.NodeDataType): void; (e: 'save', form: Workflow.NodeDataType): void;
} }
onMounted(() => {
nextTick(() => {
getNotifyConfigSystemTaskTypeList();
});
});
async function getNotifyConfigSystemTaskTypeList() {
const res = await fetchGetNotifyConfigSystemTaskTypeList(4);
notifyNameList.value = res.data as CommonType.Option<number>[];
}
const emit = defineEmits<Emits>(); const emit = defineEmits<Emits>();
const store = useWorkflowStore(); const store = useWorkflowStore();
@ -225,6 +236,17 @@ const rules: Record<RuleKey, FormItemRule> = {
</NSpace> </NSpace>
</NRadioGroup> </NRadioGroup>
</NFormItem> </NFormItem>
<NFormItem path="notifyIds" label="通知场景名称">
<NSelect
v-model:value="form.notifyIds"
value-field="id"
label-field="notifyName"
placeholder="请选择告警通知名称"
:options="notifyNameList"
clearable
multiple
/>
</NFormItem>
<NFormItem path="description" label="描述"> <NFormItem path="description" label="描述">
<NInput <NInput
v-model:value="form.description" v-model:value="form.description"

View File

@ -686,6 +686,7 @@ const local: App.I18n.Schema = {
detail: 'Scene Detail', detail: 'Scene Detail',
groupName: 'Group name', groupName: 'Group name',
sceneName: 'Scene name', sceneName: 'Scene name',
notifyName: 'Notify name',
sceneStatus: 'State', sceneStatus: 'State',
backOff: 'Backoff strategy', backOff: 'Backoff strategy',
maxRetryCount: 'Maximum number of retries', maxRetryCount: 'Maximum number of retries',
@ -698,6 +699,7 @@ const local: App.I18n.Schema = {
routeKey: 'Routing strategy', routeKey: 'Routing strategy',
form: { form: {
maxRetryCount: 'Please enter Maximum number of retries', maxRetryCount: 'Please enter Maximum number of retries',
notifyName: 'Plase enter Notify name',
triggerInterval: 'Please enter Intervals(s)', triggerInterval: 'Please enter Intervals(s)',
groupName: 'Please enter Group name', groupName: 'Please enter Group name',
description: 'Please enter Describe', description: 'Please enter Describe',

View File

@ -694,6 +694,7 @@ const local: App.I18n.Schema = {
detail: '场景详情', detail: '场景详情',
groupName: '组名', groupName: '组名',
sceneName: '场景名', sceneName: '场景名',
notifyName: '告警通知名称',
sceneStatus: '状态', sceneStatus: '状态',
backOff: '退避策略', backOff: '退避策略',
maxRetryCount: '最大重试次数', maxRetryCount: '最大重试次数',
@ -705,6 +706,7 @@ const local: App.I18n.Schema = {
description: '描述', description: '描述',
routeKey: '路由策略', routeKey: '路由策略',
form: { form: {
notifyName: '请选择告警通知名称',
maxRetryCount: '请输入最大重试次数', maxRetryCount: '请输入最大重试次数',
triggerInterval: '请输入间隔时间(秒)', triggerInterval: '请输入间隔时间(秒)',
groupName: '请输入组名', groupName: '请输入组名',

View File

@ -838,6 +838,8 @@ declare namespace Api {
groupName: string; groupName: string;
/** 场景名 */ /** 场景名 */
sceneName: string; sceneName: string;
/** 通知场景ids */
notifyIds: number[];
/** 状态 */ /** 状态 */
sceneStatus: EnableStatusNumber; sceneStatus: EnableStatusNumber;
/** 退避策略 */ /** 退避策略 */
@ -903,6 +905,8 @@ declare namespace Api {
groupName: string; groupName: string;
/** 触发时间 */ /** 触发时间 */
nextTriggerAt: string; nextTriggerAt: string;
/** 告警通知场景ids */
notifyIds: number[];
/** 状态 */ /** 状态 */
workflowStatus: EnableStatusNumber; workflowStatus: EnableStatusNumber;
/** 触发类型 */ /** 触发类型 */

View File

@ -894,6 +894,7 @@ declare namespace App {
detail: string; detail: string;
groupName: string; groupName: string;
sceneName: string; sceneName: string;
notifyName: string;
sceneStatus: string; sceneStatus: string;
backOff: string; backOff: string;
maxRetryCount: string; maxRetryCount: string;
@ -905,6 +906,7 @@ declare namespace App {
description: string; description: string;
routeKey: string; routeKey: string;
form: { form: {
notifyName: string;
maxRetryCount: string; maxRetryCount: string;
triggerInterval: string; triggerInterval: string;
groupName: string; groupName: string;

View File

@ -7,6 +7,8 @@ declare namespace Workflow {
workflowName?: string; workflowName?: string;
/** 组名称 */ /** 组名称 */
groupName?: string; groupName?: string;
/** 告警通知场景ids */
notifyIds?: number[];
/** 触发类型 */ /** 触发类型 */
triggerType?: Api.Common.TriggerType; triggerType?: Api.Common.TriggerType;
/** 触发间隔 */ /** 触发间隔 */
@ -179,13 +181,13 @@ declare namespace Workflow {
taskStatus?: Api.Common.TaskBatchStatus; taskStatus?: Api.Common.TaskBatchStatus;
}; };
export type JobBatchPage = { /* export type JobBatchPage = {
total: number; total: number;
data: JobTaskType[]; data: JobTaskType[];
}; }; */
/** 任务日志 */ /** 任务日志 */
export type JobLogType = {}; /* export type JobLogType = {}; */
/** Tag */ /** Tag */
export type JobTagType = { export type JobTagType = {

View File

@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, reactive, ref, watch } from 'vue'; import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue';
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 RouteKey from '@/components/common/route-key.vue';
import { $t } from '@/locales'; import { $t } from '@/locales';
import { fetchAddRetryScene, fetchEditRetryScene } from '@/service/api'; import { fetchAddRetryScene, fetchEditRetryScene, fetchGetNotifyConfigSystemTaskTypeList } from '@/service/api';
import { DelayLevel, backOffRecordOptions, enableStatusNumberOptions } from '@/constants/business'; import { DelayLevel, backOffRecordOptions, enableStatusNumberOptions } from '@/constants/business';
import { isNotNull, translateOptions } from '@/utils/common'; import { isNotNull, translateOptions } from '@/utils/common';
@ -21,6 +21,7 @@ interface Props {
const delayLevelDesc = ref<string>('10s'); const delayLevelDesc = ref<string>('10s');
const notifyNameList = ref<CommonType.Option<number>[]>([]);
const props = defineProps<Props>(); const props = defineProps<Props>();
interface Emits { interface Emits {
@ -48,6 +49,7 @@ type Model = Pick<
Api.RetryScene.Scene, Api.RetryScene.Scene,
| 'id' | 'id'
| 'groupName' | 'groupName'
| 'notifyIds'
| 'sceneName' | 'sceneName'
| 'sceneStatus' | 'sceneStatus'
| 'backOff' | 'backOff'
@ -59,12 +61,24 @@ type Model = Pick<
| 'routeKey' | 'routeKey'
>; >;
onMounted(() => {
nextTick(() => {
getNotifyConfigSystemTaskTypeList();
});
});
async function getNotifyConfigSystemTaskTypeList() {
const res = await fetchGetNotifyConfigSystemTaskTypeList(1);
notifyNameList.value = res.data as CommonType.Option<number>[];
}
const model: Model = reactive(createDefaultModel()); const model: Model = reactive(createDefaultModel());
function createDefaultModel(): Model { function createDefaultModel(): Model {
return { return {
groupName: '', groupName: '',
sceneName: '', sceneName: '',
notifyIds: [],
sceneStatus: 1, sceneStatus: 1,
backOff: 2, backOff: 2,
maxRetryCount: 1, maxRetryCount: 1,
@ -133,6 +147,7 @@ async function handleSubmit() {
const { const {
groupName, groupName,
sceneName, sceneName,
notifyIds,
sceneStatus, sceneStatus,
backOff, backOff,
maxRetryCount, maxRetryCount,
@ -145,6 +160,7 @@ async function handleSubmit() {
const { error } = await fetchAddRetryScene({ const { error } = await fetchAddRetryScene({
groupName, groupName,
sceneName, sceneName,
notifyIds,
sceneStatus, sceneStatus,
backOff, backOff,
maxRetryCount, maxRetryCount,
@ -163,6 +179,7 @@ async function handleSubmit() {
id, id,
groupName, groupName,
sceneName, sceneName,
notifyIds,
sceneStatus, sceneStatus,
backOff, backOff,
maxRetryCount, maxRetryCount,
@ -176,6 +193,7 @@ async function handleSubmit() {
id, id,
groupName, groupName,
sceneName, sceneName,
notifyIds,
sceneStatus, sceneStatus,
backOff, backOff,
maxRetryCount, maxRetryCount,
@ -342,6 +360,17 @@ watch(
</NFormItem> </NFormItem>
</NGi> </NGi>
</NGrid> </NGrid>
<NFormItem :label="$t('page.retryScene.notifyName')" path="notifyIds">
<NSelect
v-model:value="model.notifyIds"
value-field="id"
label-field="notifyName"
:placeholder="$t('page.retryScene.form.notifyName')"
:options="notifyNameList"
clearable
multiple
/>
</NFormItem>
<NFormItem :label="$t('page.retryScene.description')" path="description"> <NFormItem :label="$t('page.retryScene.description')" path="description">
<NInput <NInput
v-model:value="model.description" v-model:value="model.description"