123456789101112131415161718192021222324252627282930313233343536 |
- import env from "@/config.js"
- import {useUserStore} from "@/hooks/useUserStore";
- import {useEnvStore} from "@/hooks/useEnvStore"
- /**
- * 请求拦截
- * @param {Object} http
- */
- export const requestInterceptors = (vm) => {
- uni.$uv.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
- const {token, isAgreeProtocol} = useUserStore()
- // 'NoToken' url 自动适配
- if (config.custom?.autoFitNoToken && (!token.value || config.custom?.withoutToken)) {
- config.url = config.url + 'NoToken'
- }
- // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
- config.data = config.data || {}
- config.header = config.header || {}
- // 补充header信息
- config.header['X-Requested-With'] = 'XMLHttpRequest';
- config.header['type'] = env.identifier
- if (isAgreeProtocol.value) {
- // NOTE: 这里在明确用户同意协议后才访问系统信息,否则有可能提前出现权限询问,导致平台审核被拒!
- const {systemInfo} = useEnvStore()
- for (const [key, value] of Object.entries(systemInfo.value)) {
- config.header[key] = value
- }
- }
- // 可以在此通过vm引用vuex中的变量,具体值在store.state中
- if (!config.custom?.withoutToken && token.value) {
- config.header['Authorization'] = `Bearer ${token.value}`
- }
- return config
- }, (config) => // 可使用async await 做异步操作
- Promise.reject(config))
- }
|