|
|
@ -4,7 +4,7 @@ |
|
|
|
<div class="top"> |
|
|
|
<a-form style="width: 100%;margin: 0 auto;"> |
|
|
|
<div class="ns-form-title"> |
|
|
|
<div class="title">2024年济阳站碳盘查报告</div> |
|
|
|
<div class="title">{{props.year}}年济阳站碳盘查报告</div> |
|
|
|
<div class="standard"> |
|
|
|
<span>适用标准:ISO 14064-1</span> |
|
|
|
<a-button type="primary" style="margin-left: 12px;" @click="openCategoryConfig">类别配置</a-button> |
|
|
@ -54,7 +54,7 @@ |
|
|
|
<div class="right"> |
|
|
|
<div style="display:flex;"> |
|
|
|
<div class="ns-table-title ns-title-extra-box">排放源</div> |
|
|
|
<a-button type="primary" style="margin-left: 12px;">返回</a-button> |
|
|
|
<a-button type="primary" style="margin-left: 12px;" @click="changeParentData">返回</a-button> |
|
|
|
</div> |
|
|
|
<div style="display: flex;" v-if="fillInPage"> |
|
|
|
<div class="mainLeft"> |
|
|
@ -95,6 +95,12 @@ |
|
|
|
<a-button type="primary" @click="downLoadVoucher">凭证</a-button> |
|
|
|
</template> |
|
|
|
<template #bodyCell="{ column, text, record }"> |
|
|
|
<template v-if="column.dataIndex === 'dataSources'"> |
|
|
|
<span v-if="record.dataSources">{{ record.dataSources.label }}</span> |
|
|
|
</template> |
|
|
|
<template v-if="column.dataIndex === 'carbonSource'"> |
|
|
|
<span v-if="record.carbonSource">{{ record.carbonSource.label }}</span> |
|
|
|
</template> |
|
|
|
<template v-if="column.key === 'action'"> |
|
|
|
<span> |
|
|
|
<a @click="edit(record)">编辑</a> |
|
|
@ -249,41 +255,40 @@ |
|
|
|
> |
|
|
|
<a-row> |
|
|
|
<a-col :span="12"> |
|
|
|
<a-form-item ref="name" label="数据来源" name="dateRange"> |
|
|
|
<a-form-item ref="name" label="数据来源" name="dataSources"> |
|
|
|
<a-select |
|
|
|
ref="select" |
|
|
|
v-model:value="editFormState.dateRange" |
|
|
|
@change="handleChange" |
|
|
|
v-model:value="editFormState.dataSources" |
|
|
|
@change="changeSelect" |
|
|
|
> |
|
|
|
<a-select-option value="jack">Jack</a-select-option> |
|
|
|
<a-select-option value="lucy">Lucy</a-select-option> |
|
|
|
<a-select-option value="1">自行推估</a-select-option> |
|
|
|
<a-select-option value="2">定期量测</a-select-option> |
|
|
|
<a-select-option value="3">自动测量</a-select-option> |
|
|
|
</a-select> |
|
|
|
</a-form-item> |
|
|
|
</a-col> |
|
|
|
<a-col :span="12"> |
|
|
|
<a-form-item ref="name" label="消耗量" name="emissionFactors"> |
|
|
|
<ns-input v-model:value="editFormState.emissionFactors" disabled /> |
|
|
|
<a-form-item ref="name" label="消耗量" name="consumption"> |
|
|
|
<ns-input v-model:value="editFormState.consumption" :disabled="canEdit" /> |
|
|
|
</a-form-item> |
|
|
|
</a-col> |
|
|
|
</a-row> |
|
|
|
<a-row> |
|
|
|
<a-row v-if="automatic"> |
|
|
|
<a-col :span="12"> |
|
|
|
<a-form-item ref="name" label="采集节点" name="dateRange"> |
|
|
|
<a-select |
|
|
|
ref="select" |
|
|
|
v-model:value="editFormState.dateRange" |
|
|
|
@change="handleChange" |
|
|
|
<a-form-item ref="name" label="采集节点" name="collectionNode"> |
|
|
|
<a-tree-select |
|
|
|
v-model:value="editFormState.collectionNode" |
|
|
|
:tree-line="true" |
|
|
|
:tree-data="collectingNodes" |
|
|
|
> |
|
|
|
<a-select-option value="jack">Jack</a-select-option> |
|
|
|
<a-select-option value="lucy">Lucy</a-select-option> |
|
|
|
</a-select> |
|
|
|
</a-tree-select> |
|
|
|
</a-form-item> |
|
|
|
</a-col> |
|
|
|
</a-row> |
|
|
|
<a-row> |
|
|
|
<a-col :span="12"> |
|
|
|
<a-form-item ref="name" label="因子值" name="emissionFactors"> |
|
|
|
<ns-input v-model:value="editFormState.emissionFactors" disabled /> |
|
|
|
<a-form-item ref="name" label="因子值" name="factorId"> |
|
|
|
<ns-input v-model:value="editFormState.factorId" disabled /> |
|
|
|
</a-form-item> |
|
|
|
</a-col> |
|
|
|
<a-col :span="12"> |
|
|
@ -300,7 +305,7 @@ |
|
|
|
rowKey="id" |
|
|
|
:scroll="{ y: 400 }" |
|
|
|
style="margin-bottom: 10px;" |
|
|
|
:rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectionChange, type: 'radio' }" |
|
|
|
:rowSelection="{ selectedRowKeys: selectedRowKeysEdit, onChange: onSelectionChangeEdit, type: 'radio' }" |
|
|
|
:pagination="false"> |
|
|
|
</a-table> |
|
|
|
<a-pagination |
|
|
@ -333,20 +338,32 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script lang="ts" setup> |
|
|
|
import { ref, watch, toRaw } from 'vue'; |
|
|
|
import { ref, watch, toRaw, defineEmits } from 'vue'; |
|
|
|
import { http } from '/nerv-lib/util/http'; |
|
|
|
import { Pagination, Modal, message } from 'ant-design-vue'; |
|
|
|
import type { TreeProps,TableColumnsType,UploadChangeParam } from 'ant-design-vue'; |
|
|
|
import { EditOutlined,PlusCircleOutlined,MinusCircleOutlined,UploadOutlined } from '@ant-design/icons-vue'; |
|
|
|
import * as echarts from 'echarts'; |
|
|
|
import { columns,voucherColumns,drawerColumns } from '../config'; |
|
|
|
import { voucherColumns,drawerColumns } from '../config'; |
|
|
|
import { energyConsumption,carbonEmissionFactorLibrary,carbonInventoryCheck } from '/@/api/carbonEmissionFactorLibrary'; |
|
|
|
import { group } from '/@/api/deviceManage'; |
|
|
|
defineOptions({ |
|
|
|
energyType: 'fillInPage', // 与页面路由name一致缓存才可生效 |
|
|
|
components: { |
|
|
|
'a-pagination': Pagination, |
|
|
|
}, |
|
|
|
}); |
|
|
|
// 父组件id和年份 |
|
|
|
const props = defineProps({ |
|
|
|
reportId: { |
|
|
|
type: Number |
|
|
|
}, |
|
|
|
year: { |
|
|
|
type: String |
|
|
|
} |
|
|
|
}) |
|
|
|
console.log(props,'xxy'); |
|
|
|
|
|
|
|
const orgId = ref(''); |
|
|
|
const result = JSON.parse(sessionStorage.getItem('ORGID')!); |
|
|
|
orgId.value = result; |
|
|
@ -440,16 +457,17 @@ |
|
|
|
const categoryId = ref() |
|
|
|
const onSelectL = (selectedKey: string[], info: any) => { |
|
|
|
selectedKeysL.value = selectedKey; |
|
|
|
categoryId.value = info.node.id |
|
|
|
categoryId.value = info.node.conId |
|
|
|
formState.value.categoryId = categoryId.value |
|
|
|
getEmissionSourceTree() |
|
|
|
}; |
|
|
|
// 获取碳盘查报告树 |
|
|
|
const selectedIds = ref([]); |
|
|
|
const getReportTree = () => { |
|
|
|
fetch(carbonInventoryCheck.getCategoryTree).then((res) => { |
|
|
|
fetch(carbonInventoryCheck.getCategoryTree,{reportId:props.reportId,orgId:orgId.value}).then((res) => { |
|
|
|
gData.value = res.data |
|
|
|
if(res.data.length > 0){ |
|
|
|
categoryId.value = res.data[0].id |
|
|
|
categoryId.value = res.data[0].conId |
|
|
|
formState.value.categoryId = categoryId.value |
|
|
|
selectedIds.value = getAllIds(gData.value); |
|
|
|
} |
|
|
@ -460,29 +478,41 @@ |
|
|
|
const getAllIds = (nodes: TreeNode[]): number[] => { |
|
|
|
return nodes.flatMap(node => [node.id, ...(node.children ? getAllIds(node.children) : [])]); |
|
|
|
}; |
|
|
|
// 填报表格数据 |
|
|
|
const data = [...Array(12)].map((_, i) => ({ |
|
|
|
key: i, |
|
|
|
name: 'John Brown', |
|
|
|
age: i + 1, |
|
|
|
street: 'Lake Park', |
|
|
|
building: 'C', |
|
|
|
number: 2035, |
|
|
|
companyAddress: 'Lake Street 42', |
|
|
|
companyName: 'SoftLake Co', |
|
|
|
gender: 'M', |
|
|
|
})); |
|
|
|
// 右侧树数据 |
|
|
|
const treeData = ref<TreeProps['treeData']>(genData); |
|
|
|
// 获取数据 |
|
|
|
const getTableId = ref() |
|
|
|
const getEmissionSourceTree = () => { |
|
|
|
fetch(carbonInventoryCheck.getInventoryTree, { categoryId: categoryId.value }).then((res) => { |
|
|
|
treeData.value = res.data |
|
|
|
getTableId.value = res.data[0].id |
|
|
|
if(res.data.length != 0){ |
|
|
|
getPFYTableList(getTableId.value) |
|
|
|
getTableHeardUnit(getTableId.value) |
|
|
|
}else{ |
|
|
|
data.value = [] |
|
|
|
columns.value[1].title = '消耗量' |
|
|
|
columns.value[2].title = '碳排因子' |
|
|
|
columns.value[3].title = '排放量' |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
// 排放源树中被选中的树节点 |
|
|
|
const onSelectR = (selectedKey: string[], info: any) => { |
|
|
|
selectedKeysR.value = selectedKey; |
|
|
|
getTableId.value = info.selectedNodes[0].id |
|
|
|
getPFYTableList(getTableId.value) |
|
|
|
getTableHeardUnit(getTableId.value) |
|
|
|
}; |
|
|
|
// 获取表头单位 |
|
|
|
const getTableHeardUnit = (id) => { |
|
|
|
fetch(carbonInventoryCheck.findUnitById, { id: id }).then((res) => { |
|
|
|
if (res.data) { |
|
|
|
columns.value[1].title = '消耗量【' + res.data.unit + '】' |
|
|
|
columns.value[2].title = '碳排因子【' + res.data.carbonEmission + '】' |
|
|
|
columns.value[3].title = '排放量【' + res.data.carbonUnits + '】' |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
const expandedKeysR = ref<string[]>([]); |
|
|
|
const selectedKeysR = ref<string[]>(['0-0']); |
|
|
@ -550,7 +580,8 @@ |
|
|
|
const labelCol = { span: 5 }; |
|
|
|
const wrapperCol = { span: 19 }; |
|
|
|
const formState = ref({ |
|
|
|
orgId: orgId.value |
|
|
|
orgId: orgId.value, |
|
|
|
year: props.year |
|
|
|
}) |
|
|
|
// 计量单位的变量 |
|
|
|
const measurementUnit = ref([]) |
|
|
@ -628,6 +659,7 @@ |
|
|
|
} |
|
|
|
message.success('操作成功!'); |
|
|
|
getEmissionSourceTree(); |
|
|
|
getPFYTableList(res.data.id) |
|
|
|
}); |
|
|
|
} |
|
|
|
}) |
|
|
@ -635,6 +667,65 @@ |
|
|
|
console.log('error', error); |
|
|
|
}); |
|
|
|
}; |
|
|
|
// 填报表格数据 |
|
|
|
const data = ref([]) |
|
|
|
// 填报页表头 |
|
|
|
const columns = ref([ |
|
|
|
{ |
|
|
|
title: '日期', |
|
|
|
dataIndex: 'acquisitionDate', |
|
|
|
key: 'acquisitionDate', |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '消耗量', |
|
|
|
children: [ |
|
|
|
{ |
|
|
|
title: '数据来源', |
|
|
|
dataIndex: 'dataSources', |
|
|
|
key: 'dataSources', |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '数值', |
|
|
|
dataIndex: 'consumption', |
|
|
|
key: 'consumption', |
|
|
|
}, |
|
|
|
], |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '碳排因子', |
|
|
|
children: [ |
|
|
|
{ |
|
|
|
title: '数据来源', |
|
|
|
dataIndex: 'carbonSource', |
|
|
|
key: 'carbonSource', |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '数值', |
|
|
|
dataIndex: 'emissionFactors', |
|
|
|
key: 'emissionFactors', |
|
|
|
}, |
|
|
|
], |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '排放量', |
|
|
|
dataIndex: 'emissions', |
|
|
|
key: 'emissions', |
|
|
|
fixed: 'right', |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '操作', |
|
|
|
dataIndex: 'action', |
|
|
|
key: 'action', |
|
|
|
width: 80, |
|
|
|
fixed: 'right', |
|
|
|
} |
|
|
|
]); |
|
|
|
// 获取table数据 |
|
|
|
const getPFYTableList = (id) => { |
|
|
|
fetch(carbonInventoryCheck.getDetailsList , {inventoryId:id}).then((res) => { |
|
|
|
data.value = res.data |
|
|
|
}); |
|
|
|
}; |
|
|
|
const editUnit = (data) => { |
|
|
|
getDictData() |
|
|
|
addTreeNodeVisible.value = true; |
|
|
@ -734,6 +825,11 @@ |
|
|
|
}) |
|
|
|
const newTableData = ref([]) |
|
|
|
const total = ref<number>() |
|
|
|
const selectedRowKeysEdit = ref([]); |
|
|
|
const onSelectionChangeEdit = (selectedKeys, selectedRows) => { |
|
|
|
selectedRowKeysEdit.value = selectedKeys; |
|
|
|
editFormState.value.factorId = selectedKeys |
|
|
|
}; |
|
|
|
const queryParams = ref({ |
|
|
|
pageNum: 1, |
|
|
|
pageSize: 10, |
|
|
@ -744,8 +840,14 @@ |
|
|
|
pageNum: 1, |
|
|
|
pageSize: 999 |
|
|
|
}) |
|
|
|
const edit = () => { |
|
|
|
const edit = (record) => { |
|
|
|
getDictList() |
|
|
|
getNewTable() |
|
|
|
editFormState.value.id = record.id |
|
|
|
editFormState.value.dataSources = record.dataSources.value |
|
|
|
editFormState.value.consumption = record.emissions |
|
|
|
editFormState.value.collectionNode = record.carbonSource.value |
|
|
|
editFormState.value.factorId = record.emissionFactors |
|
|
|
editData.value = true |
|
|
|
}; |
|
|
|
const getNewTable = () => { |
|
|
@ -754,6 +856,32 @@ |
|
|
|
total.value = res.data.total |
|
|
|
}); |
|
|
|
}; |
|
|
|
// 数据来源选择框改变 |
|
|
|
const canEdit = ref(false); |
|
|
|
const automatic = ref(false); |
|
|
|
const changeSelect = (value) => { |
|
|
|
if(value === '3'){ |
|
|
|
canEdit.value = true |
|
|
|
automatic.value = true |
|
|
|
} |
|
|
|
}; |
|
|
|
// 定义采集节点数的变量 |
|
|
|
const collectingNodes = ref<TreeSelectProps['treeData']>([]); |
|
|
|
const getDictList = () => { |
|
|
|
// 获取自动采集节点的数据 |
|
|
|
fetch(group.queryDeviceGroupTree, { energyType: 'ELECTRICITY_USAGE',orgId: orgId.value }).then((res) => { |
|
|
|
collectingNodes.value = res.data |
|
|
|
collectingNodes.value = collectingNodes.value.map(item => ({ |
|
|
|
value: item.id, |
|
|
|
label: item.pointName, |
|
|
|
children: item.children ? item.children.map(child => ({ |
|
|
|
value: child.id, |
|
|
|
label: child.pointName |
|
|
|
})) : [] |
|
|
|
})); |
|
|
|
}); |
|
|
|
}; |
|
|
|
// 上传附件 |
|
|
|
const handleChange = (info: UploadChangeParam) => { |
|
|
|
if (info.file.status !== 'uploading') { |
|
|
|
console.log(info.file, info.fileList); |
|
|
@ -769,8 +897,30 @@ |
|
|
|
const headers = { |
|
|
|
authorization: 'authorization-text', |
|
|
|
}; |
|
|
|
// 编辑数据提交 |
|
|
|
const submitEditData = () => { |
|
|
|
editFormRef.value |
|
|
|
.validate() |
|
|
|
.then(() => { |
|
|
|
console.log('values', editFormState, toRaw(editFormState)); |
|
|
|
editFormState.value.factorId = editFormState.value.factorId.join(',') |
|
|
|
fetch(carbonInventoryCheck.updateTable, editFormState.value).then((res) => { |
|
|
|
editData.value = false |
|
|
|
getPFYTableList(getTableId.value) |
|
|
|
}) |
|
|
|
}) |
|
|
|
.catch(error => { |
|
|
|
console.log('error', error); |
|
|
|
}); |
|
|
|
}; |
|
|
|
const onCloseEditData = () => { |
|
|
|
editData.value = false |
|
|
|
editFormState.value = { |
|
|
|
orgId: orgId.value, |
|
|
|
} |
|
|
|
selectedRowKeysEdit.value = [] |
|
|
|
canEdit.value = false |
|
|
|
automatic.value = false |
|
|
|
}; |
|
|
|
// 分页器 |
|
|
|
const onChange = (pageNumber: number,size: number) => { |
|
|
@ -1179,6 +1329,11 @@ |
|
|
|
chartInstance = echarts.init(tplxChart.value); |
|
|
|
chartInstance.setOption(option); |
|
|
|
}; |
|
|
|
// 点击返回 |
|
|
|
const emit = defineEmits(['change-data']) |
|
|
|
const changeParentData = () => { |
|
|
|
emit('change-data', true,false); |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|
<style lang="less" scoped> |
|
|
|