import axios from 'axios' import { request } from '@/api/request' export interface MessageRecord { id: number type: string title: string subTitle: string avatar?: string content: string time: string status: 0 | 1 messageType?: number deliveryStatus?: string channelType?: string attemptCount?: number lastError?: string incidentId?: number alertRecordId?: number nextRetryAt?: string } export type MessageListType = MessageRecord[] interface ApiResponse { code?: number message?: string data?: T details?: T } /** 通知投递历史 */ export interface NotificationDeliveryRecord { id: number incident_id: number alert_record_id: number channel_id: number channel_type: string target: string subject: string content: string status: string attempt_count: number next_retry_at?: string last_error?: string trace_id?: string delivered_at?: string created_at?: string updated_at?: string } /** 投递历史查询参数 */ export interface NotificationDeliveryQuery { page?: number page_size?: number keyword?: string incident_id?: number status?: string channel_type?: string } /** 分页结果 */ export interface PageResult { total: number page: number page_size: number data: T[] } function unwrapData(response: ApiResponse | T): T { const wrapped = response as ApiResponse return (wrapped.details ?? wrapped.data ?? response) as T } /** 查询站内消息列表 */ export async function queryMessageList() { const response = await request.get>('/Alert/v1/message/list') return { data: unwrapData(response) || [] } } interface MessageStatus { ids: number[] } /** 标记站内消息已读 */ export function setMessageStatus(data: MessageStatus) { return request.post>('/Alert/v1/message/read', data) } /** 查询通知投递历史 */ export function queryNotificationDeliveryHistory(params?: NotificationDeliveryQuery) { return request.get>>('/Alert/v1/notification/deliveries', { params: params || {} }) } /** 人工补发通知 */ export function resendNotificationDelivery(id: number) { return request.post>(`/Alert/v1/notification/deliveries/${id}/resend`) } export interface ChatRecord { id: number username: string content: string time: string isCollect: boolean } export function queryChatList() { return axios.post('/api/chat/list') }