|
|
@@ -0,0 +1,70 @@
|
|
|
+import { useAppStore } from '@/stores/app'
|
|
|
+import { createUniAppAxiosAdapter } from '@uni-helper/axios-adapter'
|
|
|
+import axios from 'axios'
|
|
|
+
|
|
|
+const instance = axios.create({
|
|
|
+ baseURL: import.meta.env.VITE_API_URL,
|
|
|
+ adapter: createUniAppAxiosAdapter(),
|
|
|
+})
|
|
|
+
|
|
|
+export default {
|
|
|
+ get: async <T>(uri: string, params?: object) => {
|
|
|
+ return (await instance.get<T>(uri, { params })).data
|
|
|
+ },
|
|
|
+ post: async <T>(uri: string, data: object = {}) => {
|
|
|
+ return (await instance.post<T>(uri, data)).data
|
|
|
+ },
|
|
|
+ put: async <T>(uri: string, data: object) => {
|
|
|
+ return (await instance.put<T>(uri, data)).data
|
|
|
+ },
|
|
|
+ uploadFile: async <T>(uri: string, filePath: string) => {
|
|
|
+ return new Promise<T>((resolve, reject) => {
|
|
|
+ uni.uploadFile({
|
|
|
+ url: import.meta.env.VITE_API_URL + uri,
|
|
|
+ header: {
|
|
|
+ Authorization: `Bearer ${useAppStore().token}`,
|
|
|
+ },
|
|
|
+ filePath,
|
|
|
+ name: 'file',
|
|
|
+ success: (res) => {
|
|
|
+ // json序列化
|
|
|
+ resolve(JSON.parse(res.data) as T)
|
|
|
+ },
|
|
|
+ fail: (error) => {
|
|
|
+ reject(error)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+}
|
|
|
+
|
|
|
+instance.interceptors.response.use(
|
|
|
+ (response) => {
|
|
|
+ if (response.data.code) {
|
|
|
+ uni.showToast({
|
|
|
+ title: response.data.message,
|
|
|
+ icon: 'fail',
|
|
|
+ duration: 2000,
|
|
|
+ })
|
|
|
+ return Promise.reject(new Error(response.data.message))
|
|
|
+ }
|
|
|
+ return response
|
|
|
+ },
|
|
|
+ async (error) => {
|
|
|
+ if (error.response.data.code === 401) {
|
|
|
+ const appStore = useAppStore()
|
|
|
+ await appStore.login()
|
|
|
+ return instance.request(error.config)
|
|
|
+ }
|
|
|
+
|
|
|
+ return Promise.reject(error)
|
|
|
+ },
|
|
|
+)
|
|
|
+
|
|
|
+instance.interceptors.request.use((config) => {
|
|
|
+ const appStore = useAppStore()
|
|
|
+ if (appStore.token) {
|
|
|
+ config.headers.set('Authorization', `Bearer ${appStore.token}`)
|
|
|
+ }
|
|
|
+ return config
|
|
|
+})
|