GrowCard.vue 5.96 KB
<template>
  <div class="md:flex">
    <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4 !md:mr-4">
      <div class="flex" style="height: 100px">
        <div class="mr-4"
          ><img src="/src/assets/images/device-count.png" style="width: 5rem; height: 5rem"
        /></div>
        <div class="flex-auto">
          <div class="flex justify-between" style="align-items: center">
            <div style="font-size: 1.625rem; color: #333">{{
              growCardList?.deviceInfo?.sumCount
            }}</div>
            <img src="/src/assets/images/tip.png" style="width: 1.4rem; height: 1.4rem" />
          </div>
          <div> 设备数(个) </div>
          <div class="flex mt-2">
            <div class="flex mr-1" style="align-items: center; font-size: 0.75rem"
              ><img src="/src/assets/images/online.png" class="mr-1" />
              <span>在线{{ growCardList?.deviceInfo?.onLine }}</span>
            </div>
            <div class="flex mr-1" style="align-items: center; font-size: 0.75rem">
              <img src="/src/assets/images/offline.png" class="mr-1" />
              <span> 离线{{ growCardList?.deviceInfo?.offLine }} </span>
            </div>
            <div class="flex mr-1" style="align-items: center; font-size: 0.75rem">
              <img src="/src/assets/images/inactive.png" class="mr-1" />
              <span> 未激活{{ growCardList?.deviceInfo?.inActive }} </span>
            </div>
          </div>
        </div>
      </div>
      <div class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
        今日新增 {{ growCardList?.deviceInfo?.todayAdd }}</div
      >
    </Card>
    <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4 !md:mr-4">
      <div class="flex" style="height: 100px">
        <div class="mr-4">
          <img
            v-if="!isAdmin(role)"
            src="/src/assets/images/alarm-count.png"
            style="width: 5rem; height: 5rem"
          />
          <img v-else src="/src/assets/images/zh.png" style="width: 5rem; height: 5rem" />
        </div>
        <div class="flex-auto">
          <div class="flex justify-between" style="align-items: center">
            <div v-if="!isAdmin(role)" style="font-size: 1.625rem; color: #333">{{
              growCardList?.alarmInfo?.sumCount
            }}</div>
            <div style="font-size: 1.625rem; color: #333">{{
              growCardList?.tenantInfo?.sumCount
            }}</div>
            <img src="/src/assets/images/tip.png" style="width: 1.4rem; height: 1.4rem" />
          </div>
          <div> {{ !isAdmin(role) ? `${currentMonth}月告警数(条)` : '租户总量(个)' }}</div>
        </div>
      </div>
      <div v-if="!isAdmin(role)" class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
        今日新增 {{ growCardList?.alarmInfo?.todayAdd }}</div
      >
      <div v-else class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
        今日新增 {{ growCardList?.tenantInfo?.todayAdd }}</div
      >
    </Card>
    <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4">
      <div class="flex" style="height: 100px">
        <div class="mr-4"
          ><img
            v-if="!isAdmin(role)"
            src="/src/assets/images/msg-count.png"
            style="width: 5rem; height: 5rem"
          /><img v-else src="/src/assets/images/kf.png" style="width: 5rem; height: 5rem" />
        </div>
        <div v-if="!isAdmin(role)" style="display: flex; align-items: center">
          <div>
            <div class="flex" style="align-items: center">
              {{ `${currentMonth}月数据点(条)` }}
              <span style="font-size: 1.625rem; color: #333">
                {{ growCardList?.messageInfo?.dataPointsCount }}</span
              >
            </div>
            <div class="flex" style="align-items: center">
              {{ `${currentMonth}月消息量(条)` }}
              <span style="font-size: 1.625rem; color: #333">
                {{ growCardList?.messageInfo?.messageCount }}</span
              >
            </div>
          </div>
        </div>
        <div class="flex-auto" v-else>
          <div class="flex justify-between" style="align-items: center">
            <div style="font-size: 1.625rem; color: #333">{{
              growCardList?.customerInfo?.sumCount
            }}</div>
            <img src="/src/assets/images/tip.png" style="width: 1.4rem; height: 1.4rem" />
          </div>
          <div>客户总量(个)</div>
        </div>
      </div>
      <div v-if="!isAdmin(role)" class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
        今日新增
        <span class="ml-8">数据点 ({{ growCardList?.messageInfo?.todayDataPointsAdd }})</span>
        <span class="ml-8">消息量 ({{ growCardList?.messageInfo?.todayMessageAdd }})</span>
      </div>
      <div v-else class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
        今日新增 {{ growCardList?.customerInfo?.todayAdd }}</div
      >
    </Card>
  </div>
</template>
<script lang="ts" setup>
  import { ref, onMounted, computed } from 'vue';
  import { Card } from 'ant-design-vue';
  import { getHomeData } from '/@/api/dashboard';
  import { isAdmin } from '/@/enums/roleEnum';
  defineProps<{
    role: string;
  }>();
  defineExpose({
    isAdmin,
  });
  interface CardList {
    deviceInfo: {
      sumCount: number;
      onLine: number;
      offLine: number;
      inActive: number;
      todayAdd: number;
    };
    tenantInfo?: { sumCount: number; todayAdd: number };
    customerInfo?: { sumCount: number; todayAdd: number };
    alarmInfo?: {
      sumCount: number;
      todayAdd: number;
    };
    messageInfo?: {
      dataPointsCount: number;
      messageCount: number;
      todayDataPointsAdd: number;
      todayMessageAdd: number;
    };
  }
  const growCardList = ref<CardList>();
  onMounted(async () => {
    const res = await getHomeData();
    growCardList.value = res;
  });
  // 获取当前月份0-11    +1
  const currentMonth = computed(() => {
    return new Date().getMonth() + 1;
  });
</script>