pptWork.ts 3.4 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. import queryParams, { initQueryParams } from "@/queryParams"
  13. type pptWork = { id: string; coverImg: string; jsonUrl: string; isSave: boolean }
  14. const useStore = defineStore("pptWork", {
  15. state: (): pptWork => {
  16. initQueryParams()
  17. const route = useRoute()
  18. return {
  19. id: route.query.id as string,
  20. coverImg: "",
  21. jsonUrl: "",
  22. isSave: false // 当前是否保存,用来关闭页面时候判断 提不提示
  23. }
  24. },
  25. actions: {
  26. /** 初始化 */
  27. async initPPTData() {
  28. if (this.id) {
  29. LoadingBar.loading(true, "资源加载中,请稍等...")
  30. const res = await httpAjaxErrMsg(getTeacherChapterKnowledgeMaterial, this.id, queryParams.fromType)
  31. if (res.code === 200) {
  32. const { dataJson, chapterLessonCoursewareName } = res.data || {}
  33. const { coverImg, jsonUrl } = JSON.parse(dataJson)
  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. LoadingBar.loading(true, "课件保存中,请稍等...")
  49. await this.updateCoverImg()
  50. const { blob } = getJsonToBlob()
  51. fileUpload(`${this.id}ppt`, blob, `${this.id}/`, false, { isLoading: false })
  52. .then(url => {
  53. const _time = Date.now()
  54. httpAjaxErrMsg(putTeacherChapterKnowledgeMaterial, {
  55. id: this.id,
  56. dataJson: JSON.stringify({
  57. coverImg: this.coverImg + `?v=_${_time}`, // 加上时间戳,防止资源更新之后的缓存
  58. jsonUrl: url + `?v=_${_time}`
  59. })
  60. }).then(res => {
  61. if (res.code === 200) {
  62. this.isSave = true
  63. ElMessage({
  64. showClose: true,
  65. message: "保存成功!",
  66. type: "success"
  67. })
  68. }
  69. LoadingBar.loading(false)
  70. })
  71. })
  72. .catch(() => {
  73. LoadingBar.loading(false)
  74. ElMessage({
  75. showClose: true,
  76. message: "保存失败!",
  77. type: "error"
  78. })
  79. })
  80. },
  81. async updateCoverImg() {
  82. try {
  83. const coverImgDom = document.querySelector("#thumbnailSlide_0") as HTMLElement
  84. if (coverImgDom) {
  85. const dataBlob = await toBlob(coverImgDom)
  86. if (dataBlob) {
  87. const url = await fileUpload(`${this.id}coverImg`, dataBlob, `${this.id}/`, false, { isLoading: false })
  88. url && (this.coverImg = url)
  89. }
  90. }
  91. } catch (err) {
  92. console.log(err, "上传coverImg错误")
  93. }
  94. }
  95. }
  96. })
  97. export default () => {
  98. return useStore(store)
  99. }