edu/admin/src/views/workbench/index.vue

292 lines
10 KiB
Vue
Raw Normal View History

2022-04-08 02:42:44 +00:00
<template>
<div class="workbench">
<div class="flex workbench-header">
<el-card class="flex-1" shadow="never">
<template #header>
<span class="card-title">账号信息</span>
</template>
<div>
<div class="m-b-20">版本号{{ workbenchData.version.version }}</div>
2022-04-22 11:09:08 +00:00
<div>官网名称{{ workbenchData.version.website }}</div>
2022-04-08 02:42:44 +00:00
</div>
</el-card>
<el-card class="flex-3 m-l-15" shadow="never">
<template #header>
<div>
<span class="card-title">今日数据</span>
<span class="muted xs m-l-15"
>更新时间{{ workbenchData.today.time }}</span
>
</div>
</template>
<div class="flex">
<div class="flex-1">
<div class="lighter m-b-10">访问量</div>
<div class="f-s-32 m-b-10">
2022-04-13 09:38:53 +00:00
{{ workbenchData.today.todayVisits }}
2022-04-08 02:42:44 +00:00
</div>
2022-04-13 09:38:53 +00:00
<div class="lighter">总访问量{{ workbenchData.today.totalVisits }}</div>
2022-04-08 02:42:44 +00:00
</div>
<div class="flex-1">
<div class="lighter m-b-10">销售额</div>
<div class="f-s-32 m-b-10">
2022-04-13 09:38:53 +00:00
{{ workbenchData.today.todaySales }}
2022-04-08 02:42:44 +00:00
</div>
2022-04-13 09:38:53 +00:00
<div class="lighter">总销售额{{ workbenchData.today.totalSales }}</div>
2022-04-08 02:42:44 +00:00
</div>
<div class="flex-1">
<div class="lighter m-b-10">新增用户</div>
<div class="f-s-32 m-b-10">
2022-04-13 09:38:53 +00:00
{{ workbenchData.today.todayUsers }}
2022-04-08 02:42:44 +00:00
</div>
2022-04-13 09:38:53 +00:00
<div class="lighter">总访用户{{ workbenchData.today.totalUsers }}</div>
2022-04-08 02:42:44 +00:00
</div>
</div>
</el-card>
</div>
<div class="m-t-15 function">
<el-card class="flex-1" shadow="never">
<template #header>
<span class="card-title">常用功能</span>
</template>
<div class="nav-lists">
2022-04-13 09:38:53 +00:00
<!-- <div
2022-04-08 02:42:44 +00:00
v-for="item in workbenchData.menu"
:key="item"
2022-04-08 06:46:31 +00:00
class="nav-item flex-col m-t-10"
2022-04-13 09:38:53 +00:00
> -->
<router-link to="">
<div class="nav-item flex-col m-t-10">
2022-04-26 03:59:03 +00:00
<div class="flex flex-center">
2022-04-13 09:38:53 +00:00
<img
style="width: 48px; height: 48px"
src="@/assets/images/avatar.png"
/>
2022-04-26 03:59:03 +00:00
</div>
2022-04-13 09:38:53 +00:00
<div class="m-t-8 normal text-center">工作台</div>
</div>
</router-link>
<router-link to="/setting/website/information">
<div class="nav-item flex-col m-t-10">
2022-04-26 03:59:03 +00:00
<div class="flex flex-center">
2022-04-13 09:38:53 +00:00
<img
style="width: 48px; height: 48px"
src="@/assets/images/avatar.png"
/>
2022-04-26 03:59:03 +00:00
</div>
2022-04-13 09:38:53 +00:00
<div class="m-t-8 normal text-center">网站信息</div>
</div>
</router-link>
2022-04-25 09:27:45 +00:00
<router-link to="/setting/system/environment">
2022-04-13 09:38:53 +00:00
<div class="nav-item flex-col m-t-10">
2022-04-26 03:59:03 +00:00
<div class="flex flex-center">
2022-04-13 09:38:53 +00:00
<img
style="width: 48px; height: 48px"
src="@/assets/images/avatar.png"
/>
2022-04-26 03:59:03 +00:00
</div>
2022-04-13 09:38:53 +00:00
<div class="m-t-8 normal text-center">系统环境</div>
</div>
</router-link>
2022-04-08 02:42:44 +00:00
</div>
</el-card>
</div>
<div class="flex m-t-15 ranking">
<el-card class="flex-1" shadow="never">
<template #header>
<span class="card-title">访问量趋势图</span>
</template>
<div class="ranking-centent">
<v-chart class="chart" :option="workbenchData.visitorOption" />
</div>
</el-card>
2022-04-25 10:09:41 +00:00
<!-- <el-card class="flex-1 m-l-15" shadow="never">
2022-04-08 02:42:44 +00:00
<template #header>
<div>
<span class="card-title">文章阅读量排名</span>
</div>
</template>
<div class="ranking-centent">
<el-table :data="workbenchData.article" size="medium">
<el-table-column label="排名" min-width="70" type="index">
<template #default="scope">
<div
v-if="scope.$index == 0"
class="icon"
style="background: #f86056; color: #fff"
>
{{ scope.$index + 1 }}
</div>
<div
v-if="scope.$index == 1"
class="icon"
style="background: #fc8d2e; color: #fff"
>
{{ scope.$index + 1 }}
</div>
<div
v-if="scope.$index == 2"
class="icon"
style="background: #fcbc2e; color: #fff"
>
{{ scope.$index + 1 }}
</div>
<div v-if="scope.$index > 2" class="icon">
{{ scope.$index + 1 }}
</div>
</template>
</el-table-column>
2022-04-13 09:38:53 +00:00
<el-table-column prop="title" label="文章名称"> </el-table-column>
<el-table-column prop="visit" label="阅读量"> </el-table-column>
2022-04-08 02:42:44 +00:00
</el-table>
</div>
2022-04-25 10:09:41 +00:00
</el-card> -->
2022-04-08 02:42:44 +00:00
</div>
<!-- <material-select /> -->
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, onMounted } from 'vue'
import { apiWorkbench } from '@/api/workbench'
export default defineComponent({
setup() {
// 表单数据
const workbenchData = reactive({
version: {
version: '', // 版本号
website: '' // 官网
},
today: {}, // 今日数据
menu: [], // 常用功能
visitor: [], // 访问量
article: [], // 文章阅读量
visitorOption: {
xAxis: {
type: 'category',
data: [0]
},
yAxis: {
type: 'value'
},
legend: {
data: ['访问量']
},
itemStyle: {
// 点的颜色。
color: 'red'
},
tooltip: {
trigger: 'axis'
},
series: [
{
name: '访问量',
data: [0],
type: 'line'
//smooth: true,
}
]
}
})
// 获取工作台主页数据
const getWorkbench = () => {
apiWorkbench()
.then((res: any) => {
console.log('res', res)
workbenchData.version = res.version
workbenchData.today = res.today
workbenchData.menu = res.menu
workbenchData.visitor = res.visitor
workbenchData.article = res.article
// 清空echarts 数据
workbenchData.visitorOption.xAxis.data = []
workbenchData.visitorOption.series[0].data = []
// 写入从后台拿来的数据
res.visitor.date.reverse().forEach((item: any) => {
workbenchData.visitorOption.xAxis.data.push(item)
})
2022-04-25 10:09:41 +00:00
res.visitor.list.forEach((item: any) => {
2022-04-08 02:42:44 +00:00
workbenchData.visitorOption.series[0].data.push(item)
})
2022-04-25 10:09:41 +00:00
console.log('res.visitor.list', res.visitor.list)
2022-04-08 02:42:44 +00:00
})
.catch((err: any) => {
console.log('err', err)
})
}
onMounted(() => {
getWorkbench()
})
return {
workbenchData,
getWorkbench
}
}
})
</script>
<style lang="scss" scoped>
.workbench {
.card-title {
position: relative;
font-weight: 500;
padding-left: 10px;
font-size: 14px;
&::before {
position: absolute;
content: '';
display: inline-block;
top: 50%;
left: 0;
transform: translateY(-50%);
width: 3px;
height: 80%;
background: $color-primary;
}
}
.function {
.nav-lists {
display: flex;
2022-04-08 06:46:31 +00:00
// flex-wrap: wrap;
2022-04-08 02:42:44 +00:00
.nav-item {
2022-04-08 06:46:31 +00:00
min-width: 210px;
2022-04-08 02:42:44 +00:00
}
}
}
.ranking {
&-centent {
height: 530px;
}
}
.icon {
width: 25px;
height: 25px;
color: #333;
border-radius: 2px;
background: #f5f5f5;
font-family: 'PingFang SC';
font-weight: normal;
font-size: 12px;
line-height: 25px;
text-align: center;
}
}
</style>