瀏覽代碼

feat(api): 调整API基础配置与登录逻辑

- 将 `BASE_URL` 配置从环境变量改为统一导入方式
- 启用并修正用户 token 的请求头设置,使用 `Authorization` 字段
- 移除无用的注释代码及冗余日志输出
- 更新全局类型定义文件以适配新的响应结构
- 新增 `logoinToken` 接口用于描述认证返回数据
- 优化登录页面逻辑,接入微信登录并获取手机号流程
- 使用全局 loading 中间件提升用户体验
- 修复按钮事件绑定为标准 `getphonenumber` 并传递参数
zhangtao 2 天之前
父節點
當前提交
b8b18b98c6
共有 3 個文件被更改,包括 77 次插入53 次删除
  1. 5 8
      src/api/core/instance.ts
  2. 48 39
      src/api/globals.d.ts
  3. 24 6
      src/pages/login/index.vue

+ 5 - 8
src/api/core/instance.ts

@@ -2,10 +2,10 @@ import AdapterUniapp from '@alova/adapter-uniapp'
 import { createAlova } from 'alova'
 import vueHook from 'alova/vue'
 import { handleAlovaError, handleAlovaResponse } from './handlers'
-// import { BASE_URL } from '@/config'
+import { BASE_URL } from '@/config'
 
 export const alovaInstance = createAlova({
-  baseURL: import.meta.env.VITE_API_BASE_URL,
+  baseURL: BASE_URL,
   ...AdapterUniapp(),
   statesHook: vueHook,
   beforeRequest: (method) => {
@@ -13,10 +13,8 @@ export const alovaInstance = createAlova({
     if (['POST', 'PUT', 'PATCH'].includes(method.type)) {
       method.config.headers['Content-Type'] = 'application/json'
     }
-    // const { token } = useUserStore()
-    // if (token) {
-    //   method.config.headers['X-Access-Token'] = token
-    // }
+    const { token } = useUserStore()
+    method.config.headers.Authorization = token || 'Basic c21xamgtYXBwbGV0OjEyMzQ1Ng=='
     // Add timestamp to prevent caching for GET requests
     if (method.type === 'GET' && CommonUtil.isObj(method.config.params)) {
       method.config.params._t = Date.now()
@@ -31,9 +29,8 @@ export const alovaInstance = createAlova({
       // console.log(`[API Base URL] ${import.meta.env.VITE_API_BASE_URL}`);
       // console.log(`[Environment] ${import.meta.env.VITE_ENV_NAME}`);
     }
-    uni.showLoading({ mask: true })
     console.log(
-      import.meta.env.VITE_API_BASE_URL,
+      BASE_URL,
       '=================所连服务器==========================',
     )
   },

+ 48 - 39
src/api/globals.d.ts

@@ -42,15 +42,15 @@ type Alova2MethodConfig<Responded> =
       infer SE
     >
   >
-    ? Omit<
-        AlovaMethodCreateConfig<
-          AlovaGenerics<Responded, any, RequestConfig, Response, ResponseHeader, L1Cache, L2Cache, SE>,
-          any,
-          Responded
-        >,
-        'params'
-      >
-    : never;
+  ? Omit<
+    AlovaMethodCreateConfig<
+      AlovaGenerics<Responded, any, RequestConfig, Response, ResponseHeader, L1Cache, L2Cache, SE>,
+      any,
+      Responded
+    >,
+    'params'
+  >
+  : never;
 
 // Extract the return type of transform function that define in $$userConfigMap, if it not exists, use the default type.
 type ExtractUserDefinedTransformed<
@@ -58,8 +58,8 @@ type ExtractUserDefinedTransformed<
   Default
 > = DefinitionKey extends keyof UserMethodConfigMap
   ? UserMethodConfigMap[DefinitionKey]['transform'] extends (...args: any[]) => any
-    ? Awaited<ReturnType<UserMethodConfigMap[DefinitionKey]['transform']>>
-    : Default
+  ? Awaited<ReturnType<UserMethodConfigMap[DefinitionKey]['transform']>>
+  : Default
   : Default;
 type Alova2Method<
   Responded,
@@ -78,28 +78,28 @@ type Alova2Method<
       infer SE
     >
   >
-    ? Method<
-        AlovaGenerics<
-          CurrentConfig extends undefined
-            ? ExtractUserDefinedTransformed<DefinitionKey, Responded>
-            : CurrentConfig['transform'] extends (...args: any[]) => any
-              ? Awaited<ReturnType<CurrentConfig['transform']>>
-              : ExtractUserDefinedTransformed<DefinitionKey, Responded>,
-          any,
-          RequestConfig,
-          Response,
-          ResponseHeader,
-          L1Cache,
-          L2Cache,
-          SE
-        >
-      >
-    : never;
+  ? Method<
+    AlovaGenerics<
+      CurrentConfig extends undefined
+      ? ExtractUserDefinedTransformed<DefinitionKey, Responded>
+      : CurrentConfig['transform'] extends (...args: any[]) => any
+      ? Awaited<ReturnType<CurrentConfig['transform']>>
+      : ExtractUserDefinedTransformed<DefinitionKey, Responded>,
+      any,
+      RequestConfig,
+      Response,
+      ResponseHeader,
+      L1Cache,
+      L2Cache,
+      SE
+    >
+  >
+  : never;
 
 export interface ApiResponse {
   code?: number;
   type?: string;
-  message?: string;
+  msg?: string;
 }
 
 
@@ -107,12 +107,12 @@ declare global {
   interface Apis {
     sys: {
       auth<
-        Config extends Alova2MethodConfig<loginModel> & {
-          data: loginModel;
+        Config extends Alova2MethodConfig<{data:logoinToken}> & {
+          params: loginModel;
         }
       >(
         config: Config
-      ): Alova2Method<loginModel, 'sys.auth', Config>;
+      ): Alova2Method<{data:logoinToken}, 'sys.auth', Config>;
     }
 
   }
@@ -121,11 +121,20 @@ declare global {
 }
 
 
-export interface loginModel{
-    captchaCode?: string;
-    code?: string;
-    grant_type?: string;
-    mobile?: string;
-    password?: string;
-    [property: string]: any;
+export interface loginModel {
+  captchaCode?: string;
+  code?: string;
+  grant_type?: string;
+  mobile?: string;
+  password?: string;
+  [property: string]: any;
+}
+
+export interface logoinToken {
+  access_token: string
+  code: string
+  expires_in: number
+  phoneCode: string
+  refresh_token: string
+  token_type: string
 }

+ 24 - 6
src/pages/login/index.vue

@@ -1,24 +1,42 @@
 <script setup lang="ts">
+import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
+import router from '@/router'
+
 definePage({
   name: 'smqjh-login',
   style: {
     navigationBarTitleText: '市民请集合',
   },
 })
-async function handleGetPhone(e: WechatMiniprogram.ButtonGetPhoneNumber) {
+const { token } = storeToRefs(useUserStore())
+const { data, send } = useRequest((code, phoneCode) => Apis.sys.auth({ params: {
+  grant_type: 'wechat',
+  code,
+  phoneCode,
+} }), { middleware: createGlobalLoadingMiddleware({ loadingText: '微信授权登录中' }) })
+const toast = useGlobalToast()
+async function handleGetPhone(e: UniHelper.ButtonOnGetphonenumberDetail) {
   console.log(e, '手机号')
   uni.showLoading({ mask: true })
-  await Apis.sys.auth({ data: {
-    grant_type: 'wechat',
-    mobile: '',
-  } })
+  uni.login({
+    provider: 'weixin',
+    success: async (res) => {
+      uni.hideLoading()
+      await send(res.code, e.code)
+      token.value = data.value.data.access_token
+      toast.show({ msg: '登录成功' })
+      setTimeout(() => {
+        router.back()
+      }, 2000)
+    },
+  })
 }
 </script>
 
 <template>
   <view class="h80vh px24rpx">
     <view class="mt300rpx">
-      <wd-button block size="large" open-type="getRealtimePhoneNumber" @getrealtimephonenumber="handleGetPhone">
+      <wd-button block size="large" open-type="getPhoneNumber" @getphonenumber="handleGetPhone">
         手机号快捷登录
       </wd-button>
       <view class="mt20rpx">