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') } return Promise.reject(error) } ) 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 adminLogin(credentials) { return service.post('/admin/login', credentials) } export default service