kd-lane-chart-v3 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -313,7 +313,7 @@ const _export_sfc = (sfc, props) => {
313
313
  }
314
314
  return target;
315
315
  };
316
- const _sfc_main$c = {
316
+ const _sfc_main$d = {
317
317
  name: "VueSimpleContextMenu",
318
318
  props: {
319
319
  options: {
@@ -414,16 +414,16 @@ const _sfc_main$c = {
414
414
  document.removeEventListener("keyup", this.onEscKeyRelease);
415
415
  }
416
416
  };
417
- const _hoisted_1$c = {
417
+ const _hoisted_1$d = {
418
418
  ref: "refUl",
419
419
  class: "vue-simple-context-menu"
420
420
  };
421
- const _hoisted_2$b = ["onClick"];
422
- const _hoisted_3$6 = ["innerHTML"];
423
- function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
421
+ const _hoisted_2$c = ["onClick"];
422
+ const _hoisted_3$7 = ["innerHTML"];
423
+ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
424
424
  const _directive_click_outside = resolveDirective("click-outside");
425
425
  return openBlock(), createElementBlock("div", null, [
426
- withDirectives((openBlock(), createElementBlock("ul", _hoisted_1$c, [
426
+ withDirectives((openBlock(), createElementBlock("ul", _hoisted_1$d, [
427
427
  (openBlock(true), createElementBlock(Fragment, null, renderList($props.options, (option, index2) => {
428
428
  return openBlock(), createElementBlock("li", {
429
429
  key: index2,
@@ -432,15 +432,15 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
432
432
  }, [
433
433
  createElementVNode("span", {
434
434
  innerHTML: option.name
435
- }, null, 8, _hoisted_3$6)
436
- ], 10, _hoisted_2$b);
435
+ }, null, 8, _hoisted_3$7)
436
+ ], 10, _hoisted_2$c);
437
437
  }), 128))
438
438
  ])), [
439
439
  [_directive_click_outside, $options.onClickOutside]
440
440
  ])
441
441
  ]);
442
442
  }
443
- const VueSimpleContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$c], ["__scopeId", "data-v-38ac9b6e"]]);
443
+ const VueSimpleContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$d], ["__scopeId", "data-v-38ac9b6e"]]);
444
444
  class CustomStrategy {
445
445
  constructor(strategy) {
446
446
  this.strategy = strategy;
@@ -1452,7 +1452,7 @@ class StrategyFactory {
1452
1452
  }
1453
1453
  }
1454
1454
  }
1455
- const _sfc_main$b = {
1455
+ const _sfc_main$c = {
1456
1456
  inject: ["upsertLane", "setTargetData", "setExpanded"],
1457
1457
  props: {
1458
1458
  laneInfo: {
@@ -1521,16 +1521,16 @@ const _sfc_main$b = {
1521
1521
  }
1522
1522
  }
1523
1523
  };
1524
- const _hoisted_1$b = { class: "kd-lane-lane-content" };
1525
- const _hoisted_2$a = { class: "template-buttons" };
1526
- function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
1524
+ const _hoisted_1$c = { class: "kd-lane-lane-content" };
1525
+ const _hoisted_2$b = { class: "template-buttons" };
1526
+ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
1527
1527
  const _component_el_input = resolveComponent("el-input");
1528
1528
  const _component_el_form_item = resolveComponent("el-form-item");
1529
1529
  const _component_el_radio = resolveComponent("el-radio");
1530
1530
  const _component_el_radio_group = resolveComponent("el-radio-group");
1531
1531
  const _component_el_form = resolveComponent("el-form");
1532
1532
  const _component_el_button = resolveComponent("el-button");
1533
- return openBlock(), createElementBlock("div", _hoisted_1$b, [
1533
+ return openBlock(), createElementBlock("div", _hoisted_1$c, [
1534
1534
  createVNode(_component_el_form, {
1535
1535
  rules: $data.rules,
1536
1536
  ref: "template",
@@ -1551,7 +1551,7 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
1551
1551
  ]),
1552
1552
  _: 1
1553
1553
  }),
1554
- $data.formData.createUser !== "SYSTEM_USER" ? (openBlock(), createBlock(_component_el_form_item, {
1554
+ $data.formData.createUser !== "SYSTEM_USER" && false ? (openBlock(), createBlock(_component_el_form_item, {
1555
1555
  key: 0,
1556
1556
  label: "对数轴",
1557
1557
  prop: "isLogScale"
@@ -1585,7 +1585,7 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
1585
1585
  ]),
1586
1586
  _: 1
1587
1587
  }, 8, ["rules", "model"]),
1588
- createElementVNode("div", _hoisted_2$a, [
1588
+ createElementVNode("div", _hoisted_2$b, [
1589
1589
  createVNode(_component_el_button, { onClick: $options.editable }, {
1590
1590
  default: withCtx(() => [..._cache[5] || (_cache[5] = [
1591
1591
  createTextVNode("编辑", -1)
@@ -1606,8 +1606,8 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
1606
1606
  ])
1607
1607
  ]);
1608
1608
  }
1609
- const LaneEdit = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b], ["__scopeId", "data-v-d0c7f367"]]);
1610
- const _sfc_main$a = {
1609
+ const LaneEdit = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$c], ["__scopeId", "data-v-76a63d70"]]);
1610
+ const _sfc_main$b = {
1611
1611
  inject: ["upsertLine", "setTargetData", "setExpanded", "getThemeName"],
1612
1612
  props: {
1613
1613
  template: {
@@ -1630,6 +1630,13 @@ const _sfc_main$a = {
1630
1630
  callback();
1631
1631
  }
1632
1632
  };
1633
+ const sizeLimit = (rule, value, callback) => {
1634
+ if (value < 1 || value > 4) {
1635
+ callback(new Error("数字必须在1-4之间"));
1636
+ } else {
1637
+ callback();
1638
+ }
1639
+ };
1633
1640
  return {
1634
1641
  formData: Object.assign({}, this.template),
1635
1642
  lines: [
@@ -1673,7 +1680,11 @@ const _sfc_main$a = {
1673
1680
  { required: true, message: "请输入最大值", trigger: "blur" },
1674
1681
  { validator: validatorNumber, trigger: "blur" }
1675
1682
  ],
1676
- lineSize: [{ required: true, message: "请选择曲线粗细", trigger: "blur" }],
1683
+ lineSize: [
1684
+ { required: true, message: "请输入曲线粗细", trigger: "blur" },
1685
+ { validator: validatorNumber, trigger: "blur" },
1686
+ { validator: sizeLimit, message: "曲线粗细必须在1-4之间", trigger: "blur" }
1687
+ ],
1677
1688
  lineColor: [{ required: true, message: "请选择曲线颜色", trigger: "blur" }],
1678
1689
  lineType: [{ required: true, message: "请选择线型", trigger: "blur" }],
1679
1690
  paramId: [{ required: true, message: "请选择参数名称", trigger: "blur" }]
@@ -1742,9 +1753,9 @@ const _sfc_main$a = {
1742
1753
  }
1743
1754
  }
1744
1755
  };
1745
- const _hoisted_1$a = { class: "kd-lane-line-content" };
1746
- const _hoisted_2$9 = { class: "template-buttons" };
1747
- function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
1756
+ const _hoisted_1$b = { class: "kd-lane-line-content" };
1757
+ const _hoisted_2$a = { class: "template-buttons" };
1758
+ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
1748
1759
  const _component_el_option = resolveComponent("el-option");
1749
1760
  const _component_el_select = resolveComponent("el-select");
1750
1761
  const _component_el_form_item = resolveComponent("el-form-item");
@@ -1754,7 +1765,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
1754
1765
  resolveComponent("el-radio-group");
1755
1766
  const _component_el_form = resolveComponent("el-form");
1756
1767
  const _component_el_button = resolveComponent("el-button");
1757
- return openBlock(), createElementBlock("div", _hoisted_1$a, [
1768
+ return openBlock(), createElementBlock("div", _hoisted_1$b, [
1758
1769
  createVNode(_component_el_form, {
1759
1770
  rules: $data.rules,
1760
1771
  ref: "template",
@@ -1825,8 +1836,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
1825
1836
  modelValue: $data.formData.lineSize,
1826
1837
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.formData.lineSize = $event),
1827
1838
  max: 4,
1828
- min: 1,
1829
- type: "number"
1839
+ min: 1
1830
1840
  }, null, 8, ["modelValue"])
1831
1841
  ]),
1832
1842
  _: 1
@@ -1857,7 +1867,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
1857
1867
  modelValue: $data.formData.lineType,
1858
1868
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $data.formData.lineType = $event),
1859
1869
  placeholder: "请选择",
1860
- disabled: $data.formData.isGradient || $props.formDisable,
1870
+ disabled: $data.formData.isGradient || $props.formDisable || Object.prototype.hasOwnProperty.call($data.formData, "recommendParamId"),
1861
1871
  "popper-class": "kd-curve-2d-select-popup"
1862
1872
  }, {
1863
1873
  default: withCtx(() => [
@@ -1892,7 +1902,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
1892
1902
  ]),
1893
1903
  _: 1
1894
1904
  }, 8, ["rules", "model", "disabled"]),
1895
- withDirectives(createElementVNode("div", _hoisted_2$9, [
1905
+ withDirectives(createElementVNode("div", _hoisted_2$a, [
1896
1906
  createVNode(_component_el_button, { onClick: $options.editable }, {
1897
1907
  default: withCtx(() => [..._cache[11] || (_cache[11] = [
1898
1908
  createTextVNode("编辑", -1)
@@ -1914,8 +1924,8 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
1914
1924
  ])
1915
1925
  ]);
1916
1926
  }
1917
- const LineEdit = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a], ["__scopeId", "data-v-36fe0bb1"]]);
1918
- const _sfc_main$9 = {
1927
+ const LineEdit = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b], ["__scopeId", "data-v-0940f09d"]]);
1928
+ const _sfc_main$a = {
1919
1929
  inject: ["upsertTemplate", "setTargetData", "setExpanded"],
1920
1930
  props: {
1921
1931
  currentTemplate: {
@@ -2003,9 +2013,9 @@ const _sfc_main$9 = {
2003
2013
  }
2004
2014
  }
2005
2015
  };
2006
- const _hoisted_1$9 = { class: "kd-lane-template-content" };
2007
- const _hoisted_2$8 = { class: "template-buttons" };
2008
- function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
2016
+ const _hoisted_1$a = { class: "kd-lane-template-content" };
2017
+ const _hoisted_2$9 = { class: "template-buttons" };
2018
+ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
2009
2019
  const _component_el_input = resolveComponent("el-input");
2010
2020
  const _component_el_form_item = resolveComponent("el-form-item");
2011
2021
  const _component_el_radio = resolveComponent("el-radio");
@@ -2014,7 +2024,7 @@ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
2014
2024
  const _component_el_select = resolveComponent("el-select");
2015
2025
  const _component_el_form = resolveComponent("el-form");
2016
2026
  const _component_el_button = resolveComponent("el-button");
2017
- return openBlock(), createElementBlock("div", _hoisted_1$9, [
2027
+ return openBlock(), createElementBlock("div", _hoisted_1$a, [
2018
2028
  createVNode(_component_el_form, {
2019
2029
  rules: $data.rules,
2020
2030
  ref: "template",
@@ -2153,7 +2163,7 @@ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
2153
2163
  ]),
2154
2164
  _: 1
2155
2165
  }, 8, ["rules", "model"]),
2156
- createElementVNode("div", _hoisted_2$8, [
2166
+ createElementVNode("div", _hoisted_2$9, [
2157
2167
  createVNode(_component_el_button, { onClick: $options.editable }, {
2158
2168
  default: withCtx(() => [..._cache[8] || (_cache[8] = [
2159
2169
  createTextVNode("编辑", -1)
@@ -2174,8 +2184,8 @@ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
2174
2184
  ])
2175
2185
  ]);
2176
2186
  }
2177
- const TemplateEdit = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9], ["__scopeId", "data-v-fc0a04c9"]]);
2178
- const _sfc_main$8 = {
2187
+ const TemplateEdit = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a], ["__scopeId", "data-v-fc0a04c9"]]);
2188
+ const _sfc_main$9 = {
2179
2189
  inject: ["delTemplate", "delLane", "delLine"],
2180
2190
  provide() {
2181
2191
  return {
@@ -2521,11 +2531,11 @@ const _sfc_main$8 = {
2521
2531
  }
2522
2532
  }
2523
2533
  };
2524
- const _hoisted_1$8 = ["onContextmenu"];
2525
- const _hoisted_2$7 = ["onMouseover", "onMouseleave"];
2526
- const _hoisted_3$5 = { style: { "padding-left": "5px" } };
2527
- const _hoisted_4$5 = { class: "rtd-config-side-option" };
2528
- function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
2534
+ const _hoisted_1$9 = ["onContextmenu"];
2535
+ const _hoisted_2$8 = ["onMouseover", "onMouseleave"];
2536
+ const _hoisted_3$6 = { style: { "padding-left": "5px" } };
2537
+ const _hoisted_4$6 = { class: "rtd-config-side-option" };
2538
+ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
2529
2539
  const _component_el_tooltip = resolveComponent("el-tooltip");
2530
2540
  const _component_Star = resolveComponent("Star");
2531
2541
  const _component_el_icon = resolveComponent("el-icon");
@@ -2579,11 +2589,11 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
2579
2589
  class: "tree-node-label",
2580
2590
  onMouseover: ($event) => $options.handleMouseEnter($event, node.id),
2581
2591
  onMouseleave: ($event) => $options.handleMouseLeave($event, node.id)
2582
- }, toDisplayString(node.label), 41, _hoisted_2$7)
2592
+ }, toDisplayString(node.label), 41, _hoisted_2$8)
2583
2593
  ]),
2584
2594
  _: 2
2585
2595
  }, 1032, ["content", "visible"]),
2586
- withDirectives(createElementVNode("span", _hoisted_3$5, [
2596
+ withDirectives(createElementVNode("span", _hoisted_3$6, [
2587
2597
  createVNode(_component_el_icon, null, {
2588
2598
  default: withCtx(() => [
2589
2599
  createVNode(_component_Star)
@@ -2593,11 +2603,11 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
2593
2603
  ], 512), [
2594
2604
  [vShow, data.isPublic == "1"]
2595
2605
  ])
2596
- ], 40, _hoisted_1$8)
2606
+ ], 40, _hoisted_1$9)
2597
2607
  ]),
2598
2608
  _: 1
2599
2609
  }, 8, ["data", "current-node-key", "default-expanded-keys", "onNodeClick", "onNodeExpand", "onNodeCollapse"])),
2600
- createElementVNode("div", _hoisted_4$5, [
2610
+ createElementVNode("div", _hoisted_4$6, [
2601
2611
  createVNode(_component_el_button, { onClick: $options.addTemplate }, {
2602
2612
  default: withCtx(() => [..._cache[0] || (_cache[0] = [
2603
2613
  createTextVNode("新增模板", -1)
@@ -2649,12 +2659,12 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
2649
2659
  [_directive_loading, $data.curveConfigLoading]
2650
2660
  ]);
2651
2661
  }
2652
- const RealTimeCurveConfig = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8], ["__scopeId", "data-v-1fb6ec88"]]);
2662
+ const RealTimeCurveConfig = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9], ["__scopeId", "data-v-1fb6ec88"]]);
2653
2663
  const ACTION_TYPE = {
2654
2664
  UPSERT_LINE: "upsertLine",
2655
2665
  DELETE_LINE: "delLine"
2656
2666
  };
2657
- const _sfc_main$7 = {
2667
+ const _sfc_main$8 = {
2658
2668
  name: "HeaderItem",
2659
2669
  props: {
2660
2670
  lineRange: {
@@ -2812,29 +2822,30 @@ const _sfc_main$7 = {
2812
2822
  },
2813
2823
  watch: {}
2814
2824
  };
2815
- const _hoisted_1$7 = { class: "kd-lane-chart-container-text-container" };
2816
- const _hoisted_2$6 = { class: "left" };
2817
- const _hoisted_3$4 = { class: "center" };
2818
- const _hoisted_4$4 = { class: "right" };
2819
- function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
2825
+ const _hoisted_1$8 = { class: "kd-lane-chart-container-text-container" };
2826
+ const _hoisted_2$7 = { class: "left" };
2827
+ const _hoisted_3$5 = { class: "center" };
2828
+ const _hoisted_4$5 = { class: "right" };
2829
+ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
2820
2830
  return openBlock(), createElementBlock("div", {
2821
2831
  class: normalizeClass(["kd-lane-chart-container-header-item", { "kd-lane-chart-container-header-item_warning": $options.isShowWarning() }]),
2822
2832
  style: normalizeStyle($options.headerItemStyle),
2823
2833
  onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleIsUsed && $options.toggleIsUsed(...args))
2824
2834
  }, [
2825
- createElementVNode("div", _hoisted_1$7, [
2826
- createElementVNode("span", _hoisted_2$6, toDisplayString($props.line.min || ($props.lineRange[$props.line.lineId] && $props.lineRange[$props.line.lineId].min || 0)), 1),
2827
- createElementVNode("div", _hoisted_3$4, [
2835
+ createElementVNode("div", _hoisted_1$8, [
2836
+ createElementVNode("span", _hoisted_2$7, toDisplayString($props.line.min || ($props.lineRange[$props.line.lineId] && $props.lineRange[$props.line.lineId].min || 0)), 1),
2837
+ createElementVNode("div", _hoisted_3$5, [
2828
2838
  createElementVNode("div", {
2829
2839
  class: "paramsTitle",
2830
2840
  style: normalizeStyle($options.getFontSize("label"))
2831
2841
  }, toDisplayString($options.getParamName($props.line)), 5),
2832
- createElementVNode("div", {
2842
+ $props.formCache.displayType == "header" ? (openBlock(), createElementBlock("div", {
2843
+ key: 0,
2833
2844
  class: "paramsData",
2834
2845
  style: normalizeStyle($options.getFontSize("data"))
2835
- }, toDisplayString($options.getCurrentData()), 5)
2846
+ }, toDisplayString($options.getCurrentData()), 5)) : createCommentVNode("", true)
2836
2847
  ]),
2837
- createElementVNode("span", _hoisted_4$4, toDisplayString($props.line.max || ($props.lineRange[$props.line.lineId] && $props.lineRange[$props.line.lineId].max || 0)), 1),
2848
+ createElementVNode("span", _hoisted_4$5, toDisplayString($props.line.max || ($props.lineRange[$props.line.lineId] && $props.lineRange[$props.line.lineId].max || 0)), 1),
2838
2849
  createElementVNode("div", {
2839
2850
  class: "gradient-display",
2840
2851
  style: normalizeStyle($options.gradientDisplay)
@@ -2842,7 +2853,167 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
2842
2853
  ])
2843
2854
  ], 6);
2844
2855
  }
2845
- const HeaderItem = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__scopeId", "data-v-0200e1cd"]]);
2856
+ const HeaderItem = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8], ["__scopeId", "data-v-1ae34b14"]]);
2857
+ const _sfc_main$7 = {
2858
+ name: "LegendItem",
2859
+ props: {
2860
+ lineRange: {
2861
+ type: Object,
2862
+ default: () => ({})
2863
+ },
2864
+ itemHeight: {
2865
+ type: Number,
2866
+ default: 20
2867
+ },
2868
+ isKdCurveV2: {
2869
+ type: Boolean,
2870
+ default: false
2871
+ },
2872
+ currentHeaderStyle: {
2873
+ type: Object,
2874
+ default: () => ({
2875
+ headerPadding: 4,
2876
+ headerItemHeight: 42,
2877
+ itemGap: 4
2878
+ })
2879
+ },
2880
+ line: {
2881
+ type: Object,
2882
+ default: () => ({})
2883
+ },
2884
+ paramsNameMap: {
2885
+ type: Object,
2886
+ default: () => ({}),
2887
+ required: true
2888
+ },
2889
+ themeName: {
2890
+ type: String,
2891
+ default: void 0
2892
+ },
2893
+ visibleData: {
2894
+ type: Array,
2895
+ default: () => []
2896
+ },
2897
+ formCache: {
2898
+ type: Object,
2899
+ default: () => ({})
2900
+ },
2901
+ headerData: {
2902
+ type: Object,
2903
+ default: () => ({})
2904
+ }
2905
+ },
2906
+ methods: {
2907
+ getParamName() {
2908
+ const nameConfig = this.paramsNameMap[this.line.paramId];
2909
+ if (!nameConfig) {
2910
+ return "";
2911
+ }
2912
+ return `${nameConfig.paramName}${nameConfig.paramUnit ? `(${nameConfig.paramUnit})` : ""}`;
2913
+ },
2914
+ getCurrentData(paramId) {
2915
+ if (this.formCache.displayType == "float") {
2916
+ return "";
2917
+ }
2918
+ if (!Object.prototype.hasOwnProperty.call(this.headerData, paramId)) {
2919
+ return "--";
2920
+ }
2921
+ return this.headerData[paramId] !== null && this.headerData[paramId] !== void 0 && this.headerData[paramId] !== "" ? typeof +this.headerData[paramId] === "number" ? Number(Number(this.headerData[paramId]).toFixed(2)) : this.headerData[paramId] : "--";
2922
+ },
2923
+ toggleLegend(label) {
2924
+ const temp = { ...this.line };
2925
+ if (label === "实际值") {
2926
+ temp.isUsed = temp.isUsed == "1" || temp.isUsed == 1 ? "0" : "1";
2927
+ } else if (label === "推荐值") {
2928
+ temp.recommendIsUsed = temp.recommendIsUsed == "1" || temp.recommendIsUsed == 1 ? "0" : "1";
2929
+ }
2930
+ this.$emit("updateLine", temp);
2931
+ }
2932
+ },
2933
+ computed: {
2934
+ legendList() {
2935
+ let lineColor;
2936
+ if (this.themeName && this.line.themeConfig) {
2937
+ lineColor = this.line.themeConfig[this.themeName] && this.line.themeConfig[this.themeName].lineColor;
2938
+ }
2939
+ const color = lineColor || this.line.lineColor;
2940
+ return [
2941
+ { label: "实际值", color, lineType: "solid", isUsed: this.line.isUsed == "1" || this.line.isUsed == 1, data: this.getCurrentData(this.line.paramId) },
2942
+ { label: "推荐值", color, lineType: "dashed", isUsed: this.line.recommendIsUsed == "1" || this.line.recommendIsUsed == 1, data: this.getCurrentData(this.line.recommendParamId) }
2943
+ ];
2944
+ },
2945
+ legendItemStyle() {
2946
+ if (this.themeName && this.line.themeConfig) {
2947
+ this.line.themeConfig[this.themeName] && this.line.themeConfig[this.themeName].lineColor;
2948
+ }
2949
+ let backgroundColor = {};
2950
+ let headerHeight = {};
2951
+ if (!this.isKdCurveV2) {
2952
+ backgroundColor = {
2953
+ background: `transparent !important`
2954
+ };
2955
+ headerHeight = {
2956
+ height: `${this.itemHeight}px`
2957
+ };
2958
+ } else {
2959
+ headerHeight = {
2960
+ height: `${this.formCache.displayType == "header" ? this.currentHeaderStyle.headerItemHeight : this.currentHeaderStyle.headerItemHeight * 0.8}px`
2961
+ };
2962
+ }
2963
+ return {
2964
+ ...headerHeight,
2965
+ // opacity: this.line.isUsed == "1" ? 1 : 0.5,
2966
+ ...backgroundColor
2967
+ };
2968
+ }
2969
+ }
2970
+ };
2971
+ const _hoisted_1$7 = { class: "legend-label" };
2972
+ const _hoisted_2$6 = { class: "legend-content" };
2973
+ const _hoisted_3$4 = { class: "scale-left" };
2974
+ const _hoisted_4$4 = ["onClick"];
2975
+ const _hoisted_5$3 = { class: "legend-line-item-top" };
2976
+ const _hoisted_6$3 = { class: "legend-text" };
2977
+ const _hoisted_7$3 = {
2978
+ key: 0,
2979
+ class: "legend-data"
2980
+ };
2981
+ const _hoisted_8$2 = { class: "scale-right" };
2982
+ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
2983
+ return openBlock(), createElementBlock("div", {
2984
+ class: "kd-lane-chart-container-legend-item",
2985
+ style: normalizeStyle($options.legendItemStyle)
2986
+ }, [
2987
+ createElementVNode("div", _hoisted_1$7, toDisplayString($options.getParamName()), 1),
2988
+ createElementVNode("div", _hoisted_2$6, [
2989
+ createElementVNode("div", _hoisted_3$4, toDisplayString($props.line.min || 0), 1),
2990
+ createElementVNode("div", {
2991
+ class: "legend-lines",
2992
+ style: normalizeStyle({ flexDirection: $props.formCache.displayType == "header" ? "column" : "row" })
2993
+ }, [
2994
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.legendList, (legend, index2) => {
2995
+ return openBlock(), createElementBlock("div", {
2996
+ class: "legend-line-item",
2997
+ key: index2,
2998
+ onClick: ($event) => $options.toggleLegend(legend.label),
2999
+ style: normalizeStyle({ opacity: legend.isUsed ? 1 : 0.5 })
3000
+ }, [
3001
+ createElementVNode("div", _hoisted_5$3, [
3002
+ createElementVNode("div", {
3003
+ class: normalizeClass(["legend-color", legend.lineType]),
3004
+ style: normalizeStyle({ borderBottom: `2px ${legend.lineType} ${legend.color}` })
3005
+ }, null, 6),
3006
+ createElementVNode("div", _hoisted_6$3, toDisplayString(legend.label), 1)
3007
+ ]),
3008
+ $props.formCache.displayType == "header" ? (openBlock(), createElementBlock("div", _hoisted_7$3, toDisplayString(legend.data), 1)) : createCommentVNode("", true)
3009
+ ], 12, _hoisted_4$4);
3010
+ }), 128))
3011
+ ], 4),
3012
+ createElementVNode("div", _hoisted_8$2, toDisplayString($props.line.max || 20), 1)
3013
+ ])
3014
+ ], 4);
3015
+ }
3016
+ const LegendItem = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__scopeId", "data-v-efba8aa1"]]);
2846
3017
  const _sfc_main$6 = {
2847
3018
  name: "KdLaneContainer",
2848
3019
  provide() {
@@ -2860,6 +3031,7 @@ const _sfc_main$6 = {
2860
3031
  },
2861
3032
  components: {
2862
3033
  HeaderItem,
3034
+ LegendItem,
2863
3035
  RealTimeCurveConfig,
2864
3036
  VueSimpleContextMenu,
2865
3037
  VueDraggable
@@ -3085,14 +3257,12 @@ const _sfc_main$6 = {
3085
3257
  const id = String(lane.laneId);
3086
3258
  const newWidth = headerEl.clientWidth;
3087
3259
  const oldWidth = this.laneWidthOverrides[id];
3088
- console.log(id, oldWidth, newWidth);
3089
3260
  if (oldWidth !== newWidth) {
3090
3261
  this.setLaneWidthOverride(lane.laneId, newWidth);
3091
3262
  hasChanged = true;
3092
3263
  }
3093
3264
  }
3094
3265
  });
3095
- console.log(this.laneWidthOverrides, hasChanged);
3096
3266
  if (hasChanged) {
3097
3267
  this.$emit("lane-width-change", this.laneWidthOverrides);
3098
3268
  }
@@ -3840,10 +4010,12 @@ const _hoisted_9$1 = { class: "custom-dialog__body RealTimeCurveConfig_area" };
3840
4010
  const _hoisted_10$1 = { class: "custom-dialog__footer" };
3841
4011
  function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3842
4012
  const _component_HeaderItem = resolveComponent("HeaderItem");
4013
+ const _component_LegendItem = resolveComponent("LegendItem");
3843
4014
  const _component_VueDraggable = resolveComponent("VueDraggable");
3844
4015
  const _component_VueSimpleContextMenu = resolveComponent("VueSimpleContextMenu");
3845
4016
  const _component_RealTimeCurveConfig = resolveComponent("RealTimeCurveConfig");
3846
4017
  const _component_el_button = resolveComponent("el-button");
4018
+ const _component_el_dialog = resolveComponent("el-dialog");
3847
4019
  return openBlock(), createElementBlock("div", {
3848
4020
  class: "kd-lane-chart-container",
3849
4021
  onContextmenu: _cache[4] || (_cache[4] = (...args) => $options.onParentContextMenu && $options.onParentContextMenu(...args)),
@@ -3897,7 +4069,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3897
4069
  ])) : createCommentVNode("", true)
3898
4070
  ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
3899
4071
  createElementVNode("div", {
3900
- class: normalizeClass(["kd-lane-chart-lane-header", { "border-bottom": !$props.isKdCurveV2 }]),
4072
+ class: normalizeClass(["kd-lane-chart-lane-header", { "border-bottom": !$props.isKdCurveV2, "kd-lane-chart-lane-header-isKdCurveV2": $props.isKdCurveV2 }]),
3901
4073
  style: normalizeStyle($options.headerStyle),
3902
4074
  onContextmenu: withModifiers(($event) => $options.showContextMenu($event, lane), ["prevent"])
3903
4075
  }, [
@@ -3916,14 +4088,25 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3916
4088
  }, {
3917
4089
  default: withCtx(() => [
3918
4090
  (openBlock(true), createElementBlock(Fragment, null, renderList(lane.lines || [], (line) => {
3919
- return openBlock(), createBlock(_component_HeaderItem, mergeProps({
3920
- key: line.lineId,
3921
- line,
3922
- paramsNameMap: $options.paramsNameMap
3923
- }, { ref_for: true }, _ctx.$props, {
3924
- onContextmenu: withModifiers(($event) => $options.showContextMenu($event, line), ["prevent"]),
3925
- onUpdateLine: $options.upsertLine
3926
- }), null, 16, ["line", "paramsNameMap", "onContextmenu", "onUpdateLine"]);
4091
+ return openBlock(), createElementBlock("div", {
4092
+ key: line.lineId
4093
+ }, [
4094
+ !line.hasOwnProperty("recommendParamId") ? (openBlock(), createBlock(_component_HeaderItem, mergeProps({
4095
+ key: 0,
4096
+ line,
4097
+ paramsNameMap: $options.paramsNameMap
4098
+ }, { ref_for: true }, _ctx.$props, {
4099
+ onContextmenu: withModifiers(($event) => $options.showContextMenu($event, line), ["prevent"]),
4100
+ onUpdateLine: $options.upsertLine
4101
+ }), null, 16, ["line", "paramsNameMap", "onContextmenu", "onUpdateLine"])) : (openBlock(), createBlock(_component_LegendItem, mergeProps({
4102
+ key: 1,
4103
+ line,
4104
+ paramsNameMap: $options.paramsNameMap
4105
+ }, { ref_for: true }, _ctx.$props, {
4106
+ onContextmenu: withModifiers(($event) => $options.showContextMenu($event, line), ["prevent"]),
4107
+ onUpdateLine: $options.upsertLine
4108
+ }), null, 16, ["line", "paramsNameMap", "onContextmenu", "onUpdateLine"]))
4109
+ ]);
3927
4110
  }), 128))
3928
4111
  ]),
3929
4112
  _: 2
@@ -3944,10 +4127,10 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3944
4127
  _: 3
3945
4128
  }, 8, ["onStart", "onEnd", "modelValue"])) : (openBlock(), createElementBlock("div", _hoisted_7$2, [
3946
4129
  createElementVNode("div", {
3947
- class: "kd-lane-chart-lane-header",
4130
+ class: normalizeClass(["kd-lane-chart-lane-header", { "kd-lane-chart-lane-header-isKdCurveV2": $props.isKdCurveV2 }]),
3948
4131
  style: normalizeStyle($options.headerStyle),
3949
4132
  onContextmenu: _cache[1] || (_cache[1] = withModifiers((...args) => $options.showContextMenu && $options.showContextMenu(...args), ["prevent"]))
3950
- }, null, 36)
4133
+ }, null, 38)
3951
4134
  ], 512)),
3952
4135
  !$props.isKdCurveV2 ? (openBlock(), createElementBlock("div", {
3953
4136
  key: 2,
@@ -3961,34 +4144,31 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
3961
4144
  ref: "vueSimpleContextMenu",
3962
4145
  onOptionClicked: $options.optionClicked
3963
4146
  }, null, 8, ["options", "onOptionClicked"]),
3964
- $data.curveConfigVisible || $data.curveConfigClosing ? (openBlock(), createElementBlock("div", {
3965
- key: 3,
3966
- class: normalizeClass(["custom-dialog-mask", { closing: $data.curveConfigClosing }]),
3967
- onClick: _cache[3] || (_cache[3] = withModifiers((...args) => $options.closeCurveConfigDialog && $options.closeCurveConfigDialog(...args), ["self"]))
3968
- }, [
3969
- createElementVNode("div", {
3970
- class: normalizeClass(["custom-dialog function-control-panel-dialog", { closing: $data.curveConfigClosing }]),
3971
- ref: "containerRef"
3972
- }, [
4147
+ createVNode(_component_el_dialog, {
4148
+ width: "45%",
4149
+ modelValue: $data.curveConfigVisible,
4150
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.curveConfigVisible = $event),
4151
+ "append-to-body": true,
4152
+ "header-class": "kd-lane-chart-v3-custom-dialog__header",
4153
+ "body-class": "kd-lane-chart-v3-custom-dialog__body",
4154
+ "footer-class": "kd-lane-chart-v3-custom-dialog__footer",
4155
+ class: "kd-lane-chart-v3-custom-dialog",
4156
+ "close-on-click-modal": false,
4157
+ "close-on-press-escape": false,
4158
+ "show-close": false,
4159
+ onClose: $options.closeCurveConfigDialog,
4160
+ "align-center": ""
4161
+ }, {
4162
+ header: withCtx(() => [
3973
4163
  createElementVNode("div", _hoisted_8$1, [
3974
4164
  _cache[5] || (_cache[5] = createElementVNode("span", { class: "custom-dialog__title" }, "泳道模板设置", -1)),
3975
4165
  createElementVNode("button", {
3976
4166
  class: "custom-dialog__close",
3977
4167
  onClick: _cache[2] || (_cache[2] = (...args) => $options.closeCurveConfigDialog && $options.closeCurveConfigDialog(...args))
3978
4168
  }, "×")
3979
- ]),
3980
- createElementVNode("div", _hoisted_9$1, [
3981
- createVNode(_component_RealTimeCurveConfig, mergeProps({
3982
- ref: "curveConfig",
3983
- inputTempates: $data.treeTemplates,
3984
- caseId: $data.strategy.caseId,
3985
- params: $data.params,
3986
- paramsNameMap: $options.paramsNameMap
3987
- }, _ctx.$attrs, {
3988
- contextItem: $data.contextItem,
3989
- positionInfo: $data.positionInfo
3990
- }), null, 16, ["inputTempates", "caseId", "params", "paramsNameMap", "contextItem", "positionInfo"])
3991
- ]),
4169
+ ])
4170
+ ]),
4171
+ footer: withCtx(() => [
3992
4172
  createElementVNode("div", _hoisted_10$1, [
3993
4173
  createVNode(_component_el_button, { onClick: $options.closeCurveConfigDialog }, {
3994
4174
  default: withCtx(() => [..._cache[6] || (_cache[6] = [
@@ -4006,11 +4186,26 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
4006
4186
  _: 1
4007
4187
  }, 8, ["onClick"])
4008
4188
  ])
4009
- ], 2)
4010
- ], 2)) : createCommentVNode("", true)
4189
+ ]),
4190
+ default: withCtx(() => [
4191
+ createElementVNode("div", _hoisted_9$1, [
4192
+ createVNode(_component_RealTimeCurveConfig, mergeProps({
4193
+ ref: "curveConfig",
4194
+ inputTempates: $data.treeTemplates,
4195
+ caseId: $data.strategy.caseId,
4196
+ params: $data.params,
4197
+ paramsNameMap: $options.paramsNameMap
4198
+ }, _ctx.$attrs, {
4199
+ contextItem: $data.contextItem,
4200
+ positionInfo: $data.positionInfo
4201
+ }), null, 16, ["inputTempates", "caseId", "params", "paramsNameMap", "contextItem", "positionInfo"])
4202
+ ])
4203
+ ]),
4204
+ _: 1
4205
+ }, 8, ["modelValue", "onClose"])
4011
4206
  ], 544);
4012
4207
  }
4013
- const KdLaneContainerComponent = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-192e257e"]]);
4208
+ const KdLaneContainerComponent = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-7b18e475"]]);
4014
4209
  const SLIDER_GROUP_ID = "depthSliderGroup";
4015
4210
  function pad2(n) {
4016
4211
  return n < 10 ? "0" + n : "" + n;
@@ -5424,7 +5619,6 @@ const _sfc_main$4 = {
5424
5619
  }
5425
5620
  },
5426
5621
  handleClickExport(data) {
5427
- this.exportName = data.name;
5428
5622
  if (this.$refs.ExportTimeFormRef) {
5429
5623
  this.$refs.ExportTimeFormRef.clearValidate();
5430
5624
  }
@@ -5745,6 +5939,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
5745
5939
  const _component_el_form_item = resolveComponent("el-form-item");
5746
5940
  const _component_el_form = resolveComponent("el-form");
5747
5941
  const _component_el_button = resolveComponent("el-button");
5942
+ const _component_el_dialog = resolveComponent("el-dialog");
5748
5943
  const _component_InputNumber = resolveComponent("InputNumber");
5749
5944
  const _component_TabPane = resolveComponent("TabPane");
5750
5945
  const _component_Tabs = resolveComponent("Tabs");
@@ -6050,22 +6245,50 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6050
6245
  _cache[42] || (_cache[42] = createElementVNode("span", null, "导出", -1))
6051
6246
  ])) : createCommentVNode("", true)
6052
6247
  ]),
6053
- $data.timeDialogVisible || $data.timeDialogClosing ? (openBlock(), createElementBlock("div", {
6054
- key: 13,
6055
- class: normalizeClass(["custom-dialog-mask", { closing: $data.timeDialogClosing }]),
6056
- onClick: _cache[21] || (_cache[21] = withModifiers((...args) => $options.closeTimeDialog && $options.closeTimeDialog(...args), ["self"]))
6057
- }, [
6058
- createElementVNode("div", {
6059
- class: normalizeClass(["custom-dialog", { closing: $data.timeDialogClosing }]),
6060
- style: { "width": "420px" }
6061
- }, [
6248
+ createVNode(_component_el_dialog, {
6249
+ modelValue: $data.timeDialogVisible,
6250
+ "onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => $data.timeDialogVisible = $event),
6251
+ "close-on-click-modal": false,
6252
+ "close-on-press-escape": false,
6253
+ "show-close": false,
6254
+ width: "300px",
6255
+ onClose: $options.closeTimeDialog,
6256
+ "append-to-body": true,
6257
+ "header-class": "kd-lane-chart-v3-custom-dialog__header",
6258
+ "body-class": "kd-lane-chart-v3-custom-dialog__body",
6259
+ "footer-class": "kd-lane-chart-v3-custom-dialog__footer",
6260
+ class: "kd-lane-chart-v3-custom-dialog",
6261
+ "align-center": ""
6262
+ }, {
6263
+ header: withCtx(() => [
6062
6264
  createElementVNode("div", _hoisted_20, [
6063
6265
  _cache[43] || (_cache[43] = createElementVNode("span", { class: "custom-dialog__title" }, "设置时间段", -1)),
6064
6266
  createElementVNode("button", {
6065
6267
  class: "custom-dialog__close",
6066
6268
  onClick: _cache[19] || (_cache[19] = (...args) => $options.closeTimeDialog && $options.closeTimeDialog(...args))
6067
6269
  }, "×")
6068
- ]),
6270
+ ])
6271
+ ]),
6272
+ footer: withCtx(() => [
6273
+ createElementVNode("div", _hoisted_24, [
6274
+ createVNode(_component_el_button, { onClick: $options.closeTimeDialog }, {
6275
+ default: withCtx(() => [..._cache[45] || (_cache[45] = [
6276
+ createTextVNode("取消", -1)
6277
+ ])]),
6278
+ _: 1
6279
+ }, 8, ["onClick"]),
6280
+ createVNode(_component_el_button, {
6281
+ type: "primary",
6282
+ onClick: $options.confirmTimeDialog
6283
+ }, {
6284
+ default: withCtx(() => [..._cache[46] || (_cache[46] = [
6285
+ createTextVNode("确定", -1)
6286
+ ])]),
6287
+ _: 1
6288
+ }, 8, ["onClick"])
6289
+ ])
6290
+ ]),
6291
+ default: withCtx(() => [
6069
6292
  createElementVNode("div", _hoisted_21, [
6070
6293
  createVNode(_component_el_form, {
6071
6294
  model: $data.timeDialog,
@@ -6080,7 +6303,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6080
6303
  default: withCtx(() => [
6081
6304
  createElementVNode("div", _hoisted_22, [
6082
6305
  _cache[44] || (_cache[44] = createElementVNode("div", {
6083
- style: { "min-width": "50px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6306
+ style: { "min-width": "30px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6084
6307
  class: "fontColor"
6085
6308
  }, "时间:", -1)),
6086
6309
  createElementVNode("div", _hoisted_23, [
@@ -6090,7 +6313,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6090
6313
  "popper-class": "kd-curve-2d-select-popup",
6091
6314
  type: "datetime",
6092
6315
  placeholder: "选择时间",
6093
- "value-format": "yyyy-MM-dd HH:mm:ss",
6316
+ "value-format": "YYYY-MM-DD HH:mm:ss",
6094
6317
  style: { "width": "100%", "height": "100%" }
6095
6318
  }, null, 8, ["modelValue"])
6096
6319
  ])
@@ -6101,42 +6324,54 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6101
6324
  ]),
6102
6325
  _: 1
6103
6326
  }, 8, ["model"])
6104
- ]),
6105
- createElementVNode("div", _hoisted_24, [
6106
- createVNode(_component_el_button, { onClick: $options.closeTimeDialog }, {
6107
- default: withCtx(() => [..._cache[45] || (_cache[45] = [
6327
+ ])
6328
+ ]),
6329
+ _: 1
6330
+ }, 8, ["modelValue", "onClose"]),
6331
+ createVNode(_component_el_dialog, {
6332
+ modelValue: $data.depthDialogVisible,
6333
+ "onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => $data.depthDialogVisible = $event),
6334
+ "append-to-body": true,
6335
+ "header-class": "kd-lane-chart-v3-custom-dialog__header",
6336
+ "body-class": "kd-lane-chart-v3-custom-dialog__body",
6337
+ "footer-class": "kd-lane-chart-v3-custom-dialog__footer",
6338
+ class: "kd-lane-chart-v3-custom-dialog",
6339
+ "close-on-click-modal": false,
6340
+ "close-on-press-escape": false,
6341
+ "show-close": false,
6342
+ width: "300px",
6343
+ onClose: $options.closeDepthDialog,
6344
+ "align-center": ""
6345
+ }, {
6346
+ header: withCtx(() => [
6347
+ createElementVNode("div", _hoisted_25, [
6348
+ _cache[47] || (_cache[47] = createElementVNode("span", { class: "custom-dialog__title" }, "设置井深段", -1)),
6349
+ createElementVNode("button", {
6350
+ class: "custom-dialog__close",
6351
+ onClick: _cache[22] || (_cache[22] = (...args) => $options.closeDepthDialog && $options.closeDepthDialog(...args))
6352
+ }, "×")
6353
+ ])
6354
+ ]),
6355
+ footer: withCtx(() => [
6356
+ createElementVNode("div", _hoisted_31, [
6357
+ createVNode(_component_el_button, { onClick: $options.closeDepthDialog }, {
6358
+ default: withCtx(() => [..._cache[50] || (_cache[50] = [
6108
6359
  createTextVNode("取消", -1)
6109
6360
  ])]),
6110
6361
  _: 1
6111
6362
  }, 8, ["onClick"]),
6112
6363
  createVNode(_component_el_button, {
6113
6364
  type: "primary",
6114
- onClick: $options.confirmTimeDialog
6365
+ onClick: $options.confirmDepthDialog
6115
6366
  }, {
6116
- default: withCtx(() => [..._cache[46] || (_cache[46] = [
6367
+ default: withCtx(() => [..._cache[51] || (_cache[51] = [
6117
6368
  createTextVNode("确定", -1)
6118
6369
  ])]),
6119
6370
  _: 1
6120
6371
  }, 8, ["onClick"])
6121
6372
  ])
6122
- ], 2)
6123
- ], 2)) : createCommentVNode("", true),
6124
- $data.depthDialogVisible || $data.depthDialogClosing ? (openBlock(), createElementBlock("div", {
6125
- key: 14,
6126
- class: normalizeClass(["custom-dialog-mask", { closing: $data.depthDialogClosing }]),
6127
- onClick: _cache[25] || (_cache[25] = withModifiers((...args) => $options.closeDepthDialog && $options.closeDepthDialog(...args), ["self"]))
6128
- }, [
6129
- createElementVNode("div", {
6130
- class: normalizeClass(["custom-dialog", { closing: $data.depthDialogClosing }]),
6131
- style: { "width": "420px" }
6132
- }, [
6133
- createElementVNode("div", _hoisted_25, [
6134
- _cache[47] || (_cache[47] = createElementVNode("span", { class: "custom-dialog__title" }, "设置井深段", -1)),
6135
- createElementVNode("button", {
6136
- class: "custom-dialog__close",
6137
- onClick: _cache[22] || (_cache[22] = (...args) => $options.closeDepthDialog && $options.closeDepthDialog(...args))
6138
- }, "×")
6139
- ]),
6373
+ ]),
6374
+ default: withCtx(() => [
6140
6375
  createElementVNode("div", _hoisted_26, [
6141
6376
  createVNode(_component_el_form, {
6142
6377
  model: $data.depthDialog,
@@ -6155,7 +6390,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6155
6390
  default: withCtx(() => [
6156
6391
  createElementVNode("div", _hoisted_27, [
6157
6392
  _cache[48] || (_cache[48] = createElementVNode("div", {
6158
- style: { "min-width": "80px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6393
+ style: { "min-width": "60px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6159
6394
  class: "fontColor"
6160
6395
  }, "起始井深:", -1)),
6161
6396
  createElementVNode("div", _hoisted_28, [
@@ -6182,7 +6417,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6182
6417
  default: withCtx(() => [
6183
6418
  createElementVNode("div", _hoisted_29, [
6184
6419
  _cache[49] || (_cache[49] = createElementVNode("div", {
6185
- style: { "min-width": "80px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6420
+ style: { "min-width": "60px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6186
6421
  class: "fontColor"
6187
6422
  }, "结束井深:", -1)),
6188
6423
  createElementVNode("div", _hoisted_30, [
@@ -6201,42 +6436,54 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6201
6436
  ]),
6202
6437
  _: 1
6203
6438
  }, 8, ["model"])
6204
- ]),
6205
- createElementVNode("div", _hoisted_31, [
6206
- createVNode(_component_el_button, { onClick: $options.closeDepthDialog }, {
6207
- default: withCtx(() => [..._cache[50] || (_cache[50] = [
6439
+ ])
6440
+ ]),
6441
+ _: 1
6442
+ }, 8, ["modelValue", "onClose"]),
6443
+ createVNode(_component_el_dialog, {
6444
+ modelValue: $data.exportDialogVisible,
6445
+ "onUpdate:modelValue": _cache[31] || (_cache[31] = ($event) => $data.exportDialogVisible = $event),
6446
+ "append-to-body": true,
6447
+ "header-class": "kd-lane-chart-v3-custom-dialog__header",
6448
+ "body-class": "kd-lane-chart-v3-custom-dialog__body",
6449
+ "footer-class": "kd-lane-chart-v3-custom-dialog__footer",
6450
+ class: "kd-lane-chart-v3-custom-dialog",
6451
+ "close-on-click-modal": false,
6452
+ "close-on-press-escape": false,
6453
+ "show-close": false,
6454
+ width: "450px",
6455
+ onClose: $options.closeExportDialog,
6456
+ "align-center": ""
6457
+ }, {
6458
+ header: withCtx(() => [
6459
+ createElementVNode("div", _hoisted_32, [
6460
+ _cache[52] || (_cache[52] = createElementVNode("span", { class: "custom-dialog__title" }, "数据导出", -1)),
6461
+ createElementVNode("button", {
6462
+ class: "custom-dialog__close",
6463
+ onClick: _cache[26] || (_cache[26] = (...args) => $options.closeExportDialog && $options.closeExportDialog(...args))
6464
+ }, "×")
6465
+ ])
6466
+ ]),
6467
+ footer: withCtx(() => [
6468
+ createElementVNode("div", _hoisted_40, [
6469
+ createVNode(_component_el_button, { onClick: $options.closeExportDialog }, {
6470
+ default: withCtx(() => [..._cache[56] || (_cache[56] = [
6208
6471
  createTextVNode("取消", -1)
6209
6472
  ])]),
6210
6473
  _: 1
6211
6474
  }, 8, ["onClick"]),
6212
6475
  createVNode(_component_el_button, {
6213
6476
  type: "primary",
6214
- onClick: $options.confirmDepthDialog
6477
+ onClick: $options.confirmExportDialog
6215
6478
  }, {
6216
- default: withCtx(() => [..._cache[51] || (_cache[51] = [
6479
+ default: withCtx(() => [..._cache[57] || (_cache[57] = [
6217
6480
  createTextVNode("确定", -1)
6218
6481
  ])]),
6219
6482
  _: 1
6220
6483
  }, 8, ["onClick"])
6221
6484
  ])
6222
- ], 2)
6223
- ], 2)) : createCommentVNode("", true),
6224
- $data.exportDialogVisible || $data.exportDialogClosing ? (openBlock(), createElementBlock("div", {
6225
- key: 15,
6226
- class: normalizeClass(["custom-dialog-mask", { closing: $data.exportDialogClosing }]),
6227
- onClick: _cache[31] || (_cache[31] = withModifiers((...args) => $options.closeExportDialog && $options.closeExportDialog(...args), ["self"]))
6228
- }, [
6229
- createElementVNode("div", {
6230
- class: normalizeClass(["custom-dialog", { closing: $data.exportDialogClosing }]),
6231
- style: { "width": "500px" }
6232
- }, [
6233
- createElementVNode("div", _hoisted_32, [
6234
- _cache[52] || (_cache[52] = createElementVNode("span", { class: "custom-dialog__title" }, "数据导出", -1)),
6235
- createElementVNode("button", {
6236
- class: "custom-dialog__close",
6237
- onClick: _cache[26] || (_cache[26] = (...args) => $options.closeExportDialog && $options.closeExportDialog(...args))
6238
- }, "×")
6239
- ]),
6485
+ ]),
6486
+ default: withCtx(() => [
6240
6487
  createElementVNode("div", _hoisted_33, [
6241
6488
  createVNode(_component_Tabs, {
6242
6489
  modelValue: $data.exportName,
@@ -6260,7 +6507,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6260
6507
  key: 0,
6261
6508
  model: $data.exportTimeDialog,
6262
6509
  ref: "ExportTimeFormRef",
6263
- style: { "display": "flex", "flex-direction": "column", "gap": "16px", "margin-top": "16px" }
6510
+ style: { "display": "flex", "flex-direction": "column", "gap": "16px" }
6264
6511
  }, {
6265
6512
  default: withCtx(() => [
6266
6513
  createVNode(_component_el_form_item, {
@@ -6270,7 +6517,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6270
6517
  default: withCtx(() => [
6271
6518
  createElementVNode("div", _hoisted_34, [
6272
6519
  _cache[53] || (_cache[53] = createElementVNode("div", {
6273
- style: { "min-width": "80px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6520
+ style: { "min-width": "60px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6274
6521
  class: "fontColor"
6275
6522
  }, "时间范围:", -1)),
6276
6523
  createElementVNode("div", _hoisted_35, [
@@ -6282,7 +6529,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6282
6529
  "range-separator": "至",
6283
6530
  "start-placeholder": "开始时间",
6284
6531
  "end-placeholder": "结束时间",
6285
- "value-format": "yyyy-MM-dd HH:mm:ss",
6532
+ "value-format": "YYYY-MM-DD HH:mm:ss",
6286
6533
  style: { "width": "100%", "height": "100%" }
6287
6534
  }, null, 8, ["modelValue"])
6288
6535
  ])
@@ -6297,7 +6544,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6297
6544
  key: 1,
6298
6545
  model: $data.exportDepthDialog,
6299
6546
  ref: "ExportDepthFormRef",
6300
- style: { "display": "flex", "flex-direction": "column", "gap": "16px", "margin-top": "16px" }
6547
+ style: { "display": "flex", "flex-direction": "column", "gap": "16px" }
6301
6548
  }, {
6302
6549
  default: withCtx(() => [
6303
6550
  createVNode(_component_el_form_item, {
@@ -6311,7 +6558,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6311
6558
  default: withCtx(() => [
6312
6559
  createElementVNode("div", _hoisted_36, [
6313
6560
  _cache[54] || (_cache[54] = createElementVNode("div", {
6314
- style: { "min-width": "80px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6561
+ style: { "min-width": "60px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6315
6562
  class: "fontColor"
6316
6563
  }, "起始井深:", -1)),
6317
6564
  createElementVNode("div", _hoisted_37, [
@@ -6339,7 +6586,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6339
6586
  default: withCtx(() => [
6340
6587
  createElementVNode("div", _hoisted_38, [
6341
6588
  _cache[55] || (_cache[55] = createElementVNode("div", {
6342
- style: { "min-width": "80px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6589
+ style: { "min-width": "60px", "display": "flex", "align-items": "center", "height": "100%", "white-space": "nowrap" },
6343
6590
  class: "fontColor"
6344
6591
  }, "终止井深:", -1)),
6345
6592
  createElementVNode("div", _hoisted_39, [
@@ -6358,29 +6605,13 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
6358
6605
  ]),
6359
6606
  _: 1
6360
6607
  }, 8, ["model"])) : createCommentVNode("", true)
6361
- ]),
6362
- createElementVNode("div", _hoisted_40, [
6363
- createVNode(_component_el_button, { onClick: $options.closeExportDialog }, {
6364
- default: withCtx(() => [..._cache[56] || (_cache[56] = [
6365
- createTextVNode("取消", -1)
6366
- ])]),
6367
- _: 1
6368
- }, 8, ["onClick"]),
6369
- createVNode(_component_el_button, {
6370
- type: "primary",
6371
- onClick: $options.confirmExportDialog
6372
- }, {
6373
- default: withCtx(() => [..._cache[57] || (_cache[57] = [
6374
- createTextVNode("确定", -1)
6375
- ])]),
6376
- _: 1
6377
- }, 8, ["onClick"])
6378
6608
  ])
6379
- ], 2)
6380
- ], 2)) : createCommentVNode("", true)
6609
+ ]),
6610
+ _: 1
6611
+ }, 8, ["modelValue", "onClose"])
6381
6612
  ]);
6382
6613
  }
6383
- const FunctionControlPanel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-d99f95ef"]]);
6614
+ const FunctionControlPanel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-def5c949"]]);
6384
6615
  const INIT_TRIGGERS = ["theme", "initOptions", "autoresize"];
6385
6616
  const REWATCH_TRIGGERS = ["manualUpdate", "watchShallow"];
6386
6617
  const _sfc_main$3 = {
@@ -6832,7 +7063,8 @@ const _sfc_main$2 = {
6832
7063
  cssVarCache: {},
6833
7064
  seriesDataCache: {},
6834
7065
  lastChartUpdateTime: 0,
6835
- tooltipContainerMap: {}
7066
+ tooltipContainerMap: {},
7067
+ latestLineDataByParamCode: {}
6836
7068
  };
6837
7069
  },
6838
7070
  created() {
@@ -6977,7 +7209,9 @@ const _sfc_main$2 = {
6977
7209
  });
6978
7210
  },
6979
7211
  hideAxisPointerAcrossCharts() {
7212
+ if (this.formCache.displayType !== "header") return;
6980
7213
  this.crosshairVisible = false;
7214
+ this.headerData = {};
6981
7215
  this.getConnectedCharts().forEach((chart) => {
6982
7216
  chart.dispatchAction({ type: "hideTip" });
6983
7217
  chart.dispatchAction({ type: "updateAxisPointer", currTrigger: "leave" });
@@ -7024,6 +7258,7 @@ const _sfc_main$2 = {
7024
7258
  // 模板变化
7025
7259
  async templateChange(template) {
7026
7260
  this.currentTemplate = template;
7261
+ this.getLatestLineDataByParamCode();
7027
7262
  await this.$nextTick();
7028
7263
  this.updateLanesChartOption();
7029
7264
  },
@@ -7171,6 +7406,20 @@ const _sfc_main$2 = {
7171
7406
  },
7172
7407
  // 控制tooltip显示隐藏
7173
7408
  toggleTooltip(enable) {
7409
+ if (enable) this.headerData = {};
7410
+ const lanes = this.currentTemplate && this.currentTemplate.lanes || [];
7411
+ this.showTooltip = enable;
7412
+ lanes.forEach((lane) => {
7413
+ const chartRef = this.getChartRefByLaneId(lane.laneId);
7414
+ if (!chartRef || !chartRef.chart) return;
7415
+ const chart = chartRef.chart;
7416
+ chart.setOption({
7417
+ tooltip: {
7418
+ ...chart.getOption().tooltip,
7419
+ showContent: enable
7420
+ }
7421
+ });
7422
+ });
7174
7423
  },
7175
7424
  // 获取当前可见数据
7176
7425
  getVisibleData(startIndex = this.startIndex) {
@@ -7531,10 +7780,34 @@ const _sfc_main$2 = {
7531
7780
  this.windowSize = Math.max(1, newWindowSize);
7532
7781
  this.$emit("loadingChange", false);
7533
7782
  this.pendingRequestData = null;
7783
+ this.getLatestLineDataByParamCode();
7534
7784
  this.$nextTick(() => {
7535
7785
  this.updateLanesChartOption();
7536
7786
  });
7537
7787
  },
7788
+ getEffectScatterPoint(lineInfo, realTimeData, axisKey) {
7789
+ if (!realTimeData || realTimeData.length === 0) return null;
7790
+ let latestData = null;
7791
+ let maxTimestamp = -1;
7792
+ for (const item of realTimeData) {
7793
+ const timestamp = this.toMillisecondTimestamp(item.timestamp);
7794
+ if (timestamp > maxTimestamp) {
7795
+ const value2 = item[lineInfo.paramId];
7796
+ if (value2 !== null && value2 !== void 0 && value2 !== "" && Number.isFinite(+value2)) {
7797
+ maxTimestamp = timestamp;
7798
+ latestData = item;
7799
+ }
7800
+ }
7801
+ }
7802
+ if (!latestData) return null;
7803
+ const value = latestData[lineInfo.paramId];
7804
+ const axisValue = +latestData[axisKey];
7805
+ return {
7806
+ data: [value, axisValue],
7807
+ timestamp: maxTimestamp,
7808
+ depth: latestData.depth
7809
+ };
7810
+ },
7538
7811
  // 获取第一个包含 dataIndex 的项
7539
7812
  getFirstDataIndexItem(seriesData) {
7540
7813
  if (!Array.isArray(seriesData) || seriesData.length === 0) {
@@ -7761,7 +8034,7 @@ const _sfc_main$2 = {
7761
8034
  },
7762
8035
  // 更新泳道图表选项
7763
8036
  async updateLanesChartOption(transferData) {
7764
- var _a, _b, _c;
8037
+ var _a;
7765
8038
  if (this.isUpdatingChart) {
7766
8039
  this.pendingChartUpdate = true;
7767
8040
  return;
@@ -7804,6 +8077,17 @@ const _sfc_main$2 = {
7804
8077
  if (!hasValidLineData) {
7805
8078
  hasValidLineData = seriesData.some((point) => point[0] !== null && point[0] !== void 0 && point[0] !== "");
7806
8079
  }
8080
+ if (lineInfo.recommendParamId) {
8081
+ const recommendLineInfo = {
8082
+ ...lineInfo,
8083
+ paramId: lineInfo.recommendParamId
8084
+ };
8085
+ const recommendSeriesData = this.generateSeriesDataCached(realTimeData, recommendLineInfo, axisKey, paramCodeMap);
8086
+ seriesDataCache[lineInfo.lineId + "_recommend"] = { full: recommendSeriesData };
8087
+ if (!hasValidLineData) {
8088
+ hasValidLineData = recommendSeriesData.some((point) => point[0] !== null && point[0] !== void 0 && point[0] !== "");
8089
+ }
8090
+ }
7807
8091
  }
7808
8092
  }
7809
8093
  if (dataGroups.length > 0) {
@@ -7893,7 +8177,7 @@ const _sfc_main$2 = {
7893
8177
  interval: unifiedInterval
7894
8178
  });
7895
8179
  if (isDepthLane || isTimeLane) {
7896
- const clientWidth = this.laneWidthMap[lane.laneId];
8180
+ const clientWidth = this.laneWidthMap && this.laneWidthMap[lane.laneId];
7897
8181
  option.xAxis.push({
7898
8182
  gridIndex,
7899
8183
  type: "value",
@@ -7961,7 +8245,8 @@ const _sfc_main$2 = {
7961
8245
  }
7962
8246
  }
7963
8247
  if (lane && lane.lines) {
7964
- for (const lineInfo of lane.lines) {
8248
+ lane.lines.forEach((lineInfo, index2) => {
8249
+ var _a2, _b, _c, _d;
7965
8250
  if (!seriesDataCache[lineInfo.lineId]) {
7966
8251
  seriesDataCache[lineInfo.lineId] = {
7967
8252
  full: this.generateSeriesDataCached(realTimeData, lineInfo, axisKey, paramCodeMap)
@@ -7995,9 +8280,9 @@ const _sfc_main$2 = {
7995
8280
  type: "line",
7996
8281
  xAxisIndex,
7997
8282
  yAxisIndex: gridIndex,
7998
- name: paramNameMap[lineInfo.paramId] || "",
8283
+ name: (lineInfo.recommendParamId ? "实际值" : paramNameMap[lineInfo.paramId]) || "",
7999
8284
  symbol: lineInfo.symbol || "none",
8000
- color: lineInfo.themeConfig ? lineInfo.isGradient && ((_c = (_b = this.linearGradientLineColor) == null ? void 0 : _b[this.nowTheme]) == null ? void 0 : _c[lineInfo.paramId]) ? this.linearGradientLineColor[this.nowTheme][lineInfo.paramId] : lineInfo.themeConfig[this.nowTheme].lineColor : lineInfo.lineColor,
8285
+ color: lineInfo.themeConfig ? lineInfo.isGradient && ((_b = (_a2 = this.linearGradientLineColor) == null ? void 0 : _a2[this.nowTheme]) == null ? void 0 : _b[lineInfo.paramId]) ? this.linearGradientLineColor[this.nowTheme][lineInfo.paramId] : lineInfo.themeConfig[this.nowTheme].lineColor : lineInfo.lineColor,
8001
8286
  symbolSize: getAdaptedFontSize(lineInfo.symbolSize || 6),
8002
8287
  lineStyle: {
8003
8288
  width: getAdaptedFontSize(+lineInfo.lineSize || 1.5),
@@ -8006,11 +8291,75 @@ const _sfc_main$2 = {
8006
8291
  clip: true,
8007
8292
  z: lineInfo.lineSort
8008
8293
  };
8009
- this.addMarkLineToSeries(baseSeries, lineInfo, realTimeData, axisKey, dataIndexMap);
8294
+ if (lane.lines.length - 1 == index2) {
8295
+ this.addMarkLineToSeries(baseSeries, lineInfo, realTimeData, axisKey, dataIndexMap, groupMin, groupMax);
8296
+ }
8010
8297
  this.addMarkAreaToSeries(baseSeries, lineInfo, realTimeData, axisKey, min, max, dataIndexMap);
8011
8298
  this.addAreaStyleToSeries(baseSeries, lineInfo, groupSeriesData, min);
8299
+ const rangeAreaSeries = this.addRangeAreaToSeries(baseSeries, lineInfo, realTimeData, axisKey, paramCodeMap, min, max);
8012
8300
  option.series.push(baseSeries);
8013
- }
8301
+ if (rangeAreaSeries) {
8302
+ option.series.push(rangeAreaSeries);
8303
+ }
8304
+ if (lineInfo.recommendParamId) {
8305
+ const recommendLineInfo = {
8306
+ ...lineInfo,
8307
+ paramId: lineInfo.recommendParamId,
8308
+ lineType: "dashed"
8309
+ };
8310
+ const recommendGroupSeriesData = this.generateSeriesDataCached(group, recommendLineInfo, axisKey, paramCodeMap);
8311
+ const recommendSeries = {
8312
+ laneId: lineInfo.recommendParamId,
8313
+ data: lineInfo.recommendIsUsed === "1" || lineInfo.recommendIsUsed == 1 ? recommendGroupSeriesData : [],
8314
+ type: "line",
8315
+ xAxisIndex,
8316
+ yAxisIndex: gridIndex,
8317
+ name: "推荐值",
8318
+ symbol: "none",
8319
+ color: lineInfo.themeConfig ? lineInfo.themeConfig[this.nowTheme].lineColor : lineInfo.lineColor,
8320
+ lineStyle: {
8321
+ width: getAdaptedFontSize(+lineInfo.lineSize || 1.5),
8322
+ type: "dashed"
8323
+ },
8324
+ clip: true,
8325
+ z: lineInfo.lineSort
8326
+ };
8327
+ option.series.push(recommendSeries);
8328
+ }
8329
+ const effectScatterPoint = this.latestLineDataByParamCode[lineInfo.paramId];
8330
+ if (effectScatterPoint && lineInfo.latestDataTips) {
8331
+ let findIndex = -1;
8332
+ if (axisKey === "depth") {
8333
+ findIndex = group.findIndex((item) => item.timestamp === effectScatterPoint.timestamp && item[axisKey] === effectScatterPoint[axisKey]);
8334
+ } else {
8335
+ findIndex = group.findIndex((item) => item[axisKey] === effectScatterPoint[axisKey]);
8336
+ }
8337
+ const pointAxisValue = effectScatterPoint[axisKey];
8338
+ if (pointAxisValue >= groupMin && pointAxisValue <= groupMax && findIndex !== -1) {
8339
+ console.log(pointAxisValue, findIndex, groupMin, groupMax, "444444", [effectScatterPoint[lineInfo.paramId], effectScatterPoint[axisKey]]);
8340
+ option.series.push({
8341
+ type: "effectScatter",
8342
+ xAxisIndex,
8343
+ yAxisIndex: gridIndex,
8344
+ data: [[effectScatterPoint[lineInfo.paramId], effectScatterPoint[axisKey]]],
8345
+ symbol: "circle",
8346
+ symbolSize: getAdaptedFontSize(12),
8347
+ itemStyle: {
8348
+ color: lineInfo.themeConfig ? lineInfo.isGradient && ((_d = (_c = this.linearGradientLineColor) == null ? void 0 : _c[this.nowTheme]) == null ? void 0 : _d[lineInfo.paramId]) ? this.linearGradientLineColor[this.nowTheme][lineInfo.paramId] : lineInfo.themeConfig[this.nowTheme].lineColor : lineInfo.lineColor,
8349
+ opacity: 1
8350
+ },
8351
+ tooltip: { show: false },
8352
+ showEffectOn: "render",
8353
+ rippleEffect: {
8354
+ brushType: "stroke",
8355
+ scale: 3,
8356
+ period: 2
8357
+ },
8358
+ z: lineInfo.lineSort + 1
8359
+ });
8360
+ }
8361
+ }
8362
+ });
8014
8363
  }
8015
8364
  if (!isDepthLane && !isTimeLane && lane && lane.lines && lane.lines.length > 0) {
8016
8365
  const rangeMins = lane.lines.map((item) => {
@@ -8024,7 +8373,7 @@ const _sfc_main$2 = {
8024
8373
  type: "line",
8025
8374
  xAxisIndex: lane.lines.length * groupIndex,
8026
8375
  yAxisIndex: gridIndex,
8027
- data: realTimeData.map((item) => [min, +item[axisKey]]),
8376
+ data: group.map((item) => [min, +item[axisKey]]),
8028
8377
  lineStyle: { opacity: 0 },
8029
8378
  symbol: "none"
8030
8379
  });
@@ -8090,6 +8439,29 @@ const _sfc_main$2 = {
8090
8439
  return [value, +item[axisKey]];
8091
8440
  });
8092
8441
  },
8442
+ getEffectScatterPoint(lineInfo, axisKey) {
8443
+ if (!this.realTimeData || this.realTimeData.length === 0) return null;
8444
+ let latestData = null;
8445
+ let maxTimestamp = -1;
8446
+ for (const item of this.realTimeData) {
8447
+ const timestamp = this.toMillisecondTimestamp(item.timestamp);
8448
+ if (timestamp > maxTimestamp) {
8449
+ const value2 = item[lineInfo.paramId];
8450
+ if (value2 !== null && value2 !== void 0 && value2 !== "" && Number.isFinite(+value2)) {
8451
+ maxTimestamp = timestamp;
8452
+ latestData = item;
8453
+ }
8454
+ }
8455
+ }
8456
+ if (!latestData) return null;
8457
+ const value = latestData[lineInfo.paramId];
8458
+ const axisValue = +latestData[axisKey];
8459
+ return {
8460
+ data: [value, axisValue],
8461
+ timestamp: maxTimestamp,
8462
+ depth: latestData[axisKey]
8463
+ };
8464
+ },
8093
8465
  // 获取Y轴标签格式化函数
8094
8466
  getYAxisLabelFormatter(isTimeLane, dataGroups, groupIndex, groupMin, groupMax, axisKey) {
8095
8467
  return (value) => {
@@ -8114,6 +8486,9 @@ const _sfc_main$2 = {
8114
8486
  // 添加标记线到泳道图表
8115
8487
  addMarkLineToSeries(baseSeries, lineInfo, realTimeData, axisKey, dataIndexMap) {
8116
8488
  if (!this.markLineData || this.markLineData.length === 0) return;
8489
+ let filterLanes = this.currentTemplate.lanes.filter((l) => !Object.prototype.hasOwnProperty.call(l, "contentKey") && l.laneKey !== axisKey && l.lines.length > 0).map((l) => l.lines).flat();
8490
+ let isLastLine = filterLanes.findIndex((l) => l.lineId == lineInfo.lineId);
8491
+ let show = isLastLine == filterLanes.length - 1;
8117
8492
  baseSeries.markLine = {
8118
8493
  symbol: "none",
8119
8494
  label: { show: false },
@@ -8122,11 +8497,11 @@ const _sfc_main$2 = {
8122
8497
  var _a, _b, _c;
8123
8498
  if (this.formCache.axisType === "depth") {
8124
8499
  const markDepth = ((_a = item.data) == null ? void 0 : _a.depth) || item.depth || item;
8125
- const markTime = ((_b = item.data) == null ? void 0 : _b.timestamp) || item.timestamp || 0;
8126
- const markTimeMs = this.toMillisecondTimestamp(markTime);
8500
+ const markTime = ((_b = item.data) == null ? void 0 : _b.timestamp) || item.timestamp || null;
8501
+ const markTimeMs2 = this.toMillisecondTimestamp(markTime);
8127
8502
  const findItem = dataIndexMap.get(String(markDepth)) || realTimeData.find((d) => d[axisKey] == markDepth);
8128
8503
  if (findItem) {
8129
- return { yAxis: Number(markDepth), lineStyle: { color: item.color || "red", type: "dashed", width: 2 } };
8504
+ return { yAxis: Number(markDepth), lineStyle: { color: item.color || "red", type: "dashed", width: 2 }, label: { show, position: "insideEndTop", fontSize: getAdaptedFontSize(10) } };
8130
8505
  }
8131
8506
  let closestItem = null, minDiff = Infinity;
8132
8507
  realTimeData.forEach((d) => {
@@ -8137,34 +8512,38 @@ const _sfc_main$2 = {
8137
8512
  }
8138
8513
  });
8139
8514
  if (closestItem) {
8140
- const dataTime = closestItem.timestamp || 0;
8141
- const dataTimeMs = this.toMillisecondTimestamp(dataTime);
8142
- if (markTimeMs >= dataTimeMs) {
8143
- return { yAxis: Number(markDepth), lineStyle: { color: item.color || "red", type: "dashed", width: 2 } };
8515
+ if (markTimeMs2) {
8516
+ const dataTime = closestItem.timestamp || null;
8517
+ const dataTimeMs = this.toMillisecondTimestamp(dataTime);
8518
+ if (markTimeMs2 >= dataTimeMs) {
8519
+ return { yAxis: Number(markDepth), lineStyle: { color: item.color || "red", type: "dashed", width: 2 }, label: { show, position: "insideEndTop", fontSize: getAdaptedFontSize(10) } };
8520
+ }
8521
+ } else {
8522
+ return { yAxis: Number(markDepth), lineStyle: { color: item.color || "red", type: "dashed", width: 2 }, label: { show, position: "insideEndTop", fontSize: getAdaptedFontSize(10) } };
8144
8523
  }
8145
8524
  }
8146
8525
  return { yAxis: null };
8147
8526
  } else if (this.formCache.axisType === "time") {
8148
8527
  const markTime = ((_c = item.data) == null ? void 0 : _c.time) || item.time || item;
8149
- const markTimeMs = this.toMillisecondTimestamp(markTime);
8528
+ const markTimeMs2 = this.toMillisecondTimestamp(markTime);
8150
8529
  const findItem = dataIndexMap.get(String(markTime)) || realTimeData.find((d) => d[axisKey] == markTime);
8151
8530
  if (findItem) {
8152
- return { yAxis: markTimeMs, lineStyle: { color: item.color || "red", type: "dashed", width: 2 } };
8531
+ return { yAxis: markTimeMs2, lineStyle: { color: item.color || "red", type: "dashed", width: 2 }, label: { show, position: "insideEndTop", fontSize: getAdaptedFontSize(10), formatter: (value) => this.timestampToYMDHMS(markTimeMs2) || "" } };
8153
8532
  }
8154
8533
  let closestItem = null, minDiff = Infinity;
8155
8534
  realTimeData.forEach((d) => {
8156
- const diff = Math.abs(this.toMillisecondTimestamp(d[axisKey]) - markTimeMs);
8535
+ const diff = Math.abs(this.toMillisecondTimestamp(d[axisKey]) - markTimeMs2);
8157
8536
  if (diff < minDiff) {
8158
8537
  minDiff = diff;
8159
8538
  closestItem = d;
8160
8539
  }
8161
8540
  });
8162
8541
  if (closestItem) {
8163
- return { yAxis: markTimeMs, lineStyle: { color: item.color || "red", type: "dashed", width: 2 } };
8542
+ return { yAxis: markTimeMs2, lineStyle: { color: item.color || "red", type: "dashed", width: 2 }, label: { show, position: "insideEndTop", fontSize: getAdaptedFontSize(10), formatter: (value) => this.timestampToYMDHMS(markTimeMs2) || "" } };
8164
8543
  }
8165
8544
  return { yAxis: null };
8166
8545
  }
8167
- return { yAxis: Number(item.data || item), lineStyle: { color: item.color || "red", type: "dashed", width: 2 } };
8546
+ return { yAxis: Number(item.data || item), lineStyle: { color: item.color || "red", type: "dashed", width: 2 }, label: { show, position: "insideEndTop", fontSize: getAdaptedFontSize(10), formatter: (value) => this.timestampToYMDHMS(markTimeMs) || "" } };
8168
8547
  }).filter((item) => item.yAxis !== null)
8169
8548
  };
8170
8549
  },
@@ -8293,6 +8672,69 @@ const _sfc_main$2 = {
8293
8672
  };
8294
8673
  }
8295
8674
  },
8675
+ // 添加上下限区域(误差带/置信区间)到泳道图表
8676
+ addRangeAreaToSeries(baseSeries, lineInfo, realTimeData, axisKey, paramCodeMap, min, max) {
8677
+ var _a, _b;
8678
+ if (!lineInfo.upperParamId && !lineInfo.lowerParamId) return null;
8679
+ const upperSeriesData = lineInfo.upperParamId ? this.generateSeriesDataCached(realTimeData, { ...lineInfo, paramId: lineInfo.upperParamId }, axisKey, paramCodeMap) : [];
8680
+ const lowerSeriesData = lineInfo.lowerParamId ? this.generateSeriesDataCached(realTimeData, { ...lineInfo, paramId: lineInfo.lowerParamId }, axisKey, paramCodeMap) : [];
8681
+ const customData = [];
8682
+ const maxLength = Math.max(upperSeriesData.length, lowerSeriesData.length);
8683
+ for (let i = 0; i < maxLength - 1; i++) {
8684
+ const upperPoint1 = upperSeriesData[i];
8685
+ const upperPoint2 = upperSeriesData[i + 1];
8686
+ const lowerPoint1 = lowerSeriesData[i];
8687
+ const lowerPoint2 = lowerSeriesData[i + 1];
8688
+ if (!upperPoint1 || !upperPoint2 || !lowerPoint1 || !lowerPoint2) continue;
8689
+ if (upperPoint1[0] === null || upperPoint1[0] === void 0 || upperPoint1[0] === "") continue;
8690
+ if (upperPoint2[0] === null || upperPoint2[0] === void 0 || upperPoint2[0] === "") continue;
8691
+ if (lowerPoint1[0] === null || lowerPoint1[0] === void 0 || lowerPoint1[0] === "") continue;
8692
+ if (lowerPoint2[0] === null || lowerPoint2[0] === void 0 || lowerPoint2[0] === "") continue;
8693
+ if (!Number.isFinite(upperPoint1[1]) || !Number.isFinite(upperPoint2[1]) || !Number.isFinite(lowerPoint1[1]) || !Number.isFinite(lowerPoint2[1])) continue;
8694
+ customData.push([
8695
+ upperPoint1[0],
8696
+ lowerPoint1[0],
8697
+ upperPoint1[1],
8698
+ upperPoint2[0],
8699
+ lowerPoint2[0],
8700
+ upperPoint2[1]
8701
+ ]);
8702
+ }
8703
+ if (customData.length === 0) return null;
8704
+ const color = lineInfo.rangeAreaColor || lineInfo.themeConfig ? lineInfo.isGradient && ((_b = (_a = this.linearGradientLineColor) == null ? void 0 : _a[this.nowTheme]) == null ? void 0 : _b[lineInfo.paramId]) ? this.linearGradientLineColor[this.nowTheme][lineInfo.paramId] : lineInfo.themeConfig[this.nowTheme].lineColor : lineInfo.lineColor;
8705
+ return {
8706
+ type: "custom",
8707
+ data: customData,
8708
+ name: lineInfo.paramId + "-范围区域",
8709
+ xAxisIndex: baseSeries.xAxisIndex,
8710
+ yAxisIndex: baseSeries.yAxisIndex,
8711
+ clip: true,
8712
+ z: baseSeries.z - 1,
8713
+ renderItem: (params, api) => {
8714
+ const upperX1 = api.value(0);
8715
+ const lowerX1 = api.value(1);
8716
+ const depth1 = api.value(2);
8717
+ const upperX2 = api.value(3);
8718
+ const lowerX2 = api.value(4);
8719
+ const depth2 = api.value(5);
8720
+ const topLeft = api.coord([upperX1, depth1]);
8721
+ const topRight = api.coord([upperX2, depth2]);
8722
+ const bottomRight = api.coord([lowerX2, depth2]);
8723
+ const bottomLeft = api.coord([lowerX1, depth1]);
8724
+ return {
8725
+ type: "polygon",
8726
+ shape: {
8727
+ points: [topLeft, topRight, bottomRight, bottomLeft]
8728
+ },
8729
+ style: {
8730
+ fill: color,
8731
+ opacity: lineInfo.rangeAreaOpacity || 0.4,
8732
+ stroke: "none"
8733
+ }
8734
+ };
8735
+ }
8736
+ };
8737
+ },
8296
8738
  // 添加区域样式到泳道图表
8297
8739
  addAreaStyleToSeries(baseSeries, lineInfo, seriesData, min) {
8298
8740
  var _a, _b;
@@ -8432,7 +8874,7 @@ const _sfc_main$2 = {
8432
8874
  } else {
8433
8875
  if (lane && lane.lines) {
8434
8876
  lane.lines.forEach((lineInfo) => {
8435
- var _a, _b;
8877
+ var _a, _b, _c, _d;
8436
8878
  const allSeriesData = this.generateSeriesData(realTimeData, lineInfo, axisKey);
8437
8879
  const { min, max } = this.getXAxisRangeByHeader(lineInfo, allSeriesData);
8438
8880
  const isLogScale = lane.isLogScale === "1";
@@ -8455,6 +8897,37 @@ const _sfc_main$2 = {
8455
8897
  newSeriesData.push({ index: seriesIndex, data: finalSeriesData });
8456
8898
  }
8457
8899
  seriesIndex++;
8900
+ const effectScatterPoint = this.getEffectScatterPoint(lineInfo, realTimeData, axisKey);
8901
+ const effectScatterIndex = seriesIndex;
8902
+ const currentEffectScatter = currentOption.series && currentOption.series[effectScatterIndex];
8903
+ let effectScatterData = [];
8904
+ if (effectScatterPoint) {
8905
+ const pointAxisValue = effectScatterPoint.data[1];
8906
+ if (pointAxisValue >= groupMin && pointAxisValue <= groupMax) {
8907
+ effectScatterData = [effectScatterPoint.data];
8908
+ }
8909
+ }
8910
+ if (!currentEffectScatter || JSON.stringify(currentEffectScatter.data) !== JSON.stringify(effectScatterData)) {
8911
+ needUpdate.series = true;
8912
+ if (currentEffectScatter) {
8913
+ newSeriesData.push({ index: effectScatterIndex, data: effectScatterData });
8914
+ } else {
8915
+ const color = lineInfo.themeConfig ? lineInfo.isGradient && ((_d = (_c = this.linearGradientLineColor) == null ? void 0 : _c[this.nowTheme]) == null ? void 0 : _d[lineInfo.paramId]) ? this.linearGradientLineColor[this.nowTheme][lineInfo.paramId] : lineInfo.themeConfig[this.nowTheme].lineColor : lineInfo.lineColor;
8916
+ newSeriesData.push({
8917
+ index: effectScatterIndex,
8918
+ data: effectScatterData,
8919
+ type: "effectScatter",
8920
+ symbol: "circle",
8921
+ symbolSize: getAdaptedFontSize(12),
8922
+ itemStyle: { color, opacity: 1 },
8923
+ tooltip: { show: false },
8924
+ showEffectOn: "render",
8925
+ rippleEffect: { brushType: "stroke", scale: 3, period: 2 },
8926
+ z: (lineInfo.lineSort || 0) + 1
8927
+ });
8928
+ }
8929
+ }
8930
+ seriesIndex++;
8458
8931
  });
8459
8932
  }
8460
8933
  }
@@ -8644,6 +9117,66 @@ const _sfc_main$2 = {
8644
9117
  let data = ((_b = (_a = this.currentToolBarConfig) == null ? void 0 : _a.scaleList) == null ? void 0 : _b.map((item) => item.value)) || [];
8645
9118
  this.$emit("updateScale", data.includes(newsize) ? newsize : `1:${newsize * 100}`);
8646
9119
  }
9120
+ },
9121
+ getLatestLineDataByParamCode() {
9122
+ if (!this.realTimeData || this.realTimeData.length === 0) return {};
9123
+ if (!this.currentTemplate || !this.currentTemplate.lanes || this.currentTemplate.lanes.length === 0) return {};
9124
+ const axisType = this.formCache.axisType;
9125
+ const axisKey = this.currentToolBarConfig.axisTypeList && this.currentToolBarConfig.axisTypeList[axisType] || (axisType === "time" ? "time" : "depth");
9126
+ const sortedData = [...this.realTimeData];
9127
+ if (axisType === "depth") {
9128
+ sortedData.sort((a, b) => {
9129
+ const timestampA = this.toMillisecondTimestamp(a.timestamp);
9130
+ const timestampB = this.toMillisecondTimestamp(b.timestamp);
9131
+ return timestampA - timestampB;
9132
+ });
9133
+ } else if (axisType === "time") {
9134
+ sortedData.sort((a, b) => {
9135
+ const valA = Number(a[axisKey]);
9136
+ const valB = Number(b[axisKey]);
9137
+ return valA - valB;
9138
+ });
9139
+ }
9140
+ const paramCodeMap = /* @__PURE__ */ new Map();
9141
+ this.params.forEach((p) => {
9142
+ if (p.paramCode) {
9143
+ paramCodeMap.set(p.paramId, p.paramCode.split(","));
9144
+ }
9145
+ });
9146
+ const result = {};
9147
+ this.currentTemplate.lanes.forEach((lane) => {
9148
+ if (!lane.lines || lane.lines.length === 0) return;
9149
+ lane.lines.forEach((lineInfo) => {
9150
+ if (lineInfo.isUsed !== "1") return;
9151
+ const paramId = lineInfo.paramId;
9152
+ const codes = paramCodeMap.get(paramId);
9153
+ let latestData = null;
9154
+ for (let i = sortedData.length - 1; i >= 0; i--) {
9155
+ const item = sortedData[i];
9156
+ let value = null;
9157
+ if (Object.prototype.hasOwnProperty.call(item, paramId)) {
9158
+ value = item[paramId];
9159
+ } else if (codes) {
9160
+ for (let j = 0; j < codes.length; j++) {
9161
+ if (Object.prototype.hasOwnProperty.call(item, codes[j])) {
9162
+ value = item[codes[j]];
9163
+ break;
9164
+ }
9165
+ }
9166
+ }
9167
+ if (value !== null && value !== void 0 && value !== "" && Number.isFinite(+value)) {
9168
+ latestData = item;
9169
+ break;
9170
+ }
9171
+ }
9172
+ if (latestData) {
9173
+ result[paramId] = latestData;
9174
+ }
9175
+ });
9176
+ });
9177
+ console.log(result, "最新数据");
9178
+ this.latestLineDataByParamCode = result;
9179
+ return result;
8647
9180
  }
8648
9181
  },
8649
9182
  watch: {
@@ -8746,9 +9279,9 @@ const _sfc_main$2 = {
8746
9279
  }
8747
9280
  }
8748
9281
  console.log(this.realTimeData, "当前数据");
9282
+ this.getLatestLineDataByParamCode();
8749
9283
  this.initWindowSizeRange();
8750
9284
  await this.$nextTick();
8751
- await this.$nextTick();
8752
9285
  this.updateLanesChartOption();
8753
9286
  } else if (newVal.type === "supplementaryData") {
8754
9287
  let data = cloneDeep(newVal && newVal.data) || [];
@@ -8784,6 +9317,7 @@ const _sfc_main$2 = {
8784
9317
  this.realTimeData = this.uniqueByKeys([...this.realTimeData, ...data], "timestamp");
8785
9318
  }
8786
9319
  }
9320
+ this.getLatestLineDataByParamCode();
8787
9321
  if (this.formCache.dataType == "history") {
8788
9322
  let findIndex = this.realTimeData.findIndex(
8789
9323
  (item) => item[this.currentToolBarConfig.axisTypeList && this.currentToolBarConfig.axisTypeList[this.formCache.axisType]] == (this.visibleData[0] && this.visibleData[0][this.currentToolBarConfig.axisTypeList && this.currentToolBarConfig.axisTypeList[this.formCache.axisType]]) || 0
@@ -8847,6 +9381,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
8847
9381
  ], 36)) : (openBlock(), createElementBlock("div", {
8848
9382
  key: 1,
8849
9383
  onWheel: _cache[1] || (_cache[1] = (...args) => $options.handleWheel && $options.handleWheel(...args)),
9384
+ onMouseleave: _cache[2] || (_cache[2] = (...args) => $options.hideAxisPointerAcrossCharts && $options.hideAxisPointerAcrossCharts(...args)),
8850
9385
  class: "kd-lane-chart-lane-container-echart-content",
8851
9386
  style: normalizeStyle($options.getLaneChartContentStyle(lane.laneId))
8852
9387
  }, [
@@ -8867,14 +9402,15 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
8867
9402
  fn: withCtx(() => [
8868
9403
  _ctx.$slots[`content${lane.laneId}`] ? (openBlock(), createElementBlock("div", {
8869
9404
  key: 0,
8870
- onWheel: _cache[2] || (_cache[2] = (...args) => $options.handleWheel && $options.handleWheel(...args)),
9405
+ onWheel: _cache[3] || (_cache[3] = (...args) => $options.handleWheel && $options.handleWheel(...args)),
8871
9406
  class: "kd-lane-chart-lane-container-echart-content",
8872
9407
  style: normalizeStyle($options.getLaneChartContentStyle(lane.laneId))
8873
9408
  }, [
8874
9409
  renderSlot(_ctx.$slots, `content${lane.laneId}`, { lane }, void 0, true)
8875
9410
  ], 36)) : (openBlock(), createElementBlock("div", {
8876
9411
  key: 1,
8877
- onWheel: _cache[3] || (_cache[3] = (...args) => $options.handleWheel && $options.handleWheel(...args)),
9412
+ onWheel: _cache[4] || (_cache[4] = (...args) => $options.handleWheel && $options.handleWheel(...args)),
9413
+ onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.hideAxisPointerAcrossCharts && $options.hideAxisPointerAcrossCharts(...args)),
8878
9414
  class: "kd-lane-chart-lane-container-echart-content",
8879
9415
  style: normalizeStyle($options.getLaneChartContentStyle(lane.laneId))
8880
9416
  }, [
@@ -8899,7 +9435,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
8899
9435
  ])
8900
9436
  ], 512);
8901
9437
  }
8902
- const chartContainer = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-3281ffc5"]]);
9438
+ const chartContainer = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-560cb988"]]);
8903
9439
  const _sfc_main$1 = {
8904
9440
  name: "ParameterPanel",
8905
9441
  props: {