import modalWorker from './loadGltf.worker?worker'; import Dexie from 'dexie'; import { useModelStore } from '/@/store/modules/threejs'; export function initModalWorker() { type model = { modelName: string; modelVal: any; }; const modalUrlArr = [ 'fm/fm.glb', 'fm/Fm-door.glb', 'fm/Fm-wire.glb', 'fm/Fm-wall.glb', 'fc/sdFc.glb', 'fc/ddFc.glb', 'cf/lmcf.glb', 'cf/lmcfSide.glb', 'cf/zdcf.glb', 'cf/dscf.glb', 'jbfj/jbfj_hd.glb', 'jbfj/jbfj_fm.glb', 'jbfj/jbfj_fc.glb', 'ztfj/main.glb', 'ztfj/dj1.glb', 'ztfj/dj2.glb', 'ztfj/bg.glb', 'fire/laneway.glb', 'fire/workFace.glb', 'yafeng/nitrogen.glb', 'ceshi/glass.glb', ]; const db: any = new Dexie('DB'); window['CustomDB'] = db; const modelStore = useModelStore(); db.version(1).stores({ modal: '++id, modalName, modalVal', }); new Promise(async (resolve) => { const validateModelUrlArr: string[] = []; for (let i = 0; i < modalUrlArr.length; i++) { const url = modalUrlArr[i]; const modalName = url.replace(/(.*\/)*([^.]+).*/gi, '$2'); const aa = new Date().getTime(); const modalArr = await db.modal.where('modalName').equals(modalName).toArray(); console.log('模型下载时间------------》', new Date().getTime() - aa); if (modalArr.length < 1) { validateModelUrlArr.push(url); } else { if (!modelStore.modelArr.get(modalName)) { const model: model = { modelName: modalName, modelVal: modalArr[0].modalVal, }; modelStore.setModel(model); } } } resolve(validateModelUrlArr); }).then((validateModelUrlArr: string[]) => { validateModelUrlArr.forEach((url) => { const worker = new modalWorker(); worker.onmessage = async function (e) { const { data, message } = e.data; if (message === 'end') { if (data) { modelStore.setModel(data); } worker.terminate(); } }; worker.postMessage({ message: 'load', data: url }); }); }); } initModalWorker();