|
@@ -1,251 +1,36 @@
|
|
|
<template>
|
|
|
<div class="person_box">
|
|
|
- <div ref="chartDistrict" style="width: 100%;height: 100%;"></div>
|
|
|
+ <div style="width: 33%;height: 50%;" v-for="(item, index) in dropData">
|
|
|
+ <waterdrop :color="item.color" :heightTop="item.heightTop" :dropTitle="employData[index]"></waterdrop>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import * as echarts from 'echarts'
|
|
|
-import 'echarts-liquidfill';
|
|
|
+import waterdrop from '@/components/waterdrop'
|
|
|
const props = defineProps({
|
|
|
resultData: {
|
|
|
type: Array,
|
|
|
default: []
|
|
|
}
|
|
|
})
|
|
|
+const dropData = ref([{
|
|
|
+ color: 'rgb(42, 139, 247)',
|
|
|
+ heightTop: '-80%',
|
|
|
+}, {
|
|
|
+ color: 'rgb(250, 139, 31)',
|
|
|
+ heightTop: '-25%',
|
|
|
+}, {
|
|
|
+ color: 'rgb(138, 136, 27)',
|
|
|
+ heightTop: '-20%',
|
|
|
+}, {
|
|
|
+ color: 'rgb(140, 229, 41)',
|
|
|
+ heightTop: '-15%',
|
|
|
+}, {
|
|
|
+ color: 'rgb(131, 255, 233)',
|
|
|
+ heightTop: '-15%',
|
|
|
+}])
|
|
|
const employData = ref([])
|
|
|
-const chartDistrict = ref(null);
|
|
|
-let chartDom = null;
|
|
|
-const initAccess = () => {
|
|
|
- chartDom = null
|
|
|
- chartDom = echarts.init(chartDistrict.value);
|
|
|
- let option = {
|
|
|
- series: [{
|
|
|
- type: "liquidFill",
|
|
|
- radius: "40%",
|
|
|
- // 水球颜色
|
|
|
- color: ["#2c90fa"],
|
|
|
- center: ["18%", "25%"],
|
|
|
- label: {
|
|
|
- position: ['50%', '50%'],
|
|
|
- formatter: function () {
|
|
|
- return employData.value[0];
|
|
|
- },
|
|
|
- fontSize: 16,
|
|
|
- color: '#fff',
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5, //波浪的透明度
|
|
|
- shadowBlur: 10, //波浪的阴影范围
|
|
|
- shadowColor: "#072F3A", //阴影颜色
|
|
|
- },
|
|
|
- outline: {
|
|
|
- show: true, //是否显示轮廓 布尔值
|
|
|
- borderDistance: 0, //外部轮廓与图表的距离 数字
|
|
|
- itemStyle: {
|
|
|
- borderColor: "#2c90fa", //边框的颜色
|
|
|
- borderWidth: 1, //边框的宽度
|
|
|
- },
|
|
|
- },
|
|
|
- emphasis: {
|
|
|
- itemStyle: {
|
|
|
- opacity: 1, //鼠标经过波浪颜色的透明度
|
|
|
- },
|
|
|
- },
|
|
|
- data: [0.8, 0.7804],
|
|
|
- amplitude: 6, //振幅 是波浪的震荡幅度 可以取具体的值 也可以是百分比 百分比下是按图标的直径来算
|
|
|
- waveLength: "50%", //波的长度 可以是百分比也可以是具体的像素值 百分比下是相对于直径的 取得越大波浪的起伏越小
|
|
|
- backgroundStyle: {
|
|
|
- color: 'transparent',
|
|
|
- },
|
|
|
- direction: "left", //波移动的速度 两个参数 left 从右往左 right 从左往右
|
|
|
- waveAnimation: true, //控制波动画的开关 值是布尔值 false 是关闭动画 true 是开启动画 也是默认值
|
|
|
- animationEasing: "linear", //初始动画
|
|
|
- animationEasingUpdate: "quarticInOut", //数据更新的动画效果
|
|
|
- animationDuration: 3000, //初始动画的时长,支持回调函数,可以通过每个数据返回不同的 delay 时间实现更绚丽的初始动画效果
|
|
|
- animationDurationUpdate: 300, //数据更新动画的时长
|
|
|
- }, {
|
|
|
- type: "liquidFill",
|
|
|
- radius: "40%",
|
|
|
- // 水球颜色
|
|
|
- color: ["#fdaf61"],
|
|
|
- center: ["49%", "25%"],
|
|
|
- label: {
|
|
|
- position: ['50%', '50%'],
|
|
|
- formatter: function () {
|
|
|
- return employData.value[1];
|
|
|
- },
|
|
|
- fontSize: 16,
|
|
|
- color: '#fff',
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5, //波浪的透明度
|
|
|
- shadowBlur: 10, //波浪的阴影范围
|
|
|
- shadowColor: "#fdaf61", //阴影颜色
|
|
|
- },
|
|
|
- outline: {
|
|
|
- show: true, //是否显示轮廓 布尔值
|
|
|
- borderDistance: 0, //外部轮廓与图表的距离 数字
|
|
|
- itemStyle: {
|
|
|
- borderColor: "#fdaf61", //边框的颜色
|
|
|
- borderWidth: 1, //边框的宽度
|
|
|
- },
|
|
|
- },
|
|
|
- emphasis: {
|
|
|
- itemStyle: {
|
|
|
- opacity: 1, //鼠标经过波浪颜色的透明度
|
|
|
- },
|
|
|
- },
|
|
|
- data: [0.4, 0.4444],
|
|
|
- amplitude: 6, //振幅 是波浪的震荡幅度 可以取具体的值 也可以是百分比 百分比下是按图标的直径来算
|
|
|
- waveLength: "50%", //波的长度 可以是百分比也可以是具体的像素值 百分比下是相对于直径的 取得越大波浪的起伏越小
|
|
|
- backgroundStyle: {
|
|
|
- color: 'transparent',
|
|
|
- },
|
|
|
- direction: "left", //波移动的速度 两个参数 left 从右往左 right 从左往右
|
|
|
- waveAnimation: true, //控制波动画的开关 值是布尔值 false 是关闭动画 true 是开启动画 也是默认值
|
|
|
- animationEasing: "linear", //初始动画
|
|
|
- animationEasingUpdate: "quarticInOut", //数据更新的动画效果
|
|
|
- animationDuration: 3000, //初始动画的时长,支持回调函数,可以通过每个数据返回不同的 delay 时间实现更绚丽的初始动画效果
|
|
|
- animationDurationUpdate: 300, //数据更新动画的时长
|
|
|
- }, {
|
|
|
- type: "liquidFill",
|
|
|
- radius: "40%",
|
|
|
- // 水球颜色
|
|
|
- color: ["#d4cc3e"],
|
|
|
- center: ["82%", "25%"],
|
|
|
- label: {
|
|
|
- position: ['50%', '50%'],
|
|
|
- formatter: function () {
|
|
|
- return employData.value[2];
|
|
|
- },
|
|
|
- fontSize: 16,
|
|
|
- color: '#fff',
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5, //波浪的透明度
|
|
|
- shadowBlur: 10, //波浪的阴影范围
|
|
|
- shadowColor: "#d4cc3e", //阴影颜色
|
|
|
- },
|
|
|
- outline: {
|
|
|
- show: true, //是否显示轮廓 布尔值
|
|
|
- borderDistance: 0, //外部轮廓与图表的距离 数字
|
|
|
- itemStyle: {
|
|
|
- borderColor: "#d4cc3e", //边框的颜色
|
|
|
- borderWidth: 1, //边框的宽度
|
|
|
- },
|
|
|
- },
|
|
|
- emphasis: {
|
|
|
- itemStyle: {
|
|
|
- opacity: 1, //鼠标经过波浪颜色的透明度
|
|
|
- },
|
|
|
- },
|
|
|
- data: [0.3, 0.2544],
|
|
|
- amplitude: 6, //振幅 是波浪的震荡幅度 可以取具体的值 也可以是百分比 百分比下是按图标的直径来算
|
|
|
- waveLength: "50%", //波的长度 可以是百分比也可以是具体的像素值 百分比下是相对于直径的 取得越大波浪的起伏越小
|
|
|
- backgroundStyle: {
|
|
|
- color: 'transparent',
|
|
|
- },
|
|
|
- direction: "left", //波移动的速度 两个参数 left 从右往左 right 从左往右
|
|
|
- waveAnimation: true, //控制波动画的开关 值是布尔值 false 是关闭动画 true 是开启动画 也是默认值
|
|
|
- animationEasing: "linear", //初始动画
|
|
|
- animationEasingUpdate: "quarticInOut", //数据更新的动画效果
|
|
|
- animationDuration: 3000, //初始动画的时长,支持回调函数,可以通过每个数据返回不同的 delay 时间实现更绚丽的初始动画效果
|
|
|
- animationDurationUpdate: 300, //数据更新动画的时长
|
|
|
- }, {
|
|
|
- type: "liquidFill",
|
|
|
- radius: "40%",
|
|
|
- // 水球颜色
|
|
|
- color: ["#beff72"],
|
|
|
- center: ["33%", "72%"],
|
|
|
- label: {
|
|
|
- position: ['50%', '50%'],
|
|
|
- formatter: function () {
|
|
|
- return employData.value[3];
|
|
|
- },
|
|
|
- fontSize: 16,
|
|
|
- color: '#fff',
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5, //波浪的透明度
|
|
|
- shadowBlur: 10, //波浪的阴影范围
|
|
|
- shadowColor: "#beff72", //阴影颜色
|
|
|
- },
|
|
|
- outline: {
|
|
|
- show: true, //是否显示轮廓 布尔值
|
|
|
- borderDistance: 0, //外部轮廓与图表的距离 数字
|
|
|
- itemStyle: {
|
|
|
- borderColor: "#beff72", //边框的颜色
|
|
|
- borderWidth: 1, //边框的宽度
|
|
|
- },
|
|
|
- },
|
|
|
- emphasis: {
|
|
|
- itemStyle: {
|
|
|
- opacity: 1, //鼠标经过波浪颜色的透明度
|
|
|
- },
|
|
|
- },
|
|
|
- data: [0.2, 0.1544],
|
|
|
- amplitude: 6, //振幅 是波浪的震荡幅度 可以取具体的值 也可以是百分比 百分比下是按图标的直径来算
|
|
|
- waveLength: "50%", //波的长度 可以是百分比也可以是具体的像素值 百分比下是相对于直径的 取得越大波浪的起伏越小
|
|
|
- backgroundStyle: {
|
|
|
- color: 'transparent',
|
|
|
- },
|
|
|
- direction: "left", //波移动的速度 两个参数 left 从右往左 right 从左往右
|
|
|
- waveAnimation: true, //控制波动画的开关 值是布尔值 false 是关闭动画 true 是开启动画 也是默认值
|
|
|
- animationEasing: "linear", //初始动画
|
|
|
- animationEasingUpdate: "quarticInOut", //数据更新的动画效果
|
|
|
- animationDuration: 3000, //初始动画的时长,支持回调函数,可以通过每个数据返回不同的 delay 时间实现更绚丽的初始动画效果
|
|
|
- animationDurationUpdate: 300, //数据更新动画的时长
|
|
|
- }, {
|
|
|
- type: "liquidFill",
|
|
|
- radius: "40%",
|
|
|
- // 水球颜色
|
|
|
- color: ["#7cf2e0"],
|
|
|
- center: ["66%", "72%"],
|
|
|
- label: {
|
|
|
- position: ['50%', '50%'],
|
|
|
- formatter: function () {
|
|
|
- return employData.value[4];
|
|
|
- },
|
|
|
- fontSize: 16,
|
|
|
- color: '#fff',
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- opacity: 0.5, //波浪的透明度
|
|
|
- shadowBlur: 10, //波浪的阴影范围
|
|
|
- shadowColor: "#7cf2e0", //阴影颜色
|
|
|
- },
|
|
|
- outline: {
|
|
|
- show: true, //是否显示轮廓 布尔值
|
|
|
- borderDistance: 0, //外部轮廓与图表的距离 数字
|
|
|
- itemStyle: {
|
|
|
- borderColor: "#7cf2e0", //边框的颜色
|
|
|
- borderWidth: 1, //边框的宽度
|
|
|
-
|
|
|
- },
|
|
|
- },
|
|
|
- emphasis: {
|
|
|
- itemStyle: {
|
|
|
- opacity: 1, //鼠标经过波浪颜色的透明度
|
|
|
- },
|
|
|
- },
|
|
|
- data: [0.12, 0.1044],
|
|
|
- amplitude: 6, //振幅 是波浪的震荡幅度 可以取具体的值 也可以是百分比 百分比下是按图标的直径来算
|
|
|
- waveLength: "50%", //波的长度 可以是百分比也可以是具体的像素值 百分比下是相对于直径的 取得越大波浪的起伏越小
|
|
|
- backgroundStyle: {
|
|
|
- color: 'transparent',
|
|
|
- },
|
|
|
- direction: "left", //波移动的速度 两个参数 left 从右往左 right 从左往右
|
|
|
- waveAnimation: true, //控制波动画的开关 值是布尔值 false 是关闭动画 true 是开启动画 也是默认值
|
|
|
- animationEasing: "linear", //初始动画
|
|
|
- animationEasingUpdate: "quarticInOut", //数据更新的动画效果
|
|
|
- animationDuration: 3000, //初始动画的时长,支持回调函数,可以通过每个数据返回不同的 delay 时间实现更绚丽的初始动画效果
|
|
|
- animationDurationUpdate: 300, //数据更新动画的时长
|
|
|
- },
|
|
|
- ],
|
|
|
- };
|
|
|
- chartDom.setOption(option)
|
|
|
-};
|
|
|
|
|
|
watch(() => props.resultData, (newVal) => {
|
|
|
let arrData = newVal
|
|
@@ -265,56 +50,13 @@ watch(() => props.resultData, (newVal) => {
|
|
|
let arr = item.hours + '\n' + nameTitle
|
|
|
employData.value.push(arr)
|
|
|
})
|
|
|
- if (chartDom) {
|
|
|
- chartDom = echarts.init(chartDistrict.value);
|
|
|
- chartDom.setOption({
|
|
|
- series: [{
|
|
|
- label: {
|
|
|
- formatter: function () {
|
|
|
- return employData.value[0];
|
|
|
- },
|
|
|
- }
|
|
|
- }, {
|
|
|
- label: {
|
|
|
- formatter: function () {
|
|
|
- return employData.value[1];
|
|
|
- },
|
|
|
- }
|
|
|
- }, {
|
|
|
- label: {
|
|
|
- formatter: function () {
|
|
|
- return employData.value[2];
|
|
|
- },
|
|
|
- }
|
|
|
- }, {
|
|
|
- label: {
|
|
|
- formatter: function () {
|
|
|
- return employData.value[3];
|
|
|
- },
|
|
|
- }
|
|
|
- }, {
|
|
|
- label: {
|
|
|
- formatter: function () {
|
|
|
- return employData.value[4];
|
|
|
- },
|
|
|
- }
|
|
|
- }],
|
|
|
- })
|
|
|
- }
|
|
|
}, { deep: true, immediate: true } // 开启深度监听
|
|
|
)
|
|
|
// 生命周期
|
|
|
onMounted(() => {
|
|
|
- initAccess()
|
|
|
});
|
|
|
onUnmounted(() => {
|
|
|
- chartDom.clear()
|
|
|
- chartDom = null
|
|
|
})
|
|
|
-// 窗口自适应
|
|
|
-window.addEventListener('resize', () => {
|
|
|
- chartDom?.resize();
|
|
|
-});
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
@@ -323,5 +65,8 @@ window.addEventListener('resize', () => {
|
|
|
height: 100%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ justify-content: space-evenly;
|
|
|
}
|
|
|
</style>
|