TimelineList-FireNew.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <!-- eslint-disable vue/multi-word-component-names -->
  2. <template>
  3. <div class="timeline">
  4. <div v-for="item in listConfig" :key="item.prop" class="flex items-center timeline-item">
  5. <div class="timeline-item__icon" :class="`timeline-item__icon_${item.color}`"></div><div class="timeline-item__dot"></div>
  6. <div class="timeline-item__label">{{ item.label }}</div>
  7. <div :class="`timeline-item__value_${item.color}`">
  8. {{ item.value }}
  9. </div>
  10. </div>
  11. <div class="timeline-component"></div>
  12. </div>
  13. </template>
  14. <script lang="ts" setup>
  15. withDefaults(
  16. defineProps<{
  17. listConfig: {
  18. value: string;
  19. color: string;
  20. label: string;
  21. prop: string;
  22. }[];
  23. }>(),
  24. {
  25. listConfig: () => [],
  26. }
  27. );
  28. </script>
  29. <style lang="less" scoped>
  30. @import '/@/design/theme.less';
  31. @import '@/design/theme.less';
  32. /* Timeline 相关的样式 */
  33. @{theme-deepblue} {
  34. .timeline-item {
  35. --image-warn_icon_5: url('/@/assets/images/themify/deepblue/home-container/configurable/warn_icon_5.png');
  36. --image-warn_icon_4: url('/@/assets/images/themify/deepblue/home-container/configurable/warn_icon_4.png');
  37. --image-warn_icon_3: url('/@/assets/images/themify/deepblue/home-container/configurable/warn_icon_3.png');
  38. --image-warn_icon_2: url('/@/assets/images/themify/deepblue/home-container/configurable/warn_icon_2.png');
  39. --image-warn_icon_1: url('/@/assets/images/themify/deepblue/home-container/configurable/warn_icon_1.png');
  40. }
  41. }
  42. .timeline-item {
  43. --image-warn_icon_5: url('/@/assets/images/home-container/configurable/warn_icon_5.png');
  44. --image-warn_icon_4: url('/@/assets/images/home-container/configurable/warn_icon_4.png');
  45. --image-warn_icon_3: url('/@/assets/images/home-container/configurable/warn_icon_3.png');
  46. --image-warn_icon_2: url('/@/assets/images/home-container/configurable/warn_icon_2.png');
  47. --image-warn_icon_1: url('/@/assets/images/home-container/configurable/warn_icon_1.png');
  48. height: 20%;
  49. }
  50. .timeline-item__icon_red {
  51. background-image: var(--image-warn_icon_5);
  52. }
  53. .timeline-item__icon_orange {
  54. background-image: var(--image-warn_icon_4);
  55. }
  56. .timeline-item__icon_yellow {
  57. background-image: var(--image-warn_icon_3);
  58. }
  59. .timeline-item__icon_green {
  60. background-image: var(--image-warn_icon_2);
  61. }
  62. .timeline-item__icon_blue {
  63. background-image: var(--image-warn_icon_1);
  64. }
  65. .timeline-item__icon {
  66. width: 33px;
  67. height: 35px;
  68. margin-left: 50px;
  69. background-repeat: no-repeat;
  70. background-position: center center;
  71. }
  72. .timeline-item__dot {
  73. width: 10px;
  74. height: 10px;
  75. margin-left: 70px;
  76. background-color: @vent-gas-primary-bg;
  77. border-radius: 5px;
  78. position: relative;
  79. }
  80. .timeline-item__dot::before {
  81. content: '';
  82. position: absolute;
  83. top: -3px;
  84. left: -3px;
  85. width: 16px;
  86. height: 16px;
  87. border-radius: 8px;
  88. border: 1px solid @vent-gas-tab-border;
  89. }
  90. .timeline-item__label {
  91. width: 100px;
  92. margin-left: 70px;
  93. }
  94. .timeline-item__value_red {
  95. color: red;
  96. }
  97. .timeline-item__value_orange {
  98. color: orange;
  99. }
  100. .timeline-item__value_yellow {
  101. color: yellow;
  102. }
  103. .timeline-item__value_green {
  104. color: yellowgreen;
  105. }
  106. .timeline-item__value_blue {
  107. color: lightblue;
  108. }
  109. .timeline {
  110. height: 220px;
  111. padding: 5px;
  112. position: relative;
  113. }
  114. .timeline-component {
  115. position: absolute;
  116. width: 2px;
  117. height: 180px;
  118. top: 20px;
  119. left: 162px;
  120. background-image: @vent-configurable-home-timeline;
  121. }
  122. </style>