|
@@ -2,7 +2,6 @@
|
|
|
<!-- 折线图 -->
|
|
<!-- 折线图 -->
|
|
|
<div style="width: 100%; height: 100%">
|
|
<div style="width: 100%; height: 100%">
|
|
|
<div class="echartitem" style="width: 100%; height: 100%">
|
|
<div class="echartitem" style="width: 100%; height: 100%">
|
|
|
- <!-- <h3 class="selcal">{{ props.selval }}</h3> -->
|
|
|
|
|
<div
|
|
<div
|
|
|
id="line2"
|
|
id="line2"
|
|
|
ref="chartContainer"
|
|
ref="chartContainer"
|
|
@@ -11,7 +10,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
- <script setup>
|
|
|
|
|
|
|
+<script setup>
|
|
|
import { ref, onMounted, reactive, markRaw, inject, watch, nextTick } from "vue"
|
|
import { ref, onMounted, reactive, markRaw, inject, watch, nextTick } from "vue"
|
|
|
import { RouterView, RouterLink } from "vue-router"
|
|
import { RouterView, RouterLink } from "vue-router"
|
|
|
import { request, uploadFile } from "@/utils/request"
|
|
import { request, uploadFile } from "@/utils/request"
|
|
@@ -22,230 +21,54 @@ let vals = ref([])
|
|
|
let series = ref([])
|
|
let series = ref([])
|
|
|
let xdata = ref([])
|
|
let xdata = ref([])
|
|
|
let chartContainer = ref(null)
|
|
let chartContainer = ref(null)
|
|
|
-let myChart
|
|
|
|
|
-let chartDom = ref()
|
|
|
|
|
-let option = ref(null)
|
|
|
|
|
-let convergeDate = ref([])
|
|
|
|
|
let curvedata = ref("")
|
|
let curvedata = ref("")
|
|
|
-let state = reactive({
|
|
|
|
|
- instance: null
|
|
|
|
|
-})
|
|
|
|
|
|
|
+
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
- echartdata: {
|
|
|
|
|
- type: String
|
|
|
|
|
- },
|
|
|
|
|
- curvedata: {
|
|
|
|
|
- type: String
|
|
|
|
|
- },
|
|
|
|
|
echartLineshow: {
|
|
echartLineshow: {
|
|
|
type: Boolean,
|
|
type: Boolean,
|
|
|
default: false
|
|
default: false
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
-onMounted(() => {
|
|
|
|
|
-
|
|
|
|
|
- myChart = echarts.init(chartContainer.value)
|
|
|
|
|
- linechart()
|
|
|
|
|
- myChart.resize();
|
|
|
|
|
-})
|
|
|
|
|
|
|
|
|
|
-// 监听 scattershow 变化
|
|
|
|
|
-watch(
|
|
|
|
|
- () => props.echartLineshow,
|
|
|
|
|
- (newValue) => {
|
|
|
|
|
- if (newValue) {
|
|
|
|
|
- nextTick(() => {
|
|
|
|
|
- const chartDom = chartContainer.value
|
|
|
|
|
- if (chartDom) {
|
|
|
|
|
- myChart = echarts.init(chartDom)
|
|
|
|
|
- myChart.resize() // 手动调整图表大小
|
|
|
|
|
- linechart()// 设置图表配置
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- { immediate: true }
|
|
|
|
|
-)
|
|
|
|
|
//初始化
|
|
//初始化
|
|
|
const echatinit = () => {
|
|
const echatinit = () => {
|
|
|
- convergeDate.value = []
|
|
|
|
|
series.value = []
|
|
series.value = []
|
|
|
xdata.value = []
|
|
xdata.value = []
|
|
|
}
|
|
}
|
|
|
-// 从websocket取数据
|
|
|
|
|
-// const getsockechart=(data)=>{
|
|
|
|
|
-// curvedata.value=data;
|
|
|
|
|
-// series.value=[];
|
|
|
|
|
-// let rows=curvedata.value;
|
|
|
|
|
-// for(let i=0;i<rows.length;i++){
|
|
|
|
|
-
|
|
|
|
|
-// 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(rows[i].step);
|
|
|
|
|
-// }
|
|
|
|
|
-// 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 getsockechart = (data) => {
|
|
|
|
|
- curvedata.value = data;
|
|
|
|
|
- convergeDate.value = [];
|
|
|
|
|
- series.value = [];
|
|
|
|
|
- xdata.value = [];
|
|
|
|
|
-
|
|
|
|
|
- let rows = JSON.parse(curvedata.value);
|
|
|
|
|
- if (!rows.length) return; // 处理空数据
|
|
|
|
|
-
|
|
|
|
|
- let varsList = rows[0].vars.split(","); // 提取变量名
|
|
|
|
|
- vars.value = varsList;
|
|
|
|
|
-
|
|
|
|
|
- // 解析数据
|
|
|
|
|
- rows.forEach((row, index) => {
|
|
|
|
|
- xdata.value.push(index + 1); // 直接填充 X 轴数据
|
|
|
|
|
- convergeDate.value.push(row.vals.split(" ").map(Number)); // 解析数值数组
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 生成 series 数据
|
|
|
|
|
- series.value = varsList.map((varName, j) => ({
|
|
|
|
|
- name: varName,
|
|
|
|
|
- type: "line",
|
|
|
|
|
- stack: "Total",
|
|
|
|
|
- symbol: "none",
|
|
|
|
|
- data: convergeDate.value.map(row => row[j]) // 获取每列数据
|
|
|
|
|
- }));
|
|
|
|
|
-
|
|
|
|
|
- // 更新图表
|
|
|
|
|
- myChart.setOption({
|
|
|
|
|
- legend: {
|
|
|
|
|
- data: vars.value,
|
|
|
|
|
- },
|
|
|
|
|
- xAxis: {
|
|
|
|
|
- type: "category",
|
|
|
|
|
- data: xdata.value,
|
|
|
|
|
- },
|
|
|
|
|
- yAxis: {
|
|
|
|
|
- type: "value",
|
|
|
|
|
- },
|
|
|
|
|
- series: series.value,
|
|
|
|
|
- });
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-// 绘制所有数据的曲线
|
|
|
|
|
-const getshuju = (dataheader, data) => {
|
|
|
|
|
- console.log("散点图曲线数据1:", data);
|
|
|
|
|
-
|
|
|
|
|
- curvedata.value = data;
|
|
|
|
|
- series.value = [];
|
|
|
|
|
- xdata.value = [];
|
|
|
|
|
-
|
|
|
|
|
- vars.value = dataheader; // dataheader 是包含 label 和 prop 的数组
|
|
|
|
|
- vals.value = data;
|
|
|
|
|
|
|
|
|
|
- // 生成 x 轴数据
|
|
|
|
|
- for (let i = 0; i < vals.value.length; i++) {
|
|
|
|
|
- xdata.value.push(i); // x 轴数据为行索引
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 为每个字段生成一条曲线
|
|
|
|
|
- for (let colIndex = 0; colIndex < vars.value.length; colIndex++) {
|
|
|
|
|
- const prop = vars.value[colIndex].prop; // 获取当前列的字段名
|
|
|
|
|
- const label = vars.value[colIndex].label; // 获取当前列的显示名称
|
|
|
|
|
-
|
|
|
|
|
- let seriesData = [];
|
|
|
|
|
-
|
|
|
|
|
- // 遍历每一行,提取该列的数据
|
|
|
|
|
- for (let rowIndex = 0; rowIndex < vals.value.length; rowIndex++) {
|
|
|
|
|
- let value = vals.value[rowIndex][prop]; // 获取当前列的值
|
|
|
|
|
- seriesData.push([xdata.value[rowIndex], value]); // 添加到 seriesData
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 为每列数据生成一条曲线,使用 label 作为曲线的名字
|
|
|
|
|
- series.value.push({
|
|
|
|
|
- name: label, // 使用 label 作为曲线名
|
|
|
|
|
- type: "line", // 散点图类型
|
|
|
|
|
- data: seriesData,
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 处理 ECharts 图表配置
|
|
|
|
|
- const myChart = echarts.init(chartContainer.value);
|
|
|
|
|
-
|
|
|
|
|
- myChart.setOption({
|
|
|
|
|
- legend: {
|
|
|
|
|
- data: vars.value.map(item => item.label), // 图例数据是列名
|
|
|
|
|
- },
|
|
|
|
|
- xAxis: {
|
|
|
|
|
- type: "category", // 设置为 "category" 表示 x 轴为分类数据
|
|
|
|
|
- data: xdata.value, // x 轴数据为索引
|
|
|
|
|
- },
|
|
|
|
|
- yAxis: {
|
|
|
|
|
- type: "value", // y 轴是数值型
|
|
|
|
|
- },
|
|
|
|
|
- series: series.value, // 使用生成的 series 数据
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- console.log("初始化后的 series:", series.value);
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-const selectshuju = (listcbval,listcbval2,dataheader, data) => {
|
|
|
|
|
|
|
+const selectshuju = (listcbval, listcbval2, dataheader, data) => {
|
|
|
console.log("图曲线数据1:", data);
|
|
console.log("图曲线数据1:", data);
|
|
|
|
|
|
|
|
|
|
+ // 清空旧数据
|
|
|
curvedata.value = data;
|
|
curvedata.value = data;
|
|
|
series.value = [];
|
|
series.value = [];
|
|
|
xdata.value = [];
|
|
xdata.value = [];
|
|
|
const ydata = ref([]);
|
|
const ydata = ref([]);
|
|
|
|
|
|
|
|
- vars.value = dataheader; // dataheader 是包含 label 和 prop 的数组
|
|
|
|
|
- vals.value = data; // vals 是表格数据
|
|
|
|
|
|
|
+ vars.value = dataheader;
|
|
|
|
|
+ vals.value = data;
|
|
|
|
|
|
|
|
- console.log('listcbval',listcbval)
|
|
|
|
|
- console.log('listcbval2',listcbval2)
|
|
|
|
|
// 生成 X 轴数据和 Y 轴数据
|
|
// 生成 X 轴数据和 Y 轴数据
|
|
|
- const xColumns = listcbval; // 获取 listcbval 中选择的列,作为 X 轴
|
|
|
|
|
- const yColumns = listcbval2; // 获取 listcbval2 中选择的列,作为 Y 轴
|
|
|
|
|
- console.log('xColumns',xColumns)
|
|
|
|
|
- console.log('yColumns',yColumns)
|
|
|
|
|
|
|
+ const xColumns = listcbval;
|
|
|
|
|
+ const yColumns = listcbval2;
|
|
|
|
|
|
|
|
if (xColumns.length === 0 || yColumns.length === 0) {
|
|
if (xColumns.length === 0 || yColumns.length === 0) {
|
|
|
console.error('请先选择 X 轴和 Y 轴的变量');
|
|
console.error('请先选择 X 轴和 Y 轴的变量');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 遍历每一行数据,为每对 X 和 Y 轴选择的列生成数据
|
|
|
|
|
|
|
+ // 处理数据
|
|
|
for (let i = 0; i < vals.value.length; i++) {
|
|
for (let i = 0; i < vals.value.length; i++) {
|
|
|
let xValue = [];
|
|
let xValue = [];
|
|
|
let yValue = [];
|
|
let yValue = [];
|
|
|
|
|
|
|
|
- // 对于每个 X 轴选择的列,提取该列数据
|
|
|
|
|
for (let xCol of xColumns) {
|
|
for (let xCol of xColumns) {
|
|
|
- let xColumnData = vals.value[i][xCol]; // 获取当前行的 X 列数据
|
|
|
|
|
|
|
+ let xColumnData = vals.value[i][xCol];
|
|
|
xValue.push(xColumnData);
|
|
xValue.push(xColumnData);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 对于每个 Y 轴选择的列,提取该列数据
|
|
|
|
|
for (let yCol of yColumns) {
|
|
for (let yCol of yColumns) {
|
|
|
- let yColumnData = vals.value[i][yCol]; // 获取当前行的 Y 列数据
|
|
|
|
|
|
|
+ let yColumnData = vals.value[i][yCol];
|
|
|
yValue.push(yColumnData);
|
|
yValue.push(yColumnData);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -253,60 +76,39 @@ const selectshuju = (listcbval,listcbval2,dataheader, data) => {
|
|
|
ydata.value.push(yValue);
|
|
ydata.value.push(yValue);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 为每个 Y 轴数据列生成一条曲线
|
|
|
|
|
for (let yColIndex = 0; yColIndex < yColumns.length; yColIndex++) {
|
|
for (let yColIndex = 0; yColIndex < yColumns.length; yColIndex++) {
|
|
|
- const label = yColumns[yColIndex]; // 使用 Y 轴列名作为曲线的标签
|
|
|
|
|
|
|
+ const label = yColumns[yColIndex];
|
|
|
let seriesData = [];
|
|
let seriesData = [];
|
|
|
|
|
|
|
|
for (let rowIndex = 0; rowIndex < vals.value.length; rowIndex++) {
|
|
for (let rowIndex = 0; rowIndex < vals.value.length; rowIndex++) {
|
|
|
- let xValues = xdata.value[rowIndex]; // 获取当前行的 X 轴数据
|
|
|
|
|
- let yValue = ydata.value[rowIndex][yColIndex]; // 获取当前行的 Y 轴数据
|
|
|
|
|
|
|
+ let xValues = xdata.value[rowIndex];
|
|
|
|
|
+ let yValue = ydata.value[rowIndex][yColIndex];
|
|
|
|
|
|
|
|
- // 将 X 和 Y 的数据组成成对的数据,传给 seriesData
|
|
|
|
|
for (let xVal of xValues) {
|
|
for (let xVal of xValues) {
|
|
|
- seriesData.push([xVal, yValue]); // 每对 (X, Y) 数据
|
|
|
|
|
|
|
+ seriesData.push([xVal, yValue]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 生成曲线的数据
|
|
|
|
|
series.value.push({
|
|
series.value.push({
|
|
|
- name: label, // 使用列名作为曲线名
|
|
|
|
|
- type: "line", // 散点图类型
|
|
|
|
|
- data: seriesData,
|
|
|
|
|
|
|
+ name: label,
|
|
|
|
|
+ type: "line",
|
|
|
|
|
+ data: seriesData,
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 处理 ECharts 图表配置
|
|
|
|
|
- const myChart = echarts.init(chartContainer.value);
|
|
|
|
|
|
|
+ // 获取或初始化图表
|
|
|
|
|
+ let myChart = echarts.getInstanceByDom(chartContainer.value);
|
|
|
|
|
+ if (!myChart) {
|
|
|
|
|
+ myChart = echarts.init(chartContainer.value);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
const xAxisLabel = dataheader.find(item => item.prop === xColumns[0])?.label || xColumns[0];
|
|
const xAxisLabel = dataheader.find(item => item.prop === xColumns[0])?.label || xColumns[0];
|
|
|
const yAxisLabel = getFormattedYLabels(yColumns, dataheader);
|
|
const yAxisLabel = getFormattedYLabels(yColumns, dataheader);
|
|
|
const yAxisLabel1 = getFormattedYLabels1(yColumns, dataheader);
|
|
const yAxisLabel1 = getFormattedYLabels1(yColumns, dataheader);
|
|
|
const chartTitle = `${xAxisLabel} - ${yAxisLabel1}`;
|
|
const chartTitle = `${xAxisLabel} - ${yAxisLabel1}`;
|
|
|
|
|
|
|
|
- myChart.setOption({
|
|
|
|
|
- title: {
|
|
|
|
|
- text: chartTitle,
|
|
|
|
|
- },
|
|
|
|
|
- legend: {
|
|
|
|
|
- data: yColumns, // 图例数据使用 Y 轴的列名
|
|
|
|
|
- },
|
|
|
|
|
- xAxis: {
|
|
|
|
|
- type: "value",
|
|
|
|
|
- data: xdata.value, // x 轴数据为 X 轴数据
|
|
|
|
|
- name: xAxisLabel,
|
|
|
|
|
- scale: true,
|
|
|
|
|
- },
|
|
|
|
|
- yAxis: {
|
|
|
|
|
- type: "value", // y 轴是数值型
|
|
|
|
|
- name: yAxisLabel,
|
|
|
|
|
- scale: true,
|
|
|
|
|
- },
|
|
|
|
|
- series: series.value, // 使用生成的 series 数据
|
|
|
|
|
-
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- console.log("初始化后的 series:", series.value);
|
|
|
|
|
|
|
+ // 调用linechart函数
|
|
|
|
|
+ linechart(chartTitle, xAxisLabel, yAxisLabel, yColumns);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const getFormattedYLabels = (columns, header, maxLength = 20) => {
|
|
const getFormattedYLabels = (columns, header, maxLength = 20) => {
|
|
@@ -337,21 +139,29 @@ const getFormattedYLabels1 = (columns, header, maxLength = 20) => {
|
|
|
return fullLabel;
|
|
return fullLabel;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const linechart = () => {
|
|
|
|
|
- option.value = {
|
|
|
|
|
|
|
+// linechart函数,接收额外参数
|
|
|
|
|
+const linechart = (chartTitle, xAxisLabel, yAxisLabel, legendData) => {
|
|
|
|
|
+ // 获取图表实例
|
|
|
|
|
+ let myChart = echarts.getInstanceByDom(chartContainer.value);
|
|
|
|
|
+ if (!myChart) {
|
|
|
|
|
+ myChart = echarts.init(chartContainer.value);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 构建新的option,保留所有样式配置
|
|
|
|
|
+ const newOption = {
|
|
|
title: {
|
|
title: {
|
|
|
- text: " ",
|
|
|
|
|
|
|
+ text: chartTitle || " ", // 使用传入的标题或默认空格
|
|
|
left: "center",
|
|
left: "center",
|
|
|
top: "5%",
|
|
top: "5%",
|
|
|
textStyle: {
|
|
textStyle: {
|
|
|
color: "#333333",
|
|
color: "#333333",
|
|
|
fontSize: 16,
|
|
fontSize: 16,
|
|
|
fontWeight: "normal",
|
|
fontWeight: "normal",
|
|
|
- fontFamily:'Microsoft YaHei'
|
|
|
|
|
|
|
+ fontFamily: 'Microsoft YaHei'
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
tooltip: {
|
|
tooltip: {
|
|
|
- trigger: "axis", //item
|
|
|
|
|
|
|
+ trigger: "axis",
|
|
|
backgroundColor: "rgba(0,0,0,.6)",
|
|
backgroundColor: "rgba(0,0,0,.6)",
|
|
|
borderColor: "rgba(147, 235, 248, .8)",
|
|
borderColor: "rgba(147, 235, 248, .8)",
|
|
|
textStyle: {
|
|
textStyle: {
|
|
@@ -359,8 +169,8 @@ const linechart = () => {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
legend: {
|
|
legend: {
|
|
|
- data: vars.value,
|
|
|
|
|
- orient: "vertical", // 图例方向 (horizontal水平, vertical垂直)
|
|
|
|
|
|
|
+ data: legendData || vars.value, // 使用传入的图例数据或默认
|
|
|
|
|
+ orient: "vertical",
|
|
|
right: "0%",
|
|
right: "0%",
|
|
|
top: "2%",
|
|
top: "2%",
|
|
|
itemWidth: 30,
|
|
itemWidth: 30,
|
|
@@ -375,102 +185,83 @@ const linechart = () => {
|
|
|
bottom: "10%",
|
|
bottom: "10%",
|
|
|
containLabel: true
|
|
containLabel: true
|
|
|
},
|
|
},
|
|
|
- // toolbox: {
|
|
|
|
|
- // feature: {
|
|
|
|
|
- // saveAsImage: {}
|
|
|
|
|
- // }
|
|
|
|
|
- // },
|
|
|
|
|
xAxis: {
|
|
xAxis: {
|
|
|
type: "value",
|
|
type: "value",
|
|
|
boundaryGap: false,
|
|
boundaryGap: false,
|
|
|
- name: "",
|
|
|
|
|
- nameGap:30,
|
|
|
|
|
- nameTextStyle:{
|
|
|
|
|
- fontSize: 16,
|
|
|
|
|
- color:'#333333',
|
|
|
|
|
- fontFamily:'Microsoft YaHei'
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ name: xAxisLabel || "", // 使用传入的x轴标签或默认
|
|
|
|
|
+ nameGap: 30,
|
|
|
|
|
+ nameTextStyle: {
|
|
|
|
|
+ fontSize: 16,
|
|
|
|
|
+ color: '#333333',
|
|
|
|
|
+ fontFamily: 'Microsoft YaHei'
|
|
|
|
|
+ },
|
|
|
nameLocation: 'middle',
|
|
nameLocation: 'middle',
|
|
|
data: xdata.value,
|
|
data: xdata.value,
|
|
|
axisLine: {
|
|
axisLine: {
|
|
|
- //X轴线
|
|
|
|
|
show: true,
|
|
show: true,
|
|
|
lineStyle: {
|
|
lineStyle: {
|
|
|
- color: "#333333", // 线的颜色
|
|
|
|
|
- width: 1, // 线宽
|
|
|
|
|
- type: "solid" // 线的类型,默认为实线,可选:'solid', 'dashed', 'dotted'
|
|
|
|
|
|
|
+ color: "#333333",
|
|
|
|
|
+ width: 1,
|
|
|
|
|
+ type: "solid"
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
splitLine: {
|
|
splitLine: {
|
|
|
- show: true // 如果不需要网格线,可以设置为 false
|
|
|
|
|
|
|
+ show: true
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
yAxis: {
|
|
yAxis: {
|
|
|
type: "value",
|
|
type: "value",
|
|
|
- name:"",
|
|
|
|
|
- nameGap:50,
|
|
|
|
|
- nameTextStyle:{
|
|
|
|
|
- fontsize:16,
|
|
|
|
|
- color:'#333333',
|
|
|
|
|
- fontFamily:'Microsoft YaHei'
|
|
|
|
|
|
|
+ name: yAxisLabel || "", // 使用传入的y轴标签或默认
|
|
|
|
|
+ nameGap: 50,
|
|
|
|
|
+ nameTextStyle: {
|
|
|
|
|
+ fontSize: 16,
|
|
|
|
|
+ color: '#333333',
|
|
|
|
|
+ fontFamily: 'Microsoft YaHei'
|
|
|
},
|
|
},
|
|
|
- nameLocation:"middle",
|
|
|
|
|
|
|
+ nameLocation: "middle",
|
|
|
axisTick: {
|
|
axisTick: {
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
splitLine: {
|
|
splitLine: {
|
|
|
- show:true
|
|
|
|
|
|
|
+ show: true
|
|
|
},
|
|
},
|
|
|
axisLine: {
|
|
axisLine: {
|
|
|
- //Y轴线
|
|
|
|
|
show: true,
|
|
show: true,
|
|
|
lineStyle: {
|
|
lineStyle: {
|
|
|
- color: "#333333", // 线的颜色
|
|
|
|
|
- width: 1, // 线宽
|
|
|
|
|
- type: "solid" // 线的类型,默认为实线,可选:'solid', 'dashed', 'dotted'
|
|
|
|
|
|
|
+ color: "#333333",
|
|
|
|
|
+ width: 1,
|
|
|
|
|
+ type: "solid"
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
dataZoom: [
|
|
dataZoom: [
|
|
|
{
|
|
{
|
|
|
- type:"inside",
|
|
|
|
|
|
|
+ type: "inside",
|
|
|
xAxisIndex: [0],
|
|
xAxisIndex: [0],
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- type:'slider',
|
|
|
|
|
|
|
+ type: 'slider',
|
|
|
xAxisIndex: [0],
|
|
xAxisIndex: [0],
|
|
|
show: false,
|
|
show: false,
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
|
series: series.value
|
|
series: series.value
|
|
|
- }
|
|
|
|
|
- option.value && myChart.setOption(option.value)
|
|
|
|
|
- window.onresize = function () {
|
|
|
|
|
- // 让图表自适应大小
|
|
|
|
|
- myChart.resize()
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-// 监听数据变化,重绘图表
|
|
|
|
|
-// watch( myChart.value, () => {
|
|
|
|
|
-// console.log(11111)
|
|
|
|
|
-// window.onresize = function() {
|
|
|
|
|
-// // 让图表自适应大小
|
|
|
|
|
-// myChart.value.resize();
|
|
|
|
|
-// };
|
|
|
|
|
-// });
|
|
|
|
|
-//window.addEventListener('resize', handleResize);
|
|
|
|
|
-// watch(series, () => {
|
|
|
|
|
-// linechart();
|
|
|
|
|
-// }, { deep: true });
|
|
|
|
|
-// watch(() =>props.echartdata, (newValue, oldValue) => {
|
|
|
|
|
-// // 这里处理 echartData 变化的逻辑
|
|
|
|
|
-// console.log(11111)
|
|
|
|
|
-// console.log('echartData changed:', newValue);
|
|
|
|
|
-// // console.log(optmonitor1.value);
|
|
|
|
|
-// }, {deep: true ,immediate: true });
|
|
|
|
|
-defineExpose({ linechart, getsockechart, echatinit ,getshuju,selectshuju})
|
|
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ // 关键修改:使用replaceMerge确保完全替换series和xAxis.data
|
|
|
|
|
+ myChart.setOption(newOption, {
|
|
|
|
|
+ replaceMerge: ['series', 'xAxis', 'legend'], // 指定要完全替换的组件
|
|
|
|
|
+ notMerge: false // 仍然合并其他配置
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ window.onresize = function() {
|
|
|
|
|
+ myChart.resize();
|
|
|
|
|
+ };
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+defineExpose({ echatinit ,selectshuju})
|
|
|
</script>
|
|
</script>
|
|
|
- <style lang="scss" scoped>
|
|
|
|
|
|
|
+<style lang="scss" scoped>
|
|
|
.selcal {
|
|
.selcal {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
top: 37%;
|
|
top: 37%;
|