123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- <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",
- showSymbol: false,
- 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",
- showSymbol: false,
- 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根部轮廓",
- showSymbol: false,
- 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: "平均轮廓",
- showSymbol: false,
- 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>
|