useSceneInfos.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { computed, ref } from 'vue';
  2. import { getShopSpaceList, getCamerasByWorkSpace } 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. console.log(scenesTree.value);
  52. });
  53. };
  54. const getCameraList = (workshop: number) => {
  55. return getCamerasByWorkSpace({ workshopId: workshop }).then((res) => {
  56. return res;
  57. });
  58. };
  59. return {
  60. scenesInfos,
  61. scenesTree,
  62. flattenedWorkshops,
  63. flattendWorkspaces,
  64. getScenesTree,
  65. calculateTreeData,
  66. getCameraList,
  67. };
  68. }
  69. export default useSceneInfos;