鸿蒙智能电子锁前端项目
whychdw
2024-10-11 d5ca37c6301ac1178702e0334c4feee6abf3ba9e
src/views/dashboard/index.vue
@@ -1,18 +1,307 @@
<template>
  <div class="dashboard-container"></div>
  <div class="dashboard-container">
    <hdw-card>
      <div class="data-stats-header">
        <el-row :gutter="16">
          <el-col :span="8">
            <div class="user-info-wrapper">
              <el-avatar class="user-icon" :size="30" :src="userImg" />
              <span class="user-name">武汉源畅</span>
              <span class="user-change">切换</span>
            </div>
          </el-col>
          <el-col :span="8">
            <div class="data-stats-time-wrapper">
              <span class="time-title">统计时间:</span>
              <el-radio-group class="radio-class" v-model="timeType" size="small">
                <el-radio-button label="本周" :value="0" />
                <el-radio-button label="本月" :value="1" />
                <el-radio-button label="本年" :value="2" />
              </el-radio-group>
            </div>
          </el-col>
          <el-col :span="8">
            <div class="data-stats-time-wrapper">
              <span class="time-title">自定义时间:</span>
              <el-date-picker
                  v-model="rangeTime"
                  type="daterange"
                  range-separator="至"
                  start-placeholder="开始时间"
                  end-placeholder="结束时间"
                  size="small"
              />
            </div>
          </el-col>
        </el-row>
      </div>
    </hdw-card>
    <div class="data-stats">
      <el-row :gutter="8">
        <el-col :span="8">
          <hdw-card>
            <div class="data-stats-wrapper">
              <div class="data-stats-icon">
                <div class="data-stats-icon-content">
                  <svg-icon icon-class="lock-hdw"/>
                  <br/>
                  <span class="icon-text">锁具统计</span>
                </div>
              </div>
              <div class="data-stats-content">
                <el-row :gutter="16">
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">已安装</div>
                      <div class="num-value">112</div>
                    </div>
                  </el-col>
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">未安装</div>
                      <div class="num-value">2</div>
                    </div>
                  </el-col>
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">蓝牙锁</div>
                      <div class="num-value">112</div>
                    </div>
                  </el-col>
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">无源锁</div>
                      <div class="num-value">2</div>
                    </div>
                  </el-col>
                </el-row>
              </div>
            </div>
          </hdw-card>
        </el-col>
        <el-col :span="8">
          <hdw-card>
            <div class="data-stats-wrapper">
              <div class="data-stats-icon">
                <div class="data-stats-icon-content">
                  <svg-icon icon-class="key-hdw"/>
                  <br/>
                  <span class="icon-text">钥匙统计</span>
                </div>
              </div>
              <div class="data-stats-content">
                <el-row :gutter="16">
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">实体钥匙</div>
                      <div class="num-value">0</div>
                    </div>
                  </el-col>
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">设备钥匙</div>
                      <div class="num-value">0</div>
                    </div>
                  </el-col>
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">蓝牙钥匙</div>
                      <div class="num-value">6</div>
                    </div>
                  </el-col>
                </el-row>
              </div>
            </div>
          </hdw-card>
        </el-col>
        <el-col :span="8">
          <hdw-card is-full>
            <div class="data-stats-wrapper" style="height: 100%">
              <div class="data-stats-icon">
                <div class="data-stats-icon-content">
                  <svg-icon icon-class="safe-lock-hdw"/>
                  <br/>
                  <span class="icon-text">事件统计</span>
                </div>
              </div>
              <div class="data-stats-content">
                <el-row :gutter="16">
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">开锁操作</div>
                      <div class="num-value">0</div>
                    </div>
                  </el-col>
                  <el-col :span="12">
                    <div class="num-stats-wrapper">
                      <div class="num-title">报警事件</div>
                      <div class="num-value">0</div>
                    </div>
                  </el-col>
                </el-row>
              </div>
            </div>
          </hdw-card>
        </el-col>
      </el-row>
    </div>
    <div class="data-stats-footer">
      <el-row :gutter="8" style="height: 100%">
        <el-col :span="12" style="height: 100%">
          <hdw-card title="开锁统计" is-full>
            <div class="chart-wrapper">
              <line-chart :chart-data="unlockingData"></line-chart>
            </div>
          </hdw-card>
        </el-col>
        <el-col :span="12" style="height: 100%">
          <hdw-card title="快捷入口" is-full>
            <div class="fast-menu">
              <el-row :gutter="16">
                <el-col :span="6">
                  <menu-card></menu-card>
                </el-col>
                <el-col :span="6">
                  <menu-card url="/system/user" title="用户管理" icon="people-hdw" style="background-color: #56e0c7"></menu-card>
                </el-col>
                <el-col :span="6">
                  <menu-card url="/device/lock" title="锁具管理" icon="lock-hdw" style="background-color: #fe945f"></menu-card>
                </el-col>
                <el-col :span="6">
                  <menu-card url="/device/key" title="钥匙管理" icon="key-hdw" style="background-color: #fdcc1c"></menu-card>
                </el-col>
                <el-col :span="6">
                  <menu-card url="/general/authorize" title="授权管理" icon="auth-hdw" style="background-color: #5a84fd"></menu-card>
                </el-col>
                <el-col :span="6">
                  <menu-card url="/general/log" title="日志管理" icon="log-hdw" style="background-color: #7997b3"></menu-card>
                </el-col>
                <el-col :span="6">
                  <menu-card url="/general/map" title="地图定位" icon="map-hdw" style="background-color: #1ab5b1"></menu-card>
                </el-col>
              </el-row>
            </div>
          </hdw-card>
        </el-col>
      </el-row>
    </div>
  </div>
</template>
<script>
import { defineComponent } from 'vue';
import MenuCard from '@/views/dashboard/components/MenuCard.vue';
import HdwCard from '@/components/HdwCard/index.vue';
import SvgIcon from '@/components/SvgIcon/index.vue';
import LineChart from './components/LineChart.vue';
import userImg from '@/assets/images/user.png';
export default defineComponent({
  name: 'Dashboard'
  name: 'Dashboard',
  components: { LineChart, SvgIcon, HdwCard, MenuCard },
  data() {
    return {
      unlockingData: [],
      userImg,
      timeType: 0,
      rangeTime: ''
    };
  }
});
</script>
<style scoped>
<style scoped lang="scss">
.dashboard-container {
  height: 100%;
  overflow: auto;
  padding: 8px;
  .data-stats-footer {
    min-height: 300px;
    height: calc(100% - 265px);
  }
}
.user-info-wrapper {
  display: inline-block;
  .user-icon {
    vertical-align: middle;
  }
  .user-name {
    margin-left: 8px;
    font-size: 14px;
  }
  .user-change {
    margin-left: 8px;
    font-size: 14px;
    color: #409eff;
    font-weight: 700;
    cursor: pointer;
  }
}
.data-stats-time-wrapper {
  .radio-class {
    vertical-align: middle;
  }
  .time-title {
    margin-right: 8px;
    font-size: 14px;
    display: inline-block;
  }
}
.data-stats {
  margin-top: 8px;
  padding-bottom: 8px;
}
.data-stats-wrapper {
  display: flex;
  flex-direction: row;
  padding: 16px;
  .data-stats-icon {
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    flex-direction: column;
    .svg-icon {
      font-size: 100px;
      color: #5e5e5e;
    }
    .icon-text {
      display: inline-block;
      margin-top: 8px;
      font-size: 14px;
      font-weight: 700;
      color: #5e5e5e;
    }
  }
  .data-stats-content {
    flex: 1;
  }
;
}
.num-stats-wrapper {
  padding: 12px;
  text-align: center;
  .num-title {
    color: gray;
    font-size: 14px;
  }
  .num-value {
    font-size: 30px;
    font-weight: 700;
  }
}
.fast-menu {
  text-align: center;
  .el-col {
    padding: 32px 0;
  }
}
.chart-wrapper {
  height: 100%;
  overflow: hidden;
}
</style>