You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
4.5 KiB
198 lines
4.5 KiB
<template>
|
|
<div>
|
|
<a-table
|
|
:columns="column"
|
|
:data-source="data"
|
|
bordered
|
|
:pagination="false"
|
|
:scroll="{ x: 2000, y: 480 }">
|
|
<template #title>
|
|
<a-date-picker
|
|
v-model:value="selectYear"
|
|
picker="year"
|
|
@change="changeYearData"
|
|
valueFormat="YYYY" />
|
|
</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, defineExpose } from 'vue';
|
|
import { http } from '/nerv-lib/util/http';
|
|
import { Pagination } from 'ant-design-vue';
|
|
import dayjs, { Dayjs } from 'dayjs';
|
|
import { carbonEmission } from '/@/api/carbonEmissionFactorLibrary';
|
|
defineOptions({
|
|
energyType: 'CarbonEmissions', // 与页面路由name一致缓存才可生效
|
|
components: {
|
|
'a-pagination': Pagination,
|
|
},
|
|
});
|
|
const orgId = ref('');
|
|
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
|
|
orgId.value = result;
|
|
const fetch = (api, params = { orgId }) => {
|
|
return http.post(api, params);
|
|
};
|
|
const data = ref([]);
|
|
const selectYear = ref<Dayjs>(dayjs(new Date().getFullYear().toString()));
|
|
const total = ref<number>();
|
|
const queryParams = ref({
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
year: selectYear.value.format('YYYY'),
|
|
orgId: orgId.value,
|
|
});
|
|
|
|
// 年份选择改变触发
|
|
const changeYearData = () => {
|
|
queryParams.value.year = selectYear.value;
|
|
getTableList();
|
|
};
|
|
// 表头
|
|
const column: TableColumnsType[] = [
|
|
{
|
|
title: '排放类型',
|
|
dataIndex: 'cnValue',
|
|
customCell: (record, rowIndex) => {
|
|
if (rowIndex == undefined) {
|
|
return {
|
|
rowSpan: 0,
|
|
colSpan: 0,
|
|
};
|
|
}
|
|
const rowSpan = getRowSpan('cnValue', record, data.value);
|
|
if (rowIndex != 0 && data.value[rowIndex - 1].cnValue == record.cnValue) {
|
|
return {
|
|
rowSpan: 0,
|
|
colSpan: 0,
|
|
};
|
|
}
|
|
return {
|
|
rowSpan: rowSpan,
|
|
};
|
|
},
|
|
},
|
|
{
|
|
title: '能源种类',
|
|
dataIndex: 'energyType',
|
|
},
|
|
{
|
|
title: '计量单位',
|
|
dataIndex: 'unitName',
|
|
},
|
|
{
|
|
title: '加权平均',
|
|
dataIndex: 'averageFactorValue',
|
|
},
|
|
{
|
|
title: '全年',
|
|
dataIndex: 'carbonYearly',
|
|
},
|
|
{
|
|
title: '1月',
|
|
dataIndex: 'jan',
|
|
},
|
|
{
|
|
title: '2月',
|
|
dataIndex: 'feb',
|
|
},
|
|
{
|
|
title: '3月',
|
|
dataIndex: 'mar',
|
|
},
|
|
{
|
|
title: '4月',
|
|
dataIndex: 'apr',
|
|
},
|
|
{
|
|
title: '5月',
|
|
dataIndex: 'may',
|
|
},
|
|
{
|
|
title: '6月',
|
|
dataIndex: 'jun',
|
|
},
|
|
{
|
|
title: '7月',
|
|
dataIndex: 'jul',
|
|
},
|
|
{
|
|
title: '8月',
|
|
dataIndex: 'aug',
|
|
},
|
|
{
|
|
title: '9月',
|
|
dataIndex: 'sep',
|
|
},
|
|
{
|
|
title: '10月',
|
|
dataIndex: 'oct',
|
|
},
|
|
{
|
|
title: '11月',
|
|
dataIndex: 'nov',
|
|
},
|
|
{
|
|
title: '12月',
|
|
dataIndex: 'dec',
|
|
},
|
|
];
|
|
// 合并单元格
|
|
const getRowSpan = (dataIndex: string, record: any, data: any, dependents: string[] = []) => {
|
|
let rowSpan = 1;
|
|
for (let i = data.indexOf(record) + 1; i < data.length; i++) {
|
|
let shouldMerge = true;
|
|
for (const dependent of dependents) {
|
|
if (data[i][dependent] !== record[dependent]) {
|
|
shouldMerge = false;
|
|
break;
|
|
}
|
|
}
|
|
if (shouldMerge && data[i][dataIndex] === record[dataIndex]) {
|
|
rowSpan++;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
return rowSpan;
|
|
};
|
|
// 获取表格数据
|
|
const getTableList = () => {
|
|
fetch(carbonEmission.carbonEmissionStatistics, queryParams.value).then((res) => {
|
|
data.value = res.data;
|
|
total.value = res.data.length;
|
|
});
|
|
};
|
|
defineExpose({
|
|
getTableList,
|
|
});
|
|
// 分页器
|
|
const onChange = (pageNumber: number, size: number) => {
|
|
queryParams.value.pageNum = pageNumber;
|
|
queryParams.value.pageSize = size;
|
|
getTableList();
|
|
};
|
|
</script>
|
|
<style scoped lang="less">
|
|
:deep(.ant-table-title) {
|
|
display: flex;
|
|
}
|
|
:deep(.ant-table-container) {
|
|
padding: 0px 16px;
|
|
}
|
|
</style>
|
|
<style scoped>
|
|
th.column-money,
|
|
td.column-money {
|
|
text-align: right !important;
|
|
}
|
|
</style>
|
|
|