pptWork.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { defineStore } from "pinia"
  2. import { store } from "./index"
  3. import { getTeacherChapterKnowledgeMaterial, putTeacherChapterKnowledgeMaterial } from "@/api/pptOperate"
  4. import { httpAjaxErrMsg } from "@/plugins/httpAjax"
  5. import { useRoute } from "vue-router"
  6. import LoadingBar from "@/plugins/loadingBar"
  7. import { getHttpJson, jsonToPpt, getJsonToBlob } from "@/libs/jsonTool"
  8. import fileUpload from "@/utils/oss-file-upload"
  9. import { ElMessage } from "element-plus"
  10. import { toBlob } from "html-to-image"
  11. import { useSlidesStore } from "@/store"
  12. type pptWork = { id: string; coverImg: string; jsonUrl: string; isSave: boolean }
  13. const useStore = defineStore("pptWork", {
  14. state: (): pptWork => {
  15. return {
  16. id: "",
  17. coverImg: "",
  18. jsonUrl: "",
  19. isSave: false // 当前是否保存,用来关闭页面时候判断 提不提示
  20. }
  21. },
  22. actions: {
  23. /** 初始化 */
  24. async initPPTData() {
  25. const route = useRoute()
  26. const id = route.query.id as string | undefined
  27. if (id) {
  28. LoadingBar.loading(true, "资源加载中,请稍等...")
  29. const res = await httpAjaxErrMsg(getTeacherChapterKnowledgeMaterial, id)
  30. if (res.code === 200) {
  31. const { id, dataJson, chapterLessonCoursewareName } = res.data || {}
  32. const { coverImg, jsonUrl } = JSON.parse(dataJson)
  33. this.id = id
  34. this.coverImg = coverImg || ""
  35. const slidesStore = useSlidesStore()
  36. slidesStore.setTitle(chapterLessonCoursewareName)
  37. if (jsonUrl) {
  38. const jsonRes = await getHttpJson(jsonUrl)
  39. if (jsonRes.code === 200) {
  40. jsonToPpt(jsonRes.data)
  41. }
  42. }
  43. }
  44. LoadingBar.loading(false)
  45. }
  46. },
  47. async updatePPT() {
  48. await this.updateCoverImg()
  49. const { blob, title } = getJsonToBlob()
  50. fileUpload(title, blob)
  51. .then(url => {
  52. LoadingBar.loading(true, "课件保存中,请稍等...")
  53. httpAjaxErrMsg(putTeacherChapterKnowledgeMaterial, {
  54. id: this.id,
  55. dataJson: JSON.stringify({
  56. coverImg: this.coverImg,
  57. jsonUrl: url
  58. })
  59. }).then(res => {
  60. if (res.code === 200) {
  61. this.isSave = true
  62. ElMessage({
  63. showClose: true,
  64. message: "保存成功!",
  65. type: "success"
  66. })
  67. }
  68. LoadingBar.loading(false)
  69. })
  70. })
  71. .catch(() => {
  72. ElMessage({
  73. showClose: true,
  74. message: "保存失败!",
  75. type: "error"
  76. })
  77. })
  78. },
  79. async updateCoverImg() {
  80. LoadingBar.loading(true, "资源上传中")
  81. try {
  82. const coverImgDom = document.querySelector("#thumbnailSlide_0") as HTMLElement
  83. if (coverImgDom) {
  84. const dataBlob = await toBlob(coverImgDom)
  85. if (dataBlob) {
  86. const url = await fileUpload("coverImg", dataBlob)
  87. url && (this.coverImg = url)
  88. }
  89. }
  90. LoadingBar.loading(false)
  91. } catch (err) {
  92. LoadingBar.loading(false)
  93. console.log(err, "上传coverImg错误")
  94. }
  95. }
  96. }
  97. })
  98. export default () => {
  99. return useStore(store)
  100. }