You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.1 KiB
JavaScript

import axios from 'axios'
import {useToken, useStore, useConfig, useSaveTokenType, useSessionToken} from '~/store'
const $save_token_type = useSaveTokenType()
let $token
let loading_active
const post = axios.create({
method: 'POST'
})
post.interceptors.request.use(config => {
if ($save_token_type.value === 'local') {
$token = useToken()
} else {
$token = useSessionToken()
}
config.headers['Authorization'] = 'Bearer ' + $token.value
return config
}, error => Promise.reject(error))
post.interceptors.response.use(response => {
return (response.status === 200) ? response : Promise.reject('[ERROR] response.status: ' + response.status)
}, error => Promise.reject(error))
const $config = useConfig()
export const $post = async (request, loading = false) => {
const $store = useStore()
if (loading) {
$store.loading++
if ($store.loading === 1) window.$loading().open()
}
const response = await post(request).catch((e) => {
window.$message().error($config.value.api.error_message)
})
if (loading) {
$store.loading--
if ($store.loading === 0) window.$loading().close()
}
return !!response ? response.data : false
}