1
李凌
3 days ago 416ef077b916de27c88439d2fb679691e85df743
1
2 files modified
107 ■■■■■ changed files
src/page/kline/components/kLine.vue 95 ●●●●● patch | view | raw | blame | history
src/page/kline/index.vue 12 ●●●● patch | view | raw | blame | history
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) {
src/page/kline/index.vue
@@ -494,13 +494,19 @@
    this.getNohknews();
  },
  beforeDestroy() {
    this.clearInterval(this.timer); // 在组件销毁前清除定时器
    this.clearStockTimer();
  },
  // beforeDestroy() {
  //   this.Klinetype = false;
  //   window.clearInterval()
  // },
  methods: {
    clearStockTimer() {
      if (this.timer) {
        clearInterval(this.timer);
        this.timer = null;
      }
    },
    async getHknews() {
      await api.queryIndexNews().then((res) => {
        if (res.status === 0) {
@@ -649,7 +655,7 @@
      }
    },
    handleBackaa() {
      clearInterval(this.timer);
      this.clearStockTimer();
      window.localStorage.removeItem("kLine");
      this.$router.go(-1);
    },
@@ -665,7 +671,7 @@
      });
    },
    goBuy(index) {
      clearInterval(this.timer);
      this.clearStockTimer();
      this.$router.push({
        path: "/TradingBuy",
        query: {