76 lines
2.0 KiB
TypeScript
76 lines
2.0 KiB
TypeScript
import { adminClient } from '@/shared/api/adminClient'
|
|
import type { ApiResponse } from '@/shared/api/types'
|
|
import type {
|
|
AdminCaptcha,
|
|
AdminLoginData,
|
|
AdminOrderDetail,
|
|
AdminOrderPage,
|
|
AdminOrderQuery,
|
|
AdminUser,
|
|
DashboardData,
|
|
} from '@/features/admin/types'
|
|
|
|
export async function fetchAdminCaptcha() {
|
|
const { data } = await adminClient.get<ApiResponse<AdminCaptcha>>('/admin/auth/captcha')
|
|
return data.data
|
|
}
|
|
|
|
export async function loginAdmin(
|
|
username: string,
|
|
password: string,
|
|
captchaId: string,
|
|
captchaCode: string
|
|
) {
|
|
const { data } = await adminClient.post<ApiResponse<AdminLoginData>>('/admin/auth/login', {
|
|
username,
|
|
password,
|
|
captcha_id: captchaId,
|
|
captcha_code: captchaCode,
|
|
})
|
|
return data.data
|
|
}
|
|
|
|
export async function fetchAdminMe() {
|
|
const { data } = await adminClient.get<ApiResponse<AdminUser>>('/admin/me')
|
|
return data.data
|
|
}
|
|
|
|
export async function logoutAdmin() {
|
|
await adminClient.post('/admin/auth/logout')
|
|
}
|
|
|
|
export async function changeAdminPassword(oldPassword: string, newPassword: string) {
|
|
await adminClient.put('/admin/admin-users/me/password', {
|
|
old_password: oldPassword,
|
|
new_password: newPassword,
|
|
})
|
|
}
|
|
|
|
export async function fetchAdminDashboard() {
|
|
const { data } = await adminClient.get<ApiResponse<DashboardData>>('/admin/dashboard')
|
|
return data.data
|
|
}
|
|
|
|
function compactParams(query: AdminOrderQuery) {
|
|
return Object.fromEntries(
|
|
Object.entries(query).filter(([, value]) => value !== '' && value != null)
|
|
)
|
|
}
|
|
|
|
export async function fetchAdminOrders(query: AdminOrderQuery) {
|
|
const { data } = await adminClient.get<ApiResponse<Partial<AdminOrderPage>>>('/admin/orders', {
|
|
params: compactParams(query),
|
|
})
|
|
return {
|
|
items: data.data.items ?? [],
|
|
total: data.data.total ?? 0,
|
|
page: data.data.page ?? query.page ?? 1,
|
|
page_size: data.data.page_size ?? query.page_size ?? 20,
|
|
}
|
|
}
|
|
|
|
export async function fetchAdminOrder(id: number | string) {
|
|
const { data } = await adminClient.get<ApiResponse<AdminOrderDetail>>(`/admin/orders/${id}`)
|
|
return data.data
|
|
}
|