• 深度图


      

    <template>
        <div id="com-quotation_depth">
            <div id="echarts" style="height: 1.74rem;  100%" ref='echartsdepth'></div>
        </div>
    </template>
    
    <script>
        // 引入基本模板
        import echarts from 'echarts'
        // 引入柱状图组件
        import 'echarts/lib/chart/line'
        // 引入提示框和title组件
        import 'echarts/lib/component/tooltip'
        import 'echarts/lib/component/title'
        import {
            mapState
        } from 'vuex'
        export default {
            name: 'com-quotation_depth',
            data() {
                return {
                    marketCoin: '',
                    nowSymbol: '',
                    depthData: {},
                    depthMap: {},
                    asksNum: 0,
                    buysNum: 0,
                    eachartColor: {
                        // 买区域颜色
                        buyAreaColor: {
                            start: 'rgba(4, 193, 158, 1)',        // 开始颜色
                            end: 'rgba(4, 193, 158, 0.1)'            // 结束颜色
                        },
                        // 卖区域颜色
                        sellAreaColor: {
                            start: 'rgba(239, 86, 86, 1)',
                            end: 'rgba(239, 86, 86, 0.1)'            // 结束颜色
                        },
                        // 坐标轴刻度上的颜色, 坐标轴刻度文字的颜色
                        tickColor: '#98A9B6',
                        // 网格颜色
                        gridColor: '#EAECEF'
                    }
                }
            },
            components: {},
            watch: {},
            computed: {},
            created () {
                this.marketCoin = this._P.getStorage('nowSymbol')
                this.nowSymbol = this.marketCoin.split('/')[1]
            },
            mounted() {
                this.initEcharts()
                this.initDepth()
            },
            methods: {
                shortNumber (num, digits=2) {
                    const si = [{
                            value: 1,
                            symbol: "k"
                        },
                        {
                            value: 1E3,
                            symbol: "K"
                        },
                        {
                            value: 1E6,
                            symbol: "M"
                        },
                        {
                            value: 1E9,
                            symbol: "G"
                        },
                        {
                            value: 1E12,
                            symbol: "T"
                        },
                        {
                            value: 1E15,
                            symbol: "P"
                        },
                        {
                            value: 1E18,
                            symbol: "E"
                        }
                    ];
                    const rx = /.0+$|(.[0-9]*[1-9])0+$/;
                    let i;
                    for (i = si.length - 1; i > 0; i--) {
                        if (num >= si[i].value) {
                            break;
                        }
                    }
                    return (num / si[i].value).toPrecision(digits) + si[i].symbol;
                },
                initDepth () {
                    let num = 20
                    let content = {}
                    content.asks = []
                    content.buys = []
                    for (let i = 0; i < num; i++) {
                        content.asks.push({
                            price: '--',
                            vol: '--',
                            total: 0
                        })
                        content.buys.push({
                            price: '--',
                            vol: '--',
                            total: 0
                        })
                    }
                    this.depthData = content
                },
                update(data) {
                    let askMaxTotal = 0
                    let buyMaxTotal = 0
                    let askMaxPrice = 0
                    let buyMinPrice = 0
                    if (data.data.tick && data.type === 2) {
                        let asks = data.data.tick.asks
                        let buys = data.data.tick.buys
                        this.asksNum = asks.length
                        this.buysNum = buys.length
                        while (asks.length < this.asksNum) {
                            asks.push({
                                price: '--',
                                vol: '--',
                                total: 0
                            })
                        }
                        while (buys.length < this.buysNum) {
                            buys.push({
                                price: '--',
                                vol: '--',
                                total: 0
                            })
                        }
                        buys.forEach((e, i) => {
                            let vol = 0
                            if (e.vol) {
                                vol = e.vol === '--' ? 0 : e.vol 
                                if (vol > buyMaxTotal) {
                                    buyMaxTotal = vol
                                }
                                buyMinPrice = e.price === '--' ? buyMinPrice : e.price
                            } else {
                                vol = e[1] === '--' ? 0 : e[1]
                                if (vol > buyMaxTotal) {
                                    buyMaxTotal = vol
                                }
                                buyMinPrice = e[0] === '--' ? buyMinPrice : e[0]
                            }
                        })
                        buys.forEach((e, i) => {
                            if (e.vol) {
                                e.total = buyMaxTotal
                            } else {
                                e.push(buyMaxTotal)
                            }
                        })
                        asks.forEach((e, i) => {
                            let vol = 0
                            if (e.vol) {
                                vol = e.vol === '--' ? 0 : e.vol
                                if (vol > askMaxTotal) {
                                    askMaxTotal = vol
                                }
                                askMaxPrice = e.price === '--' ? askMaxPrice : e.price
                            } else {
                                vol = e[1] === '--' ? 0 : e[1]
                                if (vol > askMaxTotal) {
                                    askMaxTotal = vol
                                }
                                askMaxPrice = e[0] === '--' ? askMaxPrice : e[0]
                            }
                        })
                        asks.forEach((e, i) => {
                            if (e.vol) {
                                e.total = askMaxTotal
                            } else {
                                e.push(askMaxTotal)
                            }
                        })
                        if (asks.length >= this.asksNum) {
                            asks = asks.slice(0, this.asksNum)
                        }
                        if (buys.length >= this.buysNum) {
                            buys = buys.slice(0, this.buysNum)
                        }
                        let channel = data.data.channel
                        channel = channel.split('_')[3]
                        if (channel === 'step0') {
                            this.depthData.asks = asks
                            this.depthData.buys = buys
                        }
                        this.$forceUpdate()
                    }
                    this.setData(this.depthData, buyMinPrice, askMaxPrice)
                },
                setData (newData, minval, maxval) {
                    if (!newData['buys']) { return }
                    this.minval = minval + ''
                    this.maxval = maxval + ''
                    // console.log('buy', this.buysArr)
                    // console.log('ask', this.asksArr)
                    this.myEcharts.resize()
                    this.eachart()
                },
                eachart () {
                    let buy = []
                    let buyTotal = 0
                    let buyVol = 0
                    this.depthData.buys.forEach((e) => {
                        let value = []
                        if (e.price) {
                            buyVol = (e.vol) + buyVol
                            value.push(e.price)
                            value.push(buyVol)
                            // value.push(e.total)
                        } else {
                            buyVol = (e[1]) + buyVol
                            value.push(e[0])
                            value.push(buyVol)
                            // value.push(e[2])
                        }
                        if (value[0] !== '--') {
                            let obj = {
                                value: value,
                                label: {},
                                itemStyle: {}
                            }
                            buy.unshift(obj)
                        }
                    })
                    let ask = []
                    let askTotal = 0
                    let askVol = 0
                    this.depthData.asks.forEach((e) => {
                        let value = []
                        if (e.price) {
                            askVol = (e.vol) + askVol
                            value.push(e.price)
                            value.push(askVol)
                            // value.push(e.total)
                        } else {
                            askVol = (e[1]) + askVol
                            value.push(e[0])
                            value.push(askVol)
                            // value.push(e[2])
                        }
                        if (value[0] !== '--') {
                            let obj = {
                                value: value,
                                label: {},
                                itemStyle: {}
                            }
                            ask.push(obj)
                        }
                    })
                    this.myEcharts.setOption({
                        dataZoom: [
                            {
                                type: 'inside'
                            },
                            {
                                type: 'inside'
                            }
                        ],
                        xAxis: {
                            min: this.minval,
                            max: this.maxval
                        },
                        series: [
                            {
                                data: buy
                            },
                            {
                                data: ask
                            }
                        ]
                    })
                },
                initEcharts() {
                    let _this = this
                    this.myEcharts = echarts.init(this.$refs.echartsdepth)
                    this.myEcharts.setOption({
                        // 点击后的弹层
                        tooltip: {
                            trigger: 'none', // 不限时弹层
                            // alwaysShowContent: true,
                          axisPointer: { // 显示随手指移动的刻度线
                            type: 'cross',
                            show: false,
                            crossStyle: {  0.5 }
                          }
                        },
                        // 网格
                        grid: {
                            show: true,
                            borderColor: this.eachartColor.gridColor,
                            borderWidth: 0,
                            containLabel: true,
                            left: 0,
                            top: 20,
                            right: 0,
                            bottom: 0
                        },
                        // 方位
                        legend: {},
                        animation: false,
                        xAxis: {
                            boundaryGap: false,            // 坐标轴两边留白策略
                            axisLine: {
                                show: false
                            },
                            axisTick: {
                                show: false,  // 是否显示坐标轴刻度。
                                lineStyle: {
                                    color: this.eachartColor.tickColor
                                }
                            }, // 标色
                            axisLabel: {
                                fontSize: 10,
                                margin: 10,
                                color: this.eachartColor.tickColor, // 字体颜色
                                showMaxLabel: false,
                                showMinLabel: false,
                                // formatter: function (value, index) {
                                //     if (index == _this.asksNum || index == _this.buysNum) {
                                //         return value
                                //     }
                                // }
                            },
                            type: 'category',
                            splitLine: {
                                lineStyle: {
                                    color: ['rgba(153,153,153,0.07)']
                                }
                            }
                        },
                        yAxis: {
                            axisLine: {
                                show: false        // 是否显示坐标轴轴线。
                            },
                            axisTick: {
                                show: false,  // 是否显示坐标轴刻度。
                                lineStyle: {
                                    color: this.eachartColor.tickColor    // 坐标轴刻度颜色
                                }
                            },
                            axisLabel: {
                                inside: true,        // 刻度标签是否朝内
                                fontSize: 10,        // 文字大小
                                color: this.eachartColor.tickColor, // 字体颜色
                                formatter: function (name) {                // 格式化文字
                                    return _this.shortNumber(name, 4)
                                }
                            },
                            type: 'value',
                            splitLine: {
                                lineStyle: {
                                    color: ['rgba(234,236,239,0.4)']        // 坐标轴在 grid 区域中的分隔线。
                                }
                            }
                        },
                        series: [
                            {
                                type: 'line',
                                smooth: 0,            // 是否平滑曲线显示。
                                symbol: 'none',
                                lineStyle: {
                                    normal: {
                                        color: this.eachartColor.buyAreaColor.start,
                                         1
                                    }
                                },
                                itemStyle: {
                                    normal: {
                                        color: this.eachartColor.buyAreaColor.start,
                                    }
                                },
                                areaStyle: {
                                    normal: {
                                        // 买区域颜色
                                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                            {
                                                offset: 0,
                                                color: this.eachartColor.buyAreaColor.start,
                                            },
                                            {
                                                offset: 1,
                                                color: this.eachartColor.buyAreaColor.end
                                            }
                                        ])
                                    }
                                },
                                data: []
                            },
                            {
                                type: 'line',
                                smooth: 0,    // 如果是 number 类型(取值范围 0 到 1),表示平滑程度,越小表示越接近折线段,反之则反。设为 true 时相当于设为 0.5。
                                symbol: 'none',        // 区域上面的一条线
                                lineStyle: {
                                    normal: {
                                        color: this.eachartColor.sellAreaColor.start,
                                         1    // 区域上面的一条线宽度
                                    }
                                },
                                itemStyle: {
                                    normal: {
                                        color: this.eachartColor.sellAreaColor.start
                                    }
                                },
                                // 卖区域颜色
                                areaStyle: {
                                    normal: {
                                        color: new echarts.graphic.LinearGradient(
                                            0, 0, 0, 1, [
                                                {
                                                    offset: 0,
                                                    color: this.eachartColor.sellAreaColor.start
                                                },
                                                {
                                                    offset: 1,
                                                    color: this.eachartColor.sellAreaColor.end
                                                }
                                            ]
                                        )
                                    }
                                },
                                data: []
                            }
                        ]
                    })
                }
            }
        }
    </script>
  • 相关阅读:
    软件工程第三次作业
    软件工程第一次作业
    软件工程第0次作业
    第2次作业
    第1次作业
    第0次作业
    软件工程第四次作业 石墨文档IOS
    软件工程第三次作业
    软件工程第一次作业
    第零次作业
  • 原文地址:https://www.cnblogs.com/alantao/p/11890569.html
Copyright © 2020-2023  润新知