import { BaseApi } from './baseApi.js' import api from './index.js' function parseResult(response) { let result = response && response.data if (typeof result === 'string') { try { result = JSON.parse(result) } catch (error) { throw new Error('上传失败,请重试') } } if (!response || response.statusCode !== 200 || !result || result.code !== 0) { throw new Error(result && result.msg ? result.msg : '上传失败,请重试') } return result.data } function unwrap(response) { const result = response && response.data if (!result || result.code !== 0) { throw new Error(result && result.msg ? result.msg : '请求失败,请重试') } return result.data } function getHeader(headers, name) { if (!headers || typeof headers !== 'object') return '' const expectedName = name.toLowerCase() for (const key of Object.keys(headers)) { if (key.toLowerCase() === expectedName) return String(headers[key] || '') } return '' } function isDocumentDownload(headers) { const contentType = getHeader(headers, 'content-type').split(';')[0].trim().toLowerCase() const disposition = getHeader(headers, 'content-disposition').trim() if (!contentType || !/^attachment(?:\s*;|$)/i.test(disposition)) return false if (contentType === 'application/json' || contentType === 'text/json' || contentType.endsWith('+json') || contentType === 'text/html' || contentType === 'application/xhtml+xml') return false return true } export function uploadTeamBackgroundFile(teamId, filePath, onProgress = () => {}) { return new Promise((resolve, reject) => { const task = uni.uploadFile({ url: `${BaseApi}/core/user/team/${teamId}/background-files`, filePath, name: 'file', header: { token: uni.getStorageSync('token') }, success: response => { try { resolve(parseResult(response)) } catch (error) { reject(error) } }, fail: reject }) task.onProgressUpdate(progress => onProgress(progress.progress)) }) } export const listTeamBackgroundFiles = teamId => api .get(`/core/user/team/${teamId}/background-files`, {}, false) .then(unwrap) export const disableTeamBackgroundFile = (teamId, fileId) => api .del(`/core/user/team/${teamId}/background-files/${fileId}`, {}, false) .then(unwrap) export const createTeamBackgroundSession = teamId => api .post(`/core/user/team/${teamId}/background-upload-session`, {}, false) .then(unwrap) export function downloadTeamBackgroundFile(teamId, fileId) { return new Promise((resolve, reject) => { let responseHeaders const task = uni.downloadFile({ url: `${BaseApi}/core/user/team/${teamId}/background-files/${fileId}/download`, header: { token: uni.getStorageSync('token') }, success: result => { const resultHeaders = result && (result.header || result.headers) if (!result || result.statusCode !== 200 || !isDocumentDownload(responseHeaders || resultHeaders)) { reject(new Error('下载失败,请重试')) return } wx.openDocument({ filePath: result.tempFilePath, showMenu: true, success: resolve, fail: reject }) }, fail: reject }) if (task && typeof task.onHeadersReceived === 'function') { task.onHeadersReceived(result => { responseHeaders = result && (result.header || result.headers) }) } }) }