Ver Fonte

feat: uview-plus http

王家程 há 10 meses atrás
pai
commit
228a7c0c92
5 ficheiros alterados com 182 adições e 109 exclusões
  1. 10 10
      src/api/userApi.ts
  2. 1 2
      src/main.ts
  3. 6 3
      src/utils/request/index.ts
  4. 88 0
      src/utils/request/up-request.ts
  5. 77 94
      types/auto-import.d.ts

+ 10 - 10
src/api/userApi.ts

@@ -10,15 +10,18 @@ import { BasicRes } from '@/models/requestTypes'
 import { ILogin, LoginRes, Employees } from '@/models/userTypes'
 
 export function login(data: ILogin) {
-  return request.post<BasicRes<LoginRes>>('auth/login', {
-    header: {
-      entcode: data.entCode,
-    },
-    data: {
+  return request.post<BasicRes<LoginRes>>(
+    'auth/login',
+    {
       account: data.account,
       password: data.password,
     },
-  })
+    {
+      header: {
+        entcode: data.entCode,
+      },
+    }
+  )
 }
 
 export function logout() {
@@ -26,8 +29,5 @@ export function logout() {
 }
 
 export function getUserInfo(data: string) {
-  return request<BasicRes<Employees>>({
-    url: `auth/employees/${data}`,
-    method: 'GET',
-  })
+  return request.get<BasicRes<Employees>>(`auth/employees/${data}`)
 }

+ 1 - 2
src/main.ts

@@ -22,11 +22,10 @@ import App from './App.vue'
 export function createApp() {
   const app = createSSRApp(App)
 
-  app.use(uviewPlus)
-
   setupI18n(app)
   setupStores(app)
   setupInterceptors(app)
+  app.use(uviewPlus)
 
   return {
     app,

+ 6 - 3
src/utils/request/index.ts

@@ -33,26 +33,29 @@ request.get = <T>(url: string, options: Omit<IRequestOptions, 'url'> = {}) => {
   })
 }
 
-request.post = <T>(url: string, options: Omit<IRequestOptions, 'url'> = {}) => {
+request.post = <T>(url: string, data = {}, options: Omit<IRequestOptions, 'url'> = {}) => {
   return request<T>({
     method: 'POST',
     url,
+    data,
     ...options,
   })
 }
 
-request.put = <T>(url: string, options: Omit<IRequestOptions, 'url'> = {}) => {
+request.put = <T>(url: string, data = {}, options: Omit<IRequestOptions, 'url'> = {}) => {
   return request<T>({
     method: 'PUT',
     url,
+    data,
     ...options,
   })
 }
 
-request.del = <T>(url: string, options: Omit<IRequestOptions, 'url'> = {}) => {
+request.del = <T>(url: string, data = {}, options: Omit<IRequestOptions, 'url'> = {}) => {
   return request<T>({
     method: 'DELETE',
     url,
+    data,
     ...options,
   })
 }

+ 88 - 0
src/utils/request/up-request.ts

@@ -0,0 +1,88 @@
+import { App } from 'vue'
+import { http, toast } from 'uview-plus'
+
+import type { ILogin } from '@/models/userTypes'
+import { useUserStore } from '@/stores/modules/userStore'
+import { checkStatus } from './checkStatus'
+
+const requestInterceptors = () => {
+  /**
+   * 请求拦截
+   * @param {Object} http
+   */
+  http.interceptors.request.use(
+    (config) => {
+      // 可使用async await 做异步操作
+      // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
+      config.data = config.data || {}
+      return config
+    },
+    (
+      config // 可使用async await 做异步操作
+    ) => Promise.reject(config)
+  )
+}
+const responseInterceptors = () => {
+  /**
+   * 响应拦截
+   * @param {Object} http
+   */
+  http.interceptors.response.use(
+    (response) => {
+      /* 对响应成功做点什么 可使用async await 做异步操作*/
+      const data = response.data
+      // 自定义参数
+      const custom = response.config?.custom
+      if (data.code !== 200 && data.code !== 201) {
+        // 服务端返回的状态码不等于200,则reject()
+        // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
+        if (custom.toast !== false) {
+          toast(data.msg)
+        }
+        // 如果需要catch返回,则进行reject
+        if (custom?.catch) {
+          return Promise.reject(data)
+        } else {
+          // 否则返回一个pending中的promise
+          return Promise.resolve(data)
+        }
+      }
+      return data || {}
+    },
+    (response) => {
+      checkStatus(response)
+      /*  对响应错误做点什么 (statusCode !== 200)*/
+      return Promise.reject(response)
+    }
+  )
+}
+
+export function setupRequest(app: App) {
+  const userStore = useUserStore()
+  http.setConfig((config) => {
+    const sysInfo = uni.getSystemInfoSync()
+    const storageLoginInfo: ILogin = userStore.storageLoginInfo
+
+    config.baseURL = import.meta.env.VITE_APP_BASE_API
+    config.timeout = 10000
+    config.custom = {
+      toast: false,
+    }
+    config.header = {
+      version: sysInfo.appVersion, // 版本号
+      platform: sysInfo.osName ?? 'app', // 所用系统
+    }
+    // entCode
+    if (storageLoginInfo && storageLoginInfo.entCode) {
+      config.header.entcode = storageLoginInfo.entCode
+    }
+    // token
+    if (userStore.token) {
+      config.header.Authorization = `Bearer ${userStore.token}`
+    }
+
+    return config
+  })
+  requestInterceptors()
+  responseInterceptors()
+}

+ 77 - 94
types/auto-import.d.ts

@@ -5,103 +5,86 @@
 // Generated by unplugin-auto-import
 export {}
 declare global {
-  const EffectScope: (typeof import('vue'))['EffectScope']
-  const computed: (typeof import('vue'))['computed']
-  const createApp: (typeof import('../src/main'))['createApp']
-  const customRef: (typeof import('vue'))['customRef']
-  const defineAsyncComponent: (typeof import('vue'))['defineAsyncComponent']
-  const defineComponent: (typeof import('vue'))['defineComponent']
-  const effectScope: (typeof import('vue'))['effectScope']
-  const getCurrentInstance: (typeof import('vue'))['getCurrentInstance']
-  const getCurrentScope: (typeof import('vue'))['getCurrentScope']
-  const h: (typeof import('vue'))['h']
-  const inject: (typeof import('vue'))['inject']
-  const isProxy: (typeof import('vue'))['isProxy']
-  const isReactive: (typeof import('vue'))['isReactive']
-  const isReadonly: (typeof import('vue'))['isReadonly']
-  const isRef: (typeof import('vue'))['isRef']
-  const markRaw: (typeof import('vue'))['markRaw']
-  const nextTick: (typeof import('vue'))['nextTick']
-  const onActivated: (typeof import('vue'))['onActivated']
-  const onAddToFavorites: (typeof import('@dcloudio/uni-app'))['onAddToFavorites']
-  const onBackPress: (typeof import('@dcloudio/uni-app'))['onBackPress']
-  const onBeforeMount: (typeof import('vue'))['onBeforeMount']
-  const onBeforeRouteLeave: (typeof import('vue-router'))['onBeforeRouteLeave']
-  const onBeforeRouteUpdate: (typeof import('vue-router'))['onBeforeRouteUpdate']
-  const onBeforeUnmount: (typeof import('vue'))['onBeforeUnmount']
-  const onBeforeUpdate: (typeof import('vue'))['onBeforeUpdate']
-  const onDeactivated: (typeof import('vue'))['onDeactivated']
-  const onError: (typeof import('@dcloudio/uni-app'))['onError']
-  const onErrorCaptured: (typeof import('vue'))['onErrorCaptured']
-  const onHide: (typeof import('@dcloudio/uni-app'))['onHide']
-  const onLaunch: (typeof import('@dcloudio/uni-app'))['onLaunch']
-  const onLoad: (typeof import('@dcloudio/uni-app'))['onLoad']
-  const onMounted: (typeof import('vue'))['onMounted']
-  const onNavigationBarButtonTap: (typeof import('@dcloudio/uni-app'))['onNavigationBarButtonTap']
-  const onNavigationBarSearchInputChanged: (typeof import('@dcloudio/uni-app'))['onNavigationBarSearchInputChanged']
-  const onNavigationBarSearchInputClicked: (typeof import('@dcloudio/uni-app'))['onNavigationBarSearchInputClicked']
-  const onNavigationBarSearchInputConfirmed: (typeof import('@dcloudio/uni-app'))['onNavigationBarSearchInputConfirmed']
-  const onNavigationBarSearchInputFocusChanged: (typeof import('@dcloudio/uni-app'))['onNavigationBarSearchInputFocusChanged']
-  const onPageNotFound: (typeof import('@dcloudio/uni-app'))['onPageNotFound']
-  const onPageScroll: (typeof import('@dcloudio/uni-app'))['onPageScroll']
-  const onPullDownRefresh: (typeof import('@dcloudio/uni-app'))['onPullDownRefresh']
-  const onReachBottom: (typeof import('@dcloudio/uni-app'))['onReachBottom']
-  const onReady: (typeof import('@dcloudio/uni-app'))['onReady']
-  const onRenderTracked: (typeof import('vue'))['onRenderTracked']
-  const onRenderTriggered: (typeof import('vue'))['onRenderTriggered']
-  const onResize: (typeof import('@dcloudio/uni-app'))['onResize']
-  const onScopeDispose: (typeof import('vue'))['onScopeDispose']
-  const onServerPrefetch: (typeof import('vue'))['onServerPrefetch']
-  const onShareAppMessage: (typeof import('@dcloudio/uni-app'))['onShareAppMessage']
-  const onShareTimeline: (typeof import('@dcloudio/uni-app'))['onShareTimeline']
-  const onShow: (typeof import('@dcloudio/uni-app'))['onShow']
-  const onTabItemTap: (typeof import('@dcloudio/uni-app'))['onTabItemTap']
-  const onThemeChange: (typeof import('@dcloudio/uni-app'))['onThemeChange']
-  const onUnhandledRejection: (typeof import('@dcloudio/uni-app'))['onUnhandledRejection']
-  const onUnload: (typeof import('@dcloudio/uni-app'))['onUnload']
-  const onUnmounted: (typeof import('vue'))['onUnmounted']
-  const onUpdated: (typeof import('vue'))['onUpdated']
-  const provide: (typeof import('vue'))['provide']
-  const reactive: (typeof import('vue'))['reactive']
-  const readonly: (typeof import('vue'))['readonly']
-  const ref: (typeof import('vue'))['ref']
-  const resolveComponent: (typeof import('vue'))['resolveComponent']
-  const shallowReactive: (typeof import('vue'))['shallowReactive']
-  const shallowReadonly: (typeof import('vue'))['shallowReadonly']
-  const shallowRef: (typeof import('vue'))['shallowRef']
-  const toRaw: (typeof import('vue'))['toRaw']
-  const toRef: (typeof import('vue'))['toRef']
-  const toRefs: (typeof import('vue'))['toRefs']
-  const toValue: (typeof import('vue'))['toValue']
-  const triggerRef: (typeof import('vue'))['triggerRef']
-  const unref: (typeof import('vue'))['unref']
-  const useAttrs: (typeof import('vue'))['useAttrs']
-  const useCssModule: (typeof import('vue'))['useCssModule']
-  const useCssVars: (typeof import('vue'))['useCssVars']
-  const useLink: (typeof import('vue-router'))['useLink']
-  const useRoute: (typeof import('vue-router'))['useRoute']
-  const useRouter: (typeof import('vue-router'))['useRouter']
-  const useSlots: (typeof import('vue'))['useSlots']
-  const watch: (typeof import('vue'))['watch']
-  const watchEffect: (typeof import('vue'))['watchEffect']
-  const watchPostEffect: (typeof import('vue'))['watchPostEffect']
-  const watchSyncEffect: (typeof import('vue'))['watchSyncEffect']
+  const EffectScope: typeof import('vue')['EffectScope']
+  const computed: typeof import('vue')['computed']
+  const createApp: typeof import('../src/main')['createApp']
+  const customRef: typeof import('vue')['customRef']
+  const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
+  const defineComponent: typeof import('vue')['defineComponent']
+  const effectScope: typeof import('vue')['effectScope']
+  const getCurrentInstance: typeof import('vue')['getCurrentInstance']
+  const getCurrentScope: typeof import('vue')['getCurrentScope']
+  const h: typeof import('vue')['h']
+  const inject: typeof import('vue')['inject']
+  const isProxy: typeof import('vue')['isProxy']
+  const isReactive: typeof import('vue')['isReactive']
+  const isReadonly: typeof import('vue')['isReadonly']
+  const isRef: typeof import('vue')['isRef']
+  const markRaw: typeof import('vue')['markRaw']
+  const nextTick: typeof import('vue')['nextTick']
+  const onActivated: typeof import('vue')['onActivated']
+  const onAddToFavorites: typeof import('@dcloudio/uni-app')['onAddToFavorites']
+  const onBackPress: typeof import('@dcloudio/uni-app')['onBackPress']
+  const onBeforeMount: typeof import('vue')['onBeforeMount']
+  const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
+  const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
+  const onDeactivated: typeof import('vue')['onDeactivated']
+  const onError: typeof import('@dcloudio/uni-app')['onError']
+  const onErrorCaptured: typeof import('vue')['onErrorCaptured']
+  const onHide: typeof import('@dcloudio/uni-app')['onHide']
+  const onLaunch: typeof import('@dcloudio/uni-app')['onLaunch']
+  const onLoad: typeof import('@dcloudio/uni-app')['onLoad']
+  const onMounted: typeof import('vue')['onMounted']
+  const onNavigationBarButtonTap: typeof import('@dcloudio/uni-app')['onNavigationBarButtonTap']
+  const onNavigationBarSearchInputChanged: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputChanged']
+  const onNavigationBarSearchInputClicked: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputClicked']
+  const onNavigationBarSearchInputConfirmed: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputConfirmed']
+  const onNavigationBarSearchInputFocusChanged: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputFocusChanged']
+  const onPageNotFound: typeof import('@dcloudio/uni-app')['onPageNotFound']
+  const onPageScroll: typeof import('@dcloudio/uni-app')['onPageScroll']
+  const onPullDownRefresh: typeof import('@dcloudio/uni-app')['onPullDownRefresh']
+  const onReachBottom: typeof import('@dcloudio/uni-app')['onReachBottom']
+  const onReady: typeof import('@dcloudio/uni-app')['onReady']
+  const onRenderTracked: typeof import('vue')['onRenderTracked']
+  const onRenderTriggered: typeof import('vue')['onRenderTriggered']
+  const onResize: typeof import('@dcloudio/uni-app')['onResize']
+  const onScopeDispose: typeof import('vue')['onScopeDispose']
+  const onServerPrefetch: typeof import('vue')['onServerPrefetch']
+  const onShareAppMessage: typeof import('@dcloudio/uni-app')['onShareAppMessage']
+  const onShareTimeline: typeof import('@dcloudio/uni-app')['onShareTimeline']
+  const onShow: typeof import('@dcloudio/uni-app')['onShow']
+  const onTabItemTap: typeof import('@dcloudio/uni-app')['onTabItemTap']
+  const onThemeChange: typeof import('@dcloudio/uni-app')['onThemeChange']
+  const onUnhandledRejection: typeof import('@dcloudio/uni-app')['onUnhandledRejection']
+  const onUnload: typeof import('@dcloudio/uni-app')['onUnload']
+  const onUnmounted: typeof import('vue')['onUnmounted']
+  const onUpdated: typeof import('vue')['onUpdated']
+  const provide: typeof import('vue')['provide']
+  const reactive: typeof import('vue')['reactive']
+  const readonly: typeof import('vue')['readonly']
+  const ref: typeof import('vue')['ref']
+  const resolveComponent: typeof import('vue')['resolveComponent']
+  const shallowReactive: typeof import('vue')['shallowReactive']
+  const shallowReadonly: typeof import('vue')['shallowReadonly']
+  const shallowRef: typeof import('vue')['shallowRef']
+  const toRaw: typeof import('vue')['toRaw']
+  const toRef: typeof import('vue')['toRef']
+  const toRefs: typeof import('vue')['toRefs']
+  const toValue: typeof import('vue')['toValue']
+  const triggerRef: typeof import('vue')['triggerRef']
+  const unref: typeof import('vue')['unref']
+  const useAttrs: typeof import('vue')['useAttrs']
+  const useCssModule: typeof import('vue')['useCssModule']
+  const useCssVars: typeof import('vue')['useCssVars']
+  const useSlots: typeof import('vue')['useSlots']
+  const watch: typeof import('vue')['watch']
+  const watchEffect: typeof import('vue')['watchEffect']
+  const watchPostEffect: typeof import('vue')['watchPostEffect']
+  const watchSyncEffect: typeof import('vue')['watchSyncEffect']
 }
 // for type re-export
 declare global {
   // @ts-ignore
-  export type {
-    Component,
-    ComponentPublicInstance,
-    ComputedRef,
-    ExtractDefaultPropTypes,
-    ExtractPropTypes,
-    ExtractPublicPropTypes,
-    InjectionKey,
-    PropType,
-    Ref,
-    VNode,
-    WritableComputedRef,
-  } from 'vue'
+  export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
   import('vue')
 }