Skip to content

Commit 517b4e0

Browse files
committed
将过滤功能从客户端下沉到服务端,避免bug并提高处理效率
1 parent 4c9089d commit 517b4e0

File tree

2 files changed

+27
-61
lines changed

2 files changed

+27
-61
lines changed

client/src/stores/app.ts

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ export interface ModuleRecord {
6262
eventData?: any
6363
}
6464

65+
// 告警变更记录类型定义
66+
export interface AlarmChangeItem {
67+
id: string
68+
service: string
69+
change: string
70+
timestamp: string
71+
details: string
72+
}
73+
6574
export const useAppStore = defineStore('app', () => {
6675
// 状态
6776
const currentView = ref<'home' | 'changelog'>('home')
@@ -197,52 +206,6 @@ export const useAppStore = defineStore('app', () => {
197206
scheduledStart.value = time
198207
}
199208

200-
const createReleasePlan = async (planData: any) => {
201-
try {
202-
loading.value = true
203-
error.value = null
204-
const response = await apiService.createReleasePlan(planData)
205-
scheduledReleases.value.push(response.data)
206-
return response.data
207-
} catch (err: any) {
208-
error.value = err.message || '创建发布计划失败'
209-
throw err
210-
} finally {
211-
loading.value = false
212-
}
213-
}
214-
215-
const updateReleasePlan = async (id: string, planData: any) => {
216-
try {
217-
loading.value = true
218-
error.value = null
219-
const response = await apiService.updateReleasePlan(id, planData)
220-
const index = scheduledReleases.value.findIndex(r => r.id === id)
221-
if (index !== -1) {
222-
scheduledReleases.value[index] = response.data
223-
}
224-
return response.data
225-
} catch (err: any) {
226-
error.value = err.message || '更新发布计划失败'
227-
throw err
228-
} finally {
229-
loading.value = false
230-
}
231-
}
232-
233-
const cancelReleasePlan = async (id: string) => {
234-
try {
235-
loading.value = true
236-
error.value = null
237-
await apiService.cancelReleasePlan(id)
238-
scheduledReleases.value = scheduledReleases.value.filter(r => r.id !== id)
239-
} catch (err: any) {
240-
error.value = err.message || '取消发布计划失败'
241-
throw err
242-
} finally {
243-
loading.value = false
244-
}
245-
}
246209

247210
return {
248211
// 状态
@@ -272,9 +235,6 @@ export const useAppStore = defineStore('app', () => {
272235
setSelectedSlice,
273236
setMetricsOpen,
274237
setSelectedVersion,
275-
setScheduledStart,
276-
createReleasePlan,
277-
updateReleasePlan,
278-
cancelReleasePlan
238+
setScheduledStart
279239
}
280240
})

client/src/views/AlertsView.vue

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
<!-- 告警列表 -->
5151
<div v-else class="alerts-list">
5252
<div
53-
v-for="alert in filteredAlerts"
53+
v-for="alert in alerts"
5454
:key="alert.id"
5555
class="alert-card"
5656
>
@@ -229,6 +229,7 @@ const showAnalysisDialog = ref(false)
229229
const selectedAlert = ref<AlertIssue | null>(null)
230230
const alertDetail = ref<AlertDetail | null>(null)
231231
const alerts = ref<AlertIssue[]>([])
232+
const allAlerts = ref<AlertIssue[]>([]) // 存储所有告警数据用于计数
232233
const loading = ref(false)
233234
const detailLoading = ref(false)
234235
const error = ref<string | null>(null)
@@ -238,30 +239,25 @@ const filters = computed(() => [
238239
{
239240
key: 'all',
240241
label: 'All',
241-
count: alerts.value.length
242+
count: allAlerts.value.length
242243
},
243244
{
244245
key: 'open',
245246
label: 'Open',
246-
count: alerts.value.filter(alert => alert.state === 'Open').length
247+
count: allAlerts.value.filter(alert => alert.state === 'Open').length
247248
},
248249
{
249250
key: 'closed',
250251
label: 'Closed',
251-
count: alerts.value.filter(alert => alert.state === 'Closed').length
252+
count: allAlerts.value.filter(alert => alert.state === 'Closed').length
252253
}
253254
])
254255
255-
const filteredAlerts = computed(() => {
256-
if (filterState.value === 'all') return alerts.value
257-
if (filterState.value === 'open') return alerts.value.filter(alert => alert.state === 'Open')
258-
if (filterState.value === 'closed') return alerts.value.filter(alert => alert.state === 'Closed')
259-
return alerts.value
260-
})
261256
262257
// 方法
263258
const setFilterState = (state: 'all' | 'open' | 'closed') => {
264259
filterState.value = state
260+
loadAlerts() // 触发重新加载
265261
}
266262
267263
const formatRelativeTime = (timestamp: string) => {
@@ -384,9 +380,19 @@ const loadAlerts = async () => {
384380
loading.value = true
385381
error.value = null
386382
387-
const response = await mockApi.getAlerts(undefined, 10)
383+
// 根据 filterState 构造 API 参数
384+
const apiState = filterState.value === 'all' ? undefined :
385+
filterState.value === 'open' ? 'Open' : 'Closed'
386+
387+
const response = await mockApi.getAlerts(undefined, 10, apiState)
388388
alerts.value = response.items
389389
390+
// 如果是首次加载(allAlerts为空),则加载所有数据用于计数
391+
if (allAlerts.value.length === 0) {
392+
const allResponse = await mockApi.getAlerts(undefined, 100) // 获取更多数据用于计数
393+
allAlerts.value = allResponse.items
394+
}
395+
390396
console.log('告警数据加载成功:', response)
391397
} catch (err) {
392398
console.error('加载告警数据失败:', err)

0 commit comments

Comments
 (0)