material.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import localForage from 'localforage';
  2. import axios from 'axios';
  3. // 单实例,避免冲突
  4. const materialsStore = localForage.createInstance({
  5. name: 'meta2d-materials',
  6. storeName: 'materials',
  7. version: 1.0,
  8. description: '存储的是系统组件',
  9. });
  10. // subclass - subclass
  11. export async function GetDBMaterials(subclass: string) {
  12. return materialsStore.getItem(subclass);
  13. }
  14. // subclass - subclass
  15. // materials - the data of subclass
  16. export function SetDBMaterials(subclass: string, materials: any[]) {
  17. return materialsStore.setItem(subclass, materials);
  18. }
  19. export function MaterialsGroup(data: any[], folders?: any[]) {
  20. const obj: any = {};
  21. if (!folders) {
  22. if (data.length === 0) {
  23. // 长度为0
  24. obj['Uncategorized(未分类)'] = [];
  25. } else {
  26. data.forEach((item: { folder: string }) => {
  27. if (!item.folder) {
  28. item.folder = 'Uncategorized(未分类)';
  29. }
  30. if (!obj[item.folder]) {
  31. obj[item.folder] = [item];
  32. } else {
  33. obj[item.folder].push(item);
  34. }
  35. });
  36. }
  37. } else {
  38. folders.forEach((name: string) => {
  39. obj[name] = [];
  40. });
  41. obj['Uncategorized(未分类)'] = [];
  42. data.forEach((item: { folder: string }) => {
  43. if (!obj[item.folder]) {
  44. obj['Uncategorized(未分类)'].push(item);
  45. } else {
  46. obj[item.folder].push(item);
  47. }
  48. });
  49. }
  50. const list: any[] = [];
  51. // tslint:disable-next-line:forin
  52. for (const key in obj) {
  53. list.push({ name: key, list: obj[key], show: true });
  54. }
  55. return list;
  56. }
  57. export async function getNetJsDiagram() {
  58. let arr: any[] = [
  59. { name: '箭头', id: 'f955205' },
  60. { name: '拓扑图未分类', id: '6cd3b234' },
  61. { name: '云', id: '406687' },
  62. { name: '网络设备', id: '3f264892' },
  63. { name: '电子产品', id: '768107e4' },
  64. { name: '楼宇', id: 'c109d4d' },
  65. { name: '物联网未分类', id: '33253fe' },
  66. { name: '逻辑门电路', id: '334c1c88' },
  67. { name: '电阻', id: '597dab3' },
  68. { name: '电容', id: '2181f192' },
  69. { name: '电感', id: '1dba554' },
  70. { name: '开关、转换器', id: '6b39d7ca' },
  71. { name: '二极管', id: '3180efea' },
  72. { name: '信号源', id: '6bd86063' },
  73. { name: '晶体管', id: '017c4d4' },
  74. { name: '仪表', id: '4e0df5d5' },
  75. { name: '电子显示设备', id: '68559dd4' },
  76. { name: '真空电子管', id: '181c247d' },
  77. { name: '电子波形', id: '42daf6' },
  78. { name: '转动与机械设备', id: '2a5e218e' },
  79. { name: '电子逻辑计算器', id: 'f9beb15' },
  80. { name: '电子传输/传播', id: '37f12dd3' },
  81. { name: '电子未分类', id: '54aa6d1' },
  82. { name: '液压符号', id: 'b03ed4e' },
  83. { name: '工具', id: '108095a' },
  84. ];
  85. globalThis.jsPensMap = {};
  86. const lists = await Promise.all(
  87. arr.map((item) => openNewMaterial(item.name, item))
  88. );
  89. arr.forEach((item, index) => {
  90. item.list = lists[index];
  91. item.show = true;
  92. });
  93. return arr;
  94. }
  95. async function openNewMaterial(subclass: string, group) {
  96. // const [{ GetDBMaterials, SetDBMaterials }] = await Promise.all([
  97. // import('../services/material'),
  98. // ]);
  99. let materials: any = await GetDBMaterials(subclass);
  100. if (!materials || !materials.length) {
  101. materials = await axios.get('/api/tools', {
  102. params: {
  103. subClass: (group as any).id,
  104. pageCount: 1000,
  105. },
  106. });
  107. if (materials) {
  108. SetDBMaterials(group.name, materials);
  109. }
  110. }
  111. // const newList: any[] = [];
  112. materials.forEach((material: any) => {
  113. if (!material.fullname) {
  114. // fullname 不存在,采用其他方式
  115. // newList.push(material);
  116. } else {
  117. // newList.push({
  118. // subClassName: material.subClassName,
  119. // id: material.id,
  120. // name: material.name,
  121. // fullname: material.fullname,
  122. // data: material.data,
  123. // svg: material.svg,
  124. // });
  125. }
  126. globalThis.jsPensMap[material.fullname] = material.svg;
  127. });
  128. // (window as any).meta2dTools = materials;
  129. // (window as any).registerToolsNew();
  130. // (window as any).meta2dTools = undefined;
  131. // return newList;
  132. }