瀏覽代碼

数据分析的pdf假数据+模板

zy 2 年之前
父節點
當前提交
a7f0a04f2a

二進制
wrdep-ui/src/views/dataAnalysis/components/img.png


+ 73 - 0
wrdep-ui/src/views/dataAnalysis/components/turbulence.vue

@@ -0,0 +1,73 @@
+<template>
+  <div class="turbulencePage">
+    <h3>2.3.8 湍流强度</h3>
+    <div>
+      <span class="text">
+        大气湍流强度表示瞬时风速偏高离均值的程度,是评价气流稳定程度的指标,湍流强度的大小对风机的选择有重要意义,湍流的强弱会影响发电机组的功率输出的多少,还有可能引起极端负荷削弱甚至破坏风力发电机组。
+        计算公式为:Ir=σ/v
+        式中:σ-某时段风速的标准偏差(m/s);
+        v-某时段的平均风速(m/s)。
+      </span>
+    </div>
+    <div class="turTableDiv">
+        <span style="font-weight: bold;margin: 0 auto">表8 不同高度湍流强度表</span>
+        <el-table
+          :data="turTableData"
+          border
+          :header-row-style="{color: '#000'}"
+          style="width: 100%;border: 1px solid;font-weight: bold;color: #000">
+          <el-table-column prop="height" align="center" label="高度"></el-table-column>
+          <el-table-column prop="turbulence" align="center" label="湍流强度"></el-table-column>
+          <el-table-column prop="turbulence15" align="center" label="15m/s湍流强度"></el-table-column>
+        </el-table>
+
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "turbulence",
+  data(){
+    return{
+      /*湍流数据*/
+      turTableData:[
+        {height:'120m',	turbulence:0.13,turbulence15:0.076},
+        {height:'100m',	turbulence:0.13,turbulence15:0.077},
+        {height:'80m',	turbulence:0.13,turbulence15:0.088},
+        {height:'70m',	turbulence:0.14,turbulence15:0.100},
+        {height:'50m',	turbulence:0.14,turbulence15:0.106},
+        {height:'30m',	turbulence:0.15,turbulence15:0.118},
+        {height:'10m',	turbulence:0.17,turbulence15:0.133},
+      ]
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+.turbulencePage h5, .turbulencePage h2, .turbulencePage h3 {
+  font-weight: bold;
+}
+
+.text {
+  margin-left: 40px;
+}
+.turTableDiv{
+  width: 60%;
+  margin: 0 auto;
+  margin-top: 10px;
+  display: flex;
+  flex-direction: column;
+}
+.turTableDiv /deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #000000;
+  border-bottom: 1px solid #000;
+}
+.turTableDiv /deep/ .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 16px;
+}
+</style>

+ 318 - 0
wrdep-ui/src/views/dataAnalysis/components/wdRose.vue

@@ -0,0 +1,318 @@
+<template>
+  <div class="wdRosePage">
+    <div style="height: 2220px">
+      <h3>2.3.5 主风向分析</h3>
+      <div><span class="text">{{ windTowerInfo.name }}测风设备实测数据风向和分布如下图所示。各层风向占比趋于一致,主导风向为{{ wdRoseInfo.wd }}方向。</span>
+      </div>
+      <div class="wdRose">
+        <div v-for="(item,index) of wdRoseInfo.data" class="wdRoseBox">
+          <div :id="'wdItem'+index" style="width:100%;height: 250px;"/>
+        </div>
+      </div>
+      <div class="tableTitle"><span>各个层高风向16扇区占比汇总</span></div>
+      <div class="pdfTableDiv">
+        <el-table
+          :data="wdTable"
+          border
+          :header-row-style="{color: '#000'}"
+          class="pdfTable">
+          <el-table-column prop="height" align="center" label="高度"></el-table-column>
+          <el-table-column prop="N" align="center" label="N"></el-table-column>
+          <el-table-column prop="NNW" align="center" label="NNW"></el-table-column>
+          <el-table-column prop="NW" align="center" label="NW"></el-table-column>
+          <el-table-column prop="WNW" align="center" label="WNW"></el-table-column>
+          <el-table-column prop="W" align="center" label="W"></el-table-column>
+          <el-table-column prop="WSW" align="center" label="WSW"></el-table-column>
+          <el-table-column prop="SW" align="center" label="SW"></el-table-column>
+          <el-table-column prop="SSW" align="center" label="SSW"></el-table-column>
+          <el-table-column prop="S" align="center" label="S"></el-table-column>
+          <el-table-column prop="SSE" align="center" label="SSE"></el-table-column>
+          <el-table-column prop="SE" align="center" label="SE"></el-table-column>
+          <el-table-column prop="ESE" align="center" label="ESE"></el-table-column>
+          <el-table-column prop="E" align="center" label="E"></el-table-column>
+          <el-table-column prop="ENE" align="center" label="ENE"></el-table-column>
+          <el-table-column prop="NE" align="center" label="NE"></el-table-column>
+          <el-table-column prop="NNE" align="center" label="NNE"></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div style="height: 2246px">
+      <h3>2.3.6 主风能分析</h3>
+      <div class="wdRose">
+        <div v-for="(item,index) of powerData" class="wdRoseBox">
+          <div :id="'powerItem'+index" style="width:100%;height: 250px"/>
+        </div>
+      </div>
+      <div class="tableTitle"><span>各个层高风能16扇区占比汇总</span></div>
+      <div class="pdfTableDiv">
+        <el-table
+          :data="powerTable"
+          border
+          :header-row-style="{color: '#000'}"
+          class="pdfTable">
+          <el-table-column prop="height" align="center" label="高度"></el-table-column>
+          <el-table-column prop="N" align="center" label="N"></el-table-column>
+          <el-table-column prop="NNW" align="center" label="NNW"></el-table-column>
+          <el-table-column prop="NW" align="center" label="NW"></el-table-column>
+          <el-table-column prop="WNW" align="center" label="WNW"></el-table-column>
+          <el-table-column prop="W" align="center" label="W"></el-table-column>
+          <el-table-column prop="WSW" align="center" label="WSW"></el-table-column>
+          <el-table-column prop="SW" align="center" label="SW"></el-table-column>
+          <el-table-column prop="SSW" align="center" label="SSW"></el-table-column>
+          <el-table-column prop="S" align="center" label="S"></el-table-column>
+          <el-table-column prop="SSE" align="center" label="SSE"></el-table-column>
+          <el-table-column prop="SE" align="center" label="SE"></el-table-column>
+          <el-table-column prop="ESE" align="center" label="ESE"></el-table-column>
+          <el-table-column prop="E" align="center" label="E"></el-table-column>
+          <el-table-column prop="ENE" align="center" label="ENE"></el-table-column>
+          <el-table-column prop="NE" align="center" label="NE"></el-table-column>
+          <el-table-column prop="NNE" align="center" label="NNE"></el-table-column>
+        </el-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "wdRose",
+  props: {info: Object},
+  watch: {
+    info: {
+      immediate: true,
+      handler(value) {
+        this.windTowerInfo = value
+      }
+    }
+  },
+  data() {
+    return {
+      windTowerInfo: {},
+      /*风向玫瑰图*/
+      wdRoseInfo: {
+        wd: '西南',// 主风向
+        data: [//玫瑰图数据
+          {
+            height: '10',
+            data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+          }, {
+            height: '50',
+            data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+          }, {
+            height: '80',
+            data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+          }, {
+            height: '100',
+            data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+          },
+        ]
+      },
+      powerData: [//玫瑰图数据
+        {
+          height: '10',
+          data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+        }, {
+          height: '50',
+          data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+        }, {
+          height: '80',
+          data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+        }, {
+          height: '100',
+          data: [{"N": 0}, {"NNE": 0.23}, {"NE": 0.93}, {"ENE": 0}, {"E": 0}, {"ESE": 0}, {"SE": 0}, {"SSE": 0.12}, {"S": 6.6}, {"SSW": 9.84}, {"SW": 18.87}, {"WSW": 21.06}, {"W": 6.25}, {"WNW": 3.59}, {"NW": 5.09}, {"NNW": 5.9}]
+        },
+      ],
+      wdTable:[],
+      powerTable:[]
+    }
+  },
+  mounted() {
+    this.initWdRose()
+  },
+  methods: {
+    initWdRose() {
+      let wdTable = []
+      let powerTable = []
+      this.wdRoseInfo.data.forEach((item, index) => {
+        let data = item.data
+        let power = []
+        if (data != null) {
+          power = [data[0].N, data[15].NNW, data[14].NW, data[13].WNW, data[12].W, data[11].WSW, data[10].SW, data[9].SSW, data[8].S, data[7].SSE, data[6].SE, data[5].ESE, data[4].E, data[3].ENE, data[2].NE, data[1].NNE]
+        }
+        this.drawWdRose(`wdItem${index}`, power, item.height + 'm层高风向玫瑰图')
+        let temp = {}
+        temp.height = item.height
+        for (let value of data) {
+          for (let key in value) {
+            temp[key] = value[key]
+          }
+        }
+        wdTable.push(temp)
+      })
+      this.wdTable = wdTable
+      this.powerData.forEach((item, index) => {
+        let data = item.data
+        let power = []
+        if (data != null) {
+          power = [data[0].N, data[15].NNW, data[14].NW, data[13].WNW, data[12].W, data[11].WSW, data[10].SW, data[9].SSW, data[8].S, data[7].SSE, data[6].SE, data[5].ESE, data[4].E, data[3].ENE, data[2].NE, data[1].NNE]
+        }
+        this.drawpowerRose(`powerItem${index}`, power, item.height + 'm层高风能玫瑰图')
+        let temp = {}
+        temp.height = item.height
+        for (let value of data) {
+          for (let key in value) {
+            temp[key] = value[key]
+          }
+        }
+       powerTable.push(temp)
+      })
+      this.powerTable = powerTable
+    },
+    drawWdRose(name, data, title) {
+      let myCharts = this.$echarts.init(document.getElementById(name))
+      var option = {
+        title: {
+          text: title,
+          textStyle: {
+            color: '#000',
+          },
+          left: '21%'
+        },
+        radar: {
+          shape: 'circle',
+          center: ['52%', '55%'],
+          nameGap: 5,
+          indicator: [{name: 'N'}, {name: 'NNW'}, {name: 'NW'}, {name: 'WNW'}, {name: 'W'}, {name: 'WSW'}, {name: 'SW'},
+            {name: 'SSW'}, {name: 'S'}, {name: 'SSE'}, {name: 'SE'}, {name: 'ESE'}, {name: 'E'}, {name: 'ENE'}, {name: 'NE'}, {name: 'NNE'}],
+          splitArea: {
+            areaStyle: {
+              color: '#fff'
+            }
+          },
+          axisName: {
+            color: '#000'
+          },
+          splitLine: {
+            lineStyle: {
+              color: '#000'
+            }
+          },
+        },
+        series: [{
+          type: 'radar',
+          data: [{value: data,}],
+        }],
+      };
+      myCharts.setOption(option)
+      window.addEventListener('resize', () => {
+        if (myCharts) {
+          myCharts.resize()
+        }
+      })
+
+    },
+    drawpowerRose(name, data, title) {
+      let myCharts = this.$echarts.init(document.getElementById(name))
+      var option = {
+        title: {
+          text: title,
+          textStyle: {
+            color: '#000',
+          },
+          left: '21%'
+        },
+        // tooltip: {
+        //   show: true,
+        //   position: ['55%', '10%'],
+        //   formatter: '{b0}: {c0}辆<br />占比: {d0}%'
+        // },
+        radar: {
+          shape: 'circle',
+          center: ['52%', '55%'],
+          nameGap: 5,
+          indicator: [{name: 'N'}, {name: 'NNW'}, {name: 'NW'}, {name: 'WNW'}, {name: 'W'}, {name: 'WSW'}, {name: 'SW'},
+            {name: 'SSW'}, {name: 'S'}, {name: 'SSE'}, {name: 'SE'}, {name: 'ESE'}, {name: 'E'}, {name: 'ENE'}, {name: 'NE'}, {name: 'NNE'}],
+          splitArea: {
+            areaStyle: {
+              color: '#fff'
+            }
+          },
+          axisName: {
+            color: '#000'
+          },
+          splitLine: {
+            lineStyle: {
+              color: '#000'
+            }
+          },
+        },
+        series: [{
+          type: 'radar',
+          data: [{value: data,}],
+          // coordinateSystem: 'polar'
+        }],
+      };
+      myCharts.setOption(option)
+      // myCharts.dispatchAction({
+      //   type: 'showTip',
+      //   seriesIndex: 0,//第几条series
+      //   dataIndex: 0,//第几个tooltip
+      // });
+      window.addEventListener('resize', () => {
+        if (myCharts) {
+          myCharts.resize()
+        }
+      })
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+.wdRosePage h1, .wdRosePage h2, .wdRosePage h3 {
+  font-weight: bold;
+}
+
+.text {
+  margin-left: 40px;
+}
+
+.wdRose {
+  width: 100%;
+  display: flex;
+  flex-wrap: wrap
+}
+
+.wdRoseBox {
+  width: 20%;
+  display: flex;
+  padding-top: 10px;
+}
+.tableTitle {
+  width: 100%;
+  display: flex;
+  justify-content: center;
+}
+
+.tableTitle span {
+  font-weight: bold;
+}
+.pdfTable {
+  width: 100%;
+  border: 1px solid;
+  font-weight: bold;
+  color: #000;
+  font-size: 20px
+}
+.pdfTableDiv /deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #000000;
+  border-bottom: 1px solid #000;
+}
+
+.pdfTableDiv /deep/ .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 20px;
+}
+</style>

+ 103 - 0
wrdep-ui/src/views/dataAnalysis/components/windShear.vue

@@ -0,0 +1,103 @@
+<template>
+<div class="windShear">
+  <h3>2.3.9 各层风切变指数</h3>
+  <div><span class="text">近地层风速的垂直分布主要取决于地表粗糙度和低层大气的层结状态。在中性大气
+层结下,幂指数方程可以较好地描述风速的垂直廓线。其表达式为:</span>
+  </div>
+  <div style="padding-left: 40%">
+    <img src="./img.png"/>
+  </div>
+  <div>
+    <span class="text">式中,V2 为高度 Z2 处的风速(m/s);V1 为高度 Z1 处的风速(m/s);α为风切变指数,其值的大小表明了风速垂直切变的强度。</span>
+  </div>
+  <div><span>各层风切变对照如下:</span></div>
+  <div class="wshearTableDiv">
+    <el-table
+      :data="wshearTableData.mainData"
+      border
+      :header-row-style="{color: '#000'}"
+      style="width: 100%;border: 1px solid;font-weight: bold;color: #000">
+      <el-table-column prop="height" align="center" label="高度"></el-table-column>
+      <el-table-column v-for="item in wshearTableData.headerData" :prop="item" align="center" :label="item"></el-table-column>
+    </el-table>
+  </div>
+</div>
+</template>
+
+<script>
+export default {
+  name: "windShear",
+  data(){
+    return{
+      /*各个层高对比*/
+      wshearTableData:{// 表头
+        headerData:['100','90','80', '70','60','50','40','30','20','10'],// 从高到低
+        mainData:[// 主体数据
+          {
+            height:10,
+            '100':0.1781,
+            '90':0.1756,
+            '80':0.173,
+            '70':0.1704,
+            '60':0.1670,
+            '50':0.1633,
+            '40':0.1517,
+            '30':0.1373,
+            '20':0.1124,
+            '10':'-'
+          },{
+            height:20,
+            '100':0.2064,
+            '90':0.2047,
+            '80':0.2034,
+            '70':0.2026,
+            '60':0.2014,
+            '50':0.2018,
+            '40':0.1910,
+            '30':0.1798,
+            '20':'-',
+            '10':'-'
+          },{
+            height:30,
+            '100':0.2153,
+            '90':0.2139,
+            '80':0.2131,
+            '70':0.2135,
+            '60':0.2140,
+            '50':0.2192,
+            '40':0.2066,
+            '30':'-',
+            '20':'-',
+            '10':'-'
+          },
+        ]
+      },
+    }
+  }
+}
+</script>
+
+<style scoped>
+.windShear{
+
+}
+.windShear h1, .windShear h2, .windShear h3 {
+  font-weight: bold;
+}
+
+.text {
+  margin-left: 40px;
+}
+.wshearTableDiv{
+  margin-top: 10px;
+}
+.wshearTableDiv /deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #000000;
+  border-bottom: 1px solid #000;
+}
+.wshearTableDiv /deep/ .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 16px;
+}
+</style>

+ 173 - 0
wrdep-ui/src/views/dataAnalysis/components/wsAndWpd.vue

@@ -0,0 +1,173 @@
+<template>
+  <div class="wsAndWpdPage">
+    <!--  2.3.2平均风速  -->
+    <div style="height: 2220px">
+      <h3>2.3.2 平均风速</h3>
+      <div class="pdfTableDiv" style="width: 60%">
+        <div class="tableTitle"><span>表4 {{ windTowerInfo.name }}测风设备平均风速统计结果({{
+            windTowerInfo.startTime
+          }}-{{ windTowerInfo.endTime }})</span></div>
+        <div class="tableDiv">
+          <el-table
+            :data="wsTableData"
+            border
+            :header-row-style="{color: '#000'}"
+            class="pdfTable">
+            <el-table-column prop="parameter" align="center" label="参数"></el-table-column>
+            <el-table-column prop="avg" align="center" label="平均值"></el-table-column>
+            <el-table-column prop="max" align="center" label="最大值"></el-table-column>
+            <el-table-column prop="min" align="center" label="最小值"></el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </div>
+    <div style="height: 2220px">
+      <h3>2.3.3 按月份统计平均风速(m/s)</h3>
+      <div class="pdfTableDiv">
+        <div class="tableTitle"><span>表5 逐月统计</span></div>
+        <div class="tableDiv">
+          <el-table
+            :data="wsMonthTableData.mainData"
+            border
+            :header-row-style="{color: '#000'}"
+            class="pdfTable">
+            <el-table-column prop="height" align="center" label="高度"></el-table-column>
+            <el-table-column v-for="item in wsMonthTableData.headerData" :prop="item.prop" align="center"
+                             :label="item.label"></el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </div>
+    <div style="height: 2220px">
+      <h3>2.3.4 风功率密度</h3>
+      <div class="pdfTableDiv" style="width: 60%">
+        <div class="tableTitle"><span>表6 {{ windTowerInfo.name }}测风设备风功率密度汇总</span></div>
+        <div class="tableTitle"><span>{{ windTowerInfo.startTime }}-{{ windTowerInfo.endTime }}</span></div>
+        <div class="tableDiv">
+          <el-table
+            :data="wpdTableData"
+            border
+            :header-row-style="{color: '#000'}"
+            class="pdfTable">
+            <el-table-column prop="parameter" align="center" label="参数"></el-table-column>
+            <el-table-column prop="avg" align="center" label="平均值"></el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "wsAndWpd",
+  props: {info: Object},
+  watch: {
+    info: {
+      immediate: true,
+      handler(value) {
+        this.windTowerInfo = value
+      }
+    }
+  },
+  data() {
+    return {
+      windTowerInfo: {},
+      /*平均风速*/
+      wsTableData: [
+        {parameter: '10米风速(m/s)', avg: '4.32', max: '19.89', min: '0.21'},
+        {parameter: '20米风速(m/s)', avg: '4.67', max: '22.04', min: '0.2'},
+        {parameter: '30米风速(m/s)', avg: '5.03', max: '23.43', min: '0.25'},
+        {parameter: '40米风速(m/s)', avg: '5.33', max: '24.46', min: '0.01'}
+      ],
+      /*逐月风速*/
+      wsMonthTableData: {
+        headerData: [// 表头
+          {prop: '202205', label: '2022.5'},
+          {prop: '202206', label: '2022.6'},
+          {prop: '202207', label: '2022.7'},
+          {prop: '202208', label: '2022.8'},
+          {prop: '202209', label: '2022.9'},
+          {prop: '202210', label: '2022.10'},
+          {prop: '202211', label: '2022.11'},
+          {prop: '202212', label: '2022.12'},
+          {prop: '202301', label: '2023.1'},
+          {prop: '202302', label: '2023.2'},
+          {prop: '202303', label: '2023.3'},
+          {prop: '202304', label: '2023.4'},
+        ],
+        mainData: [// 主体数据
+          {
+            'height': '10m',
+            '202205': '4.84',
+            '202206': '4.91',
+            '202207': '4.66',
+            '202208': '4.66',
+            '202209': '4.66',
+            '202210': '4.66',
+            '202211': '4.66',
+            '202212': '4.66',
+            '202301': '4.66',
+            '202302': '4.66',
+            '202303': '4.66',
+            '202304': '4.66'
+          }
+        ]
+      },
+      /*风功率密度列表*/
+      wpdTableData: [
+        {parameter: '10米风功率密度', avg: '124.24'},
+        {parameter: '20米风功率密度', avg: '158.14'},
+        {parameter: '30米风功率密度', avg: '192.02'},
+        {parameter: '40米风功率密度', avg: '223.43'},
+        {parameter: '50米风功率密度', avg: '251.92'},
+      ]
+    }
+  },
+  mounted() {
+
+  }
+}
+</script>
+
+<style scoped>
+.wsAndWpdPage{
+  font-size: 20px;
+}
+.wsAndWpdPage h1, .wsAndWpdPage h2, .wsAndWpdPage h3 {
+  font-weight: bold;
+}
+
+.pdfTableDiv {
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+}
+
+.pdfTable {
+  width: 100%;
+  border: 1px solid;
+  font-weight: bold;
+  color: #000;
+  font-size: 20px
+}
+
+.tableTitle {
+  margin: 0 auto;
+}
+
+.tableTitle span {
+  font-weight: bold;
+}
+
+.tableDiv /deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #000000;
+  border-bottom: 1px solid #000;
+}
+
+.tableDiv /deep/ .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 20px;
+}
+</style>

+ 790 - 0
wrdep-ui/src/views/dataAnalysis/components/wsFrequency.vue

@@ -0,0 +1,790 @@
+<template>
+  <div class="wsFrequencyPage">
+    <h3>2.3.7 风速频率分布</h3>
+    <div class="frequencyChart">
+      <div v-for="(item,index) of weibullData" class="chartBox">
+        <div :id="'weibull'+index" style="width:100%;height: 250px"/>
+      </div>
+    </div>
+
+    <div class="freTableDiv">
+      <span style="font-weight: bold;margin: 0 auto">表7 各个层高风速频率汇总</span>
+      <el-table
+        :data="frequencyData"
+        border
+        :header-row-style="{color: '#000'}"
+        style="width: 100%;border: 1px solid;font-weight: bold;color: #000">
+        <el-table-column v-for="(item, index) in transTitle" :label="item" :key="index" align="center">
+          <template slot-scope="scope">
+            {{ scope.row[index] }}
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "wsFrequency",
+  data() {
+    return {
+      transTitle: [],
+      tableHeader: ["0-0.5(m/s)",
+        "0.5-1.5(m/s)",
+        "1.5-2.5(m/s)",
+        "2.5-3.5(m/s)",
+        "3.5-4.5(m/s)",
+        "4.5-5.5(m/s)",
+        "5.5-6.5(m/s)",
+        "6.5-7.5(m/s)",
+        "7.5-8.5(m/s)",
+        "8.5-9.5(m/s)",
+        "9.5-10.5(m/s)",
+        "10.5-11.5(m/s)",
+        "11.5-12.5(m/s)",
+        "12.5-13.5(m/s)",
+        "13.5-14.5(m/s)",
+        "14.5-15.5(m/s)",
+        "15.5-16.5(m/s)",
+        "16.5-17.5(m/s)",
+        "17.5-18.5(m/s)",
+        "18.5-19.5(m/s)",
+        "19.5-20.5(m/s)",
+        "20.5-21.5(m/s)",
+        "22.5-23.5(m/s)",
+        "23.5-24.5(m/s)",
+        "24.5-25.5(m/s)",
+        ">25.5(m/s)"],
+      frequencyData: [],//频率表格
+      weibullData: [{
+        height: 120,
+        weibull: [
+          {
+            "Weibull": 0.0041,
+            "ws": 2
+          },
+          {
+            "Weibull": 0.0083,
+            "ws": 3
+          },
+          {
+            "Weibull": 0.0249,
+            "ws": 4
+          },
+          {
+            "Weibull": 0.0477,
+            "ws": 5
+          },
+          {
+            "Weibull": 0.0759,
+            "ws": 6
+          },
+          {
+            "Weibull": 0.1163,
+            "ws": 7
+          },
+          {
+            "Weibull": 0.1493,
+            "ws": 8
+          },
+          {
+            "Weibull": 0.1697,
+            "ws": 9
+          },
+          {
+            "Weibull": 0.1625,
+            "ws": 10
+          },
+          {
+            "Weibull": 0.1287,
+            "ws": 11
+          },
+          {
+            "Weibull": 0.0833,
+            "ws": 12
+          },
+          {
+            "Weibull": 0.04,
+            "ws": 13
+          },
+          {
+            "Weibull": 0.0146,
+            "ws": 14
+          },
+          {
+            "Weibull": 0.0057,
+            "ws": 15
+          },
+          {
+            "Weibull": 0.0002,
+            "ws": 16
+          },
+          {
+            "Weibull": 0,
+            "ws": 17
+          }
+        ],
+        frequency: [
+          {
+            "ws": 2,
+            "cont": 0.09
+          },
+          {
+            "ws": 3,
+            "cont": 0.78
+          },
+          {
+            "ws": 4,
+            "cont": 0.7
+          },
+          {
+            "ws": 5,
+            "cont": 4.34
+          },
+          {
+            "ws": 6,
+            "cont": 10.43
+          },
+          {
+            "ws": 7,
+            "cont": 11.03
+          },
+          {
+            "ws": 8,
+            "cont": 14.77
+          },
+          {
+            "ws": 9,
+            "cont": 16.77
+          },
+          {
+            "ws": 10,
+            "cont": 15.9
+          },
+          {
+            "ws": 11,
+            "cont": 12.25
+          },
+          {
+            "ws": 12,
+            "cont": 5.82
+          },
+          {
+            "ws": 13,
+            "cont": 4.78
+          },
+          {
+            "ws": 14,
+            "cont": 2.09
+          },
+          {
+            "ws": 15,
+            "cont": 0.09
+          },
+          {
+            "ws": 16,
+            "cont": 0.09
+          },
+          {
+            "ws": 17,
+            "cont": 0.09
+          }
+        ]
+      }, {
+        height: 100,
+        weibull: [
+          {
+            "Weibull": 0.0041,
+            "ws": 2
+          },
+          {
+            "Weibull": 0.0083,
+            "ws": 3
+          },
+          {
+            "Weibull": 0.0249,
+            "ws": 4
+          },
+          {
+            "Weibull": 0.0477,
+            "ws": 5
+          },
+          {
+            "Weibull": 0.0759,
+            "ws": 6
+          },
+          {
+            "Weibull": 0.1163,
+            "ws": 7
+          },
+          {
+            "Weibull": 0.1493,
+            "ws": 8
+          },
+          {
+            "Weibull": 0.1697,
+            "ws": 9
+          },
+          {
+            "Weibull": 0.1625,
+            "ws": 10
+          },
+          {
+            "Weibull": 0.1287,
+            "ws": 11
+          },
+          {
+            "Weibull": 0.0833,
+            "ws": 12
+          },
+          {
+            "Weibull": 0.04,
+            "ws": 13
+          },
+          {
+            "Weibull": 0.0146,
+            "ws": 14
+          },
+          {
+            "Weibull": 0.0057,
+            "ws": 15
+          },
+          {
+            "Weibull": 0.0002,
+            "ws": 16
+          },
+          {
+            "Weibull": 0,
+            "ws": 17
+          }
+        ],
+        frequency: [
+          {
+            "ws": 2,
+            "cont": 0.09
+          },
+          {
+            "ws": 3,
+            "cont": 0.78
+          },
+          {
+            "ws": 4,
+            "cont": 0.7
+          },
+          {
+            "ws": 5,
+            "cont": 4.34
+          },
+          {
+            "ws": 6,
+            "cont": 10.43
+          },
+          {
+            "ws": 7,
+            "cont": 11.03
+          },
+          {
+            "ws": 8,
+            "cont": 14.77
+          },
+          {
+            "ws": 9,
+            "cont": 16.77
+          },
+          {
+            "ws": 10,
+            "cont": 15.9
+          },
+          {
+            "ws": 11,
+            "cont": 12.25
+          },
+          {
+            "ws": 12,
+            "cont": 5.82
+          },
+          {
+            "ws": 13,
+            "cont": 4.78
+          },
+          {
+            "ws": 14,
+            "cont": 2.09
+          },
+          {
+            "ws": 15,
+            "cont": 0.09
+          },
+          {
+            "ws": 16,
+            "cont": 0.09
+          },
+          {
+            "ws": 17,
+            "cont": 0.09
+          }
+        ]
+      },
+        {
+          height: 80,
+          weibull: [
+            {
+              "Weibull": 0.0041,
+              "ws": 2
+            },
+            {
+              "Weibull": 0.0083,
+              "ws": 3
+            },
+            {
+              "Weibull": 0.0249,
+              "ws": 4
+            },
+            {
+              "Weibull": 0.0477,
+              "ws": 5
+            },
+            {
+              "Weibull": 0.0759,
+              "ws": 6
+            },
+            {
+              "Weibull": 0.1163,
+              "ws": 7
+            },
+            {
+              "Weibull": 0.1493,
+              "ws": 8
+            },
+            {
+              "Weibull": 0.1697,
+              "ws": 9
+            },
+            {
+              "Weibull": 0.1625,
+              "ws": 10
+            },
+            {
+              "Weibull": 0.1287,
+              "ws": 11
+            },
+            {
+              "Weibull": 0.0833,
+              "ws": 12
+            },
+            {
+              "Weibull": 0.04,
+              "ws": 13
+            },
+            {
+              "Weibull": 0.0146,
+              "ws": 14
+            },
+            {
+              "Weibull": 0.0057,
+              "ws": 15
+            },
+            {
+              "Weibull": 0.0002,
+              "ws": 16
+            },
+            {
+              "Weibull": 0,
+              "ws": 17
+            }
+          ],
+          frequency: [
+            {
+              "ws": 2,
+              "cont": 0.09
+            },
+            {
+              "ws": 3,
+              "cont": 0.78
+            },
+            {
+              "ws": 4,
+              "cont": 0.7
+            },
+            {
+              "ws": 5,
+              "cont": 4.34
+            },
+            {
+              "ws": 6,
+              "cont": 10.43
+            },
+            {
+              "ws": 7,
+              "cont": 11.03
+            },
+            {
+              "ws": 8,
+              "cont": 14.77
+            },
+            {
+              "ws": 9,
+              "cont": 16.77
+            },
+            {
+              "ws": 10,
+              "cont": 15.9
+            },
+            {
+              "ws": 11,
+              "cont": 12.25
+            },
+            {
+              "ws": 12,
+              "cont": 5.82
+            },
+            {
+              "ws": 13,
+              "cont": 4.78
+            },
+            {
+              "ws": 14,
+              "cont": 2.09
+            },
+            {
+              "ws": 15,
+              "cont": 0.09
+            },
+            {
+              "ws": 16,
+              "cont": 0.09
+            },
+            {
+              "ws": 17,
+              "cont": 0.09
+            }
+          ]
+        },
+        {
+          height: 50,
+          weibull: [
+            {
+              "Weibull": 0.0041,
+              "ws": 2
+            },
+            {
+              "Weibull": 0.0083,
+              "ws": 3
+            },
+            {
+              "Weibull": 0.0249,
+              "ws": 4
+            },
+            {
+              "Weibull": 0.0477,
+              "ws": 5
+            },
+            {
+              "Weibull": 0.0759,
+              "ws": 6
+            },
+            {
+              "Weibull": 0.1163,
+              "ws": 7
+            },
+            {
+              "Weibull": 0.1493,
+              "ws": 8
+            },
+            {
+              "Weibull": 0.1697,
+              "ws": 9
+            },
+            {
+              "Weibull": 0.1625,
+              "ws": 10
+            },
+            {
+              "Weibull": 0.1287,
+              "ws": 11
+            },
+            {
+              "Weibull": 0.0833,
+              "ws": 12
+            },
+            {
+              "Weibull": 0.04,
+              "ws": 13
+            },
+            {
+              "Weibull": 0.0146,
+              "ws": 14
+            },
+            {
+              "Weibull": 0.0057,
+              "ws": 15
+            },
+            {
+              "Weibull": 0.0002,
+              "ws": 16
+            },
+            {
+              "Weibull": 0,
+              "ws": 17
+            }
+          ],
+          frequency: [
+            {
+              "ws": 2,
+              "cont": 0.09
+            },
+            {
+              "ws": 3,
+              "cont": 0.78
+            },
+            {
+              "ws": 4,
+              "cont": 0.7
+            },
+            {
+              "ws": 5,
+              "cont": 4.34
+            },
+            {
+              "ws": 6,
+              "cont": 10.43
+            },
+            {
+              "ws": 7,
+              "cont": 11.03
+            },
+            {
+              "ws": 8,
+              "cont": 14.77
+            },
+            {
+              "ws": 9,
+              "cont": 16.77
+            },
+            {
+              "ws": 10,
+              "cont": 15.9
+            },
+            {
+              "ws": 11,
+              "cont": 12.25
+            },
+            {
+              "ws": 12,
+              "cont": 5.82
+            },
+            {
+              "ws": 13,
+              "cont": 4.78
+            },
+            {
+              "ws": 14,
+              "cont": 2.09
+            },
+            {
+              "ws": 15,
+              "cont": 0.09
+            },
+            {
+              "ws": 16,
+              "cont": 0.09
+            },
+            {
+              "ws": 17,
+              "cont": 0.09
+            }
+          ]
+        },]
+    }
+  },
+  mounted() {
+    this.init()
+  },
+  methods: {
+    init() {
+      let transTitle = [""]
+      let frequencyData = []
+      this.weibullData.forEach((item, index) => {
+        let tempObject = {}
+        // tempObject.height = item.height
+        transTitle.push(item.height)
+        let height = item.height
+        let data = item.weibull
+        let wsFreData = item.frequency
+        let parameter = []
+        let wsFrequery = []
+        for (let i = 0; i < data.length; i++) {
+          parameter.push([data[i].ws, data[i].Weibull])
+        }
+        for (let j = 0; j < wsFreData.length; j++) {
+          tempObject[wsFreData[j].ws] = wsFreData[j].cont
+          wsFrequery.push([wsFreData[j].ws, wsFreData[j].cont])
+        }
+        frequencyData.push(tempObject)
+        this.drawFrequeryChart(`weibull${index}`, height, parameter, wsFrequery)
+      })
+      this.transTitle = transTitle
+      // 数组按矩阵思路, 变成转置矩阵
+      let matrixData = frequencyData.map((row) => {
+        let arr = []
+        for (let key in row) {
+          arr.push(row[key])
+        }
+        return arr
+      })
+      // 加入标题拼接最终的数据
+      this.frequencyData = matrixData[0].map((col, i) => {
+        return [this.tableHeader[i], ...matrixData.map((row) => {
+          console.log(row)
+          return row[i] === undefined ? 0 : row[i]
+        })]
+      })
+    },
+    drawFrequeryChart(name, height, param, ws) {
+      let myCharts = this.$echarts.init(document.getElementById(name))
+      var option = {
+        title: {
+          text: height + 'm',
+          textStyle: {
+            color: '#000',
+            fontSize: 14,
+          },
+          // left: '15%'
+        },
+        // grid: {
+        //   left: '2%',
+        //   right: '4%',
+        //   bottom: '3%',
+        //   containLabel: true
+        // },
+        color: ['#0ee2ea', '#ff4c0c'],
+        xAxis: {
+          name: '风速区间 [x-0.5,x+0.5)',
+          nameGap: 35,
+          nameLocation: 'center',
+          type: 'category',
+          axisTick: {alignWithLabel: true},
+          axisLine: {
+            lineStyle: {
+              color: '#000000',
+              // width: 2
+              fontSize: 14,
+              fontWeight: 'bold'
+            }
+          },
+          axisLabel: {
+            interval: 4,
+            textStyle: {
+              color: '#000000',
+              fontSize: 14,
+              fontWeight: 'bold'
+            }
+          },
+          data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
+        },
+        yAxis: [{
+          type: 'value',
+          name: '频率(%)',
+          min: 0,
+          // nameLocation: 'center',
+          // nameGap: 40,
+          alignTicks: true,
+          axisLabel: {
+            formatter: '{value}',
+            textStyle: {
+              color: '#000000',
+              fontSize: 14,
+              fontWeight: 'bold'
+            }
+          },
+          axisLine: {
+            show: true,
+            lineStyle: {
+              color: '#000000',
+              // width: 3
+            }
+          },
+          nameTextStyle: {
+            color: '#000000',
+            // fontSize: 20,
+            // fontWeight: 'bolder'
+          },
+          splitLine: {
+            lineStyle: {
+              color: '#000',
+              // width: 2
+            }
+          },
+        }, {
+          show: false,
+          type: 'value',
+          axisLine: {
+            show: true,
+            lineStyle: {
+              color: '#000000',
+              // width: 3
+            }
+          },
+        }],
+        series: [{
+          type: 'bar',
+          smooth: false,
+          symbol: 'none', // 这句就是去掉点的
+          data: ws
+        },
+          {
+            type: 'line',
+            smooth: 0.45,
+            symbol: 'none', // 这句就是去掉点的
+            yAxisIndex: 1, //在单个图表实例中存在多个y轴的时候有用
+            data: param
+          }
+        ]
+      }
+      myCharts.setOption(option, true)
+      window.addEventListener('resize', () => {
+        if (myCharts) {
+          myCharts.resize()
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.wsFrequencyPage{
+  font-size: 20px;
+  height: 2220px;
+}
+.wsFrequencyPage h1, .wsFrequencyPage h2, .wsFrequencyPage h3 {
+  font-weight: bold;
+}
+
+.frequencyChart {
+  width: 100%;
+  display: flex;
+  flex-wrap: wrap
+}
+
+.chartBox {
+  width: 25%;
+  padding-top: 10px;
+}
+.freTableDiv{
+  margin: 0 auto;
+  margin-top: 10px;
+  display: flex;
+  flex-direction: column;
+}
+.freTableDiv /deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #000000;
+  border-bottom: 1px solid #000;
+}
+.freTableDiv /deep/ .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 16px;
+}
+</style>

+ 480 - 6
wrdep-ui/src/views/dataAnalysis/index.vue

@@ -1,10 +1,185 @@
 <template>
   <div>
     <div class="myCarousel">
-      <span>{{text}}</span>
+      <span>{{ text }}</span>
     </div>
-    <div>
+    <div class="condition">
+      <div class="conditionOne">
+        <span>测风塔:</span>
+        <el-select v-model="cftId" placeholder="请选择" @change="changeCft" size="small" style="width: 170px">
+          <el-option
+            v-for="item in startDateAndEndDate"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+            <span style="float: left;">{{ item.label }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px">{{ item.date }}</span>
+          </el-option>
+        </el-select>
+      </div>
+      <div class="conditionTwo">
+        <span>时间:</span>
+        <el-date-picker
+          v-model="dataTime"
+          type="monthrange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="changeMonth"
+          :picker-options="pickerOptions"
+          style="width: 200px"
+          size="small"
+        >
+        </el-date-picker>
+      </div>
+      <!--      <div class="conditionTwo">-->
+      <!--        <span>层高:</span>-->
+      <!--        <el-select v-model="height" placeholder="请选择" clearable size="small" style="width: 150px">-->
+      <!--          <el-option-->
+      <!--            v-for="item in options"-->
+      <!--            :key="item.value"-->
+      <!--            :label="item.label"-->
+      <!--            :value="item.value">-->
+      <!--          </el-option>-->
+      <!--        </el-select>-->
+      <!--      </div>-->
+      <el-button class="seachBtu" type="primary" plain icon="el-icon-thumb" :loading="loading" size="mini"
+                 @click="seach()">生成报告模板
+      </el-button>
+      <el-button class="seachBtu" type="primary" plain icon="el-icon-download" :loading="downLoading" size="mini"
+                 @click="getPdf()">导出
+      </el-button>
+    </div>
+    <div id="dataAnalysisPdf">
       <pdf-home-page :param="info"/>
+      <!--pdf主体-->
+      <div style="width: 90%;margin: 0 auto">
+        <div style="height: 2220px">
+          <!--     1项目综述和概况 -->
+          <div>
+            <h1>1.项目综述和概况</h1>
+            <h2>1.1 项目综述</h2>
+            <div><span class="text">测风设备部分参数统计结果如下表所示。</span></div>
+            <div class="pdfTableDiv" style="width: 50%;">
+              <div class="tableTitle"><span>表1 测风设备主要参数表</span></div>
+              <div class="descriptionsDiv" style="font-size: 20px">
+                <el-descriptions class="margin-top" :column="1" border>
+                  <el-descriptions-item>
+                    <template slot="label">测风设备命名</template>
+                    {{ windTowerInfo.name }}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label">仪器编号</template>
+                    {{ windTowerInfo.equipmentNo }}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label">安装完成时间</template>
+                    {{ windTowerInfo.installationTime }}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label">数据起时间</template>
+                    {{ windTowerInfo.startTime }}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label">数据止时间</template>
+                    {{ windTowerInfo.endTime }}
+                  </el-descriptions-item>
+                </el-descriptions>
+              </div>
+            </div>
+          </div>
+          <!--    2.测风数据分析  -->
+          <div>
+            <h1>2.测风数据分析</h1>
+            <h2>2.1气象要素分析</h2>
+            <div><span class="text">具体测风设备相关信息及位置分布如下所示。</span></div>
+            <div class="pdfTableDiv">
+              <div class="tableTitle"><span>表2  测风基本信息</span></div>
+              <div class="rowDiv">
+                <div>
+                  <el-table
+                    :show-header="false" :span-method="arraySpanMethod"
+                    :data="tableData"
+                    border
+                    class="pdfTable">
+                    <el-table-column
+                      prop="name" align="center"
+                      label="日期"
+                      width="180">
+                    </el-table-column>
+                    <el-table-column
+                      prop="column" align="center"
+                      label="日期"
+                      width="180">
+                    </el-table-column>
+                  </el-table>
+                </div>
+                <div style="width: 20%">
+                  <el-row>
+                    <el-col class="tableCol">{{ windTowerInfo.name }}</el-col>
+                    <el-col class="tableCol">{{ windTowerInfo.equipmentNo }}</el-col>
+                    <el-col class="tableCol">{{ windTowerInfo.longitude }}</el-col>
+                    <el-col class="tableCol">{{ windTowerInfo.latitude }}</el-col>
+                    <el-col class="tableCol">{{ windTowerInfo.wsHeight }}</el-col>
+                    <el-col class="tableCol">{{ windTowerInfo.wdHeight }}</el-col>
+                  </el-row>
+                </div>
+              </div>
+            </div>
+          </div>
+
+          <!--    2.2数据完整性  -->
+          <div>
+            <h2>2.2 数据完整性</h2>
+            <div><span class="text">自{{ dataIntegrity.time }}起测风设备安装完毕,{{
+                dataIntegrity.startTime
+              }}起均正常存取数据。数据总条数为{{ dataIntegrity.totalNum }},测风数据完整率
+            {{ dataIntegrity.integrityRate }}%。</span></div>
+          </div>
+
+          <div>
+            <h2>2.3 风能要素</h2>
+            <h3>2.3.1 空气密度</h3>
+            <div style="line-height: 30px">
+              <div><span class="text">由于空气密度直接影响风能的大小,在同等风速条件下,空气密度越大风能越大;根据风电场测风塔的实测温度和气压数据推算测风塔处空气密度计算公式如下:</span>
+              </div>
+              <div><span class="text">ρ=P/(R*T)</span>
+              </div>
+              <div><span class="text">其中:</span>
+              </div>
+              <div><span class="text">ρ为空气密度(kg/m3);</span>
+              </div>
+              <div><span class="text">P为平均大气压(Pa);</span>
+              </div>
+              <div><span class="text">R为空气常数(287J/kg*K);</span>
+              </div>
+              <div><span class="text">T为绝对温度(℃+273)</span>
+              </div>
+            </div>
+            <div class="pdfTableDiv">
+              <div class="tableTitle"><span>表3 {{ windTowerInfo.name }}测风设备温湿压六要素/空气密度统计结果</span></div>
+              <div class="rowDiv" style="width: 60%;margin: 0 auto;">
+                <el-table
+                  :data="envTableData"
+                  border
+                  :header-row-style="{color: '#000'}"
+                 class="pdfTable" style="border: 1px solid #000">
+                  <el-table-column prop="parameter" align="center" label="参数"></el-table-column>
+                  <el-table-column prop="avg" align="center" label="平均值"></el-table-column>
+                  <el-table-column prop="max" align="center" label="最大值"></el-table-column>
+                  <el-table-column prop="min" align="center" label="最小值"></el-table-column>
+                </el-table>
+              </div>
+            </div>
+          </div>
+        </div>
+        <ws-and-wd :info="windTowerInfo"/>
+        <wd-rose :info="windTowerInfo"/>
+        <ws-frequency/>
+        <turbulence style="height: 2220px"/>
+        <wind-shear style="height: 2220px"/>
+      </div>
+
     </div>
   </div>
 
@@ -12,15 +187,202 @@
 
 <script>
 import pdfHomePage from './pdfHomePage'
+import wsAndWd from './components/wsAndWpd'
+import wdRose from './components/wdRose'
+import windShear from './components/windShear'
+import wsFrequency from './components/wsFrequency'
+import turbulence from './components/turbulence'
+import {listEquipmentIdAndDataTime} from "@/api/biz/dataQuery/windTowerStatusInfo";
+import {getDataTimeForEveryTower} from "@/api/biz/dataQuery/pdf";
+import defaultOption from "@/api/biz/dataQuery/defaultOption";
+import WsFrequency from "@/views/dataAnalysis/components/wsFrequency";
+import htmlToPdf from "@/utils/htmlToPdf";
+import Cookies from "js-cookie";
+
 export default {
   name: "index",
-  components: {pdfHomePage},
-  data(){
-    return{
+  components: {WsFrequency, pdfHomePage, wsAndWd, wdRose, windShear, wsFrequency, turbulence},
+  data() {
+    return {
+      loading: false,
+      downLoading: false,
       text: '****  生成pdf报告流程:  1.选择测风塔和层高    2.生成报告模板    3.导出  ****',
+      cftId: '',
+      intervalID: null,
+      startDateAndEndDate: [],
+      dataTime: [],
+      pickerMinDate: null,
+      pickerMaxDate: null,
+      pickerOptions: {
+        //点击时间回调
+        onPick: ({maxDate, minDate}) => {
+          if (minDate) {
+            let currentYear = minDate.getMonth()
+            this.pickerMinDate = new Date(minDate).setMonth(currentYear - 11)
+            this.pickerMaxDate = new Date(minDate).setMonth(currentYear + 11)
+          }
+        },
+        //禁用时间 打开选择器就调用
+        disabledDate: (time) => {
+          if (this.pickerMinDate != null) {
+            //点击月份后只允许选前后1年的时间
+            //return true是禁用
+            return time.getTime() < this.pickerMinDate || this.pickerMaxDate < time.getTime()
+          }
+        },
+      },
+      height: '',
+      options: [],
+      allOptions: [],
       /*pdf数据*/
-      info: {equipmentId:'声雷达6172'},
+      info: {equipmentId: '声雷达6172'},
+      /*测风塔基本信息*/
+      windTowerInfo: {
+        name: 'xxx声雷达',
+        equipmentNo: '202101008',
+        installationTime: '2022.5.14',
+        startTime: '2022.5.14',
+        endTime: '2023.04.25',
+        longitude: '1',
+        latitude: '1',
+        wsHeight: '1',
+        wdHeight: '1',
+      },
+      tableData: [
+        {name: "测风设备命名", column: 0},
+        {name: "仪器编号", column: 0},
+        {name: "地理位置", column: '经度'},
+        {name: "地理位置", column: '纬度'},
+        {name: "通道信息", column: '风速高度(m)'},
+        {name: "通道信息", column: '风向高度(m)'},
+      ],
+      /*数据完整性*/
+      dataIntegrity: {
+        time: '2022年5月13号',
+        startTime: '5.14号',
+        integrityRate: '99',
+        totalNum: '',
+      },
+      /*环境数据*/
+      envTableData: [
+        {parameter: '温度', avg: '3.83', max: '36.93', min: '-34.08'},
+        {parameter: '湿度', avg: '48.40', max: '99.00', min: '5.00'},
+        {parameter: '大气压力', avg: '902.18', max: '994.30', min: '878.20'},
+        {parameter: '空气密度', avg: '1.14', max: '1.34', min: '1.00'}
+      ]
     }
+  },
+  destroyed() {
+    clearInterval(this.intervalID)
+    this.intervalID = null
+  },
+  mounted() {
+    this.allOptions = defaultOption.allHeightOptions
+    this.getlistEquipmentIdAndDataTime()
+  },
+  methods: {
+    getlistEquipmentIdAndDataTime() {
+      // this.changeMonth(this.dataTime)
+      /*简易走马灯*/
+      if (this.intervalID != null) return;
+      this.intervalID = setInterval(() => {
+        var start = this.text.substring(0, 1)
+        var end = this.text.substring(1)
+        this.text = end + start
+      }, 400)
+
+      /*****/
+      listEquipmentIdAndDataTime().then(res => {
+        this.startDateAndEndDate = res.data
+        this.cftId = res.data[0].value
+        // this.changeHeight(res.data[0])
+      })
+      /*****/
+      getDataTimeForEveryTower().then(res => {
+        this.defaultTimeData = res.data
+        let startAndEndTime = this.defaultTimeData.find(w => w.eqId == this.cftId)
+        this.dataTime = [startAndEndTime.startTime, startAndEndTime.endTime]
+      }).catch(err => {
+        console.log('获取所有测风塔的开始结束时间异常:' + err)
+      })
+    },
+    changeCft() {
+
+    },
+    changeMonth(value) {
+      // 今天是月初并且选择的月份是当月
+      let endTime = new Date(value[1])
+      let startTime = new Date(value[0])
+      this.dataTime[0] = startTime.getTime()
+      if (new Date().getDate() === 1 && endTime.getMonth() + 1 === new Date().getMonth() + 1) {
+        this.dataTime[1] = endTime.getTime() - 1000 * 60 * 60 * 24
+      } else {
+        var data = new Date(value[1]);
+        data.setMonth(data.getMonth() + 1);
+        data.setDate(1);
+        data.setHours(0);
+        data.setSeconds(0);
+        data.setMinutes(0);
+        var timeEnd = (parseInt(data.getTime() / 1000) - 1) * 1000;
+        this.dataTime[1] = timeEnd //最后一天23:59:59的时间戳
+      }
+    },
+    seach() {
+
+    },
+    async getPdf() {
+      this.downLoading = true
+      await htmlToPdf.downloadPDF(document.querySelector('#dataAnalysisPdf'), this.windTowerInfo.name + '测风设备数据分析报告')
+      this.downPdfTimer = setInterval(() => {
+        if (Cookies.get('pdfKey')) {
+          this.downLoading = false
+          clearInterval(this.downPdfTimer)
+          Cookies.remove("pdfKey");
+        }
+      }, 500)
+    },
+    /*切换测风塔时改变层高option*/
+    changeHeight(data) {
+      if (data.heights != null) {
+        var option = []
+        let str = data.heights.split(',')
+        this.height = str[0]
+        // this.height = null
+        for (let i = 0; i < str.length; i++) {
+          let filter = this.allOptions.find(w => w.value == str[i])
+          option.push(filter)
+        }
+        this.options = option
+      } else {
+        this.height = "10"
+        // this.height = null
+        this.options = this.allOptions
+      }
+
+    },
+    /*合并单元格*/
+    arraySpanMethod({row, column, rowIndex, columnIndex}) {
+      if (rowIndex === 0 || rowIndex === 1) {
+        if (columnIndex === 0) {
+          return [1, 2];
+        } else if (columnIndex === 1) {
+          return [0, 0];
+        }
+      }
+      if (columnIndex === 0) {
+        if (rowIndex % 2 === 0) {
+          return {
+            rowspan: 2,
+            colspan: 1
+          };
+        } else {
+          return {
+            rowspan: 0,
+            colspan: 0
+          };
+        }
+      }
+    },
   }
 }
 </script>
@@ -37,4 +399,116 @@ export default {
   align-items: center;
 }
 
+.condition {
+  display: flex;
+  margin: .5%;
+}
+
+.conditionOne, .conditionTwo, .seachBtu {
+  display: inline-block;
+}
+
+.conditionTwo, .seachBtu {
+  margin-left: .5%;
+}
+
+/deep/ .seachBtu .el-loading-spinner {
+  font-size: 30px;
+}
+
+/deep/ .condition .el-button--mini {
+  height: 32px;
+}
+
+#dataAnalysisPdf {
+  width: 1661px;
+  font-size: 20px;
+}
+
+#dataAnalysisPdf h1, #dataAnalysisPdf h2, #dataAnalysisPdf h3 {
+  font-weight: bold;
+}
+
+.text {
+  margin-left: 40px;
+  font-size: 24px;
+}
+
+.pdfTableDiv {
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+}
+
+.tableTitle {
+  margin: 0 auto;
+}
+
+.tableTitle span {
+  font-weight: bold;
+}
+
+.descriptionsDiv /deep/ .el-descriptions__body .el-descriptions__table .el-descriptions-item__cell {
+  text-align: center;
+}
+
+.descriptionsDiv /deep/ .el-descriptions-item__label.is-bordered-label {
+  font-size: 20px;
+  font-weight: bold;
+  color: #000000;
+  background: #ffffff;
+}
+
+.descriptionsDiv /deep/ .el-descriptions .is-bordered .el-descriptions-item__cell {
+  border: 2px solid #000000;
+}
+
+.descriptionsDiv /deep/ .el-descriptions--medium.is-bordered .el-descriptions-item__cell {
+  padding: 8px;
+}
+
+.descriptionsDiv /deep/ .el-descriptions-item__content {
+  font-size: 20px;
+}
+
+.rowDiv {
+  display: flex;
+  justify-content: center;
+}
+
+.pdfTable {
+  width: 100%;
+  border: 1px solid;
+  border-right: none;
+  font-weight: bold;
+  color: #000;
+  font-size: 20px
+}
+
+.rowDiv /deep/ .el-row {
+  text-align: center;
+  font-size: 20px;
+  line-height: 50px;
+  /*border: 1px solid #000;*/
+  border-top: 1px solid #000;
+  border-left: 1px solid #000;
+}
+
+.rowDiv .tableCol {
+  border: 1px solid #000;
+  height: 44px;
+  border-top: none;
+  border-left: none;
+}
+
+.rowDiv /deep/ .el-table--border .el-table__cell {
+  border-right: 1px solid #000000;
+  border-bottom: 1px solid #000;
+}
+
+.rowDiv /deep/ .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 20px;
+}
 </style>

+ 1 - 0
wrdep-ui/src/views/largeScreenPage/Subpage/emailResourcesInfo.vue

@@ -298,6 +298,7 @@ export default {
       selectTForAir({equipmentId: this.cftNo, month: ''}).then(res => {
         // console.log(res.data)
         let data = res.data
+        this.height = res.data.height
         this.projectInfo = {
           time: data.dataTime,
           model: 'WH6.25N-182',