wsj
3 days ago d4610c829833996f91704b3891a5c5845bfe0d6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { ApiError, request } from '@/api/request';
import type {
  LoginParams,
  LoginResult,
  TenantLoginData,
  UserInfo,
} from '@/types/auth';
 
interface TenantLoginRequest {
  phone: string;
  password: string;
  tenantCode: string;
}
 
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,
  };
};
 
/** 租户登录。 */
export const loginApi = async (params: LoginParams): Promise<LoginResult> => {
  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,
    },
  );
 
  if (!data?.token) {
    throw new ApiError('登录响应中未找到 token', { data });
  }
 
  return {
    token: data.token,
    user: toUserInfo(data, params),
  };
};