// Author: fruit.com.cn import service from './service' import { CONTENT_TYPE } from '@/constants' import { useUserStoreWithOut } from '@/store/modules/user' import { creatorCenterHeaders } from '@/utils/creatorImpersonation' const request = (option: AxiosConfig) => { const { url, method, params, data, headers, responseType, silent } = option const userStore = useUserStoreWithOut() // FormData 不能带 JSON 的 Content-Type,否则 axios 会把表单转成 JSON,浏览器也无法补上 boundary const isFormData = typeof FormData !== 'undefined' && data instanceof FormData // 创作者中心的请求统一带上代看目标头(超管选了代看创作者时才有值; // 后端只对具备 impersonate 权限的账号认这个头,创作者带了也不生效) const impersonationHeaders = typeof url === 'string' && url.startsWith('/admin/creator-center') ? creatorCenterHeaders() : {} return service.request({ url: url, method, params, data, responseType: responseType, silent, headers: { ...(isFormData ? {} : { 'Content-Type': CONTENT_TYPE }), [userStore.getTokenKey ?? 'Authorization']: userStore.getToken ? `Bearer ${userStore.getToken}` : '', ...impersonationHeaders, ...headers } }) } export default { get: (option: AxiosConfig) => { return request({ method: 'get', ...option }) as Promise> }, post: (option: AxiosConfig) => { return request({ method: 'post', ...option }) as Promise> }, delete: (option: AxiosConfig) => { return request({ method: 'delete', ...option }) as Promise> }, put: (option: AxiosConfig) => { return request({ method: 'put', ...option }) as Promise> }, cancelRequest: (url: string | string[]) => { return service.cancelRequest(url) }, cancelAllRequest: () => { return service.cancelAllRequest() } }