文字游戏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.0 KiB

import axios from 'axios'
const API_BASE_URL = '/api'
const instance = axios.create({
baseURL: API_BASE_URL,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
instance.interceptors.request.use(
(config) => {
const token = localStorage.getItem('auth_token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => Promise.reject(error)
)
instance.interceptors.response.use(
(response) => response.data,
(error) => {
if (error.response?.status === 401) {
localStorage.removeItem('auth_token')
localStorage.removeItem('user')
window.location.href = '/login'
}
return Promise.reject(error.response?.data || error.message)
}
)
export const DailyMissionStatus = {
Pending: 0,
InProgress: 1,
Completed: 2,
Claimed: 3
} as const
export type DailyMissionStatus = typeof DailyMissionStatus[keyof typeof DailyMissionStatus]
export const RewardType = {
Pill: 1,
Equipment: 2,
Exp: 3,
Money: 4
} as const
export type RewardType = typeof RewardType[keyof typeof RewardType]
export interface MissionReward {
rewardType: RewardType
rewardTypeName: string
itemId: number
itemName: string
count: number
}
export interface DailyMission {
id: number
characterId: number
missionId: number
missionName: string
missionTitle: string
missionDescription: string
spendTimeMinutes: number
status: DailyMissionStatus
startTime?: string
endTime?: string
isFromYesterday: boolean
assignedDate: string
rewards: MissionReward[]
}
export const dailyMissionApi = {
getList: (): Promise<DailyMission[]> => {
return instance.get('/dailyMission/list')
},
accept: (dailyMissionId: number): Promise<boolean> => {
return instance.post(`/dailyMission/${dailyMissionId}/accept`)
},
claim: (dailyMissionId: number): Promise<boolean> => {
return instance.post(`/dailyMission/${dailyMissionId}/claim`)
}
}
export default instance