floder-type.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { computed, ref } from "vue";
  2. import { fetchFloderTypes } from "@/api";
  3. import type { FloderTypes, FloderType, Floder } from "@/api";
  4. import { getFloderByType } from "./floder";
  5. import { getUrlType, MetaType } from "@/utils";
  6. export const floderTypes = ref<FloderTypes>([]);
  7. export const getFloderType = (id: FloderType["filesTypeId"]) =>
  8. floderTypes.value.find((type) => type.filesTypeId === id);
  9. export const initialFloderTypes = async () => {
  10. floderTypes.value = await fetchFloderTypes();
  11. };
  12. export type FloderRoot = {
  13. flat: boolean,
  14. modal: boolean
  15. id: number;
  16. title: string;
  17. floders: (ReturnType<typeof getFloderByType>[number] & { metaType: MetaType })[];
  18. children?: FloderRoot[];
  19. };
  20. const gemerateRoot = (parentId: number | null = null) => {
  21. const items: FloderRoot[] = [];
  22. for (let i = 0; i < floderTypes.value.length; i++) {
  23. const type = floderTypes.value[i];
  24. if (type.parentId === parentId || (type.parentId === undefined && parentId === null)) {
  25. const item = {
  26. id: type.filesTypeId,
  27. title: type.filesTypeName,
  28. flat: !!type.flatShow,
  29. modal: !!type.modalShow,
  30. floders: getFloderByType(type).map((floder) => {
  31. !floder.filesUrl &&console.log(floder.filesUrl)
  32. return{
  33. ...floder,
  34. metaType: floder.filesUrl && getUrlType(floder.filesUrl),
  35. }
  36. }),
  37. children: gemerateRoot(type.filesTypeId)
  38. };
  39. items.push(item)
  40. }
  41. }
  42. return items
  43. };
  44. export const floderRoots = computed(gemerateRoot);
  45. export const getLevelRoot = (floder: Floder, roots = floderRoots.value): FloderRoot | undefined => {
  46. for (const root of roots) {
  47. if (root.floders.some(f => f.filesId === floder.filesId)) {
  48. return root;
  49. } else if (root.children?.length) {
  50. const cRoot = getLevelRoot(floder, root.children)
  51. if (cRoot) {
  52. return cRoot
  53. }
  54. }
  55. }
  56. }
  57. export const getFlatFloders = (root: FloderRoot, floders: FloderRoot['floders'] = []) => {
  58. floders.push(...root.floders)
  59. if (root.children?.length) {
  60. root.children.forEach(child => getFlatFloders(child, floders))
  61. }
  62. return floders
  63. }
  64. export type { FloderType, FloderTypes };