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