onesight-charts 0.7.2 → 0.7.4

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.
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import BrushLine from "../index";
3
3
  function App() {
4
- var xData = ['2025.10.29', '2025.10.30', '2025.10.31', '2025.11.01', '2025.11.02', '2025.11.03', '2025.11.04', '2025.11.05', '2025.11.06', '2025.11.07', '2025.11.08', '2025.11.09', '2025.11.10'];
4
+ var xData = ['2025-10-14 08:00:00', '2025-10-15 08:00:00', '2025-10-16 08:00:00', '2025-10-17 08:00:00', '2025-10-18 08:00:00', '2025-10-19 08:00:00', '2025-10-20 08:00:00', '2025-10-21 08:00:00', '2025-10-22 08:00:00', '2025-10-23 08:00:00', '2025-10-24 08:00:00', '2025-10-25 08:00:00', '2025-10-26 08:00:00'];
5
5
  var yData = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300];
6
6
 
7
7
  // type: 'dataPointType' | 'tooltipType'
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1
7
  import * as echarts from 'echarts';
2
8
  import React, { useEffect, useRef } from 'react';
3
9
  import { numberFormat } from "../../utils/chartUtils";
@@ -16,9 +22,40 @@ function BrushLine(props) {
16
22
  _props$handleClick = props.handleClick,
17
23
  handleClick = _props$handleClick === void 0 ? function () {} : _props$handleClick;
18
24
  var chartRef = useRef(null);
25
+
26
+ // 创建别名映射(目前为空,如果将来需要支持别名可以扩展)
27
+ var aliasMap = {};
19
28
  useEffect(function () {
20
29
  init();
30
+ bindClickEvents();
31
+ return function () {
32
+ unbindClickEvents();
33
+ };
21
34
  }, []);
35
+ var onChartClick = function onChartClick(event) {
36
+ var seriesNameElement = event.target.closest('.item');
37
+ if (seriesNameElement) {
38
+ var seriesItem = seriesNameElement.getAttribute('data-series-item');
39
+ var seriesData = JSON.parse(seriesItem);
40
+ // 使用 dataIndex 从原始 xData 获取原始日期
41
+ if (seriesData.dataIndex !== undefined && xData && Array.isArray(xData) && xData[seriesData.dataIndex]) {
42
+ seriesData.date = xData[seriesData.dataIndex];
43
+ }
44
+ // 添加 alias 到 seriesData
45
+ if (seriesData.seriesName && aliasMap[seriesData.seriesName]) {
46
+ seriesData.alias = aliasMap[seriesData.seriesName];
47
+ }
48
+ handleClick && handleClick('tooltipType', seriesData);
49
+ }
50
+ };
51
+ var bindClickEvents = function bindClickEvents() {
52
+ var chartElement = chartRef.current;
53
+ chartElement && chartElement.addEventListener('click', onChartClick);
54
+ };
55
+ var unbindClickEvents = function unbindClickEvents() {
56
+ var chartElement = chartRef.current;
57
+ chartElement && chartElement.removeEventListener('click', onChartClick);
58
+ };
22
59
  function formatNum(d) {
23
60
  if (isNaN(d) || d === null) {
24
61
  return '-';
@@ -26,6 +63,48 @@ function BrushLine(props) {
26
63
  return numberFormat(d);
27
64
  }
28
65
  }
66
+ function formatDateTime(dateTimeStr) {
67
+ // 将 "2025-10-14 08:00:00" 格式转换为 "10/14\n08:00" (两行显示)
68
+ if (typeof dateTimeStr === 'string' && dateTimeStr.includes('-')) {
69
+ var dateTime = dateTimeStr.split(' ');
70
+ if (dateTime.length === 2) {
71
+ var datePart = dateTime[0]; // "2025-10-14"
72
+ var timePart = dateTime[1]; // "08:00:00"
73
+ var _datePart$split = datePart.split('-'),
74
+ _datePart$split2 = _slicedToArray(_datePart$split, 3),
75
+ year = _datePart$split2[0],
76
+ month = _datePart$split2[1],
77
+ day = _datePart$split2[2];
78
+ var _timePart$split = timePart.split(':'),
79
+ _timePart$split2 = _slicedToArray(_timePart$split, 2),
80
+ hour = _timePart$split2[0],
81
+ minute = _timePart$split2[1];
82
+ return "".concat(month, "/").concat(day, "\n").concat(hour, ":").concat(minute);
83
+ }
84
+ }
85
+ return dateTimeStr;
86
+ }
87
+ function formatDateTimeForTooltip(dateTimeStr) {
88
+ // 将 "2025-10-14 08:00:00" 格式转换为 "10/14 08:00" (tooltip 中单行显示)
89
+ if (typeof dateTimeStr === 'string' && dateTimeStr.includes('-')) {
90
+ var dateTime = dateTimeStr.split(' ');
91
+ if (dateTime.length === 2) {
92
+ var datePart = dateTime[0]; // "2025-10-14"
93
+ var timePart = dateTime[1]; // "08:00:00"
94
+ var _datePart$split3 = datePart.split('-'),
95
+ _datePart$split4 = _slicedToArray(_datePart$split3, 3),
96
+ year = _datePart$split4[0],
97
+ month = _datePart$split4[1],
98
+ day = _datePart$split4[2];
99
+ var _timePart$split3 = timePart.split(':'),
100
+ _timePart$split4 = _slicedToArray(_timePart$split3, 2),
101
+ hour = _timePart$split4[0],
102
+ minute = _timePart$split4[1];
103
+ return "".concat(month, "/").concat(day, " ").concat(hour, ":").concat(minute);
104
+ }
105
+ }
106
+ return dateTimeStr;
107
+ }
29
108
  var init = function init() {
30
109
  var myChart = null;
31
110
  var myDom = chartRef.current;
@@ -49,8 +128,17 @@ function BrushLine(props) {
49
128
  formatter: function formatter(res) {
50
129
  var _res$ = res[0],
51
130
  axisValue = _res$.axisValue,
52
- data = _res$.data;
53
- return "<div class=\"brush-line-tooltip-wrap\">\n <div class='brush-line-tooltip-title'>".concat(axisValue, "</div>\n <div class=\"brush-line-tooltip-content\">\n <span class=\"brush-line-tooltip-item\">\n <i class=\"brush-line-tooltip-icon\" style=\"background:#1DA9A0\"></i>\n ").concat(tooltipItemName, "\n </span>\n <span class=\"brush-line-tooltip-item-value\">").concat(formatNum(data), "</span>\n </div>\n </div>");
131
+ data = _res$.data,
132
+ dataIndex = _res$.dataIndex;
133
+ // 构建 seriesData 对象,用于点击事件
134
+ var seriesData = {
135
+ seriesName: tooltipItemName,
136
+ value: data,
137
+ date: axisValue,
138
+ dataIndex: dataIndex,
139
+ color: '#1DA9A0'
140
+ };
141
+ return "<div class=\"brush-line-tooltip-wrap\">\n <div class='brush-line-tooltip-title'>".concat(formatDateTimeForTooltip(axisValue), "</div>\n <div class=\"brush-line-tooltip-content\">\n <span class=\"brush-line-tooltip-item item\" data-series-item='").concat(JSON.stringify(seriesData), "'>\n <i class=\"brush-line-tooltip-icon\" style=\"background:#1DA9A0\"></i>\n ").concat(tooltipItemName, "\n </span>\n <span class=\"brush-line-tooltip-item-value\">").concat(formatNum(data), "</span>\n </div>\n </div>");
54
142
  }
55
143
  },
56
144
  grid: {
@@ -80,7 +168,7 @@ function BrushLine(props) {
80
168
  fontSize: 12,
81
169
  lineHeight: 15,
82
170
  formatter: function formatter(v) {
83
- return '2025.10.29';
171
+ return formatDateTime(v);
84
172
  }
85
173
  },
86
174
  axisPointer: {
@@ -1,7 +1,9 @@
1
1
  import { StackedBar } from "../../..";
2
+ import React from 'react';
2
3
  var yAxisData = ['英语', '中文', '日语', '西班牙语', '韩语', '法语', '越南语'];
3
4
  var series = [{
4
5
  name: '编辑人测试5',
6
+ alias: '别名1',
5
7
  type: 'bar',
6
8
  stack: 'total',
7
9
  label: {
@@ -17,6 +19,7 @@ var series = [{
17
19
  },
18
20
  barWidth: 16,
19
21
  barMinHeight: 2,
22
+ color: 'red',
20
23
  data: [{
21
24
  total: 104,
22
25
  monitor_id: 7230265,
@@ -69,6 +72,7 @@ var series = [{
69
72
  }]
70
73
  }, {
71
74
  name: '编辑人测试1',
75
+ alias: '别名2',
72
76
  type: 'bar',
73
77
  stack: 'total',
74
78
  label: {
@@ -84,6 +88,7 @@ var series = [{
84
88
  },
85
89
  barWidth: 16,
86
90
  barMinHeight: 2,
91
+ color: 'blue',
87
92
  data: [{
88
93
  total: 210,
89
94
  monitor_id: 7020210,
@@ -137,6 +142,7 @@ var series = [{
137
142
  }]
138
143
  }, {
139
144
  name: '测试对比分享3',
145
+ alias: '别名3',
140
146
  type: 'bar',
141
147
  stack: 'total',
142
148
  label: {
@@ -152,6 +158,7 @@ var series = [{
152
158
  },
153
159
  barWidth: 16,
154
160
  barMinHeight: 2,
161
+ color: 'green',
155
162
  data: [{
156
163
  total: null,
157
164
  monitor_id: 7230266,
@@ -209,6 +216,7 @@ var series = [{
209
216
  }]
210
217
  }, {
211
218
  name: '测试时间更新5',
219
+ alias: '别名4',
212
220
  type: 'bar',
213
221
  stack: 'total',
214
222
  label: {
@@ -224,6 +232,7 @@ var series = [{
224
232
  },
225
233
  barWidth: 16,
226
234
  barMinHeight: 2,
235
+ color: 'yellow',
227
236
  data: [{
228
237
  total: 144,
229
238
  monitor_id: 7080262,
@@ -243,7 +243,8 @@ function StackedBar(props) {
243
243
  value: num,
244
244
  proportion: num / total,
245
245
  name: res[0].name,
246
- originalName: originalName
246
+ originalName: originalName,
247
+ alias: item.alias
247
248
  };
248
249
  });
249
250
  }
@@ -385,7 +386,14 @@ function StackedBar(props) {
385
386
  myChart.off('click');
386
387
  myChart.on('click', function (params) {
387
388
  // 点击回调函数
388
- handleClick && handleClick('dataPointType', params);
389
+ // series 中找到对应的 alias 字段
390
+ var seriesItem = series.find(function (s) {
391
+ return s.name === params.seriesName;
392
+ });
393
+ var paramsWithAlias = _objectSpread(_objectSpread({}, params), {}, {
394
+ alias: seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.alias
395
+ });
396
+ handleClick && handleClick('dataPointType', paramsWithAlias);
389
397
  });
390
398
  var currentIndex = 0;
391
399
  myChart.off('showTip');
@@ -36,19 +36,19 @@ var import_react = __toESM(require("react"));
36
36
  var import__ = __toESM(require("../index"));
37
37
  function App() {
38
38
  const xData = [
39
- "2025.10.29",
40
- "2025.10.30",
41
- "2025.10.31",
42
- "2025.11.01",
43
- "2025.11.02",
44
- "2025.11.03",
45
- "2025.11.04",
46
- "2025.11.05",
47
- "2025.11.06",
48
- "2025.11.07",
49
- "2025.11.08",
50
- "2025.11.09",
51
- "2025.11.10"
39
+ "2025-10-14 08:00:00",
40
+ "2025-10-15 08:00:00",
41
+ "2025-10-16 08:00:00",
42
+ "2025-10-17 08:00:00",
43
+ "2025-10-18 08:00:00",
44
+ "2025-10-19 08:00:00",
45
+ "2025-10-20 08:00:00",
46
+ "2025-10-21 08:00:00",
47
+ "2025-10-22 08:00:00",
48
+ "2025-10-23 08:00:00",
49
+ "2025-10-24 08:00:00",
50
+ "2025-10-25 08:00:00",
51
+ "2025-10-26 08:00:00"
52
52
  ];
53
53
  const yData = [
54
54
  100,
@@ -47,9 +47,36 @@ function BrushLine(props) {
47
47
  }
48
48
  } = props;
49
49
  const chartRef = (0, import_react.useRef)(null);
50
+ const aliasMap = {};
50
51
  (0, import_react.useEffect)(() => {
51
52
  init2();
53
+ bindClickEvents();
54
+ return () => {
55
+ unbindClickEvents();
56
+ };
52
57
  }, []);
58
+ const onChartClick = (event) => {
59
+ const seriesNameElement = event.target.closest(".item");
60
+ if (seriesNameElement) {
61
+ const seriesItem = seriesNameElement.getAttribute("data-series-item");
62
+ const seriesData = JSON.parse(seriesItem);
63
+ if (seriesData.dataIndex !== void 0 && xData && Array.isArray(xData) && xData[seriesData.dataIndex]) {
64
+ seriesData.date = xData[seriesData.dataIndex];
65
+ }
66
+ if (seriesData.seriesName && aliasMap[seriesData.seriesName]) {
67
+ seriesData.alias = aliasMap[seriesData.seriesName];
68
+ }
69
+ handleClick && handleClick("tooltipType", seriesData);
70
+ }
71
+ };
72
+ const bindClickEvents = () => {
73
+ const chartElement = chartRef.current;
74
+ chartElement && chartElement.addEventListener("click", onChartClick);
75
+ };
76
+ const unbindClickEvents = () => {
77
+ const chartElement = chartRef.current;
78
+ chartElement && chartElement.removeEventListener("click", onChartClick);
79
+ };
53
80
  function formatNum(d) {
54
81
  if (isNaN(d) || d === null) {
55
82
  return "-";
@@ -57,6 +84,33 @@ function BrushLine(props) {
57
84
  return (0, import_chartUtils.numberFormat)(d);
58
85
  }
59
86
  }
87
+ function formatDateTime(dateTimeStr) {
88
+ if (typeof dateTimeStr === "string" && dateTimeStr.includes("-")) {
89
+ const dateTime = dateTimeStr.split(" ");
90
+ if (dateTime.length === 2) {
91
+ const datePart = dateTime[0];
92
+ const timePart = dateTime[1];
93
+ const [year, month, day] = datePart.split("-");
94
+ const [hour, minute] = timePart.split(":");
95
+ return `${month}/${day}
96
+ ${hour}:${minute}`;
97
+ }
98
+ }
99
+ return dateTimeStr;
100
+ }
101
+ function formatDateTimeForTooltip(dateTimeStr) {
102
+ if (typeof dateTimeStr === "string" && dateTimeStr.includes("-")) {
103
+ const dateTime = dateTimeStr.split(" ");
104
+ if (dateTime.length === 2) {
105
+ const datePart = dateTime[0];
106
+ const timePart = dateTime[1];
107
+ const [year, month, day] = datePart.split("-");
108
+ const [hour, minute] = timePart.split(":");
109
+ return `${month}/${day} ${hour}:${minute}`;
110
+ }
111
+ }
112
+ return dateTimeStr;
113
+ }
60
114
  const init2 = () => {
61
115
  let myChart = null;
62
116
  const myDom = chartRef.current;
@@ -78,11 +132,22 @@ function BrushLine(props) {
78
132
  // alwaysShowContent: true,
79
133
  // hideDelay: 1000000000,
80
134
  formatter: function(res) {
81
- const { axisValue, data } = res[0];
135
+ const { axisValue, data, dataIndex } = res[0];
136
+ const seriesData = {
137
+ seriesName: tooltipItemName,
138
+ value: data,
139
+ date: axisValue,
140
+ dataIndex,
141
+ color: "#1DA9A0"
142
+ };
82
143
  return `<div class="brush-line-tooltip-wrap">
83
- <div class='brush-line-tooltip-title'>${axisValue}</div>
144
+ <div class='brush-line-tooltip-title'>${formatDateTimeForTooltip(
145
+ axisValue
146
+ )}</div>
84
147
  <div class="brush-line-tooltip-content">
85
- <span class="brush-line-tooltip-item">
148
+ <span class="brush-line-tooltip-item item" data-series-item='${JSON.stringify(
149
+ seriesData
150
+ )}'>
86
151
  <i class="brush-line-tooltip-icon" style="background:#1DA9A0"></i>
87
152
  ${tooltipItemName}
88
153
  </span>
@@ -120,7 +185,7 @@ function BrushLine(props) {
120
185
  fontSize: 12,
121
186
  lineHeight: 15,
122
187
  formatter: function(v) {
123
- return "2025.10.29";
188
+ return formatDateTime(v);
124
189
  }
125
190
  },
126
191
  axisPointer: {
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
 
19
29
  // src/components/stacked-bar/demo/base.jsx
@@ -23,6 +33,7 @@ __export(base_exports, {
23
33
  });
24
34
  module.exports = __toCommonJS(base_exports);
25
35
  var import_onesight_charts = require("../../..");
36
+ var import_react = __toESM(require("react"));
26
37
  var yAxisData = [
27
38
  "英语",
28
39
  "中文",
@@ -35,6 +46,7 @@ var yAxisData = [
35
46
  var series = [
36
47
  {
37
48
  name: "编辑人测试5",
49
+ alias: "别名1",
38
50
  type: "bar",
39
51
  stack: "total",
40
52
  label: {
@@ -50,6 +62,7 @@ var series = [
50
62
  },
51
63
  barWidth: 16,
52
64
  barMinHeight: 2,
65
+ color: "red",
53
66
  data: [
54
67
  {
55
68
  total: 104,
@@ -111,6 +124,7 @@ var series = [
111
124
  },
112
125
  {
113
126
  name: "编辑人测试1",
127
+ alias: "别名2",
114
128
  type: "bar",
115
129
  stack: "total",
116
130
  label: {
@@ -126,6 +140,7 @@ var series = [
126
140
  },
127
141
  barWidth: 16,
128
142
  barMinHeight: 2,
143
+ color: "blue",
129
144
  data: [
130
145
  {
131
146
  total: 210,
@@ -188,6 +203,7 @@ var series = [
188
203
  },
189
204
  {
190
205
  name: "测试对比分享3",
206
+ alias: "别名3",
191
207
  type: "bar",
192
208
  stack: "total",
193
209
  label: {
@@ -203,6 +219,7 @@ var series = [
203
219
  },
204
220
  barWidth: 16,
205
221
  barMinHeight: 2,
222
+ color: "green",
206
223
  data: [
207
224
  {
208
225
  total: null,
@@ -269,6 +286,7 @@ var series = [
269
286
  },
270
287
  {
271
288
  name: "测试时间更新5",
289
+ alias: "别名4",
272
290
  type: "bar",
273
291
  stack: "total",
274
292
  label: {
@@ -284,6 +302,7 @@ var series = [
284
302
  },
285
303
  barWidth: 16,
286
304
  barMinHeight: 2,
305
+ color: "yellow",
287
306
  data: [
288
307
  {
289
308
  total: 144,
@@ -351,7 +370,7 @@ var handleClick = (type, params) => {
351
370
  console.log("params", params);
352
371
  };
353
372
  function App() {
354
- return /* @__PURE__ */ React.createElement("div", { style: { height: "340px" } }, /* @__PURE__ */ React.createElement(
373
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: { height: "340px" } }, /* @__PURE__ */ import_react.default.createElement(
355
374
  import_onesight_charts.StackedBar,
356
375
  {
357
376
  yAxisData,
@@ -247,7 +247,8 @@ function StackedBar(props) {
247
247
  value: num,
248
248
  proportion: num / total,
249
249
  name: res[0].name,
250
- originalName
250
+ originalName,
251
+ alias: item.alias
251
252
  };
252
253
  });
253
254
  }
@@ -419,7 +420,12 @@ function StackedBar(props) {
419
420
  };
420
421
  myChart.off("click");
421
422
  myChart.on("click", function(params) {
422
- handleClick && handleClick("dataPointType", params);
423
+ const seriesItem = series.find((s) => s.name === params.seriesName);
424
+ const paramsWithAlias = {
425
+ ...params,
426
+ alias: seriesItem == null ? void 0 : seriesItem.alias
427
+ };
428
+ handleClick && handleClick("dataPointType", paramsWithAlias);
423
429
  });
424
430
  let currentIndex = 0;
425
431
  myChart.off("showTip");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "onesight-charts",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "private": false,
5
5
  "description": "OneSight前端图表公共组件库",
6
6
  "license": "MIT",