/* * @Author: Rindy * @Date: 2021-04-25 15:58:21 * @LastEditors: Rindy * @LastEditTime: 2021-05-08 15:49:54 * @Description: 注释 */ /* code message -5 系统繁忙,请稍后再试! -4 跨服务请求失败 -3 缺少必要参数 5005 场景为空 5012 数据不正常 5018 zip文件只能有一层目录或无目录 5019 必须有且仅有一个obj和mtl文件 5020 贴图需控制在1.5M以内,obj文件需要控制在20M以内。 5021 场景密钥不正确 5025 数据包不存在,请先打成zip包 5039 画墙重建模型失败 5043 打包zip失败 5059 该压缩包无可用obj或者mtl文件 5060 obj文件名应为mesh.obj 5062 无可用jpg文件 7004 热点数据不能为空! 7005 查询不到热点数据! 7006 目录不存在! 7007 文件格式不正确 7009 球幕视频文件不存在 7010 相机或者相机详情不存在 7012 上传的文件名错误 7013 上传失败 7015 仅支持.zip文件上传 7016 仅支持.mp4格式文件 7018 压缩包内请勿包含文件夹 4001 无token,请重新登录 4002 token不合法 4003 用户未登录 */ import axios from 'axios' import browser from './browser' let fetch = null Promise.prototype.done = Promise.prototype.then Promise.prototype.fail = Promise.prototype.catch // TextDecoder polyfills for lower browser if (undefined === window.TextEncoder) { window.TextEncoder = class _TextEncoder { encode(s) { return unescape(encodeURIComponent(s)) .split('') .map(function (val) { return val.charCodeAt() }) } } window.TextDecoder = class _TextDecoder { decode(code_arr) { return decodeURIComponent(escape(String.fromCharCode.apply(null, code_arr))) } } } const http = { retry(func, retries = 0, delay = 1000) { return new Promise((resolve, reject) => { func() .then(resolve) .catch(error => { if (retries <= 1) { reject(error) } else { setTimeout(() => { http.retry(func, retries - 1, delay) .then(resolve) .catch(reject) }, delay) } }) }) }, get(url) { return fetch.get(url) }, getImage(url, retries = 3) { return http.retry( () => new Promise((resolve, reject) => { let img = new Image() img.crossOrigin = 'anonymous' img.src = url img.onload = function () { resolve(img) } img.onerror = function () { reject(`[${url}] load fail`) } }), retries ) }, getText(url) { return fetch.get(url, { responseType: 'text', }) }, getBueffer(url) { return fetch.get(url, { responseType: 'arraybuffer', }) }, getBlob(url) { return fetch.get(url, { responseType: 'blob', }) }, post(url, data) { return fetch.post(url, data) }, postFile(url, data) { const form = new FormData() let cb = null if (data.onUploadProgress) { cb = data.onUploadProgress delete data.onUploadProgress } for (let key in data) { if (key === 'files' && data[key].length > 0) { for (let i = 0; i < data[key].length; i++) { let file = data[key][i] if (file instanceof File) { form.append(key, file) } else if (file.file) { if (file.filename) { form.append(key, file.file, file.filename) } else { form.append(key, file.file) } } else { console.warn('file is wong !', data) } } } else if (key == 'file' || key === 'filename') { if (key == 'file') { if (data.filename) { form.append('file', data[key], data.filename) } else { form.append('file', data[key]) } } } else { form.append(key, data[key]) } } return fetch.post(url, form, { headers: { 'Content-Type': 'multipart/form-data', }, onUploadProgress: cb, }) }, } export function setup(options = {}) { fetch = axios.create({ baseURL: options.server || '/', }) fetch.interceptors.request.use( config => { let token = browser.valueFromUrl('token') || localStorage.getItem('token') || '' if (token) { config.headers['token'] = token } return config }, error => { return Promise.reject(error) } ) fetch.interceptors.response.use( response => { // 正常的文件流 if (!/json/gi.test(response.headers['content-type'])) { return response.data } // 以文件流方式请求但是返回json,需要解析为JSON对象 if (response.request.responseType === 'arraybuffer') { let enc = new TextDecoder('utf-8') let res = JSON.parse(enc.decode(new Uint8Array(response.data))) return res } if(response.code==4008){ //用户未登录 } return response.data }, error => { if (error.response && error.response.data) { return Promise.reject(error.response) } return Promise.reject(error) } ) } export { http }