12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import App from './app.vue'
- import { appEl, SceneTypeDesc, scenes } from '@/store'
- import { mount, deepIsRevise } from '@/utils'
- import { reactive, ref } from 'vue'
- import type { Scene } from '@/store'
- import type { ModelExpose } from './platform'
- export type FuseModelType = typeof fuseModel
- export type SceneModelType = Pick<Scene, 'type' | 'num'>
- export type ModelType = FuseModelType | SceneModelType
- export type ModelProps = { type: ModelType, callback: ((expose?: ModelExpose, err?: Error) => void) | null }
- export type { ModelExpose }
- export const fuseModel = Symbol('fuse')
- export const currentModel = ref<ModelType>(fuseModel)
- export const modelProps: ModelProps = reactive({ type: currentModel, callback: null })
- export const getModelTypeDesc = (model: ModelType) => {
- if (model === fuseModel) {
- return '融合场景'
- } else {
- return SceneTypeDesc[model.type]
- }
- }
- export const getModelDesc = (model: ModelType) => {
- console.log(model)
- if (model === fuseModel) {
- return '融合场景'
- } else {
- return scenes.value.find(scene => scene.num === model.num && scene.type === model.type)?.name
- }
- }
- const _loadModel = (() => {
- let oldModelType: ModelType
- let oldResult: Promise<ModelExpose>
- return (modelType: ModelType) => {
- if (!deepIsRevise(oldModelType, modelType)) {
- return oldResult
- }
- oldModelType = modelType
- return oldResult = new Promise<any>((resolve, reject) => {
- modelProps.callback = (data: any, err) => {
- if (err) {
- reject(err)
- } else {
- resolve(data)
- }
- }
- currentModel.value = modelType
- })
- }
- })();
- let isInitial = false
- export const loadModel = (modelType: ModelType): Promise<ModelExpose> => {
- const modelPromise = _loadModel(modelType)
- if (!isInitial) {
- if (!appEl.value) {
- throw new Error('appEl 未初始化')
- } else {
- mount(appEl.value, App)
- isInitial = true
- }
- }
- return modelPromise
- }
|