AIzhushou-screen/src/views/index/left-center.vue

159 lines
3.7 KiB
Vue
Raw Normal View History

2024-05-22 08:44:08 +08:00
<script setup lang="ts">
import { ref, reactive } from "vue";
import { graphic } from "echarts/core";
import { countUserNum } from "@/api";
import {ElMessage} from "element-plus"
let colors = ["#0BFC7F", "#A0A0A0", "#F48C02", "#F4023C"];
const option = ref({});
const state = reactive({
lockNum: 0,
offlineNum: 0,
onlineNum: 0,
alarmNum: 0,
totalNum: 0,
});
const echartsGraphic = (colors: string[]) => {
return new graphic.LinearGradient(1, 0, 0, 0, [
{ offset: 0, color: colors[0] },
{ offset: 1, color: colors[1] },
]);
};
const getData = () => {
2024-05-22 09:32:42 +08:00
return
2024-05-22 08:44:08 +08:00
countUserNum().then((res) => {
console.log("左中--用户总览",res);
if (res.success) {
state.lockNum = res.data.lockNum;
state.offlineNum = res.data.offlineNum;
state.onlineNum = res.data.onlineNum;
state.totalNum = res.data.totalNum;
state.alarmNum = res.data.alarmNum;
setOption();
}else{
ElMessage.error(res.msg)
}
}).catch(err=>{
ElMessage.error(err)
});
};
getData();
const setOption = () => {
option.value = {
title: {
top: "center",
left: "center",
text: [`{value|${state.totalNum}}`, "{name|总数}"].join("\n"),
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
padding:[4,0,4,0]
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
series: [
{
name: "用户总览",
type: "pie",
radius: ["40%", "70%"],
// avoidLabelOverlap: false,
itemStyle: {
borderRadius: 6,
borderColor: "rgba(255,255,255,0)",
borderWidth: 2,
},
color: colors,
label: {
show: true,
formatter: " {b|{b}} \n {c|{c}个} {per|{d}%} ",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
emphasis: {
show: false,
},
legend: {
show: false,
},
tooltip: { show: true },
labelLine: {
show: true,
length: 20, // 第一段线 长度
length2: 36, // 第二段线 长度
smooth: 0.2,
lineStyle: {},
},
data: [
{
value: state.onlineNum,
name: "在线",
itemStyle: {
color: echartsGraphic(["#0BFC7F", "#A3FDE0"]),
},
},
{
value: state.offlineNum,
name: "离线",
itemStyle: {
color: echartsGraphic(["#A0A0A0", "#DBDFDD"]),
},
},
{
value: state.lockNum,
name: "锁定",
itemStyle: {
color: echartsGraphic(["#F48C02", "#FDDB7D"]),
},
},
{
value: state.alarmNum,
name: "异常",
itemStyle: {
color: echartsGraphic(["#F4023C", "#FB6CB7"]),
},
},
],
},
],
};
};
</script>
<template>
<v-chart class="chart" :option="option" />
</template>
<style scoped lang="scss"></style>