longz
2026-08-11 2a3c3cdbf2398695d61633e072f98ee2757e9e27
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { getResult, postResult, putResult, withMiniTokenHeader } from './core/request'
import { getPersistedToken } from '@/store/auth'
import type { MiniAuthMeResponse, MiniLoginResponse, MiniOfficialLoginResponse, MiniProfileUpdateRequest, OfficialOAuthUrlResponse } from '@/types/auth'
 
export function loginByWx(payload: { wxCode: string, phoneCode?: string }) {
  return postResult<MiniLoginResponse>('/api/mini/auth/login', payload)
}
 
export function fetchOfficialOAuthUrl(payload: { redirectUri: string, state?: string }) {
  const query = new URLSearchParams()
  query.set('redirectUri', payload.redirectUri)
  if (payload.state) {
    query.set('state', payload.state)
  }
  return getResult<OfficialOAuthUrlResponse>(`/api/mini/auth/official-oauth-url?${query.toString()}`)
}
 
export function loginByOfficialCode(payload: { code: string }) {
  return postResult<MiniOfficialLoginResponse>('/api/mini/auth/official-login', payload)
}
 
export function bindOfficialPhone(payload: { bindToken: string, mobile: string }) {
  return postResult<MiniLoginResponse>('/api/mini/auth/official-bind-phone', payload)
}
 
export function fetchMiniMe(token?: string) {
  return getResult<MiniAuthMeResponse>('/api/mini/auth/me', withMiniTokenHeader(token))
}
 
export function updateMiniProfile(payload: MiniProfileUpdateRequest) {
  return putResult<MiniAuthMeResponse>('/api/mini/auth/profile', payload)
}
 
export function uploadMiniProfileImage(filePath: string) {
  const token = getPersistedToken()
  const uploadUrl = `${import.meta.env.VITE_API_BASE_URL}/api/mini/auth/upload/image`
  return new Promise<string>((resolve, reject) => {
    uni.uploadFile({
      url: uploadUrl,
      filePath,
      name: 'file',
      header: token
        ? {
            'Mini-Authorization': token,
          }
        : undefined,
      success: (res) => {
        try {
          const data = JSON.parse(res.data || '{}') as {
            success?: boolean
            message?: string
            result?: { url?: string }
          }
          if (data.success && data.result?.url) {
            resolve(data.result.url)
            return
          }
          reject(new Error(data.message || '头像上传失败'))
        }
        catch {
          reject(new Error('头像上传失败'))
        }
      },
      fail: () => reject(new Error('头像上传失败')),
    })
  })
}
 
export function logoutMini() {
  return postResult<void>('/api/mini/auth/logout')
}