Files
juipvue/src/extend/api/api.js
“wanyongkang” 7400cc1a88 跟进上传
2024-03-20 10:55:02 +08:00

342 lines
9.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import axios from 'axios'
import qs from 'qs'
import router from '../../router'
import { Message } from 'element-ui'
import saveAs from './../lib/filesaver'
import NProgress from 'nprogress'
import './../../../static/css/nprogress.css'
var http = require('./httpurl')
function getUserToken () {
var data = window.localStorage.getItem('etorcurrentuser')
if (data) { return JSON.parse(data).Token }
return ''
}
var bmsAxios = axios.create({
// timeout: 120000,
// withCredentials: true,
baseURL: http.baseURL,
headers: {
post: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
}
})
bmsAxios.interceptors.request.use(
config => {
var data = ''
if (window.localStorage.getItem('etorcurrentuser')) {
data = window.localStorage.getItem('etorcurrentuser')
}
if (data == '') {
config.headers.token = ''
// eslint-disable-next-line no-use-before-define
config.headers.sid = sid || 0
} else {
config.headers.token = JSON.parse(data).Token
// var TenantId = JSON.parse(data).Manager.TenantId;
// var OperaterID = JSON.parse(data).Manager.ID;
}
var sid = window.localStorage.getItem('sid')
config.headers.sid = sid || 0
removeNullAndUndefinedProperty(config.data)// 没用的参数不要传
removeNullAndUndefinedProperty(config.params)// 没用的参数不要传
if (config.url != 'Permission/AgainGetToken') {
window.localStorage.setItem(
'lastrequesttime',
JSON.stringify(Date.now())
) // 记录用户最后请求时间
}
// debugger
return config
},
error => {
return Promise.reject(error)
}
)
// 返回状态
let onceMessage = false
bmsAxios.interceptors.response.use(
res => {
return res
},
error => {
// 有异常
if (error.response) {
switch (error.response.status) {
case 401:
if (onceMessage) return
onceMessage = true
// Message.error("信息过期,请重新登陆");
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
break
case 204:
Message.error('暂无数据')
break
}
}
return Promise.reject(error)
}
)
export function get (url, config) {
return new Promise((resolve, reject) => {
bmsAxios.get(url, {
params: config,
paramsSerializer: function (params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
}
}).then(
response => {
if (response.data.Code == 10000) {
return resolve(response.data)
} else {
Message.error(response.data.Message || '数据异常')
}
},
err => {
reject(err)
}
)
.catch(error => {
reject(error)
})
})
}
export function post (url, params) {
return new Promise((resolve, reject) => {
bmsAxios.post(url, params).then(
response => {
if (response.data.Code === 20000) {
return
}
if (response.data.Code === 30000) {
return resolve(response.data)
}
if (response.data.Code === 10000) {
Message.success('操作成功')
return resolve(response.data)
} else {
Message.error(response.data.Message)
}
},
err => {
Message.error('操作失败')
reject(err)
}
)
.catch(error => {
Message.error('操作异常')
reject(error)
})
})
}
export function put (url, params) {
return new Promise((resolve, reject) => {
bmsAxios.put(url, params).then(
response => {
resolve(response.data)
},
err => {
reject(err)
}
)
.catch(error => {
reject(error)
})
})
}
export function del (url, config) {
return new Promise((resolve, reject) => {
bmsAxios.delete(url, { params: config }).then(
response => {
resolve(response.data)
},
err => {
reject(err)
}
)
.catch(error => {
reject(error)
})
})
}
/** 使用 get HTTP Method 下载文件 */
export function getDownloadFile (url, params, name) {
NProgress.start()
return new Promise((resolve, reject) => {
bmsAxios
.get(url, {
params: {
...params,
params: params
},
responseType: 'blob'
})
.then(response => {
// 确定最终文件名
const fileNameHeader = 'x-suggested-filename'
let suggestedFileName = response.headers[fileNameHeader] || name
if (suggestedFileName) { suggestedFileName = decodeURIComponent(suggestedFileName) }
const effectiveFileName =
suggestedFileName === undefined ? 'untitled' : suggestedFileName
// 长度为零给出提示,扔出错误
// eslint-disable-next-line eqeqeq
if (response.data.size == 0) throw new Error('文件长度为0')
// 返回json进行解析获取Message扔出错误
// eslint-disable-next-line eqeqeq
if (response.data.type == 'application/json') {
let reader = new FileReader()
reader.onload = function (event) {
var message = JSON.parse(event.target.result)
reject(new Error(message.Message)) // 拒绝
}
reader.readAsText(response.data)
} else {
saveAs(response.data, effectiveFileName)
resolve() // 解决
}
})
.catch(e => reject(e)).finally(function () {
NProgress.done()
}) // 拒绝
})
}
export function all (urlArr) { // 并发请求
if (urlArr.length > 6) {
// eslint-disable-next-line no-throw-literal
throw '当前不支持数量大于6个的并发请求'
}
return new Promise((resolve, reject) => {
axios.all(urlArr).then(
axios.spread((v0, v1, v2, v3, v4, v5) => {
let ret = {}
arguments.forEach((item, idx) => {
if (item) { ret[`ret${idx}`] = item }
})
// eslint-disable-next-line no-undef
resolve(item)
}),
err => {
reject(err)
}
)
.catch(error => {
reject(error)
})
})
}
export function axiosHttp (url, params, type = 'get') {
return new Promise((resolve, reject) => {
axios[type](url, { params: params }).then(
response => {
resolve(response.data)
},
err => {
reject(err)
}
).catch(error => {
reject(error)
})
})
}
function removeNullAndUndefinedProperty (model) { // 移除对象中值为null、undefined的属性
if (model) {
for (let key in model) {
if (model[key] === null || typeof (model[key]) === 'undefined') {
delete model[key]
}
}
}
}
function createFileInput (accept, onSelect) {
var lastFileInput = document.getElementById('f1_id')
if (lastFileInput != null) {
document.body.removeChild(lastFileInput)
}
lastFileInput = document.createElement('input')
lastFileInput.type = 'file'
lastFileInput.name = 'f1'
lastFileInput.id = 'f1_id'
accept && (lastFileInput.accept = accept)
lastFileInput.setAttribute('style', 'display:none;')
document.body.appendChild(lastFileInput)
lastFileInput.onchange = function (e) {
var f = lastFileInput.files[0]
onSelect && onSelect(f)
}
return lastFileInput
}
export function getUuid (length) {
return Number(Math.random().toString().substr(3, length) + Date.now()).toString(36)
}
// 通过axios上传文件
export function upload (url, uconfig) {
// eslint-disable-next-line no-redeclare
var uconfig = uconfig || {}
var params = uconfig.params || {}
var accept = uconfig.accept || 'image/gif, image/jpeg,image/jpg,image/png,image/*'
var onProgress = uconfig.onProgress || function () { }
var onStart = uconfig.onStart || function () { }
var uuid = uconfig.uuid || getUuid(10)
let config = {
headers: {
'Content-Type': 'multipart/form-data',
'token': getUserToken(),
'sid': 0
},
transformRequest: [function (data) {
return data
}],
onUploadProgress: e => {
var completeProgress = ((e.loaded / e.total * 100) | 0)
onProgress && onProgress(uuid, completeProgress)
console.log('onUploadProgress:' + completeProgress)
}
}
let formData = new FormData()
for (let key of Object.keys(params)) {
formData.append(key, params[key] !== null ? params[key] : '')
}
return new Promise((resolve, reject) => {
var uploadAxios = axios.create({
// withCredentials: true,
baseURL: http.baseURL
})
uploadAxios.post(url, formData, config).then(
response => { resolve(response.data) },
err => { reject(err) }
).catch(error => { reject(error) })
})
}
export default {
baseURL: http.baseURL,
phpURL: http.phpURL,
get,
post,
del,
put,
upload, // :httpfile.upload,
getDownloadFile,
all (urlArr) { // 并发请求
return all(urlArr)
}
}