123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import modalWorker from './loadGltf.worker?worker';
- import Dexie from 'dexie';
- import { useModelStore } from '/@/store/modules/threejs';
- export function initModalWorker() {
- type model = {
- modelName: string;
- modalVal: any;
- version: string;
- };
- const modalUrlArr = [
- 'fm/fm_2023-06-02.glb',
- 'fm/Fm-door_2023-06-02.glb',
- 'fm/Fm-wire_2023-06-02.glb',
- 'fm/Fm-wall_2023-06-02.glb',
- 'fc/sdFc_2023-06-02.glb',
- 'fc/ddFc_2023-06-02.glb',
- 'cf/lmcf_2023-06-02.glb',
- 'cf/lmcfSide_2023-06-02.glb',
- 'cf/zdcf_2023-06-02.glb',
- 'cf/dscf_2023-06-02.glb',
- 'cf/dsgd_2023-06-02.glb',
- 'cf/dsmove_2023-06-02.glb',
- 'jbfj/jbfj-hd_2023-06-06.glb',
- 'jbfj/jbfj-fm_2023-06-02.glb',
- 'jbfj/jbfj-fc_2023-06-02.glb',
- 'ztfj/dj1_2023-06-02.glb',
- 'ztfj/dj2_2023-06-02.glb',
- 'ztfj/bg_2023-06-02.glb',
- 'ztfj/bg1_2023-06-02.glb',
- 'ztfj/dzp_2023-06-02.glb',
- 'ztfj/fbm_2023-06-02.glb',
- 'ztfj/ztfj-fc_2023-06-02.glb',
- 'ztfj/ztfj_2023-06-02.glb',
- 'fire/laneway_2023-06-02.glb',
- 'fire/chamber_2023-06-02.glb',
- 'fire/workFace_2023-06-29.glb',
- 'fire/tunFace_2023-06-29.glb',
- 'fire/nitrogen_2023-06-02.glb',
- 'fire/grout_2023-06-02.glb',
- 'yafeng/compressor_2023-06-02.glb',
- ];
- const db: any = new Dexie('DB');
- window['CustomDB'] = db;
- const modelStore = useModelStore();
- db.version(1).stores({
- modal: '&modalName, modalVal, versionStr',
- });
- db.open();
- new Promise(async (resolve) => {
- const validateModelUrlArr: string[] = [];
- for (let i = 0; i < modalUrlArr.length; i++) {
- const url = modalUrlArr[i];
- const fileName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
- const modalName = fileName.slice(0, -11);
- const version = fileName.slice(-11);
- const modalArr = await db.modal.where('modalName').equals(modalName).toArray();
- if (modalArr.length < 1) {
- validateModelUrlArr.push(url);
- } else {
- // 判断该版本是否一致,不一致删除
- const data = modelStore.modelArr.get(modalName);
- const versionDB = modalArr[0].versionStr;
- if (versionDB == version) {
- // 版本一致
- if (!data) {
- const model: model = {
- modelName: modalName,
- modalVal: modalArr[0].modalVal,
- version: modalArr[0].versionStr,
- };
- modelStore.setModel(model);
- }
- } else {
- // 版本不一致,删除模型,重新下载
- await db.modal.delete(modalName);
- validateModelUrlArr.push(url);
- }
- }
- }
- 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();
|