useCoursewaresWorker.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import myWorker from "./index"
  2. import axios from "axios"
  3. import { getToken } from "@/libs/auth"
  4. import { URL_API } from "@/config/index"
  5. import usePptWork from "@/store/pptWork"
  6. let worker: any = null
  7. let useOnCoursewaresMessage = (e: any) => {}
  8. /**
  9. * 初始化worker
  10. */
  11. export const initWorker = () => {
  12. // eslint-disable-next-line no-async-promise-executor
  13. return new Promise(async (resolve, reject) => {
  14. if (!worker) {
  15. const usePptWorkHook = usePptWork()
  16. const str1 = await axios.get("./pptworker/cos-js-sdk-v5.min.js")
  17. const str2 = await axios.get("./pptworker/upload.js")
  18. const str3 = await axios.get("./pptworker/pptJson.js")
  19. /* 这里根据id 加上一个文件夹 */
  20. worker = new myWorker([str1.data, `\r\nconst filePath = "${usePptWorkHook.id}/"\r\n`, str2.data, str3.data])
  21. worker.ready
  22. .then(() => worker.createTaskController())
  23. .then(() => {
  24. worker.onmessage = onCoursewaresMessage
  25. })
  26. .then(() => {
  27. worker.initOssResource(URL_API, getToken())
  28. })
  29. .then(resolve(worker))
  30. .catch(reject)
  31. return
  32. }
  33. resolve(worker)
  34. })
  35. }
  36. /**
  37. * 销毁worker
  38. */
  39. export const destroyWorker = () => {
  40. return new Promise((resolve, reject) => {
  41. if (worker) {
  42. worker
  43. .destoryTaskController()
  44. .then(() => worker.terminate())
  45. .then(() => {
  46. worker = null
  47. resolve("")
  48. })
  49. .catch(reject)
  50. } else {
  51. resolve("")
  52. }
  53. })
  54. }
  55. /**
  56. * 添加任务
  57. */
  58. type downloadCoursewareType = {
  59. type: "downloadCourseware"
  60. extra: {
  61. id: string
  62. type: string
  63. outputName: string
  64. name: string
  65. jsonUrl: string
  66. }
  67. }
  68. /* {
  69. type: "downloadCourseware",
  70. qqq:"", //可以自定义属性 结果返回的时候 同时返回
  71. extra: {
  72. id: "",
  73. type: "pptx",
  74. outputName: `test.pptx`,
  75. name: "test",
  76. jsonUrl: "https://oss.dayaedu.com/pptList/example.json"
  77. }
  78. } */
  79. type uploadCoursewareType = {
  80. type: "uploadCourseware"
  81. extra: {
  82. outputName: string
  83. name: string
  84. type: string
  85. suffix: string
  86. path: string
  87. paths: string[]
  88. files: File
  89. }
  90. }
  91. /* {
  92. type: "uploadCourseware",
  93. qqq:"", //可以自定义属性 结果返回的时候 同时返回
  94. extra: {
  95. files: File
  96. name: "test",
  97. outputName: "test.pptx",
  98. path: "",
  99. paths: [""],
  100. suffix: ".pptx",
  101. type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
  102. }
  103. } */
  104. export const addCourseWareTask = (task: downloadCoursewareType | uploadCoursewareType | null, onCoursewaresMessage: (e: any) => void) => {
  105. return new Promise((resolve, reject) => {
  106. if (worker) {
  107. useOnCoursewaresMessage = onCoursewaresMessage
  108. worker
  109. .addCourseWareTask(task)
  110. .then((result: any) => {
  111. task = null
  112. resolve(result)
  113. })
  114. .catch(reject)
  115. } else {
  116. reject("worker没有初始化")
  117. }
  118. })
  119. }
  120. /**
  121. * 获取运行中的任务id
  122. */
  123. /* getRunJobIds().then(res => {
  124. // res.length 大于 1 时候 说明有任务运行
  125. }) */
  126. export const getRunJobIds = () => {
  127. return new Promise((resolve, reject) => {
  128. if (worker) {
  129. worker.getRunJobIds().then(resolve).catch(reject)
  130. } else {
  131. reject("worker没有初始化")
  132. }
  133. })
  134. }
  135. /**
  136. * 任务进度监控
  137. */
  138. const onCoursewaresMessage = (e: any) => {
  139. const { type, result = {} } = e.data
  140. if (type === "progress") {
  141. useOnCoursewaresMessage(result)
  142. }
  143. }