zhaohy 3 months ago
parent
commit
360ec9e6e8
  1. BIN
      hx-ai-intelligent/public/asset/file/groupList.xlsx
  2. 1
      hx-ai-intelligent/src/api/carbonEmissionFactorLibrary.ts
  3. 28
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonAssets/carbonAssetsDetail/index.vue
  4. 88
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionFactorLibrary/index.vue
  5. 50
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/carbonEmissions/index.vue
  6. 2
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/config.ts
  7. 31
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/energyConsumption/index.vue
  8. 27
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/index.vue
  9. 20
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/quickCalculation/index.vue
  10. 3
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/config.ts
  11. 54
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/fillInPage/index.vue
  12. 22
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/index.vue
  13. 15
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/all/index.vue
  14. 12
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/category/categoryDeatil.vue
  15. 30
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/category/index.vue
  16. 28
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/index.vue
  17. 3
      hx-ai-intelligent/src/view/equipmentControl/airConditionControlSystem/index.vue
  18. 5
      hx-ai-intelligent/src/view/equipmentControl/airConditionControlSystem/tabs1.less
  19. 3
      hx-ai-intelligent/src/view/equipmentControl/lightingManage/indexs.vue
  20. 5
      hx-ai-intelligent/src/view/equipmentControl/lightingManage/tabs1.less
  21. 2
      hx-ai-intelligent/src/view/equipmentControl/lightingManage/tabs1.vue
  22. 2
      hx-ai-intelligent/src/view/equipmentControl/lightingManage/tabs3.vue
  23. 2
      hx-ai-intelligent/src/view/equipmentControl/style/dialogStyle.less
  24. 5
      hx-ai-intelligent/src/view/equipmentControl/ventilationSystem/components/tabs1.less
  25. 9
      hx-ai-intelligent/src/view/equipmentControl/ventilationSystem/index.vue
  26. 5
      hx-ai-intelligent/src/view/equipmentControl/waterSystem/component/logTab.vue
  27. 8
      hx-ai-intelligent/src/view/equipmentControl/waterSystem/index.vue
  28. 6
      hx-ai-intelligent/src/view/equipmentManage/group/config.ts
  29. 3
      hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue
  30. 2
      hx-ai-intelligent/src/view/monitor/energyMonitor/graphGraph/index.vue
  31. 2
      hx-ai-intelligent/src/view/monitor/energyMonitor/page.vue
  32. 19
      hx-ai-intelligent/src/view/monitor/energyMonitor/tree/index.vue
  33. 2
      hx-ai-intelligent/src/view/monitor/environmentMonitor/index.vue
  34. 3
      lib/component/table/table.vue

BIN
hx-ai-intelligent/public/asset/file/groupList.xlsx

Binary file not shown.

1
hx-ai-intelligent/src/api/carbonEmissionFactorLibrary.ts

@ -12,6 +12,7 @@ export enum carbonEmissionFactorLibrary {
import = '/carbon-smart/api/carbon/emission/factor/import', import = '/carbon-smart/api/carbon/emission/factor/import',
export = '/carbon-smart/api/carbon/emission/factor/export', export = '/carbon-smart/api/carbon/emission/factor/export',
gasAndDatabase = '/carbon-smart/api/carbon/emission/factor/gasAndDatabase', gasAndDatabase = '/carbon-smart/api/carbon/emission/factor/gasAndDatabase',
checkDel = '/carbon-smart/api/carbon/emission/factor/checkDel',
// 单位管理 // 单位管理
dictionaryUnitManagement = '/carbon-smart/client/dict/dictionaryUnitManagement', dictionaryUnitManagement = '/carbon-smart/client/dict/dictionaryUnitManagement',
findOutermost = '/carbon-smart/client/dict/findOutermost', findOutermost = '/carbon-smart/client/dict/findOutermost',

28
hx-ai-intelligent/src/view/carbonEmissionManage/carbonAssets/carbonAssetsDetail/index.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="search"> <div class="search">
<a-card style="border-radius: 12px"> <a-card>
<div class="ns-form-title"> <div class="ns-form-title">
<div class="title">查询</div> <div class="title">查询</div>
<div class="operation"> <div class="operation">
@ -483,6 +483,7 @@
{ {
title: '序号', title: '序号',
width: 80, width: 80,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
@ -491,6 +492,7 @@
title: '资产类别', title: '资产类别',
dataIndex: 'accountType', dataIndex: 'accountType',
width: 100, width: 100,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
}, },
@ -499,6 +501,7 @@
title: '交易方式', title: '交易方式',
dataIndex: 'transactionTypeName', dataIndex: 'transactionTypeName',
width: 100, width: 100,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
}, },
@ -507,6 +510,7 @@
title: '交易日期', title: '交易日期',
dataIndex: 'transactionDate', dataIndex: 'transactionDate',
width: 100, width: 100,
align: 'center',
sorter: (a, b) => a.transactionDate - b.transactionDate, sorter: (a, b) => a.transactionDate - b.transactionDate,
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
@ -516,6 +520,7 @@
title: '本期收入(tCO2)', title: '本期收入(tCO2)',
dataIndex: 'income', dataIndex: 'income',
width: 150, width: 150,
align: 'center',
sorter: (a, b) => a.income - b.income, sorter: (a, b) => a.income - b.income,
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
@ -525,6 +530,7 @@
title: '本期支出(tCO2)', title: '本期支出(tCO2)',
dataIndex: 'expenditure', dataIndex: 'expenditure',
width: 150, width: 150,
align: 'center',
sorter: (a, b) => a.expenditure - b.expenditure, sorter: (a, b) => a.expenditure - b.expenditure,
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
@ -533,6 +539,7 @@
{ {
title: '发生金额(¥)', title: '发生金额(¥)',
width: 150, width: 150,
align: 'center',
dataIndex: 'amountIncurredValue', dataIndex: 'amountIncurredValue',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
@ -541,6 +548,7 @@
{ {
title: '交易对象', title: '交易对象',
width: 100, width: 100,
align: 'center',
dataIndex: 'tradingPartner', dataIndex: 'tradingPartner',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== '' ? text : '-'; return text.text !== '' ? text : '-';
@ -549,6 +557,7 @@
{ {
title: '更新人', title: '更新人',
width: 100, width: 100,
align: 'center',
dataIndex: 'updateUser', dataIndex: 'updateUser',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
@ -557,6 +566,7 @@
{ {
title: '更新时间', title: '更新时间',
width: 150, width: 150,
align: 'center',
ellipsis: true, ellipsis: true,
dataIndex: 'updateTime', dataIndex: 'updateTime',
customRender: (text: any) => { customRender: (text: any) => {
@ -813,14 +823,17 @@
{ {
title: '统计类型', title: '统计类型',
dataIndex: 'statisticType', dataIndex: 'statisticType',
align: 'center',
}, },
{ {
title: '小计', title: '小计',
dataIndex: 'subtotal', dataIndex: 'subtotal',
align: 'center',
}, },
{ {
title: '合计', title: '合计',
dataIndex: 'amountTo', dataIndex: 'amountTo',
align: 'center',
}, },
]; ];
@ -865,21 +878,26 @@
} }
.search { .search {
height: 15%; height: 15%;
border-radius: 8px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 5px 16px rgb(118 126 145 / 20%);
} }
.detailTable { .detailTable {
width: 70%; width: 70%;
margin-right: 20px; margin-right: 20px;
height: 100%; height: 100%;
background: white;
border-radius: 12px;
padding: 16px; padding: 16px;
border-radius: 8px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 20px rgb(69 123 234 / 20%);
} }
.total { .total {
width: calc(30% - 20px); width: calc(30% - 20px);
height: 100%; height: 100%;
background: white;
border-radius: 12px;
padding: 16px; padding: 16px;
border-radius: 8px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 20px rgb(69 123 234 / 20%);
} }
:deep(.ns-table-search) { :deep(.ns-table-search) {
display: none; display: none;

88
hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionFactorLibrary/index.vue

@ -144,12 +144,13 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin-bottom: 16px;
"> ">
<a-select <a-select
ref="select" ref="select"
:value="unitTreeParams.id" :value="unitTreeParams.id"
allowClear allowClear
style="width: 90%" style="width: 100%"
placeholder="选择分组" placeholder="选择分组"
@change="handleChange"> @change="handleChange">
<a-select-option v-for="(item, index) in groupData" :key="index" :value="item.id"> <a-select-option v-for="(item, index) in groupData" :key="index" :value="item.id">
@ -171,13 +172,21 @@
<span>{{ data.cnValue }}</span> <span>{{ data.cnValue }}</span>
</div> </div>
<div class="actionMore"> <div class="actionMore">
<PlusCircleOutlined v-if="!data.parentId" @click="addUnit(data)" /> <PlusCircleOutlined
<MinusCircleOutlined style="margin-left: 6px" @click="delUnit(data)" /> v-if="!data.parentId"
style="color: #4388fb"
@click="addUnit(data)" />
<MinusCircleOutlined
style="margin-left: 6px; color: #4388fb"
@click="delUnit(data)" />
<EditOutlined <EditOutlined
style="margin-left: 6px" style="margin-left: 6px; color: #4388fb"
v-if="!data.parentId" v-if="!data.parentId"
@click="editGroup(data)" /> @click="editGroup(data)" />
<EditOutlined style="margin-left: 6px" v-else @click="editUnit(data)" /> <EditOutlined
style="margin-left: 6px; color: #4388fb"
v-else
@click="editUnit(data)" />
</div> </div>
</div> </div>
</template> </template>
@ -424,7 +433,7 @@
const onExpand = (keys: string[]) => { const onExpand = (keys: string[]) => {
expandedKeys.value = keys; expandedKeys.value = keys;
autoExpandParent.value = false; // autoExpandParent.value = false;
}; };
// watch(selectTreeDataValue, (value) => { // watch(selectTreeDataValue, (value) => {
// const expanded = dataList // const expanded = dataList
@ -458,7 +467,7 @@
mainRef.value?.nsTableRef.reload(); mainRef.value?.nsTableRef.reload();
}; };
// //
const addTreeNodeData = () => { const addTreeNodeData = (data) => {
operationTree.value = '新增'; operationTree.value = '新增';
treeNodeAdd.value = true; treeNodeAdd.value = true;
editTreeNode.value.type = 'create'; editTreeNode.value.type = 'create';
@ -557,6 +566,7 @@
const editTreeNode = ref({}); const editTreeNode = ref({});
const onSelectKeys = ref([]); const onSelectKeys = ref([]);
const onSelect = (selectedKey: string[], info: any) => { const onSelect = (selectedKey: string[], info: any) => {
expandedKeys.value = selectedKey;
if (selectedKey.length === 1) { if (selectedKey.length === 1) {
if (info.selectedNodes[0].emissionName === '全部') { if (info.selectedNodes[0].emissionName === '全部') {
onSelectKeys.value = []; onSelectKeys.value = [];
@ -771,6 +781,7 @@
{ {
title: 'id', title: 'id',
width: 50, width: 50,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
@ -778,57 +789,68 @@
{ {
title: '排放源', title: '排放源',
width: 100, width: 100,
align: 'center',
dataIndex: 'emissionSources', dataIndex: 'emissionSources',
}, },
{ {
title: '排放类型', title: '排放类型',
width: 100, width: 100,
align: 'center',
dataIndex: 'emissionTypeColumn', dataIndex: 'emissionTypeColumn',
}, },
{ {
title: '排放气体', title: '排放气体',
width: 100, width: 100,
align: 'center',
dataIndex: 'emissionGas', dataIndex: 'emissionGas',
}, },
{ {
title: '排放环节', title: '排放环节',
width: 100, width: 100,
align: 'center',
dataIndex: 'emissionProcess', dataIndex: 'emissionProcess',
}, },
{ {
title: '排放因子', title: '排放因子',
width: 100, width: 100,
align: 'center',
dataIndex: 'emissionFactors', dataIndex: 'emissionFactors',
}, },
{ {
title: '排放因子单位', title: '排放因子单位',
width: 100, width: 100,
align: 'center',
dataIndex: 'emissionFactorUnits', dataIndex: 'emissionFactorUnits',
}, },
{ {
title: '数据来源', title: '数据来源',
width: 100, width: 100,
align: 'center',
dataIndex: 'dataSources', dataIndex: 'dataSources',
}, },
{ {
title: '数据库', title: '数据库',
width: 100, width: 100,
align: 'center',
dataIndex: 'carbonDatabase', dataIndex: 'carbonDatabase',
}, },
{ {
title: '参考文献', title: '参考文献',
width: 100, width: 100,
align: 'center',
dataIndex: 'bibliography', dataIndex: 'bibliography',
ellipsis: true, ellipsis: true,
}, },
{ {
title: '引用数量', title: '引用数量',
width: 100, width: 100,
align: 'center',
dataIndex: 'numberOfReferences', dataIndex: 'numberOfReferences',
}, },
], ],
columnActions: { columnActions: {
title: '操作', title: '操作',
align: 'center',
actions: [ actions: [
{ {
label: '编辑', label: '编辑',
@ -875,10 +897,42 @@
{ {
label: '删除', label: '删除',
name: 'userDelete', name: 'userDelete',
dynamicParams: { ids: 'id[]' }, // dynamicParams: { ids: 'id[]' },
confirm: true, // confirm: true,
isReload: true, // isReload: true,
api: carbonEmissionFactorLibrary.del, // api: carbonEmissionFactorLibrary.del,
handle: (record: any) => {
fetch(carbonEmissionFactorLibrary.checkDel, { ids: [record.id] }).then((res) => {
if (res.data === '确定要删除吗?') {
Modal.confirm({
title: res.data,
icon: createVNode(ExclamationCircleOutlined),
onOk() {
fetch(carbonEmissionFactorLibrary.del, { ids: [record.id] }).then((res) => {
mainRef.value?.nsTableRef.reload();
NsMessage.success('操作成功');
});
},
onCancel() {
console.log('Cancel');
},
class: 'test',
});
} else {
Modal.confirm({
title: res.data,
icon: createVNode(ExclamationCircleOutlined),
onOk() {
console.log('OK');
},
onCancel() {
console.log('Cancel');
},
class: 'test',
});
}
});
},
}, },
], ],
}, },
@ -1147,7 +1201,7 @@
display: flex; display: flex;
} }
.left { .left {
width: 300px; width: 255px;
// max-height: calc(100vh - 96px); // max-height: calc(100vh - 96px);
margin-right: @ns-gap; margin-right: @ns-gap;
min-width: fit-content; min-width: fit-content;
@ -1198,7 +1252,8 @@
margin-bottom: unset; margin-bottom: unset;
padding-bottom: unset; padding-bottom: unset;
border-bottom: unset; border-bottom: unset;
width: 70%; margin-bottom: 16px;
width: 255px;
height: 5vh; height: 5vh;
display: flex; display: flex;
align-items: center; align-items: center;
@ -1238,18 +1293,19 @@
justify-content: space-evenly; justify-content: space-evenly;
} }
.treePart { .treePart {
width: 70%; width: 255px;
height: calc(100% - 5vh); height: 700px;
display: flex; display: flex;
border: 1px solid #bfbfbf; border: 1px solid #bfbfbf;
margin-left: 10%; margin-left: 10%;
flex-direction: column; flex-direction: column;
border-radius: 12px; border-radius: 12px;
overflow: auto; overflow: auto;
padding: 16px;
align-items: center; align-items: center;
:deep(.ant-tree) { :deep(.ant-tree) {
height: 90%; height: 90%;
width: 90%; width: 100%;
overflow: auto; overflow: auto;
} }
} }

50
hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/carbonEmissions/index.vue

@ -1,11 +1,12 @@
<template> <template>
<div> <div style="height: 100%">
<a-table <a-table
v-if="data && data.length > 0"
:columns="column" :columns="column"
:data-source="data" :data-source="data"
:bordered="true" :bordered="true"
:pagination="false" :pagination="false"
:scroll="{ x: 1700, y: 480 }"> :scroll="{ x: 1700 }">
<template #title> <template #title>
<a-date-picker <a-date-picker
v-model:value="selectYear" v-model:value="selectYear"
@ -17,10 +18,28 @@
<a-button type="primary" style="margin-left: 6px" @click="clickSelect">搜索</a-button> <a-button type="primary" style="margin-left: 6px" @click="clickSelect">搜索</a-button>
</span> </span>
</template> </template>
<template #bodyCell="{ column, text }"> <template #bodyCell="{ column, text, record }">
<span>{{ text || '-' }}</span> <template v-if="column.dataIndex === 'averageFactorValue'">
<span v-if="record.averageFactorValue !== undefined">
{{ record.averageFactorValue + record.measurement + '/' + record.unitName }}
</span>
<span v-else>
{{ '-' }}
</span>
</template>
<span v-else>{{ text || '-' }}</span>
</template> </template>
</a-table> </a-table>
<a-empty
v-else
style="
width: 100%;
height: 100%;
justify-content: center;
display: flex;
align-items: center;
flex-direction: column;
" />
<!-- <a-pagination <!-- <a-pagination
:current="queryParams.pageNum" :current="queryParams.pageNum"
:total="total" :total="total"
@ -77,6 +96,7 @@
title: '排放类型', title: '排放类型',
dataIndex: 'cnValue', dataIndex: 'cnValue',
width: 100, width: 100,
align: 'center',
customCell: (record, rowIndex) => { customCell: (record, rowIndex) => {
if (rowIndex == undefined) { if (rowIndex == undefined) {
return { return {
@ -100,81 +120,97 @@
title: '能源种类', title: '能源种类',
dataIndex: 'energyType', dataIndex: 'energyType',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '计量单位', title: '计量单位',
dataIndex: 'unitName', dataIndex: 'measurement',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '加权平均', title: '加权平均',
dataIndex: 'averageFactorValue', dataIndex: 'averageFactorValue',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '全年', title: '全年',
dataIndex: 'carbonYearly', dataIndex: 'carbonYearly',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '1月', title: '1月',
dataIndex: 'jan', dataIndex: 'jan',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '2月', title: '2月',
dataIndex: 'feb', dataIndex: 'feb',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '3月', title: '3月',
dataIndex: 'mar', dataIndex: 'mar',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '4月', title: '4月',
dataIndex: 'apr', dataIndex: 'apr',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '5月', title: '5月',
dataIndex: 'may', dataIndex: 'may',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '6月', title: '6月',
dataIndex: 'jun', dataIndex: 'jun',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '7月', title: '7月',
dataIndex: 'jul', dataIndex: 'jul',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '8月', title: '8月',
dataIndex: 'aug', dataIndex: 'aug',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '9月', title: '9月',
dataIndex: 'sep', dataIndex: 'sep',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '10月', title: '10月',
dataIndex: 'oct', dataIndex: 'oct',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '11月', title: '11月',
dataIndex: 'nov', dataIndex: 'nov',
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '12月', title: '12月',
dataIndex: 'dece', dataIndex: 'dece',
width: 100, width: 100,
align: 'center',
}, },
]; ];
// //
@ -220,6 +256,10 @@
:deep(.ant-table-container) { :deep(.ant-table-container) {
margin: 0px 16px; margin: 0px 16px;
} }
:deep(.ant-table-container) {
height: 64vh;
overflow: auto;
}
// :deep(.ant-table-cell) { // :deep(.ant-table-cell) {
// border: 1px solid #f0f0f0; // border: 1px solid #f0f0f0;
// } // }

2
hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/config.ts

@ -177,7 +177,7 @@ export const setFactorConfig = (orgId) => {
}, },
rowSelection: { rowSelection: {
type: 'radio', type: 'radio',
// selectedRowKeys: [], selectedRowKeys: undefined,
}, },
columns: [ columns: [
{ {

31
hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/energyConsumption/index.vue

@ -1,7 +1,7 @@
<template> <template>
<div style="height: 100%"> <div style="height: 100%">
<div class="table" style="height: 100%"> <div class="table" style="height: 100%">
<ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" :scroll="{ x: 1500 }"> <ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" :scroll="{ x: 1600 }">
</ns-view-list-table> </ns-view-list-table>
</div> </div>
<!-- 新增数据库数据 --> <!-- 新增数据库数据 -->
@ -367,12 +367,24 @@
return text.index + 1; return text.index + 1;
}, },
width: 100, width: 100,
align: 'center',
}, },
{ {
title: '能源种类', title: '能源种类',
dataIndex: 'energyType', dataIndex: 'energyType',
width: 100, width: 100,
ellipsis: true, ellipsis: true,
align: 'center',
customRender: (text: any) => {
return text.text !== undefined ? text : '-';
},
},
{
title: '编码',
dataIndex: 'code',
width: 100,
ellipsis: true,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
}, },
@ -382,6 +394,7 @@
className: 'unitName', className: 'unitName',
dataIndex: 'unitName', dataIndex: 'unitName',
width: 100, width: 100,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
}, },
@ -390,6 +403,7 @@
title: '全年', title: '全年',
dataIndex: 'yearly', dataIndex: 'yearly',
width: 100, width: 100,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.text !== undefined ? text : '-'; return text.text !== undefined ? text : '-';
}, },
@ -398,6 +412,7 @@
title: '1月', title: '1月',
dataIndex: 'jan', dataIndex: 'jan',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -419,6 +434,7 @@
title: '2月', title: '2月',
dataIndex: 'feb', dataIndex: 'feb',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -440,6 +456,7 @@
title: '3月', title: '3月',
dataIndex: 'mar', dataIndex: 'mar',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -461,6 +478,7 @@
title: '4月', title: '4月',
dataIndex: 'apr', dataIndex: 'apr',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -482,6 +500,7 @@
title: '5月', title: '5月',
dataIndex: 'may', dataIndex: 'may',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -503,6 +522,7 @@
title: '6月', title: '6月',
dataIndex: 'jun', dataIndex: 'jun',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -524,6 +544,7 @@
title: '7月', title: '7月',
dataIndex: 'jul', dataIndex: 'jul',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -545,6 +566,7 @@
title: '8月', title: '8月',
dataIndex: 'aug', dataIndex: 'aug',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -566,6 +588,7 @@
title: '9月', title: '9月',
dataIndex: 'sep', dataIndex: 'sep',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -587,6 +610,7 @@
title: '10月', title: '10月',
dataIndex: 'oct', dataIndex: 'oct',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -608,6 +632,7 @@
title: '11月', title: '11月',
dataIndex: 'nov', dataIndex: 'nov',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -629,6 +654,7 @@
title: '12月', title: '12月',
dataIndex: 'dece', dataIndex: 'dece',
width: 100, width: 100,
align: 'center',
customRender: (value) => { customRender: (value) => {
let text; let text;
let color; let color;
@ -649,6 +675,7 @@
], ],
columnActions: { columnActions: {
title: '操作', title: '操作',
align: 'center',
actions: [ actions: [
{ {
label: '编辑', label: '编辑',
@ -904,7 +931,7 @@
const getDictList = async () => { const getDictList = async () => {
// //
const options = await dict({ params: { dicKey: 'ENERGY_TYPE' } }); const options = await dict({ params: { dicKey: 'ENERGY_TYPE' } });
energyTypeOptions.value = options.data.data; energyTypeOptions.value = options.data.data.filter((item) => item.cnValue !== '碳排量');
// //
fetch(energyConsumption.getDicList, { grp: 'EMISSION_TYPE' }).then((res) => { fetch(energyConsumption.getDicList, { grp: 'EMISSION_TYPE' }).then((res) => {
emissionTypeDic.value = res.data; emissionTypeDic.value = res.data;

27
hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/index.vue

@ -48,23 +48,22 @@
}; };
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
:deep(.ant-tabs-ink-bar) {
width: 31px !important;
height: 3px !important;
border-radius: 2px !important;
margin-left: 5%;
background: rgba(67, 136, 251, 1);
}
//table
:deep(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) { :deep(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) {
font-size: 16px; font-size: 14px !important;
font-weight: 700; font-weight: bolb !important;
letter-spacing: 1.33px; color: #333333 !important;
line-height: 21px;
color: rgba(51, 51, 51, 1);
text-align: left;
vertical-align: top;
} }
:deep(.ant-tabs-tab-btn) { :deep(.ant-tabs-tab-btn) {
font-size: 16px; font-size: 14px !important;
font-weight: 700; color: #666666 !important;
letter-spacing: 1.33px;
line-height: 21px;
color: #666666;
text-align: left;
vertical-align: top;
} }
:deep(.ant-tabs-content) { :deep(.ant-tabs-content) {
height: 100%; height: 100%;

20
hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/quickCalculation/index.vue

@ -37,7 +37,7 @@
}} }}
</span> --> </span> -->
<span v-if="data.code" :title="data.energyType + data.code"> <span v-if="data.code" :title="data.energyType + data.code">
{{ truncatedName(data.energyType + data.code) }} {{ truncatedName(data.energyType + '(' + data.code + ')') }}
</span> </span>
<span v-else :title="data.energyType">{{ truncatedName(data.energyType) }}</span> <span v-else :title="data.energyType">{{ truncatedName(data.energyType) }}</span>
</template> </template>
@ -129,7 +129,7 @@
title="选择因子" title="选择因子"
@ok="btnClick" @ok="btnClick"
@cancel="onCloseClick"> @cancel="onCloseClick">
<ns-view-list-table v-bind="config" ref="setFactorRef" style="height: 500px" /> <ns-view-list-table v-bind="config" ref="setFactorRef" />
</a-modal> </a-modal>
</div> </div>
</template> </template>
@ -315,6 +315,7 @@
columns: [ columns: [
{ {
title: '序号', title: '序号',
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
@ -322,36 +323,43 @@
{ {
title: '因子值', title: '因子值',
dataIndex: 'emissionFactors', dataIndex: 'emissionFactors',
align: 'center',
}, },
{ {
title: '计量单位', title: '计量单位',
className: 'carbonEmissionSuffix', className: 'carbonEmissionSuffix',
dataIndex: 'carbonEmissionSuffix', dataIndex: 'carbonEmissionSuffix',
align: 'center',
}, },
{ {
title: '启用时间', title: '启用时间',
className: 'startTime', className: 'startTime',
dataIndex: 'startTime', dataIndex: 'startTime',
align: 'center',
}, },
{ {
title: '结束时间', title: '结束时间',
className: 'endTime', className: 'endTime',
dataIndex: 'endTime', dataIndex: 'endTime',
align: 'center',
}, },
{ {
title: '数据来源', title: '数据来源',
className: 'dataSources', className: 'dataSources',
dataIndex: 'dataSources', dataIndex: 'dataSources',
align: 'center',
}, },
{ {
title: '更新时间', title: '更新时间',
className: 'updateTime', className: 'updateTime',
dataIndex: 'updateTime', dataIndex: 'updateTime',
align: 'center',
ellipsis: true, ellipsis: true,
}, },
], ],
columnActions: { columnActions: {
title: '操作', title: '操作',
align: 'center',
actions: [ actions: [
{ {
label: '编辑', label: '编辑',
@ -520,8 +528,8 @@
nextTick(() => { nextTick(() => {
setFactorRef.value.nsTableRef.params.emissionList = treeId.value; setFactorRef.value.nsTableRef.params.emissionList = treeId.value;
setFactorRef.value.nsTableRef.treeElRef.selectedKeys = treeId.value; setFactorRef.value.nsTableRef.treeElRef.selectedKeys = treeId.value;
setFactorRef.value.nsTableRef.rowSelection.selectedRowKeys = tableId.value; setFactorRef.value.nsTableRef.rowSelection.selectedRowKeys = [...tableId.value];
setFactorRef.value.nsTableRef.reload(); // setFactorRef.value.nsTableRef.reload();
treeId.value = []; treeId.value = [];
tableId.value = []; tableId.value = [];
}); });
@ -531,7 +539,7 @@
setFactorRef.value.nsTableRef.params.emissionList = [0]; setFactorRef.value.nsTableRef.params.emissionList = [0];
setFactorRef.value.nsTableRef.treeElRef.selectedKeys = []; setFactorRef.value.nsTableRef.treeElRef.selectedKeys = [];
setFactorRef.value.nsTableRef.rowSelection.selectedRowKeys = undefined; setFactorRef.value.nsTableRef.rowSelection.selectedRowKeys = undefined;
setFactorRef.value.nsTableRef.reload(); // setFactorRef.value.nsTableRef.reload();
}); });
} }
}; };
@ -569,7 +577,7 @@
padding: 16px; padding: 16px;
} }
.left { .left {
width: 300px; width: 255px;
margin-right: @ns-gap; margin-right: @ns-gap;
min-width: fit-content; min-width: fit-content;
border-radius: 8px; border-radius: 8px;

3
hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/config.ts

@ -5,6 +5,7 @@ export const voucherColumns = [
{ {
title: '序号', title: '序号',
width: 80, width: 80,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
@ -13,12 +14,14 @@ export const voucherColumns = [
title: '日期', title: '日期',
dataIndex: 'bizName', dataIndex: 'bizName',
key: 'bizName', key: 'bizName',
align: 'center',
ellipsis: true, ellipsis: true,
}, },
{ {
title: '文件名称', title: '文件名称',
dataIndex: 'fileName', dataIndex: 'fileName',
key: 'fileName', key: 'fileName',
align: 'center',
ellipsis: true, ellipsis: true,
}, },
]; ];

54
hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/fillInPage/index.vue

@ -2,12 +2,12 @@
<div class="main"> <div class="main">
<div class="totalTitle"> <div class="totalTitle">
<div class="ns-form-title"> <div class="ns-form-title">
<div style="display: flex; align-items: center">
<div class="title">{{ props.year }}年济阳站碳盘查报告</div> <div class="title">{{ props.year }}年济阳站碳盘查报告</div>
<div class="standard" style="display: flex; align-items: center">
<img <img
width="11" width="11"
height="11" height="11"
style="margin-right: 5px" style="margin-right: 5px; margin-left: 10px"
src="../../../../../src/icon/carbonInventoryCheck.svg" /> src="../../../../../src/icon/carbonInventoryCheck.svg" />
<span <span
style=" style="
@ -18,16 +18,19 @@
color: rgba(67, 136, 251, 1); color: rgba(67, 136, 251, 1);
text-align: left; text-align: left;
vertical-align: top; vertical-align: top;
"> "
适用标准{{ props.standard }} :title="props.standard">
适用标准{{ truncatedName(props.standard) }}
</span> </span>
</div>
<div class="standard" style="display: flex; align-items: center">
<a-button type="primary" @click="changeParentData" ghost style="margin-left: 6px"> <a-button type="primary" @click="changeParentData" ghost style="margin-left: 6px">
返回 返回
</a-button> </a-button>
</div> </div>
</div> </div>
</div> </div>
<div style="display: flex; height: 90%"> <div style="display: flex; height: 93%">
<div class="left"> <div class="left">
<div class="top"> <div class="top">
<a-form style="width: 100%; margin: 0 auto"> <a-form style="width: 100%; margin: 0 auto">
@ -909,38 +912,45 @@
title: '日期', title: '日期',
dataIndex: 'acquisitionDate', dataIndex: 'acquisitionDate',
width: 80, width: 80,
align: 'center',
key: 'acquisitionDate', key: 'acquisitionDate',
}, },
{ {
title: '消耗量', title: '消耗量',
align: 'center',
children: [ children: [
{ {
title: '数据来源', title: '数据来源',
dataIndex: 'dataSources', dataIndex: 'dataSources',
width: 100, width: 100,
align: 'center',
key: 'dataSources', key: 'dataSources',
}, },
{ {
title: '数值', title: '数值',
dataIndex: 'consumption', dataIndex: 'consumption',
width: 100, width: 100,
align: 'center',
key: 'consumption', key: 'consumption',
}, },
], ],
}, },
{ {
title: '碳排因子', title: '碳排因子',
align: 'center',
children: [ children: [
{ {
title: '数据来源', title: '数据来源',
dataIndex: 'carbonSource', dataIndex: 'carbonSource',
width: 100, width: 100,
align: 'center',
key: 'carbonSource', key: 'carbonSource',
}, },
{ {
title: '数值', title: '数值',
dataIndex: 'emissionFactors', dataIndex: 'emissionFactors',
width: 100, width: 100,
align: 'center',
key: 'emissionFactors', key: 'emissionFactors',
}, },
], ],
@ -949,11 +959,13 @@
title: '排放量', title: '排放量',
dataIndex: 'emissions', dataIndex: 'emissions',
width: 100, width: 100,
align: 'center',
key: 'emissions', key: 'emissions',
fixed: 'right', fixed: 'right',
}, },
{ {
title: '操作', title: '操作',
align: 'center',
dataIndex: 'action', dataIndex: 'action',
key: 'action', key: 'action',
width: 80, width: 80,
@ -1677,6 +1689,13 @@
}); });
} }
}; };
const truncatedName = (name) => {
if (name.length > 30) {
return name.substring(0, 30) + '...';
}
return name;
};
// //
const emit = defineEmits(['change-data']); const emit = defineEmits(['change-data']);
const changeParentData = () => { const changeParentData = () => {
@ -1689,6 +1708,7 @@
background-color: #ffffff; background-color: #ffffff;
height: 100%; height: 100%;
padding: 16px; padding: 16px;
border-radius: 8px;
} }
.left { .left {
width: 300px; width: 300px;
@ -1708,6 +1728,7 @@
position: relative; position: relative;
height: 100%; height: 100%;
margin-bottom: 20px; margin-bottom: 20px;
border-radius: 8px;
.ns-form-title { .ns-form-title {
font-weight: bold; font-weight: bold;
user-select: text; user-select: text;
@ -1928,4 +1949,27 @@
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 20px rgb(69 123 234 / 20%); box-shadow: 0px 2px 20px rgb(69 123 234 / 20%);
} }
:deep(.ant-tabs-ink-bar) {
// width: 31px !important;
height: 3px !important;
border-radius: 2px !important;
background: rgba(67, 136, 251, 1);
}
//table
:deep(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) {
font-size: 14px !important;
font-weight: bolb !important;
color: #333333 !important;
}
:deep(.ant-tabs-tab-btn) {
font-size: 14px !important;
color: #666666 !important;
}
:deep(.ant-tabs-content) {
height: 100%;
}
:deep(.ant-tabs-tabpane) {
height: 100%;
}
</style> </style>

22
hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/index.vue

@ -44,7 +44,7 @@
<a-form-item ref="name" label="适用标准" name="genericStandard"> <a-form-item ref="name" label="适用标准" name="genericStandard">
<a-input <a-input
v-model:value="formState.genericStandard" v-model:value="formState.genericStandard"
:maxlength="20" :maxlength="100"
@keydown="handleKeyDown" @keydown="handleKeyDown"
placeholder="请输入适用标准" /> placeholder="请输入适用标准" />
</a-form-item> </a-form-item>
@ -172,6 +172,14 @@
spinning.value = false; spinning.value = false;
}); });
} else { } else {
if (count.value === '0') {
spinning.value = true;
fetch(carbonInventoryCheck.createOrUpdate, formState.value).then((res) => {
visible.value = false;
mainRef.value?.nsTableRef.reload();
spinning.value = false;
});
} else {
Modal.confirm({ Modal.confirm({
title: '修改日期会导致已有数据丢失,是否继续修改?', title: '修改日期会导致已有数据丢失,是否继续修改?',
icon: createVNode(ExclamationCircleOutlined), icon: createVNode(ExclamationCircleOutlined),
@ -194,6 +202,7 @@
}); });
} }
} }
}
}) })
.catch((error) => { .catch((error) => {
console.log('error', error); console.log('error', error);
@ -209,6 +218,7 @@
const year = ref(); const year = ref();
const oldStartTime = ref(); const oldStartTime = ref();
const oldEndTime = ref(); const oldEndTime = ref();
const count = ref();
const tableConfig = ref({ const tableConfig = ref({
title: '数据库', title: '数据库',
api: carbonInventoryCheck.carbonInventoryList, api: carbonInventoryCheck.carbonInventoryList,
@ -230,6 +240,7 @@
{ {
title: '序号', title: '序号',
width: 50, width: 50,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
@ -237,37 +248,45 @@
{ {
title: '企业名称', title: '企业名称',
width: 130, width: 130,
align: 'center',
dataIndex: 'enterpriseName', dataIndex: 'enterpriseName',
}, },
{ {
title: '报告名称', title: '报告名称',
width: 100, width: 100,
align: 'center',
dataIndex: 'reportName', dataIndex: 'reportName',
}, },
{ {
title: '报告年度', title: '报告年度',
width: 70, width: 70,
align: 'center',
dataIndex: 'reportYear', dataIndex: 'reportYear',
}, },
{ {
title: '适用标准', title: '适用标准',
width: 100, width: 100,
align: 'center',
dataIndex: 'genericStandard', dataIndex: 'genericStandard',
ellipsis: true,
}, },
{ {
title: '更新人', title: '更新人',
width: 100, width: 100,
align: 'center',
dataIndex: 'updateUser', dataIndex: 'updateUser',
}, },
{ {
title: '更新时间', title: '更新时间',
width: 100, width: 100,
align: 'center',
dataIndex: 'updateTime', dataIndex: 'updateTime',
}, },
], ],
columnActions: { columnActions: {
title: '操作', title: '操作',
width: 100, width: 100,
align: 'center',
actions: [ actions: [
{ {
label: '编辑', label: '编辑',
@ -275,6 +294,7 @@
handle: (record: any) => { handle: (record: any) => {
text.value = '编辑报告'; text.value = '编辑报告';
visible.value = true; visible.value = true;
count.value = record.count;
fetch(carbonInventoryCheck.findById, { id: record.id }).then((res) => { fetch(carbonInventoryCheck.findById, { id: record.id }).then((res) => {
formState.value = res.data; formState.value = res.data;
formState.value.reportScope = [res.data.startTime, res.data.endTime]; formState.value.reportScope = [res.data.startTime, res.data.endTime];

15
hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/all/index.vue

@ -63,12 +63,14 @@
</div> </div>
<div class="tablePart"> <div class="tablePart">
<a-table <a-table
v-if="data && data.length > 0"
:columns="columns" :columns="columns"
:data-source="data" :data-source="data"
size="middle"
bordered bordered
:pagination="false" :pagination="false">
:scroll="{ x: 1300, y: 300 }">
</a-table> </a-table>
<a-empty v-else />
</div> </div>
</div> </div>
</a-spin> </a-spin>
@ -266,41 +268,50 @@
{ {
title: '序号', title: '序号',
width: 100, width: 100,
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
}, },
{ {
title: '名称', title: '名称',
align: 'center',
dataIndex: 'itemizeName', dataIndex: 'itemizeName',
}, },
{ {
title: '年份', title: '年份',
dataIndex: 'year', dataIndex: 'year',
align: 'center',
}, },
{ {
title: '计量单位', title: '计量单位',
dataIndex: 'unitMeasurement', dataIndex: 'unitMeasurement',
align: 'center',
}, },
{ {
title: '总实际用量', title: '总实际用量',
dataIndex: 'actualUsage', dataIndex: 'actualUsage',
align: 'center',
}, },
{ {
title: '总预算量', title: '总预算量',
dataIndex: 'budget', dataIndex: 'budget',
align: 'center',
}, },
{ {
title: '基准值', title: '基准值',
dataIndex: 'referenceValue', dataIndex: 'referenceValue',
align: 'center',
}, },
{ {
title: '节能量', title: '节能量',
dataIndex: 'energyConservation', dataIndex: 'energyConservation',
align: 'center',
}, },
{ {
title: '预算达成率', title: '预算达成率',
dataIndex: 'budgetAchievement', dataIndex: 'budgetAchievement',
align: 'center',
}, },
]); ]);

12
hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/category/categoryDeatil.vue

@ -81,6 +81,7 @@
</a-button> </a-button>
</div> </div>
<a-table <a-table
v-if="data && data.length > 0"
:columns="columns" :columns="columns"
:data-source="data" :data-source="data"
rowKey="id" rowKey="id"
@ -123,6 +124,7 @@
</a-table-summary-row> </a-table-summary-row>
</template> </template>
</a-table> </a-table>
<a-empty v-else />
</a-card> </a-card>
</div> </div>
</a-spin> </a-spin>
@ -369,46 +371,55 @@
const columns = ref([ const columns = ref([
{ {
title: '序号', title: '序号',
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
}, },
{ {
title: '日期', title: '日期',
align: 'center',
dataIndex: 'yearMonth', dataIndex: 'yearMonth',
}, },
{ {
title: Number(props.year) - 1 + '年实际用量', title: Number(props.year) - 1 + '年实际用量',
dataIndex: 'lastYearActualUsage', dataIndex: 'lastYearActualUsage',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: props.year + '年实际用量', title: props.year + '年实际用量',
dataIndex: 'actualUsage', dataIndex: 'actualUsage',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '基准值', title: '基准值',
align: 'center',
dataIndex: 'referenceValue', dataIndex: 'referenceValue',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '是否按去年折算', title: '是否按去年折算',
dataIndex: 'lastYear', dataIndex: 'lastYear',
align: 'center',
}, },
{ {
title: '折算率', title: '折算率',
dataIndex: 'conversionRate', dataIndex: 'conversionRate',
align: 'center',
customRender: ({ text }: { text: number }) => `${text}%`, // customRender: ({ text }: { text: number }) => `${text}%`, //
}, },
{ {
title: '2024年预算', title: '2024年预算',
dataIndex: 'budget', dataIndex: 'budget',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '操作', title: '操作',
key: 'action', key: 'action',
align: 'center',
width: 200, width: 200,
}, },
]); ]);
@ -891,6 +902,7 @@
border-radius: 12px; border-radius: 12px;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 20px rgb(69 123 234 / 20%); box-shadow: 0px 2px 20px rgb(69 123 234 / 20%);
padding: 16px;
.chart { .chart {
width: 100%; width: 100%;
height: 65%; height: 65%;

30
hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/category/index.vue

@ -46,6 +46,7 @@
</div> </div>
<div class="tablePart"> <div class="tablePart">
<a-table <a-table
v-if="data && data.length > 0"
:columns="columns" :columns="columns"
:data-source="data" :data-source="data"
bordered bordered
@ -61,6 +62,7 @@
</template> </template>
</template> </template>
</a-table> </a-table>
<a-empty v-else />
</div> </div>
</div> </div>
</a-spin> </a-spin>
@ -382,11 +384,21 @@
ballChartInstance = echarts.init(ballChartRef.value); ballChartInstance = echarts.init(ballChartRef.value);
let ballData = (Number(ballValue.value) / 100).toFixed(2); let ballData = (Number(ballValue.value) / 100).toFixed(2);
const option = { const option = {
title: {
text: selectedTime.value
? '历年' + props.energyTypeName + '分析'
: '每月' + props.energyTypeName + '分析',
x: '0',
textStyle: {
color: 'rgba(51, 51, 51, 1)',
fontSize: '16',
},
},
series: [ series: [
{ {
type: 'liquidFill', type: 'liquidFill',
radius: '78.1%', radius: '70%',
center: ['50%', '50%'], center: ['55%', '55%'],
color: !selectedTime.value color: !selectedTime.value
? ['#ecf3fe', '#c8dcfe', '#5594fa'] ? ['#ecf3fe', '#c8dcfe', '#5594fa']
: ['rgba(12, 168, 126, 0.5)', 'rgba(12, 168, 126, 0.1)', 'rgba(12, 168, 126, 1)'], : ['rgba(12, 168, 126, 0.5)', 'rgba(12, 168, 126, 0.1)', 'rgba(12, 168, 126, 1)'],
@ -402,7 +414,7 @@
textStyle: { textStyle: {
color: !selectedTime.value ? 'rgba(68, 197, 253,1)' : 'rgba(12, 168, 126, 1)', color: !selectedTime.value ? 'rgba(68, 197, 253,1)' : 'rgba(12, 168, 126, 1)',
insideColor: '#12786f', insideColor: '#12786f',
fontSize: Number(ballData) > 1000 ? 20 : 40, fontSize: Number(ballData) > 100 ? 20 : 40,
}, },
formatter: (params) => { formatter: (params) => {
// return `${(params.value * 100).toFixed(2)}%`; // return `${(params.value * 100).toFixed(2)}%`;
@ -549,6 +561,7 @@
const columns = ref([ const columns = ref([
{ {
title: '序号', title: '序号',
align: 'center',
customRender: (text: any) => { customRender: (text: any) => {
return text.index + 1; return text.index + 1;
}, },
@ -556,37 +569,45 @@
{ {
title: '分项名称', title: '分项名称',
dataIndex: 'itemizeName', dataIndex: 'itemizeName',
align: 'center',
}, },
{ {
title: '年份', title: '年份',
align: 'center',
dataIndex: 'year', dataIndex: 'year',
}, },
{ {
title: '实际用量', title: '实际用量',
dataIndex: 'actualUsage', dataIndex: 'actualUsage',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '预算量', title: '预算量',
dataIndex: 'budget', dataIndex: 'budget',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '基准值', title: '基准值',
dataIndex: 'referenceValue', dataIndex: 'referenceValue',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '节能量', title: '节能量',
dataIndex: 'energyConservation', dataIndex: 'energyConservation',
align: 'center',
customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, // customRender: ({ text }: { text: number }) => `${text ? text + unit.value : 0 + unit.value}`, //
}, },
{ {
title: '预算达成率', title: '预算达成率',
align: 'center',
dataIndex: 'budgetAchievement', dataIndex: 'budgetAchievement',
}, },
{ {
title: '操作', title: '操作',
align: 'center',
key: 'action', key: 'action',
}, },
]); ]);
@ -693,13 +714,14 @@
background: #ffffff; background: #ffffff;
box-shadow: 0px 2px 20px rgb(69 123 234 / 20%); box-shadow: 0px 2px 20px rgb(69 123 234 / 20%);
border-radius: 8px; border-radius: 8px;
padding: 16px;
} }
.pillarChart { .pillarChart {
width: calc(80% - 12px); width: calc(80% - 12px);
background: #ffffff; background: #ffffff;
box-shadow: 0px 2px 20px rgb(69 123 234 / 20%); box-shadow: 0px 2px 20px rgb(69 123 234 / 20%);
border-radius: 8px; border-radius: 8px;
padding: 5px; padding: 16px;
} }
} }
.tablePart { .tablePart {

28
hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/index.vue

@ -103,7 +103,7 @@
}); });
} else if (key === '5') { } else if (key === '5') {
tabId.value = 7; tabId.value = 7;
energyType.value = 'CARBON_EMISSIONS'; energyType.value = 'HEAT_SUPPLY';
energyTypeName.value = '供热量'; energyTypeName.value = '供热量';
nextTick(() => { nextTick(() => {
if (carbonEmissionsRef.value) { if (carbonEmissionsRef.value) {
@ -113,7 +113,7 @@
}); });
} else if (key === '6') { } else if (key === '6') {
tabId.value = 8; tabId.value = 8;
energyType.value = 'HEAT_SUPPLY'; energyType.value = 'CARBON_EMISSIONS';
energyTypeName.value = '碳排量'; energyTypeName.value = '碳排量';
nextTick(() => { nextTick(() => {
if (provideHotRef.value) { if (provideHotRef.value) {
@ -124,3 +124,27 @@
} }
}; };
</script> </script>
<style scoped lang="less">
:deep(.ant-tabs-ink-bar) {
height: 3px !important;
border-radius: 2px !important;
background: rgba(67, 136, 251, 1);
}
//table
:deep(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn) {
font-size: 14px !important;
font-weight: bolb !important;
color: #333333 !important;
}
:deep(.ant-tabs-tab-btn) {
font-size: 14px !important;
color: #666666 !important;
}
:deep(.ant-tabs-content) {
height: 100%;
}
:deep(.ant-tabs-tabpane) {
height: 100%;
}
</style>

3
hx-ai-intelligent/src/view/equipmentControl/airConditionControlSystem/index.vue

@ -38,7 +38,8 @@
width="496" width="496"
:forceRender="preload" :forceRender="preload"
placement="right" placement="right"
:body-style="{ background: 'rgba(0, 0, 0)', opacity: 0.8 }" style="opacity: 0.8"
:body-style="{ background: 'black' }"
:closable="false" :closable="false"
id="drawer" id="drawer"
:maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }"> :maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }">

5
hx-ai-intelligent/src/view/equipmentControl/airConditionControlSystem/tabs1.less

@ -160,7 +160,8 @@
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
opacity: 1; opacity: 1;
border: 1px solid rgba(207, 212, 219, 1); // border: 1px solid rgba(207, 212, 219, 1);
border: none;
line-height: 20.27px; line-height: 20.27px;
color: white; color: white;
text-align: center; text-align: center;
@ -171,7 +172,7 @@
.selected { .selected {
background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%); background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%);
color: rgba(0, 61, 90, 1); color: rgba(0, 61, 90, 1);
border: 1px solid white; border: none;
} }
.btn:hover { .btn:hover {

3
hx-ai-intelligent/src/view/equipmentControl/lightingManage/indexs.vue

@ -37,8 +37,9 @@
class="drawer-item" class="drawer-item"
width="496" width="496"
:forceRender="preload" :forceRender="preload"
style="opacity: 0.8"
placement="right" placement="right"
:body-style="{ background: 'rgba(0, 0, 0)', opacity: 0.8 }" :body-style="{ background: 'black' }"
:closable="false" :closable="false"
id="drawer" id="drawer"
:maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }"> :maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }">

5
hx-ai-intelligent/src/view/equipmentControl/lightingManage/tabs1.less

@ -181,7 +181,8 @@
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
opacity: 1; opacity: 1;
border: 1px solid rgba(207, 212, 219, 1); border: none;
// border: 1px solid rgba(207, 212, 219, 1);
line-height: 20.27px; line-height: 20.27px;
color: white; color: white;
text-align: center; text-align: center;
@ -192,7 +193,7 @@
.selected { .selected {
background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%); background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%);
color: rgba(0, 61, 90, 1); color: rgba(0, 61, 90, 1);
border: 1px solid white; border: none;
} }
.btn:hover { .btn:hover {

2
hx-ai-intelligent/src/view/equipmentControl/lightingManage/tabs1.vue

@ -249,7 +249,7 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 100%; height: 100px"></div> <div style="width: 100%; height: 50px"></div>
<div class="button-box"> <div class="button-box">
<button class="cancel" @click="executeVisible = false">取消</button> <button class="cancel" @click="executeVisible = false">取消</button>
<a-popconfirm <a-popconfirm

2
hx-ai-intelligent/src/view/equipmentControl/lightingManage/tabs3.vue

@ -104,7 +104,7 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 100%; height: 160px"></div> <div style="width: 100%; height: 100px"></div>
<div class="button-box"> <div class="button-box">
<button class="cancel" @click="logModalVisible = false">关闭</button> <button class="cancel" @click="logModalVisible = false">关闭</button>
</div> </div>

2
hx-ai-intelligent/src/view/equipmentControl/style/dialogStyle.less

@ -1,7 +1,7 @@
// 设备群控 > 抽屉 > 控制面板 & 日志 的附加弹窗 // 设备群控 > 抽屉 > 控制面板 & 日志 的附加弹窗
.out-dialog { .out-dialog {
position: fixed; position: fixed;
right: 496px; right: 497px;
width: 500px; width: 500px;
height: 100%; height: 100%;
z-index: 0; z-index: 0;

5
hx-ai-intelligent/src/view/equipmentControl/ventilationSystem/components/tabs1.less

@ -180,7 +180,8 @@
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
opacity: 1; opacity: 1;
border: 1px solid rgba(207, 212, 219, 1); // border: 1px solid rgba(207, 212, 219, 1);
border: none;
line-height: 20.27px; line-height: 20.27px;
color: white; color: white;
text-align: center; text-align: center;
@ -191,7 +192,7 @@
.selected { .selected {
background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%); background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%);
color: rgba(0, 61, 90, 1); color: rgba(0, 61, 90, 1);
border: 1px solid white; border: none;
} }
.btn:hover { .btn:hover {

9
hx-ai-intelligent/src/view/equipmentControl/ventilationSystem/index.vue

@ -127,7 +127,8 @@
:width="496" :width="496"
:forceRender="preload" :forceRender="preload"
placement="right" placement="right"
:body-style="{ background: 'rgba(0, 0, 0)', opacity: 0.8, color: 'white' }" style="opacity: 0.8"
:body-style="{ background: 'black' }"
:closable="false" :closable="false"
id="drawer" id="drawer"
:maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }" :maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }"
@ -189,7 +190,8 @@
:width="496" :width="496"
:forceRender="preload" :forceRender="preload"
placement="right" placement="right"
:body-style="{ background: 'rgba(0, 0, 0)', opacity: 0.8, color: 'white' }" style="opacity: 0.8"
:body-style="{ background: 'black' }"
:closable="false" :closable="false"
id="drawer" id="drawer"
:maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }" :maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }"
@ -250,7 +252,8 @@
:width="496" :width="496"
:forceRender="preload" :forceRender="preload"
placement="right" placement="right"
:body-style="{ background: 'rgba(0, 0, 0)', opacity: 0.8, color: 'white' }" style="opacity: 0.8"
:body-style="{ background: 'black' }"
:closable="false" :closable="false"
id="drawer" id="drawer"
:maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }" :maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }"

5
hx-ai-intelligent/src/view/equipmentControl/waterSystem/component/logTab.vue

@ -321,7 +321,8 @@
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
opacity: 1; opacity: 1;
border: 1px solid rgba(207, 212, 219, 1); // border: 1px solid rgba(207, 212, 219, 1);
border: none;
line-height: 20.27px; line-height: 20.27px;
color: white; color: white;
text-align: center; text-align: center;
@ -332,7 +333,7 @@
.selected { .selected {
background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%); background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%);
color: rgba(0, 61, 90, 1); color: rgba(0, 61, 90, 1);
border: 1px solid white; border: none;
} }
.btn:hover { .btn:hover {

8
hx-ai-intelligent/src/view/equipmentControl/waterSystem/index.vue

@ -55,7 +55,8 @@
class="drawer-item" class="drawer-item"
width="496" width="496"
placement="right" placement="right"
:body-style="{ background: 'rgba(0, 0, 0)', opacity: 0.8 }" style="opacity: 0.8"
:body-style="{ background: 'black' }"
:closable="false" :closable="false"
id="drawer" id="drawer"
:maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }"> :maskStyle="{ 'background-color': 'rgba(0, 0, 0, 0)' }">
@ -523,7 +524,8 @@
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
opacity: 1; opacity: 1;
border: 1px solid rgba(207, 212, 219, 1); // border: 1px solid rgba(207, 212, 219, 1);
border: none;
line-height: 20.27px; line-height: 20.27px;
color: white; color: white;
text-align: center; text-align: center;
@ -534,7 +536,7 @@
.selected { .selected {
background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%); background: linear-gradient(180deg, rgba(201, 245, 255, 1) 0%, rgba(138, 215, 255, 1) 100%);
color: rgba(0, 61, 90, 1); color: rgba(0, 61, 90, 1);
border: 1px solid white; border: none;
} }
.btn:hover { .btn:hover {

6
hx-ai-intelligent/src/view/equipmentManage/group/config.ts

@ -346,8 +346,8 @@ export const tableConfig = (el, elGroup, elFormula, defaultParams) => {
api: group.importGroup, // 导入接口名 api: group.importGroup, // 导入接口名
// dynamicParams: { defaultParams: defaultParams }, // dynamicParams: { defaultParams: defaultParams },
params: defaultParams.value, params: defaultParams.value,
title: '设备信息', // 弹窗title title: '计算节点', // 弹窗title
templateName: 'whiteListUser', // 所使用的文件名称 templateName: 'groupList', // 所使用的文件名称
indexName: '设备id', // 匹配类型字段 indexName: '设备id', // 匹配类型字段
message: [ message: [
{ label: '1、若必填项未填写,则不能进行导入操作' }, { label: '1、若必填项未填写,则不能进行导入操作' },
@ -364,7 +364,7 @@ export const tableConfig = (el, elGroup, elFormula, defaultParams) => {
type: 'primary', type: 'primary',
handle: () => { handle: () => {
// http.get('/asset/file/whiteListUser.xlsx'); // http.get('/asset/file/whiteListUser.xlsx');
doWnload('/hx-ai-intelligent/asset/file/whiteListUser.xlsx'); doWnload('/hx-ai-intelligent/asset/file/groupList.xlsx');
}, },
}, },
], ],

3
hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue

@ -158,4 +158,7 @@
::v-deep .ant-table-pagination.ant-pagination { ::v-deep .ant-table-pagination.ant-pagination {
margin: 26px 0 !important; /* 根据需要调整 padding 大小 */ margin: 26px 0 !important; /* 根据需要调整 padding 大小 */
} }
:deep(.ns-list-table[data-v-64b9682f]:not(.ant-drawer-body > *):not(.ant-form > *)) {
background-color: #ffffff !important;
}
</style> </style>

2
hx-ai-intelligent/src/view/monitor/energyMonitor/graphGraph/index.vue

@ -116,7 +116,7 @@
const date = params[0].name; const date = params[0].name;
const values = params const values = params
.map((param: any) => { .map((param: any) => {
const unit = data.value.find((d) => d.date === date)?.unit || ''; const unit = data.value[0]?.unit || '';
return `<tr> return `<tr>
<td>${param.marker}${param.seriesName}</td> <td>${param.marker}${param.seriesName}</td>
<td style="text-align: right;">${param.value} ${unit}</td> <td style="text-align: right;">${param.value} ${unit}</td>

2
hx-ai-intelligent/src/view/monitor/energyMonitor/page.vue

@ -104,6 +104,8 @@
} else { } else {
treeRef.value.getSelectAnalyse(activeKey.value); treeRef.value.getSelectAnalyse(activeKey.value);
} }
isGraph.value = true;
iconName.value = 'biaoge1';
}; };
function change() { function change() {

19
hx-ai-intelligent/src/view/monitor/energyMonitor/tree/index.vue

@ -131,6 +131,8 @@
import { device, group } from '/@/api/deviceManage'; import { device, group } from '/@/api/deviceManage';
import { energyMonitor } from '/@/api/monitor'; import { energyMonitor } from '/@/api/monitor';
import { dict, getEnum } from '/@/api'; import { dict, getEnum } from '/@/api';
//
import { items } from '/@/store/item';
export default defineComponent({ export default defineComponent({
// eslint-disable-next-line vue/multi-word-component-names // eslint-disable-next-line vue/multi-word-component-names
@ -139,6 +141,9 @@
const select = ref<HTMLElement | null>(null); const select = ref<HTMLElement | null>(null);
const divWidth = ref(0); // div const divWidth = ref(0); // div
//
const state = items();
// div // div
// const getDivWidth = () => { // const getDivWidth = () => {
// if (select.value) { // if (select.value) {
@ -311,6 +316,8 @@
}; };
const getSelectGraph = (key: any) => { const getSelectGraph = (key: any) => {
//
state.setLoading(true);
if (key) { if (key) {
activeKey.value = key; activeKey.value = key;
// if ( // if (
@ -407,9 +414,15 @@
pageData.graphTableColumns = []; pageData.graphTableColumns = [];
pageData.graphGraphList = []; pageData.graphGraphList = [];
} }
})
.finally(() => {
//
state.setLoading(false);
}); });
}; };
const getSelectAnalyse = (key: any) => { const getSelectAnalyse = (key: any) => {
//
state.setLoading(true);
if (key) { if (key) {
activeKey.value = key; activeKey.value = key;
// if (pageData.analysisGraphList.length > 0 && pageData.analysisTableList.length > 0) { // if (pageData.analysisGraphList.length > 0 && pageData.analysisTableList.length > 0) {
@ -480,6 +493,12 @@
pageData.analysisTableList = []; pageData.analysisTableList = [];
pageData.analysisGraphList = []; pageData.analysisGraphList = [];
} }
})
.finally(() => {
//
setTimeout(function () {
state.setLoading(false);
}, 2000);
}); });
}; };

2
hx-ai-intelligent/src/view/monitor/environmentMonitor/index.vue

@ -29,7 +29,7 @@
<aggregate-data ref="aggregateDataRef" v-if="activeKey == '1'" style="height: 85%" /> <aggregate-data ref="aggregateDataRef" v-if="activeKey == '1'" style="height: 85%" />
<history-data ref="historyDataRef" v-if="activeKey == '2'" style="height: 90%" /> <history-data ref="historyDataRef" v-if="activeKey == '2'" style="height: 90%" />
<average-data ref="averageDataRef" v-if="activeKey == '3'" style="height: 85%" /> <average-data ref="averageDataRef" v-if="activeKey == '3'" style="height: 90%" />
</div> </div>
<a-modal <a-modal

3
lib/component/table/table.vue

@ -340,6 +340,9 @@
onChange: (selectedRowKeys: never[], selectedRows: never[]) => { onChange: (selectedRowKeys: never[], selectedRows: never[]) => {
tableState.selectedRowKeys = selectedRowKeys; tableState.selectedRowKeys = selectedRowKeys;
tableState.selectedRows = selectedRows; tableState.selectedRows = selectedRows;
if ('radio' === rowSelection.type) {
rowSelection.selectedRowKeys = selectedRowKeys;
}
}, },
}, },
isFunction(rowSelection) ? rowSelection(tableState) : rowSelection, isFunction(rowSelection) ? rowSelection(tableState) : rowSelection,

Loading…
Cancel
Save