import * as echarts from "echarts"; import { getTzbp } from "../../api/apiPost" import { chartsWidth,emptyData, handelProfitrate, dataLength,handelLineType, handelZoom, handelWatermark, handelSwitchs, fetchBtcPrice, fetchEthPrice, handelSmaData, getDateArray } from "../../util/processingData" export default { data() { return { lengthTimer:null, tzbpLoading: false, option: { tooltip: { trigger: "axis", //解决tooltip显示不全问题1 confine: true, formatter: function (params) { const date = new Date(params[0].value[0]); const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); let time = `${year}-${month}-${day}`; var res =time for (let i = 0; i < params.length; i++) { res += `
${params[i].marker} ${params[i].seriesName}      ${params[i].value[1]}` } return res; } }, legend: { right: "100", //处理legengd过长 // formatter: function (name) { // return echarts.format.truncateText(name, 100, '14px Microsoft Yahei', '…'); // }, tooltip: { show: true } }, xAxis: { type: "time", boundaryGap: false, // axisLabel: { // formatter: `{yyyy}-{MM}-{dd}`, // }, data: [] }, yAxis: [ { type: "value", // boundaryGap: [0, "100%"], axisLabel: { formatter: function (e) { let value; if (e > 100000000) { value = `${e / 100000000}E`; } else if (e > 1000000) {//百万 value = `${e / 1000000}M`; } else if (e >= 10000) {//万 value = `${e / 10000}W`; } else if (e < -1000000) {//百万 value = `${e / 1000000}M`; } else if (e < -10000) {//万 value = `${e / 10000}W`; } else { value = e; } return value; }, }, min: "dataMin", max: "dataMax", }, { type: "value", // boundaryGap: [0, "100%"], show: true, min: "dataMin", max: "dataMax", position: "right", axisLabel: { formatter: function (e) { let value; if (e > 100000000) { value = `${e / 100000000}E`; } else if (e > 1000000) {//百万 value = `${e / 1000000}M`; } else if (e >= 10000) {//万 value = `${e / 10000}W`; } else if (e < -1000000) {//百万 value = `${e / 1000000}M`; } else if (e < -10000) {//万 value = `${e / 10000}W`; } else { value = e; } return value; }, }, }, { type: "value", // boundaryGap: [0, "100%"], min: "dataMin", max: "dataMax", show: false, }, { type: "value", // boundaryGap: [0, "100%"], min: "dataMin", max: "dataMax", show: false, }, { type: "value", // boundaryGap: [0, "100%"], min: "dataMin", max: "dataMax", show: false, }, ], dataZoom: [ { type: "inside", start: 0, end: 100, }, { start: 0, end: 100, }, ], series: [ { name: 'Buy power for Time Zone', type: 'bar', data: [], itemStyle: { normal: { // 使用函数返回颜色值 color: function (params) { var val = params.value[1]; if (val > 0) { // 正数柱状图染成红色 return 'green'; } else if (val < 0) { // 负数柱状图染成绿色 return 'red'; } // 0 值不染色 return ''; } } }, z: 1 }, // { // name: "Buy power for Time Zone", // type: "line", // smooth: false, // symbol: "circle", // showSymbol: false, // symbolSize: 5, // // areaStyle: {}, // itemStyle: { // color: "#f7864c", // borderColor: "rgba(221,220,107,0.1)", // borderWidth: 12, // }, // yAxisIndex: 0, // lineStyle: { // //线条样式 // color: "#f7864c", // width: "1", // }, // data: [], // }, { name: "Price[BTC]", type: "line", smooth: false, symbol: "circle", symbolSize: 5, showSymbol: false, // areaStyle: {}, itemStyle: { color: "#888888", borderColor: "rgba(221,220,107,0.1)", borderWidth: 12, }, lineStyle: { //线条样式 color: "#888888", width: "1", }, yAxisIndex: 1, data: [], }, // { // name: "Price [ETH]", // type: "line", // smooth: false, //线条是否圆滑 // symbol: "circle", // symbolSize: 5, // showSymbol: false, // itemStyle: { // color: "#627eea", // borderColor: "rgba(221,220,107,0.1)", // borderWidth: 12, // }, // lineStyle: { // //线条样式 // color: "#627eea", // width: "1", // }, // yAxisIndex: 4, // data: [], // }, ], }, switch3: "", oldY: null, btcFlag: null, ethFlag: null, fatherSmaData: [], start: "", end: "", params: { zone: "eu", sma: "", coin: "BTC" }, zoomStart: 0, zoomEnd: 0, zoneList: [{//美洲 value: "us", label: "America", }, {//亚洲 value: "asia", label: "Asia", }, {//欧洲 value: "eu", label: "Europe", },], isactive: 2, } }, mounted() { this.fetchTzbp(this.params) //禁用时间框 this.$addStorageEvent(1, "timeDisable", true); this.switch3 = handelSwitchs(this.option, this.switch3) this.oldY = this.option.yAxis this.ethFlag = JSON.parse(localStorage.getItem("ethFlag")); this.btcFlag = JSON.parse(localStorage.getItem("btcFlag")); this.$addStorageEvent(1, "zoomStart", this.zoomStart); this.$addStorageEvent(1, "zoomEnd", this.zoomEnd); window.addEventListener("setItem", () => { this.ethFlag = JSON.parse(localStorage.getItem("ethFlag")); this.btcFlag = JSON.parse(localStorage.getItem("btcFlag")); this.zoomStart = localStorage.getItem("zoomStart") this.zoomEnd = localStorage.getItem("zoomEnd") }) }, methods: { //初始化图表 inCharts() { if (this.myChart == null) { this.myChart = echarts.init(document.getElementById("tzbpBox")); } this.option = handelZoom(this.myChart, this.option, this, this.zoomStart, this.zoomEnd) this.myChart.setOption(this.option); chartsWidth("tzbpBox", this); window.addEventListener("resize", () => { if (this.myChart) this.myChart.resize(); }); }, async fetchTzbp(params) { this.tzbpLoading = true const { data } = await getTzbp(params) let tzbpData = data.data //空数据处理 let noData = emptyData(data.data, this.option.series, this.inCharts, this) if (noData) { this.tzbpLoading = false return } this.start = tzbpData[0].date.split("T")[0] this.end = tzbpData[tzbpData.length - 1].date.split("T")[0] // //添加水印 this.option = handelWatermark(this.option) this.$nextTick(() => { //渲染ETH if (this.ethFlag) { this.handelSonEthPrice("ETH", this.ethFlag) this.$addStorageEvent(1, "ethFlag", JSON.stringify(this.ethFlag)); } //渲染BTC价格 if (this.btcFlag) { this.handelSonBtcPrice("BTC", this.btcFlag) this.$addStorageEvent(1, "btcFlag", JSON.stringify(this.btcFlag)); } }) let ValueList = [] tzbpData.forEach(item => { ValueList.push(Number(item.value.toFixed(2))) }) this.option.series[0].data = handelProfitrate(tzbpData, ValueList) let label = this.zoneList.find(item => item.value == this.params.zone).label this.option.series[0].name = `Buy power for ${label} Zone` this.inCharts() this.tzbpLoading = false //判定页面条数是否一致 if (this.lengthTimer) { clearTimeout(this.lengthTimer) } this.lengthTimer = setTimeout(() => { this.$addStorageEvent(1, "lengthFlag", dataLength(this.option, this.option.series[0].data.length), ); }, 10000) }, //接收Home传的时间handelParmesTime handelSonTime(start, end) { this.params.start = start; this.params.end = end; this.fetchTzbp(this.params) }, //点击对数/线性按钮切换 handelLineSwitch() { this.option = handelLineType(this.option, this.oldY) this.switch3 = handelSwitchs(this.option, this.switch3) this.myChart.setOption(this.option); }, //父级点击BTC价格按钮 handelSonBtcPrice(radius, flag) { this.btcFlag = flag fetchBtcPrice("BTC", this.option.series[1], this.start, this.end, this.inCharts, this, this.btcFlag) }, //父级点击ETH价格按钮 handelSonEthPrice(radius, flag) { this.ethFlag = flag this.$addStorageEvent(1, "ethFlag", JSON.stringify(this.ethFlag)); fetchEthPrice("ETH", this.option.series[2], this.start, this.end, this.inCharts, this, this.ethFlag) }, //父级选择Sma handelSonSma(smaDataList) { this.params.sma = smaDataList this.fetchTzbp(this.params) this.$addStorageEvent(1, "sma", smaDataList); // this.fatherSmaData = smaDataList // handelSmaData(smaDataList, this.option.series[1], this.inCharts,this.start, this.end,) }, handelZone(value, index) { this.params.zone = value this.isactive = index this.fetchTzbp(this.params) }, }, beforeDestroy() { if (this.lengthTimer) { clearTimeout(this.lengthTimer) } } }