|
@@ -0,0 +1,222 @@
|
|
|
+<template>
|
|
|
+ <div class="workJc">
|
|
|
+ <div class="echart-workJc">
|
|
|
+ <div class="workJc-l">
|
|
|
+ <div class="echart-yh"></div>
|
|
|
+ <div class="echart-line"></div>
|
|
|
+ <div class="echart-boxs" ref="ring"></div>
|
|
|
+ </div>
|
|
|
+ <div class="workJc-r"></div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div class="card-workJc"></div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import {ref,onMounted} from 'vue'
|
|
|
+import * as echarts from 'echarts';
|
|
|
+//获取dom节点
|
|
|
+let ring=ref()
|
|
|
+
|
|
|
+function getOption() {
|
|
|
+ nextTick(() => {
|
|
|
+
|
|
|
+ let color = [
|
|
|
+ '#0CD2E6',
|
|
|
+ '#3751E6',
|
|
|
+ '#FFC722',
|
|
|
+ '#886EFF',
|
|
|
+ '#008DEC',
|
|
|
+ '#114C90',
|
|
|
+ '#00BFA5',
|
|
|
+];
|
|
|
+
|
|
|
+let title = '自定义legend、默认选中';
|
|
|
+let legend = [
|
|
|
+ 'A需求类型',
|
|
|
+ 'B需求类型',
|
|
|
+ 'C需求类型',
|
|
|
+ 'D需求类型',
|
|
|
+ 'E需求类型',
|
|
|
+ '其他'
|
|
|
+];
|
|
|
+
|
|
|
+let seriesData = [
|
|
|
+ { "name": "A需求类型", "value": 30 },
|
|
|
+ { "name": "B需求类型", "value": 10 },
|
|
|
+ { "name": "C需求类型", "value": 15 },
|
|
|
+ { "name": "D需求类型", "value": 23 },
|
|
|
+ { "name": "E需求类型", "value": 10 },
|
|
|
+ { "name": "其他", "value": 12 }
|
|
|
+]
|
|
|
+
|
|
|
+
|
|
|
+ let myChart = echarts.init(ring.value);
|
|
|
+ let option = {
|
|
|
+ backgroundColor:'#050e31',
|
|
|
+ color: color,
|
|
|
+ title: {
|
|
|
+ top: 20,
|
|
|
+ text: title,
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 20,
|
|
|
+ color: '#DDEEFF',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ top: '15%',
|
|
|
+ left: 0,
|
|
|
+ right: '1%',
|
|
|
+ bottom: 5,
|
|
|
+ containLabel: true,
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ orient: 'vertical',
|
|
|
+ top: 'center',
|
|
|
+ right: 50,
|
|
|
+ textStyle: {
|
|
|
+ align: 'left',
|
|
|
+ verticalAlign: 'middle',
|
|
|
+ rich: {
|
|
|
+ name: {
|
|
|
+ color: 'rgba(255,255,255,0.5)',
|
|
|
+ fontSize: 10,
|
|
|
+ },
|
|
|
+ value: {
|
|
|
+ color: 'rgba(255,255,255,0.5)',
|
|
|
+ fontSize: 10,
|
|
|
+ },
|
|
|
+ rate: {
|
|
|
+ color: 'rgba(255,255,255,0.9)',
|
|
|
+ fontSize: 10,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data: legend,
|
|
|
+ formatter: (name) => {
|
|
|
+ if (seriesData.length) {
|
|
|
+ const item = seriesData.filter((item) => item.name === name)[0];
|
|
|
+ return `{name|${name}:}{value| ${item.value}} {rate| ${item.value}%}`;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ series: [{
|
|
|
+ name: '需求类型占比',
|
|
|
+ type: 'pie',
|
|
|
+ center: ['50%', '50%'],
|
|
|
+ radius: ['45%', '65%'],
|
|
|
+ label: {
|
|
|
+ normal: {
|
|
|
+ show: false,
|
|
|
+ position: 'center',
|
|
|
+ formatter: '{value|{c}}\n{label|{b}}',
|
|
|
+ rich: {
|
|
|
+ value: {
|
|
|
+ padding: 5,
|
|
|
+ align: 'center',
|
|
|
+ verticalAlign: 'middle',
|
|
|
+ fontSize: 32,
|
|
|
+ },
|
|
|
+ label: {
|
|
|
+ align: 'center',
|
|
|
+ verticalAlign: 'middle',
|
|
|
+ fontSize: 16,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ emphasis: {
|
|
|
+ show: true,
|
|
|
+ textStyle: {
|
|
|
+ fontSize: '12',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ labelLine: {
|
|
|
+ show: false,
|
|
|
+ length: 0,
|
|
|
+ length2: 0,
|
|
|
+ },
|
|
|
+ data: seriesData,
|
|
|
+ }],
|
|
|
+};
|
|
|
+ myChart.setOption(option);
|
|
|
+ window.onresize = function () {
|
|
|
+ myChart.resize();
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(()=>{
|
|
|
+ getOption()
|
|
|
+ })
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.workJc {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ .echart-workJc {
|
|
|
+ width: 100%;
|
|
|
+ height: 45%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ .workJc-l {
|
|
|
+ position: relative;
|
|
|
+ width: 180px;
|
|
|
+ height: 100%;
|
|
|
+ .echart-yh {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ background: url('../../../../../assets/images/fire/firehome/zu-e.png') no-repeat center;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ }
|
|
|
+ .echart-line {
|
|
|
+ position: absolute;
|
|
|
+ top: 8%;
|
|
|
+ left: 15%;
|
|
|
+ width: 125px;
|
|
|
+ height: 125px;
|
|
|
+ background: url('../../../../../assets/images/fire/firehome/ty-e.png') no-repeat center;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ animation: rotationLine 10s linear infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes rotationLine {
|
|
|
+ 0% {
|
|
|
+ transform: rotate(0deg);
|
|
|
+ }
|
|
|
+
|
|
|
+ 100% {
|
|
|
+ transform: rotate(360deg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .echart-boxs {
|
|
|
+ position: absolute;
|
|
|
+ left: 50%;
|
|
|
+ top: 50%;
|
|
|
+ transform: translate(-50%,-50%);
|
|
|
+ width: 90px;
|
|
|
+ height: 90px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .workJc-r{
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .card-workJc {
|
|
|
+ height: 55%;
|
|
|
+ border: 1px solid #ccc;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|