|  | @@ -54,6 +54,108 @@ const echatinit = () => {
 | 
	
		
			
				|  |  |    xdata.value = []
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  // 从websocket取数据
 | 
	
		
			
				|  |  | +// const getsockechart = (data) => {
 | 
	
		
			
				|  |  | +//   console.log("曲线数据", data);
 | 
	
		
			
				|  |  | +//   curvedata.value = data;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   // 如果是第一次传入数据,则初始化为空数组;否则保留之前的数据
 | 
	
		
			
				|  |  | +//   if (!xdata.value) {
 | 
	
		
			
				|  |  | +//     xdata.value = [];
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   let rows = curvedata.value;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   vars = rows[0].vars.split(" ")
 | 
	
		
			
				|  |  | +//   console.log('变量名:',vars);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   // 继续累加之前的数据
 | 
	
		
			
				|  |  | +//   let convergeDate = {
 | 
	
		
			
				|  |  | +//     "design_var/upperB": [],
 | 
	
		
			
				|  |  | +//     "design_var/lowerB": []
 | 
	
		
			
				|  |  | +//   };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   // 遍历每一行数据
 | 
	
		
			
				|  |  | +//   for (let i = 0; i < rows.length; i++) {
 | 
	
		
			
				|  |  | +//     let vals = rows[i].vals.split(" "); 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     let upperB = JSON.parse(vals[3]);
 | 
	
		
			
				|  |  | +//     let lowerB = JSON.parse(vals[4]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     // 将新的数据追加到对应的数组中
 | 
	
		
			
				|  |  | +//     convergeDate["design_var/upperB"].push(...upperB);
 | 
	
		
			
				|  |  | +//     convergeDate["design_var/lowerB"].push(...lowerB);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     // 将新的 step 值追加到 xdata 数组
 | 
	
		
			
				|  |  | +//     xdata.value.push(rows[i].step); 
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   // 获取所有的 upperB 和 lowerB 数据
 | 
	
		
			
				|  |  | +//   let upperBData = convergeDate["design_var/upperB"];
 | 
	
		
			
				|  |  | +//   let lowerBData = convergeDate["design_var/lowerB"];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   // 计算每条曲线的数量
 | 
	
		
			
				|  |  | +//   let curveCount = upperBData.length / rows.length;
 | 
	
		
			
				|  |  | +//   console.log('曲线数据测试:',curveCount,upperBData.length,rows.length)
 | 
	
		
			
				|  |  | +//   // 遍历每一条曲线,检查是否已经存在,如果存在,则更新数据;否则,创建新曲线
 | 
	
		
			
				|  |  | +//   for (let i = 0; i < curveCount; i++) {
 | 
	
		
			
				|  |  | +//     let upperBCurveData = [];
 | 
	
		
			
				|  |  | +//     let lowerBCurveData = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     // 填充每条曲线的数据
 | 
	
		
			
				|  |  | +//     for (let j = 0; j < rows.length; j++) {
 | 
	
		
			
				|  |  | +//       upperBCurveData.push(upperBData[j * curveCount + i]);
 | 
	
		
			
				|  |  | +//       lowerBCurveData.push(lowerBData[j * curveCount + i]);
 | 
	
		
			
				|  |  | +//     }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     // 查找是否已经存在此曲线
 | 
	
		
			
				|  |  | +//     let upperBSeries = series.value.find(s => s.name === `design_var/upperB${i + 1}`);
 | 
	
		
			
				|  |  | +//     let lowerBSeries = series.value.find(s => s.name === `design_var/lowerB${i + 1}`);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     // 如果存在则更新数据,否则创建新曲线
 | 
	
		
			
				|  |  | +//     if (upperBSeries) {
 | 
	
		
			
				|  |  | +//       upperBSeries.data.push(...upperBCurveData);
 | 
	
		
			
				|  |  | +//     } else {
 | 
	
		
			
				|  |  | +//       series.value.push({
 | 
	
		
			
				|  |  | +//         name: `design_var/upperB${i + 1}`, 
 | 
	
		
			
				|  |  | +//         type: "line",
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +//         data: upperBCurveData 
 | 
	
		
			
				|  |  | +//       });
 | 
	
		
			
				|  |  | +//     }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     if (lowerBSeries) {
 | 
	
		
			
				|  |  | +//       lowerBSeries.data.push(...lowerBCurveData);
 | 
	
		
			
				|  |  | +//     } else {
 | 
	
		
			
				|  |  | +//       series.value.push({
 | 
	
		
			
				|  |  | +//         name: `design_var/lowerB${i + 1}`, 
 | 
	
		
			
				|  |  | +//         type: "line",
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +//         data: lowerBCurveData 
 | 
	
		
			
				|  |  | +//       });
 | 
	
		
			
				|  |  | +//     }
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   // 使用 myChart 设置图表的配置
 | 
	
		
			
				|  |  | +//   myChart.setOption({
 | 
	
		
			
				|  |  | +//     legend: {
 | 
	
		
			
				|  |  | +//       data: [
 | 
	
		
			
				|  |  | +//       ...Array.from({ length: curveCount }, (_, i) => `design_var/upperB${i + 1}`),
 | 
	
		
			
				|  |  | +//       ...Array.from({ length: curveCount }, (_, i) => `design_var/lowerB${i + 1}`)
 | 
	
		
			
				|  |  | +//     ] // 设置图例数据为曲线名
 | 
	
		
			
				|  |  | +//     },
 | 
	
		
			
				|  |  | +//     xAxis: {
 | 
	
		
			
				|  |  | +//       data: xdata.value  // 使用更新后的 xdata
 | 
	
		
			
				|  |  | +//     },
 | 
	
		
			
				|  |  | +//     series: series.value  // 使用更新后的 series
 | 
	
		
			
				|  |  | +//   });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//   console.log('更新后的 xdata:', xdata.value);
 | 
	
		
			
				|  |  | +//   console.log('更新后的 series:', series.value);
 | 
	
		
			
				|  |  | +// };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  const getsockechart = (data) => {
 | 
	
		
			
				|  |  |    console.log("曲线数据", data);
 | 
	
		
			
				|  |  |    curvedata.value = data;
 | 
	
	
		
			
				|  | @@ -63,83 +165,86 @@ const getsockechart = (data) => {
 | 
	
		
			
				|  |  |      xdata.value = [];
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // 如果是第一次传入数据,则初始化series为空数组;否则保留之前的数据
 | 
	
		
			
				|  |  | +  if (!series.value) {
 | 
	
		
			
				|  |  | +    series.value = [];
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    let rows = curvedata.value;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // 获取变量名
 | 
	
		
			
				|  |  | +  let vars = rows[0].vars.split(" ");
 | 
	
		
			
				|  |  | +  console.log('变量名:', vars);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    // 继续累加之前的数据
 | 
	
		
			
				|  |  | -  let convergeDate = {
 | 
	
		
			
				|  |  | -    "design_var/upperB": [],
 | 
	
		
			
				|  |  | -    "design_var/lowerB": []
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | +  let convergeDate = {};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // 遍历每一行数据
 | 
	
		
			
				|  |  |    for (let i = 0; i < rows.length; i++) {
 | 
	
		
			
				|  |  |      let vals = rows[i].vals.split(" "); 
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    let upperB = JSON.parse(vals[3]);
 | 
	
		
			
				|  |  | -    let lowerB = JSON.parse(vals[4]);
 | 
	
		
			
				|  |  | +    // 获取每一列的值
 | 
	
		
			
				|  |  | +    for (let j = 0; j < vars.length; j++) {
 | 
	
		
			
				|  |  | +      let columnName = vars[j];
 | 
	
		
			
				|  |  | +      let value = vals[j];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 将新的数据追加到对应的数组中
 | 
	
		
			
				|  |  | -    convergeDate["design_var/upperB"].push(...upperB);
 | 
	
		
			
				|  |  | -    convergeDate["design_var/lowerB"].push(...lowerB);
 | 
	
		
			
				|  |  | +      // 判断值是否是数组
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        let parsedValue = JSON.parse(value); // 尝试解析为数组
 | 
	
		
			
				|  |  | +        if (Array.isArray(parsedValue)) {
 | 
	
		
			
				|  |  | +          // 如果是数组,分解成每个单独的值,创建多条曲线
 | 
	
		
			
				|  |  | +          parsedValue.forEach((item, index) => {
 | 
	
		
			
				|  |  | +            let curveName = `${columnName}_${index + 1}`;
 | 
	
		
			
				|  |  | +            if (!convergeDate[curveName]) {
 | 
	
		
			
				|  |  | +              convergeDate[curveName] = [];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            convergeDate[curveName].push(item);
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          // 如果是单个值,创建单一的曲线
 | 
	
		
			
				|  |  | +          if (!convergeDate[columnName]) {
 | 
	
		
			
				|  |  | +            convergeDate[columnName] = [];
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          convergeDate[columnName].push(parsedValue);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch (e) {
 | 
	
		
			
				|  |  | +        // 如果解析失败,说明该列不是数组,直接作为单个数值处理
 | 
	
		
			
				|  |  | +        if (!convergeDate[columnName]) {
 | 
	
		
			
				|  |  | +          convergeDate[columnName] = [];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        convergeDate[columnName].push(parseFloat(value));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 将新的 step 值追加到 xdata 数组
 | 
	
		
			
				|  |  | -    xdata.value.push(rows[i].step); 
 | 
	
		
			
				|  |  | +    xdata.value.push(rows[i].step);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  // 获取所有的 upperB 和 lowerB 数据
 | 
	
		
			
				|  |  | -  let upperBData = convergeDate["design_var/upperB"];
 | 
	
		
			
				|  |  | -  let lowerBData = convergeDate["design_var/lowerB"];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // 计算每条曲线的数量
 | 
	
		
			
				|  |  | -  let curveCount = upperBData.length / rows.length;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // 遍历每一条曲线,检查是否已经存在,如果存在,则更新数据;否则,创建新曲线
 | 
	
		
			
				|  |  | -  for (let i = 0; i < curveCount; i++) {
 | 
	
		
			
				|  |  | -    let upperBCurveData = [];
 | 
	
		
			
				|  |  | -    let lowerBCurveData = [];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 填充每条曲线的数据
 | 
	
		
			
				|  |  | -    for (let j = 0; j < rows.length; j++) {
 | 
	
		
			
				|  |  | -      upperBCurveData.push(upperBData[j * curveCount + i]);
 | 
	
		
			
				|  |  | -      lowerBCurveData.push(lowerBData[j * curveCount + i]);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +  // 遍历每一个列名,动态更新或创建曲线
 | 
	
		
			
				|  |  | +  Object.keys(convergeDate).forEach((curveName) => {
 | 
	
		
			
				|  |  | +    if(curveName === 'No'|| curveName === 'Time/s') return;
 | 
	
		
			
				|  |  | +    let curveData = convergeDate[curveName];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 查找是否已经存在此曲线
 | 
	
		
			
				|  |  | -    let upperBSeries = series.value.find(s => s.name === `design_var/upperB${i + 1}`);
 | 
	
		
			
				|  |  | -    let lowerBSeries = series.value.find(s => s.name === `design_var/lowerB${i + 1}`);
 | 
	
		
			
				|  |  | +    let existingSeries = series.value.find(s => s.name === curveName);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 如果存在则更新数据,否则创建新曲线
 | 
	
		
			
				|  |  | -    if (upperBSeries) {
 | 
	
		
			
				|  |  | -      upperBSeries.data.push(...upperBCurveData);
 | 
	
		
			
				|  |  | +    if (existingSeries) {
 | 
	
		
			
				|  |  | +      // 如果已存在,更新数据
 | 
	
		
			
				|  |  | +      existingSeries.data.push(...curveData);
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | +      // 否则,创建新的曲线
 | 
	
		
			
				|  |  |        series.value.push({
 | 
	
		
			
				|  |  | -        name: `design_var/upperB${i + 1}`, 
 | 
	
		
			
				|  |  | +        name: curveName,
 | 
	
		
			
				|  |  |          type: "line",
 | 
	
		
			
				|  |  | -        stack: "Total",
 | 
	
		
			
				|  |  | -        data: upperBCurveData 
 | 
	
		
			
				|  |  | +        data: curveData
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (lowerBSeries) {
 | 
	
		
			
				|  |  | -      lowerBSeries.data.push(...lowerBCurveData);
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      series.value.push({
 | 
	
		
			
				|  |  | -        name: `design_var/lowerB${i + 1}`, 
 | 
	
		
			
				|  |  | -        type: "line",
 | 
	
		
			
				|  |  | -        stack: "Total",
 | 
	
		
			
				|  |  | -        data: lowerBCurveData 
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // 使用 myChart 设置图表的配置
 | 
	
		
			
				|  |  |    myChart.setOption({
 | 
	
		
			
				|  |  |      legend: {
 | 
	
		
			
				|  |  | -      data: [
 | 
	
		
			
				|  |  | -      ...Array.from({ length: curveCount }, (_, i) => `design_var/upperB${i + 1}`),
 | 
	
		
			
				|  |  | -      ...Array.from({ length: curveCount }, (_, i) => `design_var/lowerB${i + 1}`)
 | 
	
		
			
				|  |  | -    ] // 设置图例数据为曲线名
 | 
	
		
			
				|  |  | +      data: Object.keys(convergeDate) // 设置图例数据为曲线名
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      xAxis: {
 | 
	
		
			
				|  |  |        data: xdata.value  // 使用更新后的 xdata
 | 
	
	
		
			
				|  | @@ -153,43 +258,117 @@ const getsockechart = (data) => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 数据转化废弃
 | 
	
		
			
				|  |  | +// const getshuju = (data) => {
 | 
	
		
			
				|  |  | +//   curvedata.value = data
 | 
	
		
			
				|  |  | +//   convergeDate.value = []
 | 
	
		
			
				|  |  | +//   series.value = []
 | 
	
		
			
				|  |  | +//   xdata.value = []
 | 
	
		
			
				|  |  | +//   let rows = JSON.parse(curvedata.value)
 | 
	
		
			
				|  |  | +//   let num = 0
 | 
	
		
			
				|  |  | +//   for (let i = 0; i < rows.length; i++) {
 | 
	
		
			
				|  |  | +//     num += 1
 | 
	
		
			
				|  |  | +//     vars.value = rows[i].vars.split(",")
 | 
	
		
			
				|  |  | +//     vals.value = rows[i].vals.split(" ")
 | 
	
		
			
				|  |  | +//     let data = vals.value.map((str) => Number(str))
 | 
	
		
			
				|  |  | +//     convergeDate.value.push(data)
 | 
	
		
			
				|  |  | +//     xdata.value.push(num)
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +//   console.log(convergeDate.value)
 | 
	
		
			
				|  |  | +//   // console.log( convergeDate.value);
 | 
	
		
			
				|  |  | +//   for (let j = 0; j < vars.value.length; j++) {
 | 
	
		
			
				|  |  | +//     let firstColumn = convergeDate.value.map((row) => row[j])
 | 
	
		
			
				|  |  | +//     let item = {
 | 
	
		
			
				|  |  | +//       name: vars.value[j],
 | 
	
		
			
				|  |  | +//       type: "line",
 | 
	
		
			
				|  |  | +//       stack: "Total",
 | 
	
		
			
				|  |  | +//       data: firstColumn
 | 
	
		
			
				|  |  | +//     }
 | 
	
		
			
				|  |  | +//     series.value.push(item)
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +//   myChart.setOption({
 | 
	
		
			
				|  |  | +//     legend: {
 | 
	
		
			
				|  |  | +//       data: vars.value
 | 
	
		
			
				|  |  | +//     },
 | 
	
		
			
				|  |  | +//     xAxis: {
 | 
	
		
			
				|  |  | +//       data: xdata.value
 | 
	
		
			
				|  |  | +//     },
 | 
	
		
			
				|  |  | +//     series: series.value
 | 
	
		
			
				|  |  | +//   })
 | 
	
		
			
				|  |  | +// }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  const getshuju = (data) => {
 | 
	
		
			
				|  |  | -  curvedata.value = data
 | 
	
		
			
				|  |  | -  convergeDate.value = []
 | 
	
		
			
				|  |  | -  series.value = []
 | 
	
		
			
				|  |  | -  xdata.value = []
 | 
	
		
			
				|  |  | -  let rows = JSON.parse(curvedata.value)
 | 
	
		
			
				|  |  | -  let num = 0
 | 
	
		
			
				|  |  | +  // 初始化变量
 | 
	
		
			
				|  |  | +  curvedata.value = data;
 | 
	
		
			
				|  |  | +  convergeDate.value = [];
 | 
	
		
			
				|  |  | +  series.value = [];
 | 
	
		
			
				|  |  | +  xdata.value = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 解析传入的 JSON 数据
 | 
	
		
			
				|  |  | +  let rows = JSON.parse(curvedata.value);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    for (let i = 0; i < rows.length; i++) {
 | 
	
		
			
				|  |  | -    num += 1
 | 
	
		
			
				|  |  | -    vars.value = rows[i].vars.split(",")
 | 
	
		
			
				|  |  | -    vals.value = rows[i].vals.split(" ")
 | 
	
		
			
				|  |  | -    let data = vals.value.map((str) => Number(str))
 | 
	
		
			
				|  |  | -    convergeDate.value.push(data)
 | 
	
		
			
				|  |  | -    xdata.value.push(num)
 | 
	
		
			
				|  |  | +    // 解析每一行的列名和列值
 | 
	
		
			
				|  |  | +    vars.value = rows[i].vars.split(" ");  // 列名(空格分隔)
 | 
	
		
			
				|  |  | +    vals.value = rows[i].vals.split(" ");  // 对应的值(空格分隔)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 处理 vals 中的数据
 | 
	
		
			
				|  |  | +    let data = vals.value.map((str) => {
 | 
	
		
			
				|  |  | +      // 处理每个值,如果是数组类型(JSON 字符串),则转换为数组
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        return JSON.parse(str);
 | 
	
		
			
				|  |  | +      } catch (e) {
 | 
	
		
			
				|  |  | +        return Number(str);  // 如果不是数组,直接转换为数字
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    convergeDate.value.push(data);
 | 
	
		
			
				|  |  | +    xdata.value.push(rows[i].step); 
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  console.log(convergeDate.value)
 | 
	
		
			
				|  |  | -  // console.log( convergeDate.value);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 遍历每一个列名
 | 
	
		
			
				|  |  |    for (let j = 0; j < vars.value.length; j++) {
 | 
	
		
			
				|  |  | -    let firstColumn = convergeDate.value.map((row) => row[j])
 | 
	
		
			
				|  |  | -    let item = {
 | 
	
		
			
				|  |  | -      name: vars.value[j],
 | 
	
		
			
				|  |  | -      type: "line",
 | 
	
		
			
				|  |  | -      stack: "Total",
 | 
	
		
			
				|  |  | -      data: firstColumn
 | 
	
		
			
				|  |  | +    if (vars.value[j] === 'No' || vars.value[j] === 'Time/s') {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    let firstColumn = convergeDate.value.map((row) => row[j]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 如果该列是数组类型的数据(例如 design_var/upperB),需要为每个值创建一条曲线
 | 
	
		
			
				|  |  | +    if (Array.isArray(firstColumn[0])) {
 | 
	
		
			
				|  |  | +      firstColumn[0].forEach((_, idx) => {
 | 
	
		
			
				|  |  | +        let curveData = convergeDate.value.map((row) => row[j][idx]);
 | 
	
		
			
				|  |  | +        let item = {
 | 
	
		
			
				|  |  | +          name: `${vars.value[j]}-${idx + 1}`,  // 为每条曲线命名,使用列名 + 索引
 | 
	
		
			
				|  |  | +          type: "line",  
 | 
	
		
			
				|  |  | +          data: curveData  
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        series.value.push(item);  
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      // 如果该列不是数组类型(普通值),直接绘制一条曲线
 | 
	
		
			
				|  |  | +      let item = {
 | 
	
		
			
				|  |  | +        name: vars.value[j], 
 | 
	
		
			
				|  |  | +        type: "line",  
 | 
	
		
			
				|  |  | +        data: firstColumn 
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      series.value.push(item); 
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    series.value.push(item)
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 提取 legend 的名称
 | 
	
		
			
				|  |  | +  const legendData = series.value.map(item => item.name);
 | 
	
		
			
				|  |  | +  // 更新图表配置
 | 
	
		
			
				|  |  |    myChart.setOption({
 | 
	
		
			
				|  |  |      legend: {
 | 
	
		
			
				|  |  | -      data: vars.value
 | 
	
		
			
				|  |  | +      data: legendData.value 
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      xAxis: {
 | 
	
		
			
				|  |  | -      data: xdata.value
 | 
	
		
			
				|  |  | +      data: xdata.value  
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    series: series.value
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    series: series.value  
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const linechart = () => {
 | 
	
		
			
				|  |  |    //  let chartDom = document.getElementById('line');
 | 
	
	
		
			
				|  | @@ -206,21 +385,30 @@ const linechart = () => {
 | 
	
		
			
				|  |  |      legend: {
 | 
	
		
			
				|  |  |        data: vars.value,
 | 
	
		
			
				|  |  |        orient: "vertical", // 图例方向 (horizontal水平, vertical垂直)
 | 
	
		
			
				|  |  | -      right: '4%',
 | 
	
		
			
				|  |  | -      top: '2%'
 | 
	
		
			
				|  |  | +      right: '-8%',
 | 
	
		
			
				|  |  | +      top: '2%',
 | 
	
		
			
				|  |  | +      itemWidth: 40,  // 设置每个图例项的宽度
 | 
	
		
			
				|  |  | +      itemHeight: 14,  // 设置每个图例项的高度
 | 
	
		
			
				|  |  | +      // icon: "line",
 | 
	
		
			
				|  |  | +      width: 'auto',
 | 
	
		
			
				|  |  | +      height: 'auto',
 | 
	
		
			
				|  |  | +      pageButtonItemGap: 10,  // 上下滚动按钮之间的间隔
 | 
	
		
			
				|  |  | +      pageButtonPosition: 'end',  // 滚动按钮位置,'start'、'end'
 | 
	
		
			
				|  |  | +      type: 'scroll',
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      grid: {
 | 
	
		
			
				|  |  |        show: false,
 | 
	
		
			
				|  |  |        left: "6%",
 | 
	
		
			
				|  |  | -      right: "4%",
 | 
	
		
			
				|  |  | +      right: "14%",
 | 
	
		
			
				|  |  |        bottom: "10%",
 | 
	
		
			
				|  |  |        containLabel: true
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    toolbox: {
 | 
	
		
			
				|  |  | -      feature: {
 | 
	
		
			
				|  |  | -        saveAsImage: {}
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | +    // toolbox: {
 | 
	
		
			
				|  |  | +    //   feature: {
 | 
	
		
			
				|  |  | +    //     saveAsImage: {}
 | 
	
		
			
				|  |  | +    //   }
 | 
	
		
			
				|  |  | +    // },
 | 
	
		
			
				|  |  |      xAxis: {
 | 
	
		
			
				|  |  |        type: "category",
 | 
	
		
			
				|  |  |        boundaryGap: false,
 |