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