django-vue-admin/web/src/views/dashboard/workbench/components/userLogin.vue

213 lines
4.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-card
class="card-view"
:style="{
backgroundColor: randomColor(),
}"
>
<!-- shadow="always" -->
<div id="myChart" :style="{width: pxData.wpx+'px',height: pxData.hpx+'px'}"></div>
</el-card>
</template>
<script>
import { request } from '@/api/service'
export default {
sort: 6,
title: '用户登录趋势',
name: 'userLogin',
icon: 'el-icon-s-data',
description: '用户登陆',
height: 28,
width: 20,
isResizable: true,
props: {
pxData: {
type: Object,
require: false,
default: () => ({
wpx: 0,
hpx: 0
})
}
},
watch: {
pxData: {
handler () {
// eslint-disable-next-line no-unused-expressions
this.myChart?.resize({ width: this.pxData.wpx, height: this.pxData.hpx })
},
immediate: true,
deep: true
}
},
data () {
this.myChart = null
return {
data: [],
radio: '7'
}
},
methods: {
initGet () {
request({
url: '/api/system/datav/login_user/'
}).then((res) => {
this.data = res.data.login_user
this.drawLine(this.data)
})
},
// 生成一个随机整数
randomColor () {
const color = ['#fffff']
const ran = Math.floor(Math.random() * 4)
return color[ran]
},
drawLine () {
// 基于准备好的dom初始化echarts实例
// 绘制图表
const xAxisData = this.data.map(item => item.day)
const seriesData = this.data.map(item => item.count)
const option = {
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(255, 255, 255, 0.8)',
textStyle: {
color: '#666'
},
axisPointer: {
lineStyle: {
color: '#999',
type: 'dotted',
width: 1
}
},
formatter: params => {
const param = params[0]
return `<div style="padding: 8px;"><div style="color: #333;">${param.name}</div><div style="color: #FFA500;">${param.value} 次</div></div>`
}
},
legend: {
data: ['用户登陆数'],
textStyle: {
color: '#666',
fontSize: 12
}
},
grid: {
top: 40,
left: 50,
right: 65,
bottom: 60
},
xAxis: {
data: xAxisData,
boundaryGap: false,
axisLine: {
lineStyle: {
color: '#aaa',
width: 1
}
},
axisLabel: {
interval: 'auto',
maxInterval: 1,
rotate: 0,
textStyle: {
color: '#333',
fontSize: 12
}
}
},
yAxis: {
axisLine: {
lineStyle: {
color: '#aaa',
width: 1
}
},
axisLabel: {
textStyle: {
color: '#333',
fontSize: 12
}
},
splitLine: {
lineStyle: {
color: '#ddd',
type: 'dotted',
width: 1
}
}
},
series: [
{
name: '用户登陆数',
type: 'line',
data: seriesData,
symbol: 'circle',
smooth: true,
symbolSize: 6,
lineStyle: {
color: 'rgba(0, 128, 255, 0.8)',
width: 2
},
itemStyle: {
color: 'rgba(0, 128, 255, 0.8)',
borderColor: 'rgba(0, 128, 255, 1)',
borderWidth: 1
},
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: 'rgba(140,189,250, 0.8)'
},
{
offset: 1,
color: 'rgba(0, 128, 255, 0)'
}
]
}
}
}
]
}
this.myChart.setOption(option)
}
},
mounted () {
this.myChart = this.$echarts.init(document.getElementById('myChart'))
this.initGet()
this.drawLine()
}
}
</script>
<style scoped lang="scss">
.card-view {
//border-radius: 10px;
color: $color-primary;
}
.el-card{
height: 100%;
}
::v-deep .el-card__body {
width: 100%;
height: 100%;
}
.el-radio-button__inner {
border-radius: 20px;
}
</style>