import request from './index' import { getOrganizationId } from '../utils/organizationContext' // 下载接口绕开 axios,得自己带令牌与当前公司,否则 401 / 400。 // 令牌沿用拦截器同款读法(localStorage),避免在 API 模块里依赖 Pinia 激活时序。 function downloadHeaders() { const token = localStorage.getItem('wmms_token') const organizationId = getOrganizationId() return { ...(token ? { Authorization: `Bearer ${token}` } : {}), ...(organizationId ? { 'X-Organization-ID': String(organizationId) } : {}) } } export const materialsApi = { getAll(params = {}) { return request.get('/materials', { params }) }, getById(id) { return request.get(`/materials/${id}`) }, checkDuplicates(data) { return request.post('/materials/duplicate-check', data) }, create(data) { return request.post('/materials', data) }, update(id, data) { return request.put(`/materials/${id}`, data) }, obsolete(id) { return request.post(`/materials/${id}/obsolete`) }, restore(id) { return request.post(`/materials/${id}/restore`) }, uploadImage(formData) { return request.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) }, importFile(formData) { // silent:校验失败的明细要自己弹窗展示,不让拦截器先弹一句笼统提示 return request.post('/material-import', formData, { headers: { 'Content-Type': 'multipart/form-data' }, silent: true }) }, downloadImportTemplate() { // 下载走原生 fetch:响应是文件流,axios 拦截器只认 JSON 的 code 字段 return fetch('/api/material-import/template', { headers: downloadHeaders() }) } }