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.
central-control/src/utils/rpc.js

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