index.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import App from './app.vue'
  2. import { appEl, SceneTypeDesc, scenes } from '@/store'
  3. import { mount, deepIsRevise } from '@/utils'
  4. import { reactive, ref } from 'vue'
  5. import type { Scene } from '@/store'
  6. import type { ModelExpose } from './platform'
  7. export type FuseModelType = typeof fuseModel
  8. export type SceneModelType = Pick<Scene, 'type' | 'num'>
  9. export type ModelType = FuseModelType | SceneModelType
  10. export type ModelProps = { type: ModelType, callback: ((expose?: ModelExpose, err?: Error) => void) | null }
  11. export type { ModelExpose }
  12. export const fuseModel = Symbol('fuse')
  13. export const currentModel = ref<ModelType>(fuseModel)
  14. export const modelProps: ModelProps = reactive({ type: currentModel, callback: null })
  15. export const getModelTypeDesc = (model: ModelType) => {
  16. if (model === fuseModel) {
  17. return '融合场景'
  18. } else {
  19. return SceneTypeDesc[model.type]
  20. }
  21. }
  22. export const getModelDesc = (model: ModelType) => {
  23. console.log(model)
  24. if (model === fuseModel) {
  25. return '融合场景'
  26. } else {
  27. return scenes.value.find(scene => scene.num === model.num && scene.type === model.type)?.name
  28. }
  29. }
  30. const _loadModel = (() => {
  31. let oldModelType: ModelType
  32. let oldResult: Promise<ModelExpose>
  33. return (modelType: ModelType) => {
  34. if (!deepIsRevise(oldModelType, modelType)) {
  35. return oldResult
  36. }
  37. oldModelType = modelType
  38. return oldResult = new Promise<any>((resolve, reject) => {
  39. modelProps.callback = (data: any, err) => {
  40. if (err) {
  41. reject(err)
  42. } else {
  43. resolve(data)
  44. }
  45. }
  46. currentModel.value = modelType
  47. })
  48. }
  49. })();
  50. let isInitial = false
  51. export const loadModel = (modelType: ModelType): Promise<ModelExpose> => {
  52. const modelPromise = _loadModel(modelType)
  53. if (!isInitial) {
  54. if (!appEl.value) {
  55. throw new Error('appEl 未初始化')
  56. } else {
  57. mount(appEl.value, App)
  58. isInitial = true
  59. }
  60. }
  61. return modelPromise
  62. }