修复公告模块的TypeScript错误和API调用
- 使用 apiClient 替换不存在的 apiRequest - 修复可能为 undefined 的对象访问 - 添加可选链操作符和默认值 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import { apiRequest } from '@/utils/apiRequest'
|
import { apiClient } from '@/shared/api/client'
|
||||||
|
import type { ApiResponse } from '@/shared/types/types'
|
||||||
|
|
||||||
export interface Announcement {
|
export interface Announcement {
|
||||||
id: number
|
id: number
|
||||||
@@ -29,14 +30,11 @@ export interface PaginatedResult<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchAnnouncements(params: AnnouncementListParams = {}): Promise<PaginatedResult<Announcement>> {
|
export async function fetchAnnouncements(params: AnnouncementListParams = {}): Promise<PaginatedResult<Announcement>> {
|
||||||
return apiRequest<PaginatedResult<Announcement>>('/api/announcements', {
|
const { data } = await apiClient.get<ApiResponse<PaginatedResult<Announcement>>>('/announcements', { params })
|
||||||
method: 'GET',
|
return data.data
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchAnnouncementDetail(id: number): Promise<Announcement> {
|
export async function fetchAnnouncementDetail(id: number): Promise<Announcement> {
|
||||||
return apiRequest<Announcement>(`/api/announcements/${id}`, {
|
const { data } = await apiClient.get<ApiResponse<Announcement>>(`/announcements/${id}`)
|
||||||
method: 'GET',
|
return data.data
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,11 +68,11 @@ function getCategoryLabel(category: string) {
|
|||||||
size="small"
|
size="small"
|
||||||
class="category-tag"
|
class="category-tag"
|
||||||
:style="{
|
:style="{
|
||||||
borderColor: getCategoryInfo(announcement.category).color,
|
borderColor: getCategoryInfo(announcement.category)?.color || '#94a3b8',
|
||||||
color: getCategoryInfo(announcement.category).color
|
color: getCategoryInfo(announcement.category)?.color || '#94a3b8'
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<el-icon><component :is="getCategoryInfo(announcement.category).icon" /></el-icon>
|
<el-icon><component :is="getCategoryInfo(announcement.category)?.icon || Bell" /></el-icon>
|
||||||
{{ getCategoryLabel(announcement.category) }}
|
{{ getCategoryLabel(announcement.category) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag v-if="announcement.is_pinned" type="warning" effect="plain" size="small">置顶</el-tag>
|
<el-tag v-if="announcement.is_pinned" type="warning" effect="plain" size="small">置顶</el-tag>
|
||||||
|
|||||||
@@ -110,13 +110,13 @@ function getCategoryLabel(category: string) {
|
|||||||
<div class="announcement-header">
|
<div class="announcement-header">
|
||||||
<div class="announcement-meta">
|
<div class="announcement-meta">
|
||||||
<el-tag
|
<el-tag
|
||||||
:type="getCategoryInfo(item.category).value === 'notice' ? 'primary' : 'info'"
|
:type="getCategoryInfo(item.category)?.value === 'notice' ? 'primary' : 'info'"
|
||||||
effect="plain"
|
effect="plain"
|
||||||
size="small"
|
size="small"
|
||||||
class="category-tag"
|
class="category-tag"
|
||||||
:style="{ borderColor: getCategoryInfo(item.category).color, color: getCategoryInfo(item.category).color }"
|
:style="{ borderColor: getCategoryInfo(item.category)?.color || '#94a3b8', color: getCategoryInfo(item.category)?.color || '#94a3b8' }"
|
||||||
>
|
>
|
||||||
<el-icon><component :is="getCategoryInfo(item.category).icon" /></el-icon>
|
<el-icon><component :is="getCategoryInfo(item.category)?.icon || Bell" /></el-icon>
|
||||||
{{ getCategoryLabel(item.category) }}
|
{{ getCategoryLabel(item.category) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag v-if="item.is_pinned" type="warning" effect="plain" size="small">置顶</el-tag>
|
<el-tag v-if="item.is_pinned" type="warning" effect="plain" size="small">置顶</el-tag>
|
||||||
|
|||||||
Reference in New Issue
Block a user