123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- <template>
- <div class="bg-white py-[10px] px-[10px] relative">
- <div class="mb-[20px]">
- <el-form class="" :inline="true">
- <el-form-item label="场站" class="!mb-0">
- <el-select v-model="station" clearable class="w-[150px]">
- <el-option
- v-for="item in stationList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="开始" class="!mb-0 ml-2">
- <el-date-picker
- v-model="val1"
- @change="BeginChange(val1)"
- type="month"
- value-format="YYYY-MM"
- placeholder="选择日期"
- >
- </el-date-picker>
- </el-form-item>
- <el-form-item label="结束" class="!mb-0">
- <el-date-picker
- v-model="value2"
- @change="EndChange(value2)"
- type="month"
- value-format="YYYY-MM"
- placeholder="选择日期"
- >
- </el-date-picker>
- </el-form-item>
- <el-form-item class="!mb-0">
- <el-button type="primary" @click="addform">查询</el-button>
- </el-form-item>
- </el-form>
- </div>
- </div>
- <div class="mb-[20px] mt-[20px]">
- <el-table
- :data="tableData"
- stripe
- size="large"
- :border="true"
- :style="{ width: '100%' }"
- >
- <el-table-column
-
- resizable
- align="center"
- type="index"
- label="序号"
- />
- <el-table-column
-
- resizable
- align="center"
- prop="station"
- label="场站名称"
- />
- <el-table-column
-
- resizable
- align="center"
- prop="time"
- label="时间"
- />
- <el-table-column
-
- resizable
- align="center"
- prop="wtidcount"
- label="风机数量"
- />
- <el-table-column resizable align="center" label="操作">
- <template #default="scope">
- <!-- <el-button size="small" @click="handleEdit(scope.$index, scope.row)"
- >下载</el-button
- > -->
- <el-button
- size="small"
- type="danger"
- @click="handleDelete(scope.$index, scope.row)"
- >查看报告</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </div>
- <div >
- <el-dialog
- v-model="centerDialogVisible"
- title="风电场性能分析报告"
- width="50%"
- center
- >
- <div id="pdfDom">
- <!-- <h3 style="font-weight: bolder; font-size: 18px; color: black;text-aling:center">风电场性能分析报告</h3> -->
- <p>
- <span class="ml-10">场站: {{ nbdata.name }}</span>
- <span class="ml-77">风机型号: {{ nbdata.model }}</span>
- </p>
- <p>
- <span class="ml-10">风机数量: {{ nbdata.quantity }}</span>
- <span class="ml-85">装机容量(MW): {{ nbdata.capacity }}</span>
- </p>
- <p>
- <span class="ml-10">报告生成日期: {{ time }}</span>
- <span class="ml-72">数据分析周期: {{ eltime }}</span>
- </p>
- <h3 style="font-weight: bolder; font-size: 18px; color: black">概述:</h3>
- <p class="ml-7">
- 报告基于曲线偏差率、静态偏差对风、容量系数、停机时长、分别对场站{{ nbdata.quantity }}台风机进行了性能分析,其中有{{wtcount}}台风机指标严重异常,信息如下:
- </p>
- <h3 style="font-weight: bolder; font-size: 18px; color: black">
- 1、曲线偏差率
- </h3>
- <p class="ml-7">
- 曲线偏差率对不同风速区间的实际功率和保证功率做偏差率分析,高偏差率表明存在需要进一步调查潜在问题,偏差率负值表明实际功率低于保证功率
- </p>
- <el-table
- :data="curve"
- :span-method="objectSpanMethod"
- border
- style="width: 100%; margin-top: 20px"
- >
- <el-table-column
- prop="section"
- align="center"
- label="风速区间"
- width="180"
- />
- <el-table-column prop="module" align="center" label="偏差率" />
- <el-table-column prop="wtidcount" align="center" label="风机数量" />
- <el-table-column prop="windturbine" align="center" label="风机编号" />
- </el-table>
- <h3 style="font-weight: bolder; font-size: 18px; color: black">
- 2、静态偏航对风
- </h3>
- <p class="ml-7">
- 静态偏航对风指风机的叶片与风向之间的偏差,偏差角度过大表明对风存在问题,以下为5-10m风速区间的对风误差
- </p>
- <el-table
- :data="staticwind"
- :span-method="objectSpanMethod"
- border
- style="width: 100%; margin-top: 20px"
- >
- <el-table-column
- prop="section"
- align="center"
- label="严重程度"
- width="180"
- />
- <el-table-column prop="wtidcount" align="center" label="风机数量" />
- <!-- <el-table-column prop="amount1" label="风机数量" /> -->
- <el-table-column prop="windturbine" align="center" label="风机编号" />
- </el-table>
- <h3 style="font-weight: bolder; font-size: 18px; color: black">
- 3、容量系数
- </h3>
- <p class="ml-7">
- 容量系数是风机发电量能力的指标,数值越低,说明发电效率越低
- </p>
- <el-table
- :data="mrlxs"
- :span-method="objectSpanMethod"
- border
- style="width: 100%; margin-top: 20px"
- >
- <el-table-column
- prop="section"
- align="center"
- label="容量系数"
- width="180"
- />
- <!-- <el-table-column prop="name" label="偏差率" /> -->
- <el-table-column prop="wtidcount" align="center" label="风机数量" />
- <el-table-column prop="windturbine" align="center" label="风机编号" />
- </el-table>
- <h3 style="font-weight: bolder; font-size: 18px; color: black">
- 4、停机时间
- </h3>
- <p class="ml-7">
- 小风速下停机时间越长反应出低风速风机切入不及时,暴风天气不停机反应出风机切出不及时
- </p>
- <el-table
- :data="stoptime"
- :span-method="objectSpanMethod"
- border
- style="width: 100%; margin-top: 20px"
- >
- <el-table-column
- prop="section"
- align="center"
- label="风速区间"
- width="180"
- />
- <el-table-column prop="wtidcount" align="center" label="风机数量" />
- <el-table-column prop="remark" align="center" label="累计时间(h)" />
- <el-table-column prop="windturbine" align="center" label="风机编号" />
- </el-table>
- <!-- <h3 style="font-weight: bolder; font-size: 18px; color: black">
- 5、损失电量
- </h3>
- <p class="ml-7">
- 损失电量指因故障或维护等原因导致风机未能正常发电,损失电量占比越高,存在的问题越明显
- </p>
- <el-table
- :data="tableData1"
- :span-method="objectSpanMethod"
- border
- style="width: 100%; margin-top: 20px"
- >
- <el-table-column prop="id" align="center" label="损失占比" width="180" />
- <el-table-column prop="amount1" align="center" label="风机数量" />
- <el-table-column prop="amount2" align="center" label="风机编号" />
- </el-table> -->
- <h3 style="font-weight: bolder; font-size: 18px; color: black">
- 结论及建议
- </h3>
- <p class="ml-7">
- 综上统计周期内数据分析,{{ nbdata.name }}的{{hjwtid}}台风机出现频率最高为{{hjcount}}次。
- </p>
- </div>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="centerDialogVisible = false">取消</el-button>
- <!-- <el-button type="primary" @click="centerDialogVisible = false">
- 确定
- </el-button> -->
- <el-button @click="exportPDF" type="primary" :loading="loading">导出 PDF</el-button>
- </span>
- </template>
- </el-dialog>
- </div>
- </template>
- <script setup name="report">
- import request from "@/api/axios.js";
- import jsPDF from 'jspdf';
- import html2canvas from 'html2canvas';
- import htmlToPdf from "./fixGetPDF";
- import { ref, onMounted, reactive } from "vue";
- const curve = ref([]);
- const mrlxs = ref([]);
- const staticwind = ref([]);
- const stoptime = ref([]);
- const nbdata = ref({});
- const loading=ref(false)
- const exportPDF = () => {
- loading.value = true;
- // 调用htmlToPdf工具函数
- htmlToPdf.getPdf(
- document.querySelector("#pdfDom"),
- "风电场性能分析报告"
- );
- // 定时器模拟按钮loading动画的时间
- setTimeout(() => {
- loading.value = false;
- ElMessage.success('打印成功!');
- }, 1000);
- centerDialogVisible.value=false
- }
-
- const centerDialogVisible = ref(false);
- /**场站 */
- const stationList = ref([]);
- const funGetStation = async () => {
- const res = await request.get("/base/station");
- stationList.value = res.data;
- };
- /**查询表格数据 */
- const tableData = ref();
- const station = ref("");
- const addform = async () => {
- const res = await request.get(
- `/report/list?station=${station.value}&st=${val1.value}&et=${value2.value}`
- );
- // res.data.forEach((ele)=>{
- // ele.time=ele.time.slice(0, 7);
- // })
- tableData.value = res.data;
- };
- let val1 = ref();
- let value2 = ref();
- const BeginChange = (val) => {
- console.log(val);
- val1.value = val;
- // console.log(val);
- };
- const EndChange = (val) => {
- // console.log(val);
- value2.value = val;
- };
- let time = ref();
- let eltime = ref();
- let wtcount=ref()
- let hjwtid=ref()
- let hjcount=ref()
- const handleDelete = async (index, row) => {
- time.value = row.time;
- // console.log(index, row)
- centerDialogVisible.value = true;
- const res = await request.get(
- `/report/info?station=${row.station}&date=${row.time}`
- );
- nbdata.value = res.data.station;
- // console.log('nb',nbdata.value);
- res.data.info.curve.forEach((ele) => {
- ele.module = "偏差率负值";
- });
- // res.data.info.stoptime.forEach((ele)=>{
- // ele.remark=ele.remark/60
- // })
-
- curve.value = res.data.info.curve;
- mrlxs.value = res.data.info.mrlxs;
- staticwind.value = res.data.info.staticwind;
- stoptime.value = res.data.info.stoptime;
- eltime.value = res.data.time;
- wtcount.value = res.data.wtcount;
- hjwtid.value = res.data.hjwtid;
- hjcount.value = res.data.hjcount;
- };
- const getTime1 = (val) => {
- //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
- var date = new Date();
- var year = date.getFullYear(),
- month = date.getMonth() + 1,
- day = date.getDate();
- month >= 1 && month <= 9 ? (month = "0" + month) : "";
- day >= 0 && day <= 9 ? (day = "0" + day) : "";
- var begin = year + "-" + '05';
- var end = year + "-" + month;
- if (val == 1) {
- return begin;
- } else if (val == 2) {
- return end;
- }
- };
- onMounted(() => {
- funGetStation();
-
- val1.value = getTime1(1);
- value2.value = getTime1(2);
- addform()
- });
- /**created */
- funGetStation();
- // onActivated(() => {
- // funQuery();
- // })
- </script>
|