From fe1692fd7f4f307fea8054da6c6c50d5df2bf2d8 Mon Sep 17 00:00:00 2001
From: wsj <593216709@qq.com>
Date: Tue, 27 Oct 2026 23:02:57 +0800
Subject: [PATCH] feat: 提交

---
 src/api/auth.ts |   77 +++++++++++++++++++++-----------------
 1 files changed, 43 insertions(+), 34 deletions(-)

diff --git a/src/api/auth.ts b/src/api/auth.ts
index 5a2738c..91eccac 100644
--- a/src/api/auth.ts
+++ b/src/api/auth.ts
@@ -1,47 +1,56 @@
-import type { LoginParams, LoginResult, UserInfo } from '@/types/auth';
+import { ApiError, request } from '@/api/request';
+import type {
+  LoginParams,
+  LoginResult,
+  TenantLoginData,
+  UserInfo,
+} from '@/types/auth';
 
-interface MockAccount {
+interface TenantLoginRequest {
+  phone: string;
   password: string;
-  user: UserInfo;
+  tenantCode: string;
 }
 
-/**
- * 演示环境下的本地账号。
- * 真实项目请替换为后端登录接口。
- */
-const MOCK_ACCOUNTS: Record<string, MockAccount> = {
-  admin: {
-    password: 'admin123',
-    user: {
-      id: 1,
-      username: 'admin',
-      nickname: '超级管理员',
-      role: 'admin',
-    },
-  },
-  user: {
-    password: 'user123',
-    user: {
-      id: 2,
-      username: 'user',
-      nickname: '普通运营',
-      role: 'user',
-    },
-  },
+const toUserInfo = (data: TenantLoginData, params: LoginParams): UserInfo => {
+  const phone = data.phone ?? params.phone.trim();
+  const loginType = data.loginType?.toLowerCase() ?? '';
+
+  return {
+    id: data.employeeId ?? 0,
+    username: phone,
+    nickname: data.employeeName ?? phone,
+    role: loginType.includes('admin') ? 'admin' : 'user',
+    tenant: data.tenantCode ?? params.tenant.trim(),
+    phone,
+  };
 };
 
-const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
-
+/** 租户登录。 */
 export const loginApi = async (params: LoginParams): Promise<LoginResult> => {
-  await delay(500);
+  const data = await request<TenantLoginRequest, TenantLoginData>(
+    {
+      url: '/auth/tenant-login',
+      method: 'POST',
+      data: {
+        phone: params.phone.trim(),
+        password: params.password,
+        tenantCode: params.tenant.trim(),
+      },
+    },
+    {
+      // 登录有副作用,不合并;错误由登录页统一提示。
+      merge: false,
+      showError: false,
+    },
+  );
 
-  const account = MOCK_ACCOUNTS[params.username];
-  if (!account || account.password !== params.password) {
-    throw new Error('用户名或密码错误');
+  if (!data?.token) {
+    throw new ApiError('登录响应中未找到 token', { data });
   }
 
   return {
-    token: `mock-token-${account.user.id}-${Date.now()}`,
-    user: account.user,
+    token: data.token,
+    user: toUserInfo(data, params),
   };
 };

--
Gitblit v1.9.3