fks-yangshouda
4 months ago
11 changed files with 832 additions and 324 deletions
@ -0,0 +1,13 @@ |
|||||
|
export enum deviceMonitor { |
||||
|
// getTableList = '/carbon/emission/factor/queryCarbonFactorPage',
|
||||
|
// addNewData = '/carbon/emission/factor/creatOrUpdate',
|
||||
|
// editUser = '/carbon-smart/api/user/edit',
|
||||
|
// frozen = '/carbon-smart/api/user/frozen',
|
||||
|
// resetPwd = '/carbon-smart/api/user/resetPwd',
|
||||
|
// del = '/carbon-smart/api/user/del',
|
||||
|
// batchDel = '/carbon-smart/api/user/batchDel',
|
||||
|
// getCarbonFactorTree = '/carbon/emission/type/getCarbonFactorTree',
|
||||
|
// queryDeptTree = '/carbon-smart/api/user/queryDeptTree',
|
||||
|
// queryUserPerList = '/carbon-smart/api/user/queryUserPerList',
|
||||
|
getDeviceGraph = '/carbon-smart/api/monitor/getDeviceGraph', |
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
export const tableColumns = [ |
||||
|
{ |
||||
|
title: '序号', |
||||
|
customRender: (text: any) => { |
||||
|
return text.index + 1; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
title: '时间', |
||||
|
dataIndex: 'areaName', |
||||
|
}, |
||||
|
{ |
||||
|
title: '温度(℃)', |
||||
|
dataIndex: 'point', |
||||
|
}, |
||||
|
{ |
||||
|
title: '湿度(%)', |
||||
|
dataIndex: 'date', |
||||
|
}, |
||||
|
{ |
||||
|
title: 'CO2浓度(ppm)', |
||||
|
dataIndex: 'areaName', |
||||
|
}, |
||||
|
{ |
||||
|
title: 'PM2.5(μg/m³)', |
||||
|
dataIndex: 'point', |
||||
|
}, |
||||
|
{ |
||||
|
title: 'TVOC(mg/m³)', |
||||
|
dataIndex: 'date', |
||||
|
}, |
||||
|
{ |
||||
|
title: 'TVOC(mg/m³)', |
||||
|
dataIndex: '光照度(lux)', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,250 @@ |
|||||
|
<!-- eslint-disable vue/v-on-event-hyphenation --> |
||||
|
<template> |
||||
|
<div> |
||||
|
<a-table :columns="tableColumns" :data-source="data" bordered :pagination="false"> |
||||
|
<template #title> |
||||
|
<div |
||||
|
style="display: flex; align-items: center; justify-content: space-between; width: 100%"> |
||||
|
<div style="display: flex; align-items: center; width: 85%"> |
||||
|
<div style="width: 10%">数据报表</div> |
||||
|
|
||||
|
<a-select |
||||
|
v-model:value="frequencyValue" |
||||
|
placeholder="请选择频率" |
||||
|
style="width: 17%; margin-left: 10px" |
||||
|
:options="frequencyOptions" /> |
||||
|
<!-- <a-date-picker style="width: 13%; margin-left: 10px" v-model:value="timeValue" /> --> |
||||
|
<a-range-picker |
||||
|
:value="hackValue || dateRange" |
||||
|
:disabled-date="disabledDate" |
||||
|
@change="onChangeDate" |
||||
|
@openChange="onOpenChange" |
||||
|
@calendarChange="onCalendarChange" |
||||
|
style="width: 17%; margin-left: 10px" |
||||
|
:placeholder="['请选择日期', '请选择日期']" /> |
||||
|
<a-button type="primary" style="margin-left: 10px" @click="getSelect"> 查询 </a-button> |
||||
|
</div> |
||||
|
<a-button type="primary"> 导出 </a-button> |
||||
|
</div> |
||||
|
</template> |
||||
|
</a-table> |
||||
|
<a-pagination |
||||
|
:current="queryParams.pageNum" |
||||
|
:total="total" |
||||
|
:page-size="queryParams.pageSize" |
||||
|
style="display: flex; justify-content: center; margin-top: 16px" |
||||
|
:show-size-changer="true" |
||||
|
:show-quick-jumper="true" |
||||
|
@change="onChange" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script lang="ts" setup> |
||||
|
import { ref, onMounted } from 'vue'; |
||||
|
// import { http } from '/nerv-lib/util/http'; |
||||
|
import { Pagination, SelectProps, TreeSelectProps, TableColumnType } from 'ant-design-vue'; |
||||
|
import { tableColumns } from './config'; |
||||
|
import type { Dayjs } from 'dayjs'; |
||||
|
// import { energyConsumption } from '/@/api/carbonEmissionFactorLibrary'; |
||||
|
defineOptions({ |
||||
|
energyType: 'AverageData', // 与页面路由name一致缓存才可生效 |
||||
|
components: { |
||||
|
'a-pagination': Pagination, |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const typeList = ref(); |
||||
|
// 采集频率 |
||||
|
const frequencyValue = ref<string | undefined>(); |
||||
|
|
||||
|
// 采集频率list |
||||
|
const frequencyOptions = ref<SelectProps['options']>([]); |
||||
|
|
||||
|
const treeData2 = ref<TreeSelectProps['treeData']>([]); |
||||
|
const data = ref([]); |
||||
|
// let tableColumns = ref<TableColumnType[]>([]); |
||||
|
|
||||
|
const total = ref<number>(); |
||||
|
const queryParams = ref({ |
||||
|
pageNum: 1, |
||||
|
pageSize: 10, |
||||
|
}); |
||||
|
const orgId = ref(''); |
||||
|
const result = JSON.parse(sessionStorage.getItem('ORGID')!); |
||||
|
orgId.value = result; |
||||
|
|
||||
|
type RangeValue = [Dayjs, Dayjs]; |
||||
|
const dates = ref<RangeValue>(); |
||||
|
const hackValue = ref<RangeValue>(); |
||||
|
const dateRange = ref<[Dayjs, Dayjs] | undefined>(); |
||||
|
|
||||
|
const onChangeDate = (val: RangeValue) => { |
||||
|
dateRange.value = val; |
||||
|
}; |
||||
|
const onOpenChange = (open: boolean) => { |
||||
|
if (open) { |
||||
|
dates.value = [] as any; |
||||
|
hackValue.value = [] as any; |
||||
|
} else { |
||||
|
hackValue.value = undefined; |
||||
|
} |
||||
|
}; |
||||
|
const disabledDate = (current: Dayjs) => { |
||||
|
if (!dates.value || (dates.value as any).length === 0) { |
||||
|
return false; |
||||
|
} |
||||
|
const tooLate = dates.value[0] && current.diff(dates.value[0], 'days') > 2; |
||||
|
const tooEarly = dates.value[1] && dates.value[1].diff(current, 'days') > 2; |
||||
|
return tooEarly || tooLate; |
||||
|
}; |
||||
|
const onCalendarChange = (val: RangeValue) => { |
||||
|
dates.value = val; |
||||
|
}; |
||||
|
// 获取表格数据 |
||||
|
const getTableList = () => { |
||||
|
// fetch(energyConsumption.pageList, queryParams.value).then((res) => { |
||||
|
// data.value = res.data.records; |
||||
|
// total.value = res.data.total; |
||||
|
// }); |
||||
|
}; |
||||
|
onMounted(() => { |
||||
|
frequencyOptions.value = [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '30分钟', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '小时', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '天', |
||||
|
}, |
||||
|
{ |
||||
|
value: '4', |
||||
|
label: '月', |
||||
|
}, |
||||
|
{ |
||||
|
value: '5', |
||||
|
label: '年', |
||||
|
}, |
||||
|
]; |
||||
|
typeList.value = [ |
||||
|
{ |
||||
|
id: 1, |
||||
|
value: '温度', |
||||
|
}, |
||||
|
{ |
||||
|
id: 2, |
||||
|
value: 'CO2浓度', |
||||
|
}, |
||||
|
{ |
||||
|
id: 3, |
||||
|
value: 'PM2.5', |
||||
|
}, |
||||
|
{ |
||||
|
id: 4, |
||||
|
value: '光照度', |
||||
|
}, |
||||
|
{ |
||||
|
id: 5, |
||||
|
value: 'TVOC', |
||||
|
}, |
||||
|
{ |
||||
|
id: 6, |
||||
|
value: '湿度', |
||||
|
}, |
||||
|
]; |
||||
|
treeData2.value = [ |
||||
|
{ |
||||
|
label: '办公区', |
||||
|
value: '0-0', |
||||
|
children: [ |
||||
|
{ |
||||
|
label: '办公一区', |
||||
|
value: '0-0-0', |
||||
|
}, |
||||
|
{ |
||||
|
label: '办公二区', |
||||
|
value: '0-0-1', |
||||
|
}, |
||||
|
{ |
||||
|
label: '办公三区', |
||||
|
value: '0-0-2', |
||||
|
}, |
||||
|
{ |
||||
|
label: '办公四区', |
||||
|
value: '0-0-3', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅', |
||||
|
value: '0-1', |
||||
|
|
||||
|
children: [ |
||||
|
{ |
||||
|
label: '站厅一区', |
||||
|
value: '0-1-0', |
||||
|
// disabled: true, |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅二区', |
||||
|
value: '0-1-1', |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅三区', |
||||
|
value: '0-1-2', |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅四区', |
||||
|
value: '0-1-3', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
]; |
||||
|
// let tableColumnsB = [ |
||||
|
// { |
||||
|
// title: '1:00', |
||||
|
// dataIndex: '1:00', |
||||
|
// }, |
||||
|
// { |
||||
|
// title: '2:00', |
||||
|
// dataIndex: '2:00', |
||||
|
// }, |
||||
|
// { |
||||
|
// title: '3:00', |
||||
|
// dataIndex: '3:00', |
||||
|
// }, |
||||
|
// { |
||||
|
// title: '4:00', |
||||
|
// dataIndex: '4:00', |
||||
|
// }, |
||||
|
// ]; |
||||
|
// let columnA: any[] = [...tableColumnsA]; |
||||
|
// columnA.push(...tableColumnsB); |
||||
|
// tableColumns.value = columnA; |
||||
|
}); |
||||
|
|
||||
|
getTableList(); |
||||
|
// 分页器 |
||||
|
const onChange = (pageNumber: number, size: number) => { |
||||
|
queryParams.value.pageNum = pageNumber; |
||||
|
queryParams.value.pageSize = size; |
||||
|
getTableList(); |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped lang="less"> |
||||
|
::v-deep .ant-table-title { |
||||
|
display: flex; |
||||
|
} |
||||
|
::v-deep .ant-table-container { |
||||
|
padding: 0px 16px; |
||||
|
} |
||||
|
</style> |
||||
|
<style scoped> |
||||
|
th.column-money, |
||||
|
td.column-money { |
||||
|
text-align: right !important; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,20 @@ |
|||||
|
export const tableColumns = [ |
||||
|
{ |
||||
|
title: '序号', |
||||
|
customRender: (text: any) => { |
||||
|
return text.index + 1; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
title: '区域名称', |
||||
|
dataIndex: 'areaName', |
||||
|
}, |
||||
|
{ |
||||
|
title: '点位', |
||||
|
dataIndex: 'point', |
||||
|
}, |
||||
|
{ |
||||
|
title: '日期', |
||||
|
dataIndex: 'date', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,243 @@ |
|||||
|
<!-- eslint-disable vue/multi-word-component-names --> |
||||
|
<template> |
||||
|
<div> |
||||
|
<a-table |
||||
|
:columns="tableColumns" |
||||
|
:data-source="data" |
||||
|
bordered |
||||
|
:pagination="false" |
||||
|
:scroll="{ x: 100 }"> |
||||
|
<template #title> |
||||
|
<div |
||||
|
style="display: flex; align-items: center; justify-content: space-between; width: 100%"> |
||||
|
<div style="display: flex; align-items: center; width: 85%"> |
||||
|
<div style="width: 10%">数据报表</div> |
||||
|
<a-select |
||||
|
v-model:value="typeValue" |
||||
|
placeholder="请选择环境参数" |
||||
|
style="width: 15%" |
||||
|
:options="typeList" /> |
||||
|
<a-tree-select |
||||
|
v-model:value="quyuvalue" |
||||
|
style="width: 15%; margin-left: 10px" |
||||
|
:tree-data="treeData2" |
||||
|
tree-checkable |
||||
|
allow-clear |
||||
|
placeholder="请选择区域" |
||||
|
tree-node-filter-prop="label" |
||||
|
:maxTagCount="1" /> |
||||
|
<a-select |
||||
|
v-model:value="frequencyValue" |
||||
|
placeholder="请选择采集频率" |
||||
|
style="width: 15%; margin-left: 10px" |
||||
|
:options="frequencyOptions" /> |
||||
|
<a-date-picker style="width: 15%; margin-left: 10px" v-model:value="timeValue" /> |
||||
|
<a-button type="primary" style="margin-left: 10px" @click="getSelect"> 查询 </a-button> |
||||
|
</div> |
||||
|
<a-button type="primary"> 导出 </a-button> |
||||
|
</div> |
||||
|
</template> |
||||
|
</a-table> |
||||
|
<a-pagination |
||||
|
:current="queryParams.pageNum" |
||||
|
:total="total" |
||||
|
:page-size="queryParams.pageSize" |
||||
|
style="display: flex; justify-content: center; margin-top: 16px" |
||||
|
:show-size-changer="true" |
||||
|
:show-quick-jumper="true" |
||||
|
@change="onChange" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script lang="ts" setup> |
||||
|
import { ref, onMounted, defineOptions } from 'vue'; |
||||
|
// import { http } from '/nerv-lib/util/http'; |
||||
|
import { Pagination, SelectProps, TreeSelectProps, TableColumnType } from 'ant-design-vue'; |
||||
|
import { tableColumns as tableColumnsA } from './config'; |
||||
|
import type { Dayjs } from 'dayjs'; |
||||
|
// import { energyConsumption } from '/@/api/carbonEmissionFactorLibrary'; |
||||
|
defineOptions({ |
||||
|
energyType: 'HistoryData', // 与页面路由name一致缓存才可生效 |
||||
|
components: { |
||||
|
'a-pagination': Pagination, |
||||
|
}, |
||||
|
}); |
||||
|
const typeList = ref(); |
||||
|
const typeValue = ref(); |
||||
|
const quyuvalue = ref<string[]>([]); |
||||
|
// 采集频率 |
||||
|
const frequencyValue = ref<string | undefined>(); |
||||
|
|
||||
|
// 采集频率list |
||||
|
const frequencyOptions = ref<SelectProps['options']>([]); |
||||
|
|
||||
|
const treeData2 = ref<TreeSelectProps['treeData']>([]); |
||||
|
const data = ref([]); |
||||
|
const timeValue = ref<Dayjs>(); |
||||
|
let tableColumns = ref<TableColumnType[]>([]); |
||||
|
|
||||
|
const total = ref<number>(); |
||||
|
const queryParams = ref({ |
||||
|
pageNum: 1, |
||||
|
pageSize: 10, |
||||
|
}); |
||||
|
const orgId = ref(''); |
||||
|
const result = JSON.parse(sessionStorage.getItem('ORGID')!); |
||||
|
orgId.value = result; |
||||
|
// const fetch = (api, params = { orgId }) => { |
||||
|
// return http.post(api, params); |
||||
|
// }; |
||||
|
|
||||
|
// 年份选择改变触发 |
||||
|
// const changeYearData = () => { |
||||
|
// queryParams.value.year = selectYear.value.format('YYYY'); |
||||
|
// getTableList(); |
||||
|
// }; |
||||
|
// 获取表格数据 |
||||
|
const getTableList = () => { |
||||
|
// fetch(energyConsumption.pageList, queryParams.value).then((res) => { |
||||
|
// data.value = res.data.records; |
||||
|
// total.value = res.data.total; |
||||
|
// }); |
||||
|
}; |
||||
|
onMounted(() => { |
||||
|
frequencyOptions.value = [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '5分钟', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '10分钟', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '30分钟', |
||||
|
}, |
||||
|
{ |
||||
|
value: '4', |
||||
|
label: '1小时', |
||||
|
}, |
||||
|
{ |
||||
|
value: '5', |
||||
|
label: '天', |
||||
|
}, |
||||
|
]; |
||||
|
typeList.value = [ |
||||
|
{ |
||||
|
id: 1, |
||||
|
value: '温度', |
||||
|
}, |
||||
|
{ |
||||
|
id: 2, |
||||
|
value: 'CO2浓度', |
||||
|
}, |
||||
|
{ |
||||
|
id: 3, |
||||
|
value: 'PM2.5', |
||||
|
}, |
||||
|
{ |
||||
|
id: 4, |
||||
|
value: '光照度', |
||||
|
}, |
||||
|
{ |
||||
|
id: 5, |
||||
|
value: 'TVOC', |
||||
|
}, |
||||
|
{ |
||||
|
id: 6, |
||||
|
value: '湿度', |
||||
|
}, |
||||
|
]; |
||||
|
treeData2.value = [ |
||||
|
{ |
||||
|
label: '办公区', |
||||
|
value: '0-0', |
||||
|
children: [ |
||||
|
{ |
||||
|
label: '办公一区', |
||||
|
value: '0-0-0', |
||||
|
}, |
||||
|
{ |
||||
|
label: '办公二区', |
||||
|
value: '0-0-1', |
||||
|
}, |
||||
|
{ |
||||
|
label: '办公三区', |
||||
|
value: '0-0-2', |
||||
|
}, |
||||
|
{ |
||||
|
label: '办公四区', |
||||
|
value: '0-0-3', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅', |
||||
|
value: '0-1', |
||||
|
|
||||
|
children: [ |
||||
|
{ |
||||
|
label: '站厅一区', |
||||
|
value: '0-1-0', |
||||
|
// disabled: true, |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅二区', |
||||
|
value: '0-1-1', |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅三区', |
||||
|
value: '0-1-2', |
||||
|
}, |
||||
|
{ |
||||
|
label: '站厅四区', |
||||
|
value: '0-1-3', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
]; |
||||
|
let tableColumnsB = [ |
||||
|
{ |
||||
|
title: '1:00', |
||||
|
dataIndex: '1:00', |
||||
|
}, |
||||
|
{ |
||||
|
title: '2:00', |
||||
|
dataIndex: '2:00', |
||||
|
}, |
||||
|
{ |
||||
|
title: '3:00', |
||||
|
dataIndex: '3:00', |
||||
|
}, |
||||
|
{ |
||||
|
title: '4:00', |
||||
|
dataIndex: '4:00', |
||||
|
}, |
||||
|
]; |
||||
|
let columnA: any[] = [...tableColumnsA]; |
||||
|
columnA.push(...tableColumnsB); |
||||
|
tableColumns.value = columnA; |
||||
|
}); |
||||
|
|
||||
|
getTableList(); |
||||
|
// 分页器 |
||||
|
const onChange = (pageNumber: number, size: number) => { |
||||
|
queryParams.value.pageNum = pageNumber; |
||||
|
queryParams.value.pageSize = size; |
||||
|
getTableList(); |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped lang="less"> |
||||
|
::v-deep .ant-table-title { |
||||
|
display: flex; |
||||
|
} |
||||
|
::v-deep .ant-table-container { |
||||
|
padding: 0px 16px; |
||||
|
} |
||||
|
</style> |
||||
|
<style scoped> |
||||
|
th.column-money, |
||||
|
td.column-money { |
||||
|
text-align: right !important; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue