index.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { fetchEventSource } from '@microsoft/fetch-event-source'
  2. import { getAccessToken } from '@/utils/auth'
  3. import { config } from '@/config/axios/config'
  4. import { AiWriteTypeEnum } from '@/views/ai/utils/constants'
  5. import request from '@/config/axios'
  6. export interface WriteVO {
  7. type: AiWriteTypeEnum.WRITING | AiWriteTypeEnum.REPLY // 1:撰写 2:回复
  8. prompt: string // 写作内容提示 1。撰写 2回复
  9. originalContent: string // 原文
  10. length: number // 长度
  11. format: number // 格式
  12. tone: number // 语气
  13. language: number // 语言
  14. userId?: number // 用户编号
  15. platform?: string // 平台
  16. model?: string // 模型
  17. generatedContent?: string // 生成的内容
  18. errorMessage?: string // 错误信息
  19. createTime?: Date // 创建时间
  20. }
  21. export interface AiWritePageReqVO extends PageParam {
  22. userId?: number // 用户编号
  23. type?: AiWriteTypeEnum // 写作类型
  24. platform?: string // 平台
  25. createTime?: [string, string] // 创建时间
  26. }
  27. export interface AiWriteRespVo {
  28. id: number
  29. userId: number
  30. type: number
  31. platform: string
  32. model: string
  33. prompt: string
  34. generatedContent: string
  35. originalContent: string
  36. length: number
  37. format: number
  38. tone: number
  39. language: number
  40. errorMessage: string
  41. createTime: string
  42. }
  43. export const WriteApi = {
  44. writeStream: ({
  45. data,
  46. onClose,
  47. onMessage,
  48. onError,
  49. ctrl
  50. }: {
  51. data: WriteVO
  52. onMessage?: (res: any) => void
  53. onError?: (...args: any[]) => void
  54. onClose?: (...args: any[]) => void
  55. ctrl: AbortController
  56. }) => {
  57. const token = getAccessToken()
  58. return fetchEventSource(`${config.base_url}/ai/write/generate-stream`, {
  59. method: 'post',
  60. headers: {
  61. 'Content-Type': 'application/json',
  62. Authorization: `Bearer ${token}`
  63. },
  64. openWhenHidden: true,
  65. body: JSON.stringify(data),
  66. onmessage: onMessage,
  67. onerror: onError,
  68. onclose: onClose,
  69. signal: ctrl.signal
  70. })
  71. },
  72. // 获取写作列表
  73. getWritePage: (params: AiWritePageReqVO) => {
  74. return request.get<PageResult<AiWriteRespVo[]>>({ url: `/ai/write/page`, params })
  75. },
  76. // 删除写作
  77. deleteWrite(id: number) {
  78. return request.delete({ url: `/ai/write/delete`, params: { id } })
  79. }
  80. }