123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- <script setup name="agcAnalysis">
- import {
- getPrepareExcelShow,
- getPrepareTree,
- getWindAgcDeviate,
- } from "@/api/powerGenerating/index.js";
- import searchCop from "./components/search.vue";
- import excelCop from "@/components/excel.vue";
- import treeCop from "@/components/tree.vue";
- import tableCop from "@/views/powerGenerating/components/table.vue";
- import { ElMessage } from "element-plus";
- import { onMounted, ref, onActivated } from "vue";
- import CurrentScatterChart from "./components/current-scatter-chart.vue";
- import request from "@/api/axios.js";
- import dayjs from "dayjs";
- /**excel 开始 */
- const excelList = ref([]);
- const funExcelChange = async (obj) => {
- //点击excel项时
- activeTab.value = "1";
- tableShowId.value = obj.id;
- tableName.value = obj.name;
- tableLoading.value = true;
- const res = await getPrepareExcelShow({ id: obj.id });
- if (res.code === 200) {
- tableColumn.value = res.data.title.map((o) => {
- return {
- prop: o.key,
- label: o.des,
- width: o.des === "时间" ? 100 : 80,
- };
- });
- tableData.value = res.data.data;
- tableLoading.value = false;
- } else {
- tableLoading.value = false;
- }
- };
- /**tree 开始 */
- const treeData = ref([]);
- const funRepeatMap = (arr) => {
- return arr.map((o) => {
- if (o.children) {
- const findIndex = o.children.findIndex((p) => !!p.type);
- if (findIndex !== -1) {
- o.childs = o.children;
- o.children = [];
- }
- }
- return {
- ...o,
- children: o.children?.length ? funRepeatMap(o.children) : [],
- };
- });
- };
- const funGetTree = async () => {
- const res = await getPrepareTree();
- treeData.value = funRepeatMap(res.data);
- excelList.value = [];
- };
- const funCurrentChange = ({ current, currentNode }) => {
- if (current.childs) {
- excelList.value = current.childs.map((o) => {
- return {
- id: o.id,
- interval: o.interval,
- path: o.path,
- prepareid: o.prepareid,
- station: o.station,
- time: o.time,
- type: o.type,
- windturbine: o.windturbine,
- name: o.path.substring(
- o.path.indexOf(o.station + "_") + (o.station + "_").length
- ),
- };
- });
- } else {
- excelList.value = [];
- }
- };
- /**table 开始 */
- const tableShowId = ref("");
- const tableName = ref("");
- const tableColumn = ref([]);
- const tableLoading = ref(false);
- const tableData = ref([]);
- /**tab */
- const activeTab = ref("1");
- /**chart Data */
- const xAxisData = ref([]);
- const chartRef = ref(); //chart 的ref
- const seriesData = ref([]);
- const dataSet = ref("");
- const funChartSelect = async (batch) => {
- return false;
- };
- /**submit */
- const funSubmit = async (params) => {
- activeTab.value = "2";
- tableShowId.value = "";
- tableName.value = "AGC曲线分析";
- tableLoading.value = true;
- const res = await getWindAgcDeviate(params);
- tableColumn.value = [
- {
- prop: "ts",
- label: "时间",
- width: 100,
- },
- {
- prop: "ygsdxz",
- label: "有功设定限值",
- width: 80,
- },
- {
- prop: "sfyg",
- label: "实发有功",
- width: 80,
- },
- {
- prop: "llgl",
- label: "理论功率",
- width: 80,
- },
- {
- prop: "pcsx",
- label: "偏差上限",
- width: 80,
- },
- {
- prop: "pcxx",
- label: "偏差下限",
- width: 100,
- },
- ];
- const tableArr = [];
- const tsArr = [];
- const ygsdxz = [];
- const sfyg = [];
- const llgl = [];
- const pcsx = [];
- const pcxx = [];
- res["有功设定限值"].values.map((o, index) => {
- tsArr.push(dayjs(o.ts).format("YYYY-MM-DD HH:mm:ss"));
- ygsdxz.push(Number(o.value).toFixed(2));
- sfyg.push(Number(res["实发有功"].values[index].value).toFixed(2));
- llgl.push(Number(res["理论功率"].values[index].value).toFixed(2));
- pcsx.push(Number(res["偏差上限"].values[index].value).toFixed(2));
- pcxx.push(Number(res["偏差下限"].values[index].value).toFixed(2));
- tableArr.push({
- ts: dayjs(o.ts).format("YYYY-MM-DD HH:mm:ss"),
- ygsdxz: Number(o.value).toFixed(2),
- sfyg: Number(res["实发有功"].values[index].value).toFixed(2),
- llgl: Number(res["理论功率"].values[index].value).toFixed(2),
- pcsx: Number(res["偏差上限"].values[index].value).toFixed(2),
- pcxx: Number(res["偏差下限"].values[index].value).toFixed(2),
- });
- });
- xAxisData.value = tableArr.map((o) => o.ts);
- seriesData.value = [
- {
- name: "有功设定限值",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: ygsdxz,
- xAxisIndex: 0,
- },
- {
- name: "实发有功",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: sfyg,
- xAxisIndex: 0,
- },
- {
- name: "理论功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: llgl,
- xAxisIndex: 0,
- },
- {
- name: "偏差上限",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: pcsx,
- xAxisIndex: 0,
- lineStyle: {
- opacity: 0,
- },
- areaStyle: {
- color: "#ccc",
- },
- symbol: "none",
- },
- {
- name: "偏差下限",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: pcxx,
- xAxisIndex: 0,
- lineStyle: {
- opacity: 0,
- },
- areaStyle: {
- color: "#fff",
- opacity: 1,
- },
- symbol: "none",
- },
- ];
- tableData.value = tableArr;
- tableLoading.value = false;
- tableShowId.value = "1";
- // if (res.code === 200) {
- // if(res.data.sjgl?.length){
- // for(const wtObj of res.data.sjgl){
- // seriesData.value.push(
- // {
- // name: wtObj.obj.windturbine + "\n实际功率",
- // type: "line",
- // symbol: "line", //设定为实心点
- // symbolSize: 0, //设定实心点的大小
- // smooth: true, //这个是把线变成曲线
- // data: wtObj.sjgl || [],
- // xAxisIndex: 0,
- // },
- // )
- // wtData.value.push(wtObj.obj)
- // }
- // }
- // }
- };
- /**created */
- funGetTree();
- /**mounted */
- /**activated */
- onActivated(() => {
- // funGetTree()
- // funSubmit()
- });
- </script>
- <template>
- <div class="container-wrapper">
- <search-cop @submit="funSubmit"> </search-cop>
- <div class="power-data-wrapper card-shadow wrapper">
- <div class="card-title">数据展示</div>
- <div class="data-wrapper">
- <div class="data-table-wrapper card-shadow">
- <el-tabs v-model="activeTab" class="data-table-tabs">
- <el-tab-pane label="表格数据" name="1"> </el-tab-pane>
- <el-tab-pane label="图表展示" name="2"> </el-tab-pane>
- <table-cop
- v-show="activeTab === '1'"
- :data="tableData"
- :loading="tableLoading"
- :column="tableColumn"
- :showShadow="false"
- :tableId="tableShowId"
- :tableName="tableName"
- ></table-cop>
- <div v-show="activeTab === '2'" class="data-chart-wrapper">
- <CurrentScatterChart
- ref="chartRef"
- width="100%"
- height="100%"
- :chartTitle="''"
- :xAxisData="xAxisData"
- :yAxisData="{ splitLine: { show: false } }"
- :seriesData="seriesData"
- :showLegend="true"
- :brushSelected="false"
- :dataSet="dataSet"
- @getSelected="funChartSelect"
- />
- </div>
- </el-tabs>
- </div>
- </div>
- </div>
- </div>
- </template>
- <style lang="less" scoped>
- .container-wrapper .power-data-wrapper .data-wrapper .data-table-wrapper {
- width: 100%;
- }
- .el-tabs ::v-deep {
- height: 100%;
- .el-tabs__item {
- color: #b3b3b3;
- padding: 0 12px;
- }
- .el-tabs__nav-wrap::after {
- background-color: #14221f;
- }
- .el-tabs__active-bar {
- background-color: #05bb4c;
- }
- .el-tabs__item.is-active,
- .el-tabs__item:hover {
- color: #05bb4c;
- }
- .el-tabs__content {
- height: calc(100% - 45px);
- .table-wrapper {
- width: 100%;
- }
- .data-chart-wrapper {
- width: 100%;
- height: 100%;
- }
- }
- }
- </style>
|