Files
hunli/vite-tailwindcss/src/api/wedding.js
2026-08-02 16:11:35 +08:00

116 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import axios from 'axios'
// 婚礼纪业务 API统一走 /api 代理到 Go 后端 (:8080)
// 后端返回约定:{ code: 200, data, msg } 视为成功
const service = axios.create({
baseURL: '/api',
timeout: 15000,
})
// 请求拦截:受保护接口自动携带后台 token
service.interceptors.request.use((config) => {
const token = localStorage.getItem('admin_token')
if (token) {
config.headers = config.headers || {}
config.headers['Authorization'] = `Bearer ${token}`
}
return config
})
// 响应拦截:统一把 { code: 200, data } 形态解包
service.interceptors.response.use(
(response) => {
const body = response.data
// 后端标准包:{ code, data/msg/error }
if (body && typeof body === 'object' && 'code' in body) {
if (body.code === 200) return body
return Promise.reject(new Error(body.msg || body.error || '请求失败'))
}
// 没有 code 包裹(如 401 {error})视为失败
if (body && typeof body === 'object' && 'error' in body) {
return Promise.reject(new Error(body.error))
}
return body
},
(error) => {
const status = error?.response?.status
if (status === 401) {
localStorage.removeItem('admin_token')
localStorage.removeItem('admin_user')
}
const body = error?.response?.data
const msg = body?.error || body?.msg || error.message || '请求失败'
return Promise.reject(new Error(msg))
}
)
export function getConfig() {
return service.get('/config')
}
export function getAlbumImages() {
return service.get('/album')
}
export function saveConfig(payload) {
return service.post('/config', payload)
}
export function getUploadConfig() {
return service.get('/upload/config')
}
export function saveUploadConfig(payload) {
return service.post('/upload/config', payload)
}
export function uploadImage(file) {
const form = new FormData()
form.append('file', file)
return service.post('/upload', form, {
headers: { 'Content-Type': 'multipart/form-data' },
})
}
export function submitRsvp(form) {
return service.post('/rsvp', form)
}
export function getRsvpList() {
return service.get('/rsvp/list')
}
export function getDanmaku(params) {
return service.get('/danmaku', { params })
}
export function submitDanmaku(form) {
return service.post('/danmaku', form)
}
export function generateAiBlessing({ style }) {
return service.post('/ai/blessing', { style }, { timeout: 45000 })
}
export function getDanmakuList(params) {
return service.get('/danmaku/list', { params })
}
export function updateDanmakuStatus(id, status) {
return service.post(`/danmaku/${id}/status`, { status })
}
export function getLikeStatus(clientId) {
return service.get('/like', { params: { client_id: clientId } })
}
export function submitLike(clientId) {
return service.post('/like', { client_id: clientId })
}
export function adminLogin(credentials) {
return service.post('/admin/login', credentials)
}
export default service