碳排分组设置前台页面
This commit is contained in:
@@ -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',
|
||||
});
|
||||
};
|
||||
|
Reference in New Issue
Block a user