This commit is contained in:
yml2213
2026-07-20 14:58:57 +08:00
commit 45db0aa4b9
50 changed files with 5861 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
import request from './request'
import type {
DashboardStats,
LoginResult,
Order,
PageResult,
Skin,
User,
} from '../types'
export const authApi = {
login: async (username: string, password: string) => {
const res = await request.post('/auth/login', { username, password })
return res.data.data as LoginResult
},
register: async (data: { username: string; password: string; nickname?: string }) => {
const res = await request.post('/auth/register', data)
return res.data.data as User
},
profile: async () => {
const res = await request.get('/auth/profile')
return res.data.data as User
},
}
export const dashboardApi = {
stats: () =>
request.get('/dashboard').then((r) => r.data.data as DashboardStats),
}
export const skinApi = {
list: (params?: Record<string, unknown>) =>
request.get('/skins', { params }).then((r) => r.data.data as PageResult<Skin>),
get: (id: number) =>
request.get(`/skins/${id}`).then((r) => r.data.data as Skin),
create: (data: Partial<Skin>) =>
request.post('/skins', data).then((r) => r.data.data as Skin),
update: (id: number, data: Partial<Skin>) =>
request.put(`/skins/${id}`, data).then((r) => r.data.data),
remove: (id: number) =>
request.delete(`/skins/${id}`).then((r) => r.data.data),
}
export const orderApi = {
list: (params?: Record<string, unknown>) =>
request.get('/orders', { params }).then((r) => r.data.data as PageResult<Order>),
create: (data: { skin_id: number; buyer_name?: string; remark?: string }) =>
request.post('/orders', data).then((r) => r.data.data as Order),
updateStatus: (id: number, status: string) =>
request.patch(`/orders/${id}/status`, { status }).then((r) => r.data.data),
}
export const userApi = {
list: (params?: Record<string, unknown>) =>
request.get('/users', { params }).then((r) => r.data.data as PageResult<User>),
create: (data: { username: string; password: string; nickname?: string; role?: string }) =>
request.post('/users', data).then((r) => r.data.data as User),
updateStatus: (id: number, status: number) =>
request.patch(`/users/${id}/status`, { status }).then((r) => r.data.data),
}
+38
View File
@@ -0,0 +1,38 @@
import axios from 'axios'
import type { ApiResponse } from '../types'
const request = axios.create({
baseURL: '/api',
timeout: 15000,
})
request.interceptors.request.use((config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
request.interceptors.response.use(
(res) => {
const body = res.data as ApiResponse
if (body.code !== 0) {
return Promise.reject(new Error(body.message || '请求失败'))
}
return res
},
(err) => {
const msg = err.response?.data?.message || err.message || '网络错误'
if (err.response?.status === 401) {
localStorage.removeItem('token')
localStorage.removeItem('user')
if (!window.location.pathname.includes('/login')) {
window.location.href = '/login'
}
}
return Promise.reject(new Error(msg))
},
)
export default request