MachineIndex.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <content-block title="Piling Machine" class="pile-machine-status">
  3. <template v-slot:title-right>
  4. <slot name="title-right" :data="selectMachine">
  5. </slot>
  6. </template>
  7. <template v-slot:content>
  8. <div class="offset-status">
  9. <div class="offset-title">
  10. <span>Drill Rod Inclination</span>
  11. <span
  12. :class="{'verticality-tolerance':true, 'warning': calcDeviation(machineLatextIndex.verticalDeviation) }">
  13. verticality tolerance:
  14. <span class="value">
  15. {{ machineLatextIndex.verticalDeviation * 100 || 0 }} %
  16. </span>
  17. </span>
  18. </div>
  19. <div class="offset-item">
  20. <i class="deviation-point" :style="{
  21. left: `${calcTiltAngle(machineLatextIndex.tiltAngle)}%`,
  22. top: `${calcForwardTiltAngle(machineLatextIndex.forwardTiltAngle)}%`,
  23. backgroundColor: calcDeviation(machineLatextIndex.verticalDeviation) && 'red'
  24. }"></i>
  25. <span class="label tilt-angle">
  26. <span>侧倾角</span>
  27. <span>
  28. {{ machineLatextIndex.tiltAngle || '--' }}°
  29. </span>
  30. </span>
  31. <span class="label forward-tilt-angle">
  32. <span>前倾角</span>
  33. <span>
  34. {{ machineLatextIndex.forwardTiltAngle || '--' }}°
  35. </span>
  36. </span>
  37. </div>
  38. </div>
  39. </template>
  40. </content-block>
  41. </template>
  42. <script>
  43. import ContentBlock from "@/views/cons/screen/ContentBlock.vue";
  44. import {calcPileMachineLatestIndex} from "@/api/cons/pileMachineInfo";
  45. // 阈值
  46. const DeviationThreshold = 0.015;
  47. const DeviationDegreeThreshold = 0.86;
  48. export default {
  49. components: {ContentBlock},
  50. props: {
  51. selectMachine: {
  52. type: Object,
  53. default: null
  54. }
  55. },
  56. computed: {},
  57. watch: {
  58. selectMachine(val) {
  59. if (!val && this.realtimeInterVal) {
  60. clearInterval(this.realtimeInterVal)
  61. }
  62. if (val && !this.realtimeInterVal) {
  63. this.realtimeInterVal = setInterval(() => {
  64. this.getMachineRealtimeData()
  65. }, 3000)
  66. }
  67. }
  68. },
  69. data() {
  70. return {
  71. realtimeInterVal: null,
  72. machineLatextIndex: {},
  73. }
  74. },
  75. // 组件卸载前清空图层信息
  76. beforeDestroy() {
  77. this.realtimeInterVal && clearInterval(this.realtimeInterVal)
  78. },
  79. created() {
  80. },
  81. mounted() {
  82. this.init();
  83. },
  84. methods: {
  85. init() {
  86. },
  87. getMachineRealtimeData() {
  88. calcPileMachineLatestIndex(this.selectMachine.id).then(response => {
  89. this.machineLatextIndex = response.data
  90. })
  91. },
  92. calcDeviation(deviation) {
  93. return Math.abs(deviation) > DeviationThreshold
  94. },
  95. calcForwardTiltAngle(forwardTiltAngle) {
  96. if (Math.abs(forwardTiltAngle) > DeviationDegreeThreshold) {
  97. return 0
  98. }
  99. return ((DeviationDegreeThreshold + forwardTiltAngle) / (DeviationDegreeThreshold * 2)).toFixed(2) * 100
  100. },
  101. calcTiltAngle(tiltAngle) {
  102. if (Math.abs(tiltAngle) > DeviationDegreeThreshold) {
  103. return 0
  104. }
  105. return ((DeviationDegreeThreshold + tiltAngle) / (DeviationDegreeThreshold * 2)).toFixed(2) * 100
  106. }
  107. },
  108. };
  109. </script>
  110. <style lang="scss" src="./index.scss" scoped/>