2021-06-07 17:22:07 +08:00
|
|
|
<template>
|
|
|
|
|
<div class="home-container">
|
|
|
|
|
<el-row :gutter="15">
|
|
|
|
|
<el-col :sm="6" class="mb15">
|
2022-04-27 10:59:02 +08:00
|
|
|
<div @click="toPage({ id: 'personal' })" class="home-card-item home-card-first">
|
2021-06-07 17:22:07 +08:00
|
|
|
<div class="flex-margin flex">
|
|
|
|
|
<img :src="getUserInfos.photo" />
|
|
|
|
|
<div class="home-card-first-right ml15">
|
|
|
|
|
<div class="flex-margin">
|
2021-07-28 18:03:19 +08:00
|
|
|
<div class="home-card-first-right-title">{{ `${currentTime}, ${getUserInfos.username}` }}</div>
|
2021-06-07 17:22:07 +08:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
2021-09-11 14:04:09 +08:00
|
|
|
<el-col :sm="3" class="mb15" v-for="(v, k) in topCardItemList" :key="k">
|
2022-04-27 10:59:02 +08:00
|
|
|
<div @click="toPage(v)" class="home-card-item home-card-item-box" :style="{ background: v.color }">
|
2021-06-07 17:22:07 +08:00
|
|
|
<div class="home-card-item-flex">
|
|
|
|
|
<div class="home-card-item-title pb3">{{ v.title }}</div>
|
2021-09-11 14:04:09 +08:00
|
|
|
<div class="home-card-item-title-num pb6" :id="v.id"></div>
|
2021-06-07 17:22:07 +08:00
|
|
|
</div>
|
|
|
|
|
<i :class="v.icon" :style="{ color: v.iconColor }"></i>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script lang="ts">
|
2021-11-11 15:56:02 +08:00
|
|
|
import { toRefs, reactive, onMounted, nextTick, computed } from 'vue';
|
2021-06-07 17:22:07 +08:00
|
|
|
import { useStore } from '@/store/index.ts';
|
2021-11-11 15:56:02 +08:00
|
|
|
// import * as echarts from 'echarts';
|
2021-06-07 17:22:07 +08:00
|
|
|
import { CountUp } from 'countup.js';
|
|
|
|
|
import { formatAxis } from '@/common/utils/formatTime.ts';
|
2021-09-11 14:04:09 +08:00
|
|
|
import { indexApi } from './api';
|
2022-04-27 10:59:02 +08:00
|
|
|
import { useRouter } from 'vue-router';
|
2021-06-07 17:22:07 +08:00
|
|
|
export default {
|
2022-04-27 10:59:02 +08:00
|
|
|
name: 'HomePage',
|
2021-06-07 17:22:07 +08:00
|
|
|
setup() {
|
2021-11-11 15:56:02 +08:00
|
|
|
// const { proxy } = getCurrentInstance() as any;
|
2022-04-27 10:59:02 +08:00
|
|
|
const router = useRouter();
|
2021-06-07 17:22:07 +08:00
|
|
|
const store = useStore();
|
|
|
|
|
const state = reactive({
|
2022-04-27 10:59:02 +08:00
|
|
|
topCardItemList: [
|
|
|
|
|
{
|
2022-10-26 20:49:29 +08:00
|
|
|
title: 'Linux机器',
|
2022-04-27 10:59:02 +08:00
|
|
|
id: 'machineNum',
|
|
|
|
|
color: '#F95959',
|
|
|
|
|
},
|
|
|
|
|
{
|
2022-10-26 20:49:29 +08:00
|
|
|
title: '数据库',
|
2022-04-27 10:59:02 +08:00
|
|
|
id: 'dbNum',
|
|
|
|
|
color: '#8595F4',
|
|
|
|
|
},
|
|
|
|
|
{
|
2022-10-26 20:49:29 +08:00
|
|
|
title: 'redis',
|
2022-04-27 10:59:02 +08:00
|
|
|
id: 'redisNum',
|
|
|
|
|
color: '#1abc9c',
|
|
|
|
|
},
|
2022-10-26 20:49:29 +08:00
|
|
|
{
|
|
|
|
|
title: 'Mongo',
|
|
|
|
|
id: 'mongoNum',
|
|
|
|
|
color: '#FEBB50',
|
|
|
|
|
},
|
2022-04-27 10:59:02 +08:00
|
|
|
],
|
2021-06-07 17:22:07 +08:00
|
|
|
});
|
2021-09-11 14:04:09 +08:00
|
|
|
|
2021-06-07 17:22:07 +08:00
|
|
|
// 当前时间提示语
|
|
|
|
|
const currentTime = computed(() => {
|
|
|
|
|
return formatAxis(new Date());
|
|
|
|
|
});
|
2021-09-11 14:04:09 +08:00
|
|
|
|
2021-06-07 17:22:07 +08:00
|
|
|
// 初始化数字滚动
|
2021-09-11 14:04:09 +08:00
|
|
|
const initNumCountUp = async () => {
|
2022-04-27 10:59:02 +08:00
|
|
|
const res: any = await indexApi.getIndexCount.request();
|
2021-06-07 17:22:07 +08:00
|
|
|
nextTick(() => {
|
2022-10-26 20:49:29 +08:00
|
|
|
new CountUp('mongoNum', res.mongoNum).start();
|
2021-09-11 14:04:09 +08:00
|
|
|
new CountUp('machineNum', res.machineNum).start();
|
|
|
|
|
new CountUp('dbNum', res.dbNum).start();
|
|
|
|
|
new CountUp('redisNum', res.redisNum).start();
|
2021-06-07 17:22:07 +08:00
|
|
|
});
|
|
|
|
|
};
|
2021-09-11 14:04:09 +08:00
|
|
|
|
2022-04-27 10:59:02 +08:00
|
|
|
const toPage = (item: any) => {
|
|
|
|
|
switch (item.id) {
|
|
|
|
|
case 'personal': {
|
|
|
|
|
router.push('/personal');
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-10-26 20:49:29 +08:00
|
|
|
case 'mongoNum': {
|
|
|
|
|
router.push('/mongo/mongo-data-operation');
|
2022-04-27 10:59:02 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'machineNum': {
|
2022-10-11 08:25:20 +08:00
|
|
|
router.push('/machine/machines');
|
2022-04-27 10:59:02 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'dbNum': {
|
2022-10-11 08:25:20 +08:00
|
|
|
router.push('/dbms/sql-exec');
|
2022-04-27 10:59:02 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'redisNum': {
|
2022-10-11 08:25:20 +08:00
|
|
|
router.push('/redis/data-operation');
|
2022-04-27 10:59:02 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2021-06-07 17:22:07 +08:00
|
|
|
// 页面加载时
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
initNumCountUp();
|
2021-09-11 14:04:09 +08:00
|
|
|
// initHomeLaboratory();
|
|
|
|
|
// initHomeOvertime();
|
2021-06-07 17:22:07 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 获取用户信息 vuex
|
|
|
|
|
const getUserInfos = computed(() => {
|
|
|
|
|
return store.state.userInfos.userInfos;
|
|
|
|
|
});
|
2022-04-27 10:59:02 +08:00
|
|
|
|
2021-06-07 17:22:07 +08:00
|
|
|
return {
|
|
|
|
|
getUserInfos,
|
|
|
|
|
currentTime,
|
2022-04-27 10:59:02 +08:00
|
|
|
toPage,
|
2021-06-07 17:22:07 +08:00
|
|
|
...toRefs(state),
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
.home-container {
|
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
.home-card-item {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 103px;
|
|
|
|
|
background: gray;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
transition: all ease 0.3s;
|
2022-04-27 10:59:02 +08:00
|
|
|
cursor: pointer;
|
2021-06-07 17:22:07 +08:00
|
|
|
&:hover {
|
|
|
|
|
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
|
|
|
|
|
transition: all ease 0.3s;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-card-item-box {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
position: relative;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
&:hover {
|
|
|
|
|
i {
|
|
|
|
|
right: 0px !important;
|
|
|
|
|
bottom: 0px !important;
|
|
|
|
|
transition: all ease 0.3s;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
i {
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: -10px;
|
|
|
|
|
bottom: -10px;
|
|
|
|
|
font-size: 70px;
|
|
|
|
|
transform: rotate(-30deg);
|
|
|
|
|
transition: all ease 0.3s;
|
|
|
|
|
}
|
|
|
|
|
.home-card-item-flex {
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
color: white;
|
|
|
|
|
.home-card-item-title,
|
|
|
|
|
.home-card-item-tip {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
}
|
|
|
|
|
.home-card-item-title-num {
|
|
|
|
|
font-size: 18px;
|
|
|
|
|
}
|
|
|
|
|
.home-card-item-tip-num {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-card-first {
|
|
|
|
|
background: white;
|
|
|
|
|
border: 1px solid #ebeef5;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
img {
|
|
|
|
|
width: 60px;
|
|
|
|
|
height: 60px;
|
|
|
|
|
border-radius: 100%;
|
|
|
|
|
border: 2px solid var(--color-primary-light-5);
|
|
|
|
|
}
|
|
|
|
|
.home-card-first-right {
|
|
|
|
|
flex: 1;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
.home-card-first-right-msg {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-monitor {
|
|
|
|
|
height: 200px;
|
|
|
|
|
.flex-warp-item {
|
|
|
|
|
width: 50%;
|
|
|
|
|
height: 100px;
|
|
|
|
|
display: flex;
|
|
|
|
|
.flex-warp-item-box {
|
|
|
|
|
margin: auto;
|
|
|
|
|
height: auto;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-warning-card {
|
|
|
|
|
height: 292px;
|
|
|
|
|
::v-deep(.el-card) {
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-dynamic {
|
|
|
|
|
height: 200px;
|
|
|
|
|
.home-dynamic-item {
|
|
|
|
|
display: flex;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 60px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
&:first-of-type {
|
|
|
|
|
.home-dynamic-item-line {
|
|
|
|
|
i {
|
|
|
|
|
color: orange !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-dynamic-item-left {
|
|
|
|
|
text-align: right;
|
|
|
|
|
.home-dynamic-item-left-time1 {
|
|
|
|
|
}
|
|
|
|
|
.home-dynamic-item-left-time2 {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-dynamic-item-line {
|
|
|
|
|
height: 60px;
|
|
|
|
|
border-right: 2px dashed #dfdfdf;
|
|
|
|
|
margin: 0 20px;
|
|
|
|
|
position: relative;
|
|
|
|
|
i {
|
|
|
|
|
color: var(--color-primary);
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 1px;
|
|
|
|
|
left: -6px;
|
|
|
|
|
transform: rotate(46deg);
|
|
|
|
|
background: white;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-dynamic-item-right {
|
|
|
|
|
flex: 1;
|
|
|
|
|
.home-dynamic-item-right-title {
|
|
|
|
|
i {
|
|
|
|
|
margin-right: 5px;
|
|
|
|
|
border: 1px solid #dfdfdf;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
border-radius: 100%;
|
|
|
|
|
padding: 3px 2px 2px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
color: var(--color-primary);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.home-dynamic-item-right-label {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|