useSceneInfos.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { computed, ref } from 'vue';
  2. import { getShopSpaceList, getCamerasByWorkShopId } from '@/api/scene/scene';
  3. import { CompanyInfoItem } from '@/types/scene/type.ts';
  4. type ElTreeItem = {
  5. value: any;
  6. label: string;
  7. children?: ElTreeItem[];
  8. };
  9. type TreeProps = {
  10. /** level:1-数据读取至公司 2-数据读取至工厂 3-数据读取至工位 */
  11. level: number;
  12. labelKey: string;
  13. valueKey: string;
  14. disabled?: boolean;
  15. };
  16. export function useSceneInfos() {
  17. const scenesInfos = ref<CompanyInfoItem[]>([]);
  18. const scenesTree = ref<ElTreeItem[]>([]);
  19. const flattenedWorkshops = computed(() => {
  20. return scenesInfos.value.reduce((total, next) => [...total, ...next.children], []);
  21. });
  22. const flattendWorkspaces = computed(() => {
  23. return scenesInfos.value.reduce((total, next) => {
  24. let newArr: any[] = [];
  25. if (next.children && next.children.length) {
  26. newArr = next.children.reduce(
  27. (subTotal, subNext) => [...subTotal, ...subNext.children],
  28. [],
  29. );
  30. }
  31. return [...total, ...newArr];
  32. }, []);
  33. });
  34. const calculateTreeData = (infos: any[], treeProps: TreeProps, level: number): ElTreeItem[] => {
  35. return infos.map((data) => {
  36. return {
  37. value: data[treeProps.valueKey],
  38. label: data[treeProps.labelKey],
  39. children:
  40. data.children && data.children.length && treeProps.level > level
  41. ? calculateTreeData(data.children, treeProps, level + 1)
  42. : [],
  43. disabled: treeProps.disabled && level < treeProps.level,
  44. };
  45. });
  46. };
  47. const getScenesTree = (treeProps: TreeProps) => {
  48. getShopSpaceList().then((res) => {
  49. scenesInfos.value = res;
  50. scenesTree.value = calculateTreeData(res, treeProps, 1);
  51. });
  52. };
  53. return {
  54. scenesInfos,
  55. scenesTree,
  56. flattenedWorkshops,
  57. flattendWorkspaces,
  58. getScenesTree,
  59. calculateTreeData,
  60. };
  61. }
  62. export default useSceneInfos;