zhaohy 1 month ago
parent
commit
3672d6feb3
  1. 6
      hx-ai-intelligent/src/api/carbonEmissionFactorLibrary.ts
  2. 5
      hx-ai-intelligent/src/api/deviceManage.ts
  3. 1
      hx-ai-intelligent/src/config/app.config.ts
  4. 6
      hx-ai-intelligent/src/icon/carbonPlanningDown.svg
  5. 6
      hx-ai-intelligent/src/icon/carbonPlanningUp.svg
  6. 2
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonAssets/index.vue
  7. 2
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionFactorLibrary/config.ts
  8. 4
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionFactorLibrary/index.vue
  9. 1
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonEmissionStatistics/index.vue
  10. 18
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonInventoryCheck/fillInPage/index.vue
  11. 35
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/all/index.vue
  12. 236
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/category/categoryDeatil.vue
  13. 95
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/category/index.vue
  14. 63
      hx-ai-intelligent/src/view/carbonEmissionManage/carbonPlanning/index.vue
  15. 7
      hx-ai-intelligent/src/view/equipmentControl/airConditionControlSystem/dialogStyle.less
  16. 102
      hx-ai-intelligent/src/view/equipmentControl/airConditioningSystem/index.vue
  17. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/airConditioner.png
  18. 44
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/airConditioner.svg
  19. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/floorHeating.png
  20. 39
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/floorHeating.svg
  21. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/freshAir.png
  22. 42
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/freshAir.svg
  23. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/people.png
  24. 39
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/people.svg
  25. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/temperature.png
  26. 39
      hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/temperature.svg
  27. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/CO2.png
  28. 42
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/CO2.svg
  29. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/PM25.png
  30. 42
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/PM25.svg
  31. 44
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/a1.svg
  32. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/fanMachine.png
  33. 41
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/fanMachine.svg
  34. 42
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/humidity.svg
  35. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/ventilatingFan.png
  36. 39
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/ventilatingFan.svg
  37. BIN
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/window.png
  38. 42
      hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/window.svg
  39. 7
      hx-ai-intelligent/src/view/equipmentControl/lightingManage/dialogStyle.less
  40. 2190
      hx-ai-intelligent/src/view/equipmentControl/lightingManage/indexs1.vue
  41. 78
      hx-ai-intelligent/src/view/equipmentControl/ventilationSystem/index.vue
  42. 459
      hx-ai-intelligent/src/view/equipmentManage/group/config.ts
  43. 123
      hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue
  44. 55
      hx-ai-intelligent/src/view/equipmentManage/group/index.vue
  45. 77
      hx-ai-intelligent/src/view/equipmentManage/group/setFactor.vue

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

@ -52,7 +52,7 @@ export enum carbonInventoryCheck {
update = '/carbon-smart/api/carbon/inventory/update',
del = '/carbon-smart/api/carbon/inventory/del',
// 获取排放源表格数据
findUnitById = '/carbon-smartapi/carbon/inventory/findById',
findUnitById = '/carbon-smart/api/carbon/inventory/findById',
getDetailsList = '/carbon-smart/api/carbon/inventory/details/getDetailsList',
updateTable = '/carbon-smart/api/carbon/inventory/details/update',
// 排放统计接口
@ -86,4 +86,8 @@ export enum carbonPlanning {
yearAndMonthAchievement = '/carbon-smart/api/carbon/planning/yearAndMonthAchievement',
annualElectricityConsumption = '/carbon-smart/api/carbon/planning/annualElectricityConsumption',
electricityUsageBackThen = '/carbon-smart/api/carbon/planning/electricityUsageBackThen',
detailedStatisticalDataTable = '/carbon-smart/api/carbon/planning/detailedStatisticalDataTable',
detailedStatisticalDataChart = '/carbon-smart/api/carbon/planning/detailedStatisticalDataChart',
batchOrUpdate = '/carbon-smart/api/carbon/planning/batchOrUpdate',
addNodes = '/carbon-smart/api/carbon/planning/addNodes',
}

5
hx-ai-intelligent/src/api/deviceManage.ts

@ -29,4 +29,9 @@ export enum group {
dropGroupFilter = `${BASE_URL}/deviceGroup/dropGroupFilter`, // 分组列表查询
dropGroupInfoFilter = `${BASE_URL}/deviceGroup/dropGroupInfoFilter`, // 计算列表查询
queryDeviceToEnergy = `${BASE_URL}/deviceGroup/queryDeviceToEnergy`, // 能耗监测用查询设备(能耗监测设备树)
getCarbonGroupList = `${BASE_URL}/deviceGroup/carbonEmissions/getGroupList`, // 分组管理-碳排放-分组查询设备
deleteCarbonDevice = `${BASE_URL}/deviceGroup/carbonEmissions/deleteDevice`, // 分组管理-碳排放-删除设备
addCarbonDevice = `${BASE_URL}/deviceGroup/carbonEmissions/addDevice`, // 分组管理-碳排放-添加设备
updateCarbonFactor = `${BASE_URL}/deviceGroup/carbonEmissions/updateFactor`, // 分组管理-碳排放-设置因子
}

1
hx-ai-intelligent/src/config/app.config.ts

@ -98,6 +98,7 @@ export const appConfig = {
adminFlag: 'adminFlag',
});
sessionStorage.setItem('ORGID', info.orgId);
sessionStorage.setItem('LINKLIST', JSON.stringify(info.linkList));
sessionStorage.setItem('ISADMIN', trD?.adminFlag === '1');
selectDefaultDisabled.value = info?.adminFlag === '1';
selectDefaultValue.value = info.orgId;

6
hx-ai-intelligent/src/icon/carbonPlanningDown.svg

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.72705078125" height="20.530746459960938" viewBox="0 0 16.72705078125 20.530746459960938" fill="none">
<path d="M8.83553 0.223206C8.71956 0.0818939 8.54638 0 8.36358 0C8.18079 0 8.00761 0.0818939 7.89164 0.223206L0.139786 9.14842C-0.120087 9.44533 -0.00717926 9.69086 0.391891 9.69086L3.29167 9.69086C3.69073 9.69086 4.01572 10.0111 4.01572 10.4054L4.01572 15.5251C4.01572 15.9194 4.3413 16.242 4.73977 16.242L11.988 16.242C12.3865 16.242 12.7121 15.9194 12.7121 15.5251L12.7121 10.4054C12.7121 10.0111 13.037 9.69086 13.4361 9.69086L16.3335 9.69086C16.7326 9.69086 16.8479 9.44533 16.588 9.14842L8.83553 0.223206Z" fill="#F36163" >
</path>
<path d="M4.55933 20.5308L12.1678 20.5308C12.4977 20.5308 12.7652 20.2633 12.7652 19.9334L12.7652 18.1411C12.7652 17.8112 12.4977 17.5437 12.1678 17.5437L4.55933 17.5437C4.22937 17.5437 3.96191 17.8112 3.96191 18.1411L3.96191 19.9334C3.96191 20.2633 4.2294 20.5308 4.55933 20.5308Z" fill="#F36163" >
</path>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

6
hx-ai-intelligent/src/icon/carbonPlanningUp.svg

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.72705078125" height="20.530746459960938" viewBox="0 0 16.72705078125 20.530746459960938" fill="none">
<path d="M8.83553 0.223206C8.71956 0.0818939 8.54638 0 8.36358 0C8.18079 0 8.00761 0.0818939 7.89164 0.223206L0.139786 9.14842C-0.120087 9.44533 -0.00717926 9.69086 0.391891 9.69086L3.29167 9.69086C3.69073 9.69086 4.01572 10.0111 4.01572 10.4054L4.01572 15.5251C4.01572 15.9194 4.3413 16.242 4.73977 16.242L11.988 16.242C12.3865 16.242 12.7121 15.9194 12.7121 15.5251L12.7121 10.4054C12.7121 10.0111 13.037 9.69086 13.4361 9.69086L16.3335 9.69086C16.7326 9.69086 16.8479 9.44533 16.588 9.14842L8.83553 0.223206Z" fill="#F36163" >
</path>
<path d="M4.55933 20.5308L12.1678 20.5308C12.4977 20.5308 12.7652 20.2633 12.7652 19.9334L12.7652 18.1411C12.7652 17.8112 12.4977 17.5437 12.1678 17.5437L4.55933 17.5437C4.22937 17.5437 3.96191 17.8112 3.96191 18.1411L3.96191 19.9334C3.96191 20.2633 4.2294 20.5308 4.55933 20.5308Z" fill="#F36163" >
</path>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

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

@ -148,7 +148,7 @@
<div class="moneyImg"
><img width="68px" height="68px" src="../../../../src/icon/carbonAssetsMoney-4.svg"
/></div>
<div class="moneyTitle">全国碳账户估值CNY</div>
<div class="moneyTitle">碳资产总估值CNY</div>
<div class="moneyTotal" style="color: rgba(229, 102, 22, 1)">{{ whole.whole }}</div>
</div>
<div class="title" style="justify-content: center">

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

@ -191,7 +191,7 @@ export const formConfig = (disabled) => {
},
{
label: '参考文献',
field: 'reference',
field: 'bibliography',
component: 'NsTextarea',
componentProps: {
placeholder: '请输入参考文献',

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

@ -686,7 +686,7 @@
},
{
title: '参考文献',
dataIndex: 'reference',
dataIndex: 'bibliography',
},
{
title: '引用数量',
@ -824,7 +824,7 @@
},
},
{
field: 'reference',
field: 'bibliography',
label: '文献关键字',
component: 'NsInput',
componentProps: {

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

@ -37,7 +37,6 @@
energyConsumptionRef.value.mainRef.nsTableRef.reload();
}
} else if (key === '2') {
debugger
if (carbonEmissionsRef.value) {
carbonEmissionsRef.value.getTableList(); //
}

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

@ -1163,6 +1163,8 @@
let chartInstance: echarts.ECharts | null = null;
const drawEcharts = () => {
chartInstance = echarts.init(tplxChart.value);
let listData = datalist.value;
let linkDatas = linksData.value;
let Color = [
'#61FEFF',
'#937FE6',
@ -1180,6 +1182,8 @@
'#bbc951',
'#FFC14B',
'#b785a6',
'#c23531',
'#2f4554',
];
let Color1 = [
'#04E0F3',
@ -1198,6 +1202,8 @@
'#bbc951',
'#FFC14B',
'#b785a6',
'#c23531',
'#2f4554',
];
let sourceLabel = [
'right',
@ -1219,16 +1225,16 @@
];
let itemStyleColor = [];
let labelSource = [];
for (let i = 0; i < datalist.value.length; i++) {
datalist.value[i].label = {
for (let i = 0; i < listData.length; i++) {
listData[i].label = {
normal: {
position: sourceLabel[i],
},
};
labelSource.push(sourceLabel[i]);
}
for (let d = 0; d < datalist.value.length; d++) {
datalist.value[d].itemStyle = {
for (let d = 0; d < listData.length; d++) {
listData[d].itemStyle = {
normal: {
color: {
type: 'linear',
@ -1250,7 +1256,7 @@
},
},
};
itemStyleColor.push(datalist.value[d]);
itemStyleColor.push(listData[d]);
}
const option = {
backgroundColor: 'transparent',
@ -1270,7 +1276,7 @@
nodeWidth: 25,
focusNodeAdjacency: 'allEdges',
data: itemStyleColor,
links: linksData.value,
links: linkDatas,
label: {
normal: {
color: '#fff',

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

@ -7,13 +7,15 @@
v-if="selectedTime"
style="margin-left: 5%"
valueFormat="YYYY"
:value="selectYear"
v-model:value="selectYear"
@change="changeYear"
picker="year" />
<a-date-picker
v-else
style="margin-left: 5%"
valueFormat="YYYY-MM"
:value="selectMonth"
v-model:value="selectMonth"
@change="changeMonth"
picker="month" />
</div>
<div class="operation">
@ -30,7 +32,13 @@
</template>
</div>
<div class="tablePart">
<a-table :columns="columns" :data-source="data" bordered :pagination="false"> </a-table>
<a-table
:columns="columns"
:data-source="data"
bordered
:pagination="false"
:scroll="{ x: 1300, y: 300 }">
</a-table>
</div>
</div>
</div>
@ -52,26 +60,35 @@
return http.post(api, params);
};
const selectYear = ref<Dayjs>(dayjs(new Date().getFullYear().toString()));
const selectMonth = ref<Dayjs>();
const selectMonth = ref<Dayjs>(dayjs().startOf('year').month(0));
// /
const monthStyles = ref('background: #f2f2f2');
const yearStyles = ref('background: #2778ff');
const selectedTime = ref(true);
const changeMonth = () => {
queryParams.value.yearMonth = selectMonth.value;
getTableData();
};
const changeToMonth = () => {
monthStyles.value = 'background: #2778ff';
yearStyles.value = 'background: #f2f2f2';
queryParams.value.yearAndMonth = 'month';
queryParams.value.year = selectMonth.value;
queryParams.value.yearMonth = selectMonth.value.format('YYYY-DD');
columns.value[2].title = '月份';
columns.value[2].dataIndex = 'month';
columns.value[2].dataIndex = 'yearMonth';
selectedTime.value = false;
getTableData();
};
const changeYear = () => {
queryParams.value.year = selectYear.value;
getTableData();
};
const changeToYear = () => {
monthStyles.value = 'background: #f2f2f2';
yearStyles.value = 'background: #2778ff';
queryParams.value.yearAndMonth = 'year';
queryParams.value.year = selectYear.value;
delete queryParams.value.yearMonth;
// queryParams.value.year = selectYear.value;
columns.value[2].title = '年份';
columns.value[2].dataIndex = 'year';
selectedTime.value = true;
@ -85,7 +102,7 @@
const chart = echarts.init(document.getElementById(`ydlChart_${index}`)!);
const handred = 100;
let point = parseInt(item.budgetAchievement.replace("%", ""));
let point = parseInt(item.budgetAchievement.replace('%', ''));
const option = {
backgroundColor: 'transparent',
title: [
@ -197,7 +214,7 @@
},
{
title: '计量单位',
dataIndex: 'name',
dataIndex: 'unitMeasurement',
},
{
title: '总实际用量',

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

@ -13,23 +13,49 @@
<div class="chart" ref="chartRef"></div>
<div class="contrast">
<div class="model">
<div class="quantity"><span>12,500.00</span>kwh</div>
<div class="quantityTitle">2023年实际用量</div>
<div class="quantity">
<span>{{ lastYearActualUsage }}</span>
kwh
</div>
<div class="quantityTitle">{{ Number(props.year) - 1 }}年实际用量</div>
</div>
<div class="model">
<div class="quantity"><span>12,500.00</span>kwh</div>
<div class="quantityTitle">2024年实际用量</div>
<div class="quantity">
<span>{{ actualUsage }}</span>
kwh
</div>
<div class="quantityTitle">{{ props.year }}年实际用量</div>
</div>
<div class="model">
<div class="quantity"><span>12,500.00</span>kwh</div>
<div class="quantityTitle">2024年预算</div>
<div class="quantity">
<span>{{ budget }}</span>
kwh
</div>
<div class="quantityTitle">{{ props.year }}年预算</div>
</div>
<div class="model">
<div class="quantity"><span>12,500.00</span>kwh</div>
<div class="quantity">
<span>{{ referenceValue }}</span>
kwh
</div>
<div class="quantityTitle">基准值</div>
</div>
<div class="model">
<div class="quantity"><span>12,500.00</span>kwh</div>
<div class="quantity">
<img
width="20px"
height="28px"
v-if="count < 0"
src="../../../../../src/icon/carbonPlanningDown.svg" />
<span v-if="count < 0" style="margin-left: 5px">{{ Math.abs(count) }}%</span>
<img
width="20px"
height="28px"
v-if="count > 0"
src="../../../../../src/icon/carbonPlanningUp.svg" />
<span v-if="count > 0" style="margin-left: 5px">{{ count }}%</span>
<span v-if="count === 0" style="margin-left: 5px">{{ count }}%</span>
</div>
<div class="quantityTitle">实际|预算</div>
</div>
</div>
@ -64,6 +90,7 @@
selectedRowKeys: selectedRowKeys,
onChange: onSelectionChange,
}"
:scroll="{ x: 1300, y: 400 }"
:pagination="false">
<template #bodyCell="{ column, text, record }">
<template v-if="column.key === 'action'">
@ -75,26 +102,26 @@
</a-table>
</a-card>
</div>
<!-- 设置 -->
<!-- 批量设置 -->
<a-modal :visible="open" title="批量设置" @ok="handleOk" @cancel="onCancel">
<a-form ref="formRef" :model="formState" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item label="是否按去年折算">
<a-select ref="select" :value="formState.value1">
<a-select-option value="1"></a-select-option>
<a-select-option value="0"></a-select-option>
<a-select ref="select" v-model:value="formState.isLastYear" @change="selectChange">
<a-select-option :value="1"></a-select-option>
<a-select-option :value="0"></a-select-option>
</a-select>
</a-form-item>
<a-form-item label="计算方式">
<a-select ref="select" :value="formState.value2">
<a-select-option value="1">手动</a-select-option>
<a-select-option value="0">自动</a-select-option>
<!-- <a-form-item label="计算方式">
<a-select ref="select" v-model:value="formState.countMethod">
<a-select-option value="0">手动</a-select-option>
<a-select-option value="1">自动</a-select-option>
</a-select>
</a-form-item>
</a-form-item> -->
<a-form-item label="折算率">
<a-input :value="formState.name" suffix="%" disabled />
<a-input v-model:value="formState.conversionRate" suffix="%" :disabled="disabled" />
</a-form-item>
<a-form-item label="预算值">
<a-input :value="formState.email" suffix="kWh" disabled />
<a-input v-model:value="formState.budget" suffix="kWh" :disabled="!disabled" />
</a-form-item>
</a-form>
</a-modal>
@ -105,7 +132,7 @@
:width="500"
@close="onClose"
:footer-style="{ textAlign: 'right' }">
<div> 节点站台照明 </div>
<div> 节点{{ props.nodeName }} </div>
<a-table
:columns="drawerColumns"
:data-source="newTableData"
@ -134,15 +161,34 @@
</template>
<script lang="ts" setup>
import { ref, defineEmits, reactive } from 'vue';
import { ref, defineEmits, reactive, toRaw } from 'vue';
import { http } from '/nerv-lib/util/http';
import { CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons-vue';
import { carbonPlanning } from '/@/api/carbonEmissionFactorLibrary';
import * as echarts from 'echarts';
import { any, string } from 'vue-types';
// id
const props = defineProps({
parentId: {
type: Number,
},
year: {
type: string,
},
type: {
type: Number,
},
nodeName: {
type: string,
},
});
console.log(props, 'xxy');
const orgId = ref('');
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
orgId.value = result;
const fetch = (api, params = { orgId }) => {
return http.post(api, params);
};
//
const emit = defineEmits(['change-data']);
const changeParentData = () => {
@ -152,7 +198,20 @@
const selectedRowKeys = ref([]);
const onSelectionChange = (selectedKeys, selectedRows) => {
selectedRowKeys.value = selectedKeys;
formState.value.ids = selectedKeys;
};
const queryParams = ref({
orgId: orgId.value,
year: props.year,
itemizeId: props.parentId,
type: props.type,
});
const getTableData = () => {
fetch(carbonPlanning.detailedStatisticalDataTable, queryParams.value).then((res) => {
data.value = res.data;
});
};
getTableData();
const columns = ref([
{
title: '序号',
@ -162,35 +221,31 @@
},
{
title: '日期',
dataIndex: 'name',
dataIndex: 'yearMonth',
},
{
title: '2023年实际用量',
dataIndex: 'name',
title: Number(props.year) - 1 + '年实际用量',
dataIndex: 'lastYearActualUsage',
},
{
title: '2024年实际用量',
dataIndex: 'name',
title: props.year + '年实际用量',
dataIndex: 'actualUsage',
},
{
title: '基准值',
dataIndex: 'money',
dataIndex: 'referenceValue',
},
{
title: '是否按去年折算',
dataIndex: 'address',
},
{
title: '计算方式',
dataIndex: 'address',
dataIndex: 'lastYear',
},
{
title: '折算率',
dataIndex: 'address',
dataIndex: 'conversionRate',
},
{
title: '2024年预算',
dataIndex: 'address',
dataIndex: 'budget',
},
{
title: '操作',
@ -198,35 +253,50 @@
},
]);
const data = [
{
key: '1',
name: 'John Brown',
money: '¥300,000.00',
address: 'New York No. 1 Lake Park',
},
{
key: '2',
name: 'Jim Green',
money: '¥1,256,000.00',
address: 'London No. 1 Lake Park',
},
{
key: '3',
name: 'Joe Black',
money: '¥120,000.00',
address: 'Sidney No. 1 Lake Park',
},
];
const data = ref([]);
const open = ref(false);
const formRef = ref();
const formState = ref({});
const labelCol = { span: 6 };
const wrapperCol = { span: 18 };
const editData = () => {
const editData = (record) => {
open.value = true;
if (record) {
formState.value.ids = [record.id];
if (record.lastYear === '是') {
formState.value.isLastYear = 1;
} else {
formState.value.isLastYear = 0;
}
formState.value.conversionRate = record.conversionRate;
formState.value.budget = record.budget;
}
};
const disabled = ref(true);
const selectChange = (value) => {
if (value === 1) {
disabled.value = false;
} else {
disabled.value = true;
}
};
const handleOk = () => {
formRef.value
.validate()
.then(() => {
console.log('values', formState, toRaw(formState));
fetch(carbonPlanning.batchOrUpdate, formState.value).then((res) => {
open.value = false;
formState.value = {};
getTableData();
});
})
.catch((error) => {
console.log('error', error);
});
};
const onCancel = () => {
formState.value = {};
open.value = false;
};
const visible = ref(false);
@ -258,6 +328,33 @@
// echarts
const chartRef = ref(null);
let chartInstance: echarts.ECharts | null = null;
const XData = ref([]);
const actualUsageList = ref([]);
const lastYearActualUsageList = ref([]);
const budgetList = ref([]);
const referenceValueList = ref();
const actualUsage = ref();
const budget = ref();
const referenceValue = ref();
const lastYearActualUsage = ref();
const count = ref();
const getChartData = () => {
fetch(carbonPlanning.detailedStatisticalDataChart, queryParams.value).then((res) => {
console.log(res);
XData.value = res.data.yearMonth;
actualUsageList.value = res.data.actualUsageList;
lastYearActualUsageList.value = res.data.lastYearActualUsageList;
budgetList.value = res.data.budgetList;
referenceValueList.value = res.data.referenceValueList;
actualUsage.value = res.data.actualUsage;
budget.value = res.data.budget;
referenceValue.value = res.data.referenceValue;
lastYearActualUsage.value = res.data.lastYearActualUsage;
count.value = res.data.count;
chart();
});
};
getChartData();
const chart = () => {
chartInstance = echarts.init(chartRef.value);
const option = {
@ -278,7 +375,12 @@
bottom: '10%',
},
legend: {
data: ['昨日总人数', '今日实时人数', '昨日使用率', '今日使用率'],
data: [
Number(props.year) - 1 + '年实际用量',
props.year + '年实际用量',
props.year + '年预算',
'基准值',
],
top: '0',
left: '0',
textStyle: {
@ -289,7 +391,7 @@
itemHeight: 10, //
},
xAxis: {
data: ['2020', '2021', '2022', '2023', '2024'],
data: XData.value,
axisLine: {
show: true, //X线
lineStyle: {
@ -337,7 +439,7 @@
],
series: [
{
name: '昨日总人数',
name: Number(props.year) - 1 + '年实际用量',
type: 'bar',
barWidth: 18,
itemStyle: {
@ -345,10 +447,10 @@
color: '#6395f9',
},
},
data: [24, 45, 43, 35, 76],
data: lastYearActualUsageList.value,
},
{
name: '今日实时人数',
name: props.year + '年实际用量',
type: 'bar',
barWidth: 18,
itemStyle: {
@ -356,10 +458,10 @@
color: '#62daab',
},
},
data: [133, 23, 114, 67, 89],
data: actualUsageList.value,
},
{
name: '昨日使用率',
name: props.year + '年预算',
type: 'line',
smooth: true, // 线
symbol: 'none', //
@ -367,10 +469,10 @@
color: '#f4664a',
width: 2,
},
data: [4.2, 3.5, 2.9, 7.8, 2],
data: budgetList.value,
},
{
name: '今日使用率',
name: '基准值',
type: 'line',
smooth: true, // 线
symbol: 'none', //
@ -378,16 +480,13 @@
color: '#f4664a',
width: 2,
},
data: [4, 6, 9, 8, 5],
data: referenceValueList.value,
},
],
};
chartInstance = echarts.init(chartRef.value);
chartInstance.setOption(option);
};
setTimeout(() => {
chart();
}, 500);
// /
const showPart = ref(true);
const hideTopPart = () => {
@ -395,6 +494,7 @@
};
const showTopPart = () => {
showPart.value = true;
getChartData();
};
</script>

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

@ -48,13 +48,28 @@
</div>
</div>
<div class="totalContant" v-else>
<categoryDeatil @change-data="updateData" :parentId="parentId" />
<categoryDeatil @change-data="updateData" :parentId="parentId" :year="year" :type="type" :nodeName="nodeName" />
</div>
<!-- 新增节点 -->
<a-drawer :visible="visible" :width="500" @close="onClose" :footer-style="{ textAlign: 'right' }">
<p>Some contents...</p>
<p>Some contents...</p>
<p>Some contents...</p>
<a-tree
:expanded-keys="expandedKeys"
:selectedKeys="selectedKeys"
:checkedKeys="treeCheckedKeys"
:tree-data="treeData"
v-if="treeData && treeData.length > 0"
class="draggable-tree"
@check="checkTreeNode"
checkable
block-node>
<template #title="data">
<div class="treeRow">
<div>
<span>{{ data.pointName }}</span>
</div>
</div>
</template>
</a-tree>
<template #footer>
<a-button style="margin-right: 8px" @click="onClose">取消</a-button>
<a-button type="primary" @click="onSubmit">确定</a-button>
@ -68,7 +83,9 @@
import * as echarts from 'echarts';
import { http } from '/nerv-lib/util/http';
import categoryDeatil from './categoryDeatil.vue';
import { group } from '/@/api/deviceManage';
import { carbonPlanning } from '/@/api/carbonEmissionFactorLibrary';
import type { TreeProps } from 'ant-design-vue';
import 'echarts-liquidfill';
defineOptions({
energyType: 'all', // name
@ -78,6 +95,9 @@
tabId: {
type: Number,
},
energyType: {
type: String,
},
});
console.log(props, 'xxy');
@ -88,7 +108,7 @@
return http.post(api, params);
};
const selectYearValue = ref<Dayjs>(dayjs(new Date().getFullYear().toString()));
const selectMonthValue = ref<Dayjs>();
const selectMonthValue = ref<Dayjs>(dayjs().startOf('year').month(0));
const electricTotal = ref(true);
// /
const monthStyles = ref('background: #f2f2f2');
@ -98,7 +118,7 @@
monthStyles.value = 'background: #2778ff';
yearStyles.value = 'background: #f2f2f2';
columns.value[2].title = '月份';
columns.value[2].dataIndex = 'month';
columns.value[2].dataIndex = 'yearMonth';
selectedTime.value = false;
getMonthData();
getBallQuery.value.yearAndMonth = 'month';
@ -277,7 +297,7 @@
let ballChartInstance: echarts.ECharts | null = null;
const drawSQ = () => {
ballChartInstance = echarts.init(ballChartRef.value);
let ballData = (Number(ballValue.value)/100).toFixed(2)
let ballData = (Number(ballValue.value) / 100).toFixed(2);
const option = {
series: [
{
@ -322,8 +342,48 @@
};
//
const visible = ref(false);
const getTreeData = ref({
orgId: orgId.value,
energyType: props.energyType,
});
const addNode = () => {
visible.value = true;
fetch(group.queryDeviceGroupTree, getTreeData.value).then((res) => {
treeData.value = res.data;
// key
treeData.value = formatTreeData(treeData.value);
});
};
const genData: TreeProps['treeData'] = [];
const treeData = ref<TreeProps['treeData']>(genData);
const expandedKeys = ref<string[]>();
const selectedKeys = ref<string[]>([]);
const treeCheckedKeys = ref<string[]>([]);
const checkTreeNode = (checkedKeys, info) => {
treeCheckedKeys.value = checkedKeys;
addTreeNode.value.itemizeIds = treeCheckedKeys.value;
};
const formatTreeData = (treeData) => {
return treeData.map((node) => {
const newNode = { ...node };
newNode.key = String(node.id); // id key
if (node.children) {
newNode.children = formatTreeData(node.children);
}
return newNode;
});
};
const addTreeNode = ref({
orgId: orgId.value,
type: props.tabId,
year: selectYearValue.value.format('YYYY'),
});
const onSubmit = () => {
fetch(carbonPlanning.addNodes, addTreeNode.value).then((res) => {
data.value = res.data;
visible.value = false;
changeToYear();
});
};
const onClose = () => {
visible.value = false;
@ -379,18 +439,24 @@
});
const changeYear = () => {
yearQueryParams.value.year = selectYearValue.value;
year.value = selectYearValue.value;
addTreeNode.value.year = selectYearValue.value;
getYearData();
};
const getYearData = () => {
fetch(carbonPlanning.searchListByYear, yearQueryParams.value).then((res) => {
data.value = res.data;
res.data.forEach((item) => {
treeCheckedKeys.value.push((item.itemizeId).toString());
});
});
};
//
const monthQueryParams = ref({
orgId: orgId.value,
type: props.tabId,
yearMonth: selectYearValue.value.format('YYYY'),
year: selectYearValue.value.format('YYYY'),
yearMonth: selectMonthValue.value.format('YYYY-DD'),
});
const changeMonth = () => {
monthQueryParams.value.yearMonth = selectMonthValue.value;
@ -402,18 +468,23 @@
});
};
defineExpose({
getYearData,
getBallData,
getYearPillarData,
changeToYear,
electricTotal,
});
const parentId = ref();
const year = ref(selectYearValue.value.format('YYYY'));
const type = ref();
const nodeName = ref();
const detailData = (record) => {
electricTotal.value = false;
parentId.value = record.id;
parentId.value = record.itemizeId;
type.value = props.tabId;
nodeName.value = record.itemizeName;
};
//
const updateData = (type) => {
electricTotal.value = type;
changeToYear();
};
</script>

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

@ -4,19 +4,19 @@
<all ref="allRef" />
</a-tab-pane>
<a-tab-pane key="2" tab="用电量">
<category ref="electricRef" :tabId="tabId" />
<category ref="electricRef" :tabId="tabId" :energyType="energyType" />
</a-tab-pane>
<a-tab-pane key="3" tab="用水量">
<category ref="useWaterRef" />
<category ref="useWaterRef" :tabId="tabId" :energyType="energyType" />
</a-tab-pane>
<a-tab-pane key="4" tab="供水量">
<category ref="provideWaterRef" />
<category ref="provideWaterRef" :tabId="tabId" :energyType="energyType" />
</a-tab-pane>
<a-tab-pane key="5" tab="碳排">
<category ref="carbonEmissionsRef" />
<category ref="carbonEmissionsRef" :tabId="tabId" :energyType="energyType" />
</a-tab-pane>
<a-tab-pane key="6" tab="供热量">
<category ref="provideHotRef" />
<category ref="provideHotRef" :tabId="tabId" :energyType="energyType" />
</a-tab-pane>
</a-tabs>
</template>
@ -40,6 +40,7 @@
const provideHotRef = ref<InstanceType<typeof category> | null>(null);
// tab
const tabId = ref(1);
const energyType = ref();
const handleTabChange = (key) => {
console.log('Tab changed:', key);
//
@ -50,30 +51,50 @@
}
});
} else if (key === '2') {
tabId.value = 1;
energyType.value = 'ELECTRICITY_USAGE'
nextTick(() => {
if (electricRef.value) {
tabId.value = 1;
electricRef.value.getYearData(); //
electricRef.value.getBallData();
electricRef.value.getYearPillarData();
electricRef.value.electricTotal = true
electricRef.value.changeToYear(); //
}
});
} else if (key === '3') {
if (useWaterRef.value) {
useWaterRef.value.getYearData();
}
tabId.value = 2;
energyType.value = 'WATER_USAGE'
nextTick(() => {
if (useWaterRef.value) {
useWaterRef.value.electricTotal = true
useWaterRef.value.changeToYear(); //
}
});
} else if (key === '4') {
if (provideWaterRef.value) {
provideWaterRef.value.getYearData();
}
tabId.value = 3;
energyType.value = 'gongshuiliang'
nextTick(() => {
if (provideWaterRef.value) {
provideWaterRef.value.electricTotal = true
provideWaterRef.value.changeToYear(); //
}
});
} else if (key === '5') {
if (carbonEmissionsRef.value) {
carbonEmissionsRef.value.getYearData();
}
tabId.value = 4;
energyType.value = 'CARBON_EMISSIONS'
nextTick(() => {
if (carbonEmissionsRef.value) {
carbonEmissionsRef.value.electricTotal = true
carbonEmissionsRef.value.changeToYear(); //
}
});
} else if (key === '6') {
if (provideHotRef.value) {
provideHotRef.value.getYearData();
}
tabId.value = 5;
energyType.value = 'HEAT_SUPPLY'
nextTick(() => {
if (provideHotRef.value) {
provideHotRef.value.electricTotal = true
provideHotRef.value.changeToYear(); //
}
});
}
};
</script>

7
hx-ai-intelligent/src/view/equipmentControl/airConditionControlSystem/dialogStyle.less

@ -45,7 +45,12 @@
border: 2px solid transparent;
border-image: linear-gradient(to bottom, #0077ff, #00f6ff, #000000) 1;
.title-img {
padding-top: 6px;
margin-top: 6px;
}
.title-text {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.imgText {

102
hx-ai-intelligent/src/view/equipmentControl/airConditioningSystem/index.vue

@ -2,14 +2,13 @@
<div style="width: 100%; height: 100%; display: flex; overflow: hidden">
<div class="legend-box">
<template v-for="(item, index) in legend" :key="index">
<div
class="legend-box-item"
:style="{
'background-image': selectIndex === index ? 'url(' + selectImg + ')' : '',
}"
@click="selectLegend(item, index)">
<div class="legend-box-item-img">
<img style="width: 42px" :src="item.url" />
<div class="legend-box-item" @click="selectLegend(item, index)">
<div
class="legend-box-item-img"
:style="{
'background-image': selectIndex === index ? 'url(' + selectImg + ')' : '',
}">
<img :src="item.url" />
</div>
<div class="legend-box-item-name">
{{ item.name }}
@ -169,11 +168,11 @@
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue';
/* 图片 */
import temperature from '../image/airConditioningSystem/temperature.png';
import people from '../image/airConditioningSystem/people.png';
import freshAir from '../image/airConditioningSystem/freshAir.png';
import airConditioner from '../image/airConditioningSystem/airConditioner.png';
import floorHeating from '../image/airConditioningSystem/floorHeating.png';
import temperature from '../image/airConditioningSystem/temperature.svg';
import people from '../image/airConditioningSystem/people.svg';
import freshAir from '../image/airConditioningSystem/freshAir.svg';
import airConditioner from '../image/airConditioningSystem/airConditioner.svg';
import floorHeating from '../image/airConditioningSystem/floorHeating.svg';
import selectImg from '../image/airConditioningSystem/selectImg.png';
//
import sunRed from '../image/airConditioningSystem/sunRed.png';
@ -524,36 +523,71 @@
</script>
<style lang="less">
.legend-box {
width: 5%;
width: 80px;
height: 100%;
background-color: rgba(33, 40, 54, 0.95);
border-radius: 4px 0px 0px 4px;
padding: 4px;
display: flex;
flex-direction: column;
gap: 10px;
padding: 15px 5px;
.legend-box-item {
width: 100%;
height: 90px;
padding: 10px 0;
cursor: pointer;
background-size: 75%;
background-repeat: no-repeat;
background-position: center; /* 把图片背景居中 */
display: flex;
flex-direction: column;
align-items: center;
width: 70px;
height: 70px;
.legend-box-item-img {
width: 100%;
height: 50px;
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
width: 50px;
height: 60px;
padding-top: 5px;
flex: 1;
cursor: pointer;
background-size: 100% 100%;
text-align: center;
img {
transition: all ease 0.2s;
}
img:hover {
transform: scale(1.1);
}
}
.legend-box-item-name {
width: 100%;
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
transform: translateY(-5px);
text-align: center;
color: white;
font-size: 12px;
margin-top: 6px;
font-size: 13px;
}
}
// .legend-box-item {
// border: 1px solid red;
// width: 100%;
// height: 60px;
// padding: 0px 0;
// cursor: pointer;
// .legend-box-item-img {
// border: 2px solid orange;
// width: 100%;
// height: 50px;
// display: flex;
// justify-content: center; /* */
// align-items: center; /* */
// position: relative;
// background-size: 150% 150%;
// background-repeat: no-repeat;
// img {
// position: absolute;
// transform: scale(1.2);
// }
// }
// .legend-box-item-name {
// width: 100%;
// display: flex;
// justify-content: center; /* */
// align-items: center; /* */
// color: white;
// font-size: 12px;
// }
// }
}
.map-box {
width: 95%;

BIN
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/airConditioner.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

44
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/airConditioner.svg

@ -0,0 +1,44 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_23616" data-name="组 23616" transform="translate(-1080.919 -410.333)">
<g id="组_23408" data-name="组 23408" transform="translate(179.349 -27.487)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
</g>
</g>
<g id="组_23601" data-name="组 23601" transform="translate(914.719 359.997)">
<path id="路径_30239" data-name="路径 30239" d="M190.167,59.733H180.114a.9.9,0,0,0-.914.914V74.966a.917.917,0,0,0,.914.914h10.023a.9.9,0,0,0,.914-.914V60.647a.873.873,0,0,0-.883-.914Zm-6.58,10.054h-.792a.457.457,0,0,1,0-.914h.792a.457.457,0,0,1,0,.914Zm6.58-3.96H180.114V60.647h10.054Z" transform="translate(0)" fill="#0dffff"/>
<path id="路径_30240" data-name="路径 30240" d="M356.236,231.314h-.792a.457.457,0,0,1,0-.914h.792a.457.457,0,1,1,0,.914Z" transform="translate(-172.649 -167.62)" fill="#0dffff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/floorHeating.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

39
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/floorHeating.svg

@ -0,0 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="哇哇哇哇" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<path id="路径_30969" data-name="路径 30969" d="M2.538,0A1.015,1.015,0,0,0,1.523,1.015V12.2a1.015,1.015,0,1,0,2.03,0V1.015A1.015,1.015,0,0,0,2.538,0M5.075,0H4.994A1.015,1.015,0,0,0,3.979,1.015V12.2a1.015,1.015,0,0,0,1.015,1.015h.081A1.015,1.015,0,0,0,6.09,12.2V1.015A1.015,1.015,0,0,0,5.075,0M7.613,0A1.015,1.015,0,0,0,6.6,1.015V12.2a1.015,1.015,0,1,0,2.03,0V1.015A1.015,1.015,0,0,0,7.613,0m2.538,0A1.015,1.015,0,0,0,9.135,1.015V12.2a1.015,1.015,0,1,0,2.03,0V1.015A1.015,1.015,0,0,0,10.151,0m2.538,0a1.015,1.015,0,0,0-1.015,1.015V12.2a1.015,1.015,0,0,0,2.03,0V1.015A1.015,1.015,0,0,0,12.688,0M0,4.06A1.015,1.015,0,0,0,1.015,5.075V3.045A1.015,1.015,0,0,0,0,4.06m0,5.6a1.015,1.015,0,0,0,1.015,1.015V8.641A1.015,1.015,0,0,0,0,9.656M14.23,8.641v2.03a1.015,1.015,0,0,0,0-2.03Zm0-5.59V5.075a1.015,1.015,0,0,0,0-2.03" transform="translate(12 10.76)" fill="#0dffff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/freshAir.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

42
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/freshAir.svg

@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="_123" data-name="123" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<g id="组_23600" data-name="组 23600" transform="translate(11.099 9.004)">
<path id="路径_30237" data-name="路径 30237" d="M17.206,13.929l-6.519-5.9a1.272,1.272,0,0,0-1.745,0l-6.519,5.9a.859.859,0,0,0,.565,1.489h.667v6.468a1.03,1.03,0,0,0,1.027,1.027h9.855a1.03,1.03,0,0,0,1.027-1.027V15.418h1.129a.836.836,0,0,0,.513-1.489Zm-4.414,5.39a3.505,3.505,0,0,1-3.285,1.54V18.7a1.3,1.3,0,0,1-.77-.308L7.35,19.884S5.862,19.216,5.862,16.7H8.018a1.3,1.3,0,0,1,.308-.873l-1.54-1.437A3.625,3.625,0,0,1,10.071,12.9v2.156a1.668,1.668,0,0,1,.873.359l1.489-1.54s1.386.821,1.386,3.285H11.662a.976.976,0,0,1-.257.667l1.386,1.489Z" transform="translate(-2.147 -7.68)" fill="#0dffff"/>
<path id="路径_30238" data-name="路径 30238" d="M454.795,567.435m-.821,0a.821.821,0,1,0,.821-.821A.821.821,0,0,0,453.974,567.435Z" transform="translate(-447.179 -558.208)" fill="#0dffff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/people.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

39
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/people.svg

@ -0,0 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_23408" data-name="组 23408" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<path id="减去_1091" data-name="减去 1091" d="M12.737,15.289H5.349A3.124,3.124,0,0,1,2.395,11.15l.388-1.128A4.462,4.462,0,0,1,7,7.012h5.45a3.968,3.968,0,0,1,2.5.8l.083.06a.155.155,0,0,1-.081.279l-.043,0a1.558,1.558,0,0,0-.412-.044h-.1a3.783,3.783,0,0,0-1.664,7.182Zm1.8-.511h-.073a2.9,2.9,0,0,1,0-5.794h.073a2.9,2.9,0,0,1,0,5.795Zm-1.249-4.239h0l-1.439.869.655.106a3.87,3.87,0,0,0-.065.741,2.024,2.024,0,0,0,2.122,1.787,1.96,1.96,0,0,0,.44-.048,2.256,2.256,0,0,1-1.545-1.934,1.36,1.36,0,0,1,.025-.328l.853.111-.524-.652-.521-.652ZM14.5,12.212h0l.546.63.546.63.717-.459.675-.433-.652-.087a2.783,2.783,0,0,0,.041-.741,2.161,2.161,0,0,0-2.611-1.676,2.227,2.227,0,0,1,1.586,1.893,1.816,1.816,0,0,1,0,.328l-.848-.086ZM1.484,10.4h0l-.086,0a.722.722,0,0,1-.269-.068,1.7,1.7,0,0,1-1.078-2L.089,8.2.3,7.6A2.387,2.387,0,0,1,2.4,5.987l.161-.005H4.781l.054.008a.211.211,0,0,1,.055.386A6.621,6.621,0,0,0,2.641,8.324a7.045,7.045,0,0,0-.832,1.844.311.311,0,0,1-.263.229Zm8.153-4.19a3.1,3.1,0,1,1,3.1-3.1A3.109,3.109,0,0,1,9.637,6.209ZM4.068,5.553A1.665,1.665,0,1,1,5.733,3.888,1.667,1.667,0,0,1,4.068,5.553Z" transform="translate(10.784 9.438)" fill="#0dffff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/temperature.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

39
hx-ai-intelligent/src/view/equipmentControl/image/airConditioningSystem/temperature.svg

@ -0,0 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" transform="translate(0 0)" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_23608" data-name="组 23608" transform="translate(-901.57 -437.538)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.538)">
<g id="蒙版组_396" data-name="蒙版组 396" transform="translate(0 0)" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.286)">
<g id="组_23217" data-name="组 23217" transform="translate(0 50.198) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.42.794a.8.8,0,0,0-.689.4L.9,13.1a.8.8,0,0,0,0,.79L7.731,25.806a.8.8,0,0,0,.689.4H22.064a.8.8,0,0,0,.689-.4l6.831-11.911a.8.8,0,0,0,0-.79L22.753,1.193a.8.8,0,0,0-.689-.4H8.42M8.42,0H22.064a1.588,1.588,0,0,1,1.378.8l6.831,11.911a1.588,1.588,0,0,1,0,1.58L23.442,26.2a1.588,1.588,0,0,1-1.378.8H8.42a1.588,1.588,0,0,1-1.378-.8L.21,14.289a1.588,1.588,0,0,1,0-1.58L7.042.8A1.588,1.588,0,0,1,8.42,0Z" transform="translate(5.148 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.593,1a1,1,0,0,0-.867.5L1.131,16.487a1,1,0,0,0,0,.994L9.726,32.466a1,1,0,0,0,.867.5H27.759a1,1,0,0,0,.867-.5l8.595-14.986a1,1,0,0,0,0-.994L28.626,1.5a1,1,0,0,0-.867-.5H10.593m0-1H27.759a2,2,0,0,1,1.733,1L38.087,15.99a2,2,0,0,1,0,1.988L29.493,32.964a2,2,0,0,1-1.733,1H10.593a2,2,0,0,1-1.733-1L.265,17.978a2,2,0,0,1,0-1.988L8.86,1A2,2,0,0,1,10.593,0Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M18.9,0l8.595,14.986a2,2,0,0,1,0,1.988L18.9,31.96a2,2,0,0,1-1.733,1H0Z" transform="translate(9.676 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.8" rx="0.4" transform="translate(20.999 41.226)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.8" rx="0.4" transform="translate(20.999 8.226)" fill="#14ffff"/>
</g>
</g>
<path id="路径_30559" data-name="路径 30559" d="M16.349,8.773a.493.493,0,0,1-.493-.493A7.578,7.578,0,0,0,8.5.99.495.495,0,0,1,8.5,0h.094a8.555,8.555,0,0,1,8.235,8.165.517.517,0,0,1,0,.115.493.493,0,0,1-.493.493Zm-3.635-.2A4.428,4.428,0,1,1,8.287,4.14a4.428,4.428,0,0,1,4.428,4.436Zm-8.9-3.7L2.627,3.7a.591.591,0,1,1,.821-.821L4.632,4.058a.591.591,0,1,1-.821.821ZM3.132,8.535a.591.591,0,0,1-.587.591H.873a.591.591,0,0,1,0-1.183H2.545a.587.587,0,0,1,.587.587ZM3.81,12.19a.591.591,0,0,1,.821.821l-1.171,1.2a.591.591,0,1,1-.821-.821L3.822,12.2ZM8.287,13.7a.591.591,0,0,1,.591.591v1.676a.591.591,0,1,1-1.179,0v-1.68a.591.591,0,0,1,.587-.591Zm4.481-1.516,1.183,1.183a.591.591,0,0,1-.821.821l-1.2-1.171a.591.591,0,0,1,.821-.821Zm1.027-4.054V8.083h-.029A5.508,5.508,0,0,0,8.583,3.064a.542.542,0,0,1,.049-1.08.55.55,0,0,1,.144,0,6.97,6.97,0,0,1,6.1,5.992v.148a.542.542,0,1,1-1.08,0Z" transform="translate(11.218 9.308)" fill="#0dffff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/CO2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

42
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/CO2.svg

@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_234qqqq08" data-name="组 234qqqq08" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<g id="组_23420" data-name="组 23420" transform="translate(10.561 10.596)">
<path id="路径_30582" data-name="路径 30582" d="M507.613,476.587q-.542,0-.541.85v1.32q0,.842.527.843.555,0,.554-.811v-1.3q0-.905-.541-.9Z" transform="translate(-498.084 -470.787)" fill="#0dffff"/>
<path id="路径_30583" data-name="路径 30583" d="M17.08,155.462a4.156,4.156,0,0,0-1.754-1.375,6.2,6.2,0,0,0-12-.233,4.118,4.118,0,0,0,.792,8.16h9.637a4.116,4.116,0,0,0,3.323-6.552Zm-9.71,2.891a.977.977,0,0,1-.894.408,1.226,1.226,0,0,1-1.04-.388,2.169,2.169,0,0,1-.289-1.286v-.862a2.181,2.181,0,0,1,.3-1.334,1.179,1.179,0,0,1,.965-.374,1.1,1.1,0,0,1,.9.332,1.583,1.583,0,0,1,.276,1.026H6.839a1.516,1.516,0,0,0-.077-.559.288.288,0,0,0-.291-.183q-.539,0-.538.849v1.32a1.16,1.16,0,0,0,.138.65.466.466,0,0,0,.406.194.312.312,0,0,0,.3-.2,1.842,1.842,0,0,0,.1-.708h.761a2.077,2.077,0,0,1-.261,1.119Zm3.484-1.261a2.189,2.189,0,0,1-.289,1.286,1.2,1.2,0,0,1-1.026.382,1.277,1.277,0,0,1-1.027-.366,2.069,2.069,0,0,1-.31-1.307v-.811A2.266,2.266,0,0,1,8.51,154.9a1.244,1.244,0,0,1,1.019-.377,1.158,1.158,0,0,1,1.061.424,2.585,2.585,0,0,1,.265,1.334v.816ZM12.7,158.3v.373H11.3a2.02,2.02,0,0,1,.082-.573,1.83,1.83,0,0,1,.411-.576l.224-.235a1.139,1.139,0,0,0,.191-.237.53.53,0,0,0,.049-.254c0-.2-.076-.3-.23-.3a.211.211,0,0,0-.213.1.988.988,0,0,0-.047.373h-.446v-.1q0-.746.7-.746a.7.7,0,0,1,.534.191.658.658,0,0,1,.177.469.976.976,0,0,1-.315.7l-.363.378a.7.7,0,0,0-.248.435H12.7Z" transform="translate(0 -149.333)" fill="#0dffff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/PM25.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

42
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/PM25.svg

@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_23408qqww" data-name="组 23408qqww" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<g id="组_23422" data-name="组 23422" transform="translate(10.89 11.753)">
<path id="路径_30586" data-name="路径 30586" d="M625.319,233.15a3.208,3.208,0,0,1,2.849.653,1.78,1.78,0,0,0,.649-1.392c0-.958-.471-1.817-1.751-1.5a2.31,2.31,0,0,0-2.062-1.8,2.015,2.015,0,0,0-1.918,1.211A4.347,4.347,0,0,1,625.319,233.15Z" transform="translate(-612.688 -229.111)" fill="#0dffff"/>
<path id="路径_30587" data-name="路径 30587" d="M134.91,271.951c-.528-1.99-2.212-3.967-4.426-3.967-2.572,0-4.418,1.836-4.6,4.761a2.971,2.971,0,0,0-3.007,3.056c0,1.836,1.23,3.357,2.746,3.357h9.66a3.666,3.666,0,0,0,3.383-3.859C138.668,273.186,137.659,271.257,134.91,271.951Zm-7.624,5.308a.977.977,0,1,1,.977-.977A.977.977,0,0,1,127.285,277.259Zm2.194-4.111a.811.811,0,1,1,.811-.811A.811.811,0,0,1,129.479,273.148Zm2.829,2.617a.673.673,0,1,1,.673-.673A.673.673,0,0,1,132.308,275.766ZM135.635,277a1.032,1.032,0,1,1,1.032-1.032A1.032,1.032,0,0,1,135.635,277Z" transform="translate(-122.88 -267.176)" fill="#0dffff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

44
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/a1.svg

@ -0,0 +1,44 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="49.3984375" height="51.1376953125" viewBox="0 0 49.3984375 51.1376953125" fill="none">
<g mask="url(#mask-160_6332)">
<path d="M17.107 38.1809C17.2488 38.4336 17.5132 38.5901 17.7969 38.5892L31.5281 38.5487C31.809 38.5478 32.0712 38.3922 32.2124 38.1423L39.1121 25.9313C39.2546 25.679 39.255 25.3653 39.1131 25.1126L32.2909 12.9583C32.149 12.7056 31.8846 12.5492 31.6009 12.5499L17.8698 12.5905C17.5888 12.5913 17.3267 12.7471 17.1856 12.9969L10.2858 25.2078C10.1433 25.4602 10.1428 25.7739 10.2846 26.0266L17.107 38.1809ZM16.4193 38.5892L9.59699 26.435C9.31249 25.9282 9.31334 25.3035 9.59925 24.7974L16.4989 12.5864C16.7824 12.0848 17.3034 11.7754 17.8675 11.7738L31.5986 11.7332C32.1676 11.7315 32.694 12.0431 32.9785 12.5499L39.8009 24.7042C40.0854 25.211 40.0846 25.8357 39.7986 26.3418L32.8989 38.5528C32.6154 39.0544 32.0945 39.3638 31.5304 39.3654L17.7992 39.406C17.2302 39.4077 16.7038 39.0961 16.4193 38.5892Z" fill="url(#linear_fill_160_6335)" >
</path>
<g opacity="0.2">
<path d="M15.1473 41.4354C15.3258 41.7534 15.6584 41.9503 16.0154 41.9492L33.2907 41.8982C33.6442 41.8972 33.974 41.7013 34.1517 41.387L42.8322 26.0242C43.0116 25.7067 43.0121 25.312 42.8337 24.994L34.2504 9.7026C34.0719 9.38465 33.7393 9.18777 33.3823 9.18881L16.107 9.23982C15.7536 9.24083 15.4237 9.43675 15.2461 9.75103L6.56549 25.1139C6.38611 25.4313 6.38558 25.826 6.56405 26.144L15.1473 41.4354ZM14.2821 41.9493L5.69887 26.6578C5.34089 26.0201 5.34199 25.2341 5.70175 24.5976L14.3824 9.23474C14.739 8.60353 15.3944 8.21429 16.1042 8.21223L33.3795 8.16128C34.0954 8.15912 34.7577 8.55108 35.1156 9.18876L43.6989 24.4802C44.0569 25.1179 44.0557 25.9039 43.696 26.5405L35.0154 41.9034C34.6588 42.5345 34.0034 42.9237 33.2936 42.9258L16.0183 42.9768C15.3024 42.9789 14.6401 42.5869 14.2821 41.9493Z" fill="url(#linear_fill_160_6336)" >
</path>
</g>
<g opacity="0.61">
<path d="M5.70189 24.5976L14.3825 9.23475C14.7391 8.60359 15.3946 8.21444 16.1043 8.21229L33.3796 8.16128C34.0955 8.15917 34.7579 8.55122 35.1157 9.1889L43.6991 24.4803L5.70189 24.5976Z" fill="url(#linear_fill_160_6337)" >
</path>
</g>
<rect x="21.4013671875" y="42.1572265625" width="7" height="0.822857141494751" rx="0.4114285707473755" fill="#14FFFF" >
</rect>
<rect x="21.4013671875" y="8.2138671875" width="7" height="0.822857141494751" rx="0.4114285707473755" fill="#14FFFF" >
</rect>
</g>
<path fill="#0DFFFF" d="M24.9021 31.407C22.2896 31.407 20.1733 29.2494 20.1733 26.5868C20.1733 23.9249 24.9017 18.2322 24.9017 18.2322C24.9017 18.2322 29.6308 23.9245 29.6308 26.5864C29.6323 29.2475 27.5145 31.4066 24.9024 31.4066M24.9024 16.8799C24.9024 16.8799 19.1592 23.3742 19.1592 26.593C19.1592 29.8118 21.7304 32.42 24.9021 32.42C28.0737 32.42 30.6446 29.8106 30.6446 26.5934C30.6446 23.3762 24.9021 16.8807 24.9021 16.8807">
</path>
<path fill="#0DFFFF" d="M24.9021 31.0677C22.4768 31.0677 20.5107 29.1154 20.5107 26.7072C20.5107 24.2986 22.7932 25.5179 24.902 26.7072C27.0199 27.9008 29.293 24.2986 29.293 26.7072C29.293 29.1154 27.3269 31.0677 24.902 31.0677">
</path>
<defs>
<mask id="mask-160_6332" style="mask-type:alpha" maskUnits="userSpaceOnUse">
<rect x="5.4013671875" y="7.7001953125" width="39" height="36" fill="#FFFFFF" >
</rect>
</mask>
<linearGradient id="linear_fill_160_6335" x1="9.627471923828125" y1="25.517822265625" x2="39.83018493652344" y2="25.6212158203125" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#04DFF8" />
<stop offset="0.25519099831581116" stop-color="#0B4975" />
<stop offset="0.7028830051422119" stop-color="#1A5A80" />
<stop offset="1" stop-color="#02E4FB" />
</linearGradient>
<linearGradient id="linear_fill_160_6336" x1="5.73724365234375" y1="25.50390625" x2="43.735755920410156" y2="25.634033203125" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#06E6FF" />
<stop offset="0.175805002450943" stop-color="#004FBF" />
<stop offset="0.8368269801139832" stop-color="#0055CC" />
<stop offset="1" stop-color="#44D2FF" />
</linearGradient>
<linearGradient id="linear_fill_160_6337" x1="25.498855590820312" y1="23.3702392578125" x2="25.194908142089844" y2="8.79345703125" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#06CAF2" stop-opacity="0" />
<stop offset="1" stop-color="#1491FF" />
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/fanMachine.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

41
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/fanMachine.svg

@ -0,0 +1,41 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_23614" data-name="组 23614" transform="translate(-19 -377)">
<g id="组_23408" data-name="组 23408" transform="translate(19 377)">
<g id="组_23223" data-name="组 23223">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
</g>
</g>
<path id="路径_30610" data-name="路径 30610" d="M96,68.934v3.947h12.829V68.934Zm11.348,2.96H103.4v-.987h3.947ZM96,64v3.947h12.829V64Zm11.348,2.96H103.4v-.987h3.947ZM96,73.868v3.947h12.829V73.868Zm11.348,2.96H103.4v-.987h3.947Z" transform="translate(-64 323.665)" fill="#0dffff"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

42
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/humidity.svg

@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="_123344" data-name="123344" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<g id="组_23421" data-name="组 23421" transform="translate(13.758 9.179)">
<path id="路径_30584" data-name="路径 30584" d="M133.743,15.756a4.774,4.774,0,0,1-4.729-4.82c0-2.662,4.728-8.355,4.728-8.355s4.729,5.692,4.729,8.354a4.774,4.774,0,0,1-4.728,4.82m0-14.527S128,7.723,128,10.942a5.743,5.743,0,1,0,11.485,0c0-3.217-5.742-9.713-5.742-9.713" transform="translate(-128 -1.229)" fill="#0dffff"/>
<path id="路径_30585" data-name="路径 30585" d="M221.3,562.257a4.376,4.376,0,0,1-4.391-4.361c0-2.409,2.282-1.189,4.391,0s4.391-2.409,4.391,0a4.376,4.376,0,0,1-4.391,4.361" transform="translate(-215.557 -548.069)" fill="#0dffff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/ventilatingFan.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

39
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/ventilatingFan.svg

@ -0,0 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_2qqq3408" data-name="组 2qqq3408" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<path id="路径_30609" data-name="路径 30609" d="M27.721,2.752c.3.058.6.1.884.178A3.385,3.385,0,0,1,31.09,5.724a5.688,5.688,0,0,1-.153,2.612,2.122,2.122,0,0,0-2.79.568,3.226,3.226,0,0,0-1.624-1.71A2.694,2.694,0,0,1,25.2,5.549a2.341,2.341,0,0,1,2.023-2.742c.123-.007.246-.035.368-.054Zm3.389,9.762a2.147,2.147,0,0,0,.963-2.736,3.566,3.566,0,0,0,2.4-.6,3.8,3.8,0,0,1,1.19-.354,2.148,2.148,0,0,1,2.282,1.814A2.766,2.766,0,0,1,36.6,13.5a3.49,3.49,0,0,1-4.016.057A16.776,16.776,0,0,1,31.11,12.514Zm-3.651-1.966a2.144,2.144,0,0,0,1.894,2.189,3.576,3.576,0,0,0-.687,2.337,3.805,3.805,0,0,1-.33,1.324,2.282,2.282,0,0,1-3.831.157,3.561,3.561,0,0,1,1.343-5.281c.5-.277,1.041-.472,1.611-.725Zm2.4,1.322a1.387,1.387,0,1,1,.989-.408A1.383,1.383,0,0,1,29.86,11.869Z" transform="translate(-10.357 7.208)" fill="#0dffff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/window.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

42
hx-ai-intelligent/src/view/equipmentControl/image/ventilationSystem/window.svg

@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="39" height="36" viewBox="0 0 39 36">
<defs>
<clipPath id="clip-path">
<rect id="矩形_16511" data-name="矩形 16511" width="39" height="36" fill="none"/>
</clipPath>
<linearGradient id="linear-gradient" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#04dff8"/>
<stop offset="0.255" stop-color="#0b4975"/>
<stop offset="0.703" stop-color="#1a5a80"/>
<stop offset="1" stop-color="#02e4fb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.743" y1="0.024" x2="0.256" y2="0.978" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06e6ff"/>
<stop offset="0.176" stop-color="#004fbf"/>
<stop offset="0.837" stop-color="#05c"/>
<stop offset="1" stop-color="#44d2ff"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0.357" y1="0.535" x2="0.811" y2="0.747" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#06caf2" stop-opacity="0"/>
<stop offset="1" stop-color="#1491ff"/>
</linearGradient>
</defs>
<g id="组_23408qqq" data-name="组 23408qqq" transform="translate(-901.57 -437.82)">
<g id="组_23223" data-name="组 23223" transform="translate(901.57 437.82)">
<g id="蒙版组_396" data-name="蒙版组 396" clip-path="url(#clip-path)">
<g id="组_23218" data-name="组 23218" transform="translate(-4.999 -7.947)">
<g id="组_23217" data-name="组 23217" transform="translate(0 51.632) rotate(-90)">
<path id="多边形_141" data-name="多边形 141" d="M8.61.9a.792.792,0,0,0-.7.393L1.081,13.209a.793.793,0,0,0,.01.8L8.216,26.086a.839.839,0,0,0,.709.41l13.937.169a.792.792,0,0,0,.7-.393L30.39,14.36a.793.793,0,0,0-.01-.8L23.255,1.483a.839.839,0,0,0-.709-.41L8.61.9M8.6.1,22.537.273a1.674,1.674,0,0,1,1.417.821l7.125,12.081a1.581,1.581,0,0,1,.02,1.592l-6.83,11.912a1.58,1.58,0,0,1-1.4.787L8.934,27.3a1.674,1.674,0,0,1-1.417-.821L.392,14.394A1.581,1.581,0,0,1,.372,12.8L7.2.891A1.58,1.58,0,0,1,8.6.1Z" transform="translate(5.296 20.226) rotate(-30)" fill="url(#linear-gradient)"/>
<path id="多边形_141-2" data-name="多边形 141" d="M10.832,1.137a1,1,0,0,0-.879.495L1.36,16.618a1,1,0,0,0,.012,1l8.964,15.2a1.056,1.056,0,0,0,.891.516l17.534.212a1,1,0,0,0,.879-.495l8.594-14.986a1,1,0,0,0-.012-1l-8.964-15.2a1.056,1.056,0,0,0-.891-.516L10.832,1.137M10.82.131,28.354.343a2.106,2.106,0,0,1,1.783,1.033l8.964,15.2a1.989,1.989,0,0,1,.025,2L30.532,33.564a1.988,1.988,0,0,1-1.758.99L11.24,34.341a2.106,2.106,0,0,1-1.783-1.033L.493,18.11a1.989,1.989,0,0,1-.025-2L9.062,1.121A1.988,1.988,0,0,1,10.82.131Z" transform="translate(0 19.176) rotate(-30)" opacity="0.2" fill="url(#linear-gradient-2)"/>
<path id="多边形_141-3" data-name="多边形 141" d="M19.3.234l8.964,15.2a1.989,1.989,0,0,1,.025,2L19.7,32.422a1.988,1.988,0,0,1-1.758.99L.408,33.2Z" transform="translate(9.952 14.75) rotate(-30)" opacity="0.61" fill="url(#linear-gradient-3)"/>
</g>
<rect id="矩形_16509" data-name="矩形 16509" width="7" height="0.823" rx="0.411" transform="translate(20.999 42.404)" fill="#14ffff"/>
<rect id="矩形_16510" data-name="矩形 16510" width="7" height="0.823" rx="0.411" transform="translate(20.999 8.461)" fill="#14ffff"/>
</g>
</g>
<g id="组_23486" data-name="组 23486" transform="translate(12.814 10.981)">
<path id="路径_30568" data-name="路径 30568" d="M195.274,14.038a.938.938,0,0,1-.965-.965V12.9h8.745a.315.315,0,0,0,.292-.292V1.316a.315.315,0,0,0-.292-.292H195.6a.315.315,0,0,0-.292.292v.79c0,.2-.088.292-.292.292h-.585c-.2,0-.292-.088-.292-.292V.965A.938.938,0,0,1,195.1,0h8.218a.953.953,0,0,1,1.024.965V12.927a.982.982,0,0,1-.175.731.9.9,0,0,1-.673.38h-8.218Z" transform="translate(-192.613 0)" fill="#0dffff"/>
<path id="路径_30569" data-name="路径 30569" d="M90.161,113.63H83.317l-.117-.117,3.159-11,.088-.117h6.727c.234,0,.234.117.234.117Zm0,0" transform="translate(-83.2 -100.996)" fill="#0dffff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

7
hx-ai-intelligent/src/view/equipmentControl/lightingManage/dialogStyle.less

@ -45,7 +45,12 @@
border: 2px solid transparent;
border-image: linear-gradient(to bottom, #0077ff, #00f6ff, #000000) 1;
.title-img {
padding-top: 6px;
margin-top: 6px;
}
.title-text {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.imgText {

2190
hx-ai-intelligent/src/view/equipmentControl/lightingManage/indexs1.vue

File diff suppressed because it is too large

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

@ -2,14 +2,13 @@
<div class="box-ventilationSystem">
<div class="legend-box">
<template v-for="(item, index) in legend" :key="index">
<div
class="legend-box-item"
:style="{
'background-image': selectIndex === index ? 'url(' + selectImg + ')' : '',
}"
@click="selectLegend(item, index)">
<div class="legend-box-item-img">
<img style="width: 42px" :src="item.url" />
<div class="legend-box-item" @click="selectLegend(item, index)">
<div
class="legend-box-item-img"
:style="{
'background-image': selectIndex === index ? 'url(' + selectImg + ')' : '',
}">
<img :src="item.url" />
</div>
<div class="legend-box-item-name">
{{ item.name }}
@ -260,13 +259,13 @@
<script lang="ts" setup>
import { ref, onMounted, onUnmounted } from 'vue';
//
import temperature from '../image/airConditioningSystem/temperature.png';
import humidity from '../image/ventilationSystem/humidity.png';
import PM25 from '../image/ventilationSystem/PM25.png';
import CO2 from '../image/ventilationSystem/CO2.png';
import ventilatingFan from '../image/ventilationSystem/ventilatingFan.png';
import window from '../image/ventilationSystem/window.png';
import airCurtain from '../image/ventilationSystem/fanMachine.png';
import temperature from '../image/airConditioningSystem/temperature.svg';
import humidity from '../image/ventilationSystem/humidity.svg';
import PM25 from '../image/ventilationSystem/PM25.svg';
import CO2 from '../image/ventilationSystem/CO2.svg';
import ventilatingFan from '../image/ventilationSystem/ventilatingFan.svg';
import window from '../image/ventilationSystem/window.svg';
import airCurtain from '../image/ventilationSystem/fanMachine.svg';
import selectImg from '../image/airConditioningSystem/selectImg.png';
import sunRed from '../image/airConditioningSystem/sunRed.png';
import sunYellow from '../image/airConditioningSystem/sunYellow.png';
@ -476,34 +475,39 @@
</script>
<style lang="less">
.legend-box {
width: 5%;
width: 80px;
height: 100%;
background-color: rgba(33, 40, 54, 0.9);
border-radius: 4px 0px 0px 4px;
padding: 4px;
background-color: rgba(33, 40, 54, 0.95);
display: flex;
flex-direction: column;
gap: 10px;
padding: 15px 5px;
.legend-box-item {
width: 100%;
height: 90px;
padding: 10px 0;
cursor: pointer;
background-size: 75%;
background-repeat: no-repeat;
background-position: center; /* 把图片背景居中 */
display: flex;
flex-direction: column;
align-items: center;
width: 70px;
height: 70px;
.legend-box-item-img {
width: 100%;
height: 50px;
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
width: 50px;
height: 60px;
padding-top: 5px;
flex: 1;
cursor: pointer;
background-size: 100% 100%;
text-align: center;
img {
transition: all ease 0.2s;
}
img:hover {
transform: scale(1.1);
}
}
.legend-box-item-name {
width: 100%;
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
transform: translateY(-5px);
text-align: center;
color: white;
font-size: 12px;
margin-top: 6px;
font-size: 13px;
}
}
}

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

@ -1,6 +1,8 @@
import { http } from '/nerv-lib/util';
import { group } from '/@/api/deviceManage';
import { group, device } from '/@/api/deviceManage';
import { carbonEmissionFactorLibrary, quickCalculation } from '/@/api/carbonEmissionFactorLibrary';
import { dict } from '/@/api';
import { ref } from 'vue';
const tableCalKeyMap = [
{
title: '来源企业',
@ -38,6 +40,54 @@ const tableCalKeyMap = [
},
},
];
const tableCarbonKeyMap = [
{
title: '能源类型',
dataIndex: 'energyTypeName',
// textEllipsis: true,
textNumber: 5,
},
{
title: '设备名称',
textNumber: 10,
dataIndex: 'deviceName',
// textEllipsis: true,
},
{
title: '设备id',
dataIndex: 'deviceInfoCode',
textNumber: 10,
},
{
textNumber: 5,
title: '碳排因子值',
dataIndex: 'emissionFactor',
},
{
title: '设备品牌/型号',
textNumber: 10,
dataIndex: 'deviceModel',
},
{
title: '来源企业',
textNumber: 10,
dataIndex: 'manufacturer',
},
{
title: '分组名称',
textNumber: 10,
dataIndex: 'deviceNameType',
},
{
textNumber: 5,
title: '设备状态',
dataIndex: 'status',
customRender: ({ value }) => {
return value === '0' ? '启用' : '停用';
},
},
];
const tableKeyMap = [
{
title: '来源企业',
@ -333,11 +383,19 @@ export const tableConfig = (el, elGroup, elFormula, defaultParams) => {
};
};
export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => {
export const tableConfigCal = (
el,
elGroup,
elFormula,
defaultParams,
isCarbon,
editCarbonEquipmentRef,
setFactorRef,
) => {
// 计算节点
return {
title: '点位信息',
api: group.queryGroupInfoPage,
api: isCarbon ? group.getCarbonGroupList : group.queryGroupInfoPage,
params: defaultParams.value,
headerActions: [
{
@ -345,9 +403,32 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => {
name: 'GroupPointEdit',
type: 'primary',
handle: (a, b) => {
el.value.toggle();
if (isCarbon) {
editCarbonEquipmentRef.value.toggle();
} else {
el.value.toggle();
}
},
},
isCarbon
? {
label: '关联因子值',
name: 'SetFactor',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
handle: ({ list }) => {
// 过滤出 id 大于 0 的项
const filteredList = list.filter(({ id }) => id > 0);
// 提取出 id 值
const ids = filteredList.map(({ id }) => id);
setFactorRef.value.toggle(ids);
},
}
: {},
{
label: '批量删除',
name: 'GroupPointDelete',
@ -355,11 +436,17 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => {
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
dynamicParams: { ids: 'id[]' },
dynamicParams: isCarbon
? {
deviceInfoCodeList: 'id[]',
}
: {
ids: 'id[]',
},
confirm: true,
isReload: true,
isClearCheck: true,
api: group.delComputeList,
api: isCarbon ? group.deleteCarbonDevice : group.delComputeList,
},
{
label: '批量导出',
@ -425,18 +512,39 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => {
},
],
scroll: { x: 1400 },
columns: tableCalKeyMap,
columns: isCarbon ? tableCarbonKeyMap : tableCalKeyMap,
columnActions: {
title: '操作',
actions: [
{
label: '关联因子',
name: 'SetFactor',
dynamicDisabled: (record) => {
// 这里根据record的某个字段值判断是否禁用删除按钮
return record.id < 0;
},
handle: (row) => {
setFactorRef.value.toggle([row.id]);
},
},
{
label: '删除',
name: 'GroupPointDelete',
dynamicParams: { ids: 'id[]' },
dynamicDisabled: (record) => {
// 这里根据record的某个字段值判断是否禁用删除按钮
return record.id < 0;
},
dynamicParams: isCarbon
? {
deviceInfoCodeList: 'id[]',
}
: {
ids: 'id[]',
},
confirm: true,
isReload: true,
isClearCheck: true,
api: group.delComputeList,
api: isCarbon ? group.deleteCarbonDevice : group.delComputeList,
},
],
},
@ -522,7 +630,338 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => {
},
],
},
// pagination: { pageSizeOptions: false },
pagination: isCarbon ? false : true,
rowKey: 'id',
rowSelection: { checkStrictly: false },
};
};
export const editCarbonEquipmentConfig = (orgId) => {
return ref({
title: '设备信息',
api: device.queryDevicePage,
params: { orgId },
treeConfig: {
header: {
icon: 'deviceType',
title: '设备类别',
},
params: { orgId },
dynamicParams: { deviceCode: 'code' },
defaultExpandAll: true,
api: device.queryDeviceTree,
fieldNames: { title: 'deviceType', key: 'code' },
formConfig: {
schemas: [
{
field: 'energyType',
label: '',
component: 'NsSelectApi',
autoSubmit: true,
componentProps: {
api: () => dict({ params: { dicKey: 'ENERGY_TYPE' } }),
// params: { dicKey: 'ENERGY_TYPE' },
immediate: true,
// resultField: 'data.ENERGY_TYPE',
labelField: 'cnValue',
valueField: 'dicKey',
placeholder: '请选择能耗种类',
autoSelectFirst: true,
},
},
{
field: 'deviceType',
label: '设备名称',
component: 'NsInput',
autoSubmit: true,
componentProps: {
placeholder: '请输入设备类型',
},
},
],
},
},
// rowSelection: null,
rowSelection: true,
// scroll: { x: 2000 },
columns: [
{
title: '设备名称',
dataIndex: 'deviceName',
},
{
title: '设备型号',
dataIndex: 'deviceModel',
},
{
title: 'SN码',
dataIndex: 'snCode',
textNumber: 5,
textEllipsis: true,
},
{
title: '设备一级区域',
dataIndex: 'device1Area',
textWidth: 88,
// width: 130,
textEllipsis: true,
},
{
title: '设备二级区域',
dataIndex: 'device2Area',
textWidth: 88,
// width: 130,
textEllipsis: true,
},
{
title: '设备详细位置',
dataIndex: 'deviceAddress',
textNumber: 5,
textEllipsis: true,
},
],
formConfig: {
schemas: [
{
field: 'areas',
label: '设备区域',
component: 'NsCascader',
format: (record) => {
console.log(record);
return record?.reduce(
(pre, cur) => {
const len = cur?.length - 1;
pre[len].push(cur[len]);
return pre;
},
[[], []],
);
},
fieldMap: ['area1', 'area2'],
componentProps: {
placeholder: '请选择设备区域',
multiple: true,
loadData: (selectedOptions, options) => {
const targetOption = selectedOptions[selectedOptions.length - 1];
if (!selectedOptions.length) {
http.post(device.dropArea, { orgId, filterField: 'DEVICE_AREA' }).then((res) => {
options.value = res.data?.map((item) => {
return { label: item, value: item, children: [], isLeaf: false };
});
});
}
const value = targetOption?.value;
if (targetOption) {
targetOption.loading = true;
http
.post(device.dropArea, { device1Area: value, orgId, filterField: 'DEVICE_AREA' })
.then((res) => {
targetOption.loading = false;
targetOption.children = res.data?.map((item) => {
return { label: item, value: item, children: [], isLeaf: true };
});
});
}
},
},
},
{
field: 'deviceName',
label: '设备名称',
component: 'NsSelectApi',
componentProps: {
placeholder: '请选择设备名称',
api: (params) => {
return http.post(device.dropArea, params).then((res) => {
const result = res.data?.reduce((pre, cur) => {
!pre.includes(cur.deviceName) && pre.push(cur.deviceName);
return pre;
}, []);
return { data: result };
});
},
resultField: 'data',
params: { orgId, filterField: 'DEVICE_NAME_FACTORY' },
// labelField: 'deviceName',
// valueField: 'deviceName',
filterOption: (input: string, option: any) => {
return option.deviceName?.toLowerCase().indexOf(input.toLowerCase()) >= 0;
},
showSearch: true,
immediate: true,
dropdownReload: true,
allowClear: true,
},
},
],
params: {},
},
// pagination: { pageSizeOptions: false },
rowKey: 'deviceInfoCode',
});
};
export const setFactorConfig = (orgId) => {
return ref({
title: '排放因子库',
// api: carbonEmissionFactorLibrary.getTableList,
api: quickCalculation.queryCarbonEmissionPage,
params: { orgId, pageNum: 1, pageSize: 9999 },
treeConfig: {
header: {
icon: 'deviceType',
title: '因子分类',
},
params: { orgId },
dynamicParams: { energyType: 'id' },
defaultExpandAll: true,
// api: carbonEmissionFactorLibrary.getCarbonFactorTree,
api: quickCalculation.carbonQuickTree,
fieldNames: { title: 'energyType', key: 'id' },
formConfig: {
schemas: [
{
field: 'deviceType',
label: '设备名称',
component: 'NsInput',
autoSubmit: true,
componentProps: {
placeholder: '请输入关键字',
},
},
],
},
},
// rowSelection: null,
rowSelection: { type: 'radio' },
// scroll: { x: 2000 },
columns: [
{
title: '序号',
textNumber: 2,
dataIndex: 'address',
customRender: (text: any) => {
return text.index + 1;
},
},
{
title: '因子值',
dataIndex: 'emissionFactors',
textNumber: 3,
},
{
title: '计量单位',
dataIndex: 'carbonEmissionSuffix',
textNumber: 4,
textEllipsis: true,
},
{
title: '更新时间',
dataIndex: 'updateTime',
textWidth: 88,
// width: 130,
textEllipsis: true,
},
{
title: '启用时间',
dataIndex: 'startTime',
textWidth: 88,
// width: 130,
textEllipsis: true,
},
{
title: '结束时间',
dataIndex: 'endTime',
textNumber: 5,
textEllipsis: true,
},
{
title: '数据来源',
dataIndex: 'dataSources',
textNumber: 5,
textEllipsis: true,
},
],
// formConfig: {
// schemas: [
// {
// field: 'areas',
// label: '设备区域',
// component: 'NsCascader',
// format: (record) => {
// console.log(record);
// return record?.reduce(
// (pre, cur) => {
// const len = cur?.length - 1;
// pre[len].push(cur[len]);
// return pre;
// },
// [[], []],
// );
// },
// fieldMap: ['area1', 'area2'],
// componentProps: {
// placeholder: '请选择设备区域',
// multiple: true,
// loadData: (selectedOptions, options) => {
// const targetOption = selectedOptions[selectedOptions.length - 1];
// if (!selectedOptions.length) {
// http.post(device.dropArea, { orgId, filterField: 'DEVICE_AREA' }).then((res) => {
// options.value = res.data?.map((item) => {
// return { label: item, value: item, children: [], isLeaf: false };
// });
// });
// }
// const value = targetOption?.value;
// if (targetOption) {
// targetOption.loading = true;
// http
// .post(device.dropArea, { device1Area: value, orgId, filterField: 'DEVICE_AREA' })
// .then((res) => {
// targetOption.loading = false;
// targetOption.children = res.data?.map((item) => {
// return { label: item, value: item, children: [], isLeaf: true };
// });
// });
// }
// },
// },
// },
// {
// field: 'deviceName',
// label: '设备名称',
// component: 'NsSelectApi',
// componentProps: {
// placeholder: '请选择设备名称',
// api: (params) => {
// return http.post(device.dropArea, params).then((res) => {
// const result = res.data?.reduce((pre, cur) => {
// !pre.includes(cur.deviceName) && pre.push(cur.deviceName);
// return pre;
// }, []);
// return { data: result };
// });
// },
// resultField: 'data',
// params: { orgId, filterField: 'DEVICE_NAME_FACTORY' },
// // labelField: 'deviceName',
// // valueField: 'deviceName',
// filterOption: (input: string, option: any) => {
// return option.deviceName?.toLowerCase().indexOf(input.toLowerCase()) >= 0;
// },
// showSearch: true,
// immediate: true,
// dropdownReload: true,
// allowClear: true,
// },
// },
// ],
// params: {},
// },
// pagination: { pageSizeOptions: false },
rowKey: 'id',
});
};

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

@ -0,0 +1,123 @@
<template>
<a-modal
v-model:visible="visible"
width="60%"
class="custom-class"
title="添加设备"
destroyOnClose
@ok="btnClick"
:cancel="() => (visible = false)"
placement="right">
<template #header>
<div class="custom-header">
<!-- 这里可以放置任何你想要的内容或组件 -->
<h2>自定义标题</h2>
</div>
</template>
<!-- <template #header>
<div class="modal-header">
<span>Modal Title</span>
<a-select placeholder="Select an option" style="width: 150px">
<a-select-option value="option1">Option 1</a-select-option>
<a-select-option value="option2">Option 2</a-select-option>
<a-select-option value="option3">Option 3</a-select-option>
</a-select>
</div>
</template> -->
<div class="custom-select-wrapper">
<a-select
placeholder="请选择"
style="width: 200px"
:options="linkList"
:field-names="{ label: 'orgName', value: 'orgId' }"
@change="handleChange" />
</div>
<div class="drawerContainer">
<ns-view-list-table v-bind="config" ref="carbonEquipment" style="height: 500px" :key="key" />
</div>
</a-modal>
</template>
<script lang="ts" setup>
import { editCarbonEquipmentConfig } from './config';
import { computed, nextTick, ref } from 'vue';
import { NsMessage } from '/nerv-lib/saas';
import { http } from '/nerv-lib/util';
import { group, device } from '/@/api/deviceManage';
const orgId = ref('');
const key = ref(Date.now());
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
orgId.value = result;
// const selectOrgId = ref(orgId.value);
const linkList = JSON.parse(sessionStorage.getItem('LINKLIST')!);
let config = editCarbonEquipmentConfig(orgId.value);
const visible = ref(false);
const carbonEquipment = ref();
// defineOptions({
// name: 'LedgerIndex', // name
// });
const handleChange = (value: string) => {
// selectOrgId.value = value;
config = editCarbonEquipmentConfig(value);
debugger;
key.value = Date.now();
// carbonEquipment.value?.nsTableRef.reload();
// carbonEquipment.value?.nsTableRef.treeReload();
};
const props = defineProps({ params: Object });
const emit = defineEmits(['sure']);
const toggle = () => {
visible.value = !visible.value;
// clearData();
// visible.value && getData(currentId.value);
};
const btnClick = () => {
let selectedRowKeys = carbonEquipment.value?.nsTableRef.tableState.selectedRowKeys;
if (!selectedRowKeys || selectedRowKeys.lenght == 0) {
NsMessage.warn('请选择设备');
return;
}
if (!props.params?.hxDeviceGroupId) {
NsMessage.warn('请选择分组');
return;
}
let params = [];
for (let i = 0; i < selectedRowKeys.length; i++) {
params.push({
orgId: props.params?.orgId,
groupId: props.params?.hxDeviceGroupId,
deviceInfoCode: selectedRowKeys[i],
});
}
http.post(group.addCarbonDevice, params).then(() => {
emit('sure');
NsMessage.success('操作成功');
toggle();
});
};
defineExpose({
toggle,
});
</script>
<style lang="less" scoped>
:deep(.ns-table-search),
:deep(.ns-part-tree),
:deep(.ns-table-main) {
box-shadow: @ns-content-box-shadow;
}
.drawerContainer {
height: 100%;
display: flex;
justify-content: space-between;
}
.custom-select-wrapper {
position: absolute;
top: 10px; /* Adjust based on your modal's positioning */
right: 50px; /* Adjust based on your modal's positioning */
// z-index: 1050; /* Ensure it's above the modal's backdrop */
}
</style>

55
hx-ai-intelligent/src/view/equipmentManage/group/index.vue

@ -4,6 +4,8 @@
<editCalDrawer ref="editDrawerCalRef" :params="defaultParams" @sure="handleOk" />
<editGroup ref="editGroupRef" :params="defaultParams" @sure="handleOk" />
<editFormula ref="editFormulaRef" :params="defaultParams" @sure="handleOk" />
<editCarbonEquipment ref="editCarbonEquipmentRef" :params="defaultParams" @sure="handleOk" />
<setFactor ref="setFactorRef" :params="defaultParams" @sure="handleOk" />
<NsModalFrom ref="modalFormRef" v-bind="nsModalFormConfig" />
<div class="groupContainer">
@ -41,7 +43,24 @@
</ns-tree-api>
</div>
<ns-view-list-table v-show="defaultType" class="table" v-bind="config" ref="tableRef" />
<ns-view-list-table v-show="!defaultType" class="table" v-bind="configCal" ref="tableCalRef" />
<ns-view-list-table
v-show="!defaultType && !isCarbon"
class="table"
v-bind="configCal"
ref="tableCalRef" />
<ns-view-list-table
v-show="!defaultType && isCarbon"
class="table"
v-bind="configCarbon"
ref="tableCalRef">
<!-- <template #bodyCell="{ column, record }">
<template v-if="column.title === '操作'">
<a-button type="link" @click="setStandard(record)" v-if="record.id != selectedKey[0]"
>设为目标值</a-button
>
</template>
</template> -->
</ns-view-list-table>
</div>
</template>
<script lang="ts" setup>
@ -52,6 +71,9 @@
import editCalDrawer from './editCal.vue';
import editGroup from './editGroup.vue';
import editFormula from './editFormula.vue';
import editCarbonEquipment from './editCarbonEquipment.vue';
import setFactor from './setFactor.vue';
import { NsMessage, NsModal } from '/nerv-lib/component';
import NsModalFrom from '/@/components/ns-modal-form.vue';
import { group } from '/@/api/deviceManage';
@ -68,8 +90,12 @@
const editDrawerCalRef = ref();
const editGroupRef = ref();
const editFormulaRef = ref();
const editCarbonEquipmentRef = ref();
const setFactorRef = ref();
const treeRef = ref();
const defaultType = ref(true);
const isCarbon = ref(true);
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
const defaultParams = ref({
orgId: result,
@ -79,7 +105,26 @@
});
const config = tableConfig(editDrawerRef, editGroupRef, editFormulaRef, defaultParams);
const configCal = tableConfigCal(editDrawerCalRef, editGroupRef, editFormulaRef, defaultParams);
const configCal = tableConfigCal(
editDrawerCalRef,
editGroupRef,
editFormulaRef,
defaultParams,
false,
editCarbonEquipmentRef,
setFactorRef,
);
const configCarbon = tableConfigCal(
editDrawerCalRef,
editGroupRef,
editFormulaRef,
defaultParams,
true,
editCarbonEquipmentRef,
setFactorRef,
);
const tConfig = treeConfig(result);
const nsModalFormConfig = ref({
api: group.creatOrUpdate,
@ -184,6 +229,12 @@
defaultType.value
? tableRef.value?.nsTableRef.reload()
: tableCalRef.value?.nsTableRef.reload();
if (energyType == 'CARBON_EMISSIONS') {
isCarbon.value = true;
} else {
isCarbon.value = false;
}
};
const handleOk = () => {

77
hx-ai-intelligent/src/view/equipmentManage/group/setFactor.vue

@ -0,0 +1,77 @@
<template>
<a-modal
v-model:visible="visible"
width="60%"
class="custom-class"
title="关联因子值"
destroyOnClose
@ok="btnClick"
:cancel="() => (visible = false)"
placement="right">
<div class="drawerContainer">
<ns-view-list-table v-bind="config" ref="setFactorRef" style="height: 500px" />
</div>
</a-modal>
</template>
<script lang="ts" setup>
import { setFactorConfig } from './config';
import { computed, nextTick, ref } from 'vue';
import { NsMessage } from '/nerv-lib/saas';
import { http } from '/nerv-lib/util';
import { group, device } from '/@/api/deviceManage';
const orgId = ref('');
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
orgId.value = result;
const config = setFactorConfig(orgId.value);
const visible = ref(false);
const setFactorRef = ref();
const ids = ref();
// defineOptions({
// name: 'LedgerIndex', // name
// });
const props = defineProps({ params: Object });
const emit = defineEmits(['sure']);
const toggle = (idlist) => {
ids.value = idlist;
visible.value = !visible.value;
// clearData();
// visible.value && getData(currentId.value);
};
const btnClick = () => {
let selectedRowKeys = setFactorRef.value?.nsTableRef.tableState.selectedRowKeys;
if (!selectedRowKeys) {
NsMessage.warn('请选择因子');
return;
}
if (!ids.value) {
NsMessage.warn('请选择分组');
return;
}
http
.post(group.updateCarbonFactor, {
deviceInfoCodeList: ids.value,
factorId: selectedRowKeys[0],
})
.then(() => {
emit('sure');
NsMessage.success('操作成功');
toggle([]);
});
};
defineExpose({
toggle,
});
</script>
<style lang="less" scoped>
:deep(.ns-table-search),
:deep(.ns-part-tree),
:deep(.ns-table-main) {
box-shadow: @ns-content-box-shadow;
}
.drawerContainer {
height: 100%;
display: flex;
justify-content: space-between;
}
</style>
Loading…
Cancel
Save