优化页面、修复BUG

This commit is contained in:
李琦
2026-06-24 17:06:22 +08:00
parent 3f653bc336
commit d5ff40e4d3
38 changed files with 1507 additions and 354 deletions

View File

@@ -174,12 +174,16 @@ export interface PostHistory {
version: number
title: string
categoryId: number
categoryName?: string
columnId?: number
columnName?: string
tagIds?: number[]
tagNames?: string[]
excerpt?: string
content?: string
isPublished: number
modifiedBy: number
modifiedByName?: string
modifiedAt: string
createdAt: string
}
@@ -202,12 +206,63 @@ export interface HotSearchKeyword {
count: number
}
// 代码类型
export interface CodeType {
id: number
name: string
category: number // 0前端 1后端 2其他
}
export const CODE_TYPE_CATEGORY_LABELS: Record<number, string> = {
0: '前端',
1: '后端',
2: '其他'
}
export const getCodeTypes = async (): Promise<CodeType[]> => {
const response = await fetch(`${API_BASE}/code-types`)
return await parseApiResponse(response)
}
export const getAdminCodeTypes = async (): Promise<CodeType[]> => {
const response = await authFetch(`${API_BASE}/admin/code-types`, { headers: getAuthHeaders() })
return await parseApiResponse(response)
}
export const createCodeType = async (data: Omit<CodeType, 'id'>): Promise<void> => {
const response = await authFetch(`${API_BASE}/admin/code-types`, {
method: 'POST',
headers: getAuthHeaders(),
body: JSON.stringify(data)
})
await parseApiResponse(response)
}
export const updateCodeType = async (id: number, data: Omit<CodeType, 'id'>): Promise<void> => {
const response = await authFetch(`${API_BASE}/admin/code-types/${id}`, {
method: 'PUT',
headers: getAuthHeaders(),
body: JSON.stringify(data)
})
await parseApiResponse(response)
}
export const deleteCodeType = async (id: number): Promise<void> => {
const response = await authFetch(`${API_BASE}/admin/code-types/${id}`, {
method: 'DELETE',
headers: getAuthHeaders()
})
await parseApiResponse(response)
}
// 代码片段相关类型
export interface Snippet {
id: string
title: string
code: string
type: string
codeTypeId?: number
codeType?: CodeType
description?: string
viewCount?: number
}
@@ -269,13 +324,27 @@ export const login = async (credentials: LoginRequest): Promise<LoginResponse> =
}
// 用户管理API
export interface GetUsersParams {
page?: number
pageSize?: number
keyword?: string
}
export const getUsersPaginated = async (params: GetUsersParams = {}): Promise<PaginationResponse<User>> => {
const page = params.page ?? 1
const pageSize = params.pageSize ?? 10
const qs = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })
if (params.keyword) qs.set('keyword', params.keyword)
const response = await authFetch(`${API_BASE}/admin/users?${qs}`, {
headers: getAuthHeaders()
})
return await parseApiResponse(response)
}
export const getUsers = async (): Promise<User[]> => {
try {
const response = await authFetch(`${API_BASE}/admin/users`, {
headers: getAuthHeaders()
})
const data = await parseApiResponse<any>(response)
return (data?.list || []) as User[]
const data = await getUsersPaginated({ page: 1, pageSize: 1000 })
return data.list
} catch (error) {
console.error('Get users error:', error)
throw error
@@ -1021,7 +1090,7 @@ export const fetchSnippet = async (id: string): Promise<Snippet> => {
}
}
export const createSnippet = async (snippetData: Omit<Snippet, 'id' | 'viewCount'>): Promise<void> => {
export const createSnippet = async (snippetData: Omit<Snippet, 'id' | 'viewCount' | 'codeType' | 'type'> & { type?: string }): Promise<void> => {
try {
const response = await authFetch(`${API_BASE}/admin/snippets`, {
method: 'POST',
@@ -1035,7 +1104,7 @@ export const createSnippet = async (snippetData: Omit<Snippet, 'id' | 'viewCount
}
}
export const updateSnippet = async (id: string, snippetData: Omit<Snippet, 'id' | 'viewCount'>): Promise<void> => {
export const updateSnippet = async (id: string, snippetData: Omit<Snippet, 'id' | 'viewCount' | 'codeType' | 'type'> & { type?: string }): Promise<void> => {
try {
const response = await authFetch(`${API_BASE}/admin/snippets/${id}`, {
method: 'PUT',
@@ -1141,10 +1210,31 @@ export const getPublicSettings = async (): Promise<PublicSettings> => {
}
}
// 操作日志筛选参数
export interface OperationLogFilters {
action?: string
method?: string
status?: number
userId?: number
startDate?: string
endDate?: string
}
// 操作日志API
export const getOperationLogs = async (page: number = 1, pageSize: number = 10): Promise<PaginationResponse<OperationLog>> => {
export const getOperationLogs = async (
page: number = 1,
pageSize: number = 10,
filters: OperationLogFilters = {}
): Promise<PaginationResponse<OperationLog>> => {
try {
const response = await authFetch(`${API_BASE}/admin/operation-logs?page=${page}&pageSize=${pageSize}`, {
const qs = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })
if (filters.action) qs.set('action', filters.action)
if (filters.method) qs.set('method', filters.method)
if (filters.status) qs.set('status', String(filters.status))
if (filters.userId) qs.set('userId', String(filters.userId))
if (filters.startDate) qs.set('startDate', filters.startDate)
if (filters.endDate) qs.set('endDate', filters.endDate)
const response = await authFetch(`${API_BASE}/admin/operation-logs?${qs}`, {
headers: getAuthHeaders()
})
return await parseApiResponse(response)
@@ -1167,10 +1257,27 @@ export interface AccessLog {
createdAt: string
}
// 访问日志筛选参数
export interface AccessLogFilters {
path?: string
region?: string
startDate?: string
endDate?: string
}
// 访问日志API
export const getAccessLogs = async (page: number = 1, pageSize: number = 10): Promise<PaginationResponse<AccessLog>> => {
export const getAccessLogs = async (
page: number = 1,
pageSize: number = 10,
filters: AccessLogFilters = {}
): Promise<PaginationResponse<AccessLog>> => {
try {
const response = await authFetch(`${API_BASE}/admin/access-logs?page=${page}&pageSize=${pageSize}`, {
const qs = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })
if (filters.path) qs.set('path', filters.path)
if (filters.region) qs.set('region', filters.region)
if (filters.startDate) qs.set('startDate', filters.startDate)
if (filters.endDate) qs.set('endDate', filters.endDate)
const response = await authFetch(`${API_BASE}/admin/access-logs?${qs}`, {
headers: getAuthHeaders()
})
return await parseApiResponse(response)