feat: 前后端统一接口类型
							parent
							
								
									dd522eb404
								
							
						
					
					
						commit
						847623e22a
					
				@ -0,0 +1,14 @@
 | 
				
			||||
import { post } from '@/utils/request'
 | 
				
			||||
 | 
				
			||||
export function fetchChatAPI<T = any>(prompt: string) {
 | 
				
			||||
  return post<T>({
 | 
				
			||||
    url: '/chat',
 | 
				
			||||
    data: { prompt },
 | 
				
			||||
  })
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export function clearConversations<T = any>() {
 | 
				
			||||
  return post<T>({
 | 
				
			||||
    url: '/clear',
 | 
				
			||||
  })
 | 
				
			||||
}
 | 
				
			||||
@ -1,41 +0,0 @@
 | 
				
			||||
import axios from 'axios'
 | 
				
			||||
 | 
				
			||||
const BASE_URL = import.meta.env.VITE_GLOB_API_URL
 | 
				
			||||
 | 
				
			||||
async function fetchChatAPI(message: string) {
 | 
				
			||||
  if (!message || message.trim() === '')
 | 
				
			||||
    return
 | 
				
			||||
 | 
				
			||||
  try {
 | 
				
			||||
    const { status, data } = await axios.post(`${BASE_URL}/chat`, { message })
 | 
				
			||||
 | 
				
			||||
    if (status === 200) {
 | 
				
			||||
      if (data.text)
 | 
				
			||||
        return Promise.resolve(data)
 | 
				
			||||
 | 
				
			||||
      if (data.statusText)
 | 
				
			||||
        return Promise.reject(new Error(data.statusText))
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    return Promise.reject(new Error('Request failed'))
 | 
				
			||||
  }
 | 
				
			||||
  catch (error) {
 | 
				
			||||
    return Promise.reject(error)
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
async function clearChatContext() {
 | 
				
			||||
  try {
 | 
				
			||||
    const { status, data } = await axios.post(`${BASE_URL}/clear`)
 | 
				
			||||
 | 
				
			||||
    if (status === 200)
 | 
				
			||||
      return Promise.resolve(data)
 | 
				
			||||
 | 
				
			||||
    return Promise.reject(new Error('Request failed'))
 | 
				
			||||
  }
 | 
				
			||||
  catch (error) {
 | 
				
			||||
    return Promise.reject(error)
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export { fetchChatAPI, clearChatContext }
 | 
				
			||||
@ -0,0 +1,29 @@
 | 
				
			||||
import axios, { type AxiosResponse } from 'axios'
 | 
				
			||||
 | 
				
			||||
const service = axios.create({
 | 
				
			||||
  baseURL: import.meta.env.VITE_GLOB_API_URL,
 | 
				
			||||
  timeout: 10 * 1000,
 | 
				
			||||
})
 | 
				
			||||
 | 
				
			||||
service.interceptors.request.use(
 | 
				
			||||
  (config) => {
 | 
				
			||||
    return config
 | 
				
			||||
  },
 | 
				
			||||
  (error) => {
 | 
				
			||||
    return Promise.reject(error.response)
 | 
				
			||||
  },
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
service.interceptors.response.use(
 | 
				
			||||
  (response: AxiosResponse): AxiosResponse => {
 | 
				
			||||
    if (response.status === 200)
 | 
				
			||||
      return response
 | 
				
			||||
 | 
				
			||||
    throw new Error(response.status.toString())
 | 
				
			||||
  },
 | 
				
			||||
  (error) => {
 | 
				
			||||
    return Promise.reject(error)
 | 
				
			||||
  },
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
export default service
 | 
				
			||||
@ -0,0 +1,72 @@
 | 
				
			||||
import type { AxiosResponse } from 'axios'
 | 
				
			||||
import request from './axios'
 | 
				
			||||
 | 
				
			||||
export interface HttpOption {
 | 
				
			||||
  url: string
 | 
				
			||||
  data?: any
 | 
				
			||||
  method?: string
 | 
				
			||||
  headers?: any
 | 
				
			||||
  beforeRequest?: () => void
 | 
				
			||||
  afterRequest?: () => void
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export interface ExtraOption {
 | 
				
			||||
  notification?: boolean
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export interface Response<T = any> {
 | 
				
			||||
  data: T
 | 
				
			||||
  message: string | null
 | 
				
			||||
  status: string
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
function http<T = any>({ url, data, method, headers, beforeRequest, afterRequest }: HttpOption) {
 | 
				
			||||
  const successHandler = (res: AxiosResponse<Response<T>>) => {
 | 
				
			||||
    if (res.data.status === 'Success')
 | 
				
			||||
      return res.data
 | 
				
			||||
 | 
				
			||||
    return Promise.reject(res.data)
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  const failHandler = (error: Response<Error>) => {
 | 
				
			||||
    afterRequest?.()
 | 
				
			||||
    throw new Error(error?.message || 'Error')
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
  beforeRequest?.()
 | 
				
			||||
 | 
				
			||||
  method = method || 'GET'
 | 
				
			||||
 | 
				
			||||
  const params = Object.assign(typeof data === 'function' ? data() : data ?? {}, {})
 | 
				
			||||
 | 
				
			||||
  return method === 'GET'
 | 
				
			||||
    ? request.get(url, { params }).then(successHandler, failHandler)
 | 
				
			||||
    : request.post(url, params, { headers }).then(successHandler, failHandler)
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export function get<T = any>(
 | 
				
			||||
  { url, data, method = 'GET', beforeRequest, afterRequest }: HttpOption,
 | 
				
			||||
): Promise<Response<T>> {
 | 
				
			||||
  return http<T>({
 | 
				
			||||
    url,
 | 
				
			||||
    method,
 | 
				
			||||
    data,
 | 
				
			||||
    beforeRequest,
 | 
				
			||||
    afterRequest,
 | 
				
			||||
  })
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export function post<T = any>(
 | 
				
			||||
  { url, data, method = 'POST', headers, beforeRequest, afterRequest }: HttpOption,
 | 
				
			||||
): Promise<Response<T>> {
 | 
				
			||||
  return http<T>({
 | 
				
			||||
    url,
 | 
				
			||||
    method,
 | 
				
			||||
    data,
 | 
				
			||||
    headers,
 | 
				
			||||
    beforeRequest,
 | 
				
			||||
    afterRequest,
 | 
				
			||||
  })
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
export default post
 | 
				
			||||
					Loading…
					
					
				
		Reference in New Issue