rapid-spreadjs 1.0.95 → 1.0.96

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
@@ -4082,7 +4082,6 @@ const EChartsUtilsAll = {
4082
4082
  chart30: (config, xDataArr, yDataArr, sheet) => {
4083
4083
  let lineData = JSON.parse(config.chartLinesJson);
4084
4084
  const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);
4085
- debugger;
4086
4085
  //设置是否选择校正jsIsJz的默认值
4087
4086
  if (chartExtJson != null && (chartExtJson.jsIsJz == null || chartExtJson.jsIsJz == undefined)) {
4088
4087
  chartExtJson.jsIsJz = true;
@@ -4094,430 +4093,539 @@ const EChartsUtilsAll = {
4094
4093
  yDataSource1 = yDataArr[0], // [2.25, 2.29, 2.34, 2.29, 2.23],
4095
4094
  yDataSource2 = isTwoLine ? yDataArr[1] : []; // [2.27, 2.32, 2.36, 2.33, 2.26];
4096
4095
  let title = config.chartTitle, xName = config.chartXName, yName = config.chartYName, legendName = '图例1';
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;
4113
- }
4114
- if (dxsJs >= yData.length) {
4115
- dxsJs = yData.length - 1;
4116
- }
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);
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;
4123
4113
  }
4124
- if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {
4125
- cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);
4114
+ if (dxsJs >= yData.length) {
4115
+ dxsJs = yData.length - 1;
4126
4116
  }
4127
- //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值
4128
- if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {
4129
- yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));
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
+ }
4130
4131
  }
4131
- }
4132
- let points = [];
4133
- xData.forEach((item, index) => {
4134
- points.push([item, yData[index]]);
4135
- });
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);
4132
+ let points = [];
4133
+ xData.forEach((item, index) => {
4134
+ points.push([item, yData[index]]);
4179
4135
  });
4180
- return y;
4181
- }
4182
- // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]
4183
- let arrX = [];
4184
- let arrY = [];
4185
- for (let i = xMin; i <= xMax; i += 0.01) {
4186
- let temp = Number(EChartsUtilsComm.getRound(i, 0.01));
4187
- //重新设置i,防止i丢失精度
4188
- i = Number(temp);
4189
- //arrY.push(lagrangeInterpolation(points, temp));
4190
- arrY.push(funequation(temp));
4191
- arrX.push(temp);
4192
- }
4193
- let max = Math.max(...arrY);
4194
- // 找到最大值的索引
4195
- let maxIndex = arrY.findIndex((value) => value === max);
4196
- // console.log('最大点数据:', arrX[maxIndex], max);
4197
- // console.log(chartExtJson);
4198
- //默认输出精度
4199
- let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4200
- //顶点数据
4201
- let outValZjhsl = 0, outValZdgmd = 0;
4202
- //设置Sheet单元格的值(最佳含水率和最大干密度)
4203
- if (chartExtJson != null) {
4204
- // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4205
- if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4206
- outJdZjhsl = chartExtJson.jsZjhslJd;
4207
- }
4208
- if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4209
- outJdZdgmd = chartExtJson.jsZdgmdJd;
4210
- }
4211
- if (arrX[maxIndex] == 0 && max == 0) {
4212
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4213
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4214
- }
4215
- else {
4216
- outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);
4217
- outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);
4218
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4219
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
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;
4220
4181
  }
4221
- }
4222
- arrX.forEach((item, index) => {
4223
- if (xData.includes(item)) {
4224
- seriesData.push({ value: [item, arrY[index]] });
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;
4225
4197
  }
4226
- else {
4227
- seriesData.push({
4228
- value: [item, arrY[index]],
4229
- symbol: 'none',
4230
- });
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
+ }
4231
4237
  }
4232
- });
4233
- //xData.forEach((item, index) => {
4234
- //seriesData.push([item, yData[index]]);
4235
- //});
4236
- //计算峰值----目前没有公式 值写死的
4237
- const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))], coordX = [peakvalue[0], yAxisMin], coordY = [xAxisMin, peakvalue[1]];
4238
- let markPointObj = {
4239
- data: [
4240
- {
4241
- xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),
4242
- yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),
4243
- symbolOffset: [0, 15],
4244
- symbol: 'circle',
4245
- symbolSize: 6,
4246
- label: {
4247
- show: true,
4248
- color: '#000',
4249
- formatter: function (data) {
4250
- // 自定义标签内容
4251
- if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {
4252
- return '';
4253
- }
4254
- else {
4255
- return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';
4256
- }
4257
- },
4258
- },
4259
- itemStyle: { color: 'transparent' },
4260
- },
4261
- ],
4262
- }, markLineObj = {
4263
- symbol: ['none', 'none'], //去掉箭头
4264
- itemStyle: {
4265
- lineStyle: {
4266
- type: 'solid',
4267
- color: '#333',
4268
- width: 2,
4269
- },
4270
- },
4271
- data: [
4272
- [
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: [
4273
4256
  {
4274
- coord: coordX,
4275
- lineStyle: {
4276
- color: '#333', //X轴
4277
- type: 'dashed',
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
+ },
4278
4274
  },
4279
- },
4280
- {
4281
- coord: peakvalue,
4275
+ itemStyle: { color: 'transparent' },
4282
4276
  },
4283
4277
  ],
4284
- [
4285
- {
4286
- coord: coordY,
4287
- lineStyle: {
4288
- color: '#333', //y轴
4289
- type: 'dashed',
4290
- },
4291
- },
4292
- {
4293
- coord: peakvalue,
4278
+ }, markLineObj = {
4279
+ symbol: ['none', 'none'], //去掉箭头
4280
+ itemStyle: {
4281
+ lineStyle: {
4282
+ type: 'solid',
4283
+ color: '#333',
4284
+ width: 2,
4294
4285
  },
4286
+ },
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
+ },
4307
+ },
4308
+ {
4309
+ coord: peakvalue,
4310
+ },
4311
+ ],
4295
4312
  ],
4296
- ],
4297
- };
4298
- //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4299
- if (chartExtJson.jsIsJz && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZjhsl) && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd)) {
4300
- markLineObj = null;
4301
- markPointObj.data[0].label = null;
4302
- markPointObj.data[0].symbolOffset = null;
4303
- markPointObj.data[0].itemStyle.color = '#F56C6C';
4304
- markPointObj.data[0].xAxis = cellValJzZjhsl;
4305
- markPointObj.data[0].yAxis = cellValJzZdgmd;
4306
- markLineObj = null;
4307
- }
4308
- let seriesDataObj = {
4309
- name: legendName,
4310
- type: 'line',
4311
- smooth: true, //平滑的线条
4312
- //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
4313
- symbol: 'circle', //符号类型
4314
- symbolSize: 6, //符号大小
4315
- //线条的颜色
4316
- lineStyle: {
4317
- color: lineData[isTwoLineData ? 1 : 0].lineColor,
4318
- //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
4319
- type: isTwoLineData ? 'dotted' : 'solid',
4320
- },
4321
- //线条上数据点的颜色
4322
- itemStyle: {
4323
- color: lineData[isTwoLineData ? 1 : 0].lineColor,
4324
- },
4325
- data: seriesData,
4326
- markPoint: isShowMarkPoint ? markPointObj : null,
4327
- markLine: isShowMarkLine ? markLineObj : null,
4328
- };
4329
- return {
4330
- xAxisMin: xAxisMin,
4331
- xAxisMax: xAxisMax,
4332
- yAxisMin: yAxisMin,
4333
- yAxisMax: yAxisMax,
4334
- xData: xData,
4335
- seriesDataObj: seriesDataObj,
4336
- maxPointData: [arrX[maxIndex], max],
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
+ };
4337
4354
  };
4338
- };
4339
- let xAxisMin = 0, xAxisMax = 0, yAxisMin = 0, yAxisMax = 0, xData = [], seriesData = [], maxPointDataX = 0, maxPointDataY = 0;
4340
- let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false), lineObj2;
4341
- if (isTwoLine) {
4342
- lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);
4343
- }
4344
- //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错
4345
- if (lineObj1 == undefined || lineObj1 == null) {
4346
- return;
4347
- }
4348
- //一条线的时候
4349
- if (!isTwoLine) {
4350
- xAxisMin = lineObj1.xAxisMin;
4351
- xAxisMax = lineObj1.xAxisMax;
4352
- yAxisMin = lineObj1.yAxisMin;
4353
- yAxisMax = lineObj1.yAxisMax;
4354
- xData = lineObj1.xData;
4355
- seriesData.push(lineObj1.seriesDataObj);
4356
- }
4357
- //2条线的时候
4358
- else {
4359
- if (lineObj2 == undefined || lineObj2 == null) {
4360
- return;
4361
- }
4362
- xAxisMax = lineObj1.xAxisMax;
4363
- if (lineObj2.xAxisMax > xAxisMax) {
4364
- xAxisMax = lineObj2.xAxisMax;
4365
- }
4366
- xAxisMin = lineObj1.xAxisMin;
4367
- if (lineObj2.xAxisMin < xAxisMin) {
4368
- xAxisMin = lineObj2.xAxisMin;
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);
4369
4359
  }
4370
- yAxisMax = lineObj1.yAxisMax;
4371
- if (lineObj2.yAxisMax > yAxisMax) {
4372
- yAxisMax = lineObj2.yAxisMax;
4360
+ //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错
4361
+ if (lineObj1 == undefined || lineObj1 == null) {
4362
+ return;
4373
4363
  }
4374
- yAxisMin = lineObj1.yAxisMin;
4375
- if (lineObj2.yAxisMin < yAxisMin) {
4376
- yAxisMin = lineObj2.yAxisMin;
4364
+ //一条线的时候
4365
+ if (!isTwoLine) {
4366
+ xAxisMin = lineObj1.xAxisMin;
4367
+ xAxisMax = lineObj1.xAxisMax;
4368
+ yAxisMin = lineObj1.yAxisMin;
4369
+ yAxisMax = lineObj1.yAxisMax;
4370
+ xData = lineObj1.xData;
4371
+ seriesData.push(lineObj1.seriesDataObj);
4377
4372
  }
4378
- lineObj1.xData.forEach((item) => {
4379
- xData.push(item);
4380
- });
4381
- lineObj2.xData.forEach((item) => {
4382
- xData.push(item);
4383
- });
4384
- seriesData.push(lineObj1.seriesDataObj);
4385
- seriesData.push(lineObj2.seriesDataObj);
4386
- maxPointDataX = (lineObj1.maxPointData[0] + lineObj2.maxPointData[0]) / 2;
4387
- maxPointDataY = (lineObj1.maxPointData[1] + lineObj2.maxPointData[1]) / 2;
4388
- // console.log(
4389
- // "两条线最大点的平均值:",
4390
- // maxPointDataX,
4391
- // maxPointDataY
4392
- // );
4393
- //默认输出精度
4394
- let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4395
- //顶点数据
4396
- let outValZjhsl = 0, outValZdgmd = 0;
4397
- //设置Sheet单元格的值(最佳含水率和最大干密度)
4398
- if (chartExtJson != null) {
4399
- // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4400
- if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4401
- outJdZjhsl = chartExtJson.jsZjhslJd;
4402
- }
4403
- if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4404
- outJdZdgmd = chartExtJson.jsZdgmdJd;
4405
- }
4406
- if (maxPointDataX == 0 && maxPointDataY == 0) {
4407
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4408
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4373
+ //2条线的时候
4374
+ else {
4375
+ if (lineObj2 == undefined || lineObj2 == null) {
4376
+ return;
4409
4377
  }
4410
- else {
4411
- outValZjhsl = EChartsUtilsComm.getRound(maxPointDataX, outJdZjhsl);
4412
- outValZdgmd = EChartsUtilsComm.getRound(maxPointDataY, outJdZdgmd);
4413
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4414
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4378
+ xAxisMax = lineObj1.xAxisMax;
4379
+ if (lineObj2.xAxisMax > xAxisMax) {
4380
+ xAxisMax = lineObj2.xAxisMax;
4381
+ }
4382
+ xAxisMin = lineObj1.xAxisMin;
4383
+ if (lineObj2.xAxisMin < xAxisMin) {
4384
+ xAxisMin = lineObj2.xAxisMin;
4385
+ }
4386
+ yAxisMax = lineObj1.yAxisMax;
4387
+ if (lineObj2.yAxisMax > yAxisMax) {
4388
+ yAxisMax = lineObj2.yAxisMax;
4389
+ }
4390
+ yAxisMin = lineObj1.yAxisMin;
4391
+ if (lineObj2.yAxisMin < yAxisMin) {
4392
+ yAxisMin = lineObj2.yAxisMin;
4393
+ }
4394
+ lineObj1.xData.forEach((item) => {
4395
+ xData.push(item);
4396
+ });
4397
+ lineObj2.xData.forEach((item) => {
4398
+ xData.push(item);
4399
+ });
4400
+ seriesData.push(lineObj1.seriesDataObj);
4401
+ seriesData.push(lineObj2.seriesDataObj);
4402
+ maxPointDataX = (lineObj1.maxPointData[0] + lineObj2.maxPointData[0]) / 2;
4403
+ maxPointDataY = (lineObj1.maxPointData[1] + lineObj2.maxPointData[1]) / 2;
4404
+ // console.log(
4405
+ // "两条线最大点的平均值:",
4406
+ // maxPointDataX,
4407
+ // maxPointDataY
4408
+ // );
4409
+ //默认输出精度
4410
+ let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4411
+ //顶点数据
4412
+ let outValZjhsl = 0, outValZdgmd = 0;
4413
+ //设置Sheet单元格的值(最佳含水率和最大干密度)
4414
+ if (chartExtJson != null) {
4415
+ // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4416
+ if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4417
+ outJdZjhsl = chartExtJson.jsZjhslJd;
4418
+ }
4419
+ if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4420
+ outJdZdgmd = chartExtJson.jsZdgmdJd;
4421
+ }
4422
+ if (maxPointDataX == 0 && maxPointDataY == 0) {
4423
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4424
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4425
+ }
4426
+ else {
4427
+ outValZjhsl = EChartsUtilsComm.getRound(maxPointDataX, outJdZjhsl);
4428
+ outValZdgmd = EChartsUtilsComm.getRound(maxPointDataY, outJdZdgmd);
4429
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4430
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4431
+ }
4415
4432
  }
4416
4433
  }
4417
- }
4418
- //判断数据是否为/,‘’,null,undefined
4419
- let yValIsAllNull = false;
4420
- seriesData.forEach((item) => {
4421
- yValIsAllNull = item.data[0].value.every((ele) => {
4422
- return ele == 0;
4434
+ //判断数据是否为/,‘’,null,undefined
4435
+ let yValIsAllNull = false;
4436
+ seriesData.forEach((item) => {
4437
+ yValIsAllNull = item.data[0].value.every((ele) => {
4438
+ return ele == 0;
4439
+ });
4423
4440
  });
4424
- });
4425
- if (yValIsAllNull) {
4426
- xAxisMin = null;
4427
- xAxisMax = null;
4428
- yAxisMin = null;
4429
- yAxisMax = null;
4430
- seriesData = [];
4431
- }
4432
- let option = {
4433
- grid: {
4434
- // show: true,//是否显示外边框线
4435
- // borderColor: '#f00',//外边框线颜色
4436
- top: 25,
4437
- left: !yValIsAllNull ? 30 : 25,
4438
- right: 10,
4439
- bottom: 20,
4440
- containLabel: true,
4441
- },
4442
- //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4443
- tooltip: {
4444
- trigger: 'axis',
4445
- formatter: function (datas, ticket) {
4446
- //console.log(datas," datas")
4447
- return datas && datas.length > 0
4448
- ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4449
- : datas[0].data;
4450
- },
4451
- },
4452
- //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4453
- title: [
4454
- {
4455
- show: true,
4456
- text: title,
4457
- left: 'center',
4458
- top: 0,
4459
- textStyle: {
4460
- fontSize: 14,
4461
- fontWeight: 'normal',
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;
4462
4466
  },
4463
4467
  },
4464
- {
4465
- show: true,
4466
- text: xName,
4467
- left: 'center',
4468
- bottom: 0,
4469
- textStyle: {
4470
- fontSize: 12,
4471
- fontWeight: 'normal',
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, //显示
4472
4498
  },
4499
+ selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4473
4500
  },
4474
- ],
4475
- //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4476
- legend: {
4477
- show: false,
4478
- left: 'right',
4479
- data: [legendName],
4480
- selected: {
4481
- legendName: true, //显示
4501
+ xAxis: {
4502
+ type: 'value',
4503
+ max: xAxisMax,
4504
+ min: xAxisMin,
4505
+ data: xData,
4506
+ axisTick: {
4507
+ alignWithLabel: true, //使得刻度线和标签对齐
4508
+ },
4509
+ splitLine: { show: true },
4482
4510
  },
4483
- selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4484
- },
4485
- xAxis: {
4486
- type: 'value',
4487
- max: xAxisMax,
4488
- min: xAxisMin,
4489
- data: xData,
4490
- axisTick: {
4491
- alignWithLabel: true, //使得刻度线和标签对齐
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
+ },
4492
4558
  },
4493
- splitLine: { show: true },
4494
- },
4495
- yAxis: [
4496
- {
4497
- type: 'value',
4498
- max: yAxisMax,
4499
- min: yAxisMin,
4500
- name: yName,
4501
- nameGap: !yValIsAllNull ? 40 : 5,
4502
- nameRotate: 90,
4503
- nameLocation: 'middle',
4504
- splitLine: {
4559
+ //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4560
+ title: [
4561
+ {
4505
4562
  show: true,
4506
- lineStyle: {
4507
- color: '#e0e6f1', //'#e0e6f1',
4508
- type: 'solid',
4563
+ text: title,
4564
+ left: 'center',
4565
+ top: 0,
4566
+ textStyle: {
4567
+ fontSize: 14,
4568
+ fontWeight: 'normal',
4509
4569
  },
4510
4570
  },
4511
- //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4512
- axisLine: {
4513
- //设置y轴箭头效果
4514
- show: true, //y轴默认是不显示的
4571
+ {
4572
+ show: true,
4573
+ text: xName,
4574
+ left: 'center',
4575
+ bottom: 0,
4576
+ textStyle: {
4577
+ fontSize: 12,
4578
+ fontWeight: 'normal',
4579
+ },
4580
+ },
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, //显示
4515
4589
  },
4590
+ selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4516
4591
  },
4517
- ],
4518
- series: seriesData,
4519
- };
4520
- return option;
4592
+ xAxis: {
4593
+ type: 'value',
4594
+ max: 0,
4595
+ min: 0,
4596
+ data: [],
4597
+ axisTick: {
4598
+ alignWithLabel: true, //使得刻度线和标签对齐
4599
+ },
4600
+ splitLine: { show: true },
4601
+ },
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
+ }
4521
4629
  },
4522
4630
  /**
4523
4631
  * 筛分