import { get, post } from '@/utils/request' import { fetchStream } from '@/utils/request/fetch' import type { AxiosProgressEvent, GenericAbortSignal } from 'axios' /* 对话聊天 */ export function fetchChatAPIProcess(params: { model: string modelName: string modelType: number modelAvatar?: string prompt: string sslUrl?: string chatId?: string fileInfo?: string imageUrl?: string fileUrl?: string action?: string drawId?: string customId?: string appId?: number extraParam?: { size?: string } usingPluginId?: number options?: { groupId: number usingNetwork: boolean usingMcpTool: boolean } signal?: GenericAbortSignal onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void taskId?: string }) { // 准备请求数据 const data = { model: params.model, modelName: params.modelName, modelType: params.modelType, prompt: params.prompt, fileInfo: params?.fileInfo, imageUrl: params?.imageUrl, fileUrl: params?.fileUrl, extraParam: params?.extraParam, appId: params?.appId, options: params.options, action: params?.action, customId: params?.customId, usingPluginId: params?.usingPluginId, drawId: params?.drawId, modelAvatar: params?.modelAvatar, taskId: params?.taskId, } // 如果没有进度回调,则使用普通POST请求 if (!params.onDownloadProgress) { return post({ url: '/chatgpt/chat-process', data, signal: params.signal, }) } // 使用流式请求处理 return new Promise((resolve, reject) => { // 创建AbortController用于取消请求 const fetchOptions: RequestInit = { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), } // 如果提供了signal,添加到请求选项 if (params.signal) { // 由于类型不兼容,这里使用类型断言 fetchOptions.signal = params.signal as any } fetchStream('/chatgpt/chat-process', fetchOptions, chunk => { // 调用进度回调,模拟axios的onDownloadProgress事件 if (params.onDownloadProgress) { // 创建一个符合AxiosProgressEvent的对象 const progressEvent: AxiosProgressEvent = { event: { target: { responseText: chunk, getResponseHeader: (name: string) => null, }, } as any, loaded: chunk.length, total: 0, // 流式响应无法预知总长度 bytes: chunk.length, lengthComputable: false, progress: 0, } params.onDownloadProgress(progressEvent) } }) .then(response => { resolve({ data: response } as any) }) .catch(error => { reject(error) }) }) } export function fetchPptCoverAPIProcess(data: { color?: string style?: string title: string }): Promise { return post({ url: '/chatgpt/ppt-cover', data }) as Promise } /* TTS 文字转语音 */ export function fetchTtsAPIProcess(data: { chatId: number; prompt: string }): Promise { return post({ url: '/chatgpt/tts-process', data }) as Promise } /* 获取个人信息 */ export function fetchGetInfo() { return get({ url: '/auth/getInfo' }) } /* 注册 */ export function fetchRegisterAPI(data: { username: string password: string contact: string code: string }): Promise { return post({ url: '/auth/register', data }) as Promise } /* 登录 */ export function fetchLoginAPI(data: { username: string; password: string }): Promise { return post({ url: '/auth/login', data }) as Promise } /* 验证码登录 */ export function fetchLoginWithCaptchaAPI(data: { contact: string; code: string }): Promise { return post({ url: '/auth/loginWithCaptcha', data }) as Promise } /* 修改个人信息 */ export function fetchUpdateInfoAPI(data: { username?: string avatar?: string nickname?: string }): Promise { return post({ url: '/user/update', data }) as Promise } /* 修改密码 */ export function fetchUpdatePasswordAPI(data: { password?: string }): Promise { return post({ url: '/auth/updatePassword', data }) as Promise } /* 获取图片验证码 */ export function fetchCaptchaImg(data: { color: string }): Promise { return post({ url: '/auth/captcha', data }) as Promise } /* 发送邮箱验证码 */ export function fetchSendCode(data: { contact: string; captchaCode: string }): Promise { return post({ url: '/auth/sendCode', data }) as Promise } /* 发送手机验证码 */ export function fetchSendSms(data: { phone: string }): Promise { return post({ url: '/auth/sendPhoneCode', data }) as Promise } /* 发送邮箱验证码 */ export function fetchSendEmailCode(data: { phone: string captchaId: string captchaCode: string }): Promise { return post({ url: '/auth/sendEmailCode', data }) as Promise }