icons.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import axios from '@/http';
  2. import { parseSvg } from '@meta2d/svg';
  3. import { cdn } from './api';
  4. import { getFolders } from './png';
  5. const normalFolder = import.meta.env.VITE_BASEURL ? '/2d/svg/' : '/svg/';
  6. /**
  7. * 请求 svg 的目录
  8. * @returns
  9. */
  10. export async function getIconFolders() {
  11. return await getFolders(normalFolder);
  12. }
  13. /**
  14. * 请求 svg 目录下的所有 svg
  15. * @param name 目录名
  16. * @returns
  17. */
  18. export async function getIcons(name: string) {
  19. const files = (await axios.get(normalFolder + name + '/')) as any[];
  20. return await Promise.all(files.map((f) => svgToPens(f, name)));
  21. }
  22. export function filename(str: string) {
  23. const i = str.lastIndexOf('.');
  24. return str.substring(0, i);
  25. }
  26. async function svgToPens(f: any, diretoryName: string) {
  27. const _name = filename(f.name);
  28. const name = globalThis.fileJson
  29. ? globalThis.fileJson[_name]
  30. ? globalThis.fileJson[_name]
  31. : _name
  32. : _name;
  33. const image = cdn + normalFolder + diretoryName + '/' + f.name;
  34. const svgDom: string = await axios.get(image);
  35. let _svgDom = svgDom.replace('stroke:#333;', 'stroke:#bdc7db;');
  36. const data = parseSvg(_svgDom);
  37. return {
  38. name,
  39. pinyin: globalThis.fileJson ? _name : null,
  40. // image, // image 只作为缩略图
  41. componentDatas: data,
  42. svg: _svgDom,
  43. component: true,
  44. };
  45. }