1
This commit is contained in:
25
src/utils/extension/detect_extension.ts
Normal file
25
src/utils/extension/detect_extension.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import {STORE_REPLY_EVENTS, STORE_SEND_EVENTS} from "./type";
|
||||
import useExtensionStore from "@/store/extension";
|
||||
|
||||
/**
|
||||
* 检擦扩展是否安装
|
||||
*/
|
||||
export const detectExtension = () => {
|
||||
let timer: any = null;
|
||||
|
||||
// 定义响应处理器
|
||||
const handleResponse = (event: any) => {
|
||||
// 移除监听,释放内存
|
||||
window.removeEventListener(STORE_SEND_EVENTS.PING, handleResponse);
|
||||
clearTimeout(timer);
|
||||
useExtensionStore.getState().setInstalled(true)
|
||||
};
|
||||
|
||||
// 1. 开始监听扩展的回传信号
|
||||
window.addEventListener(STORE_REPLY_EVENTS.PONG, handleResponse);
|
||||
|
||||
timer = setInterval(() => {
|
||||
// 持续发送 PING 指令
|
||||
window.dispatchEvent(new CustomEvent(STORE_SEND_EVENTS.PING));
|
||||
}, 2000);
|
||||
}
|
||||
15
src/utils/extension/type.ts
Normal file
15
src/utils/extension/type.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* 发送给扩展的信息 (Web -> Extension)
|
||||
*/
|
||||
export const STORE_SEND_EVENTS = {
|
||||
// 查询扩展是否安装
|
||||
PING: "STORE_AI_EVT_WEB_PING",
|
||||
};
|
||||
|
||||
/**
|
||||
* 扩展返回的信息 (Extension -> Web)
|
||||
*/
|
||||
export const STORE_REPLY_EVENTS = {
|
||||
// 确认已安装
|
||||
PONG: "STORE_AI_EVT_EXT_PONG",
|
||||
};
|
||||
71
src/utils/reqeust.ts
Normal file
71
src/utils/reqeust.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import axios, {AxiosError, AxiosRequestConfig, AxiosResponse} from "axios"
|
||||
import useUserStore from "@/store/user";
|
||||
|
||||
const baseURl = process.env.NEXT_PUBLIC_API_URL as string
|
||||
|
||||
const service = axios.create({
|
||||
baseURL: baseURl,
|
||||
timeout: 30000
|
||||
})
|
||||
|
||||
//请求拦截器
|
||||
service.interceptors.request.use((config) => {
|
||||
//
|
||||
//当数据为formData,自动修改请求头
|
||||
if ((config.data instanceof FormData)) {
|
||||
(config as any).headers = {"Content-Type": "multipart/form-data"}
|
||||
}
|
||||
let token = useUserStore.getState().token
|
||||
if (token) {
|
||||
(config.headers).Authorization = `Bearer ${token}`
|
||||
}
|
||||
return config
|
||||
}, (error: AxiosError) => {
|
||||
return Promise.reject(error)
|
||||
})
|
||||
|
||||
//响应拦截器
|
||||
|
||||
service.interceptors.response.use((config: AxiosResponse) => {
|
||||
const {code, data} = config.data
|
||||
|
||||
if ([1, '200'].includes(code)) {
|
||||
return data
|
||||
//当为文件流时
|
||||
} else if (config.headers['content-types'] == 'application/octet-stream') {
|
||||
return config.data
|
||||
} else {
|
||||
// Message.error(message);
|
||||
return Promise.reject(config.data)
|
||||
}
|
||||
}, error => {
|
||||
if (error.message == 'Network Error') {
|
||||
// Toast.error("网络异常")
|
||||
}
|
||||
return Promise.reject()
|
||||
})
|
||||
|
||||
|
||||
function requestPost(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||||
return service.post(url, data, config)
|
||||
}
|
||||
function requestPatch(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||||
return service.patch(url, data, config)
|
||||
}
|
||||
|
||||
|
||||
function requestGet(url: string, params: any = {}) {
|
||||
return service.get(url, {params})
|
||||
}
|
||||
|
||||
function requestDelete(url: string, data = {}) {
|
||||
return service.delete(url, {data: data})
|
||||
}
|
||||
|
||||
let request = {
|
||||
get: requestGet,
|
||||
post: requestPost,
|
||||
delete: requestDelete,
|
||||
patch: requestPatch,
|
||||
}
|
||||
export default request
|
||||
Reference in New Issue
Block a user