FireStatus.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <!-- eslint-disable vue/multi-word-component-names -->
  2. <template>
  3. <Result v-if="unavailble" status="error" title="网络异常" sub-title="无法获取到火灾风险信息" />
  4. <div v-else class="fire_wrapper">
  5. <CommonTitle class="mb-10px" label="矿井火灾风险性等级" :value="risk" />
  6. <Collapse ghost class="fire_list">
  7. <CollapsePanel class="fire_list_item" v-for="(item, i) in FIRE_STATUS_LIST" :key="`svvhbcfcp-${i}`" :showArrow="false">
  8. <template #header>
  9. <ListItem
  10. class="mt-5px mb-5px"
  11. :key="item.icon"
  12. :icon="item.icon"
  13. :label="item.label"
  14. :value="get(listData, item.prop)"
  15. :type="i % 2 ? 'green' : 'blue'"
  16. />
  17. </template>
  18. <template #default>
  19. <p v-for="(t, ix) in item.collapses" :key="`svvhbcfcp-${i}${ix}`" class="fire_list_collapse"> {{ t.name }}:{{ get(listData, t.prop) }} </p>
  20. </template>
  21. </CollapsePanel>
  22. </Collapse>
  23. </div>
  24. </template>
  25. <script lang="ts" setup>
  26. import { Collapse, CollapsePanel, Result } from 'ant-design-vue';
  27. import { get } from '../utils';
  28. import { computed } from 'vue';
  29. import CommonTitle from './CommonTitle.vue';
  30. import ListItem from './ListItem.vue';
  31. import { BillboardType, FIRE_STATUS_LIST } from '../billboard.data';
  32. const props = defineProps<{
  33. data: Partial<BillboardType>;
  34. }>();
  35. const unavailble = computed<boolean>(() => {
  36. return props.data.fireInfo === undefined;
  37. });
  38. const risk = computed(() => {
  39. const info = props.data.fireInfo;
  40. return riskTrans[get(info, 'fireWarnLevel', 0)];
  41. });
  42. const listData = computed(() => {
  43. const info = props.data.fireInfo;
  44. const value = {};
  45. FIRE_STATUS_LIST.forEach((cfg) => {
  46. value[cfg.prop] = get(warnTrans, get(info, cfg.prop), '低风险');
  47. cfg.collapses.forEach((el) => {
  48. value[el.prop] = get(info, el.prop);
  49. });
  50. });
  51. return value;
  52. });
  53. const riskTrans = {
  54. 0: '低风险',
  55. 101: '低风险',
  56. 102: '普通风险',
  57. 103: '较高风险',
  58. 104: '高风险',
  59. 201: '低风险',
  60. 1001: '低风险',
  61. };
  62. const warnTrans = {
  63. 0: '低风险',
  64. 101: '低风险',
  65. 102: '一般风险',
  66. 103: '较大风险',
  67. 104: '重大风险',
  68. 201: '报警',
  69. 1001: '网络断开',
  70. };
  71. </script>
  72. <style lang="less" scoped>
  73. .fire_list {
  74. height: 260px;
  75. overflow: auto;
  76. .fire_list_item {
  77. color: @white;
  78. // ::v-deep .zxm-collapse > .zxm-collapse-item > .zxm-collapse-header {
  79. // }
  80. }
  81. .fire_list_collapse {
  82. text-align: left;
  83. color: @white;
  84. margin-left: 10px;
  85. }
  86. }
  87. .fire_wrapper :deep(.zxm-collapse > .zxm-collapse-item > .zxm-collapse-header) {
  88. padding: 0;
  89. color: @white;
  90. }
  91. </style>