From 307b17ef15c73a071912a262834f2a5f68e1fa87 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 11 九月 2025 15:20:35 +0800
Subject: [PATCH] 完成走航季度报告自动生成

---
 src/model/Legend.js |  190 +++++++++++++++++++++++++++--------------------
 1 files changed, 109 insertions(+), 81 deletions(-)

diff --git a/src/model/Legend.js b/src/model/Legend.js
index 054ad4b..1492cbf 100644
--- a/src/model/Legend.js
+++ b/src/model/Legend.js
@@ -8,8 +8,9 @@
 
   //鍚勭洃娴嬪洜瀛愭暟鎹垎绾э紙鏍囧噯锛�
   _legend_r: {
+    NO: [0, 100, 200, 700, 1200, 2340],
     NO2: [0, 100, 200, 700, 1200, 2340],
-    CO: [0, 5, 10, 35, 60, 90],
+    CO: [0, 5000, 10000, 35000, 60000, 90000],
     H2S: [0, 150, 500, 650, 800, 1600],
     SO2: [0, 150, 500, 650, 800, 1600],
     O3: [0, 160, 200, 300, 400, 800],
@@ -25,6 +26,14 @@
 
   //鍚勭洃娴嬪洜瀛愭暟鎹垎绾э紙鏍囧噯锛夊搴旈鑹�
   _legend_c: {
+    NO: [
+      [0, 0.89, 0, 0.75],
+      [1, 1, 0, 0.75],
+      [1, 0.49, 0, 0.75],
+      [1, 0, 0, 0.75],
+      [0.6, 0, 0.3, 0.75],
+      [0.49, 0, 0.14, 0.75]
+    ],
     NO2: [
       [0, 0.89, 0, 0.75],
       [1, 1, 0, 0.75],
@@ -139,7 +148,7 @@
     [0.87, 0.92, 0.03, 0.75],
     [0.8, 0.67, 0.04, 0.75],
     [0.92, 0.28, 0.07, 0.75],
-    [0.6, 0.05, 0.05, 0.75]
+    [0.96, 0.05, 0.05, 0.75]
   ],
 
   getStandardRange: function (name) {
@@ -155,15 +164,14 @@
     //   }
     //   max = parseInt(key)
     // }
-    if (name == 'CO') {
-      min *= 1000;
-      max *= 1000;
-    }
 
     return [min, max];
   },
 
   getColor: function (name, type, data, min, max) {
+    if (!data) {
+      return [0, 0, 0, 0];
+    }
     if (type == this.S_TYPE) {
       return this.getStandardColor(name, data);
     } else {
@@ -172,26 +180,45 @@
   },
 
   /**
+   * 鑾峰彇褰撳墠棰滆壊涓婁竴涓瓑绾х殑棰滆壊
+   * @param {*} name
+   * @param {*} type
+   * @param {*} color
+   */
+  getPreviousColor(name, type, color) {
+    let colors;
+    if (type == this.S_TYPE) {
+      colors = this._legend_c[name];
+    } else {
+      colors = this._custom;
+    }
+    if (colors == undefined) {
+      colors = this._legend_c['PM25'];
+    }
+    let index = colors.indexOf(color);
+    index--;
+    if (index < 0) index = 0;
+    return colors[index];
+  },
+
+  /**
    * 鑾峰彇鐩戞祴鍥犲瓙褰撳墠娴撳害瀵瑰簲鐨勯鑹�
    * @param name 鐩戞祴鍥犲瓙鍚嶇О
    * @param data 鐩戞祴鍥犲瓙娴撳害
    */
   getStandardColor: function (name, data) {
-    var range = this._legend_r[name];
-    var colors = this._legend_c[name];
+    let range = this._legend_r[name];
+    let colors = this._legend_c[name];
     if (range == undefined) {
       range = this._legend_r['PM25'];
       colors = this._legend_c['PM25'];
     }
     // return colors[0]
 
-    var selected = undefined;
+    let selected = undefined;
     for (let i = 0; i < range.length; i++) {
       const d = range[i];
-      var d1 = d;
-      if (name == 'CO') {
-        d1 *= 1000;
-      }
+      let d1 = d;
       if (data >= d1) {
         selected = i;
       } else {
@@ -208,86 +235,87 @@
     return colors[selected];
   },
 
+  getStandardColorAndNext: function (name, data) {
+    if (!data) {
+      return {
+        color: [0, 0, 0, 0],
+        nextColor: [0, 0, 0, 0],
+        range: 0,
+        nextRange: 0
+      };
+    }
+    let range = this._legend_r[name];
+    let colors = this._legend_c[name];
+    if (range == undefined) {
+      range = this._legend_r['PM25'];
+      colors = this._legend_c['PM25'];
+    }
+
+    let selected = undefined;
+    for (let i = 0; i < range.length; i++) {
+      const d = range[i];
+      let d1 = d;
+      if (data >= d1) {
+        selected = i;
+      } else {
+        break;
+      }
+    }
+
+    // 閬垮厤涓嬫爣瓒婄晫
+    if (selected >= colors.length) {
+      selected = colors.length - 1;
+    }
+
+    let nextIndex = selected + 1;
+    if (nextIndex >= colors.length) {
+      nextIndex = colors.length - 1;
+    }
+
+    return {
+      color: colors[selected],
+      nextColor: colors[nextIndex],
+      range: range[selected],
+      nextRange: range[nextIndex]
+    };
+  },
+
   getCustomColor: function (data, min, max) {
     var per = (max - min) / this._custom.length;
-    var i = parseInt(data / per);
+    var i = parseInt((data - min) / per);
     if (i >= this._custom.length) {
       i = this._custom.length - 1;
     }
     return this._custom[i];
   },
 
-  /**
-   * 鑾峰彇鍒嗘瀽鍥句緥
-   */
-  refreshLegend: function (eId, name, animation, type, min, max) {
-    var legend = $('#' + eId);
-    legend.empty();
-
-    var r = this._legend_r[name];
-    var c = this._legend_c[name];
-    // 娌℃湁鎵惧埌鏍囧噯鍥句緥鐨勫洜瀛愶紝榛樿浣跨敤鑷畾涔夎寖鍥村浘渚�
-    if (r == undefined) {
-      type = this.C_TYPE;
-    }
-    var range = [];
-    if (type != this.S_TYPE && min != undefined && max != undefined) {
-      var count = this._custom.length;
-      var per = (max - min) / count;
-      for (let i = 0; i < count; i++) {
-        range.push([(min + per * i).toFixed(1), this._custom[i]]);
-      }
-    } else {
-      for (let i = 0; i < r.length; i++) {
-        range.push([r[i], c[i]]);
-      }
+  getCustomColorAndNext: function (data, min, max) {
+    if (!data) {
+      return {
+        color: [0, 0, 0, 0],
+        nextColor: [0, 0, 0, 0],
+        range: 0,
+        nextRange: 0
+      };
     }
 
-    for (let i = 0; i < range.length; i++) {
-      const r = range[i];
-      const nextR = range[i + 1];
-      var div1 = $('<div></div>');
-      div1.addClass('flexbox align-items margin-top');
-      var div2 = $('<div></div>');
-      div2.addClass('rectangle');
+    // 灏嗘暟鎹寜鐓ч鑹叉暟閲忓垎闅旓紝姹傚嚭姣忎竴娈电殑鏁版嵁鍋忕Щ閲�
+    var per = (max - min) / (this._custom.length - 1);
+    // 璁$畻褰撳墠鏁版嵁鎵�鍦ㄧ殑鍒嗘鑼冨洿
+    var i = parseInt((data - min) / per);
+    // 濡傛灉鏄渶澶у�硷紝鍚屾牱鍒嗗壊鍒版渶鍚庝竴娈�
+    if (i == this._custom.length - 1) i--;
+    var range = min + i * per;
 
-      var color = r[1];
-      var bgcolor =
-        'rgba(' +
-        color[0] * 255 +
-        ', ' +
-        color[1] * 255 +
-        ', ' +
-        color[2] * 255 +
-        ', ' +
-        color[3] +
-        ')';
-      div2.css('background-color', bgcolor);
-      var div3 = $('<div></div>');
-      var d;
-      if (nextR != undefined) {
-        d = r[0] + '&nbsp;~' + nextR[0] + '&nbsp;' + Util.factorUnit2[name];
-      } else {
-        d =
-          '&nbsp;&nbsp;&nbsp;&nbsp; > &nbsp;' +
-          r[0] +
-          ' &nbsp;' +
-          Util.factorUnit2[name];
-      }
-      div3.append(d);
-      div1.append(div2);
-      div1.append(div3);
-      legend.append(div1);
-    }
+    let nextIndex = i + 1;
+    let nextRange = min + nextIndex * per;
 
-    if (animation == false) {
-      return;
-    }
-    legend.hide('fast', function () {
-      setTimeout(() => {
-        legend.show('fast');
-      }, 500);
-    });
+    return {
+      color: this._custom[i],
+      nextColor: this._custom[nextIndex],
+      range,
+      nextRange
+    };
   }
 };
 

--
Gitblit v1.9.3