1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981 |
- <template>
- <div class="dataAnalysisPosAnal" :class="!theme ? 'themeDark' : 'themeLight'">
- <div class="dataAnalysisPosAnalMain">
- <div class="station">
- 场站:
- <el-select size="mini" v-model="state.stationObj" multiple collapse-tags placeholder="请选择"
- @change="handleStationChange(state.stationObj)" clearable>
- <el-option v-for="item in stationList" :key="item.id" :label="item.aname" :value="item.id">
- </el-option>
- </el-select>
- </div>
- <div class="station">
- 风机:
- <el-select v-model="state.windSObj" clearable @clear="checkAllWind = false" collapse-tags multiple>
- <el-option label="全选" :class="{ selected: checkAllWind }" @click="funCheckwindsAll"></el-option>
- <el-option v-for="item in windSList" :key="item.id" :label="item.aname" :value="item.id">
- </el-option>
- </el-select>
- </div>
- <!-- <div class="station">
- 线路:
- <el-select
- size="mini"
- :disabled="displayDetail"
- v-model="lineObj"
- multiple
- collapse-tags
- placeholder="请选择"
- clearable
- >
- <el-option
- v-for="item in lineList"
- :key="item.id"
- :label="item.aname"
- :value="item.id"
- >
- </el-option>
- </el-select>
- </div> -->
- <div class="but">
- <el-button round size="mini" class="buttons" @click="gerWxssl">搜 索</el-button>
- </div>
- </div>
- <div class="main">
- <div class="leftContent">
- <span>{{ selectValue }}</span>
- </div>
- <!-- <div class="treeDataMain">
- <tree-cop ref="treeCopRef" :data="treeData" @checkChange="funTreeCheckChange" :show-checkbox="true"
- :height="treeHeight" @currentChange="funCurrentChange" @refresh="funGetTree"></tree-cop>
- </div>
- <div class="excelDataMain">
- <excel-cop :checkIds="excelCheckIds" :showCheckbox="excelCheckboxShow" :data="excelList"
- :theme="theme" :height="excelHeight" @excelChange="funExcelChange"
- @checkChange="funExcelCheckChange">
- </excel-cop>
- </div> -->
- <div class="tableDataMain">
- <div class="shadow rounded-[6px] shadow-blue-500 overflow-hidden">
- <div :style="{
- height:
- typeof tableHeight === 'string'
- ? tableHeight
- : tableHeight + 'px',
- overflow: 'hidden',
- }">
- <leafletMap :windList="windList" :ids="state.windSObj" @mapDone="funMapDone"
- @rightClick="funRightClick" />
- </div>
- </div>
- </div>
- </div>
- <el-dialog draggable width="80%" top="10px" v-model="dbRateDialog" :title="actDiaTitle"
- modal-class="rightMenuDialog">
- <el-form class="whitespace-nowrap" :inline="true" :model="queryForm">
- <el-form-item label="" class="!mb-0">
- <el-select v-model="queryForm.checkIds" clearable @clear="checkAll = false" collapse-tags multiple>
- <el-option label="全选" :class="{ selected: checkAll }" @click="funCheckAll"></el-option>
- <el-option v-for="item in windList" :key="item.processId" :value="item.processId"
- :label="item.name"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item class="!mb-0">
- <submit-btn desc="查询" @click="funDiaSubmit"></submit-btn>
- <submit-btn desc="导出" @click="funDiaExport"></submit-btn>
- </el-form-item>
- </el-form>
- <div v-loading="exportLoading">
- <div style="height: 600px"
- class="flex flex-wrap justify-center items-center overflow-y-auto overflow-x-hidden"
- ref="diaPanelRef">
- <component :is="item.actCop" :width="`${100 / (actCopList.length || 1)}%`" height="100%"
- v-for="item in actCopList" :key="item.id" :xAxis="item.xAxis" :subtext="item.subtext"
- :isRadar="item.isRadar" :title="item.title" :series="item.series"
- :isDiaAlone="actCopList.length === 1" @dblclick="funDbClick(item)" :yAxis="item.yAxis"
- :dataset="item.dataset" :brush="item.isBrush"></component>
- </div>
- </div>
- </el-dialog>
- <el-dialog custom-class="windLifeDialog" title="对风偏差分析" draggable width="90%" top="25px" v-model="rateDialog">
- <el-row :style="{ height: '793px' }">
- <el-col :span="12" v-for="(item, index) in chartData" :key="item.id" style="height: 45%">
- <el-icon :style="!theme ? 'color: #fff' : ''" size="18"
- @click="funActCop(item, 'chartCop' + (index + 1))">
- <ZoomIn />
- </el-icon>
- <chart-cop class="" height="100%" width="100%" :xAxis="item.xAxis" :isRadar="item.isRadar"
- :theme="theme" :echartsTheme="echartsTheme" :subtext="item.subtext" :title="item.title"
- :series="item.series">
- </chart-cop>
- </el-col>
- <el-col :span="12" v-if="!!lineSeries.length" style="height: 50%">
- <el-icon :style="!theme ? 'color: #fff' : ''" size="18" @click="
- funActCop(
- {
- xAxis: linexAxis,
- yAxis: lineyAxis,
- series: lineSeries,
- dataset: lineDataSet,
- },
- 'lineChartCop'
- )
- ">
- <ZoomIn />
- </el-icon>
- <line-chart-cop class="" height="100%" width="100%" :xAxis="linexAxis" :yAxis="lineyAxis"
- :theme="theme" :echartsTheme="echartsTheme" :series="lineSeries" subtext="对风偏差分析图"
- :dataset="lineDataSet"></line-chart-cop>
- </el-col>
- <el-col :span="12" v-if="!!lineSeries.length" style="height: 50%">
- <el-icon :style="!theme ? 'color: #fff' : ''" size="18" @click="
- funActCop(
- {
- xAxis: scatterxData,
- yAxis: scatteryData,
- series: scatterSeries,
- },
- 'scatterSingleChartCop'
- )
- ">
- <ZoomIn />
- </el-icon>
- <scatter-single-chart-cop class="" height="95%" width="100%" :xAxis="scatterxData" :theme="theme"
- :echartsTheme="echartsTheme" :yAxis="scatteryData" :series="scatterSeries" subtext="静态偏航对风分析图">
- </scatter-single-chart-cop>
- </el-col>
- </el-row>
- </el-dialog>
- <el-dialog custom-class="windLifeDialog" title="功率曲线拟合" draggable width="90%" top="25px"
- modal-class="rightMenuDialog" v-model="combineDialog">
- <combineChart width="100%" height="600px" :chartTitle="
- avgObj.title +
- ' ' +
- '平均Cp值:' +
- avgObj.cpavg +
- '; 静风频率:' +
- avgObj.frequency +
- '%; 曲线偏差率:' +
- avgObj.pcratio +
- '%'
- " :xAxisData="combine.xAxisData" :yAxisData="{ splitLine: { show: false } }" :seriesData="combine.seriesData"
- :theme="theme" :echartsTheme="echartsTheme" :showLegend="true" :brushSelected="!combine.isChartArea"
- :dataSet="combine.dataSet" @getSelected="funCombineChartSelect"></combineChart>
- </el-dialog>
- <!-- 功率曲线拟合的圈选功能 -->
- <el-dialog v-model="wtDialog" draggable title="风机功率点位">
- <el-tabs v-model="wtTab">
- <el-tab-pane label="数据" name="table">
- <el-table :data="wtData" default-expand-all row-key="id" :max-height="550">
- <el-table-column property="wtId" align="center" label="风机" />
- <el-table-column property="time" sortable :width="160" align="center" label="时间" />
- <el-table-column property="speed" sortable align="center" label="风速(m/s)" />
- <el-table-column property="power" sortable align="center" label="功率(kW)" />
- <el-table-column property="rr" sortable align="center" label="转速" />
- <el-table-column property="filter" sortable align="center" label="是否有用点" />
- </el-table>
- </el-tab-pane>
- <el-tab-pane label="故障" name="problem" disabled> </el-tab-pane>
- <el-tab-pane label="预警" name="warning" disabled> </el-tab-pane>
- </el-tabs>
- </el-dialog>
- <el-dialog custom-class="windLifeDialog" title="曲线偏差率分析" draggable width="90%" top="25px"
- modal-class="rightMenuDialog" v-model="lineDialog">
- <combineChart ref="chartRef" width="100%" height="600px" :chartTitle="qxLineChartTitle"
- :xAxisData="qxLineChart.xAxisData" :yAxisData="{ splitLine: { show: false } }"
- :seriesData="qxLineChart.seriesData" :showLegend="true" :brushSelected="false"
- :dataSet="qxLineChart.dataSet" :theme="theme" :echartsTheme="echartsTheme" :showToolbox="false"
- tooltipTrigger="axis" @getSelected="qxLineChart.funChartSelect" />
- </el-dialog>
- <el-dialog custom-class="windLifeDialog" title="温度与功率分析" draggable width="90%" top="25px"
- modal-class="rightMenuDialog" v-model="hotDialog">
- <combineChart ref="chartRef" width="100%" height="600px" :chartTitle="
- avgObj.title +
- ' ' +
- '平均Cp值:' +
- avgObj.cpavg +
- '; 静风频率:' +
- avgObj.frequency +
- '%; 曲线偏差率:' +
- avgObj.pcratio +
- '%'
- " :xAxisData="hotChart.xAxisData" :yAxisData="{ splitLine: { show: false } }" :seriesData="hotChart.seriesData"
- :showLegend="true" :brushSelected="false" :maxMinData="hotChart.maxMinData" :theme="theme"
- :echartsTheme="echartsTheme" :dataSet="hotChart.dataSet" :showToolbox="false" tooltipTrigger="axis"
- @getSelected="funhotChartSelect" />
- </el-dialog>
- <el-dialog custom-class="windLifeDialog" title="损失电量分析" draggable width="90%" top="25px"
- modal-class="rightMenuDialog" v-model="ssDialog">
- <bar-line-chart-cop height="600px" :bardata="ssChart.barData" :lineData="ssChart.lineData"
- :color="ssChart.barColor" lineName="理论发电量"></bar-line-chart-cop>
- </el-dialog>
- <el-dialog custom-class="windLifeDialog" title="桨距角分析" draggable width="90%" top="25px"
- modal-class="rightMenuDialog" v-model="jjjDialog">
- <div class="tableDataMain">
- <el-tabs v-model="jjjActiveTab">
- <el-tab-pane label="图表展示" name="1">
- <div style="height: 600px">
- <combineChart ref="chartRef" width="100%" height="100%" :chartTitle="''"
- style="margin-top: 3vh" :xAxisData="jjjChart.xAxisData"
- :yAxisData="{ splitLine: { show: false } }" :seriesData="jjjChart.seriesData"
- :seriesAllData="jjjChart.seriesAllData" :showLegend="true" :brushSelected="false"
- :dataSet="jjjChart.dataSet" :theme="theme" :echartsTheme="echartsTheme"
- @getSelected="funChartSelect" />
- </div>
- </el-tab-pane>
- <el-tab-pane label="桨距角风速曲线" name="2">
- <div style="height: 600px">
- <!-- <div id="speedLine" style="width:100%;height:100%"></div> -->
- <bar-chart-cop width="100%" height="100%" :theme="theme" :echartsTheme="echartsTheme"
- :xAxis="jjjChart.linexAxis" :yAxis="jjjChart.lineyAxis" :series="jjjChart.lineSeries">
- </bar-chart-cop>
- </div>
- </el-tab-pane>
- <el-tab-pane label="表格数据" name="3">
- <div style="height: 600px">
- <table-cop class="" :data="jjjChart.tableData" :column="jjjChart.tableColumn" :theme="theme"
- height="100%" tableId="1" :tableName="jjjChart.tableName" :rowstyle="true"></table-cop>
- </div>
- </el-tab-pane>
- </el-tabs>
- </div>
- </el-dialog>
- </div>
- </template>
- <script setup name="posAnalysis">
- import excelCop from "@com/generatingCapacityComponent/excel.vue";
- import treeCop from "@com/generatingCapacityComponent/tree.vue";
- import {
- ref,
- nextTick,
- onActivated,
- shallowRef,
- onMounted,
- reactive,
- watch,
- } from "vue";
- import axios from "axios";
- import {
- useRouter
- } from "vue-router";
- import {
- useStore
- } from "vuex";
- import {
- ElMessage
- } from "element-plus";
- import tools from "@tools/htmlToPdf.js";
- import leafletMap from "./components/leafletMap.vue";
- /**combine */
- // import combineChart from "./components/combineCom/current-scatter-chart.vue";
- /**rateAnalysis */
- // import barLineChart from "./components/combineCom/barLineChart.vue";
- // import barChartCop from "./components/combineCom/barChart.vue";
- // import chartCop from "./components/rateCom/chart.vue";
- // import lineChartCop from "./components/rateCom/lineChart.vue";
- // import scatterSingleChartCop from "./components/rateCom/scatterSingleChart.vue";
- import httpRequest from "@/tools/request.js";
- import jsonData from "./components/data.json";
- const router = useRouter();
- /**配置参数 */
- const treeHeight = ref(window.innerHeight - 0 + "px"); //tree高度
- const excelHeight = ref(window.innerHeight - 0 + "px"); //excel高度
- const tableHeight = ref(window.innerHeight - 40 + "px");
- /**excel 开始 */
- const excelCheckboxShow = ref(false);
- const excelCheckIds = ref([]);
- const excelList = ref([]);
- const store = useStore();
- const showOnlineMap = ref(false);
- watch(
- () => router.currentRoute.value,
- (newValue, oldValue) => {
- // if (newValue.path === "/dataAnalysis/posAnalysis") {
- if (newValue.path.indexOf("/dataAnalysis/posAnalysis") > -1) {
- if (newValue.query.onlineMap) {
- showOnlineMap.value = newValue.query.onlineMap === "1" ? false : true;
- }
- }
- }, {
- immediate: true,
- }
- );
- const state = reactive({
- stationObj: [],
- windSObj: []
- })
- const stationList = ref([])
- const windSList = ref([])
- const windsIdList = ref([])
- const gerWxssl = () => {
- windsIdList.value = state.windSObj
- }
- const getStation = async () => {
- await httpRequest.get("/benchmarking/wpByCplist?companyids=NX_FGS&type=-1").then(res => {
- if (res.data.data.length) {
- stationList.value = res.data.data;
- state.stationObj = res.data.data.map(e => {
- return e.id
- })
- let stationObj = state.stationObj.join()
- getWinds(stationObj);
- }
- });
- }
- const handleStationChange = (val) => {
- getWinds(val);
- }
- const getWinds = async (wpids) => {
- httpRequest.get("/pro-basic-equipment/equipmentsByWpid2", {
- wpid: wpids,
- }).then(res => {
- if (res.data.data.length) {
- windSList.value = res.data.data;
- state.windSObj = res.data.data.map(e => {
- return e.id
- })
- // let windsObj = state.windSObj.join()
- // this.getLine(windsObj);
- } else {
- this.windSList = [];
- }
- });
- }
- const funExcelChange = async (obj) => {
- //点击excel项时
- return false;
- };
- const funExcelCheckChange = ({
- checkArr,
- data
- }) => {
- //bug
- excelCheckIds.value = checkArr;
- funSubmit();
- };
- /**prepare tree 开始 */
- const treeData = ref([]);
- const treeCopRef = ref(); //treeCop ref
- const actTreeNode = ref(null); //当前激活的treeNode
- const funRepeatMap = (arr, type = "fitting") => {
- return arr.map((o) => {
- if (o.children) {
- const findIndex = o.children.findIndex((p) => !!p.type);
- if (findIndex !== -1) {
- o.childs = o.children;
- o.children = [];
- if (!actTreeNode.value && type === "fitting") {
- //判断当且仅有process获取tree时 赋值
- actTreeNode.value = o;
- }
- }
- }
- return {
- ...o,
- children: o.children ? funRepeatMap(o.children, type) : [],
- };
- });
- };
- const funGetTree = async () => {
- actTreeNode.value = null;
- const res = await httpRequest.get("/power/fitting/tree");
- treeData.value = funRepeatMap(res.data);
- excelList.value = [];
- if (actTreeNode.value) {
- funCurrentChange({
- current: actTreeNode.value,
- currentNode: null,
- });
- if (treeCopRef.value) {
- treeCopRef.value.$refs.tree.setCheckedKeys([actTreeNode.value.id]);
- excelCheckIds.value = actTreeNode.value.childs.map((o) => o.id);
- funSubmit();
- }
- }
- };
- const treeId = ref("");
- const funCurrentChange = ({
- current,
- currentNode
- }) => {
- excelCheckboxShow.value = true;
- 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
- ),
- };
- });
- // excelCheckIds.value = current.childs.map((o) => o.id);
- // treeId.value = current.id || "";
- funSubmit();
- } else {
- excelList.value = [];
- excelCheckIds.value = [];
- windList.value = [];
- }
- };
- const funTreeCheckChange = ({
- current,
- checkedNodes,
- checkedKeys,
- halfCheckedNodes,
- halfCheckedKeys,
- }) => {
- funCurrentChange({
- current,
- currentNode: "",
- });
- const checkIds = [];
- if (checkedNodes.checkedNodes.length) {
- let checkArr = checkedNodes.checkedNodes;
- checkArr.forEach((it) => {
- if (it.childs && it.childs.length) {
- it.childs.forEach((iv) => {
- checkIds.push(iv.id);
- });
- }
- });
- }
- excelCheckIds.value = checkIds;
- //tree change -> excel change
- // funCurrentChange({ current, currentNode: '' })
- // const checkIds = []
- // if (checkedNodes.length) {
- // for (const node of checkedNodes) {
- // if (node.childs && node.childs.length) {
- // for (const child of node.childs) {
- // checkIds.push(child.id)
- // }
- // }
- // }
- // }else{
- // windList.value = []
- // }
- // excelCheckIds.value = checkIds
- // funSubmit()
- };
- /**search 开始 */
- const funSubmit = async () => {
- // if (!excelCheckIds.value.length) {
- // ElMessage.error('请勾选要执行的项')
- // return false
- // }
- const params = {
- ids: excelCheckIds.value.join(","),
- };
- const res = await httpRequest.get("/base/location", {
- params: params,
- });
- let windList = [];
- res.data.forEach((ele) => {
- if (ele.longitude && ele.latitude) {
- windList.push(ele);
- }
- });
- windList.value = windList;
- };
- /**posChart */
- const windList = ref([]);
- const funRightClick = ({
- menuIndex,
- current
- }) => {
- switch (menuIndex) {
- case 0:
- funCombineGet(current);
- break;
- case 1:
- funRateSubmit(current);
- queryForm.checkIds = windList.value.map((o) => o.processId);
- break;
- case 2:
- funLineSubmit(current);
- break;
- case 3:
- funHotSubmit(current);
- break;
- case 4:
- funSsSubmit(current);
- break;
- case 5:
- funJjjSubmit(current);
- break;
- }
- };
- const lineDialog = ref(false);
- const qxLineChartTitle = ref("");
- const qxLineChart = reactive({
- xAxisData: [],
- seriesData: [],
- dataSet: "",
- isChartArea: false,
- });
- const funLineSubmit = async (current) => {
- const params = {
- // ids: current.processId,
- ids: current.fittingId,
- };
- const res = await httpRequest.get("/power/fitting/line", {
- params: params,
- });
- if (res.code === 200) {
- qxLineChart.seriesData = [];
- if (res.data.bzgl) {
- qxLineChart.seriesData.push({
- name: "保证功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: res.data.bzgl || [],
- xAxisIndex: 0,
- });
- }
- if (res.data.sjgl) {
- res.data.sjgl.forEach((ele) => {
- qxLineChart.seriesData.push({
- name: "实际功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: ele.sjgl || [],
- xAxisIndex: 0,
- });
- });
- }
- qxLineChartTitle.value = current.name;
- lineDialog.value = true;
- }
- };
- const hotDialog = ref(false);
- const hotChart = reactive({
- xAxisData: [],
- seriesData: [],
- dataSet: "",
- isChartArea: false,
- maxMinData: [],
- });
- const funHotSubmit = async (obj) => {
- let chartRes = {
- scatterhs: [
- []
- ],
- scatterls: [
- []
- ],
- sjgl: [
- []
- ],
- llgl: [
- []
- ],
- cpz: [
- []
- ],
- };
- let chartResponse = null;
- chartResponse = await httpRequest.get("/temperature/curve/analysis", {
- params: {
- id: obj.fittingId,
- p: 1,
- },
- });
- if (chartResponse && chartResponse.code === 200) {
- chartRes = chartResponse.data;
- hotChart.maxMinData = [chartRes.maxhjwd, chartRes.minhjwd];
- avgObj.title = chartRes.obj.path
- .substring(
- chartRes.obj.path.indexOf(chartRes.obj.station + "_") +
- (chartRes.obj.station + "_").length
- )
- .split("_")[0];
- avgObj.cpavg = Number(chartRes.obj.cpavg).toFixed(2);
- avgObj.frequency = Number(chartRes.obj.frequency).toFixed(2);
- avgObj.pcratio = Number(chartRes.obj.pcratio).toFixed(2);
- const color = [
- "#1C99FF",
- "#FF8700",
- "#3D54BE",
- "#fa8c16",
- "#1DA0D7",
- "#DD5044",
- ];
- hotChart.seriesData = [{
- name: "拟合功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: chartRes.sjgl,
- xAxisIndex: 0,
- },
- {
- name: "保证功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: chartRes.llgl,
- xAxisIndex: 0,
- },
- {
- type: "effectScatter",
- showEffectOn: "emphasis",
- rippleEffect: {
- scale: 1,
- },
- name: "数据散点",
- symbolSize: 5,
- // symbolSize: (data) => {
- // return data.s ? data.s > 10 ? 10 : data.s : 4
- // },
- // datasetIndex: 1,
- // encode: {
- // x: 'x',
- // y: 'y'
- // },
- data: chartRes.scatter,
- xAxisIndex: 0,
- yAxisIndex: 0,
- },
- ];
- hotDialog.value = true;
- }
- };
- const ssDialog = ref(false);
- const ssChart = reactive({
- bardata: [],
- lineData: [],
- color: [
- "#4b55ae",
- "#e17e23",
- "#ba3237",
- "#c531c7",
- "rgb(63,177,227)",
- "#05bb4c",
- ],
- });
- const funSsSubmit = async (obj) => {
- ssChart.barData = {
- area: [],
- legend: [],
- data: [],
- };
- ssChart.lineData = [];
- const res = await httpRequest.get("/fjjxb/five/loss/cal", {
- params: {
- ids: obj.fittingId,
- },
- });
- const name = [],
- data = [],
- llfdl = [],
- legend = [{
- name: "实际电量",
- icon: "rect",
- },
- {
- name: "计划检修损失",
- icon: "rect",
- },
- {
- name: "非计划检修损失",
- icon: "rect",
- },
- {
- name: "限电损失",
- icon: "rect",
- },
- {
- name: "受累损失",
- icon: "rect",
- },
- {
- name: "性能损失",
- icon: "rect",
- },
- {
- name: "理论发电量",
- icon: "circle",
- },
- ],
- data2 = []; //项目列表
- res.data.data.forEach((item, index) => {
- name.push(item.name);
- data.push([item.sjfdl, item.jhjx, item.fjhjx, item.xd, item.sl, item.xn]);
- llfdl.push(item.llfdl);
- data2.push({
- index: index + 1,
- name: item.name,
- llfdl: item.llfdl,
- sjfdl: item.sjfdl,
- speed: item.speed,
- fjhjx: item.fjhjx,
- jhjx: item.jhjx,
- sl: item.sl,
- xd: item.xd,
- xn: item.xn,
- fnlly: item.fnlly,
- is_light: false,
- });
- });
- if (data.length > 0) {
- let arr1 = [];
- const length = data[0].length;
- for (var i = 0; i < length; i++) {
- let arr2 = [];
- data.forEach((ele) => {
- arr2.push(ele[i]);
- });
- arr1.push(arr2);
- }
- ssChart.lineData = llfdl;
- ssChart.barData = {
- area: name,
- legend: legend,
- data: arr1,
- };
- }
- ssDialog.value = true;
- };
- const jjjDialog = ref(false);
- const jjjActiveTab = ref("1");
- const jjjChart = reactive({
- tableData: [],
- tableColumn: [],
- tableName: "",
- xAxisData: [],
- seriesData: [],
- seriesAllData: [],
- linexAxis: [],
- lineyAxis: [],
- lineSeries: [],
- dataSet: [],
- });
- const funJjjSubmit = async (obj) => {
- const res = await httpRequest.get("/blade/angle", {
- params: {
- ids: obj.fittingId,
- },
- });
- let exTime = [];
- let yp1 = [],
- yp2 = [],
- yp3 = [],
- speed = [];
- res.data.bw.forEach((it) => {
- exTime.push(it.time);
- yp1.push(it.yp1);
- yp2.push(it.yp2);
- yp3.push(it.yp3);
- speed.push(it.speed);
- });
- jjjChart.tableData = res.data.bw;
- jjjChart.seriesAllData = res.data.bw;
- jjjChart.xAxisData = exTime;
- jjjChart.seriesData = [{
- name: "叶片1",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: yp1,
- xAxisIndex: 0,
- },
- {
- name: "叶片2",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: yp2,
- xAxisIndex: 0,
- },
- {
- name: "叶片3",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: yp3,
- xAxisIndex: 0,
- },
- {
- name: "风速",
- type: "line",
- yAxisIndex: 1,
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: false, //这个是把线变成曲线
- data: speed,
- xAxisIndex: 0,
- },
- ];
- jjjDialog.value = true;
- };
- /**combine-chart */
- const combineDialog = ref(false);
- const avgObj = reactive({
- //平均cpz等
- title: "",
- cpavg: "",
- frequency: "",
- pcratio: "",
- });
- const markDot = reactive({
- //3-5 point点等
- pcl5: null,
- pcl10: null,
- pcl12: null,
- pcl25: null,
- });
- const combine = reactive({
- xAxisData: [],
- seriesData: [],
- dataSet: "",
- isChartArea: false,
- });
- const wtDialog = ref(false);
- const wtData = ref([]);
- const wtTab = ref("table");
- const funCombineChartSelect = async (batch) => {
- const wDataArr = [];
- const yDataArr = [];
- let scatterls = [];
- let scatterhs = [];
- let dataSetObj = [];
- wtData.value = [];
- if (batch.length && combine.dataSet) {
- scatterls = batch[0].selected[2].dataIndex;
- scatterhs = batch[0].selected[3].dataIndex;
- if (scatterls.length || scatterhs.length) {
- dataSetObj = JSON.parse(combine.dataSet);
- if (scatterls.length) {
- for (const scatterIndex of scatterls) {
- wDataArr.push(dataSetObj[0].source[scatterIndex].k);
- }
- }
- if (scatterhs.length) {
- for (const scatterIndex of scatterhs) {
- yDataArr.push(dataSetObj[1].source[scatterIndex].k);
- }
- }
- const wtRes = await httpRequest.get("/power/fitting/filter", {
- params: {
- yk: yDataArr.join(","),
- wk: wDataArr.join(","),
- },
- });
- if (wtRes.code === 200) {
- let id = 1;
- const tempArr = []; //用于以风机id 聚合dataArr
- if (wtRes.data.length) {
- for (const data of wtRes.data) {
- if (tempArr.length) {
- const findIndex = tempArr.findIndex((o) => o.wtId === data.wtId);
- if (findIndex !== -1) {
- if (!tempArr[findIndex].children) {
- tempArr[findIndex].children = [];
- }
- tempArr[findIndex].children.push({
- ...data,
- id: id,
- filter: data.filter === 0 ? "是" : "否",
- });
- id++;
- } else {
- tempArr.push({
- ...data,
- id: id,
- filter: data.filter === 0 ? "是" : "否",
- });
- id++;
- }
- } else {
- tempArr.push({
- ...data,
- id: id,
- filter: data.filter === 0 ? "是" : "否",
- });
- id++;
- }
- }
- wtDialog.value = true;
- nextTick(() => {
- wtTab.value = "table";
- wtData.value = tempArr;
- });
- }
- }
- }
- }
- };
- const funCombineGet = async (obj) => {
- //点击excel项时
- combine.isChartArea = false;
- let res = null;
- let chartRes = {
- scatterhs: [
- []
- ],
- scatterls: [
- []
- ],
- sjgl: [
- []
- ],
- llgl: [
- []
- ],
- cpz: [
- []
- ],
- };
- const chartResponse = await httpRequest.get("/power/fitting/curve", {
- params: {
- id: obj.fittingId,
- p: 1,
- },
- });
- if (chartResponse && chartResponse.code === 200) {
- nextTick(() => {
- chartRes = chartResponse.data;
- markDot.pcl5 = chartRes.obj.pc5ratio;
- markDot.pcl10 = chartRes.obj.pc10ratio;
- markDot.pcl12 = chartRes.obj.pc12ratio;
- markDot.pcl25 = chartRes.obj.pc25ratio;
- avgObj.title = chartRes.obj.path
- .substring(
- chartRes.obj.path.indexOf(chartRes.obj.station + "_") +
- (chartRes.obj.station + "_").length
- )
- .split("_")[0];
- avgObj.cpavg = Number(chartRes.obj.cpavg).toFixed(2);
- avgObj.frequency = Number(chartRes.obj.frequency).toFixed(2);
- avgObj.pcratio = Number(chartRes.obj.pcratio).toFixed(2);
- combine.dataSet = JSON.stringify([{
- source: chartRes.wyd,
- // source: chartRes.scatterls
- },
- {
- source: chartRes.yyd,
- // source: chartRes.scatterhs
- },
- ]);
- const color = [
- "#1C99FF",
- "#FF8700",
- "#3D54BE",
- "#fa8c16",
- "#1DA0D7",
- "#DD5044",
- ];
- combine.seriesData = [{
- name: "拟合功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: chartRes.sjgl,
- xAxisIndex: 0,
- },
- {
- name: "保证功率",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: chartRes.llgl,
- xAxisIndex: 0,
- },
- {
- type: "effectScatter",
- showEffectOn: "emphasis",
- rippleEffect: {
- scale: 1,
- },
- name: "无用点",
- symbolSize: (data) => {
- return data.s ? (data.s > 10 ? 10 : data.s) : 4;
- },
- datasetIndex: 0,
- encode: {
- x: "x",
- y: "y",
- },
- xAxisIndex: 0,
- yAxisIndex: 0,
- },
- {
- type: "effectScatter",
- showEffectOn: "emphasis",
- rippleEffect: {
- scale: 1,
- },
- name: "有用点",
- symbolSize: (data) => {
- return data.s ? (data.s > 10 ? 10 : data.s) : 4;
- },
- datasetIndex: 1,
- encode: {
- x: "x",
- y: "y",
- },
- xAxisIndex: 0,
- yAxisIndex: 0,
- },
- {
- name: "Cp值",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: chartRes.cpz,
- xAxisIndex: 0,
- yAxisIndex: 1,
- },
- ];
- });
- }
- };
- /**rateAnalysis chart */
- const funText = (index) => {
- let str = "";
- switch (index) {
- case 0:
- str = "0-2.5";
- break;
- case 1:
- str = "2.5-5";
- break;
- case 2:
- str = "5-7.5";
- break;
- case 3:
- str = "7.5-10";
- break;
- case 4:
- str = "10-12.5";
- break;
- case 5:
- str = "12.5-15";
- break;
- case 6:
- str = "15-17.5";
- break;
- case 7:
- str = "17.5-20";
- break;
- case 8:
- str = "20-22.5";
- break;
- case 9:
- str = "22.5-25";
- break;
- case 10:
- str = "25-inf";
- break;
- }
- return str;
- };
- const scatterxData = ref([{
- type: "category",
- name: "度",
- data: new Array(61).fill(-30).map((o, index) => Number(o + index)),
- boundaryGap: false,
- splitLine: {
- show: true,
- },
- axisLine: {
- show: true,
- },
- }, ]);
- const scatteryData = ref([{
- type: "category",
- data: [5, 6, 7, 8, 9, 10],
- axisLine: {
- show: false,
- },
- name: "m/s",
- splitLine: {
- show: false,
- },
- }, ]);
- const scatterSeries = ref([{
- name: "对风偏航",
- type: "scatter",
- symbolSize: function (val) {
- return val[2];
- },
- data: [],
- markLine: {
- symbol: "none",
- label: {
- show: false,
- },
- lineStyle: {
- color: "#F72C5B",
- width: "3",
- },
- data: [{
- // yAxis: powerproductionNum.value,
- }, ],
- },
- animationDelay: function (idx) {
- return idx * 5;
- },
- }, ]);
- const chartData = ref([]); //roses的chartList
- let chartId = 1;
- /**submit */
- const funRateSubmit = async (obj) => {
- const rosesRes = await httpRequest.get("/wind/roses", {
- params: {
- ids: obj.processId,
- mode: 0,
- },
- });
- const lineRes = await httpRequest.get("/wind/deviation/ratio", {
- params: {
- ids: obj.processId,
- mode: 0,
- },
- });
- if (rosesRes.code === 200) {
- if (rosesRes.data.length) {
- rateDialog.value = true;
- nextTick(() => {
- chartData.value = [];
- for (const chart of rosesRes.data) {
- chartData.value.push({
- id: chartId,
- title: "",
- subtext: "风速风向玫瑰图",
- xAxis: {
- type: "category",
- boundaryGap: false,
- data: [
- "N",
- "",
- "N-E",
- "",
- "E",
- "",
- "S-E",
- "",
- "S",
- "",
- "S-W",
- "",
- "W",
- "",
- "W-N",
- "",
- ],
- splitLine: {
- show: true,
- },
- },
- isRadar: false,
- series:
- // chart.roses.length ?
- // chart.roses.map((o, index) => {
- // return {
- // type: "bar",
- // data: o,
- // coordinateSystem: "polar",
- // name: funText(index),
- // stack: "a",
- // emphasis: {
- // focus: "series",
- // },
- // };
- // }) : [],
- {
- type: "bar",
- data: chart.roses,
- coordinateSystem: "polar",
- name: "方位风速",
- },
- });
- chartId++;
- chartData.value.push({
- id: chartId,
- title: "",
- subtext: "风速风向频次玫瑰图",
- isRadar: true,
- xAxis: {
- type: "category",
- boundaryGap: false,
- data: [
- "N",
- "",
- "N-E",
- "",
- "E",
- "",
- "S-E",
- "",
- "S",
- "",
- "S-W",
- "",
- "W",
- "",
- "W-N",
- "",
- ],
- splitLine: {
- show: true,
- },
- },
- series: chart.count.length ? [
- ...chart.count.map((o, index) => {
- return {
- type: "bar",
- data: o,
- coordinateSystem: "polar",
- name: funText(index),
- stack: "a",
- emphasis: {
- focus: "series",
- },
- };
- }),
- {
- type: "radar",
- // coordinateSystem: 'polar',
- tooltip: {
- trigger: "item",
- },
- // smooth: true,
- // areaStyle: {},
- name: "对风",
- data: [{
- value: chart.radar,
- }, ],
- },
- ] : [],
- });
- chartId++;
- scatterSeries.value[0].data = chart.frequency.data.length ?
- chart.frequency.data.map((item) => {
- return [item[1] + "", item[0] + "", (item[2] * 15).toFixed(1)];
- }) : [];
- scatterSeries.value[0].markLine.data = [{
- xAxis: `${chart.frequency.avg}`,
- name: `平均偏航:${chart.frequency.avg}度`,
- }, ];
- }
- });
- }
- }
- if (lineRes.code === 200) {
- if (lineRes.data.length) {
- lineDataSet.value[0].source = lineRes.data[0].scatter.map((o) => {
- return [o.x + "", o.y];
- });
- lineSeries.value = [{
- name: "对风频次",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: lineRes.data[0].count,
- yAxisIndex: 1,
- },
- {
- type: "effectScatter",
- showEffectOn: "emphasis",
- rippleEffect: {
- scale: 1,
- },
- legendHoverLink: false,
- name: "数据散点",
- symbolSize: 5,
- datasetIndex: 0,
- encode: {
- x: "x",
- y: "y",
- },
- yAxisIndex: 0,
- },
- ];
- }
- }
- };
- /**lineChart */
- const linexAxis = ref({
- type: "category",
- data: new Array(101)
- .fill(-50)
- .map((o, index) => Number((o + index).toFixed(1))),
- splitLine: {
- show: false,
- },
- axisTick: {
- show: true,
- },
- });
- const lineyAxis = ref([{
- type: "value",
- name: "m/s",
- splitLine: {
- show: false,
- },
- axisTick: {
- show: true,
- },
- },
- {
- type: "value",
- name: "频次",
- splitLine: {
- show: false,
- },
- axisTick: {
- show: true,
- },
- },
- ]);
- const lineSeries = ref([]);
- const lineDataSet = ref([{
- source: [],
- }, ]);
- /** rate dialog */
- const rateDialog = ref(false);
- const dbRateDialog = ref(false);
- const actChartName = ref("");
- const actDiaTitle = ref("");
- const diaPanelRef = ref();
- const exportLoading = ref(false);
- const actCopList = ref([
- // {
- // xAxis: [],
- // subtext: '',
- // title: '',
- // isRadar: false,
- // series: [],
- // yAxis: [],
- // dataset: []
- // }
- ]);
- // 作为actCopList的备份 在actCopList赋值多个时 同时赋值, 在dialog弹出时清空. 作用: 在actCopList变化时, 重新赋值原始数据
- const actCopListBak = ref([]);
- const checkAll = ref(true);
- const checkAllWind = ref(true);
- const queryForm = reactive({
- checkIds: [],
- });
- const funCheckwindsAll = () => {
- checkAllWind.value = !checkAllWind.value;
- if (checkAllWind.value) {
- state.windSObj = windSList.value.map((o) => o.id);
- } else {
- state.windSObj = [];
- }
- };
- const funCheckAll = () => {
- checkAll.value = !checkAll.value;
- if (checkAll.value) {
- queryForm.checkIds = windList.value.map((o) => o.processId);
- } else {
- queryForm.checkIds = [];
- }
- };
- const funActCop = (obj, type) => {
- switch (type) {
- case "chartCop1":
- actChartName.value = "chartCop1";
- obj.actCop = shallowRef(chartCop);
- actDiaTitle.value = "风速风向玫瑰图";
- break;
- case "chartCop2":
- actChartName.value = "chartCop2";
- obj.actCop = shallowRef(chartCop);
- actDiaTitle.value = "风速风向频次玫瑰图";
- break;
- case "lineChartCop":
- actChartName.value = "lineChartCop";
- obj.actCop = shallowRef(lineChartCop);
- actDiaTitle.value = "对风偏差分析图";
- break;
- case "scatterSingleChartCop":
- actChartName.value = "scatterSingleChartCop";
- obj.actCop = shallowRef(scatterSingleChartCop);
- actDiaTitle.value = "静态偏航对风分析图";
- break;
- }
- obj.isBrush = type === "lineChartCop" ? false : false;
- obj.id = chartId;
- chartId++;
- dbRateDialog.value = true;
- actCopListBak.value = [];
- nextTick(() => {
- actCopList.value = [obj];
- });
- };
- const funDiaSubmit = async () => {
- let url = "";
- switch (actChartName.value) {
- case "chartCop1":
- url = "/wind/roses";
- break;
- case "chartCop2":
- url = "/wind/roses";
- break;
- case "lineChartCop":
- url = "/wind/deviation/ratio";
- break;
- case "scatterSingleChartCop":
- url = "/wind/roses";
- break;
- }
- if (url) {
- const res = await httpRequest.get(url, {
- params: {
- ids: queryForm.checkIds.join(","),
- mode: 0,
- },
- });
- if (res.code === 200) {
- actCopList.value = [];
- actCopListBak.value = []; //清空备份
- if (res.data.length) {
- for (const chart of res.data) {
- if (actChartName.value === "chartCop1") {
- actCopList.value.push({
- id: chartId,
- isBrush: false,
- actCop: shallowRef(chartCop),
- title: chart.wt,
- subtext: "风速风向玫瑰图",
- xAxis: {
- type: "category",
- boundaryGap: false,
- data: [
- "N",
- "",
- "N-E",
- "",
- "E",
- "",
- "S-E",
- "",
- "S",
- "",
- "S-W",
- "",
- "W",
- "",
- "W-N",
- "",
- ],
- splitLine: {
- show: true,
- },
- },
- isRadar: false,
- series:
- // chart.roses.length ?
- // chart.roses.map((o, index) => {
- // return {
- // type: "bar",
- // data: o,
- // coordinateSystem: "polar",
- // name: funText(index),
- // stack: "a",
- // emphasis: {
- // focus: "series",
- // },
- // };
- // }) : [],
- {
- type: "bar",
- data: chart.roses,
- coordinateSystem: "polar",
- name: "方位风速",
- },
- });
- chartId++;
- }
- if (actChartName.value === "chartCop2") {
- actCopList.value.push({
- id: chartId,
- isBrush: false,
- actCop: shallowRef(chartCop),
- title: chart.wt,
- subtext: "风速风向频次玫瑰图",
- xAxis: {
- type: "category",
- boundaryGap: false,
- data: [
- "N",
- "",
- "N-E",
- "",
- "E",
- "",
- "S-E",
- "",
- "S",
- "",
- "S-W",
- "",
- "W",
- "",
- "W-N",
- "",
- ],
- splitLine: {
- show: true,
- },
- },
- isRadar: true,
- series: chart.count.length ? [
- ...chart.count.map((o, index) => {
- return {
- type: "bar",
- data: o,
- coordinateSystem: "polar",
- name: funText(index),
- stack: "a",
- emphasis: {
- focus: "series",
- },
- };
- }),
- {
- type: "radar",
- // coordinateSystem: 'polar',
- tooltip: {
- trigger: "item",
- },
- // smooth: true,
- // areaStyle: {},
- name: "对风",
- data: [{
- value: chart.radar,
- }, ],
- },
- ] : [],
- });
- chartId++;
- }
- if (actChartName.value === "lineChartCop") {
- actCopList.value.push({
- id: chartId,
- isBrush: false,
- actCop: shallowRef(lineChartCop),
- title: chart.wtId,
- subtext: "对风偏差分析图",
- xAxis: linexAxis.value,
- yAxis: lineyAxis.value,
- dataset: [{
- source: chart.scatter.map((o) => {
- return [o.x + "", o.y];
- }),
- }, ],
- isRadar: false,
- series: [{
- name: "对风频次",
- type: "line",
- symbol: "line", //设定为实心点
- symbolSize: 0, //设定实心点的大小
- smooth: true, //这个是把线变成曲线
- data: chart.count,
- yAxisIndex: 1,
- },
- {
- type: "effectScatter",
- showEffectOn: "emphasis",
- rippleEffect: {
- scale: 1,
- },
- legendHoverLink: false,
- name: "数据散点",
- symbolSize: 5,
- datasetIndex: 0,
- encode: {
- x: "x",
- y: "y",
- },
- yAxisIndex: 0,
- },
- ],
- });
- chartId++;
- }
- if (actChartName.value === "scatterSingleChartCop") {
- actCopList.value.push({
- id: chartId,
- isBrush: false,
- actCop: shallowRef(scatterSingleChartCop),
- title: chart.wt,
- subtext: "静态偏航对风分析图",
- xAxis: scatterxData.value,
- yAxis: scatteryData.value,
- isRadar: false,
- series: [{
- name: "对风偏航",
- type: "scatter",
- symbolSize: function (val) {
- return val[2];
- },
- markLine: {
- symbol: "none",
- label: {
- show: false,
- },
- lineStyle: {
- color: "#F72C5B",
- width: "3",
- },
- data: [{
- name: `平均偏航:${chart.frequency.avg}度`,
- xAxis: `${chart.frequency.avg}`,
- }, ],
- },
- data: chart.frequency.data.length ?
- chart.frequency.data.map((item) => {
- return [
- item[1] + "",
- item[0] + "",
- (item[2] * 15).toFixed(1),
- ];
- }) : [],
- animationDelay: function (idx) {
- return idx * 5;
- },
- }, ],
- });
- chartId++;
- }
- }
- actCopListBak.value = actCopList.value;
- }
- }
- }
- };
- const funDiaExport = () => {
- exportLoading.value = true;
- tools.scrollToPDF(diaPanelRef.value, actDiaTitle.value, () => {
- exportLoading.value = false;
- });
- };
- const funDbClick = (obj) => {
- if (actCopListBak.value.length > 1) {
- //判断大于1时, 才有双击放大功能
- if (actCopList.value.length === 1) {
- actCopList.value = actCopListBak.value;
- } else {
- actCopList.value = [obj];
- }
- }
- };
- const theme = ref(null);
- const echartsTheme = ref("");
- watch(
- () => store.state.theme,
- (newVal, oldVal) => {
- theme.value = newVal;
- echartsTheme.value = !newVal ? "dark" : "";
- // funGetTree();
- getStation()
- }, {
- deep: true,
- }
- );
- const getOnline = () => {
- axios({
- method: "get",
- baseURL: "ping",
- url: "",
- })
- .then((res) => {
- showOnlineMap.value = true;
- })
- .catch((e) => {
- showOnlineMap.value = false;
- });
- };
- const initPageData = () => {
- actTreeNode.value = null;
- treeData.value = funRepeatMap(JSON.parse(JSON.stringify(jsonData.treeData)));
- excelList.value = [];
- if (actTreeNode.value) {
- if (actTreeNode.value.childs) {
- excelList.value = actTreeNode.value.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,
- isCheck: false,
- name: o.path.substring(
- o.path.indexOf(o.station + "_") + (o.station + "_").length
- ),
- };
- });
- } else {
- excelList.value = [];
- }
- if (treeCopRef.value) {
- treeCopRef.value.$refs.tree.setCheckedKeys([actTreeNode.value.id]);
- excelCheckIds.value = actTreeNode.value.childs.map((o) => o.id);
- let windList = [];
- jsonData.locationData.forEach((ele) => {
- if (ele.longitude && ele.latitude) {
- windList.push(ele);
- }
- });
- windList.value = windList;
- }
- }
- };
- /**mounted */
- onMounted(() => {
- // initPageData();
- // funGetTree();
- getStation()
- theme.value = store.state.theme;
- echartsTheme.value = !theme.value ? "dark" : "";
- tableHeight.value = window.innerHeight - 40 + "px";
- excelHeight.value = window.innerHeight - 0 + "px";
- treeHeight.value = window.innerHeight - 0 + "px";
- window.addEventListener("resize", () => {
- tableHeight.value = window.innerHeight - 40 + "px";
- excelHeight.value = window.innerHeight - 0 + "px";
- treeHeight.value = window.innerHeight - 0 + "px";
- });
- });
- const funMapDone = (mapStatus) => {
- if (mapStatus) {
- funGetTree();
- }
- };
- </script>
- <style lang="less" scoped>
- .dataAnalysisPosAnal {
- height: 100%;
- .dataAnalysisPosAnalMain {
- display: flex;
- flex-direction: row;
- align-items: center;
- margin-top: 10px;
- margin-bottom: 10px;
- .station {
- display: flex;
- flex-direction: row;
- align-items: center;
- white-space: nowrap;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #b3b3b3;
- margin-right: 10px;
- }
- .search-input {
- margin-left: 10px;
- }
- .but {
- display: flex;
- flex-direction: row;
- align-content: center;
- margin-left: 20px;
- }
- .buttons {
- background-color: rgba(5, 187, 76, 0.2);
- border: 1px solid #3b6c53;
- color: #b3b3b3;
- font-size: 14px;
- &:hover {
- background-color: rgba(5, 187, 76, 0.5);
- color: #ffffff;
- }
- }
- .main_top {
- height: 40px;
- display: flex;
- align-items: center;
- .topPsty {
- position: relative;
- top: 5px;
- padding: 7px 20px;
- font-size: 12px;
- font-weight: 600;
- margin-left: 10px;
- border-radius: 3px;
- }
- }
- }
- .main {
- display: flex;
- width: 100%;
- .treeDataMain,
- .excelDataMain,
- .tableDataMain {
- border-radius: 10px;
- }
- .treeDataMain {
- margin-right: 10px;
- padding: 10px 0 10px 10px;
- width: calc(19% - 20px);
- }
- .excelDataMain {
- margin-right: 10px;
- padding: 10px 0 10px 10px;
- width: calc(15% - 20px);
- .excelDataMain_top {
- height: 49%;
- padding: 5px 0;
- }
- .excelDataMain_bot {
- padding: 5px 0;
- }
- }
- .tableDataMain {
- padding: 10px;
- width: calc(100% - 20px);
- position: relative;
- .butten_com {
- position: absolute;
- right: 20px;
- z-index: 111111;
- }
- }
- }
- }
- .rightMenuDialog {
- .el-overlay-dialog {
- overflow: hidden;
- }
- }
- .themeDark {
- .dataAnalysisPosAnalMain {
- .main_top {
- .topPsty {
- color: #1c99ff;
- background: #1e2126;
- }
- }
- }
- .main {
- background: #13171e;
- .treeDataMain {
- background: transparent;
- }
- .excelDataMain {
- background: #313233;
- }
- .tableDataMain {
- margin-top: 5px;
- background: #212223;
- }
- }
- }
- .themeLight {
- padding: 0;
- .dataAnalysisPosAnalMain {
- .main_top {
- .topPsty {
- color: #2778ff;
- background: #ffffff;
- }
- }
- }
- .main {
- background: #e6e8f2;
- .treeDataMain {
- background: transparent;
- }
- .excelDataMain {
- background: #f4f6fb;
- }
- .tableDataMain {
- background: #fff;
- margin-top: 5px;
- }
- }
- }
- </style>
|