rapid-spreadjs 1.0.97 → 1.0.98

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/index.esm.js CHANGED
@@ -4071,274 +4071,260 @@ const EChartsUtilsAll = {
4071
4071
  yDataSource1 = yDataArr[0], // [2.25, 2.29, 2.34, 2.29, 2.23],
4072
4072
  yDataSource2 = isTwoLine ? yDataArr[1] : []; // [2.27, 2.32, 2.36, 2.33, 2.26];
4073
4073
  let title = config.chartTitle, xName = config.chartXName, yName = config.chartYName, legendName = '图例1';
4074
- try {
4075
- const lineFunc = (xDataSource, yDataSource, isShowMarkPoint, isShowMarkLine, isTwoLineData) => {
4076
- //原始数据
4077
- let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5, xData = [], yData = [], seriesData = []; //处理原始数据为空的值,不然参与mathjs计算会报错
4078
- //处理原始数据为空的值,不然参与mathjs计算会报错
4079
- xDataSource.forEach((item, index) => {
4080
- if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(item) &&
4081
- item != 0 &&
4082
- /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(yDataSource[index]) &&
4083
- yDataSource[index] != 0) {
4084
- xData.push(item);
4085
- yData.push(yDataSource[index]);
4086
- }
4087
- });
4088
- //y轴没有任何数据的时候,不参与绘制图表
4089
- if (yData.length == 0) {
4090
- return;
4074
+ const lineFunc = (xDataSource, yDataSource, isShowMarkPoint, isShowMarkLine, isTwoLineData) => {
4075
+ //原始数据
4076
+ let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5, xData = [], yData = [], seriesData = []; //处理原始数据为空的值,不然参与mathjs计算会报错
4077
+ //处理原始数据为空的值,不然参与mathjs计算会报错
4078
+ xDataSource.forEach((item, index) => {
4079
+ if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(item) &&
4080
+ item != 0 &&
4081
+ /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(yDataSource[index]) &&
4082
+ yDataSource[index] != 0) {
4083
+ xData.push(item);
4084
+ yData.push(yDataSource[index]);
4091
4085
  }
4092
- if (dxsJs >= yData.length) {
4093
- dxsJs = yData.length - 1;
4086
+ });
4087
+ //y轴没有任何数据的时候,不参与绘制图表
4088
+ if (yData.length == 0) {
4089
+ return;
4090
+ }
4091
+ if (dxsJs >= yData.length) {
4092
+ dxsJs = yData.length - 1;
4093
+ }
4094
+ let xMin = Math.min(...xData), xMax = Math.max(...xData), yMin = Math.min(...yData), yMax = Math.max(...yData), xAxisMax = Math.ceil(xMax + 0.1), xAxisMin = Math.trunc(xMin - 0.1), yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.02, 0.01)), yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.02, 0.01));
4095
+ //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4096
+ let cellValJzZjhsl, cellValJzZdgmd;
4097
+ if (chartExtJson != null && chartExtJson.jsIsJz) {
4098
+ if (chartExtJson.jsZjhslJz != null && chartExtJson.jsZjhslJz != undefined) {
4099
+ cellValJzZjhsl = sheet.getValue(chartExtJson.jsZjhslJz.row, chartExtJson.jsZjhslJz.col);
4094
4100
  }
4095
- let xMin = Math.min(...xData), xMax = Math.max(...xData), yMin = Math.min(...yData), yMax = Math.max(...yData), xAxisMax = Math.ceil(xMax + 0.1), xAxisMin = Math.trunc(xMin - 0.1), yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.02, 0.01)), yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.02, 0.01));
4096
- //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4097
- let cellValJzZjhsl, cellValJzZdgmd;
4098
- if (chartExtJson != null && chartExtJson.jsIsJz) {
4099
- if (chartExtJson.jsZjhslJz != null && chartExtJson.jsZjhslJz != undefined) {
4100
- cellValJzZjhsl = sheet.getValue(chartExtJson.jsZjhslJz.row, chartExtJson.jsZjhslJz.col);
4101
- }
4102
- if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {
4103
- cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);
4104
- }
4105
- //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值
4106
- if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {
4107
- yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));
4108
- }
4101
+ if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {
4102
+ cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);
4103
+ }
4104
+ //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值
4105
+ if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {
4106
+ yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));
4109
4107
  }
4110
- let points = [];
4111
- xData.forEach((item, index) => {
4112
- points.push([item, yData[index]]);
4108
+ }
4109
+ let points = [];
4110
+ xData.forEach((item, index) => {
4111
+ points.push([item, yData[index]]);
4112
+ });
4113
+ // 构造范德蒙德矩阵的函数
4114
+ function vandermondeMatrix(x, N) {
4115
+ const matrix = [];
4116
+ for (let i = 0; i < x.length; i++) {
4117
+ const row = [];
4118
+ for (let j = 0; j <= N; j++) {
4119
+ // 注意这里从0到N,包含N
4120
+ row.push(math.pow(x[i], j));
4121
+ }
4122
+ matrix.push(row);
4123
+ }
4124
+ return math.matrix(matrix);
4125
+ }
4126
+ // 构造原始的范德蒙德矩阵
4127
+ const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数
4128
+ // 使用最小二乘法求解
4129
+ const A = vandermonde_matrix;
4130
+ const AT = math.transpose(A);
4131
+ const ATA = math.multiply(AT, A);
4132
+ const ATb = math.multiply(AT, math.matrix(yData));
4133
+ // 解线性方程组
4134
+ let result = null, coefficients = [];
4135
+ try {
4136
+ result = math.lusolve(ATA, ATb);
4137
+ coefficients = result.valueOf();
4138
+ }
4139
+ catch (err) {
4140
+ for (let index = 0; index < xData.length; index++) {
4141
+ coefficients.push([0]);
4142
+ }
4143
+ // console.log('无法解决该线性系统');
4144
+ }
4145
+ // const result = math.lusolve(ATA, ATb);
4146
+ // const coefficients = result.valueOf();
4147
+ function funequation(x) {
4148
+ let y = 0;
4149
+ coefficients.forEach((item, index) => {
4150
+ //fx^0
4151
+ //fx^0+ax^1
4152
+ //fx^0+ax^1+bx^2
4153
+ //fx^0+ax^1+bx^2+cx^3
4154
+ //fx^0+x^1+x^2+x^3+x^4
4155
+ y += item * Math.pow(x, index);
4113
4156
  });
4114
- // 构造范德蒙德矩阵的函数
4115
- function vandermondeMatrix(x, N) {
4116
- const matrix = [];
4117
- for (let i = 0; i < x.length; i++) {
4118
- const row = [];
4119
- for (let j = 0; j <= N; j++) {
4120
- // 注意这里从0到N,包含N
4121
- row.push(math.pow(x[i], j));
4122
- }
4123
- matrix.push(row);
4124
- }
4125
- return math.matrix(matrix);
4126
- }
4127
- // 构造原始的范德蒙德矩阵
4128
- const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数
4129
- // 使用最小二乘法求解
4130
- const A = vandermonde_matrix;
4131
- const AT = math.transpose(A);
4132
- const ATA = math.multiply(AT, A);
4133
- const ATb = math.multiply(AT, math.matrix(yData));
4134
- // 解线性方程组
4135
- let result = null, coefficients = [];
4136
- try {
4137
- result = math.lusolve(ATA, ATb);
4138
- coefficients = result.valueOf();
4139
- }
4140
- catch (err) {
4141
- for (let index = 0; index < xData.length; index++) {
4142
- coefficients.push([0]);
4143
- }
4144
- // console.log('无法解决该线性系统');
4145
- }
4146
- // const result = math.lusolve(ATA, ATb);
4147
- // const coefficients = result.valueOf();
4148
- function funequation(x) {
4149
- let y = 0;
4150
- coefficients.forEach((item, index) => {
4151
- //fx^0
4152
- //fx^0+ax^1
4153
- //fx^0+ax^1+bx^2
4154
- //fx^0+ax^1+bx^2+cx^3
4155
- //fx^0+x^1+x^2+x^3+x^4
4156
- y += item * Math.pow(x, index);
4157
- });
4158
- return y;
4157
+ return y;
4158
+ }
4159
+ // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]
4160
+ let arrX = [];
4161
+ let arrY = [];
4162
+ for (let i = xMin; i <= xMax; i += 0.01) {
4163
+ let temp = Number(EChartsUtilsComm.getRound(i, 0.01));
4164
+ //重新设置i,防止i丢失精度
4165
+ i = Number(temp);
4166
+ //arrY.push(lagrangeInterpolation(points, temp));
4167
+ arrY.push(funequation(temp));
4168
+ arrX.push(temp);
4169
+ }
4170
+ let max = Math.max(...arrY);
4171
+ // 找到最大值的索引
4172
+ let maxIndex = arrY.findIndex((value) => value === max);
4173
+ // console.log('最大点数据:', arrX[maxIndex], max);
4174
+ // console.log(chartExtJson);
4175
+ //默认输出精度
4176
+ let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4177
+ //顶点数据
4178
+ let outValZjhsl = 0, outValZdgmd = 0;
4179
+ //设置Sheet单元格的值(最佳含水率和最大干密度)
4180
+ if (chartExtJson != null) {
4181
+ // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4182
+ if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4183
+ outJdZjhsl = chartExtJson.jsZjhslJd;
4184
+ }
4185
+ if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4186
+ outJdZdgmd = chartExtJson.jsZdgmdJd;
4187
+ }
4188
+ if (arrX[maxIndex] == 0 && max == 0) {
4189
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4190
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4159
4191
  }
4160
- // console.log('计算公式:', coefficients);
4161
- function lagrangeInterpolation(points, x) {
4162
- let result = 0;
4163
- for (let i = 0; i < points.length; i++) {
4164
- let term = points[i][1];
4165
- let xi = points[i][0];
4166
- for (let j = 0; j < points.length; j++) {
4167
- if (j !== i) {
4168
- let xj = points[j][0];
4169
- term *= (x - xj) / (xi - xj);
4170
- }
4171
- }
4172
- result += term;
4173
- }
4174
- return result;
4192
+ else {
4193
+ outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);
4194
+ outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);
4195
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4196
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4175
4197
  }
4176
- // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]
4177
- let arrX = [];
4178
- let arrY = [];
4179
- for (let i = xMin; i <= xMax; i += 0.01) {
4180
- let temp = Number(EChartsUtilsComm.getRound(i, 0.01));
4181
- //重新设置i,防止i丢失精度
4182
- i = Number(temp);
4183
- //arrY.push(lagrangeInterpolation(points, temp));
4184
- arrY.push(funequation(temp));
4185
- arrX.push(temp);
4186
- }
4187
- let max = Math.max(...arrY);
4188
- // 找到最大值的索引
4189
- let maxIndex = arrY.findIndex((value) => value === max);
4190
- // console.log('最大点数据:', arrX[maxIndex], max);
4191
- // console.log(chartExtJson);
4192
- //默认输出精度
4193
- let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4194
- //顶点数据
4195
- let outValZjhsl = 0, outValZdgmd = 0;
4196
- //设置Sheet单元格的值(最佳含水率和最大干密度)
4197
- if (chartExtJson != null) {
4198
- // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4199
- if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4200
- outJdZjhsl = chartExtJson.jsZjhslJd;
4201
- }
4202
- if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4203
- outJdZdgmd = chartExtJson.jsZdgmdJd;
4204
- }
4205
- if (arrX[maxIndex] == 0 && max == 0) {
4206
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4207
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4208
- }
4209
- else {
4210
- outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);
4211
- outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);
4212
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4213
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4214
- }
4198
+ }
4199
+ arrX.forEach((item, index) => {
4200
+ if (xData.includes(item)) {
4201
+ seriesData.push({ value: [item, arrY[index]] });
4215
4202
  }
4216
- arrX.forEach((item, index) => {
4217
- if (xData.includes(item)) {
4218
- seriesData.push({ value: [item, arrY[index]] });
4219
- }
4220
- else {
4221
- seriesData.push({
4222
- value: [item, arrY[index]],
4223
- symbol: 'none',
4224
- });
4225
- }
4226
- });
4227
- //xData.forEach((item, index) => {
4228
- //seriesData.push([item, yData[index]]);
4229
- //});
4230
- //计算峰值----目前没有公式 值写死的
4231
- const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))], coordX = [peakvalue[0], yAxisMin], coordY = [xAxisMin, peakvalue[1]];
4232
- let markPointObj = {
4233
- data: [
4234
- {
4235
- xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),
4236
- yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),
4237
- symbolOffset: [0, 15],
4238
- symbol: 'circle',
4239
- symbolSize: 6,
4240
- label: {
4241
- show: true,
4242
- color: '#000',
4243
- formatter: function (data) {
4244
- // 自定义标签内容
4245
- if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {
4246
- return '';
4247
- }
4248
- else {
4249
- return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';
4250
- }
4251
- },
4203
+ else {
4204
+ seriesData.push({
4205
+ value: [item, arrY[index]],
4206
+ symbol: 'none',
4207
+ });
4208
+ }
4209
+ });
4210
+ //xData.forEach((item, index) => {
4211
+ //seriesData.push([item, yData[index]]);
4212
+ //});
4213
+ //计算峰值----目前没有公式 值写死的
4214
+ const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))], coordX = [peakvalue[0], yAxisMin], coordY = [xAxisMin, peakvalue[1]];
4215
+ let markPointObj = {
4216
+ data: [
4217
+ {
4218
+ xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),
4219
+ yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),
4220
+ symbolOffset: [0, 15],
4221
+ symbol: 'circle',
4222
+ symbolSize: 6,
4223
+ label: {
4224
+ show: true,
4225
+ color: '#000',
4226
+ formatter: function (data) {
4227
+ // 自定义标签内容
4228
+ if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {
4229
+ return '';
4230
+ }
4231
+ else {
4232
+ return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';
4233
+ }
4252
4234
  },
4253
- itemStyle: { color: 'transparent' },
4254
- },
4255
- ],
4256
- }, markLineObj = {
4257
- symbol: ['none', 'none'], //去掉箭头
4258
- itemStyle: {
4259
- lineStyle: {
4260
- type: 'solid',
4261
- color: '#333',
4262
- width: 2,
4263
4235
  },
4236
+ itemStyle: { color: 'transparent' },
4264
4237
  },
4265
- data: [
4266
- [
4267
- {
4268
- coord: coordX,
4269
- lineStyle: {
4270
- color: '#333', //X轴
4271
- type: 'dashed',
4272
- },
4273
- },
4274
- {
4275
- coord: peakvalue,
4276
- },
4277
- ],
4278
- [
4279
- {
4280
- coord: coordY,
4281
- lineStyle: {
4282
- color: '#333', //y轴
4283
- type: 'dashed',
4284
- },
4238
+ ],
4239
+ }, markLineObj = {
4240
+ symbol: ['none', 'none'], //去掉箭头
4241
+ itemStyle: {
4242
+ lineStyle: {
4243
+ type: 'solid',
4244
+ color: '#333',
4245
+ width: 2,
4246
+ },
4247
+ },
4248
+ data: [
4249
+ [
4250
+ {
4251
+ coord: coordX,
4252
+ lineStyle: {
4253
+ color: '#333', //X轴
4254
+ type: 'dashed',
4285
4255
  },
4286
- {
4287
- coord: peakvalue,
4256
+ },
4257
+ {
4258
+ coord: peakvalue,
4259
+ },
4260
+ ],
4261
+ [
4262
+ {
4263
+ coord: coordY,
4264
+ lineStyle: {
4265
+ color: '#333', //y轴
4266
+ type: 'dashed',
4288
4267
  },
4289
- ],
4268
+ },
4269
+ {
4270
+ coord: peakvalue,
4271
+ },
4290
4272
  ],
4291
- };
4292
- //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4293
- if (chartExtJson.jsIsJz && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZjhsl) && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd)) {
4294
- markLineObj = null;
4295
- markPointObj.data[0].label = null;
4296
- markPointObj.data[0].symbolOffset = null;
4297
- markPointObj.data[0].itemStyle.color = '#F56C6C';
4298
- markPointObj.data[0].xAxis = cellValJzZjhsl;
4299
- markPointObj.data[0].yAxis = cellValJzZdgmd;
4300
- markLineObj = null;
4301
- }
4302
- let seriesDataObj = {
4303
- name: legendName,
4304
- type: 'line',
4305
- smooth: true, //平滑的线条
4306
- //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
4307
- symbol: 'circle', //符号类型
4308
- symbolSize: 6, //符号大小
4309
- //线条的颜色
4310
- lineStyle: {
4311
- color: lineData[isTwoLineData ? 1 : 0].lineColor,
4312
- //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
4313
- type: isTwoLineData ? 'dotted' : 'solid',
4314
- },
4315
- //线条上数据点的颜色
4316
- itemStyle: {
4317
- color: lineData[isTwoLineData ? 1 : 0].lineColor,
4318
- },
4319
- data: seriesData,
4320
- markPoint: isShowMarkPoint ? markPointObj : null,
4321
- markLine: isShowMarkLine ? markLineObj : null,
4322
- };
4323
- return {
4324
- xAxisMin: xAxisMin,
4325
- xAxisMax: xAxisMax,
4326
- yAxisMin: yAxisMin,
4327
- yAxisMax: yAxisMax,
4328
- xData: xData,
4329
- seriesDataObj: seriesDataObj,
4330
- maxPointData: [arrX[maxIndex], max],
4331
- };
4273
+ ],
4332
4274
  };
4333
- let xAxisMin = 0, xAxisMax = 0, yAxisMin = 0, yAxisMax = 0, xData = [], seriesData = [], maxPointDataX = 0, maxPointDataY = 0;
4334
- let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false), lineObj2;
4335
- if (isTwoLine) {
4336
- lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);
4337
- }
4338
- //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错
4339
- if (lineObj1 == undefined || lineObj1 == null) {
4340
- return;
4341
- }
4275
+ //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4276
+ if (chartExtJson.jsIsJz && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZjhsl) && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd)) {
4277
+ markLineObj = null;
4278
+ markPointObj.data[0].label = null;
4279
+ markPointObj.data[0].symbolOffset = null;
4280
+ markPointObj.data[0].itemStyle.color = '#F56C6C';
4281
+ markPointObj.data[0].xAxis = cellValJzZjhsl;
4282
+ markPointObj.data[0].yAxis = cellValJzZdgmd;
4283
+ markLineObj = null;
4284
+ }
4285
+ let seriesDataObj = {
4286
+ name: legendName,
4287
+ type: 'line',
4288
+ smooth: true, //平滑的线条
4289
+ //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
4290
+ symbol: 'circle', //符号类型
4291
+ symbolSize: 6, //符号大小
4292
+ //线条的颜色
4293
+ lineStyle: {
4294
+ color: lineData[isTwoLineData ? 1 : 0].lineColor,
4295
+ //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
4296
+ type: isTwoLineData ? 'dotted' : 'solid',
4297
+ },
4298
+ //线条上数据点的颜色
4299
+ itemStyle: {
4300
+ color: lineData[isTwoLineData ? 1 : 0].lineColor,
4301
+ },
4302
+ data: seriesData,
4303
+ markPoint: isShowMarkPoint ? markPointObj : null,
4304
+ markLine: isShowMarkLine ? markLineObj : null,
4305
+ };
4306
+ return {
4307
+ xAxisMin: xAxisMin,
4308
+ xAxisMax: xAxisMax,
4309
+ yAxisMin: yAxisMin,
4310
+ yAxisMax: yAxisMax,
4311
+ xData: xData,
4312
+ seriesDataObj: seriesDataObj,
4313
+ maxPointData: [arrX[maxIndex], max],
4314
+ };
4315
+ };
4316
+ let xAxisMin = 0, xAxisMax = 0, yAxisMin = 0, yAxisMax = 0, xData = [], seriesData = [], maxPointDataX = 0, maxPointDataY = 0;
4317
+ let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false), lineObj2;
4318
+ if (isTwoLine) {
4319
+ lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);
4320
+ }
4321
+ //判断数据是否为/,‘’,null,undefined
4322
+ let yValIsAllNull = false;
4323
+ //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错
4324
+ if (lineObj1 == undefined || lineObj1 == null) {
4325
+ yValIsAllNull = true;
4326
+ }
4327
+ if (!yValIsAllNull) {
4342
4328
  //一条线的时候
4343
4329
  if (!isTwoLine) {
4344
4330
  xAxisMin = lineObj1.xAxisMin;
@@ -4409,201 +4395,108 @@ const EChartsUtilsAll = {
4409
4395
  }
4410
4396
  }
4411
4397
  }
4412
- //判断数据是否为/,‘’,null,undefined
4413
- let yValIsAllNull = false;
4414
- seriesData.forEach((item) => {
4415
- yValIsAllNull = item.data[0].value.every((ele) => {
4416
- return ele == 0;
4417
- });
4398
+ }
4399
+ seriesData.forEach((item) => {
4400
+ yValIsAllNull = item.data[0].value.every((ele) => {
4401
+ return ele == 0;
4418
4402
  });
4419
- if (yValIsAllNull) {
4420
- xAxisMin = null;
4421
- xAxisMax = null;
4422
- yAxisMin = null;
4423
- yAxisMax = null;
4424
- seriesData = [];
4425
- }
4426
- let option = {
4427
- grid: {
4428
- // show: true,//是否显示外边框线
4429
- // borderColor: '#f00',//外边框线颜色
4430
- top: 25,
4431
- left: !yValIsAllNull ? 30 : 25,
4432
- right: 10,
4433
- bottom: 20,
4434
- containLabel: true,
4435
- },
4436
- //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4437
- tooltip: {
4438
- trigger: 'axis',
4439
- formatter: function (datas, ticket) {
4440
- //console.log(datas," datas")
4441
- return datas && datas.length > 0
4442
- ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4443
- : datas[0].data;
4444
- },
4403
+ });
4404
+ if (yValIsAllNull) {
4405
+ xAxisMin = null;
4406
+ xAxisMax = null;
4407
+ yAxisMin = null;
4408
+ yAxisMax = null;
4409
+ seriesData = [];
4410
+ }
4411
+ let option = {
4412
+ grid: {
4413
+ // show: true,//是否显示外边框线
4414
+ // borderColor: '#f00',//外边框线颜色
4415
+ top: 25,
4416
+ left: !yValIsAllNull ? 30 : 25,
4417
+ right: 10,
4418
+ bottom: 20,
4419
+ containLabel: true,
4420
+ },
4421
+ //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4422
+ tooltip: {
4423
+ trigger: 'axis',
4424
+ formatter: function (datas, ticket) {
4425
+ //console.log(datas," datas")
4426
+ return datas && datas.length > 0
4427
+ ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4428
+ : datas[0].data;
4445
4429
  },
4446
- //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4447
- title: [
4448
- {
4449
- show: true,
4450
- text: title,
4451
- left: 'center',
4452
- top: 0,
4453
- textStyle: {
4454
- fontSize: 14,
4455
- fontWeight: 'normal',
4456
- },
4457
- },
4458
- {
4459
- show: true,
4460
- text: xName,
4461
- left: 'center',
4462
- bottom: 0,
4463
- textStyle: {
4464
- fontSize: 12,
4465
- fontWeight: 'normal',
4466
- },
4467
- },
4468
- ],
4469
- //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4470
- legend: {
4471
- show: false,
4472
- left: 'right',
4473
- data: [legendName],
4474
- selected: {
4475
- legendName: true, //显示
4430
+ },
4431
+ //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4432
+ title: [
4433
+ {
4434
+ show: true,
4435
+ text: title,
4436
+ left: 'center',
4437
+ top: 0,
4438
+ textStyle: {
4439
+ fontSize: 14,
4440
+ fontWeight: 'normal',
4476
4441
  },
4477
- selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4478
4442
  },
4479
- xAxis: {
4480
- type: 'value',
4481
- max: xAxisMax,
4482
- min: xAxisMin,
4483
- data: xData,
4484
- axisTick: {
4485
- alignWithLabel: true, //使得刻度线和标签对齐
4443
+ {
4444
+ show: true,
4445
+ text: xName,
4446
+ left: 'center',
4447
+ bottom: 0,
4448
+ textStyle: {
4449
+ fontSize: 12,
4450
+ fontWeight: 'normal',
4486
4451
  },
4487
- splitLine: { show: true },
4488
4452
  },
4489
- yAxis: [
4490
- {
4491
- type: 'value',
4492
- max: yAxisMax,
4493
- min: yAxisMin,
4494
- name: yName,
4495
- nameGap: !yValIsAllNull ? 40 : 5,
4496
- nameRotate: 90,
4497
- nameLocation: 'middle',
4498
- splitLine: {
4499
- show: true,
4500
- lineStyle: {
4501
- color: '#e0e6f1', //'#e0e6f1',
4502
- type: 'solid',
4503
- },
4504
- },
4505
- //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4506
- axisLine: {
4507
- //设置y轴箭头效果
4508
- show: true, //y轴默认是不显示的
4509
- },
4510
- },
4511
- ],
4512
- series: seriesData,
4513
- };
4514
- return option;
4515
- }
4516
- catch (error) {
4517
- let option = {
4518
- grid: {
4519
- // show: true,//是否显示外边框线
4520
- // borderColor: '#f00',//外边框线颜色
4521
- top: 25,
4522
- left: 25,
4523
- right: 10,
4524
- bottom: 20,
4525
- containLabel: true,
4526
- },
4527
- //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4528
- tooltip: {
4529
- trigger: 'axis',
4530
- formatter: function (datas, ticket) {
4531
- //console.log(datas," datas")
4532
- return datas && datas.length > 0
4533
- ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4534
- : datas[0].data;
4535
- },
4453
+ ],
4454
+ //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4455
+ legend: {
4456
+ show: false,
4457
+ left: 'right',
4458
+ data: [legendName],
4459
+ selected: {
4460
+ legendName: true, //显示
4536
4461
  },
4537
- //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4538
- title: [
4539
- {
4540
- show: true,
4541
- text: title,
4542
- left: 'center',
4543
- top: 0,
4544
- textStyle: {
4545
- fontSize: 14,
4546
- fontWeight: 'normal',
4547
- },
4548
- },
4549
- {
4462
+ selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4463
+ },
4464
+ xAxis: {
4465
+ type: 'value',
4466
+ max: xAxisMax,
4467
+ min: xAxisMin,
4468
+ data: xData,
4469
+ axisTick: {
4470
+ alignWithLabel: true, //使得刻度线和标签对齐
4471
+ },
4472
+ splitLine: { show: true },
4473
+ },
4474
+ yAxis: [
4475
+ {
4476
+ type: 'value',
4477
+ max: yAxisMax,
4478
+ min: yAxisMin,
4479
+ name: yName,
4480
+ nameGap: !yValIsAllNull ? 40 : 5,
4481
+ nameRotate: 90,
4482
+ nameLocation: 'middle',
4483
+ splitLine: {
4550
4484
  show: true,
4551
- text: xName,
4552
- left: 'center',
4553
- bottom: 0,
4554
- textStyle: {
4555
- fontSize: 12,
4556
- fontWeight: 'normal',
4485
+ lineStyle: {
4486
+ color: '#e0e6f1', //'#e0e6f1',
4487
+ type: 'solid',
4557
4488
  },
4558
4489
  },
4559
- ],
4560
- //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4561
- legend: {
4562
- show: false,
4563
- left: 'right',
4564
- data: [legendName],
4565
- selected: {
4566
- legendName: true, //显示
4567
- },
4568
- selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4569
- },
4570
- xAxis: {
4571
- type: 'value',
4572
- max: 0,
4573
- min: 0,
4574
- data: [],
4575
- axisTick: {
4576
- alignWithLabel: true, //使得刻度线和标签对齐
4490
+ //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4491
+ axisLine: {
4492
+ //设置y轴箭头效果
4493
+ show: true, //y轴默认是不显示的
4577
4494
  },
4578
- splitLine: { show: true },
4579
4495
  },
4580
- yAxis: [
4581
- {
4582
- type: 'value',
4583
- max: 0,
4584
- min: 0,
4585
- name: yName,
4586
- nameGap: 5,
4587
- nameRotate: 90,
4588
- nameLocation: 'middle',
4589
- splitLine: {
4590
- show: true,
4591
- lineStyle: {
4592
- color: '#e0e6f1', //'#e0e6f1',
4593
- type: 'solid',
4594
- },
4595
- },
4596
- //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4597
- axisLine: {
4598
- //设置y轴箭头效果
4599
- show: true, //y轴默认是不显示的
4600
- },
4601
- },
4602
- ],
4603
- series: [],
4604
- };
4605
- return option;
4606
- }
4496
+ ],
4497
+ series: seriesData,
4498
+ };
4499
+ return option;
4607
4500
  },
4608
4501
  /**
4609
4502
  * 筛分
@@ -8977,7 +8870,6 @@ const EChartsUtils = {
8977
8870
  else if (config.chartType == 430) {
8978
8871
  option = EChartsUtilsAll.chart430(config, xDataArr, yDataArr, sheet);
8979
8872
  }
8980
- console.log('ECharts option:', option);
8981
8873
  if (option && typeof option === 'object') {
8982
8874
  //如果是隐藏的图表,则需要禁用ECharts的动画效果
8983
8875
  //原因是:如果ECharts使用了动画效果,图表渲染完成可能需要0.5秒,但是在导出ECharts统计图为图片的场景下时,可能在图表还没有渲染完成(动画效果还没结束)前就要获取图像了,此时可能就会造成获取到的图像内容丢失的情况