useComponentHelper.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //组件相关渲染逻辑 提供 getComponentName、getComponentStyle、getIconClass 等组件渲染逻辑
  2. //组件使用映射
  3. import { defineAsyncComponent } from 'vue'
  4. import LoadingComponent from '@/components/GeneralComponents/LoadingComponent.vue'
  5. function lazyComponent(loader) {
  6. return defineAsyncComponent({
  7. loader,
  8. loadingComponent: LoadingComponent,
  9. delay: 100,
  10. timeout: 5000,
  11. });
  12. }
  13. const componentMap = {
  14. Valve: lazyComponent(() => import('@/components/GeneralComponents/ValveComponent.vue')),
  15. Pump: lazyComponent(() => import('@/components/GeneralComponents/PumpComponent.vue')),
  16. MTypeHollowTank: lazyComponent(() => import('@/components/GeneralComponents/MTypeHollowTankComponent.vue')),
  17. MTypeTank: lazyComponent(() => import('@/components/GeneralComponents/MTypeTankComponent.vue')),
  18. STypeHollowTank: lazyComponent(() => import('@/components/GeneralComponents/STypeHollowTankComponent.vue')),
  19. STypeTank: lazyComponent(() => import('@/components/GeneralComponents/STypeTankComponent.vue')),
  20. JTypeTank: lazyComponent(() => import('@/components/GeneralComponents/JTypeTankComponent.vue')),
  21. TempSlider: lazyComponent(() => import('@/components/GeneralComponents/TempSliderComponent.vue')),
  22. WaterLevelMap: lazyComponent(() => import('@/components/GeneralComponents/WaterLevelMapComponent.vue')),
  23. PressureGauge: lazyComponent(() => import('@/components/GeneralComponents/PressureGaugeComponent.vue')),
  24. Mixer: lazyComponent(() => import('@/components/GeneralComponents/MixerComponent.vue')),
  25. PageIconSH: lazyComponent(() => import('@/components/GeneralComponents/PageIconSHComponent.vue')),
  26. Pipe: lazyComponent(() => import('@/components/GeneralComponents/PipelineComponent.vue')),
  27. Arrow : lazyComponent(() => import('@/components/GeneralComponents/ArrowComponent.vue')),
  28. PageIconHN: lazyComponent(() => import('@/components/GeneralComponents/PageIconHNComponent.vue')),
  29. RTypeHollowTank: lazyComponent(() => import('@/components/GeneralComponents/RTypeHollowTankComponent.vue')),
  30. FlowMeter: lazyComponent(() => import('@/components/GeneralComponents/FlowMeterComponent.vue')),
  31. Conveyor: lazyComponent(() => import('@/components/GeneralComponents/ConveyorComponent.vue')),
  32. PhSlider: lazyComponent(() => import('@/components/GeneralComponents/PhSliderComponent.vue')),
  33. Separator: lazyComponent(() => import('@/components/GeneralComponents/SeparatorComponent.vue')),
  34. VTypeHollowTank: lazyComponent(() => import('@/components/GeneralComponents/VTypeHollowTankComponent.vue')),
  35. VTypeTank: lazyComponent(() => import('@/components/GeneralComponents/VTypeTankComponent.vue')),
  36. HeatExchangeWaterTank: lazyComponent(() => import('@/components/GeneralComponents/HeatExchangeWaterTankComponent.vue')),
  37. ButterflyValve: lazyComponent(() => import('@/components/GeneralComponents/ButterflyValveComponent.vue')),//蝶阀
  38. BeltFilter: lazyComponent(() => import('@/components/GeneralComponents/BeltFilterComponent.vue')),//平真空带式过滤器
  39. Arrow2 : lazyComponent(() => import('@/components/GeneralComponents/Arrow2Component.vue')),//箭头2
  40. };
  41. export function useComponentHelper(modelMapRef) {
  42. //获取组件名称,用于组件渲染
  43. const getComponentName = (modelId) => {
  44. const model = modelMapRef.value[modelId];
  45. if (!model) {
  46. console.warn(`模型 ${modelId} 未找到`);
  47. return 'div';
  48. }
  49. if (model.componentType === 'icon') return 'i';
  50. const comp = componentMap[model.componentName];
  51. if (!comp) {
  52. console.warn(`组件未注册: ${model.componentName}`);
  53. return 'div';
  54. }
  55. return comp;
  56. };
  57. //获取组件样式,用于组件位置渲染
  58. const getComponentStyle = (item) => {
  59. const model = modelMapRef.value[item.modelId];
  60. return {
  61. position: 'absolute',
  62. left: item.x + '%',
  63. top: item.y + '%',
  64. transform: `translate(-50%, -50%) rotate(${item.rotate || 0}deg)`,
  65. zIndex: model?.zIndex || 1,
  66. };
  67. };
  68. //获取图标类名,用于图标渲染
  69. const getIconClass = (modelId) => {
  70. const model = modelMapRef.value[modelId];
  71. return model?.iconClass || '';
  72. };
  73. //获取设备名称
  74. const getEquipmentTitle = (name) => name || '设备';
  75. //获取管道class(defaultType:默认类型,realType:变化的管道类型)
  76. const getPipelineClass = (defaultType , realType = null) => {
  77. // console.log(defaultType, realType)
  78. return `progress_${realType || defaultType}`
  79. };
  80. //获取管道style
  81. const getPipelineStyle = (item, isReverse = false) => {
  82. const model = modelMapRef.value[item.modelId];
  83. const baseRotate = item.rotate || 0;
  84. const finalRotate = isReverse ? baseRotate + 180 : baseRotate;//管道旋转角度
  85. return {
  86. position: 'absolute',
  87. left: item.x + '%',
  88. top: item.y + '%',
  89. transform: `translate(-50%, -50%) rotate(${finalRotate}deg)`,
  90. zIndex: model?.zIndex || 1,
  91. width: item.pipeLength + '%',
  92. };
  93. };
  94. return {
  95. getComponentName,
  96. getComponentStyle,
  97. getIconClass,
  98. getEquipmentTitle,
  99. getPipelineClass,
  100. getPipelineStyle
  101. }
  102. }