diff --git a/hx-ai-intelligent/src/api/deviceManage.ts b/hx-ai-intelligent/src/api/deviceManage.ts
index d4b2fd4..b0b008d 100644
--- a/hx-ai-intelligent/src/api/deviceManage.ts
+++ b/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`, // 分组管理-碳排放-设置因子
}
diff --git a/hx-ai-intelligent/src/config/app.config.ts b/hx-ai-intelligent/src/config/app.config.ts
index 22f2982..2a80768 100644
--- a/hx-ai-intelligent/src/config/app.config.ts
+++ b/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;
diff --git a/hx-ai-intelligent/src/view/equipmentManage/group/config.ts b/hx-ai-intelligent/src/view/equipmentManage/group/config.ts
index d1c0c36..40615fa 100644
--- a/hx-ai-intelligent/src/view/equipmentManage/group/config.ts
+++ b/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',
+ });
+};
diff --git a/hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue b/hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue
new file mode 100644
index 0000000..6fcedcb
--- /dev/null
+++ b/hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue
@@ -0,0 +1,123 @@
+
+ 自定义标题
+