|
@@ -0,0 +1,394 @@
|
|
|
+<template>
|
|
|
+ <div class="chartsContent">
|
|
|
+ <el-card shadow="never" v-if="type === 'LeafRootOutline'">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <h4 style="color: black; font-size: 16px; font-weight: 700">
|
|
|
+ 叶根轮廓拟合图
|
|
|
+ </h4>
|
|
|
+ <div style="font-size: 12px; color: #666">
|
|
|
+ 江西大唐国际新能源有限公司\金华山风电场\01#风机 2024/3/1 11:00:00
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="line-chart" ref="chart"></div>
|
|
|
+ </el-card>
|
|
|
+ <el-card shadow="never" v-else-if="type === 'LeafRootRelativeOutline'">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <h4 style="color: black; font-size: 16px; font-weight: 700">
|
|
|
+ 叶根相对平均轮廓拟合图
|
|
|
+ </h4>
|
|
|
+ <div style="font-size: 12px; color: #666">
|
|
|
+ 江西大唐国际新能源有限公司\金华山风电场\01#风机 2024/3/1 11:00:00
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="line-chart" ref="chart"></div>
|
|
|
+ </el-card>
|
|
|
+ <el-card shadow="never" v-else-if="type === 'LeafTipProfile'">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <h4 style="color: black; font-size: 16px; font-weight: 700">
|
|
|
+ 叶尖轮廓拟合图
|
|
|
+ </h4>
|
|
|
+ <div style="font-size: 12px; color: #666">
|
|
|
+ 江西大唐国际新能源有限公司\金华山风电场\01#风机 2024/3/1 11:00:00
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="line-chart" ref="chart"></div>
|
|
|
+ </el-card>
|
|
|
+ <el-card shadow="never" v-else-if="type === 'LeafTipRelativeProfile'">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <h4 style="color: black; font-size: 16px; font-weight: 700">
|
|
|
+ 叶尖相对平均轮廓拟合图
|
|
|
+ </h4>
|
|
|
+ <div style="font-size: 12px; color: #666">
|
|
|
+ 江西大唐国际新能源有限公司\金华山风电场\01#风机 2024/3/1 11:00:00
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="line-chart" ref="chart"></div>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import * as echarts from "echarts"; // 导入 echarts 库
|
|
|
+import screenfull from "screenfull";
|
|
|
+
|
|
|
+export default {
|
|
|
+ props: {
|
|
|
+ type: {
|
|
|
+ default: "",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ currentIndex: 0, // 默认索引
|
|
|
+ tableData: [], // 数据
|
|
|
+ originalChartStyle: {}, // 用于存储原始样式
|
|
|
+ };
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.initializeChart();
|
|
|
+ // 监听键盘事件
|
|
|
+ window.addEventListener("keydown", this.handleKeyDown);
|
|
|
+ },
|
|
|
+ destroyed() {
|
|
|
+ // 移除键盘事件监听
|
|
|
+ window.removeEventListener("keydown", this.handleKeyDown);
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 初始化图表
|
|
|
+ initializeChart() {
|
|
|
+ const chartDom = this.$refs.chart;
|
|
|
+ this.chartInstance = echarts.init(chartDom);
|
|
|
+ const defaultData = [
|
|
|
+ Math.floor(Math.random() * 300),
|
|
|
+ Math.floor(Math.random() * 300),
|
|
|
+ Math.floor(Math.random() * 300),
|
|
|
+ ];
|
|
|
+ const defaultLabels = ["2024/1/1", "2024/1/2", "2024/1/3"];
|
|
|
+ this.updateChart(defaultData, defaultLabels);
|
|
|
+
|
|
|
+ // 保存初始样式
|
|
|
+ this.originalChartStyle = {
|
|
|
+ width: chartDom.style.width,
|
|
|
+ height: chartDom.style.height,
|
|
|
+ backgroundColor: chartDom.style.backgroundColor,
|
|
|
+ };
|
|
|
+ },
|
|
|
+ // 更新图表数据
|
|
|
+ updateChart(data, labels) {
|
|
|
+ const defaultData = Array.from({ length: 5000 }, () =>
|
|
|
+ Math.floor(Math.random() * 300)
|
|
|
+ );
|
|
|
+ const defaultLabels = Array.from(
|
|
|
+ { length: 5000 },
|
|
|
+ (_, index) => `2024/1/${index + 1}`
|
|
|
+ );
|
|
|
+ const option = {
|
|
|
+ color: ["#9CC5AF", "#C9866B", "#709EA6", "#344453", "#B34138"],
|
|
|
+ title: [
|
|
|
+ {
|
|
|
+ text: "",
|
|
|
+ left: "center",
|
|
|
+ // subtext: '纯属虚构'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: "",
|
|
|
+ // subtext:'实线',
|
|
|
+ textStyle: {
|
|
|
+ color: "#c23531",
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ right: 35,
|
|
|
+ top: 275,
|
|
|
+ // subtext: '纯属虚构'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: "",
|
|
|
+ right: 3,
|
|
|
+ top: 280,
|
|
|
+ textStyle: {
|
|
|
+ color: "#c23531",
|
|
|
+ fontSize: 12,
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ text: "",
|
|
|
+ textStyle: {
|
|
|
+ color: "#2f4554",
|
|
|
+ },
|
|
|
+ right: 35,
|
|
|
+ top: 295,
|
|
|
+ // subtext: '纯属虚构'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: "",
|
|
|
+ textStyle: {
|
|
|
+ // fontSize:12,
|
|
|
+ color: "#d48265",
|
|
|
+ },
|
|
|
+ right: 0,
|
|
|
+ top: 219,
|
|
|
+ // subtext: '纯属虚构'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: "",
|
|
|
+ textStyle: {
|
|
|
+ color: "#61a0a8",
|
|
|
+ },
|
|
|
+ right: 35,
|
|
|
+ top: 410,
|
|
|
+ // subtext: '纯属虚构'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ top: 510,
|
|
|
+ left: 50,
|
|
|
+ subtextStyle: {
|
|
|
+ fontWeight: "bold",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ toolbox: {
|
|
|
+ feature: {
|
|
|
+ dataZoom: { yAxisIndex: "none" },
|
|
|
+ restore: {},
|
|
|
+ saveAsImage: {},
|
|
|
+ myCustomTool: {
|
|
|
+ show: true,
|
|
|
+ title: "上一条",
|
|
|
+ icon: `image://${require("@/assets/analyse/08.png")}`,
|
|
|
+ onclick: () => this.previousRow(),
|
|
|
+ },
|
|
|
+ myCustomTool2: {
|
|
|
+ show: true,
|
|
|
+ title: "下一条",
|
|
|
+ icon: `image://${require("@/assets/analyse/09.png")}`,
|
|
|
+ onclick: () => this.nextRow(),
|
|
|
+ },
|
|
|
+ myCustomTool3: {
|
|
|
+ show: true,
|
|
|
+ title: "全屏",
|
|
|
+ icon: `image://${require("@/assets/analyse/fullScreen.png")}`,
|
|
|
+ onclick: () => this.fullScreen(),
|
|
|
+ },
|
|
|
+ myCustomTool4: {
|
|
|
+ show: true,
|
|
|
+ title: "退出全屏",
|
|
|
+ icon: `image://${require("@/assets/analyse/exitFullScreen.png")}`, // 替换为你自己的图标路径
|
|
|
+ onclick: () => this.exitFullScreen(),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: "category",
|
|
|
+ boundaryGap: false,
|
|
|
+ data: [
|
|
|
+ 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
|
|
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
|
|
|
+ 2012, 2013, 2014, 2015, 2016,
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ yAxis: {
|
|
|
+ type: "value",
|
|
|
+ boundaryGap: [0, "100%"],
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: "axis",
|
|
|
+ position: function (pt) {
|
|
|
+ return [pt[0], "10%"];
|
|
|
+ },
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ name: "叶片1根部轮廓",
|
|
|
+ type: "line",
|
|
|
+ data: [
|
|
|
+ 1.63, 1.9, 2.16, 2.55, 2.7, 2.69, 2.65, 2.87, 2.9, 3.1, 3.47,
|
|
|
+ 3.89, 4.54, 5.33, 5.95, 6.44, 6.94, 7.45, 7.61, 8.44, 9.35, 9.58,
|
|
|
+ 10.06, 10.6, 10.94, 11.49, 11.03, 11.11,
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "叶片2根部轮廓",
|
|
|
+ type: "line",
|
|
|
+ lineStyle: {
|
|
|
+ type: "dashed",
|
|
|
+ },
|
|
|
+ data: [
|
|
|
+ 12.84, 13.03, 13.05, 13.89, 13.72, 12.97, 13.21, 14.02, 14.54,
|
|
|
+ 15.07, 14.94, 14.55, 13.84, 12.7, 12.06, 11.93, 11.6, 10.84,
|
|
|
+ 10.26, 10.18, 10.21, 9.86, 10.1, 9.96, 10.25, 11.1, 11.08, 10.7,
|
|
|
+ ],
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ name: "叶片3根部轮廓",
|
|
|
+ lineStyle: {
|
|
|
+ type: "dotted",
|
|
|
+ },
|
|
|
+ type: "line",
|
|
|
+
|
|
|
+ data: [
|
|
|
+ 7.38, 7.73, 7.46, 7.85, 7.68, 7.45, 6.94, 6.7, 5.98, 6.25, 6.28,
|
|
|
+ 5.74, 5.51, 5.35, 5.25, 5.03, 4.83, 4.57, 4.58, 4.33, 4.6, 4.42,
|
|
|
+ 4.38, 3.95, 3.82, 3.7, 3.75, 3.71,
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "平均轮廓",
|
|
|
+ type: "line",
|
|
|
+ data: [
|
|
|
+ "-",
|
|
|
+ "-",
|
|
|
+ 23.55,
|
|
|
+ 21.24,
|
|
|
+ 21.26,
|
|
|
+ 21.32,
|
|
|
+ 20.88,
|
|
|
+ 20.23,
|
|
|
+ 21.2,
|
|
|
+ 20.36,
|
|
|
+ 18.28,
|
|
|
+ 18.93,
|
|
|
+ 18.85,
|
|
|
+ 19.19,
|
|
|
+ 18.79,
|
|
|
+ 18.1,
|
|
|
+ 18.06,
|
|
|
+ 17.88,
|
|
|
+ 17.38,
|
|
|
+ 17.06,
|
|
|
+ 16.04,
|
|
|
+ 15.98,
|
|
|
+ 15.17,
|
|
|
+ 15.17,
|
|
|
+ 15.16,
|
|
|
+ 14.77,
|
|
|
+ 14.91,
|
|
|
+ 14.76,
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+ this.chartInstance.setOption(option);
|
|
|
+ },
|
|
|
+ previousRow() {
|
|
|
+ let newIndex =
|
|
|
+ this.currentIndex > 0
|
|
|
+ ? this.currentIndex - 1
|
|
|
+ : this.tableData.length - 1;
|
|
|
+ this.$emit("update:currentIndex", newIndex);
|
|
|
+ },
|
|
|
+ nextRow() {
|
|
|
+ console.log("下一条");
|
|
|
+ let newIndex =
|
|
|
+ this.currentIndex < this.tableData.length - 1
|
|
|
+ ? this.currentIndex + 1
|
|
|
+ : 0;
|
|
|
+ this.$emit("update:currentIndex", newIndex);
|
|
|
+ },
|
|
|
+ toggleFullScreen() {
|
|
|
+ const chartDom = this.$refs.chart;
|
|
|
+ if (screenfull.isEnabled) {
|
|
|
+ screenfull.toggle(chartDom);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fullScreen() {
|
|
|
+ const chartDom = this.$refs.chart;
|
|
|
+ if (screenfull.isEnabled) {
|
|
|
+ // 设置全屏样式
|
|
|
+ chartDom.style.position = "absolute";
|
|
|
+ chartDom.style.top = 0;
|
|
|
+ chartDom.style.left = 0;
|
|
|
+ chartDom.style.width = "100vw";
|
|
|
+ chartDom.style.height = "100vh";
|
|
|
+ chartDom.style.backgroundColor = "#ffffff";
|
|
|
+
|
|
|
+ // 进入全屏
|
|
|
+ screenfull.request(chartDom);
|
|
|
+ this.chartInstance.resize();
|
|
|
+
|
|
|
+ // 监听全屏变化
|
|
|
+ screenfull.on("change", this.handleFullScreenChange);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ exitFullScreen() {
|
|
|
+ const chartDom = this.$refs.chart;
|
|
|
+ if (screenfull.isEnabled) {
|
|
|
+ screenfull.exit();
|
|
|
+ // 监听全屏变化
|
|
|
+ screenfull.on("change", this.handleFullScreenChange);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 处理全屏变化的回调
|
|
|
+ handleFullScreenChange() {
|
|
|
+ const chartDom = this.$refs.chart;
|
|
|
+ if (!screenfull.isFullscreen) {
|
|
|
+ // 退出全屏时恢复样式
|
|
|
+ chartDom.style.position = this.originalChartStyle.position || "";
|
|
|
+ chartDom.style.top = this.originalChartStyle.top || "";
|
|
|
+ chartDom.style.left = this.originalChartStyle.left || "";
|
|
|
+ chartDom.style.width = this.originalChartStyle.width || "100%";
|
|
|
+ chartDom.style.height = this.originalChartStyle.height || "250px";
|
|
|
+ chartDom.style.backgroundColor =
|
|
|
+ this.originalChartStyle.backgroundColor || "#fff";
|
|
|
+
|
|
|
+ // 调整图表尺寸
|
|
|
+ this.chartInstance.resize();
|
|
|
+
|
|
|
+ // 可选:移除事件监听(如果不再需要)
|
|
|
+ screenfull.off("change", this.handleFullScreenChange);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+::v-deep .el-card__body {
|
|
|
+ width: 100%;
|
|
|
+ height: 250px;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.line-chart {
|
|
|
+ width: 100%;
|
|
|
+ height: 250px;
|
|
|
+ background-color: #fff;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+
|
|
|
+.eigenvalue {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ font-size: 10px;
|
|
|
+ width: 100px;
|
|
|
+ border: 1px solid black;
|
|
|
+ padding: 5px;
|
|
|
+ background: #fff;
|
|
|
+ z-index: 99;
|
|
|
+ h5 {
|
|
|
+ line-height: 16px;
|
|
|
+ height: 16px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|