From 416ef077b916de27c88439d2fb679691e85df743 Mon Sep 17 00:00:00 2001
From: 李凌 <344137771@qq.com>
Date: Fri, 12 Jun 2026 16:40:53 +0800
Subject: [PATCH] 1
---
src/page/kline/components/kLine.vue | 95 ++++++++++++++++++++++++++++-------------------
1 files changed, 56 insertions(+), 39 deletions(-)
diff --git a/src/page/kline/components/kLine.vue b/src/page/kline/components/kLine.vue
index 7e75569..d9e16f9 100644
--- a/src/page/kline/components/kLine.vue
+++ b/src/page/kline/components/kLine.vue
@@ -46,6 +46,19 @@
HQChart.Chart.MARKET_SUFFIX_NAME.GetMarketStatus = function(symbol) {
return 2;
}; // 一直交易
+
+ // HQChart 各数据接口均需纳入轮询(IsAutoUpdate 无效);切换 tab 后通常只触发历史类请求
+ const POLL_REQUEST_TYPES = new Set([
+ "MinuteChartContainer::RequestMinuteData",
+ "MinuteChartContainer::RequestHistoryMinuteData",
+ "KLineChartContainer::RequestHistoryData",
+ "KLineChartContainer::RequestRealtimeData",
+ "KLineChartContainer::RequestFlowCapitalData",
+ "KLineChartContainer::ReqeustHistoryMinuteData",
+ "KLineChartContainer::RequestMinuteRealtimeData",
+ ]);
+ const REFRESH_INTERVAL = 10000;
+
function DefaultData() {}
DefaultData.GetMinuteOption = function() {
@@ -60,7 +73,7 @@
],
Symbol: "AAPL.usa",
- IsAutoUpdate: true, // 是自动更新数据
+ IsAutoUpdate: false,
AutoUpdateFrequency: 20000,
DayCount: 1, // 1 最新交易日数据 >1 多日走势图
IsShowRightMenu: false, // 是否显示右键菜单
@@ -894,7 +907,7 @@
// { Index: 'MACD', Modify: true, Change: true, Close: false }
],
Symbol: "600015.sh",
- IsAutoUpdate: true, // 是自动更新数据
+ IsAutoUpdate: false,
AutoUpdateFrequency: 15000,
IsApiPeriod: true,
IsShowRightMenu: false, // 是否显示右键菜单
@@ -1074,7 +1087,8 @@
VolChartHeight: 10,
chartType: "kline",
- timerss: null,
+ refreshHandlers: {},
+ refreshTimer: null,
isShow: false,
xData: [],
};
@@ -1128,13 +1142,10 @@
// 自适应K线图
var elementResizeDetectorMaker = require("element-resize-detector");
- // 创建实例,无参数
- var erd = elementResizeDetectorMaker(); // 使用默认选项(将使用基于对象的方法)。
-
// 创建实例带参数
// 使用基于超快速滚动的方法。
// 这是推荐的策略。
- elementResizeDetectorMaker({
+ this.erd = elementResizeDetectorMaker({
// var erdUltraFast = elementResizeDetectorMaker({
strategy: "scroll",
callOnAdd: true, // callOnAdd选项,用于确定在添加侦听器时是否应调用它们。默认为true。
@@ -1146,7 +1157,7 @@
var self = this;
// 侦听元素的调整大小事件,并使用元素作为调整大小事件的参数来调用侦听器函数。传递给函数的选项将
// 覆盖实例选项
- erd.listenTo(this.$refs["rightContent"], function(element) {
+ this.erd.listenTo(this.$refs["rightContent"], function(element) {
var width = element.offsetWidth;
var height = element.offsetHeight;
self.tableHeight = height - 10; // 将监听到的宽高进行赋值
@@ -1156,10 +1167,36 @@
});
},
beforeDestroy() {
- clearInterval(this.timerss); // 在组件销毁前清除定时器
- this.timerss = null
+ this.stopRefreshTimer();
+ if (this.erd && this.$refs.rightContent) {
+ this.erd.uninstall(this.$refs.rightContent);
+ this.erd = null;
+ }
+ window.onresize = null;
},
methods: {
+ resetRefreshHandlers() {
+ this.refreshHandlers = {};
+ },
+
+ startRefreshTimer() {
+ if (this.refreshTimer) {
+ return;
+ }
+ this.refreshTimer = setInterval(() => {
+ Object.values(this.refreshHandlers).forEach(({ data, callback }) => {
+ EastMoney.HQData.NetworkFilter(data, callback);
+ });
+ }, REFRESH_INTERVAL);
+ },
+
+ stopRefreshTimer() {
+ if (this.refreshTimer) {
+ clearInterval(this.refreshTimer);
+ this.refreshTimer = null;
+ }
+ this.refreshHandlers = {};
+ },
OnSize() {
var width = this.$refs.right.clientWidth;
@@ -1248,6 +1285,7 @@
this.IsShowRightMenu = isShowRightMenu;
this.Symbol = symbol;
+ this.resetRefreshHandlers();
this.Chart.ChangeSymbol(this.Symbol);
this.KLineChart.ChangeSymbol(this.Symbol);
},
@@ -1269,6 +1307,7 @@
//分时额外处理才注释的
this.chartType = type;
this.KLinePeriodIndex = index;
+ this.resetRefreshHandlers();
this.KLineChart.ChangePeriod(item.ID);
},
@@ -1277,6 +1316,7 @@
item // K线复权
) {
this.KLineRightIndex = index;
+ this.resetRefreshHandlers();
this.KLineChart.ChangeRight(item.ID);
},
@@ -1299,37 +1339,14 @@
callback // 第3方数据替换接口
) {
EastMoney.HQData.Log("[HQChartDemo::NetworkFilter] data", data);
- // console.log(data.Name,123123);
EastMoney.HQData.NetworkFilter(data, callback);
- this.timerss = setInterval(() => {
- switch (data.Name) {
- // 分时图数据对接
- case "MinuteChartContainer::RequestMinuteData":
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- case "MinuteChartContainer::RequestHistoryMinuteData":
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- case "KLineChartContainer::RequestHistoryData": // 日线全量数据下载
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- case "KLineChartContainer::RequestRealtimeData": // 日线实时数据更新
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- case "KLineChartContainer::RequestFlowCapitalData": // 流通股本
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- case "KLineChartContainer::ReqeustHistoryMinuteData": // 分钟全量数据下载
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- case "KLineChartContainer::RequestMinuteRealtimeData": // 分钟增量数据更新
- EastMoney.HQData.NetworkFilter(data, callback);
- break;
- }
- }, 10000);
-
-
+ if (!POLL_REQUEST_TYPES.has(data.Name)) {
+ return;
+ }
+ // 始终更新为最新 callback,避免切换 tab 后仍用旧周期参数轮询
+ this.refreshHandlers[data.Name] = { data, callback };
+ this.startRefreshTimer();
},
handleSelect(key, keyPath) {
--
Gitblit v1.9.3