articleReading.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { defineStore } from 'pinia'
  2. import { reactive, ref } from 'vue'
  3. import type { ArticleReadingConfig, ArticleReadingTask } from '@/types/articleReading'
  4. import type { ArticlePreviewStage } from '@/views/Editor/EnglishSpeaking/composables/useArticleReadingEngine'
  5. import { buildArticleConfig, buildEmptyArticleConfig } from '@/views/Editor/EnglishSpeaking/preview/articleReadingModel'
  6. /** 只持有文章朗读的表单状态,绝不混入话题讨论字段。 */
  7. export const useArticleReadingStore = defineStore('articleReading', () => {
  8. const config = reactive<ArticleReadingConfig>(buildEmptyArticleConfig('五年级'))
  9. const activeConfigId = ref('')
  10. const openConfigSignal = ref(0)
  11. const resetSignal = ref(0)
  12. // 预览当前阶段(由 ArticleReadingPreview 同步)。CanvasTool 据此决定「重置预览」显不显示
  13. // —— 与话题讨论的 speakingStore.previewState 同一套做法:停在起始页时没什么可重置的。
  14. const previewStage = ref<ArticlePreviewStage>('ready')
  15. function replaceConfig(next: ArticleReadingConfig) {
  16. Object.assign(config, next)
  17. }
  18. function prefillFromTask(task: ArticleReadingTask, grade: string) {
  19. replaceConfig(buildArticleConfig(task, grade))
  20. }
  21. function resetConfigEmpty(grade: string) {
  22. replaceConfig(buildEmptyArticleConfig(grade))
  23. }
  24. function setActiveConfigId(configId: string) {
  25. activeConfigId.value = configId
  26. }
  27. function setPreviewStage(stage: ArticlePreviewStage) {
  28. previewStage.value = stage
  29. }
  30. function openConfigPanel(configId: string) {
  31. activeConfigId.value = configId
  32. openConfigSignal.value += 1
  33. }
  34. function requestResetPreview() {
  35. resetSignal.value += 1
  36. }
  37. return {
  38. config,
  39. activeConfigId,
  40. openConfigSignal,
  41. resetSignal,
  42. previewStage,
  43. replaceConfig,
  44. prefillFromTask,
  45. resetConfigEmpty,
  46. setActiveConfigId,
  47. setPreviewStage,
  48. openConfigPanel,
  49. requestResetPreview,
  50. }
  51. })