ListOne.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <!-- eslint-disable vue/multi-word-component-names -->
  2. <template>
  3. <div class="list flex" :class="`list_${type}`">
  4. <div class="flex-grow" :class="`list__wrapper_${type}`">
  5. <div v-for="(item, i) in listConfig" :key="`customlist${i}`" class="list-item" :class="`list-item_${type}`">
  6. <div class="list-item__content" :class="`list-item__content_${type} ${getBgClass(item.value)}`">
  7. <div class="list-item__label"> {{ item.label }}</div>
  8. <div class="list-item__value" :class="`list-item__value_${type}`" v-if="item.label != '控制模式'">
  9. <span v-if="item.label === '系统状态' || item.label === '运行状态'" class="status_dot"></span>
  10. {{ item.value }}
  11. </div>
  12. <div class="list-item__value" :class="`list-item__value_${type}`" v-else>
  13. <!-- 单选按钮组 -->
  14. <div class="radio-group">
  15. <label class="radio-label">
  16. <input
  17. type="radio"
  18. :name="`mode_${i}`"
  19. value="auto"
  20. :checked="item.value === '自动'"
  21. @change="$emit('mode-change', { index: i, mode: '自动' })"
  22. />
  23. <span>自动</span>
  24. </label>
  25. <label class="radio-label">
  26. <input
  27. type="radio"
  28. :name="`mode_${i}`"
  29. value="manual"
  30. :checked="item.value === '手动'"
  31. @change="$emit('mode-change', { index: i, mode: '手动' })"
  32. />
  33. <span>手动</span>
  34. </label>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. <script lang="ts" setup>
  43. withDefaults(
  44. defineProps<{
  45. listConfig: {
  46. label: string;
  47. value: string; // 低风险 | 一般风险 | 较大风险 | 严重风险 | 报警
  48. color?: string;
  49. info?: string;
  50. }[];
  51. type: string;
  52. }>(),
  53. {
  54. listConfig: () => [],
  55. type: 'A',
  56. }
  57. );
  58. const getBgClass = (riskLevel: string) => {
  59. switch (riskLevel) {
  60. case '低风险':
  61. return 'bg-lowRisk';
  62. case '一般风险':
  63. return 'bg-normalRisk';
  64. case '较大风险':
  65. return 'bg-greaterRisk ';
  66. case '重大风险':
  67. return 'bg-majorRisk';
  68. case '报警':
  69. return 'bg-warning';
  70. default:
  71. return 'bg-lowRisk';
  72. }
  73. };
  74. </script>
  75. <style lang="less" scoped>
  76. @import '/@/design/theme.less';
  77. .list {
  78. background-repeat: no-repeat;
  79. position: relative;
  80. }
  81. .list-item_B {
  82. align-items: center;
  83. text-align: center;
  84. margin: 20px;
  85. display: flex;
  86. }
  87. .list-item__content_B {
  88. display: flex;
  89. align-items: center;
  90. justify-content: space-between;
  91. width: 100%;
  92. height: 42px;
  93. padding: 0 30px;
  94. color: #ffffff;
  95. font-size: 13px;
  96. background-image: url('/@/assets/images/beltFire/3-1.png');
  97. background-repeat: no-repeat;
  98. background-size: 100% 100%;
  99. }
  100. .list-item__content_B > .list-item__label {
  101. padding-top: 10px;
  102. font-size: 14px;
  103. }
  104. .list-item__content_B > .list-item__value {
  105. padding-top: 10px;
  106. font-size: 14px;
  107. font-weight: bold;
  108. color: #fff;
  109. }
  110. .radio-group {
  111. display: flex;
  112. gap: 10px;
  113. justify-content: center;
  114. align-items: center;
  115. }
  116. .radio-label {
  117. display: flex;
  118. align-items: center;
  119. gap: 6px;
  120. cursor: pointer;
  121. font-size: 14px;
  122. }
  123. .radio-label input[type='radio'] {
  124. width: 16px;
  125. height: 16px;
  126. margin: 0;
  127. cursor: pointer;
  128. }
  129. .status_dot {
  130. display: inline-block;
  131. width: 8px;
  132. height: 8px;
  133. border-radius: 50%;
  134. margin-right: 4px;
  135. background-color: #46ff9c;
  136. }
  137. </style>