useSceneInfos.ts 2.1 KB

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