!68 三相不平衡分析
Merge pull request !68 from Alioo/develop_alioo
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | // è·åç¨è½åå
ä¸çæä¸ªçµè¡¨çåçå æ°æ°æ® |
| | | export function powerFactorAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/powerFactorAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | // è·åä¸ç¸ä¸å¹³è¡¡åææ°æ® |
| | | export function threePhaseUnbalanceAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/threePhaseUnbalanceAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | // è·åç¨è½åå
ä¸ççµè¡¨å表 |
| | | export function listElectricityMeter(params) { |
| | | return request({ |
| | | url: "/meter/listElectricityMeter", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | // è·åç¨è½åå
ä¸çæä¸ªçµè¡¨çè´è·åææ°æ® |
| | | export function loadAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/loadAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | // è·åç¨è½åå
ä¸ççµè¡¨å表-å®ä½è¡¨ |
| | | export function listElectricityDeviceMeter(params) { |
| | | return request({ |
| | | url: "/loadAnalysis/listElectricMeter", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | |
| | | .el-tabs__item.is-active { |
| | | color: #409EFF; |
| | | } |
| | | |
| | | .el-descriptions__cell { |
| | | background: transparent; |
| | | color: #fff !important; |
| | | } |
| | | .el-descriptions__body { |
| | | background-color: transparent; |
| | | color: #fff; |
| | | } |
| | | .el-descriptions__label { |
| | | color: #fff !important; |
| | | background-color: #1a235d !important; |
| | | } |
| | | } |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="chart-item"> |
| | | <div id="ChartDom" style="width: 100%; height: 100%"></div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | const emit = defineEmits() |
| | | const props = defineProps({ |
| | | chartData: { |
| | | type: Object, |
| | | default: () => {}, |
| | | }, |
| | | chartType: { |
| | | type: String, |
| | | default: "line", // bar |
| | | }, |
| | | }) |
| | | |
| | | watch( |
| | | () => props.chartData, |
| | | (val) => { |
| | | console.log("watch", val) |
| | | initChart() |
| | | } |
| | | ) |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | initChart() |
| | | } |
| | | ) |
| | | |
| | | onMounted(() => { |
| | | initChart() |
| | | }) |
| | | |
| | | function initChart(value) { |
| | | console.log("initChart", props.chartData) |
| | | if (!props.chartData.xAxis) { |
| | | return |
| | | } |
| | | const chartDom = document.getElementById("ChartDom") |
| | | if (echarts.getInstanceByDom(chartDom)) { |
| | | echarts.dispose(chartDom) |
| | | } |
| | | const myChart = echarts.init(chartDom) |
| | | // å¤çå¤ç³»åæ°æ® |
| | | const series = props.chartData.series.map((item) => ({ |
| | | name: item.name, |
| | | type: props.chartType, // æ ¹æ®ä¼ å
¥ç±»å渲æ |
| | | data: item.data, |
| | | barWidth: "16", |
| | | itemStyle: { |
| | | borderRadius: [15, 15, 0, 0], |
| | | }, |
| | | smooth: true, // å¯ç¨å¹³æ»æ²çº¿ |
| | | })) |
| | | let option = { |
| | | title: { |
| | | // text: props.chartData.title, |
| | | left: "40", |
| | | textStyle: { |
| | | color: "#2979ff", |
| | | }, |
| | | }, |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | }, |
| | | legend: { |
| | | data: props.chartData.series.map((item) => item.name), // å¾ä¾æ°æ® |
| | | icon: "rect", |
| | | right: 40, |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | grid: { |
| | | top: "40", |
| | | left: "40", |
| | | right: "40", |
| | | bottom: "20", |
| | | containLabel: true, |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | data: props.chartData.xAxis, |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | axisLine: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | ], |
| | | series: series, |
| | | } |
| | | setTimeout(() => { |
| | | myChart.setOption(option) |
| | | }, 200) |
| | | |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .chart-item { |
| | | width: 100%; |
| | | height: 360px !important; |
| | | margin-top: 0px; |
| | | padding-top: 20px; |
| | | } |
| | | </style> |
| | |
| | | } |
| | | ) |
| | | |
| | | onMounted(() => { |
| | | initChart() |
| | | }) |
| | | |
| | | function initChart(value) { |
| | | const chartDom = document.getElementById("ChartDom") |
| | | if (echarts.getInstanceByDom(chartDom)) { |
| | |
| | | <div class="top-right"> |
| | | <div class="right-name"> |
| | | {{ item.energyName }} |
| | | <span v-if="item.energyUnit" class="unit">({{ item.energyUnit }})</span> |
| | | </div> |
| | | <div class="right-value"> |
| | | <span> {{ item.count }}</span> |
| | | <span class="unit">{{ item.energyUnit }}</span> |
| | | <!-- <span class="unit">{{ item.energyUnit }}</span> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | display: flex; |
| | | |
| | | .top-icon { |
| | | width: 69px; |
| | | height: 69px; |
| | | width: 50px; |
| | | height: 50px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | margin-left: 12px; |
| | | |
| | | .right-name { |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | .unit { |
| | | margin-left: 2px; |
| | | font-size: 16px; |
| | | font-weight: normal; |
| | | } |
| | | } |
| | | |
| | | .right-value { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-è´è·åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©çµè¡¨" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="activeKey = 1" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="activeKey = 2" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <div style="padding: 16px"> |
| | | <el-descriptions title="" size="large" border :column="2"> |
| | | <el-descriptions-item label="æå¤§è´è·"> |
| | | {{ detailData.max || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="åçæ¶é´"> |
| | | {{ detailData.maxTime || "" }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="æå°è´è·"> |
| | | {{ detailData.min || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="åçæ¶é´"> |
| | | {{ detailData.minTime || "--" }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="å¹³åè´è·"> |
| | | {{ detailData.avg || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="è´è·ç"> |
| | | {{ detailData.rate || "" }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </div> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData" v-loading="loading" height="calc(100vh - 400px)"> |
| | | <el-table-column label="æ¶é´" prop="timeCode" align="center" /> |
| | | <el-table-column label="çµè¡¨åç§°" prop="name" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType == 'DAY'" label="è´è·" prop="value" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="æå¤§è´è·" prop="max" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="æå°è´è·" prop="min" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="å¹³åè´è·" prop="avg" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="è´è·ç(%)" prop="rate" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { loadAnalysisDetail, listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | const { period } = proxy.useDict("period") |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const activeKey = ref(1) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | setTimeout(() => { |
| | | handleTimeType(period.value[0].value) |
| | | }, 200) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | loadAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | tableData.value = res.data.itemList |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | if (queryParams.value.timeType == "DAY") { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "è´è·å¼", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "å¹³åè´è·", |
| | | data: itemList.map((item) => { |
| | | return item.avg |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.max |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå°è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.min |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-åçå æ°åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©çµè¡¨" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="chart-box" v-loading="loading"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <div style="padding: 16px"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column label="åçå æ°" prop="title" align="center" /> |
| | | <el-table-column label="æå¤§å¼" prop="max" align="center" /> |
| | | <el-table-column label="æå°å¼" prop="min" align="center" /> |
| | | <el-table-column label="å¹³åå¼" prop="avg" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { powerFactorAnalysisDetail } from "@/api/powerquality/electric-power-factor/api.js" |
| | | import { listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: "DAY", |
| | | dataTime: proxy.dayjs(new Date()).format("YYYY-MM-DD"), |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | powerFactorAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | let detailData = res.data.detail |
| | | tableData.value = [ |
| | | { |
| | | title: "åçå¼", |
| | | max: detailData.max, |
| | | min: detailData.min, |
| | | avg: detailData.avg, |
| | | }, |
| | | { |
| | | title: "åçæ¶é´", |
| | | max: detailData.maxTime, |
| | | min: detailData.minTime, |
| | | avg: "--", |
| | | }, |
| | | ] |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | lineChartData.value = { |
| | | title: "åçå æ°åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(0, 2) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "åçå æ°", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-ä¸ç¸ä¸å¹³è¡¡åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select |
| | | v-model="queryParams.meterId" |
| | | placeholder="éæ©çµè¡¨" |
| | | clearable |
| | | style="width: 200px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div style="padding: 0 16px"> |
| | | <el-tabs v-model="activeTabKey" type="card"> |
| | | <el-tab-pane label="çµåä¸å¹³è¡¡" name="1"> </el-tab-pane> |
| | | <el-tab-pane label="çµæµä¸å¹³è¡¡" name="2"> </el-tab-pane> |
| | | </el-tabs> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="switchBtnType(1)" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="switchBtnType(2)" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <el-table :data="tableData1" v-loading="loading"> |
| | | <el-table-column label="ç±»å" prop="type" align="center" /> |
| | | <el-table-column label="ä¸é¡¹ä¸å¹³è¡¡æå¼" prop="value" align="center" /> |
| | | <el-table-column label="åçæ¶é´" prop="time" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="A项çµå(V)" prop="valueA" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="B项çµå(V)" prop="valueB" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="C项çµå(V)" prop="valueC" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Aé¡¹çµæµ(A)" prop="valueA" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Bé¡¹çµæµ(A)" prop="valueB" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Cé¡¹çµæµ(A)" prop="valueC" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData2" v-loading="loading" height="calc(100vh - 400px)"> |
| | | <el-table-column label="æ¶é´" prop="timeCode" align="center" /> |
| | | <el-table-column label="çµè¡¨åç§°" prop="name" align="center" /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="A项çµå(V)" |
| | | prop="valueA" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="B项çµå(V)" |
| | | prop="valueB" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="C项çµå(V)" |
| | | prop="valueC" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Aé¡¹çµæµ(A)" |
| | | prop="valueA" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Bé¡¹çµæµ(A)" |
| | | prop="valueB" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Cé¡¹çµæµ(A)" |
| | | prop="valueC" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType !== 'DAY'" |
| | | label="æå¤§å¼(V)" |
| | | prop="max" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType !== 'DAY'" |
| | | label="æå°å¼(V)" |
| | | prop="min" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType !== 'DAY'" |
| | | label="æå¤§å¼(A)" |
| | | prop="max" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType !== 'DAY'" |
| | | label="æå°å¼(A)" |
| | | prop="min" |
| | | align="center" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { threePhaseUnbalanceAnalysisDetail } from "@/api/powerquality/electricThreePhase/api.js" |
| | | import { listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | const { period } = proxy.useDict("period") |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const activeTabKey = ref("1") |
| | | const activeKey = ref(1) |
| | | const activeKeyA = ref(1) |
| | | const loading = ref(false) |
| | | const tableData1 = ref([]) |
| | | const tableData2 = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value) |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | |
| | | function switchBtnType(e) { |
| | | activeKey.value = e |
| | | if (e === 1) { |
| | | getList() |
| | | } |
| | | } |
| | | // å表 |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | requestType: activeTabKey.value == 1 ? 0 : 1, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | threePhaseUnbalanceAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | // detailData.value = res.data.detail |
| | | loading.value = false |
| | | let itemList = res.data.itemList || [] |
| | | let detail = res.data.detail || {} |
| | | if (detail) { |
| | | tableData1.value = [ |
| | | { |
| | | type: "æå¤§å¼", |
| | | value: detail.max || "--", |
| | | time: detail.maxTime, |
| | | valueA: detail.valueMaxA, |
| | | valueB: detail.valueMaxB, |
| | | valueC: detail.valueMaxC, |
| | | }, |
| | | { |
| | | type: "æå°å¼", |
| | | value: detail.min, |
| | | time: detail.minTime, |
| | | valueA: detail.valueMinA, |
| | | valueB: detail.valueMinB, |
| | | valueC: detail.valueMinC, |
| | | }, |
| | | ] |
| | | } |
| | | |
| | | let tableDataWithMeterList = itemList |
| | | tableData2.value = |
| | | tableDataWithMeterList.map((item) => { |
| | | // item.timeCode = this.formatTime(item.timeCode) |
| | | return item |
| | | }) || [] |
| | | |
| | | // chart |
| | | let chartData = {} |
| | | chartData.title = "ä¸ç¸ä¸å¹³è¡¡åæ" |
| | | if (queryParams.value.timeType !== "DAY") { |
| | | chartData = { |
| | | title: "ä¸ç¸ä¸å¹³è¡¡åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "æå°å¼", |
| | | data: itemList.map((item) => { |
| | | return item.min === "--" || !item.min ? null : Number(item.min) |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§å¼", |
| | | data: itemList.map((item) => { |
| | | return item.max === "--" || !item.max ? null : Number(item.max) |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | chartData = { |
| | | title: "ä¸ç¸ä¸å¹³è¡¡åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "Aç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueA === "--" || !item.valueA ? null : Number(item.valueA) |
| | | }), |
| | | }, |
| | | { |
| | | name: "Bç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueB === "--" || !item.valueB ? null : Number(item.valueB) |
| | | }), |
| | | }, |
| | | { |
| | | name: "Cç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueC === "--" || !item.valueC ? null : Number(item.valueC) |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | lineChartData.value = chartData |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |