zhitan-vue/src/api/buildingConsumption/api.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zhitan-vue/src/components/Echarts/LineChart.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zhitan-vue/src/layout/components/Settings/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zhitan-vue/src/views/buildingConsumption/branch-build/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zhitan-vue/src/views/buildingConsumption/item-build/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zhitan-vue/src/api/buildingConsumption/api.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ import request from "@/utils/request" export default { // å项ç¨è½åæ itemizedEnergyAnalysis(data) { return request({ url: "/itemizedEnergyAnalysis/list", method: "GET", params: data, }) }, // æ¯è·¯ç¨è½åæ branchanalysis(data) { return request({ url: "/branchanalysis/list", method: "GET", params: data, }) }, } zhitan-vue/src/components/Echarts/LineChart.vue
@@ -68,7 +68,7 @@ console.log("initChart", series) let option = { title: { // text: props.chartData.title, text: props.chartData.title || "", left: "40", textStyle: { color: "#2979ff", zhitan-vue/src/layout/components/Settings/index.vue
@@ -6,20 +6,42 @@ <div class="setting-drawer-block-checbox"> <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')"> <img src="@/assets/images/dark.svg" alt="dark" /> <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;"> <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block"> <i aria-label="徿 : check" class="anticon anticon-check"> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class> <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" /> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class > <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" /> </svg> </i> </div> </div> <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')"> <img src="@/assets/images/light.svg" alt="light" /> <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;"> <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block"> <i aria-label="徿 : check" class="anticon anticon-check"> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class> <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" /> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class > <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" /> </svg> </i> </div> @@ -28,7 +50,7 @@ <div class="drawer-item"> <span>主é¢é¢è²</span> <span class="comp-style"> <el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange"/> <el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange" /> </span> </div> <el-divider /> @@ -75,66 +97,65 @@ <el-button type="primary" plain icon="DocumentAdd" @click="saveSetting">ä¿åé ç½®</el-button> <el-button plain icon="Refresh" @click="resetSetting">éç½®é ç½®</el-button> </el-drawer> </template> <script setup> import variables from '@/assets/styles/variables.module.scss' import axios from 'axios' import { ElLoading, ElMessage } from 'element-plus' import { useDynamicTitle } from '@/utils/dynamicTitle' import useAppStore from '@/store/modules/app' import useSettingsStore from '@/store/modules/settings' import usePermissionStore from '@/store/modules/permission' import { handleThemeStyle } from '@/utils/theme' import variables from "@/assets/styles/variables.module.scss" import axios from "axios" import { ElLoading, ElMessage } from "element-plus" import { useDynamicTitle } from "@/utils/dynamicTitle" import useAppStore from "@/store/modules/app" import useSettingsStore from "@/store/modules/settings" import usePermissionStore from "@/store/modules/permission" import { handleThemeStyle } from "@/utils/theme" const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance() const appStore = useAppStore() const settingsStore = useSettingsStore() const permissionStore = usePermissionStore() const showSettings = ref(false); const theme = ref(settingsStore.theme); const sideTheme = ref(settingsStore.sideTheme); const storeSettings = computed(() => settingsStore); const predefineColors = ref(["#409EFF", "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585"]); const showSettings = ref(false) const theme = ref(settingsStore.theme) const sideTheme = ref(settingsStore.sideTheme) const storeSettings = computed(() => settingsStore) const predefineColors = ref(["#409EFF", "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585"]) /** æ¯å¦éè¦topnav */ function topNavChange(val) { if (!val) { appStore.toggleSideBarHide(false); permissionStore.setSidebarRouters(permissionStore.defaultRoutes); appStore.toggleSideBarHide(false) permissionStore.setSidebarRouters(permissionStore.defaultRoutes) } } function themeChange(val) { settingsStore.theme = val; handleThemeStyle(val); settingsStore.theme = val handleThemeStyle(val) } function handleTheme(val) { settingsStore.sideTheme = val; sideTheme.value = val; settingsStore.sideTheme = val sideTheme.value = val } function saveSetting() { proxy.$modal.loading("æ£å¨ä¿åå°æ¬å°ï¼è¯·ç¨å..."); proxy.$modal.loading("æ£å¨ä¿åå°æ¬å°ï¼è¯·ç¨å...") let layoutSetting = { "topNav": storeSettings.value.topNav, "tagsView": storeSettings.value.tagsView, "fixedHeader": storeSettings.value.fixedHeader, "sidebarLogo": storeSettings.value.sidebarLogo, "dynamicTitle": storeSettings.value.dynamicTitle, "sideTheme": storeSettings.value.sideTheme, "theme": storeSettings.value.theme }; localStorage.setItem("layout-setting", JSON.stringify(layoutSetting)); topNav: storeSettings.value.topNav, tagsView: storeSettings.value.tagsView, fixedHeader: storeSettings.value.fixedHeader, sidebarLogo: storeSettings.value.sidebarLogo, dynamicTitle: storeSettings.value.dynamicTitle, sideTheme: storeSettings.value.sideTheme, theme: storeSettings.value.theme, } localStorage.setItem("layout-setting", JSON.stringify(layoutSetting)) setTimeout(proxy.$modal.closeLoading(), 1000) } function resetSetting() { proxy.$modal.loading("æ£å¨æ¸ é¤è®¾ç½®ç¼åå¹¶å·æ°ï¼è¯·ç¨å..."); proxy.$modal.loading("æ£å¨æ¸ é¤è®¾ç½®ç¼åå¹¶å·æ°ï¼è¯·ç¨å...") localStorage.removeItem("layout-setting") setTimeout("window.location.reload()", 1000) } function openSetting() { showSettings.value = true; showSettings.value = true } defineExpose({ @@ -142,7 +163,7 @@ }) </script> <style lang='scss' scoped> <style lang="scss" scoped> .setting-drawer-title { margin-bottom: 12px; color: rgba(0, 0, 0, 0.85); @@ -202,4 +223,4 @@ margin: -3px 8px 0px 0px; } } </style> </style> zhitan-vue/src/views/buildingConsumption/branch-build/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,306 @@ <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 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="energyType"> <el-select v-model="queryParams.energyType" placeholder="è½æºç±»å" style="width: 120px"> <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList" :key="item.enersno" @click="handleEnergyType(item)" /> </el-select> </el-form-item> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> <!-- <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> --> </el-form-item> <!-- <el-form-item> <el-button type="warning" icon="Download" @click="handleExport"> å¯¼åº </el-button> </el-form-item> --> </el-form> </div> <div style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" v-loading="loading" > <BaseCard :title="queryParams.nodeName + '-æ¯è·¯ç¨è½åæ'"> <div class=""> <!-- <div id="Chart1" /> --> <line-chart ref="LineChartRef" :chartData="lineChartData" /> </div> </BaseCard> <BaseCard :title="queryParams.nodeName + '-æ¯è·¯ç¨è½è¯¦æ -' + queryParams.enername"> <div class="table-box"> <!-- show-summary --> <el-table :data="departmentList"> <el-table-column label="èç¹" align="center" key="nodeName" prop="nodeName" fixed="left" /> <el-table-column label="å计" align="center" key="total" prop="total" width="100" fixed="left" /> <template v-if="queryParams.timeType == 'DAY'"> <el-table-column v-for="index in 24" :key="index" :label="index - 1 + 'æ¶'" align="center" min-width="130" > <template #default="scope">{{ scope.row[`value${index - 1}`] }}</template> </el-table-column> </template> <template v-if="queryParams.timeType == 'MONTH'"> <el-table-column v-for="index in 31" :key="index" :label="index + 'æ¥'" align="center" min-width="130" > <template #default="scope">{{ scope.row[`value${index}`] }}</template> </el-table-column> </template> <template v-if="queryParams.timeType == 'YEAR'"> <el-table-column v-for="index in 12" :key="index" :label="index + 'æ'" align="center" min-width="130" > <template #default="scope">{{ scope.row[`value${index}`] }}</template> </el-table-column> </template> </el-table> </div> </BaseCard> <!-- </el-col> </el-row> --> </div> </div> </div> </div> </template> <script setup name="branchanalysis"> import buildApi from "@/api/buildingConsumption/api" import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" import LineChart from "@/components/Echarts/LineChart.vue" const { proxy } = getCurrentInstance() const { period } = proxy.useDict("period") import { useRoute } from "vue-router" import useSettingsStore from "@/store/modules/settings" const settingsStore = useSettingsStore() watch( () => settingsStore.sideTheme, (val) => { getList() } ) const energyTypeList = ref(undefined) const departmentList = ref([]) const loading = ref(false) const data = reactive({ queryParams: { nodeId: null, timeType: null, dataTime: null, energyType: null, }, query: { modelCode: null, }, }) const { queryParams, query } = toRefs(data) const itemBuildData = ref({}) const LineChartRef = ref() const lineChartData = ref({}) /** èç¹åå»äºä»¶ */ function handleNodeClick(data) { queryParams.value.nodeId = data.id queryParams.value.nodeName = data.label handleTimeType(period.value[0].value) listEnergyTypeList().then((res) => { energyTypeList.value = res.data queryParams.value.energyType = energyTypeList.value[0].enersno queryParams.value.enername = energyTypeList.value[0].enername queryParams.value.muid = energyTypeList.value[0].muid handleQuery() }) } function handleTimeType(e) { queryParams.value.timeType = e queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") handleQuery() } function handleEnergyType(item) { queryParams.value.enername = item.enername queryParams.value.muid = item.muid handleQuery() } function getList() { loading.value = true buildApi .branchanalysis( proxy.addDateRange({ ...queryParams.value, ...query.value, }) ) .then((res) => { if (!!res.code && res.code == 200) { loading.value = false let yData = [] let xData = [] if (!!res.data) { departmentList.value = [res.data] || [] } let dataList = res.data || {} if (queryParams.value.timeType == "DAY") { for (let i = 0; i < 24; i++) { xData.push(i + "æ¶") yData.push(dataList[`value${i}`]) } } else if (queryParams.value.timeType == "MONTH") { for (let i = 0; i < 31; i++) { xData.push(i + "æ¥") yData.push(dataList[`value${i}`]) } } else { for (let i = 0; i < 12; i++) { xData.push(i + "æ") yData.push(dataList[`value${i}`]) } } lineChartData.value = { title: queryParams.value.muid, xAxis: xData, series: [ { name: queryParams.value.enername, data: yData, }, ], } } }) .catch(() => { loading.value = false }) } function numFilter(value) { // æªåå½åæ°æ®å°å°æ°ç¹åçå ä½ let realVal = "" if (!isNaN(value) && value !== "" && value !== null) { realVal = parseFloat(value).toFixed(2) } else { realVal = "--" } return realVal } // è½è对æ¯åæ-ç§å®¤è½èåæ-æç´¢ function handleQuery() { getList() } // è½è对æ¯åæ-ç§å®¤è½èåæ-éç½® function resetQuery() { proxy.resetForm("queryRef") handleTimeType(period.value[0].value) queryParams.value.energyType = energyTypeList.value[0].enersno queryParams.value.enername = energyTypeList.value[0].enername queryParams.value.muid = energyTypeList.value[0].muid queryParams.value.analysisType = "YOY" handleQuery() } // è½è对æ¯åæ-ç§å®¤è½èåæ-å¯¼åº function handleExport() { proxy.download( "consumptionanalysis/energyExport", { ...queryParams.value, ...query.value, }, `${queryParams.value.nodeName}-ååºè½èåæ_${new Date().getTime()}.xlsx` ) } </script> <style scoped lang="scss"> @import "@/assets/styles/page.scss"; .el-tabs { padding: 0 12px; margin-top: 12px; :deep(.el-tabs__header) { margin: 0; } } .themeDark { .build-sum { border: 1px solid #8c8b8b; display: flex; justify-content: space-between; align-items: center; color: #fff; .build-sum-item { width: 25%; text-align: center; padding: 12px 0; .count { font-size: 24px; font-weight: 600; margin-top: 8px; color: #409eff; } } } } .themeLight { .build-sum { border: 1px solid #eaeaea; display: flex; justify-content: space-between; align-items: center; color: #333; .build-sum-item { width: 25%; text-align: center; padding: 12px 0; .count { font-size: 24px; font-weight: 600; margin-top: 8px; color: #409eff; } } } } </style> zhitan-vue/src/views/buildingConsumption/item-build/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,326 @@ <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 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="energyType"> <el-select v-model="queryParams.energyType" placeholder="è½æºç±»å" style="width: 120px"> <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList" :key="item.enersno" @click="handleEnergyType(item)" /> </el-select> </el-form-item> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> <!-- <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> --> </el-form-item> <!-- <el-form-item> <el-button type="warning" icon="Download" @click="handleExport"> å¯¼åº </el-button> </el-form-item> --> </el-form> </div> <div style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" v-loading="loading" > <BaseCard :title="queryParams.nodeName + '-å项ç¨è½åæ'"> <div class="build-sum"> <div class="build-sum-item"> <div>æ»ç¨é/{{ queryParams.muid }}</div> <div class="count">{{ itemBuildData.total || 0 }}</div> </div> <div class="build-sum-item"> <div>æå¤§ç¨é/{{ queryParams.muid }}</div> <div class="count">{{ itemBuildData.max || 0 }}</div> </div> <div class="build-sum-item"> <div>æå°ç¨é/{{ queryParams.muid }}</div> <div class="count">{{ itemBuildData.min || 0 }}</div> </div> <div class="build-sum-item"> <div>å¹³åç¨é/{{ queryParams.muid }}</div> <div class="count">{{ itemBuildData.avg || 0 }}</div> </div> </div> <div class=""> <!-- <div id="Chart1" /> --> <line-chart ref="LineChartRef" :chartData="lineChartData" /> </div> </BaseCard> <BaseCard :title="queryParams.nodeName + '-å项ç¨è½è¯¦æ -' + queryParams.enername"> <div class="table-box"> <!-- show-summary --> <el-table :data="departmentList"> <el-table-column label="èç¹" align="center" key="nodeName" prop="nodeName" fixed="left" /> <el-table-column label="å计" align="center" key="total" prop="total" width="100" fixed="left" /> <template v-if="queryParams.timeType == 'DAY'"> <el-table-column v-for="index in 24" :key="index" :label="index - 1 + 'æ¶'" align="center" min-width="130" > <template #default="scope">{{ scope.row[`value${index - 1}`] }}</template> </el-table-column> </template> <template v-if="queryParams.timeType == 'MONTH'"> <el-table-column v-for="index in 31" :key="index" :label="index + 'æ¥'" align="center" min-width="130" > <template #default="scope">{{ scope.row[`value${index}`] }}</template> </el-table-column> </template> <template v-if="queryParams.timeType == 'YEAR'"> <el-table-column v-for="index in 12" :key="index" :label="index + 'æ'" align="center" min-width="130" > <template #default="scope">{{ scope.row[`value${index}`] }}</template> </el-table-column> </template> </el-table> </div> </BaseCard> <!-- </el-col> </el-row> --> </div> </div> </div> </div> </template> <script setup name="itemBuild"> import buildApi from "@/api/buildingConsumption/api" import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" import LineChart from "@/components/Echarts/LineChart.vue" const { proxy } = getCurrentInstance() const { period } = proxy.useDict("period") import { useRoute } from "vue-router" import useSettingsStore from "@/store/modules/settings" const settingsStore = useSettingsStore() watch( () => settingsStore.sideTheme, (val) => { getList() } ) const energyTypeList = ref(undefined) const departmentList = ref([]) const loading = ref(false) const data = reactive({ queryParams: { nodeId: null, timeType: null, dataTime: null, energyType: null, }, query: { modelCode: null, }, }) const { queryParams, query } = toRefs(data) const itemBuildData = ref({}) const LineChartRef = ref() const lineChartData = ref({}) /** èç¹åå»äºä»¶ */ function handleNodeClick(data) { queryParams.value.nodeId = data.id queryParams.value.nodeName = data.label handleTimeType(period.value[0].value) listEnergyTypeList().then((res) => { energyTypeList.value = res.data queryParams.value.energyType = energyTypeList.value[0].enersno queryParams.value.enername = energyTypeList.value[0].enername queryParams.value.muid = energyTypeList.value[0].muid handleQuery() }) } function handleTimeType(e) { queryParams.value.timeType = e queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") handleQuery() } function handleEnergyType(item) { queryParams.value.enername = item.enername queryParams.value.muid = item.muid handleQuery() } function getList() { loading.value = true buildApi .itemizedEnergyAnalysis( proxy.addDateRange({ ...queryParams.value, ...query.value, }) ) .then((res) => { if (!!res.code && res.code == 200) { loading.value = false itemBuildData.value = res.data let yData = [] let xData = [] let title = [] if (!!res.data.dataList) { departmentList.value = res.data.dataList || [] } let dataList = res.data.dataList || [] if (queryParams.value.timeType == "DAY") { for (let i = 0; i < 24; i++) { xData.push(i + "æ¶") yData.push(dataList[0][`value${i}`]) } } else if (queryParams.value.timeType == "MONTH") { for (let i = 0; i < 31; i++) { xData.push(i + "æ¥") yData.push(dataList[0][`value${i}`]) } } else { for (let i = 0; i < 12; i++) { xData.push(i + "æ") yData.push(dataList[0][`value${i}`]) } } lineChartData.value = { title: queryParams.value.muid, xAxis: xData, series: [ { name: queryParams.value.enername, data: yData, }, ], } } }) .catch(() => { loading.value = false }) } function numFilter(value) { // æªåå½åæ°æ®å°å°æ°ç¹åçå ä½ let realVal = "" if (!isNaN(value) && value !== "" && value !== null) { realVal = parseFloat(value).toFixed(2) } else { realVal = "--" } return realVal } // è½è对æ¯åæ-ç§å®¤è½èåæ-æç´¢ function handleQuery() { getList() } // è½è对æ¯åæ-ç§å®¤è½èåæ-éç½® function resetQuery() { proxy.resetForm("queryRef") handleTimeType(period.value[0].value) queryParams.value.energyType = energyTypeList.value[0].enersno queryParams.value.enername = energyTypeList.value[0].enername queryParams.value.muid = energyTypeList.value[0].muid queryParams.value.analysisType = "YOY" handleQuery() } // è½è对æ¯åæ-ç§å®¤è½èåæ-å¯¼åº function handleExport() { proxy.download( "consumptionanalysis/energyExport", { ...queryParams.value, ...query.value, }, `${queryParams.value.nodeName}-ååºè½èåæ_${new Date().getTime()}.xlsx` ) } </script> <style scoped lang="scss"> @import "@/assets/styles/page.scss"; .el-tabs { padding: 0 12px; margin-top: 12px; :deep(.el-tabs__header) { margin: 0; } } .themeDark { .build-sum { border: 1px solid #8c8b8b; display: flex; justify-content: space-between; align-items: center; color: #fff; .build-sum-item { width: 25%; text-align: center; padding: 12px 0; .count { font-size: 24px; font-weight: 600; margin-top: 8px; color: #409eff; } } } } .themeLight { .build-sum { border: 1px solid #eaeaea; display: flex; justify-content: space-between; align-items: center; color: #333; .build-sum-item { width: 25%; text-align: center; padding: 12px 0; .count { font-size: 24px; font-weight: 600; margin-top: 8px; color: #409eff; } } } } </style>