@xq-labs/data-ui-v2 0.2.1 → 0.3.0
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/README.md +38 -12
- package/docs/api/overview.md +222 -28
- package/docs/examples/bar-line-chart.md +24 -3
- package/docs/examples/local-development.md +191 -0
- package/docs/examples/pie-chart.md +19 -8
- package/docs/examples/radar-chart.md +97 -0
- package/es/bar-line-chart/index.js +2 -2
- package/es/{colors-ca059479.js → colors-ec0ad9ce.js} +10 -1
- package/es/index-788e473f.js +471 -0
- package/es/{index-d151eeca.js → index-78b6b881.js} +97 -58
- package/es/{index-017ccf86.js → index-d01ce220.js} +116 -7
- package/es/index.js +7 -5
- package/es/pie-chart/3d-runtime.js +6 -0
- package/es/pie-chart/index.js +2 -2
- package/es/radar-chart/index.js +13 -0
- package/lib/bar-line-chart/index.js +2 -2
- package/lib/{colors-55265c91.js → colors-19a7242d.js} +10 -0
- package/lib/index-6039f724.js +492 -0
- package/lib/{index-7abf647e.js → index-a0ecafa1.js} +96 -58
- package/lib/{index-b9e0c40b.js → index-cc49894a.js} +115 -6
- package/lib/index.js +7 -4
- package/lib/pie-chart/3d-runtime.js +27 -0
- package/lib/pie-chart/index.js +2 -2
- package/lib/radar-chart/index.js +19 -0
- package/package.json +12 -2
- package/pie-chart/3d-runtime.js +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var colors = require('./colors-
|
|
3
|
+
var colors = require('./colors-19a7242d.js');
|
|
4
4
|
var echarts = require('echarts/core');
|
|
5
5
|
var charts = require('echarts/charts');
|
|
6
6
|
var components = require('echarts/components');
|
|
@@ -90,10 +90,11 @@ var PIE_HEIGHT_MODE = {
|
|
|
90
90
|
VALUE: 'value'
|
|
91
91
|
};
|
|
92
92
|
var DEFAULT_HEIGHT_RANGE = {
|
|
93
|
-
min:
|
|
94
|
-
max:
|
|
93
|
+
min: 10,
|
|
94
|
+
max: 25
|
|
95
95
|
};
|
|
96
|
-
var
|
|
96
|
+
var DEFAULT_3D_VIEW_DISTANCE = 120;
|
|
97
|
+
var DEFAULT_3D_VIEW_ALPHA = 55;
|
|
97
98
|
var DEFAULT_INTERNAL_DIAMETER_RATIO = 0.6;
|
|
98
99
|
var DEFAULT_ROSE_RADIUS_RANGE = [0.75, 1.15];
|
|
99
100
|
var DEFAULT_LABEL_OPTIONS = {
|
|
@@ -111,6 +112,17 @@ var DEFAULT_LABEL_OPTIONS = {
|
|
|
111
112
|
verticalGap: 8,
|
|
112
113
|
radialOffset: 0.12
|
|
113
114
|
};
|
|
115
|
+
var DEFAULT_TOOLTIP_STYLE = {
|
|
116
|
+
backgroundColor: '#fff',
|
|
117
|
+
borderColor: 'transparent',
|
|
118
|
+
borderWidth: 0,
|
|
119
|
+
padding: [8, 12],
|
|
120
|
+
textStyle: {
|
|
121
|
+
color: '#333',
|
|
122
|
+
fontSize: 12
|
|
123
|
+
},
|
|
124
|
+
extraCssText: 'box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); border-radius: 4px;'
|
|
125
|
+
};
|
|
114
126
|
|
|
115
127
|
/**
|
|
116
128
|
* 将输入值转为安全数字。
|
|
@@ -217,6 +229,9 @@ function buildPieChartData(data) {
|
|
|
217
229
|
function replaceLabelTemplate(template, params) {
|
|
218
230
|
return template.replace(/\{b\}/g, params.name).replace(/\{c\}/g, params.value).replace(/\{d\}/g, params.percent);
|
|
219
231
|
}
|
|
232
|
+
function escapeTooltipHtml(value) {
|
|
233
|
+
return String(value).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
234
|
+
}
|
|
220
235
|
function formatPieLabelText(formatter, params) {
|
|
221
236
|
if (typeof formatter === 'function') {
|
|
222
237
|
return formatter(params);
|
|
@@ -226,29 +241,65 @@ function formatPieLabelText(formatter, params) {
|
|
|
226
241
|
}
|
|
227
242
|
return "".concat(params.name, "\n").concat(params.percent, "%");
|
|
228
243
|
}
|
|
244
|
+
function createFallbackTooltipMarker(color) {
|
|
245
|
+
var markerColor = escapeTooltipHtml(color || '#6B98F8');
|
|
246
|
+
return "<span style=\"display:inline-block;margin-right:4px;border-radius:50%;width:10px;height:10px;background-color:".concat(markerColor, ";\"></span>");
|
|
247
|
+
}
|
|
248
|
+
function formatPieTooltipContent(_ref) {
|
|
249
|
+
var marker = _ref.marker,
|
|
250
|
+
name = _ref.name,
|
|
251
|
+
value = _ref.value,
|
|
252
|
+
color = _ref.color;
|
|
253
|
+
var safeMarker = marker || createFallbackTooltipMarker(color);
|
|
254
|
+
return "".concat(safeMarker).concat(escapeTooltipHtml(name), ":").concat(escapeTooltipHtml(value));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* 创建饼图统一 hover tooltip 样式。
|
|
259
|
+
* 默认呈现为白底阴影卡片,内容为“彩色圆点 + 名称:值”,贴近业务看板常见展示形态。
|
|
260
|
+
*/
|
|
261
|
+
function createPieTooltipOption(formatter) {
|
|
262
|
+
return colors._objectSpread2(colors._objectSpread2({}, DEFAULT_TOOLTIP_STYLE), {}, {
|
|
263
|
+
formatter: formatter
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
function formatPie2DTooltip() {
|
|
267
|
+
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
268
|
+
return formatPieTooltipContent({
|
|
269
|
+
marker: params.marker,
|
|
270
|
+
name: params.name === undefined ? '' : params.name,
|
|
271
|
+
value: params.value === undefined ? '' : params.value,
|
|
272
|
+
color: params.color
|
|
273
|
+
});
|
|
274
|
+
}
|
|
229
275
|
|
|
230
276
|
/**
|
|
231
277
|
* 格式化 3D 饼图默认 tooltip 文案。
|
|
232
278
|
* surface 系列 hover 时拿到的 `params.value` 实际是参数方程采样值,
|
|
233
279
|
* 不能直接当业务值展示,因此统一回退到扇区自身的 `pieData`。
|
|
234
280
|
*/
|
|
235
|
-
function
|
|
236
|
-
return
|
|
281
|
+
function formatPie3DTooltip(params, pieData) {
|
|
282
|
+
return formatPieTooltipContent({
|
|
283
|
+
marker: params && params.marker,
|
|
284
|
+
name: pieData && pieData.name !== undefined ? pieData.name : '',
|
|
285
|
+
value: pieData && pieData.value !== undefined ? pieData.value : 0,
|
|
286
|
+
color: pieData && pieData.itemStyle && pieData.itemStyle.color
|
|
287
|
+
});
|
|
237
288
|
}
|
|
238
289
|
|
|
239
290
|
/**
|
|
240
291
|
* 为单个 3D 扇区生成专用 tooltip。
|
|
241
292
|
* 这样即使鼠标落在 surface 网格采样点上,展示的仍然是业务名称、原始值与百分比。
|
|
242
293
|
*/
|
|
243
|
-
function createPie3DTooltip(pieData
|
|
294
|
+
function createPie3DTooltip(pieData) {
|
|
244
295
|
var value = toNumber(pieData && pieData.value, 0);
|
|
245
|
-
var percent = totalValue > 0 ? Number((value / totalValue * 100).toFixed(2)) : 0;
|
|
246
296
|
var name = pieData && pieData.name !== undefined ? pieData.name : '';
|
|
247
|
-
return {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
297
|
+
return createPieTooltipOption(function (params) {
|
|
298
|
+
return formatPie3DTooltip(params, colors._objectSpread2(colors._objectSpread2({}, pieData), {}, {
|
|
299
|
+
name: name,
|
|
300
|
+
value: value
|
|
301
|
+
}));
|
|
302
|
+
});
|
|
252
303
|
}
|
|
253
304
|
function multiplyMat4Vec4(matrix, vector) {
|
|
254
305
|
return [matrix[0] * vector[0] + matrix[4] * vector[1] + matrix[8] * vector[2] + matrix[12] * vector[3], matrix[1] * vector[0] + matrix[5] * vector[1] + matrix[9] * vector[2] + matrix[13] * vector[3], matrix[2] * vector[0] + matrix[6] * vector[1] + matrix[10] * vector[2] + matrix[14] * vector[3], matrix[3] * vector[0] + matrix[7] * vector[1] + matrix[11] * vector[2] + matrix[15] * vector[3]];
|
|
@@ -457,11 +508,9 @@ function createHeightValues(values, mode, minHeight, maxHeight) {
|
|
|
457
508
|
}
|
|
458
509
|
return mapValueToRange(values, safeMinHeight, safeMaxHeight);
|
|
459
510
|
}
|
|
460
|
-
function
|
|
461
|
-
var baseDistance = showLabelLine ? 175 : 180;
|
|
462
|
-
var extraDistance = Math.max(0, maxHeight - 200) * 0.18;
|
|
511
|
+
function createDefaultViewControl() {
|
|
463
512
|
return {
|
|
464
|
-
distance:
|
|
513
|
+
distance: DEFAULT_3D_VIEW_DISTANCE,
|
|
465
514
|
alpha: DEFAULT_3D_VIEW_ALPHA
|
|
466
515
|
};
|
|
467
516
|
}
|
|
@@ -598,9 +647,6 @@ function buildPie3DSeries(pieData) {
|
|
|
598
647
|
var valueList = renderPieData.map(function (item) {
|
|
599
648
|
return Math.max(0, toNumber(item.value, 0));
|
|
600
649
|
});
|
|
601
|
-
var totalValue = valueList.reduce(function (sum, value) {
|
|
602
|
-
return sum + value;
|
|
603
|
-
}, 0);
|
|
604
650
|
var angleValueList = getAngleValueList(valueList);
|
|
605
651
|
var totalAngleValue = angleValueList.reduce(function (sum, value) {
|
|
606
652
|
return sum + value;
|
|
@@ -634,7 +680,7 @@ function buildPie3DSeries(pieData) {
|
|
|
634
680
|
selected: false,
|
|
635
681
|
hovered: false
|
|
636
682
|
},
|
|
637
|
-
tooltip: createPie3DTooltip(item
|
|
683
|
+
tooltip: createPie3DTooltip(item),
|
|
638
684
|
itemStyle: colors._objectSpread2({}, item.itemStyle),
|
|
639
685
|
parametricEquation: getParametricEquation(startRatio, endRatio, false, false, geometry)
|
|
640
686
|
};
|
|
@@ -729,7 +775,7 @@ function createPie3DOption(input, variant) {
|
|
|
729
775
|
hideZeroValueSlices: input.hideZeroValueSlices !== false
|
|
730
776
|
};
|
|
731
777
|
var pie3D = buildPie3DSeries(data, chartConfig);
|
|
732
|
-
var viewControl =
|
|
778
|
+
var viewControl = createDefaultViewControl();
|
|
733
779
|
return {
|
|
734
780
|
xAxis3D: {
|
|
735
781
|
min: -pie3D.axisLimit,
|
|
@@ -916,10 +962,9 @@ function buildPieOption() {
|
|
|
916
962
|
});
|
|
917
963
|
var baseOption = {
|
|
918
964
|
color: colors.DEFAULT_COLORS,
|
|
919
|
-
tooltip: {
|
|
920
|
-
trigger: 'item'
|
|
921
|
-
|
|
922
|
-
},
|
|
965
|
+
tooltip: colors._objectSpread2({
|
|
966
|
+
trigger: 'item'
|
|
967
|
+
}, createPieTooltipOption(formatPie2DTooltip)),
|
|
923
968
|
legend: {
|
|
924
969
|
data: normalizedData.map(function (item) {
|
|
925
970
|
return item.name;
|
|
@@ -948,33 +993,26 @@ function buildPieOption() {
|
|
|
948
993
|
return colors.mergeChartOption(colors.mergeChartOption(baseOption, presetOption, variantOption), customOption);
|
|
949
994
|
}
|
|
950
995
|
|
|
951
|
-
var
|
|
952
|
-
var
|
|
953
|
-
var
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
return runtimeError;
|
|
958
|
-
};
|
|
959
|
-
var importRuntime = function importRuntime() {
|
|
960
|
-
var dynamicImport = new Function('packageName', 'return import(packageName)');
|
|
961
|
-
return dynamicImport(ECHARTS_GL_PACKAGE_NAME);
|
|
996
|
+
var SURFACE_SERIES_TYPE = 'series.surface';
|
|
997
|
+
var MISSING_RUNTIME_MESSAGE = "使用 PieChart 3D 能力前,请先在业务页面中执行 import '@xq-labs/data-ui-v2/pie-chart/3d-runtime'。";
|
|
998
|
+
var hasSurfaceSeriesRuntime = function hasSurfaceSeriesRuntime() {
|
|
999
|
+
return echarts.SeriesModel && (typeof echarts.SeriesModel.getClass === 'function' && !!echarts.SeriesModel.getClass('series', 'surface') || typeof echarts.SeriesModel.getClassesByMainType === 'function' && echarts.SeriesModel.getClassesByMainType('series').some(function (seriesClass) {
|
|
1000
|
+
return seriesClass && seriesClass.type === SURFACE_SERIES_TYPE;
|
|
1001
|
+
}));
|
|
962
1002
|
};
|
|
963
1003
|
|
|
964
1004
|
/**
|
|
965
|
-
*
|
|
1005
|
+
* 检测 PieChart 3D 运行时是否已经由业务项目接入。
|
|
966
1006
|
*
|
|
967
|
-
*
|
|
968
|
-
*
|
|
1007
|
+
* 方案 B 修订版下,组件库不再负责动态加载 `echarts-gl`,
|
|
1008
|
+
* 而是要求业务项目在使用 3D PieChart 的页面中显式执行桥接入口:
|
|
1009
|
+
* `import '@xq-labs/data-ui-v2/pie-chart/3d-runtime'`
|
|
969
1010
|
*/
|
|
970
1011
|
function ensureEchartsGlRuntime() {
|
|
971
|
-
if (
|
|
972
|
-
|
|
973
|
-
runtimePromise = null;
|
|
974
|
-
throw createMissingRuntimeError(error);
|
|
975
|
-
});
|
|
1012
|
+
if (hasSurfaceSeriesRuntime()) {
|
|
1013
|
+
return Promise.resolve();
|
|
976
1014
|
}
|
|
977
|
-
return
|
|
1015
|
+
return Promise.reject(new Error(MISSING_RUNTIME_MESSAGE));
|
|
978
1016
|
}
|
|
979
1017
|
|
|
980
1018
|
echarts__namespace.use([charts.PieChart, components.TooltipComponent, components.LegendComponent, components.GridComponent, components.TitleComponent, components.GraphicComponent, renderers.CanvasRenderer]);
|
|
@@ -1049,7 +1087,7 @@ var script = {
|
|
|
1049
1087
|
*/
|
|
1050
1088
|
minHeight: {
|
|
1051
1089
|
type: Number,
|
|
1052
|
-
"default":
|
|
1090
|
+
"default": 10
|
|
1053
1091
|
},
|
|
1054
1092
|
/**
|
|
1055
1093
|
* 3D 模式下的最大扇区高度。
|
|
@@ -1057,7 +1095,7 @@ var script = {
|
|
|
1057
1095
|
*/
|
|
1058
1096
|
maxHeight: {
|
|
1059
1097
|
type: Number,
|
|
1060
|
-
"default":
|
|
1098
|
+
"default": 25
|
|
1061
1099
|
},
|
|
1062
1100
|
/**
|
|
1063
1101
|
* 环图内径比例。
|
|
@@ -1160,13 +1198,13 @@ var script = {
|
|
|
1160
1198
|
},
|
|
1161
1199
|
/**
|
|
1162
1200
|
* 判断当前是否进入 3D 饼图能力。
|
|
1163
|
-
* 只有 3D
|
|
1201
|
+
* 只有 3D 才需要 echarts-gl 桥接入口,2D 场景不应触发任何 3D 运行时依赖。
|
|
1164
1202
|
*/
|
|
1165
1203
|
is3D: function is3D() {
|
|
1166
1204
|
return this.dimension === '3d';
|
|
1167
1205
|
},
|
|
1168
1206
|
/**
|
|
1169
|
-
* 标识 echarts-gl
|
|
1207
|
+
* 标识 echarts-gl 运行时是否已经注册完成。
|
|
1170
1208
|
* 3D option 只有在运行时就绪后才会生成 surface 序列。
|
|
1171
1209
|
*/
|
|
1172
1210
|
isEchartsGlReady: function isEchartsGlReady() {
|
|
@@ -1174,14 +1212,14 @@ var script = {
|
|
|
1174
1212
|
},
|
|
1175
1213
|
/**
|
|
1176
1214
|
* 汇总外部 loading 与 3D 运行时加载状态。
|
|
1177
|
-
* 这样 3D
|
|
1215
|
+
* 这样 3D 首次检测运行时期间,底层 BaseChart 能保持 loading 态。
|
|
1178
1216
|
*/
|
|
1179
1217
|
chartLoading: function chartLoading() {
|
|
1180
1218
|
return this.loading || this.is3D && this.echartsGlStatus === 'loading';
|
|
1181
1219
|
},
|
|
1182
1220
|
/**
|
|
1183
1221
|
* 汇总数据空态与 3D 运行时失败状态。
|
|
1184
|
-
* 缺少
|
|
1222
|
+
* 缺少 3D 桥接运行时时不让 BaseChart 继续渲染空 surface option。
|
|
1185
1223
|
*/
|
|
1186
1224
|
chartEmpty: function chartEmpty() {
|
|
1187
1225
|
return this.isEmpty || this.is3D && this.echartsGlStatus === 'failed';
|
|
@@ -1197,7 +1235,7 @@ var script = {
|
|
|
1197
1235
|
if (this.is3D && this.echartsGlStatus === 'failed') {
|
|
1198
1236
|
return {
|
|
1199
1237
|
empty: colors._objectSpread2(colors._objectSpread2({}, emptyConfig), {}, {
|
|
1200
|
-
text: this.echartsGlErrorMessage ||
|
|
1238
|
+
text: this.echartsGlErrorMessage || "使用 PieChart 3D 能力前,请先在业务页面中执行 import '@xq-labs/data-ui-v2/pie-chart/3d-runtime'。"
|
|
1201
1239
|
}),
|
|
1202
1240
|
loading: colors._objectSpread2({}, loadingConfig)
|
|
1203
1241
|
};
|
|
@@ -1237,7 +1275,7 @@ var script = {
|
|
|
1237
1275
|
watch: {
|
|
1238
1276
|
/**
|
|
1239
1277
|
* dimension 是 2D/3D 分发的公开开关。
|
|
1240
|
-
* 只有切到 3D
|
|
1278
|
+
* 只有切到 3D 时才检测 3D 运行时,避免 2D 使用方被迫安装 3D 运行时。
|
|
1241
1279
|
*/
|
|
1242
1280
|
dimension: {
|
|
1243
1281
|
immediate: true,
|
|
@@ -1269,7 +1307,7 @@ var script = {
|
|
|
1269
1307
|
this.$emit('ready', chart);
|
|
1270
1308
|
},
|
|
1271
1309
|
/**
|
|
1272
|
-
* 在真正进入 3D
|
|
1310
|
+
* 在真正进入 3D 能力时检测 echarts-gl 桥接入口是否已经注册。
|
|
1273
1311
|
*
|
|
1274
1312
|
* 返回 Promise 是为了让单测和后续业务扩展能准确等待状态变化;
|
|
1275
1313
|
* 2D、已就绪、加载中三种场景会直接返回 resolved Promise。
|
|
@@ -1285,7 +1323,7 @@ var script = {
|
|
|
1285
1323
|
_this.echartsGlStatus = 'ready';
|
|
1286
1324
|
})["catch"](function (error) {
|
|
1287
1325
|
_this.echartsGlStatus = 'failed';
|
|
1288
|
-
_this.echartsGlErrorMessage = error && error.message ? error.message :
|
|
1326
|
+
_this.echartsGlErrorMessage = error && error.message ? error.message : "使用 PieChart 3D 能力前,请先在业务页面中执行 import '@xq-labs/data-ui-v2/pie-chart/3d-runtime'。";
|
|
1289
1327
|
_this.$emit('runtime-error', error);
|
|
1290
1328
|
});
|
|
1291
1329
|
},
|
|
@@ -1323,7 +1361,7 @@ var script = {
|
|
|
1323
1361
|
}
|
|
1324
1362
|
};
|
|
1325
1363
|
|
|
1326
|
-
var css_248z = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
|
|
1364
|
+
var css_248z = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
|
|
1327
1365
|
withInstall.styleInject(css_248z);
|
|
1328
1366
|
|
|
1329
1367
|
/* script */
|
|
@@ -1355,7 +1393,7 @@ __vue_render__._withStripped = true;
|
|
|
1355
1393
|
/* style */
|
|
1356
1394
|
var __vue_inject_styles__ = undefined;
|
|
1357
1395
|
/* scoped */
|
|
1358
|
-
var __vue_scope_id__ = "data-v-
|
|
1396
|
+
var __vue_scope_id__ = "data-v-7f129cbd";
|
|
1359
1397
|
/* module identifier */
|
|
1360
1398
|
var __vue_module_identifier__ = undefined;
|
|
1361
1399
|
/* functional template */
|
|
@@ -5,7 +5,7 @@ var charts = require('echarts/charts');
|
|
|
5
5
|
var components = require('echarts/components');
|
|
6
6
|
var renderers = require('echarts/renderers');
|
|
7
7
|
var withInstall = require('./with-install-4304a8ea.js');
|
|
8
|
-
var colors = require('./colors-
|
|
8
|
+
var colors = require('./colors-19a7242d.js');
|
|
9
9
|
|
|
10
10
|
function _interopNamespaceDefault(e) {
|
|
11
11
|
var n = Object.create(null);
|
|
@@ -1079,6 +1079,8 @@ function createCylinderBarLineOption(normalizedInput) {
|
|
|
1079
1079
|
}
|
|
1080
1080
|
|
|
1081
1081
|
var DEFAULT_VARIANT = 'flat';
|
|
1082
|
+
var DEFAULT_X_AXIS_SCROLL_VISIBLE_COUNT = 8;
|
|
1083
|
+
var DEFAULT_X_AXIS_SCROLL_GRID_BOTTOM = 56;
|
|
1082
1084
|
var BAR_LINE_PUBLIC_VARIANTS = ['flat', 'cylinder', 'cube'];
|
|
1083
1085
|
|
|
1084
1086
|
// 公开 variant 能力在此处收口:只允许 flat / cylinder / cube。
|
|
@@ -1124,6 +1126,93 @@ function createBaseOption(normalizedInput) {
|
|
|
1124
1126
|
}
|
|
1125
1127
|
};
|
|
1126
1128
|
}
|
|
1129
|
+
function isValidNumber(value) {
|
|
1130
|
+
return Number.isFinite(Number(value));
|
|
1131
|
+
}
|
|
1132
|
+
function normalizePositiveInteger(value, fallback) {
|
|
1133
|
+
var normalizedValue = Number(value);
|
|
1134
|
+
if (!Number.isFinite(normalizedValue) || normalizedValue <= 0) {
|
|
1135
|
+
return fallback;
|
|
1136
|
+
}
|
|
1137
|
+
return Math.floor(normalizedValue);
|
|
1138
|
+
}
|
|
1139
|
+
function normalizeStartIndex(startIndex) {
|
|
1140
|
+
if (!isValidNumber(startIndex)) {
|
|
1141
|
+
return null;
|
|
1142
|
+
}
|
|
1143
|
+
var normalizedStartIndex = Math.floor(Number(startIndex));
|
|
1144
|
+
return normalizedStartIndex >= 0 ? normalizedStartIndex : null;
|
|
1145
|
+
}
|
|
1146
|
+
function toPercent(value, total) {
|
|
1147
|
+
return Number((value / total * 100).toFixed(2));
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
/**
|
|
1151
|
+
* 归一化横轴滚动配置。
|
|
1152
|
+
* 该配置只服务 X 轴类目过多的场景,不扩展 Y 轴滚动,避免 API 语义变复杂。
|
|
1153
|
+
*/
|
|
1154
|
+
function normalizeXAxisScrollConfig() {
|
|
1155
|
+
var xAxisScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
1156
|
+
var scrollConfig = xAxisScroll && colors._typeof(xAxisScroll) === 'object' ? xAxisScroll : {};
|
|
1157
|
+
return {
|
|
1158
|
+
enabled: scrollConfig.enabled === true,
|
|
1159
|
+
visibleCount: normalizePositiveInteger(scrollConfig.visibleCount, DEFAULT_X_AXIS_SCROLL_VISIBLE_COUNT),
|
|
1160
|
+
startPosition: scrollConfig.startPosition === 'start' ? 'start' : 'end',
|
|
1161
|
+
startIndex: normalizeStartIndex(scrollConfig.startIndex),
|
|
1162
|
+
showSlider: scrollConfig.showSlider !== false,
|
|
1163
|
+
inside: scrollConfig.inside !== false
|
|
1164
|
+
};
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
/**
|
|
1168
|
+
* 根据横轴类目数量生成 ECharts dataZoom。
|
|
1169
|
+
* 默认从末尾向前取 `visibleCount` 个类目,满足“最新数据优先展示”的看板诉求。
|
|
1170
|
+
*/
|
|
1171
|
+
function createXAxisScrollOption() {
|
|
1172
|
+
var categories = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
1173
|
+
var xAxisScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1174
|
+
var scrollConfig = normalizeXAxisScrollConfig(xAxisScroll);
|
|
1175
|
+
var totalCount = Array.isArray(categories) ? categories.length : 0;
|
|
1176
|
+
if (!scrollConfig.enabled || totalCount <= scrollConfig.visibleCount) {
|
|
1177
|
+
return {};
|
|
1178
|
+
}
|
|
1179
|
+
var windowSize = Math.min(scrollConfig.visibleCount, totalCount);
|
|
1180
|
+
var maxStartIndex = totalCount - windowSize;
|
|
1181
|
+
var resolvedStartIndex = scrollConfig.startIndex !== null ? Math.min(scrollConfig.startIndex, maxStartIndex) : scrollConfig.startPosition === 'start' ? 0 : maxStartIndex;
|
|
1182
|
+
var start = toPercent(resolvedStartIndex, totalCount);
|
|
1183
|
+
var end = toPercent(resolvedStartIndex + windowSize, totalCount);
|
|
1184
|
+
var dataZoom = [];
|
|
1185
|
+
if (scrollConfig.showSlider) {
|
|
1186
|
+
dataZoom.push({
|
|
1187
|
+
type: 'slider',
|
|
1188
|
+
xAxisIndex: 0,
|
|
1189
|
+
start: start,
|
|
1190
|
+
end: end,
|
|
1191
|
+
height: 14,
|
|
1192
|
+
bottom: 8,
|
|
1193
|
+
brushSelect: false
|
|
1194
|
+
});
|
|
1195
|
+
}
|
|
1196
|
+
if (scrollConfig.inside) {
|
|
1197
|
+
dataZoom.push({
|
|
1198
|
+
type: 'inside',
|
|
1199
|
+
xAxisIndex: 0,
|
|
1200
|
+
start: start,
|
|
1201
|
+
end: end,
|
|
1202
|
+
zoomLock: true
|
|
1203
|
+
});
|
|
1204
|
+
}
|
|
1205
|
+
if (dataZoom.length === 0) {
|
|
1206
|
+
return {};
|
|
1207
|
+
}
|
|
1208
|
+
return colors._objectSpread2(colors._objectSpread2({}, scrollConfig.showSlider ? {
|
|
1209
|
+
grid: {
|
|
1210
|
+
bottom: DEFAULT_X_AXIS_SCROLL_GRID_BOTTOM
|
|
1211
|
+
}
|
|
1212
|
+
} : {}), {}, {
|
|
1213
|
+
dataZoom: dataZoom
|
|
1214
|
+
});
|
|
1215
|
+
}
|
|
1127
1216
|
|
|
1128
1217
|
/**
|
|
1129
1218
|
* 构建 `BarLineChart` 最终 option。
|
|
@@ -1131,7 +1220,8 @@ function createBaseOption(normalizedInput) {
|
|
|
1131
1220
|
* 1. 输入归一化
|
|
1132
1221
|
* 2. preset 合并
|
|
1133
1222
|
* 3. 变体分发
|
|
1134
|
-
* 4.
|
|
1223
|
+
* 4. X 轴滚动配置合并
|
|
1224
|
+
* 5. customOption 覆盖
|
|
1135
1225
|
*/
|
|
1136
1226
|
function buildBarLineOption() {
|
|
1137
1227
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
@@ -1144,6 +1234,7 @@ function buildBarLineOption() {
|
|
|
1144
1234
|
variant = _ref$variant === void 0 ? 'flat' : _ref$variant,
|
|
1145
1235
|
barWidth = _ref.barWidth,
|
|
1146
1236
|
barGap = _ref.barGap,
|
|
1237
|
+
xAxisScroll = _ref.xAxisScroll,
|
|
1147
1238
|
customOption = _ref.customOption;
|
|
1148
1239
|
var normalizedInput = normalizeBarLineInput({
|
|
1149
1240
|
data: data,
|
|
@@ -1159,7 +1250,8 @@ function buildBarLineOption() {
|
|
|
1159
1250
|
barWidth: barWidth,
|
|
1160
1251
|
barGap: barGap
|
|
1161
1252
|
}));
|
|
1162
|
-
|
|
1253
|
+
var xAxisScrollOption = createXAxisScrollOption(normalizedInput.categories, xAxisScroll);
|
|
1254
|
+
return colors.mergeChartOption(colors.mergeChartOption(colors.mergeChartOption(baseOption, presetOption, variantOption), xAxisScrollOption), customOption);
|
|
1163
1255
|
}
|
|
1164
1256
|
|
|
1165
1257
|
//
|
|
@@ -1181,7 +1273,7 @@ function buildBarLineOption() {
|
|
|
1181
1273
|
* 这里显式注册柱图、折线图、自定义系列以及笛卡尔坐标系常用组件,
|
|
1182
1274
|
* 否则运行时虽然能生成 option,但对应主类型不会真正参与渲染。
|
|
1183
1275
|
*/
|
|
1184
|
-
echarts__namespace.use([charts.BarChart, charts.LineChart, charts.CustomChart, components.TooltipComponent, components.LegendComponent, components.GridComponent, components.TitleComponent, renderers.CanvasRenderer]);
|
|
1276
|
+
echarts__namespace.use([charts.BarChart, charts.LineChart, charts.CustomChart, components.TooltipComponent, components.LegendComponent, components.GridComponent, components.TitleComponent, components.DataZoomComponent, renderers.CanvasRenderer]);
|
|
1185
1277
|
var script = {
|
|
1186
1278
|
name: 'BarLineChart',
|
|
1187
1279
|
components: {
|
|
@@ -1268,6 +1360,22 @@ var script = {
|
|
|
1268
1360
|
return {};
|
|
1269
1361
|
}
|
|
1270
1362
|
},
|
|
1363
|
+
/**
|
|
1364
|
+
* X 轴类目滚动配置。
|
|
1365
|
+
* 仅控制横轴,不扩展 Y 轴;适合月份、日期、地区等类目数量较多的看板场景。
|
|
1366
|
+
* 常用字段:
|
|
1367
|
+
* - enabled: 是否开启 X 轴滚动
|
|
1368
|
+
* - visibleCount: 初始窗口内展示的类目数量,默认按 8 个处理
|
|
1369
|
+
* - startPosition: 初始窗口位置,默认 end,即展示最新一段数据
|
|
1370
|
+
* - startIndex: 指定窗口起始索引;传入合法数字时优先级高于 startPosition
|
|
1371
|
+
* - showSlider / inside: 分别控制底部滚动条与图表内部滚轮/触控滚动
|
|
1372
|
+
*/
|
|
1373
|
+
xAxisScroll: {
|
|
1374
|
+
type: Object,
|
|
1375
|
+
"default": function _default() {
|
|
1376
|
+
return {};
|
|
1377
|
+
}
|
|
1378
|
+
},
|
|
1271
1379
|
/**
|
|
1272
1380
|
* 图表 loading 状态。
|
|
1273
1381
|
* 由 BaseChart 统一接管组件层遮罩式 loading UI。
|
|
@@ -1316,13 +1424,14 @@ var script = {
|
|
|
1316
1424
|
preset: this.preset,
|
|
1317
1425
|
barWidth: this.barWidth,
|
|
1318
1426
|
barGap: this.barGap,
|
|
1427
|
+
xAxisScroll: this.xAxisScroll,
|
|
1319
1428
|
customOption: this.customOption
|
|
1320
1429
|
});
|
|
1321
1430
|
}
|
|
1322
1431
|
}
|
|
1323
1432
|
};
|
|
1324
1433
|
|
|
1325
|
-
var css_248z = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
|
|
1434
|
+
var css_248z = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
|
|
1326
1435
|
withInstall.styleInject(css_248z);
|
|
1327
1436
|
|
|
1328
1437
|
/* script */
|
|
@@ -1356,7 +1465,7 @@ __vue_render__._withStripped = true;
|
|
|
1356
1465
|
/* style */
|
|
1357
1466
|
var __vue_inject_styles__ = undefined;
|
|
1358
1467
|
/* scoped */
|
|
1359
|
-
var __vue_scope_id__ = "data-v-
|
|
1468
|
+
var __vue_scope_id__ = "data-v-0c9a6292";
|
|
1360
1469
|
/* module identifier */
|
|
1361
1470
|
var __vue_module_identifier__ = undefined;
|
|
1362
1471
|
/* functional template */
|
package/lib/index.js
CHANGED
|
@@ -4,18 +4,20 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
require('../theme-chalk/index.css');
|
|
6
6
|
var withInstall = require('./with-install-4304a8ea.js');
|
|
7
|
-
var index$1 = require('./index-
|
|
8
|
-
var index$2 = require('./index-
|
|
7
|
+
var index$1 = require('./index-cc49894a.js');
|
|
8
|
+
var index$2 = require('./index-a0ecafa1.js');
|
|
9
|
+
var index$3 = require('./index-6039f724.js');
|
|
9
10
|
require('echarts/core');
|
|
10
11
|
require('echarts/charts');
|
|
11
12
|
require('echarts/components');
|
|
12
13
|
require('echarts/renderers');
|
|
13
|
-
require('./colors-
|
|
14
|
+
require('./colors-19a7242d.js');
|
|
14
15
|
|
|
15
16
|
withInstall.withInstall(withInstall.BaseChart);
|
|
16
17
|
withInstall.withInstall(index$1.BarLineChart);
|
|
17
18
|
withInstall.withInstall(index$2.PieChart);
|
|
18
|
-
|
|
19
|
+
withInstall.withInstall(index$3.RadarChart);
|
|
20
|
+
var components = [withInstall.BaseChart, index$1.BarLineChart, index$2.PieChart, index$3.RadarChart];
|
|
19
21
|
|
|
20
22
|
// 发布根入口复用组件清单,确保与 src/index.js 行为一致。
|
|
21
23
|
var install = function install(Vue) {
|
|
@@ -30,5 +32,6 @@ var index = {
|
|
|
30
32
|
exports.BaseChart = withInstall.BaseChart;
|
|
31
33
|
exports.BarLineChart = index$1.BarLineChart;
|
|
32
34
|
exports.PieChart = index$2.PieChart;
|
|
35
|
+
exports.RadarChart = index$3.RadarChart;
|
|
33
36
|
exports.default = index;
|
|
34
37
|
exports.install = install;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var echarts = require('echarts/core');
|
|
4
|
+
var charts = require('echarts-gl/charts');
|
|
5
|
+
var components = require('echarts-gl/components');
|
|
6
|
+
|
|
7
|
+
function _interopNamespaceDefault(e) {
|
|
8
|
+
var n = Object.create(null);
|
|
9
|
+
if (e) {
|
|
10
|
+
Object.keys(e).forEach(function (k) {
|
|
11
|
+
if (k !== 'default') {
|
|
12
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return e[k]; }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var echarts__namespace = /*#__PURE__*/_interopNamespaceDefault(echarts);
|
|
25
|
+
|
|
26
|
+
// PieChart 3D 只需要 surface 序列与 grid3D 坐标系,显式注册到组件库同一个 echarts/core 实例。
|
|
27
|
+
echarts__namespace.use([charts.SurfaceChart, components.Grid3DComponent]);
|
package/lib/pie-chart/index.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
require('../../theme-chalk/index.css');
|
|
6
|
-
var index = require('../index-
|
|
6
|
+
var index = require('../index-a0ecafa1.js');
|
|
7
7
|
var withInstall = require('../with-install-4304a8ea.js');
|
|
8
|
-
require('../colors-
|
|
8
|
+
require('../colors-19a7242d.js');
|
|
9
9
|
require('echarts/core');
|
|
10
10
|
require('echarts/charts');
|
|
11
11
|
require('echarts/components');
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
require('../../theme-chalk/index.css');
|
|
6
|
+
var index = require('../index-6039f724.js');
|
|
7
|
+
var withInstall = require('../with-install-4304a8ea.js');
|
|
8
|
+
require('echarts/core');
|
|
9
|
+
require('echarts/charts');
|
|
10
|
+
require('echarts/components');
|
|
11
|
+
require('echarts/renderers');
|
|
12
|
+
require('../colors-19a7242d.js');
|
|
13
|
+
|
|
14
|
+
var RadarChartComponent = withInstall.withInstall(index.RadarChart);
|
|
15
|
+
var install = RadarChartComponent.install;
|
|
16
|
+
|
|
17
|
+
exports.RadarChart = RadarChartComponent;
|
|
18
|
+
exports.default = RadarChartComponent;
|
|
19
|
+
exports.install = install;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xq-labs/data-ui-v2",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "es/index.js",
|
|
6
6
|
"style": "theme-chalk/index.css",
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
"import": "./es/index.js",
|
|
11
11
|
"default": "./lib/index.js"
|
|
12
12
|
},
|
|
13
|
+
"./pie-chart/3d-runtime": {
|
|
14
|
+
"require": "./lib/pie-chart/3d-runtime.js",
|
|
15
|
+
"import": "./pie-chart/3d-runtime.js",
|
|
16
|
+
"default": "./pie-chart/3d-runtime.js"
|
|
17
|
+
},
|
|
13
18
|
"./lib/*": "./lib/*/index.js",
|
|
14
19
|
"./es/*": "./es/*/index.js",
|
|
15
20
|
"./theme-chalk/index.css": "./theme-chalk/index.css",
|
|
@@ -21,7 +26,11 @@
|
|
|
21
26
|
},
|
|
22
27
|
"sideEffects": [
|
|
23
28
|
"*.css",
|
|
24
|
-
"theme-chalk/index.css"
|
|
29
|
+
"theme-chalk/index.css",
|
|
30
|
+
"pie-chart/3d-runtime.js",
|
|
31
|
+
"src/entries/pie-chart-3d-runtime.js",
|
|
32
|
+
"lib/pie-chart/3d-runtime.js",
|
|
33
|
+
"es/pie-chart/3d-runtime.js"
|
|
25
34
|
],
|
|
26
35
|
"engines": {
|
|
27
36
|
"node": ">=14 <15"
|
|
@@ -39,6 +48,7 @@
|
|
|
39
48
|
"files": [
|
|
40
49
|
"lib",
|
|
41
50
|
"es",
|
|
51
|
+
"pie-chart",
|
|
42
52
|
"theme-chalk",
|
|
43
53
|
"docs/api",
|
|
44
54
|
"docs/examples",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../es/pie-chart/3d-runtime.js'
|