优化页面、修复BUG
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user