import * as echarts from "echarts"; import { fetchRealizedPrice } from "../../api/apiPost" import { chartsWidth, emptyData,dataLength, handelProfitrate, handelLineType, handelZoom, handelWatermark, handelSwitchs, fetchBtcPrice, fetchEthPrice, handelSmaData, getDateArray } from "../../util/processingData" export default { data() { return { lengthTimer:null, realizedPriceLoading: 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" }, { 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: "Realized Price", 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: 0, 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: [], // }, ], }, params: { sma: "" }, switch3: "", oldY: null, btcFlag: null, ethFlag: null, fatherSmaData: [], start: "", end: "", zoomStart: 0, zoomEnd: 0, } }, mounted() { this.fetchRealizedPrice(this.params.req, this.params.radius) //禁用时间框 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("realizedPriceBox")); } this.option = handelZoom(this.myChart, this.option, this, this.zoomStart, this.zoomEnd) this.myChart.setOption(this.option); chartsWidth("realizedPriceBox", this); window.addEventListener("resize", () => { if (this.myChart) this.myChart.resize(); }); }, async fetchRealizedPrice(params) { this.realizedPriceLoading = true const { data } = await fetchRealizedPrice(params) //空数据处理 let noData = emptyData(data.data, this.option.series, this.inCharts, this) if (noData) { this.realizedPriceLoading = false return } let realizedPriceData = data.data this.start = realizedPriceData[0].date.split("T")[0] this.end = realizedPriceData[realizedPriceData.length - 1].date.split("T")[0] // //添加水印 this.option = handelWatermark(this.option) // //根据渲染的数据时间渲染对应的价格线和移动平均线 this.$nextTick(() => { //移动平均线没值 才渲染正常价格数据 if (this.start && !this.fatherSmaData[0]) { this.handelSonBtcPrice("BTC", true) } //点击时间 移动平均线有值 就渲染查询移动平均线 if (this.fatherSmaData[0] && this.start) { this.handelSonSma(this.fatherSmaData, this.start, this.end) } if (this.ethFlag) { this.$addStorageEvent(1, "ethFlag", JSON.stringify(this.ethFlag)); this.handelSonEthPrice("ETH", this.ethFlag) } }) let profitValueList = [] realizedPriceData.forEach(item => { profitValueList.push(Number(item.value.toFixed(2))) }) this.option.series[0].data = handelProfitrate(realizedPriceData, profitValueList) this.inCharts() this.realizedPriceLoading = false //判定页面条数是否一致 if (this.lengthTimer) { clearTimeout(this.lengthTimer) } this.lengthTimer = setTimeout(() => { this.$addStorageEvent(1, "lengthFlag", dataLength(this.option, this.option.series[0].data.length), ); }, 10000) }, //点击对数/线性按钮切换 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 fetchEthPrice("ETH", this.option.series[2], this.start, this.end, this.inCharts, this, this.ethFlag) }, //父级选择Sma handelSonSma(smaDataList) { this.params.sma = smaDataList this.fetchRealizedPrice(this.params) this.$addStorageEvent(1, "sma", smaDataList); // this.fatherSmaData = smaDataList // handelSmaData(smaDataList, this.option.series[1], this.inCharts,this.start, this.end,) }, }, beforeDestroy() { if (this.lengthTimer) { clearTimeout(this.lengthTimer) } } }