aiCourseware.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { httpAxios } from "@/api/ApiInstance"
  2. import type { AiCoursewareTemplateId } from "@/config/aiCoursewareTemplates"
  3. export interface AiCoursewareOutlineQuery {
  4. id: string
  5. fromType?: string
  6. extraPrompt?: string
  7. preferences?: AiCoursewarePreferences
  8. }
  9. export interface AiCoursewareGenerateQuery {
  10. id: string
  11. fromType?: string
  12. outline: AiCoursewareOutline
  13. templateId?: AiCoursewareTemplateId
  14. visualPrompt?: string
  15. preferences?: AiCoursewarePreferences
  16. regeneratePageNo?: number
  17. repairOnly?: boolean
  18. outlineConfirmed?: boolean
  19. }
  20. export interface AiCoursewarePreferences {
  21. learningContext?: string
  22. lessonScope?: string
  23. lessonMinutes: number
  24. minPages: number
  25. maxPages: number
  26. assetStyle: "illustration" | "photo" | "mixed"
  27. sourceImagePolicy: "strict" | "balanced" | "creative"
  28. requireAudio: boolean
  29. requireVideo: boolean
  30. enableAnimations: boolean
  31. }
  32. export interface AiCoursewareOutline {
  33. title: string
  34. templateId?: AiCoursewareTemplateId
  35. gradeName: string
  36. textbookName: string
  37. unitName: string
  38. chapterName: string
  39. courseType: string
  40. style: "cartoon" | "clean" | string
  41. visualBible?: AiCoursewareVisualBible
  42. textbookResearch?: AiCoursewareTextbookResearch
  43. pages: AiCoursewarePage[]
  44. }
  45. export interface AiCoursewareVisualBible {
  46. artStyle?: string
  47. palette?: string[]
  48. environment?: string
  49. lighting?: string
  50. recurringProps?: string[]
  51. characters?: Array<{
  52. name: string
  53. appearance?: string
  54. costume?: string
  55. signatureColor?: string
  56. }>
  57. }
  58. export interface AiCoursewareTextbookResearch {
  59. exactMatch: boolean
  60. confidence: "HIGH" | "MEDIUM" | "LOW" | string
  61. courseType: string
  62. contentSummary: string
  63. works: string[]
  64. verifiedFacts: string[]
  65. teachingObjectives: string[]
  66. teachingFocus: string[]
  67. learningActivities: string[]
  68. missingEvidence: string[]
  69. sources: Array<{
  70. index?: number
  71. title?: string
  72. url: string
  73. official?: boolean
  74. }>
  75. }
  76. export interface AiCoursewarePage {
  77. pageNo: number
  78. type: string
  79. title: string
  80. subtitle?: string
  81. bullets: string[]
  82. teachingStage?: string
  83. teachingPurpose?: string
  84. learningEvidence?: string
  85. durationMinutes?: number
  86. objectiveIds?: string[]
  87. optional?: boolean
  88. requiredVisual?: boolean
  89. studentContent?: {
  90. headline?: string
  91. points?: string[]
  92. }
  93. activity?: {
  94. task?: string
  95. steps?: string[]
  96. }
  97. classroomAction?: {
  98. teacherInstruction?: string
  99. studentTask?: string
  100. interactionType?: string
  101. }
  102. visual?: {
  103. layout?: string
  104. style?: string
  105. mainVisual?: string
  106. imageKeywords?: string[]
  107. }
  108. visualPlan?: {
  109. layout?: string
  110. visualRole?: string
  111. focalContent?: string
  112. visualDensity?: "low" | "medium" | "high" | string
  113. mainVisual?: string
  114. elements?: string[]
  115. contentPriority?: string[]
  116. imageKeywords?: string[]
  117. style?: string
  118. }
  119. designRequirement?: string
  120. teacherTips?: string
  121. speakerNotes?: string
  122. interaction?: {
  123. type: string
  124. question: string
  125. options?: string[]
  126. answer?: string
  127. explanation?: string
  128. }
  129. imageKeywords: string[]
  130. image?: {
  131. url: string
  132. keyword: string
  133. provider: string
  134. width?: number
  135. height?: number
  136. score?: number
  137. }
  138. resourceBindings?: AiCoursewareResourceBinding[]
  139. }
  140. export interface AiCoursewareResourceBinding {
  141. scoreImageUrl?: string
  142. resourceId: string
  143. resourceType: "IMG" | "VIDEO" | "SONG" | "MUSIC" | "LISTEN" | "RHYTHM" | "THEORY" | "MUSIC_WIKI" | "INSTRUMENT" | "MUSICIAN" | string
  144. name?: string
  145. contentUrl?: string
  146. coverUrl?: string
  147. dataJson?: string
  148. elementSubtype?: string
  149. purpose?: string
  150. dedicatedPage?: boolean
  151. required?: boolean
  152. verified?: boolean
  153. }
  154. export interface AiCoursewareTaskInfo {
  155. taskId: string
  156. status: "PENDING" | "RUNNING" | "DONE" | "DRAFT" | "FAILED"
  157. progress: number
  158. message: string
  159. }
  160. export interface AiCoursewareGenerateResult {
  161. reviewMessage?: string
  162. context: Record<string, any>
  163. outline: AiCoursewareOutline
  164. }
  165. export const aiCoursewareOutlineApi = (data: AiCoursewareOutlineQuery) => {
  166. return httpAxios.axioseRquest({
  167. method: "post",
  168. url: "/edu-app/aiCourseware/outline",
  169. data
  170. })
  171. }
  172. export const aiCoursewareGenerateApi = (data: AiCoursewareGenerateQuery) => {
  173. return httpAxios.axioseRquest({
  174. method: "post",
  175. url: "/edu-app/aiCourseware/generate",
  176. data
  177. })
  178. }
  179. export const aiCoursewareTaskApi = (taskId: string) => {
  180. return httpAxios.axioseRquest({
  181. method: "get",
  182. url: `/edu-app/aiCourseware/task/${taskId}`
  183. })
  184. }
  185. export const aiCoursewareResultApi = (taskId: string) => {
  186. return httpAxios.axioseRquest({
  187. method: "get",
  188. url: `/edu-app/aiCourseware/task/${taskId}/result`
  189. })
  190. }