You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
import axios from 'axios'
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
const noticeError = (msg) => {
|
|
// Message.error(msg)
|
|
ElMessage({
|
|
message: msg,
|
|
type: 'error',
|
|
})
|
|
}
|
|
const guid = () => {
|
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
var r = (Math.random() * 16) | 0,
|
|
v = c == 'x' ? r : (r & 0x3) | 0x8
|
|
return v.toString(16)
|
|
})
|
|
}
|
|
const instance = axios.create({
|
|
baseURL: '/',
|
|
timeout: 10000,
|
|
responseType: 'json',
|
|
})
|
|
|
|
// HTTP request拦截
|
|
instance.interceptors.request.use(
|
|
(config) => {
|
|
const method = config.url
|
|
const params = config.data
|
|
config.url = '/jsonrpc'
|
|
config.data = {
|
|
id: guid(),
|
|
jsonrpc: '2.0',
|
|
method,
|
|
params,
|
|
session: localStorage.getItem('m9z_session_id'),
|
|
timestampin: Date.now().toString(),
|
|
}
|
|
return config
|
|
},
|
|
(error) => {
|
|
return Promise.reject(error)
|
|
},
|
|
)
|
|
|
|
// HTTP response拦截
|
|
instance.interceptors.response.use(
|
|
(response) => {
|
|
if (response.data.error.code === 200) {
|
|
return Promise.resolve(response.data.result)
|
|
} else {
|
|
// 只有 401 时才清除 session 并触发密码弹框,其他错误走通用提示
|
|
if (response.data.error.code === 401) {
|
|
localStorage.removeItem('m9z_session_id')
|
|
window.dispatchEvent(new CustomEvent('m9z:session-expired'))
|
|
return Promise.reject(new Error('session expired'))
|
|
}
|
|
noticeError(response.data.error.message)
|
|
return Promise.reject(response.data.error.message)
|
|
}
|
|
},
|
|
(error) => {
|
|
noticeError(error.message)
|
|
return Promise.reject(error)
|
|
},
|
|
)
|
|
|
|
export default instance
|