diff --git a/src/api/ops/alertPolicy.ts b/src/api/ops/alertPolicy.ts
index 048faa4..79b2b31 100644
--- a/src/api/ops/alertPolicy.ts
+++ b/src/api/ops/alertPolicy.ts
@@ -5,8 +5,8 @@ export const fetchPolicyList = (data: {
page?: number,
page_size?: number,
keyword?: string,
- enabled?: string,
- priority?: number[],
+ enabled?: boolean,
+ priority?: number,
created_at_start?: string,
created_at_end?: string,
order_by?: string,
@@ -107,3 +107,8 @@ export const fetchSeverityList = (data: {
page_size?: number;
enabled?: string;
}) => request.get("/Alert/v1/severity/list", { params: data });
+
+/** 获取工单模板下拉选项 */
+export const fetchFeedbackTemplateOptions = (data?: {
+ status?: 'active' | 'inactive'
+}) => request.get('/Feedback/v1/templates/options', { params: data || {} });
diff --git a/src/views/ops/pages/alert/level/components/LevelDetailDialog.vue b/src/views/ops/pages/alert/level/components/LevelDetailDialog.vue
index 5cb8f3b..771724c 100644
--- a/src/views/ops/pages/alert/level/components/LevelDetailDialog.vue
+++ b/src/views/ops/pages/alert/level/components/LevelDetailDialog.vue
@@ -8,56 +8,53 @@
:footer="false"
>
-
-
- {{ levelDetail.name }}
-
-
- {{ levelDetail.code }}
-
-
- {{ levelDetail.priority }}
-
-
-
-
-
{{ levelDetail.color }}
-
-
-
- {{ levelDetail.icon || '-' }}
-
-
-
- {{ levelDetail.enabled ? '启用' : '禁用' }}
-
-
-
-
- {{ levelDetail.is_default ? '是' : '否' }}
-
-
- (系统预置的默认级别)
-
-
-
- {{ levelDetail.description || '-' }}
-
-
- {{ formatDate(levelDetail.created_at) }}
-
-
- {{ formatDate(levelDetail.updated_at) }}
-
-
+
+
+
+
+
+
+ {{ levelDetail.priority }}
+
+
+ {{ levelDetail.icon || '-' }}
+
+
+
+
+
{{ levelDetail.color || '-' }}
+
+
+
+ {{ levelDetail.description || '-' }}
+
+
+
+
+
+ {{ formatDate(levelDetail.created_at) }}
+
+
+ {{ formatDate(levelDetail.updated_at) }}
+
+
+
+
@@ -143,5 +140,39 @@ export default {
diff --git a/src/views/ops/pages/alert/level/components/LevelFormDialog.vue b/src/views/ops/pages/alert/level/components/LevelFormDialog.vue
index 5ab446d..db139e7 100644
--- a/src/views/ops/pages/alert/level/components/LevelFormDialog.vue
+++ b/src/views/ops/pages/alert/level/components/LevelFormDialog.vue
@@ -8,90 +8,67 @@
@update:visible="handleVisibleChange"
:confirm-loading="submitting"
>
-
-
-
+
+
+ 建议统一使用语义化代码(如 critical、warning、info),便于规则与派单配置复用。
+
+
+ 基础信息
+
+
+
+
+
+
+
+
+
+
+ 默认级别的代码不可修改
+
+
+
+
+
+ 显示配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+ 禁用后不会参与告警展示与匹配
+
-
-
-
-
- 默认级别的代码不可修改
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启用
- 禁用
-
-
-
-
-
+
+
@@ -245,4 +222,27 @@ export default {
diff --git a/src/views/ops/pages/alert/setting/components/PolicyCreateDialog.vue b/src/views/ops/pages/alert/setting/components/PolicyCreateDialog.vue
new file mode 100644
index 0000000..d77feec
--- /dev/null
+++ b/src/views/ops/pages/alert/setting/components/PolicyCreateDialog.vue
@@ -0,0 +1,377 @@
+
+
+
+ 基础信息
+
+
+
+
+
+
+
+
+
+
+ 1 (最高)
+ 2
+ 3
+ 4
+ 5 (最低)
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+ 模板与拓展配置
+
+
+
+
+ {{ template.name }}
+
+
+
+
+
+
+ 请输入有效的 JSON 格式配置
+
+
+ 自动建单与派单
+
+
+
+ 开启
+ 关闭
+
+
+
+
+
+ 不使用特定模板
+
+ {{ item.template_name }} ({{ item.template_code }})
+
+
+
+ {{ formData.auto_create_ticket ? '建议默认选择可用模板,未选择时将按 0 处理' : '请先开启自动建单后再选择工单模板' }}
+
+
+
+
+
+
+
+
+
+ {{ record.name }}
+
+
+
+
+
+
+
+ {{ user.name || user.username }} ({{ user.username }})
+
+
+
+
+
+
+
+
+
+
+
+ {{ user.name || user.username }} ({{ user.username }})
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ops/pages/alert/setting/components/PolicyFormDialog.vue b/src/views/ops/pages/alert/setting/components/PolicyFormDialog.vue
index 025b37c..6277285 100644
--- a/src/views/ops/pages/alert/setting/components/PolicyFormDialog.vue
+++ b/src/views/ops/pages/alert/setting/components/PolicyFormDialog.vue
@@ -1,9 +1,10 @@
-
- 模板与标签
+
+ 模板与拓展配置
-
+
- 请输入有效的 JSON 格式键值对
+ 请输入有效的 JSON 格式配置
@@ -120,16 +121,26 @@
-
-
+
+ :loading="feedbackTemplateLoading"
+ :disabled="!formData.auto_create_ticket"
+ >
+ 不使用特定模板
+
+ {{ item.template_name }} ({{ item.template_code }})
+
+
- 0 表示不使用特定模板
+ {{ formData.auto_create_ticket ? '建议默认选择可用模板,未选择时将按 0 处理' : '请先开启自动建单后再选择工单模板' }}
@@ -139,16 +150,17 @@
:pagination="false"
:bordered="true"
size="medium"
+ class="dispatch-table"
>
-
+
{{ record.name }}
-
+
-
-
-
- 默认处理人:
-
-
- {{ user.name || user.username }} ({{ user.username }})
-
-
-
-
+
+
+
+
+
+ {{ user.name || user.username }} ({{ user.username }})
+
+
@@ -205,15 +213,15 @@
@@ -483,3 +538,9 @@ export default {
name: 'PolicyFormDialog',
}
+
+
diff --git a/src/views/ops/pages/alert/setting/index.vue b/src/views/ops/pages/alert/setting/index.vue
index 27763a2..56dbb88 100644
--- a/src/views/ops/pages/alert/setting/index.vue
+++ b/src/views/ops/pages/alert/setting/index.vue
@@ -91,23 +91,29 @@
-
-
+
+
- 新建告警策略
+ 新建策略
-
+
+
+
+
import { ref, reactive, computed, onMounted } from 'vue'
-import { Message, Modal } from '@arco-design/web-vue'
+import { Message } from '@arco-design/web-vue'
import { IconPlus } from '@arco-design/web-vue/es/icon'
import type { FormItem } from '@/components/search-form/types'
import SearchTable from '@/components/search-table/index.vue'
@@ -133,6 +139,7 @@ import {
updatePolicy,
} from '@/api/ops/alertPolicy'
import PolicyFormDialog from './components/PolicyFormDialog.vue'
+import PolicyCreateDialog from './components/PolicyCreateDialog.vue'
import RuleManageDialog from './components/RuleManageDialog.vue'
// 状态管理
@@ -163,6 +170,7 @@ const currentPolicyName = ref('')
// 弹窗可见性
const policyFormVisible = ref(false)
+const createPolicyVisible = ref(false)
const ruleManageVisible = ref(false)
// 获取策略列表
@@ -174,24 +182,26 @@ const fetchPolicyData = async () => {
page: pagination.current,
page_size: pagination.pageSize,
keyword: formModel.value.keyword || undefined,
- order_by: 'created_at',
- order: 'desc',
}
// 处理启用状态筛选
if (formModel.value.enabled && formModel.value.enabled !== 'all') {
- params.enabled = formModel.value.enabled
+ params.enabled = formModel.value.enabled === 'true'
}
// 处理优先级筛选
- if (formModel.value.priority) {
- params.priority = [formModel.value.priority]
+ if (formModel.value.priority !== undefined && formModel.value.priority !== null) {
+ params.priority = Number(formModel.value.priority)
}
const res = await fetchPolicyList(params)
-
- tableData.value = res.details?.data || []
- pagination.total = res.details?.total || 0
+
+ // 优先适配分页层字段:total/page/page_size/data,并兼容历史返回结构
+ const pageData = res?.data?.data ?? res?.details?.data ?? res?.data ?? []
+ const pageTotal = res?.data?.total ?? res?.details?.total ?? res?.total ?? 0
+
+ tableData.value = Array.isArray(pageData) ? pageData : []
+ pagination.total = Number(pageTotal) || 0
} catch (error) {
console.error('获取告警策略列表失败:', error)
Message.error('获取告警策略列表失败')
@@ -255,8 +265,7 @@ const handleRefresh = () => {
// 新建策略
const handleCreate = () => {
- currentPolicyId.value = undefined
- policyFormVisible.value = true
+ createPolicyVisible.value = true
}
// 编辑策略