main.worker.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import modalWorker from './loadGltf.worker?worker';
  2. import Dexie from 'dexie';
  3. import { useModelStore } from '/@/store/modules/threejs';
  4. export function initModalWorker() {
  5. type model = {
  6. modelName: string;
  7. modalVal: any;
  8. version: string;
  9. };
  10. const modalUrlArr = [
  11. 'fm/fm_2023-06-02.glb',
  12. 'fm/Fm-door_2023-06-02.glb',
  13. 'fm/Fm-wire_2023-06-02.glb',
  14. 'fm/Fm-wall_2023-06-02.glb',
  15. 'fc/sdFc_2023-06-02.glb',
  16. 'fc/ddFc_2023-06-02.glb',
  17. 'cf/lmcf_2023-06-02.glb',
  18. 'cf/lmcfSide_2023-06-02.glb',
  19. 'cf/zdcf_2023-06-02.glb',
  20. 'cf/dscf_2023-06-02.glb',
  21. 'cf/dsgd_2023-06-02.glb',
  22. 'cf/dsmove_2023-06-02.glb',
  23. 'jbfj/jbfj-hd_2023-06-06.glb',
  24. 'jbfj/jbfj-fm_2023-06-02.glb',
  25. 'jbfj/jbfj-fc_2023-06-02.glb',
  26. 'ztfj/dj1_2023-06-02.glb',
  27. 'ztfj/dj2_2023-06-02.glb',
  28. 'ztfj/bg_2023-06-02.glb',
  29. 'ztfj/bg1_2023-06-02.glb',
  30. 'ztfj/dzp_2023-06-02.glb',
  31. 'ztfj/fbm_2023-06-02.glb',
  32. 'ztfj/ztfj-fc_2023-06-02.glb',
  33. 'ztfj/ztfj_2023-06-02.glb',
  34. 'fire/laneway_2023-06-02.glb',
  35. 'fire/chamber_2023-06-02.glb',
  36. 'fire/workFace_2023-06-29.glb',
  37. 'fire/tunFace_2023-06-29.glb',
  38. 'fire/nitrogen_2023-06-02.glb',
  39. 'fire/grout_2023-06-02.glb',
  40. 'yafeng/compressor_2023-06-02.glb',
  41. ];
  42. const db: any = new Dexie('DB');
  43. window['CustomDB'] = db;
  44. const modelStore = useModelStore();
  45. db.version(1).stores({
  46. modal: '&modalName, modalVal, versionStr',
  47. });
  48. db.open();
  49. new Promise(async (resolve) => {
  50. const validateModelUrlArr: string[] = [];
  51. for (let i = 0; i < modalUrlArr.length; i++) {
  52. const url = modalUrlArr[i];
  53. const fileName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
  54. const modalName = fileName.slice(0, -11);
  55. const version = fileName.slice(-11);
  56. const modalArr = await db.modal.where('modalName').equals(modalName).toArray();
  57. if (modalArr.length < 1) {
  58. validateModelUrlArr.push(url);
  59. } else {
  60. // 判断该版本是否一致,不一致删除
  61. const data = modelStore.modelArr.get(modalName);
  62. const versionDB = modalArr[0].versionStr;
  63. if (versionDB == version) {
  64. // 版本一致
  65. if (!data) {
  66. const model: model = {
  67. modelName: modalName,
  68. modalVal: modalArr[0].modalVal,
  69. version: modalArr[0].versionStr,
  70. };
  71. modelStore.setModel(model);
  72. }
  73. } else {
  74. // 版本不一致,删除模型,重新下载
  75. await db.modal.delete(modalName);
  76. validateModelUrlArr.push(url);
  77. }
  78. }
  79. }
  80. resolve(validateModelUrlArr);
  81. }).then((validateModelUrlArr: string[]) => {
  82. validateModelUrlArr.forEach((url) => {
  83. const worker = new modalWorker();
  84. worker.onmessage = async function (e) {
  85. const { data, message } = e.data;
  86. if (message === 'end') {
  87. if (data) {
  88. modelStore.setModel(data);
  89. }
  90. worker.terminate();
  91. }
  92. };
  93. worker.postMessage({ message: 'load', data: url });
  94. });
  95. });
  96. }
  97. initModalWorker();