whyczyk
2021-10-11 c3a135a6fbbde6daba73dde10454583a8fc7ab73
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<template>
    <div class="echarts-wrapper" @click="toParentPage">
        <div class="echarts-content" ref="chart"></div>
    </div>
</template>
 
<script>
import * as echarts from 'echarts';
import { WebSocketClass } from '@/assets/js/socket'
export default {
    name: "RoseChartED",
    chart: "",
    chartData: [],
    props: {
        id: {
            type: String,
            default: ""
        }
    },
    data() {
        return {
            websock: null
        }
    },
    methods: {
        toParentPage() {
            window.parent.parent.postMessage({
                cmd: "syncPage",
                params: {
                    pageInfo: {
                        label: "电池信息统计分析",
                        name: "produceTotal",
                        src: "#/dataMager/produceTotal",
                        closable: true
                    },
                }
            }, "*");
        },
        setOption(opt) {
            this.$options.chart.setOption(opt);
        },
        organizeData(data) {
            let option = {
                tooltip: {
                    trigger: 'item'
                },
                series: [{
                    type: 'pie',
                    center: ['50%', '50%'],
                    radius: ['0', '50%'],
                    itemStyle: {
                        color(params) {
                            return data[params.dataIndex].color;
                        },
                    },
                    data: data
                }]
            };
 
            // 设置图表配置项
            this.setOption(option);
        },
        setData(sendData) {
            if (sendData) {
                this.$options.chartData = sendData;
                this.organizeData(sendData)
            } else {
                this.postData()
            }
        },
        postData() {
            let userId = localStorage.getItem('userId');
            this.websock = new WebSocketClass(`/screen/batteryData/endurance/${userId}`, this.wsMessage)
        },
        wsMessage(res) {
            if (res.code == 1) {
                let optionData = [{
                    value: 0,
                    name: '续航1小时内',
                    color: '#E85D22'
                },
                {
                    value: 0,
                    name: '续航1小时到2小时',
                    color: '#76CFDD'
                },
                {
                    value: 0,
                    name: '续航2小时到3小时',
                    color: '#FEDB5B'
                },
                {
                    value: 0,
                    name: '续航3小时以上',
                    color: '#8278E9'
                },
                ]
                let resData = res.data;
                for (let key in resData) {
                    optionData.map(item => {
                        if (item.name == key) {
                            item.value = resData[key]
                        }
                    })
                }
                this.$options.chartData = optionData;
                this.organizeData(optionData)
            }
        },
        outClear() {
            this.websock.closeMyself()
            this.websock = null
            window.removeEventListener('resize', this.resize);
        },
        resize() {
            setTimeout(() => {
                this.$options.chart.resize();
                if (JSON.stringify(this.$options.chartData) != '{}') {
                    this.setData(this.$options.chartData);
                }
            }, 300)
        }
    },
    mounted() {
        // 基于准备好的dom,初始化echarts实例
        this.$options.chart = echarts.init(this.$refs.chart);
 
        window.addEventListener('resize', this.resize);
    },
    destroyed() {
        window.removeEventListener('resize', this.resize);
    }
}
</script>
 
<style scoped>
</style>