From 8e5cbdc7562b1d75d900b63d53ae1a9006b07577 Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期一, 08 七月 2024 13:43:36 +0800 Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/IStation/shys/Web.Ch.V1.0 --- customer_list/ch/static/config/route.js | 9 src/api/dispatch/dispatch.ts | 20 src/views/project/ch/efficiencyAnalysis/curveAnalysis/RunPointAnalysis.vue | 961 -------------------------- src/projectCom/curve/runPoint/RunPointAnalysisCom.vue | 904 +++++++++++++++++++++++++ customer_list/ch/static/config/globalConfig.js | 2 src/views/project/ch/efficiencyAnalysis/scheduling/SchedulingAnalysis.vue | 200 +++++ 6 files changed, 1,158 insertions(+), 938 deletions(-) diff --git a/customer_list/ch/static/config/globalConfig.js b/customer_list/ch/static/config/globalConfig.js index 21a4027..5db7bad 100644 --- a/customer_list/ch/static/config/globalConfig.js +++ b/customer_list/ch/static/config/globalConfig.js @@ -7,7 +7,7 @@ ICPLicense: '娌狪CP澶�14049296鍙�-2', WebApiUrl: { - MainUrl: 'http://101.133.133.173:97', + MainUrl: 'http://101.133.133.173:9010', AuthUrl: 'http://47.100.245.85:8190/', }, SoftWareInfo: { diff --git a/customer_list/ch/static/config/route.js b/customer_list/ch/static/config/route.js index b18239b..6f24694 100644 --- a/customer_list/ch/static/config/route.js +++ b/customer_list/ch/static/config/route.js @@ -8,6 +8,15 @@ component: '/project/ch/efficiencyAnalysis/curveAnalysis/RunPointAnalysis.vue', redirect: null, }, + //璋冨害鍒嗘瀽 + { + name: 'SchedulingAnalysis', + isKeepAlive: true, + isAffix: false, + path: '/efficiencyAnalysis/schedulingAnalysis', + component: '/project/ch/efficiencyAnalysis/scheduling/SchedulingAnalysis.vue', + redirect: null, + }, { name: 'UserManage', isKeepAlive: true, isAffix: false, path: '/auth/userManage', component: '/auth/userManage/UserManage.vue' }, { name: 'AccessLog', isKeepAlive: true, isAffix: false, path: '/auth/accessLog', component: '/auth/accessLog/AccessLog.vue' }, { diff --git a/src/api/dispatch/dispatch.ts b/src/api/dispatch/dispatch.ts new file mode 100644 index 0000000..060e875 --- /dev/null +++ b/src/api/dispatch/dispatch.ts @@ -0,0 +1,20 @@ +import request from '/@/utils/request'; +/** + * @summary 鑾峰彇宸︿晶娉电珯鏍� + */ +export const GetStationList = async () => { + return request({ + url: '/ChenHang/Dispatch/GetStationList@V1.0', + method: 'GET', + }); +}; +/** + * @summary 璁$畻 + */ +export const CalculateScheduling = (data) => { + return request({ + url: '/ChenHang/Dispatch/Calculate@V1.0', + method: 'post', + data, + }); +}; \ No newline at end of file diff --git a/src/projectCom/curve/runPoint/RunPointAnalysisCom.vue b/src/projectCom/curve/runPoint/RunPointAnalysisCom.vue new file mode 100644 index 0000000..49ef813 --- /dev/null +++ b/src/projectCom/curve/runPoint/RunPointAnalysisCom.vue @@ -0,0 +1,904 @@ +<template> + <el-card class="flex-auto scroll-table-card" shadow="hover"> + <el-tabs v-model="state.activeName" class="w100 h100"> + <el-tab-pane label="鐑姏鍥�" name="heatMapPage" class="w100 h100"> + <div class="box_right_title form_m1"> + <span class="mr15">杩愯鍒嗘瀽</span> + <el-form ref="queryQHFormRef" :inline="true" :model="state.queryQHForm"> + <el-form-item label="鏃ユ湡"> + <el-date-picker + v-model="state.queryQHForm.themetime" + range-separator="~" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + :disabled-date="disablesDate" + type="daterange" + :default-time="defaultTime" + clearable + value-format="YYYY-MM-DD" + @change="getDateTime" + size="small" + /> + </el-form-item> + <el-form-item> + <el-button class="ml10" @click="timeQuery()" size="small" type="primary">鏌ヨ</el-button> + </el-form-item> + </el-form> + </div> + <div class="setQHForm"> + <el-form ref="queryQHFormRef" :inline="true" :model="state.queryQHForm" :rules="queryQHRules"> + <el-form-item label="娴侀噺闂撮殧鍊�" prop="Qspace"> + <el-input-number + v-model="state.queryQHForm.Qspace" + placeholder="娴侀噺闂撮殧鍊�" + autocomplete="off" + :controls="false" + style="width: 100px" + :min="1" + @input="flowIntervalValue" + ></el-input-number> + </el-form-item> + <el-form-item label="鎵▼闂撮殧鍊�" prop="Hspace"> + <el-input-number + v-model="state.queryQHForm.Hspace" + placeholder="鎵▼闂撮殧鍊�" + :controls="false" + style="width: 100px" + autocomplete="off" + @input="headIntervalValue" + ></el-input-number> + </el-form-item> + </el-form> + + <el-form :model="state.QHForm" :inline="true"> + <el-form-item label="鏄剧ず鍊�" label-width="65px"> + <el-switch v-model="state.QHForm.showValue" @change="isShowQHValue" /> + </el-form-item> + <!-- @change="isShowTOrP" --> + <el-form-item label="鏃堕棿鎴栧姛鐜�" label-width="95px"> + <el-switch v-model="state.QHForm.tOrP" @change="tOrPChange" /> + </el-form-item> + </el-form> + </div> + <div style="display: flex; height: calc(100% - 120px)"> + <div id="chartHeatmapBox" class="chart" style="width: calc(100% - 0px); height: calc(100% - 0px)"></div> + </div> + </el-tab-pane> + <el-tab-pane label="绮剧‘鏌ヨ" name="cacurateQueryPage"> + <el-row :gutter="8" class="h100"> + <el-col :span="20" :xs="24" class="flex-column h100"> + <div> + <div class="box_right_title form_m1"> + <span class="mr15">杩愯鍒嗘瀽</span> + <el-form ref="queryQHFormRef" :inline="true" :model="state.queryQHForm"> + <el-form-item label="鏃ユ湡"> + <el-date-picker + v-model="state.queryQHForm.themetime" + range-separator="~" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + :disabled-date="disablesDate" + type="daterange" + :default-time="defaultTime" + clearable + value-format="YYYY-MM-DD" + @change="getDateTime" + size="small" + /> + </el-form-item> + </el-form> + </div> + <el-table + class="mt10" + ref="draggableTableRef" + border + row-key="ID" + :cell-style="{ textAlign: 'center' }" + :header-cell-style="{ textAlign: 'center' }" + :data="state.displayTableData" + style="width: 100%" + highlight-current-row + height="670" + > + <el-table-column type="index" label="搴忓彿" fixed="left" show-overflow-tooltip width="150" /> + <el-table-column prop="Name" label="娉电粍鍚�" show-overflow-tooltip width="150"> </el-table-column> + <el-table-column prop="Qavg" label="娴侀噺" show-overflow-tooltip width="150" /> + <el-table-column prop="Havg" width="150" label="鎵▼" show-overflow-tooltip /> + <el-table-column prop="Pavg" width="150" label="鍔熺巼(kW)" show-overflow-tooltip /> + <el-table-column label="杩愯鏃堕棿(h)" show-overflow-tooltip prop="Tsum" fixed="right"> </el-table-column> + </el-table> + </div> + </el-col> + <el-col :span="4" :xs="24" class="flex-column h100"> + <div class="box_right_title">鍒嗘瀽鍙傛暟</div> + <div class="mt10"> + <el-form label-width="45px" :model="state.analyzeForm" class="formLabel_size"> + <div class="flex flex-space-between"> + <el-form-item label="娴侀噺"> + <el-input v-model="state.analyzeForm.Q" @input="verifiyInstant($event, 1)" class="analyseInput_left" /> + </el-form-item> + <el-form-item label="鍋忓樊鍊�" label-width="56px"> + <el-input + v-model="state.analyzeForm.deviationQValue" + @input="verifiyInstant($event, 2)" + class="analyseInput_right" + /> + </el-form-item> + </div> + <div class="flex flex-space-between"> + <el-form-item label="鎵▼"> + <el-input v-model="state.analyzeForm.H" @input="verifiyInstant($event, 3)" class="analyseInput_left" /> + </el-form-item> + <el-form-item label="鍋忓樊鍊�" label-width="56px"> + <el-input + v-model="state.analyzeForm.deviationHValue" + @input="verifiyInstant($event, 4)" + class="analyseInput_right" + /> + </el-form-item> + </div> + </el-form> + </div> + <div class="box_right_title mt10">鍋忓樊鑼冨洿</div> + <div class="mt10"> + <el-form label-width="45px" :model="state.deviationForm"> + <div class="flex flex-space-between"> + <el-form-item label="娴侀噺"> + <el-input v-model="state.deviationForm.QdStart" @input="verifiyInstant($event, 5)" class="deviationInput" /> + <span style="color: #ccc; padding: 0px 4px"> 锝� </span> + <el-input v-model="state.deviationForm.QdEnd" @input="verifiyInstant($event, 6)" class="deviationInput" /> + </el-form-item> + </div> + <div class="flex flex-space-between mt10"> + <el-form-item label="鎵▼"> + <el-input v-model="state.deviationForm.HdStart" @input="verifiyInstant($event, 7)" class="deviationInput" /> + <span style="color: #ccc; padding: 0px 4px"> 锝� </span> + <el-input v-model="state.deviationForm.HdEnd" @input="verifiyInstant($event, 8)" class="deviationInput" /> + </el-form-item> + </div> + <el-form-item> + <el-button class="ml10 mt10" type="primary" @click="getTableDetail()">鏌ヨ</el-button> + </el-form-item> + </el-form> + </div> + </el-col> + </el-row> + </el-tab-pane> + </el-tabs> + </el-card> + <el-dialog + :destroy-on-close="true" + v-model="state.heatmapDetailShow" + width="700px" + :close-on-click-modal="false" + @closed="closeDialog" + :title="state.dialogTitle" + > + <div style="display: flex; height: 400px; width: 100%"> + <div id="chartPie" class="chart" style="width: calc(100% - 0px); height: calc(100% - 0px)"></div> + </div> + + <el-table + ref="draggableTableRef" + border + :cell-style="{ textAlign: 'center' }" + :header-cell-style="{ textAlign: 'center' }" + :data="state.pieData" + style="width: 100%" + highlight-current-row + > + <el-table-column type="index" label="搴忓彿" show-overflow-tooltip width="70" /> + <el-table-column prop="Name" label="娉电粍鍚�" show-overflow-tooltip width="130"> </el-table-column> + <el-table-column prop="Qavg" label="娴侀噺" show-overflow-tooltip width="110" /> + <el-table-column prop="Havg" width="90" label="鎵▼" show-overflow-tooltip /> + <el-table-column prop="Pavg" width="130" label="鍔熺巼(kW)" show-overflow-tooltip /> + <el-table-column label="杩愯鏃堕棿(h)" show-overflow-tooltip prop="Tsum"> </el-table-column> + </el-table> + </el-dialog> +</template> + +<script setup lang="ts"> +import * as echarts from 'echarts'; +import { ElMessage } from 'element-plus'; +import moment from 'moment'; +import type { FormRules } from 'vue'; +import { onActivated, onMounted, reactive, ref, shallowRef, toRefs } from 'vue'; +import { GetRectDetailListOfDayRange, GetRectListOfDayRange } from '/@/api/eta/runHeat'; +import { LOGIC_SITE_CODE } from '/@/constants'; +import { uniqueInArray } from '/@/utils/istation/common.js'; +import { verifyNumberComma } from '/@/utils/toolsValidate'; +const defaultTime = ref<[Date, Date]>([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]); +// 瀹氫箟鍙橀噺鍐呭 +const state = reactive({ + chartData: [], + echartTitle: '', + queryQHForm: { + Qspace: 100, + Hspace: 1, + themetime: '', + } as any, + QHForm: { + showValue: false, + tOrP: true, + }, + heatmapDetailShow: false, //鎵撳紑鐑姏鍥剧殑璇︾粏 锛堥粯璁ゅ叧闂級 + dialogTitle: '娉电粍鍚堜俊鎭�', //璇︾粏鐨勫悕瀛� + pieData: [], //楗煎浘鏁版嵁婧� + activeName: 'heatMapPage', //榛樿閫変腑鐑姏鍥� + displayTableData: [], //绮剧‘鏌ヨ鏁版嵁 + analyzeForm: { + deviationQValue: 50, + deviationHValue: 0.5, + } as any, //鍒嗘瀽鍙傛暟 + deviationForm: {} as any, //鍋忓樊鑼冨洿 + min: '', + max: '', + runTimeData: [], + minE: '', + maxE: '', + eData: [], +}); +const m_chartHeatmapBox = shallowRef(); +const m_chartPie = shallowRef(); +const queryQHFormRef = ref(); +//#region ====================== 鍥捐〃浼犲弬 ====================== +const props = defineProps({ + currentListID: String, + queryDisabled: { + type: Boolean, + default: false, + }, + pumpTitle: String, +}); +let { currentListID, queryDisabled, pumpTitle } = toRefs(props); +//#endregion +//#region ====================== 璁剧疆鏃堕棿浜嬩欢 ====================== +//榛樿鏃堕棿閫夋嫨鍓�7澶�/榛樿閫夋嫨褰撳ぉ +const getdatatime = () => { + let sevenAgo = moment(new Date()).subtract(7, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'); + let today = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss'); + return [sevenAgo, today]; +}; +//鑾峰彇鏃ユ湡鐨勬椂闂� +const getDateTime = (val) => { + if (val == null) { + return ElMessage.warning('璇烽�夋嫨鏃堕棿'); + } + state.queryQHForm.themetime[0] = val[0]; + state.queryQHForm.themetime[1] = val[1]; +}; +// 鏃堕棿闄愬埗 +const disablesDate = (time) => { + return time.getTime() > new Date().getTime(); +}; +//鏌ヨ鏃堕棿 +const timeQuery = async () => { + if (!queryQHFormRef.value) return; + await queryQHFormRef.value.validate(async (valid, fields) => { + if (valid) { + getChartList(); + } else { + return ElMessage.error('蹇呭~椤�!'); + } + }); +}; +//#endregion +//#region ====================== 琛ㄥ崟楠岃瘉 ====================== +const queryQHRules = reactive<FormRules>({ + Qspace: [{ required: true, message: '鍙兘杈撳叆鏁板瓧', trigger: 'blur' }], + Hspace: [{ required: true, message: '鍙兘杈撳叆鏁板瓧', trigger: 'blur' }], +}); +//#endregion +//#region ====================== 鍥捐〃 鎵▼/鏁堢巼/init====================== +//閫氳繃 鏃ユ湡鏇茬嚎鑾峰彇鐑姏鍥惧浘琛ㄦ暟鎹� +const getChartList = async () => { + await GetRectListOfDayRange({ + ObjectType: LOGIC_SITE_CODE, + ObjectID: currentListID.value, + Qspace: state.queryQHForm.Qspace, + Hspace: state.queryQHForm.Hspace, + StartDay: state.queryQHForm.themetime[0], + EndDay: state.queryQHForm.themetime[1], + }).then((res) => { + let result = res.Data; + if (res.Code != 0) { + state.chartData = []; + m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); + return; + } + if (res.Data == null || res.Data.length == 0) { + state.chartData = []; + m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); + return ElMessage.warning('鏆傛棤鏁版嵁'); + } + state.chartData = result || []; + + setTimeout(() => { + //鍒濆鍖栧浘琛� + BuildchartHeatmapBox(); + }, 100); + }); +}; +// 鍒濆鍖栨祦閲忔壃绋嬪浘琛� +const BuildchartHeatmapBox = () => { + m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); + if (state.chartData.length == 0) return; + //鍏堣幏鍙朌om涓婄殑瀹炰緥 + let chartDom = echarts.getInstanceByDom(document.getElementById('chartHeatmapBox') as HTMLDivElement); + //鐒跺悗鍒ゆ柇瀹炰緥鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪锛屽氨鍒涘缓鏂板疄渚� + if (chartDom == null) { + chartDom = echarts.init(document.getElementById('chartHeatmapBox') as HTMLDivElement); + } + m_chartHeatmapBox.value = chartDom; + var xData = []; + var yData = []; + var runTimeData = []; + var eData = []; + for (var i = 0; i < state.chartData.length; i++) { + var node = state.chartData[i]; + if (node.Tsum != 0) { + var x = parseFloat(((node.Qmax + node.Qmin) / 2).toFixed(4)); + var y = parseFloat(((node.Hmax + node.Hmin) / 2).toFixed(4)); + var time = parseFloat((node.Tsum / 60 / 60).toFixed(3)); + x = node.Qmax; + y = node.Hmax; + + xData.push(x); + yData.push(y); + node.Tsum = time; + runTimeData.push({ rect_data: node, value: [x.toString(), y.toString(), node.Tsum, node] }); + eData.push({ rect_data: node, value: [x.toString(), y.toString(), node.Eavg, node] }); //Eavg 鏁堢巼 + } + } + xData = uniqueInArray(xData); //鍘婚噸 + yData = uniqueInArray(yData); //鍘婚噸 + yData.sort(compareNumbers); + var max = 1; + var min = 0; + var maxE = 100; + var minE = 0; + if (state.chartData.length != 0) { + max = Math.max.apply( + Math, + state.chartData.map((item) => { + return item.Tsum; + }) + ); //鏁版嵁鐨勬渶澶у�� + min = Math.min.apply( + Math, + state.chartData.map((item) => { + return item.Tsum; + }) + ); //鏁版嵁鐨勬渶灏忓�� + maxE = Math.max.apply( + Math, + state.chartData.map((item) => { + return item.Eavg; + }) + ); //鏁堢巼鏁版嵁鐨勬渶澶у�� + var minValE = []; + state.chartData.forEach((item) => { + if (item.Eavg != 0) { + minValE.push(item.Eavg); + } + }); + minE = Math.min.apply(Math, minValE); //鏁堢巼鏁版嵁鐨勬渶灏忓�� + } + // console.log(xData, yData, runTimeData); + //console.log(max,min) + runTimeData = runTimeData.map(function (item) { + return { rect_data: item.rect_data, value: [item.value[0], item.value[1], item.value[2] || '-'] }; + //return { rect_data: item.rect_data, value: [item.value[0], item.value[1], item.value[2]] }; + }); + + eData = eData.map(function (item) { + return { rect_data: item.rect_data, value: [item.value[0], item.value[1], item.value[2] || '-'] }; + }); + var option = { + tooltip: { + //position: 'top' + formatter: function (p) { + //console.log(p.data) + if (!p.data) { + return ''; + } + return ( + p.data.rect_data.Qmin + + '-' + + p.data.rect_data.Qmax + + '</br>' + + p.marker + + '鏃堕棿: ' + + p.data.rect_data.Tsum + + '灏忔椂 鏁堢巼: ' + + p.data.rect_data.Eavg + + '%' + ); + }, + }, + animation: false, + grid: { + containLabel: true, + left: '80', + right: '80', + top: '70', + bottom: '15', + }, + legend: { + data: ['鏁堢巼', '杩愯鏃堕棿'], + }, + xAxis: { + name: '娴侀噺(m鲁)', + type: 'category', //category log + data: xData, + //boundaryGap:false, + splitArea: { + show: true, + interval: 0, + }, + axisLabel: { + //formatter: function (value, index) { + // console.log(value, index) + // return value + //} + }, + axisTick: { + alignWithLabel: true, + }, + axisPointer: { + show: true, + type: 'shadow', + }, + }, + yAxis: { + name: '鎵▼(m)', + type: 'category', + data: yData, + splitArea: { + show: true, + interval: 0, + }, + axisTick: { + alignWithLabel: true, + }, + axisPointer: { + show: true, + type: 'shadow', + }, + }, + visualMap: [ + { + min: min, + max: max, + calculable: true, + text: ['鏃堕棿:(灏忔椂)', ''], + textGap: 20, + realtime: false, + //orient:'horizontal', + top: 'middle', + inRange: { + color: ['#2ba2ee', '#f32cb7'], //['#2ba2ee', '#f32cb7'] //['#313695', '#a50026'] + }, + ////color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + }, + ], + series: [ + { + name: '杩愯鏃堕棿', + type: 'heatmap', + data: runTimeData, + label: { + show: false, + }, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + }, + ], + }; + // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆� + m_chartHeatmapBox.value.setOption(option, true); + m_chartHeatmapBox.value.setOption({ + visualMap: [ + { + min: min, + max: max, + range: [min, max], + }, + ], + }); + m_chartHeatmapBox.value.on('click', function (obj) { + let node = obj.data.rect_data; + let QAve = (node.Qmin + node.Qmax) / 2; + let HAve = (node.Hmin + node.Hmax) / 2; + state.deviationForm.QdStart = node.Qmin; + state.deviationForm.QdEnd = node.Qmax; + state.analyzeForm.Q = QAve; + state.deviationForm.HdStart = node.Hmin; + state.deviationForm.HdEnd = node.Hmax; + state.analyzeForm.H = HAve; + setChartTableDialog(node.Qmin, node.Qmax, node.Hmin, node.Hmax); + }); + state.min = min; + state.max = max; + state.runTimeData = runTimeData; + state.minE = minE; + state.maxE = maxE; + state.eData = eData; + window.addEventListener('resize', selfAdaption); +}; +const compareNumbers = (a, b) => { + return a - b; // 浠庡皬鍒板ぇ鎺掑簭 +}; +//鎵撳紑寮圭獥 +const setChartTableDialog = async (qLower, qUpper, hLower, hUpper) => { + state.heatmapDetailShow = true; + await GetRectDetailListOfDayRange({ + ObjectType: LOGIC_SITE_CODE, + ObjectID: currentListID.value, + Qmin: qLower, + Qmax: qUpper, + Hmin: hLower, + Hmax: hUpper, + StartDay: state.queryQHForm.themetime[0], + EndDay: state.queryQHForm.themetime[1], + }).then((res) => { + let result = res.Data; + if (res.Code != 0) { + state.pieData = []; + m_chartPie.value && m_chartPie.value.clear(); + return; + } + if (res.Data == null || res.Data.length == 0) { + state.pieData = []; + m_chartPie.value && m_chartPie.value.clear(); + return ElMessage.warning('楗煎浘鏆傛棤鏁版嵁'); + } + result.forEach((item) => (item.Tsum = (item.Tsum / 60 / 60).toFixed(2))); + state.pieData = result || []; + setTimeout(() => { + //鍒濆鍖栭ゼ鍥� + buildPieChartBox(); + }, 100); + }); +}; +// 鍒濆鍖栭ゼ鍥� +const buildPieChartBox = () => { + m_chartPie.value && m_chartPie.value.clear(); + if (state.pieData.length == 0) return; + //鍏堣幏鍙朌om涓婄殑瀹炰緥 + let chartDom = echarts.getInstanceByDom(document.getElementById('chartPie') as HTMLDivElement); + //鐒跺悗鍒ゆ柇瀹炰緥鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪锛屽氨鍒涘缓鏂板疄渚� + if (chartDom == null) { + chartDom = echarts.init(document.getElementById('chartPie') as HTMLDivElement); + } + m_chartPie.value = chartDom; + var seriesData = []; + for (var i = 0; i < state.pieData.length; i++) { + var item = state.pieData[i]; + seriesData.push({ value: parseFloat(item.Tsum), name: item.Name }); + } + let option = { + title: { + text: '', + subtext: '', + left: 'center', + }, + tooltip: { + trigger: 'item', + }, + legend: { + orient: 'vertical', + left: 'left', + }, + series: [ + { + name: '杩愯鏃堕棿', + type: 'pie', + radius: '50%', + data: seriesData, + label: { + show: true, + formatter: '{b}{a}锛歿c}灏忔椂', + }, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + }, + ], + }; + m_chartPie.value.setOption(option, true); + m_chartPie.value && m_chartPie.value.resize(); +}; +//鍏抽棴寮圭獥 +const closeDialog = () => { + state.heatmapDetailShow = false; +}; +// 鐑姏鍥捐嚜閫傚簲 +const selfAdaption = () => { + if (!m_chartHeatmapBox.value) return; + m_chartHeatmapBox.value.resize(); +}; +// 楗煎浘鑷�傚簲 +const selfPipeAdaption = () => { + if (!m_chartPie.value) return; + m_chartPie.value.resize(); +}; +//#endregion +//#region ====================== 鏄惁鏄剧ず鍊�/鏃堕棿/鍔熺巼 ====================== +const isShowQHValue = () => { + if (state.QHForm.showValue) { + m_chartHeatmapBox.value && + m_chartHeatmapBox.value.setOption({ + series: [ + { + label: { + show: true, + color: 'white', + }, + }, + ], + }); + } else { + m_chartHeatmapBox.value && + m_chartHeatmapBox.value.setOption({ + series: [ + { + label: { + show: false, + }, + }, + ], + }); + } +}; +const tOrPChange = (val) => { + state.QHForm.tOrP = val; + isShowTOrP(); +}; +const isShowTOrP = () => { + var isRunTime = true; + if (state.QHForm.tOrP) { + m_chartHeatmapBox.value.setOption({ + visualMap: [ + { + min: state.min, + max: state.max, + text: ['鏃堕棿:(灏忔椂)', ''], + range: [state.min, state.max], + inRange: { + color: ['#2ba2ee', '#f32cb7'], + }, + }, + ], + series: [ + { + name: '杩愯鏃堕棿', + data: state.runTimeData, + }, + ], + }); + isRunTime = true; + } else { + m_chartHeatmapBox.value.setOption({ + visualMap: [ + { + min: state.minE, + max: state.maxE, + text: ['鏁堢巼:(%)', ''], + range: [state.minE, state.maxE], + inRange: { + color: ['#ccc', '#332cb7'], + }, + }, + ], + + series: [ + { + name: '鏁堢巼', + data: state.eData, + }, + ], + }); + isRunTime = false; + } +}; + +//#endregion +//#region ====================== 鍒囨崲鎴愮簿纭煡璇� ====================== +//楠岃瘉鐨勬椂鍊欏彧鑳借緭鍏ユ暟瀛� +const verifiyInstant = (val, type) => { + switch (type) { + case 1: + if (state.analyzeForm.Q == '') return; + state.analyzeForm.Q = verifyNumberComma(val); + let qLowerValue = parseFloat(state.analyzeForm.Q) - parseFloat(state.analyzeForm.deviationQValue); + let qUpperValue = parseFloat(state.analyzeForm.Q) + parseFloat(state.analyzeForm.deviationQValue); + state.deviationForm.QdStart = qLowerValue; //娴侀噺鍋忓樊鏈�灏忓�� + state.deviationForm.QdEnd = qUpperValue; //娴侀噺鍋忓樊鏈�澶у�� + + break; + case 2: + if (state.analyzeForm.deviationQValue == '') return; + state.analyzeForm.deviationQValue = verifyNumberComma(val); + let q_LowerValue = parseFloat(state.analyzeForm.Q) - parseFloat(state.analyzeForm.deviationQValue); + let q_UpperValue = parseFloat(state.analyzeForm.Q) + parseFloat(state.analyzeForm.deviationQValue); + state.deviationForm.QdStart = q_LowerValue; //娴侀噺鍋忓樊鏈�灏忓�� + state.deviationForm.QdEnd = q_UpperValue; //娴侀噺鍋忓樊鏈�澶у�� + + break; + case 3: + if (state.analyzeForm.H == '') return; + state.analyzeForm.H = verifyNumberComma(val); + let hLowerValue = parseFloat(state.analyzeForm.H) - parseFloat(state.analyzeForm.deviationHValue); + let hUpperValue = parseFloat(state.analyzeForm.H) + parseFloat(state.analyzeForm.deviationHValue); + state.deviationForm.HdStart = hLowerValue; //鎵▼鍋忓樊鏈�灏忓�� + state.deviationForm.HdEnd = hUpperValue; //鎵▼鍋忓樊鏈�澶у�� + break; + case 4: + if (state.analyzeForm.deviationHValue == '') return; + state.analyzeForm.deviationHValue = verifyNumberComma(val); + let h_LowerValue = parseFloat(state.analyzeForm.H) - parseFloat(state.analyzeForm.deviationHValue); + let h_UpperValue = parseFloat(state.analyzeForm.H) + parseFloat(state.analyzeForm.deviationHValue); + state.deviationForm.HdStart = h_LowerValue; //鎵▼鍋忓樊鏈�灏忓�� + state.deviationForm.HdEnd = h_UpperValue; //鎵▼鍋忓樊鏈�澶у�� + break; + case 5: + state.deviationForm.QdStart = verifyNumberComma(val); + + break; + case 6: + state.deviationForm.QdEnd = verifyNumberComma(val); + break; + case 7: + state.deviationForm.HdStart = verifyNumberComma(val); + + break; + case 8: + state.deviationForm.HdEnd = verifyNumberComma(val); + break; + } +}; +//鐩戝惉娴侀噺闂撮殧鍊� +const flowIntervalValue = (val) => { + // state.analyzeForm.Q = val; + var intervalValueFlow = state.queryQHForm.Qspace / 2; //娴侀噺闂撮殧鍊� + //灏嗘祦閲忛棿闅斿�煎疄鏃惰祴缁欐祦閲忓亸宸�� + state.analyzeForm.deviationQValue = intervalValueFlow; + var qLowerValue = parseFloat(state.analyzeForm.Q) - parseFloat(state.analyzeForm.deviationQValue); + var qUpperValue = parseFloat(state.analyzeForm.Q) + parseFloat(state.analyzeForm.deviationQValue); + state.deviationForm.QdStart = qLowerValue; //娴侀噺鍋忓樊鏈�灏忓�� + state.deviationForm.QdEnd = qUpperValue; //娴侀噺鍋忓樊鏈�澶у�� +}; +//鐩戝惉鎵▼闂撮殧鍊� +const headIntervalValue = (val) => { + // state.analyzeForm.Q = val; + var intervalValueFlow = state.queryQHForm.Hspace / 2; //鎵▼闂撮殧鍊� + //灏嗘壃绋嬮棿闅斿�煎疄鏃惰祴缁欐壃绋嬪亸宸�� + state.analyzeForm.deviationHValue = intervalValueFlow; + var hLowerValue = parseFloat(state.analyzeForm.H) - parseFloat(state.analyzeForm.deviationHValue); + var hUpperValue = parseFloat(state.analyzeForm.H) + parseFloat(state.analyzeForm.deviationHValue); + state.deviationForm.HdStart = hLowerValue; //鎵▼鍋忓樊鏈�灏忓�� + state.deviationForm.HdEnd = hUpperValue; //鎵▼鍋忓樊鏈�澶у�� +}; +const getTableDetail = async () => { + var qLowerValue = state.deviationForm.QdStart; //娴侀噺鍋忓樊鏈�灏忓�� + var qUpperValue = state.deviationForm.QdEnd; //娴侀噺鍋忓樊鏈�澶у�� + var hLowerValue = state.deviationForm.HdStart; //鎵▼鍋忓樊鏈�灏忓�� + var hUpperValue = state.deviationForm.HdEnd; //鎵▼鍋忓樊鏈�澶у�� + if (qLowerValue > qUpperValue && hLowerValue > hUpperValue) { + return ElMessage.warning('娴侀噺銆佹壃绋嬪亸宸渶灏忓�间笉鑳藉ぇ浜庢渶澶у��'); + } else if (qLowerValue > qUpperValue) { + return ElMessage.warning('娴侀噺鍋忓樊鏈�灏忓�间笉鑳藉ぇ浜庢渶澶у��'); + } else if (hLowerValue > hUpperValue) { + return ElMessage.warning('鎵▼鍋忓樊鏈�灏忓�间笉鑳藉ぇ浜庢渶澶у��'); + } else { + if (qLowerValue == null || qLowerValue == '') return ElMessage.warning('璇疯緭鍏ユ祦閲�'); + if (qUpperValue == null || qUpperValue == '') return ElMessage.warning('璇疯緭鍏ユ祦閲�'); + if (hLowerValue == null || hLowerValue == '') return ElMessage.warning('璇疯緭鍏ユ壃绋�'); + if (hUpperValue == null || hUpperValue == '') return ElMessage.warning('璇疯緭鍏ユ壃绋�'); + await GetRectDetailListOfDayRange({ + ObjectType: LOGIC_SITE_CODE, + ObjectID: currentListID.value, + Qmin: qLowerValue, + Qmax: qUpperValue, + Hmin: hLowerValue, + Hmax: hUpperValue, + StartDay: state.queryQHForm.themetime[0], + EndDay: state.queryQHForm.themetime[1], + }).then((res) => { + let result = res.Data; + if (res.Code != 0) { + state.displayTableData = []; + return; + } + if (res.Data == null || res.Data.length == 0) { + state.displayTableData = []; + return ElMessage.warning('琛ㄦ牸鏆傛棤鏁版嵁'); + } + result.forEach((item) => (item.Tsum = (item.Tsum / 60 / 60).toFixed(2))); + state.displayTableData = result || []; + }); + } +}; +//#endregion +onMounted(() => { + let getSevenDate = getdatatime(); + state.queryQHForm.themetime = getSevenDate; + window.addEventListener('resize', selfPipeAdaption); +}); +onActivated(() => { + window.addEventListener('resize', selfPipeAdaption); +}); +defineExpose({ + getChartList, +}); +</script> +<style scoped lang="scss"> +:deep(.el-tabs__content) { + width: 100%; + height: calc(100% - 50px); +} +.box_right_title { + background: linear-gradient(90deg, #2d81d9, #0655b4); + color: #fff; + height: 30px; + line-height: 30px; + text-align: left; + border-radius: 7px; + padding-left: 10px; + display: flex; +} +.form_m1 { + :deep(.el-form-item__label) { + color: #ffffff !important; + } +} +.setQHForm { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + padding-top: 10px; +} +.analyseInput_left { + width: 68px; + height: 32px; + line-height: 32px; + // border: 1px solid #cccccc; + text-align: center; + color: #666; +} +.analyseInput_right { + width: 45px; + height: 32px; + line-height: 32px; + // border: 1px solid #cccccc; + text-align: center; + color: #666; +} +.deviationInput { + width: 68px; + height: 32px; + line-height: 32px; + // border: 1px solid #cccccc; + text-align: center; + color: #666; +} +.formLabel_size { + :deep(.el-form-item__label) { + font-size: 1rem !important; + } + :deep(.el-form-item--default) { + margin-bottom: 10px !important; + line-height: 36px; + } +} +</style> diff --git a/src/views/project/ch/efficiencyAnalysis/curveAnalysis/RunPointAnalysis.vue b/src/views/project/ch/efficiencyAnalysis/curveAnalysis/RunPointAnalysis.vue index e555f07..1963cf0 100644 --- a/src/views/project/ch/efficiencyAnalysis/curveAnalysis/RunPointAnalysis.vue +++ b/src/views/project/ch/efficiencyAnalysis/curveAnalysis/RunPointAnalysis.vue @@ -1,973 +1,60 @@ -杩愯鐐瑰垎鏋� <template> + <!-- 鎬ц兘鏇茬嚎 --> <el-row :gutter="8" class="h100"> <el-col :span="4" :xs="24" class="h100"> <el-card shadow="hover" class="h100 left-tree-card" v-loading="treeLoading"> - <LeftTreeByMgr - :treedata="listTreeData" - :showTitle="false" - :currentNodeKey="currentListID" - @click="handleClickNode" - :defaultProps="state.defaultProps" - defaultExpandAll - :folderIcon="(_, data) => data.LogicType !== LOGIC_SITE_CODE" - > + <LeftTreeByMgr :treedata="listTreeData" title-name="娉电珯鍒楄〃" :current-node-key="currentListID" @click="handleClickNode"> </LeftTreeByMgr> </el-card> </el-col> <el-col :span="20" :xs="24" class="flex-column h100"> - <el-card class="flex-auto scroll-table-card" shadow="hover"> - <el-tabs v-model="state.activeName" class="w100 h100"> - <el-tab-pane label="鐑姏鍥�" name="heatMapPage" class="w100 h100"> - <div class="box_right_title form_m1"> - <span class="mr15">杩愯鍒嗘瀽</span> - <el-form ref="queryQHFormRef" :inline="true" :model="state.queryQHForm"> - <el-form-item label="鏃ユ湡"> - <el-date-picker - v-model="state.queryQHForm.themetime" - range-separator="~" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" - :disabled-date="disablesDate" - type="daterange" - :default-time="defaultTime" - clearable - value-format="YYYY-MM-DD" - @change="getDateTime" - size="small" - /> - </el-form-item> - <el-form-item> - <el-button class="ml10" @click="timeQuery()" size="small" type="primary">鏌ヨ</el-button> - </el-form-item> - </el-form> - </div> - <div class="setQHForm"> - <el-form ref="queryQHFormRef" :inline="true" :model="state.queryQHForm" :rules="queryQHRules"> - <el-form-item label="娴侀噺闂撮殧鍊�" prop="Qspace"> - <el-input-number - v-model="state.queryQHForm.Qspace" - placeholder="娴侀噺闂撮殧鍊�" - autocomplete="off" - :controls="false" - style="width: 100px" - :min="1" - @input="flowIntervalValue" - ></el-input-number> - </el-form-item> - <el-form-item label="鎵▼闂撮殧鍊�" prop="Hspace"> - <el-input-number - v-model="state.queryQHForm.Hspace" - placeholder="鎵▼闂撮殧鍊�" - :controls="false" - style="width: 100px" - autocomplete="off" - @input="headIntervalValue" - ></el-input-number> - </el-form-item> - </el-form> - - <el-form :model="state.QHForm" :inline="true"> - <el-form-item label="鏄剧ず鍊�" label-width="65px"> - <el-switch v-model="state.QHForm.showValue" @change="isShowQHValue" /> - </el-form-item> - <!-- @change="isShowTOrP" --> - <el-form-item label="鏃堕棿鎴栧姛鐜�" label-width="95px"> - <el-switch v-model="state.QHForm.tOrP" @change="tOrPChange" /> - </el-form-item> - </el-form> - </div> - <div style="display: flex; height: calc(100% - 120px)"> - <div id="chartHeatmapBox" class="chart" style="width: calc(100% - 0px); height: calc(100% - 0px)"></div> - </div> - </el-tab-pane> - <el-tab-pane label="绮剧‘鏌ヨ" name="cacurateQueryPage"> - <el-row :gutter="8" class="h100"> - <el-col :span="20" :xs="24" class="flex-column h100"> - <div> - <div class="box_right_title form_m1"> - <span class="mr15">杩愯鍒嗘瀽</span> - <el-form ref="queryQHFormRef" :inline="true" :model="state.queryQHForm"> - <el-form-item label="鏃ユ湡"> - <el-date-picker - v-model="state.queryQHForm.themetime" - range-separator="~" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" - :disabled-date="disablesDate" - type="daterange" - :default-time="defaultTime" - clearable - value-format="YYYY-MM-DD" - @change="getDateTime" - size="small" - /> - </el-form-item> - </el-form> - </div> - <el-table - class="mt10" - ref="draggableTableRef" - border - row-key="ID" - :cell-style="{ textAlign: 'center' }" - :header-cell-style="{ textAlign: 'center' }" - :data="state.displayTableData" - style="width: 100%" - highlight-current-row - height="670" - > - <el-table-column type="index" label="搴忓彿" fixed="left" show-overflow-tooltip width="150" /> - <el-table-column prop="Name" label="娉电粍鍚�" show-overflow-tooltip width="150"> </el-table-column> - <el-table-column prop="Qavg" label="娴侀噺" show-overflow-tooltip width="150" /> - <el-table-column prop="Havg" width="150" label="鎵▼" show-overflow-tooltip /> - <el-table-column prop="Pavg" width="150" label="鍔熺巼(kW)" show-overflow-tooltip /> - <el-table-column label="杩愯鏃堕棿(h)" show-overflow-tooltip prop="Tsum" fixed="right"> </el-table-column> - </el-table> - </div> - </el-col> - <el-col :span="4" :xs="24" class="flex-column h100"> - <div class="box_right_title">鍒嗘瀽鍙傛暟</div> - <div class="mt10"> - <el-form label-width="45px" :model="state.analyzeForm" class="formLabel_size"> - <div class="flex flex-space-between"> - <el-form-item label="娴侀噺"> - <el-input v-model="state.analyzeForm.Q" @input="verifiyInstant($event, 1)" class="analyseInput_left" /> - </el-form-item> - <el-form-item label="鍋忓樊鍊�" label-width="56px"> - <el-input - v-model="state.analyzeForm.deviationQValue" - @input="verifiyInstant($event, 2)" - class="analyseInput_right" - /> - </el-form-item> - </div> - <div class="flex flex-space-between"> - <el-form-item label="鎵▼"> - <el-input v-model="state.analyzeForm.H" @input="verifiyInstant($event, 3)" class="analyseInput_left" /> - </el-form-item> - <el-form-item label="鍋忓樊鍊�" label-width="56px"> - <el-input - v-model="state.analyzeForm.deviationHValue" - @input="verifiyInstant($event, 4)" - class="analyseInput_right" - /> - </el-form-item> - </div> - </el-form> - </div> - <div class="box_right_title mt10">鍋忓樊鑼冨洿</div> - <div class="mt10"> - <el-form label-width="45px" :model="state.deviationForm"> - <div class="flex flex-space-between"> - <el-form-item label="娴侀噺"> - <el-input v-model="state.deviationForm.QdStart" @input="verifiyInstant($event, 5)" class="deviationInput" /> - <span style="color: #ccc; padding: 0px 4px"> 锝� </span> - <el-input v-model="state.deviationForm.QdEnd" @input="verifiyInstant($event, 6)" class="deviationInput" /> - </el-form-item> - </div> - <div class="flex flex-space-between mt10"> - <el-form-item label="鎵▼"> - <el-input v-model="state.deviationForm.HdStart" @input="verifiyInstant($event, 7)" class="deviationInput" /> - <span style="color: #ccc; padding: 0px 4px"> 锝� </span> - <el-input v-model="state.deviationForm.HdEnd" @input="verifiyInstant($event, 8)" class="deviationInput" /> - </el-form-item> - </div> - <el-form-item> - <el-button class="ml10 mt10" type="primary" @click="getTableDetail()">鏌ヨ</el-button> - </el-form-item> - </el-form> - </div> - </el-col> - </el-row> - </el-tab-pane> - </el-tabs> - </el-card> + <RunPointAnalysisCom ref="runPointAnalysisRef" :currentListID="currentListID" :pumpTitle="state.echartTitle" /> </el-col> - <el-dialog - :destroy-on-close="true" - v-model="state.heatmapDetailShow" - width="700px" - :close-on-click-modal="false" - @closed="closeDialog" - :title="state.dialogTitle" - > - <div style="display: flex; height: 400px; width: 100%"> - <div id="chartPie" class="chart" style="width: calc(100% - 0px); height: calc(100% - 0px)"></div> - </div> - - <el-table - ref="draggableTableRef" - border - :cell-style="{ textAlign: 'center' }" - :header-cell-style="{ textAlign: 'center' }" - :data="state.pieData" - style="width: 100%" - highlight-current-row - > - <el-table-column type="index" label="搴忓彿" show-overflow-tooltip width="70" /> - <el-table-column prop="Name" label="娉电粍鍚�" show-overflow-tooltip width="130"> </el-table-column> - <el-table-column prop="Qavg" label="娴侀噺" show-overflow-tooltip width="110" /> - <el-table-column prop="Havg" width="90" label="鎵▼" show-overflow-tooltip /> - <el-table-column prop="Pavg" width="130" label="鍔熺巼(kW)" show-overflow-tooltip /> - <el-table-column label="杩愯鏃堕棿(h)" show-overflow-tooltip prop="Tsum"> </el-table-column> - </el-table> - </el-dialog> </el-row> </template> <script setup lang="ts"> -import * as echarts from 'echarts'; -import { ElMessage } from 'element-plus'; +import { computed, nextTick, onMounted, reactive, ref } from 'vue'; +import { GetStationList } from '/@/api/dispatch/dispatch'; import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue'; -import type { FormRules } from 'vue'; -import { ref, onMounted, computed, reactive, shallowRef, onActivated } from 'vue'; -import { getDefaultLogicPolicyStd } from '/@/api/phm/logicPolicyStd'; -import { GetLogicTreeListByPolicyIDStd } from '/@/api/phm/logicTreeStd'; -import { getSite } from '/@/projectCom/components/manage/utils'; -import { uniqueInArray } from '/@/utils/istation/common.js'; -import { LOGIC_SITE_CODE } from '/@/constants'; -import { GetRectListOfDayRange, GetRectDetailListOfDayRange } from '/@/api/eta/runHeat'; -import moment from 'moment'; -import { verifyNumberComma } from '/@/utils/toolsValidate'; -const defaultTime = ref<[Date, Date]>([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]); +import RunPointAnalysisCom from '/@/projectCom/curve/runPoint/RunPointAnalysisCom.vue'; // 瀹氫箟鍙橀噺鍐呭 const state = reactive({ - chartData: [], echartTitle: '', - queryQHForm: { - Qspace: 100, - Hspace: 1, - themetime: '', - } as any, - QHForm: { - showValue: false, - tOrP: true, - }, - heatmapDetailShow: false, //鎵撳紑鐑姏鍥剧殑璇︾粏 锛堥粯璁ゅ叧闂級 - dialogTitle: '娉电粍鍚堜俊鎭�', //璇︾粏鐨勫悕瀛� - pieData: [], //楗煎浘鏁版嵁婧� - defaultProps: { - id: 'LogicID', - label: 'Name', - children: 'Children', - }, //鏍戣妭鐐� - activeName: 'heatMapPage', //榛樿閫変腑鐑姏鍥� - displayTableData: [], //绮剧‘鏌ヨ鏁版嵁 - analyzeForm: { - deviationQValue: 50, - deviationHValue: 0.5, - } as any, //鍒嗘瀽鍙傛暟 - deviationForm: {} as any, //鍋忓樊鑼冨洿 - min: '', - max: '', - runTimeData: [], - minE: '', - maxE: '', - eData: [], }); -const m_chartHeatmapBox = shallowRef(); -const m_chartPie = shallowRef(); -const queryQHFormRef = ref(); +const runPointAnalysisRef = ref(); //#region ====================== 宸︿晶鏍戞暟鎹紝tree init ====================== + const treeLoading = ref(false); const listTreeData = ref([]); const currentTreeNode = ref(null); -const currentListID = computed(() => currentTreeNode.value?.LogicID); -const defaultSelectID = window.moduleConfig.comprehensive.logicSite.defaultSelectID; //榛樿閫変腑闀垮叴...娉电珯鐨処D +const currentListID = computed(() => currentTreeNode.value?.ID); const handleClickNode = (data) => { currentTreeNode.value = data; - if (data.LogicType !== LOGIC_SITE_CODE) { - m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); - return ElMessage.warning('鏀嚎涓嶅彲閫�!'); - } - window.moduleConfig.comprehensive.logicSite.defaultSelectID = data.LogicID; - state.echartTitle = data.Name; - timeQuery(); + nextTick(() => { + runPointAnalysisRef.value.getChartList(); + }); }; const getListTreeData = async () => { treeLoading.value = true; - getDefaultLogicPolicyStd().then(async (data) => { - if (typeof data !== 'undefined') { - const res = await GetLogicTreeListByPolicyIDStd({ - PolicyID: data.ID, - }).finally(() => { - treeLoading.value = false; - }); - - if (res?.Code === 0) { - const resData = (res.Data || []) as []; - listTreeData.value = resData; - const firstSelectTreeNode = getSite( - resData, - { key: 'LogicType', value: LOGIC_SITE_CODE }, - { - key: 'LogicID', - value: defaultSelectID, - } - ); - if (firstSelectTreeNode) { - handleClickNode(firstSelectTreeNode); - state.echartTitle = firstSelectTreeNode.Name; - } else { - listTreeData.value = []; - } - } else { - ElMessage.error('鑾峰彇娉电珯鍒楄〃澶辫触' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); - } + const res = await GetStationList().finally(() => { + treeLoading.value = false; + }); + if (res?.Code === 0) { + const resData = (res.Data || []) as []; + listTreeData.value = resData; + const firstListTreeNode = listTreeData.value[0]; + if (firstListTreeNode) { + handleClickNode(firstListTreeNode); } else { - listTreeData.value = []; - } - }); -}; -//#endregion -//#region ====================== 璁剧疆鏃堕棿浜嬩欢 ====================== -//榛樿鏃堕棿閫夋嫨鍓�7澶�/榛樿閫夋嫨褰撳ぉ -const getdatatime = () => { - let sevenAgo = moment(new Date()).subtract(7, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'); - let today = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss'); - return [sevenAgo, today]; -}; -//鑾峰彇鏃ユ湡鐨勬椂闂� -const getDateTime = (val) => { - if (val == null) { - return ElMessage.warning('璇烽�夋嫨鏃堕棿'); - } - state.queryQHForm.themetime[0] = val[0]; - state.queryQHForm.themetime[1] = val[1]; -}; -// 鏃堕棿闄愬埗 -const disablesDate = (time) => { - return time.getTime() > new Date().getTime(); -}; -//鏌ヨ鏃堕棿 -const timeQuery = async () => { - if (!queryQHFormRef.value) return; - await queryQHFormRef.value.validate(async (valid, fields) => { - if (valid) { - getChartList(); - } else { - return ElMessage.error('蹇呭~椤�!'); - } - }); -}; -//#endregion -//#region ====================== 琛ㄥ崟楠岃瘉 ====================== -const queryQHRules = reactive<FormRules>({ - Qspace: [{ required: true, message: '鍙兘杈撳叆鏁板瓧', trigger: 'blur' }], - Hspace: [{ required: true, message: '鍙兘杈撳叆鏁板瓧', trigger: 'blur' }], -}); -//#endregion -//#region ====================== 鍥捐〃 鎵▼/鏁堢巼/init====================== -//閫氳繃 鏃ユ湡鏇茬嚎鑾峰彇鐑姏鍥惧浘琛ㄦ暟鎹� -const getChartList = async () => { - await GetRectListOfDayRange({ - ObjectType: LOGIC_SITE_CODE, - ObjectID: currentListID.value, - Qspace: state.queryQHForm.Qspace, - Hspace: state.queryQHForm.Hspace, - StartDay: state.queryQHForm.themetime[0], - EndDay: state.queryQHForm.themetime[1], - }) - .then((res) => { - let result = res.Data; - if (res.Code != 0) { - state.chartData = []; - m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); - return; - } - if (res.Data == null || res.Data.length == 0) { - state.chartData = []; - m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); - return ElMessage.warning('鏆傛棤鏁版嵁'); - } - state.chartData = result || []; - - setTimeout(() => { - //鍒濆鍖栧浘琛� - BuildchartHeatmapBox(); - }, 100); - }) - .catch((err) => { - ElMessage.error('鑾峰彇鍥捐〃鏁版嵁澶辫触' + (err?.Message ? `锛�${JSON.stringify(err.Message)}` : '')); - }); -}; -// 鍒濆鍖栨祦閲忔壃绋嬪浘琛� -const BuildchartHeatmapBox = () => { - m_chartHeatmapBox.value && m_chartHeatmapBox.value.clear(); - if (state.chartData.length == 0) return; - //鍏堣幏鍙朌om涓婄殑瀹炰緥 - let chartDom = echarts.getInstanceByDom(document.getElementById('chartHeatmapBox') as HTMLDivElement); - //鐒跺悗鍒ゆ柇瀹炰緥鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪锛屽氨鍒涘缓鏂板疄渚� - if (chartDom == null) { - chartDom = echarts.init(document.getElementById('chartHeatmapBox') as HTMLDivElement); - } - m_chartHeatmapBox.value = chartDom; - var xData = []; - var yData = []; - var runTimeData = []; - var eData = []; - for (var i = 0; i < state.chartData.length; i++) { - var node = state.chartData[i]; - if (node.Tsum != 0) { - var x = parseFloat(((node.Qmax + node.Qmin) / 2).toFixed(4)); - var y = parseFloat(((node.Hmax + node.Hmin) / 2).toFixed(4)); - var time = parseFloat((node.Tsum / 60 / 60).toFixed(3)); - x = node.Qmax; - y = node.Hmax; - - xData.push(x); - yData.push(y); - node.Tsum = time; - runTimeData.push({ rect_data: node, value: [x.toString(), y.toString(), node.Tsum, node] }); - eData.push({ rect_data: node, value: [x.toString(), y.toString(), node.Eavg, node] }); //Eavg 鏁堢巼 + currentTreeNode.value = null; } } - xData = uniqueInArray(xData); //鍘婚噸 - yData = uniqueInArray(yData); //鍘婚噸 - yData.sort(compareNumbers); - var max = 1; - var min = 0; - var maxE = 100; - var minE = 0; - if (state.chartData.length != 0) { - max = Math.max.apply( - Math, - state.chartData.map((item) => { - return item.Tsum; - }) - ); //鏁版嵁鐨勬渶澶у�� - min = Math.min.apply( - Math, - state.chartData.map((item) => { - return item.Tsum; - }) - ); //鏁版嵁鐨勬渶灏忓�� - maxE = Math.max.apply( - Math, - state.chartData.map((item) => { - return item.Eavg; - }) - ); //鏁堢巼鏁版嵁鐨勬渶澶у�� - var minValE = []; - state.chartData.forEach((item) => { - if (item.Eavg != 0) { - minValE.push(item.Eavg); - } - }); - minE = Math.min.apply(Math, minValE); //鏁堢巼鏁版嵁鐨勬渶灏忓�� - } - // console.log(xData, yData, runTimeData); - //console.log(max,min) - runTimeData = runTimeData.map(function (item) { - return { rect_data: item.rect_data, value: [item.value[0], item.value[1], item.value[2] || '-'] }; - //return { rect_data: item.rect_data, value: [item.value[0], item.value[1], item.value[2]] }; - }); - - eData = eData.map(function (item) { - return { rect_data: item.rect_data, value: [item.value[0], item.value[1], item.value[2] || '-'] }; - }); - var option = { - tooltip: { - //position: 'top' - formatter: function (p) { - //console.log(p.data) - if (!p.data) { - return ''; - } - return ( - p.data.rect_data.Qmin + - '-' + - p.data.rect_data.Qmax + - '</br>' + - p.marker + - '鏃堕棿: ' + - p.data.rect_data.Tsum + - '灏忔椂 鏁堢巼: ' + - p.data.rect_data.Eavg + - '%' - ); - }, - }, - animation: false, - grid: { - containLabel: true, - left: '80', - right: '80', - top: '70', - bottom: '15', - }, - legend: { - data: ['鏁堢巼', '杩愯鏃堕棿'], - }, - xAxis: { - name: '娴侀噺(m鲁)', - type: 'category', //category log - data: xData, - //boundaryGap:false, - splitArea: { - show: true, - interval: 0, - }, - axisLabel: { - //formatter: function (value, index) { - // console.log(value, index) - // return value - //} - }, - axisTick: { - alignWithLabel: true, - }, - axisPointer: { - show: true, - type: 'shadow', - }, - }, - yAxis: { - name: '鎵▼(m)', - type: 'category', - data: yData, - splitArea: { - show: true, - interval: 0, - }, - axisTick: { - alignWithLabel: true, - }, - axisPointer: { - show: true, - type: 'shadow', - }, - }, - visualMap: [ - { - min: min, - max: max, - calculable: true, - text: ['鏃堕棿:(灏忔椂)', ''], - textGap: 20, - realtime: false, - //orient:'horizontal', - top: 'middle', - inRange: { - color: ['#2ba2ee', '#f32cb7'], //['#2ba2ee', '#f32cb7'] //['#313695', '#a50026'] - }, - ////color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] - }, - ], - series: [ - { - name: '杩愯鏃堕棿', - type: 'heatmap', - data: runTimeData, - label: { - show: false, - }, - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowColor: 'rgba(0, 0, 0, 0.5)', - }, - }, - }, - ], - }; - // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆� - m_chartHeatmapBox.value.setOption(option, true); - m_chartHeatmapBox.value.setOption({ - visualMap: [ - { - min: min, - max: max, - range: [min, max], - }, - ], - }); - m_chartHeatmapBox.value.on('click', function (obj) { - let node = obj.data.rect_data; - setChartTableDialog(node.Qmin, node.Qmax, node.Hmin, node.Hmax); - }); - state.min = min; - state.max = max; - state.runTimeData = runTimeData; - state.minE = minE; - state.maxE = maxE; - state.eData = eData; - window.addEventListener('resize', selfAdaption); -}; -const compareNumbers = (a, b) => { - return a - b; // 浠庡皬鍒板ぇ鎺掑簭 -}; -//鎵撳紑寮圭獥 -const setChartTableDialog = async (qLower, qUpper, hLower, hUpper) => { - state.heatmapDetailShow = true; - await GetRectDetailListOfDayRange({ - ObjectType: LOGIC_SITE_CODE, - ObjectID: currentListID.value, - Qmin: qLower, - Qmax: qUpper, - Hmin: hLower, - Hmax: hUpper, - StartDay: state.queryQHForm.themetime[0], - EndDay: state.queryQHForm.themetime[1], - }).then((res) => { - let result = res.Data; - if (res.Code != 0) { - state.pieData = []; - m_chartPie.value && m_chartPie.value.clear(); - return; - } - if (res.Data == null || res.Data.length == 0) { - state.pieData = []; - m_chartPie.value && m_chartPie.value.clear(); - return ElMessage.warning('楗煎浘鏆傛棤鏁版嵁'); - } - result.forEach((item) => (item.Tsum = (item.Tsum / 60 / 60).toFixed(2))); - state.pieData = result || []; - setTimeout(() => { - //鍒濆鍖栭ゼ鍥� - buildPieChartBox(); - }, 100); - }); -}; -// 鍒濆鍖栭ゼ鍥� -const buildPieChartBox = () => { - m_chartPie.value && m_chartPie.value.clear(); - if (state.pieData.length == 0) return; - //鍏堣幏鍙朌om涓婄殑瀹炰緥 - let chartDom = echarts.getInstanceByDom(document.getElementById('chartPie') as HTMLDivElement); - //鐒跺悗鍒ゆ柇瀹炰緥鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪锛屽氨鍒涘缓鏂板疄渚� - if (chartDom == null) { - chartDom = echarts.init(document.getElementById('chartPie') as HTMLDivElement); - } - m_chartPie.value = chartDom; - var seriesData = []; - for (var i = 0; i < state.pieData.length; i++) { - var item = state.pieData[i]; - seriesData.push({ value: parseFloat(item.Tsum), name: item.Name }); - } - let option = { - title: { - text: '', - subtext: '', - left: 'center', - }, - tooltip: { - trigger: 'item', - }, - legend: { - orient: 'vertical', - left: 'left', - }, - series: [ - { - name: '杩愯鏃堕棿', - type: 'pie', - radius: '50%', - data: seriesData, - label: { - show: true, - formatter: '{b}{a}锛歿c}灏忔椂', - }, - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)', - }, - }, - }, - ], - }; - m_chartPie.value.setOption(option, true); - m_chartPie.value && m_chartPie.value.resize(); -}; -//鍏抽棴寮圭獥 -const closeDialog = () => { - state.heatmapDetailShow = false; -}; -// 鐑姏鍥捐嚜閫傚簲 -const selfAdaption = () => { - if (!m_chartHeatmapBox.value) return; - m_chartHeatmapBox.value.resize(); -}; -// 楗煎浘鑷�傚簲 -const selfPipeAdaption = () => { - if (!m_chartPie.value) return; - m_chartPie.value.resize(); -}; -//#endregion -//#region ====================== 鏄惁鏄剧ず鍊�/鏃堕棿/鍔熺巼 ====================== -const isShowQHValue = () => { - if (state.QHForm.showValue) { - m_chartHeatmapBox.value && - m_chartHeatmapBox.value.setOption({ - series: [ - { - label: { - show: true, - color: 'white', - }, - }, - ], - }); - } else { - m_chartHeatmapBox.value && - m_chartHeatmapBox.value.setOption({ - series: [ - { - label: { - show: false, - }, - }, - ], - }); - } -}; -const tOrPChange = (val) => { - state.QHForm.tOrP = val; - isShowTOrP(); -}; -const isShowTOrP = () => { - var isRunTime = true; - if (state.QHForm.tOrP) { - m_chartHeatmapBox.value.setOption({ - visualMap: [ - { - min: state.min, - max: state.max, - text: ['鏃堕棿:(灏忔椂)', ''], - range: [state.min, state.max], - inRange: { - color: ['#2ba2ee', '#f32cb7'], - }, - }, - ], - series: [ - { - name: '杩愯鏃堕棿', - data: state.runTimeData, - }, - ], - }); - isRunTime = true; - } else { - m_chartHeatmapBox.value.setOption({ - visualMap: [ - { - min: state.minE, - max: state.maxE, - text: ['鏁堢巼:(%)', ''], - range: [state.minE, state.maxE], - inRange: { - color: ['#ccc', '#332cb7'], - }, - }, - ], - - series: [ - { - name: '鏁堢巼', - data: state.eData, - }, - ], - }); - isRunTime = false; - } }; -//#endregion -//#region ====================== 鍒囨崲鎴愮簿纭煡璇� ====================== -//楠岃瘉鐨勬椂鍊欏彧鑳借緭鍏ユ暟瀛� -const verifiyInstant = (val, type) => { - switch (type) { - case 1: - if (state.analyzeForm.Q == '') return; - state.analyzeForm.Q = verifyNumberComma(val); - var qLowerValue = parseFloat(state.analyzeForm.Q) - parseFloat(state.analyzeForm.deviationQValue); - var qUpperValue = parseFloat(state.analyzeForm.Q) + parseFloat(state.analyzeForm.deviationQValue); - state.deviationForm.QdStart = qLowerValue; //娴侀噺鍋忓樊鏈�灏忓�� - state.deviationForm.QdEnd = qUpperValue; //娴侀噺鍋忓樊鏈�澶у�� - - break; - case 2: - if (state.analyzeForm.deviationQValue == '') return; - state.analyzeForm.deviationQValue = verifyNumberComma(val); - var qLowerValue = parseFloat(state.analyzeForm.Q) - parseFloat(state.analyzeForm.deviationQValue); - var qUpperValue = parseFloat(state.analyzeForm.Q) + parseFloat(state.analyzeForm.deviationQValue); - state.deviationForm.QdStart = qLowerValue; //娴侀噺鍋忓樊鏈�灏忓�� - state.deviationForm.QdEnd = qUpperValue; //娴侀噺鍋忓樊鏈�澶у�� - - break; - case 3: - if (state.analyzeForm.H == '') return; - state.analyzeForm.H = verifyNumberComma(val); - var hLowerValue = parseFloat(state.analyzeForm.H) - parseFloat(state.analyzeForm.deviationHValue); - var hUpperValue = parseFloat(state.analyzeForm.H) + parseFloat(state.analyzeForm.deviationHValue); - state.deviationForm.HdStart = hLowerValue; //鎵▼鍋忓樊鏈�灏忓�� - state.deviationForm.HdEnd = hUpperValue; //鎵▼鍋忓樊鏈�澶у�� - break; - case 4: - if (state.analyzeForm.deviationHValue == '') return; - state.analyzeForm.deviationHValue = verifyNumberComma(val); - var hLowerValue = parseFloat(state.analyzeForm.H) - parseFloat(state.analyzeForm.deviationHValue); - var hUpperValue = parseFloat(state.analyzeForm.H) + parseFloat(state.analyzeForm.deviationHValue); - state.deviationForm.HdStart = hLowerValue; //鎵▼鍋忓樊鏈�灏忓�� - state.deviationForm.HdEnd = hUpperValue; //鎵▼鍋忓樊鏈�澶у�� - break; - case 5: - state.deviationForm.QdStart = verifyNumberComma(val); - - break; - case 6: - state.deviationForm.QdEnd = verifyNumberComma(val); - break; - case 7: - state.deviationForm.HdStart = verifyNumberComma(val); - - break; - case 8: - state.deviationForm.HdEnd = verifyNumberComma(val); - break; - } -}; -//鐩戝惉娴侀噺闂撮殧鍊� -const flowIntervalValue = (val) => { - // state.analyzeForm.Q = val; - var intervalValueFlow = state.queryQHForm.Qspace / 2; //娴侀噺闂撮殧鍊� - //灏嗘祦閲忛棿闅斿�煎疄鏃惰祴缁欐祦閲忓亸宸�� - state.analyzeForm.deviationQValue = intervalValueFlow; - var qLowerValue = parseFloat(state.analyzeForm.Q) - parseFloat(state.analyzeForm.deviationQValue); - var qUpperValue = parseFloat(state.analyzeForm.Q) + parseFloat(state.analyzeForm.deviationQValue); - state.deviationForm.QdStart = qLowerValue; //娴侀噺鍋忓樊鏈�灏忓�� - state.deviationForm.QdEnd = qUpperValue; //娴侀噺鍋忓樊鏈�澶у�� -}; -//鐩戝惉鎵▼闂撮殧鍊� -const headIntervalValue = (val) => { - // state.analyzeForm.Q = val; - var intervalValueFlow = state.queryQHForm.Hspace / 2; //鎵▼闂撮殧鍊� - //灏嗘壃绋嬮棿闅斿�煎疄鏃惰祴缁欐壃绋嬪亸宸�� - state.analyzeForm.deviationHValue = intervalValueFlow; - var hLowerValue = parseFloat(state.analyzeForm.H) - parseFloat(state.analyzeForm.deviationHValue); - var hUpperValue = parseFloat(state.analyzeForm.H) + parseFloat(state.analyzeForm.deviationHValue); - state.deviationForm.HdStart = hLowerValue; //鎵▼鍋忓樊鏈�灏忓�� - state.deviationForm.HdEnd = hUpperValue; //鎵▼鍋忓樊鏈�澶у�� -}; -const getTableDetail = async () => { - var qLowerValue = state.deviationForm.QdStart; //娴侀噺鍋忓樊鏈�灏忓�� - var qUpperValue = state.deviationForm.QdEnd; //娴侀噺鍋忓樊鏈�澶у�� - var hLowerValue = state.deviationForm.HdStart; //鎵▼鍋忓樊鏈�灏忓�� - var hUpperValue = state.deviationForm.HdEnd; //鎵▼鍋忓樊鏈�澶у�� - if (qLowerValue > qUpperValue && hLowerValue > hUpperValue) { - return ElMessage.warning('娴侀噺銆佹壃绋嬪亸宸渶灏忓�间笉鑳藉ぇ浜庢渶澶у��'); - } else if (qLowerValue > qUpperValue) { - return ElMessage.warning('娴侀噺鍋忓樊鏈�灏忓�间笉鑳藉ぇ浜庢渶澶у��'); - } else if (hLowerValue > hUpperValue) { - return ElMessage.warning('鎵▼鍋忓樊鏈�灏忓�间笉鑳藉ぇ浜庢渶澶у��'); - } else { - if (qLowerValue == null || qLowerValue == '') return ElMessage.warning('璇疯緭鍏ユ祦閲�'); - if (qUpperValue == null || qUpperValue == '') return ElMessage.warning('璇疯緭鍏ユ祦閲�'); - if (hLowerValue == null || hLowerValue == '') return ElMessage.warning('璇疯緭鍏ユ壃绋�'); - if (hUpperValue == null || hUpperValue == '') return ElMessage.warning('璇疯緭鍏ユ壃绋�'); - await GetRectDetailListOfDayRange({ - ObjectType: LOGIC_SITE_CODE, - ObjectID: currentListID.value, - Qmin: qLowerValue, - Qmax: qUpperValue, - Hmin: hLowerValue, - Hmax: hUpperValue, - StartDay: state.queryQHForm.themetime[0], - EndDay: state.queryQHForm.themetime[1], - }) - .then((res) => { - let result = res.Data; - if (res.Code != 0) { - state.displayTableData = []; - return; - } - if (res.Data == null || res.Data.length == 0) { - state.displayTableData = []; - return ElMessage.warning('琛ㄦ牸鏆傛棤鏁版嵁'); - } - result.forEach((item) => (item.Tsum = (item.Tsum / 60 / 60).toFixed(2))); - state.displayTableData = result || []; - }) - .catch((err) => { - return ElMessage.error('鑾峰彇琛ㄦ牸鍒楄〃澶辫触' + (err?.Message ? `锛�${JSON.stringify(err.Message)}` : '')); - }); - } -}; //#endregion onMounted(() => { - let getSevenDate = getdatatime(); - state.queryQHForm.themetime = getSevenDate; - setTimeout(() => { - getListTreeData(); - }, 100); - window.addEventListener('resize', selfPipeAdaption); -}); -onActivated(() => { - window.addEventListener('resize', selfPipeAdaption); + getListTreeData(); }); </script> -<style scoped lang="scss"> -:deep(.el-tabs__content) { - width: 100%; - height: calc(100% - 50px); -} -.box_right_title { - background: linear-gradient(90deg, #2d81d9, #0655b4); - color: #fff; - height: 30px; - line-height: 30px; - text-align: left; - border-radius: 7px; - padding-left: 10px; - display: flex; -} -.form_m1 { - :deep(.el-form-item__label) { - color: #ffffff !important; - } -} -.setQHForm { - width: 100%; - display: flex; - justify-content: flex-start; - align-items: center; - padding-top: 10px; -} -.analyseInput_left { - width: 68px; - height: 32px; - line-height: 32px; - // border: 1px solid #cccccc; - text-align: center; - color: #666; -} -.analyseInput_right { - width: 45px; - height: 32px; - line-height: 32px; - // border: 1px solid #cccccc; - text-align: center; - color: #666; -} -.deviationInput { - width: 68px; - height: 32px; - line-height: 32px; - // border: 1px solid #cccccc; - text-align: center; - color: #666; -} -.formLabel_size { - :deep(.el-form-item__label) { - font-size: 1rem !important; - } - :deep(.el-form-item--default) { - margin-bottom: 10px !important; - line-height: 36px; - } -} -</style> +import { GetStationList } from '/@/api/dispatch/dispatch'; diff --git a/src/views/project/ch/efficiencyAnalysis/scheduling/SchedulingAnalysis.vue b/src/views/project/ch/efficiencyAnalysis/scheduling/SchedulingAnalysis.vue new file mode 100644 index 0000000..5981a17 --- /dev/null +++ b/src/views/project/ch/efficiencyAnalysis/scheduling/SchedulingAnalysis.vue @@ -0,0 +1,200 @@ +<template> + <el-row :gutter="8" class="h100"> + <el-col :span="4" :xs="24" class="h100"> + <el-card shadow="hover" class="h100 left-tree-card" v-loading="treeLoading"> + <LeftTreeByMgr :treedata="listTreeData" title-name="娉电珯鍒楄〃" :current-node-key="currentListID" @click="handleClickNode"> + </LeftTreeByMgr> + </el-card> + </el-col> + <el-col :span="20" :xs="24" class="flex-column h100"> + <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> + <el-form :inline="true" :model="queryParams" label-width="120px" :rules="queryParamsRules"> + <el-form-item label="杩涘彛姘翠綅" prop="WaterLevel"> + <el-input v-model="queryParams.WaterLevel" style="width: 180px" clearable></el-input> + </el-form-item> + <el-form-item label="鐩爣娴侀噺(m鲁/h)" prop="TargetFlow"> + <el-input v-model="queryParams.TargetFlow" style="width: 180px" clearable /> + </el-form-item> + <el-form-item label="鐩爣鍘嬪姏(MPa)" prop="TargetPressure"> + <el-input v-model="queryParams.TargetPressure" style="width: 180px" clearable /> + </el-form-item> + <el-form-item> + <el-button icon="ele-Refresh" @click="resetQuery" type="primary">璋冨害 </el-button> + </el-form-item> + </el-form> + </el-card> + <el-card class="mt8" shadow="hover"> + <div style="width: 100%; height: 100px" class="aside_main"> + <el-form :inline="true" :model="pumpPanel" label-width="120px"> + <div class="flex"> + <el-form-item label="鎬绘祦閲�"> + <el-input v-model="pumpPanel.TotalFlow" style="width: 180px" readonly></el-input> + </el-form-item> + <el-form-item label="鎬诲帇鍔�"> + <el-input v-model="pumpPanel.TotalPressure" style="width: 180px" readonly /> + </el-form-item> + <el-form-item label="鎬诲姛鐜�"> + <el-input v-model="pumpPanel.TotalPower" style="width: 180px" readonly /> + </el-form-item> + <el-form-item label="鎬绘晥鐜�"> + <el-input v-model="pumpPanel.TotalEfficiency" style="width: 180px" readonly /> + </el-form-item> + </div> + <div class="flex"> + <el-form-item label="鎬诲崈鍚ㄨ兘鑰�"> + <el-input v-model="pumpPanel.WP" style="width: 180px" readonly /> + </el-form-item> + <el-form-item label="鎬诲崟浣嶈兘鑰�"> + <el-input v-model="pumpPanel.UWP" style="width: 180px" readonly /> + </el-form-item> + <el-form-item label="寮�娉靛彴鏁�"> + <el-input v-model="pumpPanel.UWP" style="width: 180px" readonly /> + </el-form-item> + </div> + </el-form> + </div> + </el-card> + <el-card class="flex-auto scroll-table-card" shadow="hover" style="margin-top: 8px"> + <el-table + v-loading="tableLoading" + ref="draggableTableRef" + border + row-key="ID" + :row-class-name="isDragStatus ? 'cursor-move' : 'cursor-pointer'" + :cell-style="{ textAlign: 'center' }" + :header-cell-style="{ textAlign: 'center' }" + :data="tableData" + highlight-current-row + style="width: 100%" + > + <el-table-column prop="Name" label="鏈烘车" fixed="left" show-overflow-tooltip width="200" /> + <el-table-column prop="Flow" label="娴侀噺(m鲁/h)" show-overflow-tooltip width="200" /> + <el-table-column prop="Head" width="200" label="鎵▼(m)" show-overflow-tooltip /> + <el-table-column prop="Power" width="140" label="鍔熺巼(kW/h)" show-overflow-tooltip /> + <el-table-column prop="Efficiency" label="鏁堢巼(%)" show-overflow-tooltip /> + <el-table-column prop="Frequency" label="棰戠巼(hz)" show-overflow-tooltip width="140" /> + <el-table-column prop="Speed" width="140" label="杞��(rpm)" show-overflow-tooltip /> + <el-table-column prop="Status" width="140" label="鐘舵��" show-overflow-tooltip> + <template #default="{ row }"> + {{ row.Status == 0 ? '鍏�' : row.Status == 1 ? '寮�' : '/' }} + </template> + </el-table-column> + </el-table> + </el-card> + </el-col> + </el-row> +</template> + +<script setup lang="ts"> +import { ElMessage } from 'element-plus'; +import { computed, onMounted, reactive, ref } from 'vue'; +import { CalculateScheduling, GetStationList } from '/@/api/dispatch/dispatch'; +import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue'; +//#region ====================== 宸︿晶鏍戞暟鎹紝tree init ====================== +const treeLoading = ref(false); +const listTreeData = ref([]); +const currentTreeNode = ref(null); +const currentListID = computed(() => currentTreeNode.value?.ID); +const handleClickNode = (data) => { + currentTreeNode.value = data; + getTableData(); +}; +const getListTreeData = async () => { + treeLoading.value = true; + const res = await GetStationList().finally(() => { + treeLoading.value = false; + }); + if (res?.Code === 0) { + const resData = (res.Data || []) as []; + listTreeData.value = resData; + const firstListTreeNode = listTreeData.value[0]; + if (firstListTreeNode) { + handleClickNode(firstListTreeNode); + } else { + tableData.value = []; + currentTreeNode.value = null; + } + } +}; +//#endregion + +//#region ====================== 琛ㄦ牸鏁版嵁锛宼able init ====================== +const asideStatus = ref(false); +const tableLoading = ref(false); +const tableData = ref([]); +const isDragStatus = ref(false); +const getTableData = async () => { + tableLoading.value = true; + const res = await CalculateScheduling({ + StationID: parseInt(currentListID.value), + ...queryParams.value, + }).finally(() => { + tableLoading.value = false; + }); + if (res?.Code === 0) { + const resData = (res.Data || []) as []; + tableData.value = resData?.Pumps; + let obj = resData?.Station; + pumpPanel.value.TotalEfficiency = obj?.TotalEfficiency || ''; + pumpPanel.value.TotalFlow = obj?.TotalFlow || ''; + pumpPanel.value.TotalPower = obj?.TotalPower || ''; + pumpPanel.value.TotalPressure = obj?.TotalPressure || ''; + pumpPanel.value.WP = obj?.WP || ''; + pumpPanel.value.UWP = obj?.UWP || ''; + } else { + ElMessage.error('鑾峰彇澶辫触' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } +}; +//璋冨害鏌ヨ +const resetQuery = () => { + getTableData(); +}; +const queryParamsRules = reactive({ + WaterLevel: [{ required: true, message: '蹇呭~椤�', trigger: 'blur' }], + TargetFlow: [ + { + required: true, + message: '蹇呭~椤�', + trigger: 'blur', + }, + ], + TargetPressure: [ + { + required: true, + message: '蹇呭~椤�', + trigger: 'blur', + }, + ], +}); +//#endregion + +//#region ====================== 琛ㄦ牸鏌ヨ銆佹帓搴忥紝search form init ====================== +const queryParams = ref({ + WaterLevel: 19.2, + TargetFlow: 23394, + TargetPressure: 0.3355, +}); +//娉电珯淇℃伅闈㈡澘 +const pumpPanel = ref({ + TotalFlow: '', + TotalPressure: '', + TotalPower: '', + TotalEfficiency: '', + WP: '', + UWP: '', +}); +//#endregion + +onMounted(() => { + getListTreeData(); +}); +</script> +<style scoped lang="scss"> +/* 渚ц竟鏍忔牱寮� */ +.aside_main { + height: 75px !important; + transition: width 0.3s; + box-sizing: border-box; + // box-shadow: inset 0px 0px 1px #3d3d3d; +} +</style> -- Gitblit v1.9.3